1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski *
3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file
5*b1cdbd2cSJim Jagielski * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file
7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski *
11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the
17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski * under the License.
19*b1cdbd2cSJim Jagielski *
20*b1cdbd2cSJim Jagielski *************************************************************/
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_xmloff.hxx"
26*b1cdbd2cSJim Jagielski #include "XMLSectionExport.hxx"
27*b1cdbd2cSJim Jagielski #include <rtl/ustring.hxx>
28*b1cdbd2cSJim Jagielski #include <rtl/ustrbuf.hxx>
29*b1cdbd2cSJim Jagielski
30*b1cdbd2cSJim Jagielski #include <vector>
31*b1cdbd2cSJim Jagielski
32*b1cdbd2cSJim Jagielski
33*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XServiceInfo.hpp>
34*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/Locale.hpp>
35*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XIndexReplace.hpp>
36*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertySet.hpp>
37*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/PropertyValue.hpp>
38*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/PropertyValues.hpp>
39*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/PropertyState.hpp>
40*b1cdbd2cSJim Jagielski #include <com/sun/star/text/XText.hpp>
41*b1cdbd2cSJim Jagielski #include <com/sun/star/text/XTextSection.hpp>
42*b1cdbd2cSJim Jagielski #include <com/sun/star/text/SectionFileLink.hpp>
43*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XNamed.hpp>
44*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XNameAccess.hpp>
45*b1cdbd2cSJim Jagielski #include <com/sun/star/text/XDocumentIndex.hpp>
46*b1cdbd2cSJim Jagielski #include <com/sun/star/uno/XInterface.hpp>
47*b1cdbd2cSJim Jagielski #include <com/sun/star/text/BibliographyDataField.hpp>
48*b1cdbd2cSJim Jagielski #include <com/sun/star/text/XTextFieldsSupplier.hpp>
49*b1cdbd2cSJim Jagielski #include <com/sun/star/text/XChapterNumberingSupplier.hpp>
50*b1cdbd2cSJim Jagielski #include <com/sun/star/text/ChapterFormat.hpp> //i90246
51*b1cdbd2cSJim Jagielski #include <xmloff/xmltoken.hxx>
52*b1cdbd2cSJim Jagielski #include "xmloff/xmlnmspe.hxx"
53*b1cdbd2cSJim Jagielski #include <xmloff/families.hxx>
54*b1cdbd2cSJim Jagielski #include <xmloff/xmluconv.hxx>
55*b1cdbd2cSJim Jagielski #include <xmloff/nmspmap.hxx>
56*b1cdbd2cSJim Jagielski #include <xmloff/xmlexp.hxx>
57*b1cdbd2cSJim Jagielski #include <xmloff/xmltkmap.hxx>
58*b1cdbd2cSJim Jagielski #include "txtflde.hxx"
59*b1cdbd2cSJim Jagielski
60*b1cdbd2cSJim Jagielski
61*b1cdbd2cSJim Jagielski
62*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
63*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::text;
64*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
65*b1cdbd2cSJim Jagielski using namespace ::std;
66*b1cdbd2cSJim Jagielski using namespace ::xmloff::token;
67*b1cdbd2cSJim Jagielski
68*b1cdbd2cSJim Jagielski using ::rtl::OUString;
69*b1cdbd2cSJim Jagielski using ::rtl::OUStringBuffer;
70*b1cdbd2cSJim Jagielski using ::com::sun::star::beans::XPropertySet;
71*b1cdbd2cSJim Jagielski using ::com::sun::star::beans::PropertyValue;
72*b1cdbd2cSJim Jagielski using ::com::sun::star::beans::PropertyValues;
73*b1cdbd2cSJim Jagielski using ::com::sun::star::beans::PropertyState;
74*b1cdbd2cSJim Jagielski using ::com::sun::star::container::XIndexReplace;
75*b1cdbd2cSJim Jagielski using ::com::sun::star::container::XNameAccess;
76*b1cdbd2cSJim Jagielski using ::com::sun::star::container::XNamed;
77*b1cdbd2cSJim Jagielski using ::com::sun::star::lang::XServiceInfo;
78*b1cdbd2cSJim Jagielski using ::com::sun::star::lang::Locale;
79*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::XInterface;
80*b1cdbd2cSJim Jagielski
81*b1cdbd2cSJim Jagielski
XMLSectionExport(SvXMLExport & rExp,XMLTextParagraphExport & rParaExp)82*b1cdbd2cSJim Jagielski XMLSectionExport::XMLSectionExport(
83*b1cdbd2cSJim Jagielski SvXMLExport& rExp,
84*b1cdbd2cSJim Jagielski XMLTextParagraphExport& rParaExp)
85*b1cdbd2cSJim Jagielski : sCondition(RTL_CONSTASCII_USTRINGPARAM("Condition"))
86*b1cdbd2cSJim Jagielski , sCreateFromChapter(RTL_CONSTASCII_USTRINGPARAM("CreateFromChapter"))
87*b1cdbd2cSJim Jagielski , sCreateFromEmbeddedObjects(RTL_CONSTASCII_USTRINGPARAM("CreateFromEmbeddedObjects"))
88*b1cdbd2cSJim Jagielski , sCreateFromGraphicObjects(RTL_CONSTASCII_USTRINGPARAM("CreateFromGraphicObjects"))
89*b1cdbd2cSJim Jagielski , sCreateFromLabels(RTL_CONSTASCII_USTRINGPARAM("CreateFromLabels"))
90*b1cdbd2cSJim Jagielski , sCreateFromMarks(RTL_CONSTASCII_USTRINGPARAM("CreateFromMarks"))
91*b1cdbd2cSJim Jagielski , sCreateFromOtherEmbeddedObjects(RTL_CONSTASCII_USTRINGPARAM("CreateFromOtherEmbeddedObjects"))
92*b1cdbd2cSJim Jagielski , sCreateFromOutline(RTL_CONSTASCII_USTRINGPARAM("CreateFromOutline"))
93*b1cdbd2cSJim Jagielski , sCreateFromStarCalc(RTL_CONSTASCII_USTRINGPARAM("CreateFromStarCalc"))
94*b1cdbd2cSJim Jagielski , sCreateFromStarChart(RTL_CONSTASCII_USTRINGPARAM("CreateFromStarChart"))
95*b1cdbd2cSJim Jagielski , sCreateFromStarDraw(RTL_CONSTASCII_USTRINGPARAM("CreateFromStarDraw"))
96*b1cdbd2cSJim Jagielski , sCreateFromStarImage(RTL_CONSTASCII_USTRINGPARAM("CreateFromStarImage"))
97*b1cdbd2cSJim Jagielski , sCreateFromStarMath(RTL_CONSTASCII_USTRINGPARAM("CreateFromStarMath"))
98*b1cdbd2cSJim Jagielski , sCreateFromTables(RTL_CONSTASCII_USTRINGPARAM("CreateFromTables"))
99*b1cdbd2cSJim Jagielski , sCreateFromTextFrames(RTL_CONSTASCII_USTRINGPARAM("CreateFromTextFrames"))
100*b1cdbd2cSJim Jagielski , sDdeCommandElement(RTL_CONSTASCII_USTRINGPARAM("DDECommandElement"))
101*b1cdbd2cSJim Jagielski , sDdeCommandFile(RTL_CONSTASCII_USTRINGPARAM("DDECommandFile"))
102*b1cdbd2cSJim Jagielski , sDdeCommandType(RTL_CONSTASCII_USTRINGPARAM("DDECommandType"))
103*b1cdbd2cSJim Jagielski , sFileLink(RTL_CONSTASCII_USTRINGPARAM("FileLink"))
104*b1cdbd2cSJim Jagielski , sIsCaseSensitive(RTL_CONSTASCII_USTRINGPARAM("IsCaseSensitive"))
105*b1cdbd2cSJim Jagielski , sIsProtected(RTL_CONSTASCII_USTRINGPARAM("IsProtected"))
106*b1cdbd2cSJim Jagielski , sIsVisible(RTL_CONSTASCII_USTRINGPARAM("IsVisible"))
107*b1cdbd2cSJim Jagielski , sLabelCategory(RTL_CONSTASCII_USTRINGPARAM("LabelCategory"))
108*b1cdbd2cSJim Jagielski , sLabelDisplayType(RTL_CONSTASCII_USTRINGPARAM("LabelDisplayType"))
109*b1cdbd2cSJim Jagielski , sLevel(RTL_CONSTASCII_USTRINGPARAM("Level"))
110*b1cdbd2cSJim Jagielski , sLevelFormat(RTL_CONSTASCII_USTRINGPARAM("LevelFormat"))
111*b1cdbd2cSJim Jagielski , sLevelParagraphStyles(RTL_CONSTASCII_USTRINGPARAM("LevelParagraphStyles"))
112*b1cdbd2cSJim Jagielski , sLinkRegion(RTL_CONSTASCII_USTRINGPARAM("LinkRegion"))
113*b1cdbd2cSJim Jagielski , sMainEntryCharacterStyleName(RTL_CONSTASCII_USTRINGPARAM("MainEntryCharacterStyleName"))
114*b1cdbd2cSJim Jagielski , sParaStyleHeading(RTL_CONSTASCII_USTRINGPARAM("ParaStyleHeading"))
115*b1cdbd2cSJim Jagielski , sParaStyleLevel(RTL_CONSTASCII_USTRINGPARAM("ParaStyleLevel"))
116*b1cdbd2cSJim Jagielski , sTitle(RTL_CONSTASCII_USTRINGPARAM("Title"))
117*b1cdbd2cSJim Jagielski , sName(RTL_CONSTASCII_USTRINGPARAM("Name"))
118*b1cdbd2cSJim Jagielski , sUseAlphabeticalSeparators(RTL_CONSTASCII_USTRINGPARAM("UseAlphabeticalSeparators"))
119*b1cdbd2cSJim Jagielski , sUseCombinedEntries(RTL_CONSTASCII_USTRINGPARAM("UseCombinedEntries"))
120*b1cdbd2cSJim Jagielski , sUseDash(RTL_CONSTASCII_USTRINGPARAM("UseDash"))
121*b1cdbd2cSJim Jagielski , sUseKeyAsEntry(RTL_CONSTASCII_USTRINGPARAM("UseKeyAsEntry"))
122*b1cdbd2cSJim Jagielski , sUseLevelFromSource(RTL_CONSTASCII_USTRINGPARAM("UseLevelFromSource"))
123*b1cdbd2cSJim Jagielski , sUsePP(RTL_CONSTASCII_USTRINGPARAM("UsePP"))
124*b1cdbd2cSJim Jagielski , sUseUpperCase(RTL_CONSTASCII_USTRINGPARAM("UseUpperCase"))
125*b1cdbd2cSJim Jagielski , sIsCommaSeparated(RTL_CONSTASCII_USTRINGPARAM("IsCommaSeparated"))
126*b1cdbd2cSJim Jagielski , sIsAutomaticUpdate(RTL_CONSTASCII_USTRINGPARAM("IsAutomaticUpdate"))
127*b1cdbd2cSJim Jagielski , sIsRelativeTabstops(RTL_CONSTASCII_USTRINGPARAM("IsRelativeTabstops"))
128*b1cdbd2cSJim Jagielski , sCreateFromLevelParagraphStyles(RTL_CONSTASCII_USTRINGPARAM("CreateFromLevelParagraphStyles"))
129*b1cdbd2cSJim Jagielski , sDocumentIndex(RTL_CONSTASCII_USTRINGPARAM("DocumentIndex"))
130*b1cdbd2cSJim Jagielski , sContentSection(RTL_CONSTASCII_USTRINGPARAM("ContentSection"))
131*b1cdbd2cSJim Jagielski , sHeaderSection(RTL_CONSTASCII_USTRINGPARAM("HeaderSection"))
132*b1cdbd2cSJim Jagielski
133*b1cdbd2cSJim Jagielski , sTextSection(RTL_CONSTASCII_USTRINGPARAM("TextSection"))
134*b1cdbd2cSJim Jagielski , sIsGlobalDocumentSection(RTL_CONSTASCII_USTRINGPARAM("IsGlobalDocumentSection"))
135*b1cdbd2cSJim Jagielski , sProtectionKey(RTL_CONSTASCII_USTRINGPARAM("ProtectionKey"))
136*b1cdbd2cSJim Jagielski , sSortAlgorithm(RTL_CONSTASCII_USTRINGPARAM("SortAlgorithm"))
137*b1cdbd2cSJim Jagielski , sLocale(RTL_CONSTASCII_USTRINGPARAM("Locale"))
138*b1cdbd2cSJim Jagielski , sUserIndexName(RTL_CONSTASCII_USTRINGPARAM("UserIndexName"))
139*b1cdbd2cSJim Jagielski
140*b1cdbd2cSJim Jagielski , sIsCurrentlyVisible(RTL_CONSTASCII_USTRINGPARAM("IsCurrentlyVisible"))
141*b1cdbd2cSJim Jagielski , sHeadingStyleName(RTL_CONSTASCII_USTRINGPARAM("HeadingStyleName"))
142*b1cdbd2cSJim Jagielski
143*b1cdbd2cSJim Jagielski , rExport(rExp)
144*b1cdbd2cSJim Jagielski , rParaExport(rParaExp)
145*b1cdbd2cSJim Jagielski , bHeadingDummiesExported( sal_False )
146*b1cdbd2cSJim Jagielski {
147*b1cdbd2cSJim Jagielski }
148*b1cdbd2cSJim Jagielski
149*b1cdbd2cSJim Jagielski
ExportSectionStart(const Reference<XTextSection> & rSection,sal_Bool bAutoStyles)150*b1cdbd2cSJim Jagielski void XMLSectionExport::ExportSectionStart(
151*b1cdbd2cSJim Jagielski const Reference<XTextSection> & rSection,
152*b1cdbd2cSJim Jagielski sal_Bool bAutoStyles)
153*b1cdbd2cSJim Jagielski {
154*b1cdbd2cSJim Jagielski Reference<XPropertySet> xPropertySet(rSection, UNO_QUERY);
155*b1cdbd2cSJim Jagielski
156*b1cdbd2cSJim Jagielski // always export section (auto) style
157*b1cdbd2cSJim Jagielski if (bAutoStyles)
158*b1cdbd2cSJim Jagielski {
159*b1cdbd2cSJim Jagielski // get PropertySet and add section style
160*b1cdbd2cSJim Jagielski GetParaExport().Add( XML_STYLE_FAMILY_TEXT_SECTION, xPropertySet );
161*b1cdbd2cSJim Jagielski }
162*b1cdbd2cSJim Jagielski else
163*b1cdbd2cSJim Jagielski {
164*b1cdbd2cSJim Jagielski // always export section style
165*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_TEXT, XML_STYLE_NAME,
166*b1cdbd2cSJim Jagielski GetParaExport().Find(
167*b1cdbd2cSJim Jagielski XML_STYLE_FAMILY_TEXT_SECTION,
168*b1cdbd2cSJim Jagielski xPropertySet, sEmpty ) );
169*b1cdbd2cSJim Jagielski
170*b1cdbd2cSJim Jagielski // xml:id for RDF metadata
171*b1cdbd2cSJim Jagielski GetExport().AddAttributeXmlId(rSection);
172*b1cdbd2cSJim Jagielski
173*b1cdbd2cSJim Jagielski // export index or regular section
174*b1cdbd2cSJim Jagielski Reference<XDocumentIndex> xIndex;
175*b1cdbd2cSJim Jagielski if (GetIndex(rSection, xIndex))
176*b1cdbd2cSJim Jagielski {
177*b1cdbd2cSJim Jagielski if (xIndex.is())
178*b1cdbd2cSJim Jagielski {
179*b1cdbd2cSJim Jagielski // we are an index
180*b1cdbd2cSJim Jagielski ExportIndexStart(xIndex);
181*b1cdbd2cSJim Jagielski }
182*b1cdbd2cSJim Jagielski else
183*b1cdbd2cSJim Jagielski {
184*b1cdbd2cSJim Jagielski // we are an index header
185*b1cdbd2cSJim Jagielski ExportIndexHeaderStart(rSection);
186*b1cdbd2cSJim Jagielski }
187*b1cdbd2cSJim Jagielski }
188*b1cdbd2cSJim Jagielski else
189*b1cdbd2cSJim Jagielski {
190*b1cdbd2cSJim Jagielski // we are not an index
191*b1cdbd2cSJim Jagielski ExportRegularSectionStart(rSection);
192*b1cdbd2cSJim Jagielski }
193*b1cdbd2cSJim Jagielski }
194*b1cdbd2cSJim Jagielski }
195*b1cdbd2cSJim Jagielski
GetIndex(const Reference<XTextSection> & rSection,Reference<XDocumentIndex> & rIndex) const196*b1cdbd2cSJim Jagielski sal_Bool XMLSectionExport::GetIndex(
197*b1cdbd2cSJim Jagielski const Reference<XTextSection> & rSection,
198*b1cdbd2cSJim Jagielski Reference<XDocumentIndex> & rIndex) const
199*b1cdbd2cSJim Jagielski {
200*b1cdbd2cSJim Jagielski // first, reset result
201*b1cdbd2cSJim Jagielski sal_Bool bRet = sal_False;
202*b1cdbd2cSJim Jagielski rIndex = NULL;
203*b1cdbd2cSJim Jagielski
204*b1cdbd2cSJim Jagielski // get section Properties
205*b1cdbd2cSJim Jagielski Reference<XPropertySet> xSectionPropSet(rSection, UNO_QUERY);
206*b1cdbd2cSJim Jagielski
207*b1cdbd2cSJim Jagielski // then check if this section happens to be inside an index
208*b1cdbd2cSJim Jagielski if (xSectionPropSet->getPropertySetInfo()->
209*b1cdbd2cSJim Jagielski hasPropertyByName(sDocumentIndex))
210*b1cdbd2cSJim Jagielski {
211*b1cdbd2cSJim Jagielski Any aAny = xSectionPropSet->getPropertyValue(sDocumentIndex);
212*b1cdbd2cSJim Jagielski Reference<XDocumentIndex> xDocumentIndex;
213*b1cdbd2cSJim Jagielski aAny >>= xDocumentIndex;
214*b1cdbd2cSJim Jagielski
215*b1cdbd2cSJim Jagielski // OK, are we inside of an index
216*b1cdbd2cSJim Jagielski if (xDocumentIndex.is())
217*b1cdbd2cSJim Jagielski {
218*b1cdbd2cSJim Jagielski // is the enclosing index identical with "our" section?
219*b1cdbd2cSJim Jagielski Reference<XPropertySet> xIndexPropSet(xDocumentIndex, UNO_QUERY);
220*b1cdbd2cSJim Jagielski aAny = xIndexPropSet->getPropertyValue(sContentSection);
221*b1cdbd2cSJim Jagielski Reference<XTextSection> xEnclosingSection;
222*b1cdbd2cSJim Jagielski aAny >>= xEnclosingSection;
223*b1cdbd2cSJim Jagielski
224*b1cdbd2cSJim Jagielski // if the enclosing section is "our" section, then we are an index!
225*b1cdbd2cSJim Jagielski if (rSection == xEnclosingSection)
226*b1cdbd2cSJim Jagielski {
227*b1cdbd2cSJim Jagielski rIndex = xDocumentIndex;
228*b1cdbd2cSJim Jagielski bRet = sal_True;
229*b1cdbd2cSJim Jagielski }
230*b1cdbd2cSJim Jagielski // else: index header or regular section
231*b1cdbd2cSJim Jagielski
232*b1cdbd2cSJim Jagielski // is the enclosing index identical with the header section?
233*b1cdbd2cSJim Jagielski aAny = xIndexPropSet->getPropertyValue(sHeaderSection);
234*b1cdbd2cSJim Jagielski // now mis-named: contains header section
235*b1cdbd2cSJim Jagielski aAny >>= xEnclosingSection;
236*b1cdbd2cSJim Jagielski
237*b1cdbd2cSJim Jagielski // if the enclosing section is "our" section, then we are an index!
238*b1cdbd2cSJim Jagielski if (rSection == xEnclosingSection)
239*b1cdbd2cSJim Jagielski {
240*b1cdbd2cSJim Jagielski bRet = sal_True;
241*b1cdbd2cSJim Jagielski }
242*b1cdbd2cSJim Jagielski // else: regular section
243*b1cdbd2cSJim Jagielski }
244*b1cdbd2cSJim Jagielski // else: we aren't even inside of an index
245*b1cdbd2cSJim Jagielski }
246*b1cdbd2cSJim Jagielski // else: we don't even know what an index is.
247*b1cdbd2cSJim Jagielski
248*b1cdbd2cSJim Jagielski return bRet;
249*b1cdbd2cSJim Jagielski }
250*b1cdbd2cSJim Jagielski
251*b1cdbd2cSJim Jagielski
ExportSectionEnd(const Reference<XTextSection> & rSection,sal_Bool bAutoStyles)252*b1cdbd2cSJim Jagielski void XMLSectionExport::ExportSectionEnd(
253*b1cdbd2cSJim Jagielski const Reference<XTextSection> & rSection,
254*b1cdbd2cSJim Jagielski sal_Bool bAutoStyles)
255*b1cdbd2cSJim Jagielski {
256*b1cdbd2cSJim Jagielski // no end section for styles
257*b1cdbd2cSJim Jagielski if (!bAutoStyles)
258*b1cdbd2cSJim Jagielski {
259*b1cdbd2cSJim Jagielski enum XMLTokenEnum eElement = XML_TOKEN_INVALID;
260*b1cdbd2cSJim Jagielski
261*b1cdbd2cSJim Jagielski // export index or regular section end
262*b1cdbd2cSJim Jagielski Reference<XDocumentIndex> xIndex;
263*b1cdbd2cSJim Jagielski if (GetIndex(rSection, xIndex))
264*b1cdbd2cSJim Jagielski {
265*b1cdbd2cSJim Jagielski if (xIndex.is())
266*b1cdbd2cSJim Jagielski {
267*b1cdbd2cSJim Jagielski // index end: close index body element
268*b1cdbd2cSJim Jagielski GetExport().EndElement( XML_NAMESPACE_TEXT, XML_INDEX_BODY,
269*b1cdbd2cSJim Jagielski sal_True );
270*b1cdbd2cSJim Jagielski GetExport().IgnorableWhitespace();
271*b1cdbd2cSJim Jagielski
272*b1cdbd2cSJim Jagielski switch (MapSectionType(xIndex->getServiceName()))
273*b1cdbd2cSJim Jagielski {
274*b1cdbd2cSJim Jagielski case TEXT_SECTION_TYPE_TOC:
275*b1cdbd2cSJim Jagielski eElement = XML_TABLE_OF_CONTENT;
276*b1cdbd2cSJim Jagielski break;
277*b1cdbd2cSJim Jagielski
278*b1cdbd2cSJim Jagielski case TEXT_SECTION_TYPE_ILLUSTRATION:
279*b1cdbd2cSJim Jagielski eElement = XML_ILLUSTRATION_INDEX;
280*b1cdbd2cSJim Jagielski break;
281*b1cdbd2cSJim Jagielski
282*b1cdbd2cSJim Jagielski case TEXT_SECTION_TYPE_ALPHABETICAL:
283*b1cdbd2cSJim Jagielski eElement = XML_ALPHABETICAL_INDEX;
284*b1cdbd2cSJim Jagielski break;
285*b1cdbd2cSJim Jagielski
286*b1cdbd2cSJim Jagielski case TEXT_SECTION_TYPE_TABLE:
287*b1cdbd2cSJim Jagielski eElement = XML_TABLE_INDEX;
288*b1cdbd2cSJim Jagielski break;
289*b1cdbd2cSJim Jagielski
290*b1cdbd2cSJim Jagielski case TEXT_SECTION_TYPE_OBJECT:
291*b1cdbd2cSJim Jagielski eElement = XML_OBJECT_INDEX;
292*b1cdbd2cSJim Jagielski break;
293*b1cdbd2cSJim Jagielski
294*b1cdbd2cSJim Jagielski case TEXT_SECTION_TYPE_USER:
295*b1cdbd2cSJim Jagielski eElement = XML_USER_INDEX;
296*b1cdbd2cSJim Jagielski break;
297*b1cdbd2cSJim Jagielski
298*b1cdbd2cSJim Jagielski case TEXT_SECTION_TYPE_BIBLIOGRAPHY:
299*b1cdbd2cSJim Jagielski eElement = XML_BIBLIOGRAPHY;
300*b1cdbd2cSJim Jagielski break;
301*b1cdbd2cSJim Jagielski
302*b1cdbd2cSJim Jagielski default:
303*b1cdbd2cSJim Jagielski OSL_ENSURE(false, "unknown index type");
304*b1cdbd2cSJim Jagielski // default: skip index!
305*b1cdbd2cSJim Jagielski break;
306*b1cdbd2cSJim Jagielski }
307*b1cdbd2cSJim Jagielski }
308*b1cdbd2cSJim Jagielski else
309*b1cdbd2cSJim Jagielski {
310*b1cdbd2cSJim Jagielski eElement = XML_INDEX_TITLE;
311*b1cdbd2cSJim Jagielski }
312*b1cdbd2cSJim Jagielski }
313*b1cdbd2cSJim Jagielski else
314*b1cdbd2cSJim Jagielski {
315*b1cdbd2cSJim Jagielski eElement = XML_SECTION;
316*b1cdbd2cSJim Jagielski }
317*b1cdbd2cSJim Jagielski
318*b1cdbd2cSJim Jagielski if (XML_TOKEN_INVALID != eElement)
319*b1cdbd2cSJim Jagielski {
320*b1cdbd2cSJim Jagielski // any old attributes?
321*b1cdbd2cSJim Jagielski GetExport().CheckAttrList();
322*b1cdbd2cSJim Jagielski
323*b1cdbd2cSJim Jagielski // element surrounded by whitespace
324*b1cdbd2cSJim Jagielski GetExport().EndElement( XML_NAMESPACE_TEXT, eElement, sal_True);
325*b1cdbd2cSJim Jagielski GetExport().IgnorableWhitespace();
326*b1cdbd2cSJim Jagielski }
327*b1cdbd2cSJim Jagielski else
328*b1cdbd2cSJim Jagielski {
329*b1cdbd2cSJim Jagielski OSL_ENSURE(false, "Need element name!");
330*b1cdbd2cSJim Jagielski }
331*b1cdbd2cSJim Jagielski }
332*b1cdbd2cSJim Jagielski // else: autostyles -> ignore
333*b1cdbd2cSJim Jagielski }
334*b1cdbd2cSJim Jagielski
ExportIndexStart(const Reference<XDocumentIndex> & rIndex)335*b1cdbd2cSJim Jagielski void XMLSectionExport::ExportIndexStart(
336*b1cdbd2cSJim Jagielski const Reference<XDocumentIndex> & rIndex)
337*b1cdbd2cSJim Jagielski {
338*b1cdbd2cSJim Jagielski // get PropertySet
339*b1cdbd2cSJim Jagielski Reference<XPropertySet> xPropertySet(rIndex, UNO_QUERY);
340*b1cdbd2cSJim Jagielski
341*b1cdbd2cSJim Jagielski switch (MapSectionType(rIndex->getServiceName()))
342*b1cdbd2cSJim Jagielski {
343*b1cdbd2cSJim Jagielski case TEXT_SECTION_TYPE_TOC:
344*b1cdbd2cSJim Jagielski ExportTableOfContentStart(xPropertySet);
345*b1cdbd2cSJim Jagielski break;
346*b1cdbd2cSJim Jagielski
347*b1cdbd2cSJim Jagielski case TEXT_SECTION_TYPE_ILLUSTRATION:
348*b1cdbd2cSJim Jagielski ExportIllustrationIndexStart(xPropertySet);
349*b1cdbd2cSJim Jagielski break;
350*b1cdbd2cSJim Jagielski
351*b1cdbd2cSJim Jagielski case TEXT_SECTION_TYPE_ALPHABETICAL:
352*b1cdbd2cSJim Jagielski ExportAlphabeticalIndexStart(xPropertySet);
353*b1cdbd2cSJim Jagielski break;
354*b1cdbd2cSJim Jagielski
355*b1cdbd2cSJim Jagielski case TEXT_SECTION_TYPE_TABLE:
356*b1cdbd2cSJim Jagielski ExportTableIndexStart(xPropertySet);
357*b1cdbd2cSJim Jagielski break;
358*b1cdbd2cSJim Jagielski
359*b1cdbd2cSJim Jagielski case TEXT_SECTION_TYPE_OBJECT:
360*b1cdbd2cSJim Jagielski ExportObjectIndexStart(xPropertySet);
361*b1cdbd2cSJim Jagielski break;
362*b1cdbd2cSJim Jagielski
363*b1cdbd2cSJim Jagielski case TEXT_SECTION_TYPE_USER:
364*b1cdbd2cSJim Jagielski ExportUserIndexStart(xPropertySet);
365*b1cdbd2cSJim Jagielski break;
366*b1cdbd2cSJim Jagielski
367*b1cdbd2cSJim Jagielski case TEXT_SECTION_TYPE_BIBLIOGRAPHY:
368*b1cdbd2cSJim Jagielski ExportBibliographyStart(xPropertySet);
369*b1cdbd2cSJim Jagielski break;
370*b1cdbd2cSJim Jagielski
371*b1cdbd2cSJim Jagielski default:
372*b1cdbd2cSJim Jagielski // skip index
373*b1cdbd2cSJim Jagielski OSL_ENSURE(false, "unknown index type");
374*b1cdbd2cSJim Jagielski break;
375*b1cdbd2cSJim Jagielski }
376*b1cdbd2cSJim Jagielski }
377*b1cdbd2cSJim Jagielski
ExportIndexHeaderStart(const Reference<XTextSection> & rSection)378*b1cdbd2cSJim Jagielski void XMLSectionExport::ExportIndexHeaderStart(
379*b1cdbd2cSJim Jagielski const Reference<XTextSection> & rSection)
380*b1cdbd2cSJim Jagielski {
381*b1cdbd2cSJim Jagielski // export name, dammit!
382*b1cdbd2cSJim Jagielski Reference<XNamed> xName(rSection, UNO_QUERY);
383*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_TEXT, XML_NAME, xName->getName());
384*b1cdbd2cSJim Jagielski
385*b1cdbd2cSJim Jagielski // format already handled -> export only start element
386*b1cdbd2cSJim Jagielski GetExport().StartElement( XML_NAMESPACE_TEXT, XML_INDEX_TITLE, sal_True );
387*b1cdbd2cSJim Jagielski GetExport().IgnorableWhitespace();
388*b1cdbd2cSJim Jagielski }
389*b1cdbd2cSJim Jagielski
390*b1cdbd2cSJim Jagielski
391*b1cdbd2cSJim Jagielski SvXMLEnumStringMapEntry __READONLY_DATA aIndexTypeMap[] =
392*b1cdbd2cSJim Jagielski {
393*b1cdbd2cSJim Jagielski ENUM_STRING_MAP_ENTRY( "com.sun.star.text.ContentIndex", TEXT_SECTION_TYPE_TOC ),
394*b1cdbd2cSJim Jagielski ENUM_STRING_MAP_ENTRY( "com.sun.star.text.DocumentIndex", TEXT_SECTION_TYPE_ALPHABETICAL ),
395*b1cdbd2cSJim Jagielski ENUM_STRING_MAP_ENTRY( "com.sun.star.text.TableIndex", TEXT_SECTION_TYPE_TABLE ),
396*b1cdbd2cSJim Jagielski ENUM_STRING_MAP_ENTRY( "com.sun.star.text.ObjectIndex", TEXT_SECTION_TYPE_OBJECT ),
397*b1cdbd2cSJim Jagielski ENUM_STRING_MAP_ENTRY( "com.sun.star.text.Bibliography", TEXT_SECTION_TYPE_BIBLIOGRAPHY ),
398*b1cdbd2cSJim Jagielski ENUM_STRING_MAP_ENTRY( "com.sun.star.text.UserIndex", TEXT_SECTION_TYPE_USER ),
399*b1cdbd2cSJim Jagielski ENUM_STRING_MAP_ENTRY( "com.sun.star.text.IllustrationsIndex", TEXT_SECTION_TYPE_ILLUSTRATION ),
400*b1cdbd2cSJim Jagielski ENUM_STRING_MAP_END()
401*b1cdbd2cSJim Jagielski };
402*b1cdbd2cSJim Jagielski
MapSectionType(const OUString & rServiceName)403*b1cdbd2cSJim Jagielski enum SectionTypeEnum XMLSectionExport::MapSectionType(
404*b1cdbd2cSJim Jagielski const OUString& rServiceName)
405*b1cdbd2cSJim Jagielski {
406*b1cdbd2cSJim Jagielski enum SectionTypeEnum eType = TEXT_SECTION_TYPE_UNKNOWN;
407*b1cdbd2cSJim Jagielski
408*b1cdbd2cSJim Jagielski sal_uInt16 nTmp;
409*b1cdbd2cSJim Jagielski if (SvXMLUnitConverter::convertEnum(nTmp, rServiceName, aIndexTypeMap))
410*b1cdbd2cSJim Jagielski {
411*b1cdbd2cSJim Jagielski eType = (enum SectionTypeEnum)nTmp;
412*b1cdbd2cSJim Jagielski }
413*b1cdbd2cSJim Jagielski
414*b1cdbd2cSJim Jagielski // TODO: index header section types, etc.
415*b1cdbd2cSJim Jagielski
416*b1cdbd2cSJim Jagielski return eType;
417*b1cdbd2cSJim Jagielski }
418*b1cdbd2cSJim Jagielski
ExportRegularSectionStart(const Reference<XTextSection> & rSection)419*b1cdbd2cSJim Jagielski void XMLSectionExport::ExportRegularSectionStart(
420*b1cdbd2cSJim Jagielski const Reference<XTextSection> & rSection)
421*b1cdbd2cSJim Jagielski {
422*b1cdbd2cSJim Jagielski // style name already handled in ExportSectionStart(...)
423*b1cdbd2cSJim Jagielski
424*b1cdbd2cSJim Jagielski Reference<XNamed> xName(rSection, UNO_QUERY);
425*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_TEXT, XML_NAME, xName->getName());
426*b1cdbd2cSJim Jagielski
427*b1cdbd2cSJim Jagielski // get XPropertySet for other values
428*b1cdbd2cSJim Jagielski Reference<XPropertySet> xPropSet(rSection, UNO_QUERY);
429*b1cdbd2cSJim Jagielski Any aAny;
430*b1cdbd2cSJim Jagielski
431*b1cdbd2cSJim Jagielski // condition and display
432*b1cdbd2cSJim Jagielski aAny = xPropSet->getPropertyValue(sCondition);
433*b1cdbd2cSJim Jagielski OUString sCond;
434*b1cdbd2cSJim Jagielski aAny >>= sCond;
435*b1cdbd2cSJim Jagielski enum XMLTokenEnum eDisplay = XML_TOKEN_INVALID;
436*b1cdbd2cSJim Jagielski if (sCond.getLength() > 0)
437*b1cdbd2cSJim Jagielski {
438*b1cdbd2cSJim Jagielski OUString sQValue =
439*b1cdbd2cSJim Jagielski GetExport().GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_OOOW,
440*b1cdbd2cSJim Jagielski sCond, sal_False );
441*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_TEXT, XML_CONDITION, sQValue);
442*b1cdbd2cSJim Jagielski eDisplay = XML_CONDITION;
443*b1cdbd2cSJim Jagielski
444*b1cdbd2cSJim Jagielski // #97450# store hidden-status (of conditional sections only)
445*b1cdbd2cSJim Jagielski aAny = xPropSet->getPropertyValue(sIsCurrentlyVisible);
446*b1cdbd2cSJim Jagielski if (! *(sal_Bool*)aAny.getValue())
447*b1cdbd2cSJim Jagielski {
448*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_TEXT, XML_IS_HIDDEN,
449*b1cdbd2cSJim Jagielski XML_TRUE);
450*b1cdbd2cSJim Jagielski }
451*b1cdbd2cSJim Jagielski }
452*b1cdbd2cSJim Jagielski else
453*b1cdbd2cSJim Jagielski {
454*b1cdbd2cSJim Jagielski eDisplay = XML_NONE;
455*b1cdbd2cSJim Jagielski }
456*b1cdbd2cSJim Jagielski aAny = xPropSet->getPropertyValue(sIsVisible);
457*b1cdbd2cSJim Jagielski if (! *(sal_Bool*)aAny.getValue())
458*b1cdbd2cSJim Jagielski {
459*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_TEXT, XML_DISPLAY, eDisplay);
460*b1cdbd2cSJim Jagielski }
461*b1cdbd2cSJim Jagielski
462*b1cdbd2cSJim Jagielski // protect + protection key
463*b1cdbd2cSJim Jagielski aAny = xPropSet->getPropertyValue(sIsProtected);
464*b1cdbd2cSJim Jagielski if (*(sal_Bool*)aAny.getValue())
465*b1cdbd2cSJim Jagielski {
466*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_TEXT, XML_PROTECTED, XML_TRUE);
467*b1cdbd2cSJim Jagielski }
468*b1cdbd2cSJim Jagielski Sequence<sal_Int8> aPassword;
469*b1cdbd2cSJim Jagielski xPropSet->getPropertyValue(sProtectionKey) >>= aPassword;
470*b1cdbd2cSJim Jagielski if (aPassword.getLength() > 0)
471*b1cdbd2cSJim Jagielski {
472*b1cdbd2cSJim Jagielski OUStringBuffer aBuffer;
473*b1cdbd2cSJim Jagielski SvXMLUnitConverter::encodeBase64(aBuffer, aPassword);
474*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_TEXT, XML_PROTECTION_KEY,
475*b1cdbd2cSJim Jagielski aBuffer.makeStringAndClear());
476*b1cdbd2cSJim Jagielski }
477*b1cdbd2cSJim Jagielski
478*b1cdbd2cSJim Jagielski // export element
479*b1cdbd2cSJim Jagielski GetExport().IgnorableWhitespace();
480*b1cdbd2cSJim Jagielski GetExport().StartElement( XML_NAMESPACE_TEXT, XML_SECTION, sal_True );
481*b1cdbd2cSJim Jagielski
482*b1cdbd2cSJim Jagielski // data source
483*b1cdbd2cSJim Jagielski // unfortunately, we have to test all relevant strings for non-zero length
484*b1cdbd2cSJim Jagielski aAny = xPropSet->getPropertyValue(sFileLink);
485*b1cdbd2cSJim Jagielski SectionFileLink aFileLink;
486*b1cdbd2cSJim Jagielski aAny >>= aFileLink;
487*b1cdbd2cSJim Jagielski
488*b1cdbd2cSJim Jagielski aAny = xPropSet->getPropertyValue(sLinkRegion);
489*b1cdbd2cSJim Jagielski OUString sRegionName;
490*b1cdbd2cSJim Jagielski aAny >>= sRegionName;
491*b1cdbd2cSJim Jagielski
492*b1cdbd2cSJim Jagielski if ( (aFileLink.FileURL.getLength() > 0) ||
493*b1cdbd2cSJim Jagielski (aFileLink.FilterName.getLength() > 0) ||
494*b1cdbd2cSJim Jagielski (sRegionName.getLength() > 0) )
495*b1cdbd2cSJim Jagielski {
496*b1cdbd2cSJim Jagielski if (aFileLink.FileURL.getLength() > 0)
497*b1cdbd2cSJim Jagielski {
498*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_XLINK, XML_HREF,
499*b1cdbd2cSJim Jagielski GetExport().GetRelativeReference( aFileLink.FileURL) );
500*b1cdbd2cSJim Jagielski }
501*b1cdbd2cSJim Jagielski
502*b1cdbd2cSJim Jagielski if (aFileLink.FilterName.getLength() > 0)
503*b1cdbd2cSJim Jagielski {
504*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_TEXT, XML_FILTER_NAME,
505*b1cdbd2cSJim Jagielski aFileLink.FilterName);
506*b1cdbd2cSJim Jagielski }
507*b1cdbd2cSJim Jagielski
508*b1cdbd2cSJim Jagielski if (sRegionName.getLength() > 0)
509*b1cdbd2cSJim Jagielski {
510*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_TEXT, XML_SECTION_NAME,
511*b1cdbd2cSJim Jagielski sRegionName);
512*b1cdbd2cSJim Jagielski }
513*b1cdbd2cSJim Jagielski
514*b1cdbd2cSJim Jagielski SvXMLElementExport aElem(GetExport(),
515*b1cdbd2cSJim Jagielski XML_NAMESPACE_TEXT, XML_SECTION_SOURCE,
516*b1cdbd2cSJim Jagielski sal_True, sal_True);
517*b1cdbd2cSJim Jagielski }
518*b1cdbd2cSJim Jagielski else
519*b1cdbd2cSJim Jagielski {
520*b1cdbd2cSJim Jagielski // check for DDE first
521*b1cdbd2cSJim Jagielski if (xPropSet->getPropertySetInfo()->hasPropertyByName(sDdeCommandFile))
522*b1cdbd2cSJim Jagielski {
523*b1cdbd2cSJim Jagielski // data source DDE
524*b1cdbd2cSJim Jagielski // unfortunately, we have to test all relevant strings for
525*b1cdbd2cSJim Jagielski // non-zero length
526*b1cdbd2cSJim Jagielski aAny = xPropSet->getPropertyValue(sDdeCommandFile);
527*b1cdbd2cSJim Jagielski OUString sApplication;
528*b1cdbd2cSJim Jagielski aAny >>= sApplication;
529*b1cdbd2cSJim Jagielski aAny = xPropSet->getPropertyValue(sDdeCommandType);
530*b1cdbd2cSJim Jagielski OUString sTopic;
531*b1cdbd2cSJim Jagielski aAny >>= sTopic;
532*b1cdbd2cSJim Jagielski aAny = xPropSet->getPropertyValue(sDdeCommandElement);
533*b1cdbd2cSJim Jagielski OUString sItem;
534*b1cdbd2cSJim Jagielski aAny >>= sItem;
535*b1cdbd2cSJim Jagielski
536*b1cdbd2cSJim Jagielski if ( (sApplication.getLength() > 0) ||
537*b1cdbd2cSJim Jagielski (sTopic.getLength() > 0) ||
538*b1cdbd2cSJim Jagielski (sItem.getLength() > 0 ) )
539*b1cdbd2cSJim Jagielski {
540*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_OFFICE,
541*b1cdbd2cSJim Jagielski XML_DDE_APPLICATION, sApplication);
542*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_OFFICE, XML_DDE_TOPIC,
543*b1cdbd2cSJim Jagielski sTopic);
544*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_OFFICE, XML_DDE_ITEM,
545*b1cdbd2cSJim Jagielski sItem);
546*b1cdbd2cSJim Jagielski
547*b1cdbd2cSJim Jagielski aAny = xPropSet->getPropertyValue(sIsAutomaticUpdate);
548*b1cdbd2cSJim Jagielski if (*(sal_Bool*)aAny.getValue())
549*b1cdbd2cSJim Jagielski {
550*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_OFFICE,
551*b1cdbd2cSJim Jagielski XML_AUTOMATIC_UPDATE, XML_TRUE);
552*b1cdbd2cSJim Jagielski }
553*b1cdbd2cSJim Jagielski
554*b1cdbd2cSJim Jagielski SvXMLElementExport aElem(GetExport(),
555*b1cdbd2cSJim Jagielski XML_NAMESPACE_OFFICE,
556*b1cdbd2cSJim Jagielski XML_DDE_SOURCE, sal_True, sal_True);
557*b1cdbd2cSJim Jagielski }
558*b1cdbd2cSJim Jagielski // else: no DDE data source
559*b1cdbd2cSJim Jagielski }
560*b1cdbd2cSJim Jagielski // else: no DDE on this system
561*b1cdbd2cSJim Jagielski }
562*b1cdbd2cSJim Jagielski }
563*b1cdbd2cSJim Jagielski
ExportTableOfContentStart(const Reference<XPropertySet> & rPropertySet)564*b1cdbd2cSJim Jagielski void XMLSectionExport::ExportTableOfContentStart(
565*b1cdbd2cSJim Jagielski const Reference<XPropertySet> & rPropertySet)
566*b1cdbd2cSJim Jagielski {
567*b1cdbd2cSJim Jagielski // export TOC element start
568*b1cdbd2cSJim Jagielski ExportBaseIndexStart(XML_TABLE_OF_CONTENT, rPropertySet);
569*b1cdbd2cSJim Jagielski
570*b1cdbd2cSJim Jagielski // scope for table-of-content-source element
571*b1cdbd2cSJim Jagielski {
572*b1cdbd2cSJim Jagielski
573*b1cdbd2cSJim Jagielski Any aAny;
574*b1cdbd2cSJim Jagielski
575*b1cdbd2cSJim Jagielski // TOC specific index source attributes:
576*b1cdbd2cSJim Jagielski
577*b1cdbd2cSJim Jagielski // outline-level: 1..10
578*b1cdbd2cSJim Jagielski sal_Int16 nLevel = sal_Int16();
579*b1cdbd2cSJim Jagielski if( rPropertySet->getPropertyValue(sLevel) >>= nLevel )
580*b1cdbd2cSJim Jagielski {
581*b1cdbd2cSJim Jagielski OUStringBuffer sBuffer;
582*b1cdbd2cSJim Jagielski SvXMLUnitConverter::convertNumber(sBuffer, (sal_Int32)nLevel);
583*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_TEXT,
584*b1cdbd2cSJim Jagielski XML_OUTLINE_LEVEL,
585*b1cdbd2cSJim Jagielski sBuffer.makeStringAndClear());
586*b1cdbd2cSJim Jagielski }
587*b1cdbd2cSJim Jagielski
588*b1cdbd2cSJim Jagielski // use outline level
589*b1cdbd2cSJim Jagielski ExportBoolean(rPropertySet, sCreateFromOutline,
590*b1cdbd2cSJim Jagielski XML_USE_OUTLINE_LEVEL, sal_True);
591*b1cdbd2cSJim Jagielski
592*b1cdbd2cSJim Jagielski // use index marks
593*b1cdbd2cSJim Jagielski ExportBoolean(rPropertySet, sCreateFromMarks,
594*b1cdbd2cSJim Jagielski XML_USE_INDEX_MARKS, sal_True);
595*b1cdbd2cSJim Jagielski
596*b1cdbd2cSJim Jagielski // use level styles
597*b1cdbd2cSJim Jagielski ExportBoolean(rPropertySet, sCreateFromLevelParagraphStyles,
598*b1cdbd2cSJim Jagielski XML_USE_INDEX_SOURCE_STYLES, sal_False);
599*b1cdbd2cSJim Jagielski
600*b1cdbd2cSJim Jagielski ExportBaseIndexSource(TEXT_SECTION_TYPE_TOC, rPropertySet);
601*b1cdbd2cSJim Jagielski }
602*b1cdbd2cSJim Jagielski
603*b1cdbd2cSJim Jagielski ExportBaseIndexBody(TEXT_SECTION_TYPE_TOC, rPropertySet);
604*b1cdbd2cSJim Jagielski }
605*b1cdbd2cSJim Jagielski
ExportObjectIndexStart(const Reference<XPropertySet> & rPropertySet)606*b1cdbd2cSJim Jagielski void XMLSectionExport::ExportObjectIndexStart(
607*b1cdbd2cSJim Jagielski const Reference<XPropertySet> & rPropertySet)
608*b1cdbd2cSJim Jagielski {
609*b1cdbd2cSJim Jagielski // export index start
610*b1cdbd2cSJim Jagielski ExportBaseIndexStart(XML_OBJECT_INDEX, rPropertySet);
611*b1cdbd2cSJim Jagielski
612*b1cdbd2cSJim Jagielski // scope for index source element
613*b1cdbd2cSJim Jagielski {
614*b1cdbd2cSJim Jagielski ExportBoolean(rPropertySet, sCreateFromOtherEmbeddedObjects,
615*b1cdbd2cSJim Jagielski XML_USE_OTHER_OBJECTS, sal_False);
616*b1cdbd2cSJim Jagielski ExportBoolean(rPropertySet, sCreateFromStarCalc,
617*b1cdbd2cSJim Jagielski XML_USE_SPREADSHEET_OBJECTS, sal_False);
618*b1cdbd2cSJim Jagielski ExportBoolean(rPropertySet, sCreateFromStarChart,
619*b1cdbd2cSJim Jagielski XML_USE_CHART_OBJECTS, sal_False);
620*b1cdbd2cSJim Jagielski ExportBoolean(rPropertySet, sCreateFromStarDraw,
621*b1cdbd2cSJim Jagielski XML_USE_DRAW_OBJECTS, sal_False);
622*b1cdbd2cSJim Jagielski ExportBoolean(rPropertySet, sCreateFromStarMath,
623*b1cdbd2cSJim Jagielski XML_USE_MATH_OBJECTS, sal_False);
624*b1cdbd2cSJim Jagielski
625*b1cdbd2cSJim Jagielski ExportBaseIndexSource(TEXT_SECTION_TYPE_OBJECT, rPropertySet);
626*b1cdbd2cSJim Jagielski }
627*b1cdbd2cSJim Jagielski
628*b1cdbd2cSJim Jagielski ExportBaseIndexBody(TEXT_SECTION_TYPE_OBJECT, rPropertySet);
629*b1cdbd2cSJim Jagielski }
630*b1cdbd2cSJim Jagielski
ExportIllustrationIndexStart(const Reference<XPropertySet> & rPropertySet)631*b1cdbd2cSJim Jagielski void XMLSectionExport::ExportIllustrationIndexStart(
632*b1cdbd2cSJim Jagielski const Reference<XPropertySet> & rPropertySet)
633*b1cdbd2cSJim Jagielski {
634*b1cdbd2cSJim Jagielski // export index start
635*b1cdbd2cSJim Jagielski ExportBaseIndexStart(XML_ILLUSTRATION_INDEX, rPropertySet);
636*b1cdbd2cSJim Jagielski
637*b1cdbd2cSJim Jagielski // scope for index source element
638*b1cdbd2cSJim Jagielski {
639*b1cdbd2cSJim Jagielski // export common attributes for illustration and table indices
640*b1cdbd2cSJim Jagielski ExportTableAndIllustrationIndexSourceAttributes(rPropertySet);
641*b1cdbd2cSJim Jagielski
642*b1cdbd2cSJim Jagielski ExportBaseIndexSource(TEXT_SECTION_TYPE_ILLUSTRATION, rPropertySet);
643*b1cdbd2cSJim Jagielski }
644*b1cdbd2cSJim Jagielski
645*b1cdbd2cSJim Jagielski ExportBaseIndexBody(TEXT_SECTION_TYPE_ILLUSTRATION, rPropertySet);
646*b1cdbd2cSJim Jagielski }
647*b1cdbd2cSJim Jagielski
ExportTableIndexStart(const Reference<XPropertySet> & rPropertySet)648*b1cdbd2cSJim Jagielski void XMLSectionExport::ExportTableIndexStart(
649*b1cdbd2cSJim Jagielski const Reference<XPropertySet> & rPropertySet)
650*b1cdbd2cSJim Jagielski {
651*b1cdbd2cSJim Jagielski // export index start
652*b1cdbd2cSJim Jagielski ExportBaseIndexStart(XML_TABLE_INDEX, rPropertySet);
653*b1cdbd2cSJim Jagielski
654*b1cdbd2cSJim Jagielski // scope for index source element
655*b1cdbd2cSJim Jagielski {
656*b1cdbd2cSJim Jagielski // export common attributes for illustration and table indices
657*b1cdbd2cSJim Jagielski ExportTableAndIllustrationIndexSourceAttributes(rPropertySet);
658*b1cdbd2cSJim Jagielski
659*b1cdbd2cSJim Jagielski ExportBaseIndexSource(TEXT_SECTION_TYPE_TABLE, rPropertySet);
660*b1cdbd2cSJim Jagielski }
661*b1cdbd2cSJim Jagielski
662*b1cdbd2cSJim Jagielski ExportBaseIndexBody(TEXT_SECTION_TYPE_TABLE, rPropertySet);
663*b1cdbd2cSJim Jagielski }
664*b1cdbd2cSJim Jagielski
ExportAlphabeticalIndexStart(const Reference<XPropertySet> & rPropertySet)665*b1cdbd2cSJim Jagielski void XMLSectionExport::ExportAlphabeticalIndexStart(
666*b1cdbd2cSJim Jagielski const Reference<XPropertySet> & rPropertySet)
667*b1cdbd2cSJim Jagielski {
668*b1cdbd2cSJim Jagielski // export TOC element start
669*b1cdbd2cSJim Jagielski ExportBaseIndexStart(XML_ALPHABETICAL_INDEX, rPropertySet);
670*b1cdbd2cSJim Jagielski
671*b1cdbd2cSJim Jagielski // scope for table-of-content-source element
672*b1cdbd2cSJim Jagielski {
673*b1cdbd2cSJim Jagielski
674*b1cdbd2cSJim Jagielski // style name (if present)
675*b1cdbd2cSJim Jagielski Any aAny;
676*b1cdbd2cSJim Jagielski aAny = rPropertySet->getPropertyValue(sMainEntryCharacterStyleName);
677*b1cdbd2cSJim Jagielski OUString sStyleName;
678*b1cdbd2cSJim Jagielski aAny >>= sStyleName;
679*b1cdbd2cSJim Jagielski if (sStyleName.getLength())
680*b1cdbd2cSJim Jagielski {
681*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_TEXT,
682*b1cdbd2cSJim Jagielski XML_MAIN_ENTRY_STYLE_NAME,
683*b1cdbd2cSJim Jagielski GetExport().EncodeStyleName( sStyleName ));
684*b1cdbd2cSJim Jagielski }
685*b1cdbd2cSJim Jagielski
686*b1cdbd2cSJim Jagielski // other (boolean) attributes
687*b1cdbd2cSJim Jagielski ExportBoolean(rPropertySet, sIsCaseSensitive, XML_IGNORE_CASE,
688*b1cdbd2cSJim Jagielski sal_False, sal_True);
689*b1cdbd2cSJim Jagielski ExportBoolean(rPropertySet, sUseAlphabeticalSeparators,
690*b1cdbd2cSJim Jagielski XML_ALPHABETICAL_SEPARATORS, sal_False);
691*b1cdbd2cSJim Jagielski ExportBoolean(rPropertySet, sUseCombinedEntries, XML_COMBINE_ENTRIES,
692*b1cdbd2cSJim Jagielski sal_True);
693*b1cdbd2cSJim Jagielski ExportBoolean(rPropertySet, sUseDash, XML_COMBINE_ENTRIES_WITH_DASH,
694*b1cdbd2cSJim Jagielski sal_False);
695*b1cdbd2cSJim Jagielski ExportBoolean(rPropertySet, sUseKeyAsEntry, XML_USE_KEYS_AS_ENTRIES,
696*b1cdbd2cSJim Jagielski sal_False);
697*b1cdbd2cSJim Jagielski ExportBoolean(rPropertySet, sUsePP, XML_COMBINE_ENTRIES_WITH_PP,
698*b1cdbd2cSJim Jagielski sal_True);
699*b1cdbd2cSJim Jagielski ExportBoolean(rPropertySet, sUseUpperCase, XML_CAPITALIZE_ENTRIES,
700*b1cdbd2cSJim Jagielski sal_False);
701*b1cdbd2cSJim Jagielski ExportBoolean(rPropertySet, sIsCommaSeparated, XML_COMMA_SEPARATED,
702*b1cdbd2cSJim Jagielski sal_False);
703*b1cdbd2cSJim Jagielski
704*b1cdbd2cSJim Jagielski // sort algorithm
705*b1cdbd2cSJim Jagielski aAny = rPropertySet->getPropertyValue(sSortAlgorithm);
706*b1cdbd2cSJim Jagielski OUString sAlgorithm;
707*b1cdbd2cSJim Jagielski aAny >>= sAlgorithm;
708*b1cdbd2cSJim Jagielski if (sAlgorithm.getLength() > 0)
709*b1cdbd2cSJim Jagielski {
710*b1cdbd2cSJim Jagielski GetExport().AddAttribute( XML_NAMESPACE_TEXT, XML_SORT_ALGORITHM,
711*b1cdbd2cSJim Jagielski sAlgorithm );
712*b1cdbd2cSJim Jagielski }
713*b1cdbd2cSJim Jagielski
714*b1cdbd2cSJim Jagielski // locale
715*b1cdbd2cSJim Jagielski aAny = rPropertySet->getPropertyValue(sLocale);
716*b1cdbd2cSJim Jagielski Locale aLocale;
717*b1cdbd2cSJim Jagielski aAny >>= aLocale;
718*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_FO, XML_LANGUAGE,
719*b1cdbd2cSJim Jagielski aLocale.Language);
720*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_FO, XML_COUNTRY,
721*b1cdbd2cSJim Jagielski aLocale.Country);
722*b1cdbd2cSJim Jagielski
723*b1cdbd2cSJim Jagielski ExportBaseIndexSource(TEXT_SECTION_TYPE_ALPHABETICAL, rPropertySet);
724*b1cdbd2cSJim Jagielski }
725*b1cdbd2cSJim Jagielski
726*b1cdbd2cSJim Jagielski ExportBaseIndexBody(TEXT_SECTION_TYPE_ALPHABETICAL, rPropertySet);
727*b1cdbd2cSJim Jagielski }
728*b1cdbd2cSJim Jagielski
ExportUserIndexStart(const Reference<XPropertySet> & rPropertySet)729*b1cdbd2cSJim Jagielski void XMLSectionExport::ExportUserIndexStart(
730*b1cdbd2cSJim Jagielski const Reference<XPropertySet> & rPropertySet)
731*b1cdbd2cSJim Jagielski {
732*b1cdbd2cSJim Jagielski // export TOC element start
733*b1cdbd2cSJim Jagielski ExportBaseIndexStart(XML_USER_INDEX, rPropertySet);
734*b1cdbd2cSJim Jagielski
735*b1cdbd2cSJim Jagielski // scope for table-of-content-source element
736*b1cdbd2cSJim Jagielski {
737*b1cdbd2cSJim Jagielski // bool attributes
738*b1cdbd2cSJim Jagielski ExportBoolean(rPropertySet, sCreateFromEmbeddedObjects,
739*b1cdbd2cSJim Jagielski XML_USE_OBJECTS, sal_False);
740*b1cdbd2cSJim Jagielski ExportBoolean(rPropertySet, sCreateFromGraphicObjects,
741*b1cdbd2cSJim Jagielski XML_USE_GRAPHICS, sal_False);
742*b1cdbd2cSJim Jagielski ExportBoolean(rPropertySet, sCreateFromMarks,
743*b1cdbd2cSJim Jagielski XML_USE_INDEX_MARKS, sal_False);
744*b1cdbd2cSJim Jagielski ExportBoolean(rPropertySet, sCreateFromTables,
745*b1cdbd2cSJim Jagielski XML_USE_TABLES, sal_False);
746*b1cdbd2cSJim Jagielski ExportBoolean(rPropertySet, sCreateFromTextFrames,
747*b1cdbd2cSJim Jagielski XML_USE_FLOATING_FRAMES, sal_False);
748*b1cdbd2cSJim Jagielski ExportBoolean(rPropertySet, sUseLevelFromSource,
749*b1cdbd2cSJim Jagielski XML_COPY_OUTLINE_LEVELS, sal_False);
750*b1cdbd2cSJim Jagielski ExportBoolean(rPropertySet, sCreateFromLevelParagraphStyles,
751*b1cdbd2cSJim Jagielski XML_USE_INDEX_SOURCE_STYLES, sal_False);
752*b1cdbd2cSJim Jagielski
753*b1cdbd2cSJim Jagielski Any aAny = rPropertySet->getPropertyValue( sUserIndexName );
754*b1cdbd2cSJim Jagielski OUString sIndexName;
755*b1cdbd2cSJim Jagielski aAny >>= sIndexName;
756*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_TEXT, XML_INDEX_NAME,
757*b1cdbd2cSJim Jagielski sIndexName);
758*b1cdbd2cSJim Jagielski
759*b1cdbd2cSJim Jagielski ExportBaseIndexSource(TEXT_SECTION_TYPE_USER, rPropertySet);
760*b1cdbd2cSJim Jagielski }
761*b1cdbd2cSJim Jagielski
762*b1cdbd2cSJim Jagielski ExportBaseIndexBody(TEXT_SECTION_TYPE_USER, rPropertySet);
763*b1cdbd2cSJim Jagielski }
764*b1cdbd2cSJim Jagielski
ExportBibliographyStart(const Reference<XPropertySet> & rPropertySet)765*b1cdbd2cSJim Jagielski void XMLSectionExport::ExportBibliographyStart(
766*b1cdbd2cSJim Jagielski const Reference<XPropertySet> & rPropertySet)
767*b1cdbd2cSJim Jagielski {
768*b1cdbd2cSJim Jagielski // export TOC element start
769*b1cdbd2cSJim Jagielski ExportBaseIndexStart(XML_BIBLIOGRAPHY, rPropertySet);
770*b1cdbd2cSJim Jagielski
771*b1cdbd2cSJim Jagielski // scope for table-of-content-source element
772*b1cdbd2cSJim Jagielski {
773*b1cdbd2cSJim Jagielski // No attributes. Fine.
774*b1cdbd2cSJim Jagielski
775*b1cdbd2cSJim Jagielski ExportBaseIndexSource(TEXT_SECTION_TYPE_BIBLIOGRAPHY, rPropertySet);
776*b1cdbd2cSJim Jagielski }
777*b1cdbd2cSJim Jagielski
778*b1cdbd2cSJim Jagielski ExportBaseIndexBody(TEXT_SECTION_TYPE_BIBLIOGRAPHY, rPropertySet);
779*b1cdbd2cSJim Jagielski }
780*b1cdbd2cSJim Jagielski
781*b1cdbd2cSJim Jagielski
ExportBaseIndexStart(XMLTokenEnum eElement,const Reference<XPropertySet> & rPropertySet)782*b1cdbd2cSJim Jagielski void XMLSectionExport::ExportBaseIndexStart(
783*b1cdbd2cSJim Jagielski XMLTokenEnum eElement,
784*b1cdbd2cSJim Jagielski const Reference<XPropertySet> & rPropertySet)
785*b1cdbd2cSJim Jagielski {
786*b1cdbd2cSJim Jagielski // protect + protection key
787*b1cdbd2cSJim Jagielski Any aAny = rPropertySet->getPropertyValue(sIsProtected);
788*b1cdbd2cSJim Jagielski if (*(sal_Bool*)aAny.getValue())
789*b1cdbd2cSJim Jagielski {
790*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_TEXT, XML_PROTECTED, XML_TRUE);
791*b1cdbd2cSJim Jagielski }
792*b1cdbd2cSJim Jagielski
793*b1cdbd2cSJim Jagielski // index name
794*b1cdbd2cSJim Jagielski OUString sIndexName;
795*b1cdbd2cSJim Jagielski rPropertySet->getPropertyValue(sName) >>= sIndexName;
796*b1cdbd2cSJim Jagielski if ( sIndexName.getLength() > 0 )
797*b1cdbd2cSJim Jagielski {
798*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_TEXT, XML_NAME, sIndexName);
799*b1cdbd2cSJim Jagielski }
800*b1cdbd2cSJim Jagielski
801*b1cdbd2cSJim Jagielski // index Element start
802*b1cdbd2cSJim Jagielski GetExport().IgnorableWhitespace();
803*b1cdbd2cSJim Jagielski GetExport().StartElement( XML_NAMESPACE_TEXT, eElement, sal_False );
804*b1cdbd2cSJim Jagielski }
805*b1cdbd2cSJim Jagielski
806*b1cdbd2cSJim Jagielski static const XMLTokenEnum aTypeSourceElementNameMap[] =
807*b1cdbd2cSJim Jagielski {
808*b1cdbd2cSJim Jagielski XML_TABLE_OF_CONTENT_SOURCE, // TOC
809*b1cdbd2cSJim Jagielski XML_TABLE_INDEX_SOURCE, // table index
810*b1cdbd2cSJim Jagielski XML_ILLUSTRATION_INDEX_SOURCE, // illustration index
811*b1cdbd2cSJim Jagielski XML_OBJECT_INDEX_SOURCE, // object index
812*b1cdbd2cSJim Jagielski XML_USER_INDEX_SOURCE, // user index
813*b1cdbd2cSJim Jagielski XML_ALPHABETICAL_INDEX_SOURCE, // alphabetical index
814*b1cdbd2cSJim Jagielski XML_BIBLIOGRAPHY_SOURCE // bibliography
815*b1cdbd2cSJim Jagielski };
816*b1cdbd2cSJim Jagielski
ExportBaseIndexSource(SectionTypeEnum eType,const Reference<XPropertySet> & rPropertySet)817*b1cdbd2cSJim Jagielski void XMLSectionExport::ExportBaseIndexSource(
818*b1cdbd2cSJim Jagielski SectionTypeEnum eType,
819*b1cdbd2cSJim Jagielski const Reference<XPropertySet> & rPropertySet)
820*b1cdbd2cSJim Jagielski {
821*b1cdbd2cSJim Jagielski // check type
822*b1cdbd2cSJim Jagielski OSL_ENSURE(eType >= TEXT_SECTION_TYPE_TOC, "illegal index type");
823*b1cdbd2cSJim Jagielski OSL_ENSURE(eType <= TEXT_SECTION_TYPE_BIBLIOGRAPHY, "illegal index type");
824*b1cdbd2cSJim Jagielski
825*b1cdbd2cSJim Jagielski Any aAny;
826*b1cdbd2cSJim Jagielski
827*b1cdbd2cSJim Jagielski // common attributes; not supported by bibliography
828*b1cdbd2cSJim Jagielski if (eType != TEXT_SECTION_TYPE_BIBLIOGRAPHY)
829*b1cdbd2cSJim Jagielski {
830*b1cdbd2cSJim Jagielski // document or chapter index?
831*b1cdbd2cSJim Jagielski aAny = rPropertySet->getPropertyValue(sCreateFromChapter);
832*b1cdbd2cSJim Jagielski if (*(sal_Bool*)aAny.getValue())
833*b1cdbd2cSJim Jagielski {
834*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_TEXT,
835*b1cdbd2cSJim Jagielski XML_INDEX_SCOPE, XML_CHAPTER);
836*b1cdbd2cSJim Jagielski }
837*b1cdbd2cSJim Jagielski
838*b1cdbd2cSJim Jagielski // tab-stops relative to margin?
839*b1cdbd2cSJim Jagielski aAny = rPropertySet->getPropertyValue(sIsRelativeTabstops);
840*b1cdbd2cSJim Jagielski if (! *(sal_Bool*)aAny.getValue())
841*b1cdbd2cSJim Jagielski {
842*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_TEXT,
843*b1cdbd2cSJim Jagielski XML_RELATIVE_TAB_STOP_POSITION,
844*b1cdbd2cSJim Jagielski XML_FALSE);
845*b1cdbd2cSJim Jagielski }
846*b1cdbd2cSJim Jagielski }
847*b1cdbd2cSJim Jagielski
848*b1cdbd2cSJim Jagielski // the index source element (all indices)
849*b1cdbd2cSJim Jagielski SvXMLElementExport aElem(GetExport(),
850*b1cdbd2cSJim Jagielski XML_NAMESPACE_TEXT,
851*b1cdbd2cSJim Jagielski GetXMLToken(
852*b1cdbd2cSJim Jagielski aTypeSourceElementNameMap[
853*b1cdbd2cSJim Jagielski eType - TEXT_SECTION_TYPE_TOC]),
854*b1cdbd2cSJim Jagielski sal_True, sal_True);
855*b1cdbd2cSJim Jagielski
856*b1cdbd2cSJim Jagielski // scope for title template (all indices)
857*b1cdbd2cSJim Jagielski {
858*b1cdbd2cSJim Jagielski // header style name
859*b1cdbd2cSJim Jagielski aAny = rPropertySet->getPropertyValue(sParaStyleHeading);
860*b1cdbd2cSJim Jagielski OUString sStyleName;
861*b1cdbd2cSJim Jagielski aAny >>= sStyleName;
862*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_TEXT,
863*b1cdbd2cSJim Jagielski XML_STYLE_NAME,
864*b1cdbd2cSJim Jagielski GetExport().EncodeStyleName( sStyleName ));
865*b1cdbd2cSJim Jagielski
866*b1cdbd2cSJim Jagielski // title template
867*b1cdbd2cSJim Jagielski SvXMLElementExport aHeaderTemplate(GetExport(),
868*b1cdbd2cSJim Jagielski XML_NAMESPACE_TEXT,
869*b1cdbd2cSJim Jagielski XML_INDEX_TITLE_TEMPLATE,
870*b1cdbd2cSJim Jagielski sal_True, sal_False);
871*b1cdbd2cSJim Jagielski
872*b1cdbd2cSJim Jagielski // title as element content
873*b1cdbd2cSJim Jagielski aAny = rPropertySet->getPropertyValue(sTitle);
874*b1cdbd2cSJim Jagielski OUString sTitleString;
875*b1cdbd2cSJim Jagielski aAny >>= sTitleString;
876*b1cdbd2cSJim Jagielski GetExport().Characters(sTitleString);
877*b1cdbd2cSJim Jagielski }
878*b1cdbd2cSJim Jagielski
879*b1cdbd2cSJim Jagielski // export level templates (all indices)
880*b1cdbd2cSJim Jagielski aAny = rPropertySet->getPropertyValue(sLevelFormat);
881*b1cdbd2cSJim Jagielski Reference<XIndexReplace> xLevelTemplates;
882*b1cdbd2cSJim Jagielski aAny >>= xLevelTemplates;
883*b1cdbd2cSJim Jagielski
884*b1cdbd2cSJim Jagielski // iterate over level formats;
885*b1cdbd2cSJim Jagielski // skip element 0 (empty template for title)
886*b1cdbd2cSJim Jagielski sal_Int32 nLevelCount = xLevelTemplates->getCount();
887*b1cdbd2cSJim Jagielski for(sal_Int32 i = 1; i<nLevelCount; i++)
888*b1cdbd2cSJim Jagielski {
889*b1cdbd2cSJim Jagielski // get sequence
890*b1cdbd2cSJim Jagielski Sequence<PropertyValues> aTemplateSequence;
891*b1cdbd2cSJim Jagielski aAny = xLevelTemplates->getByIndex(i);
892*b1cdbd2cSJim Jagielski aAny >>= aTemplateSequence;
893*b1cdbd2cSJim Jagielski
894*b1cdbd2cSJim Jagielski // export the sequence (abort export if an error occured; #91214#)
895*b1cdbd2cSJim Jagielski sal_Bool bResult =
896*b1cdbd2cSJim Jagielski ExportIndexTemplate(eType, i, rPropertySet, aTemplateSequence);
897*b1cdbd2cSJim Jagielski if ( !bResult )
898*b1cdbd2cSJim Jagielski break;
899*b1cdbd2cSJim Jagielski }
900*b1cdbd2cSJim Jagielski
901*b1cdbd2cSJim Jagielski // only TOC and user index:
902*b1cdbd2cSJim Jagielski // styles from which to build the index (LevelParagraphStyles)
903*b1cdbd2cSJim Jagielski if ( (TEXT_SECTION_TYPE_TOC == eType) ||
904*b1cdbd2cSJim Jagielski (TEXT_SECTION_TYPE_USER == eType) )
905*b1cdbd2cSJim Jagielski {
906*b1cdbd2cSJim Jagielski aAny = rPropertySet->getPropertyValue(sLevelParagraphStyles);
907*b1cdbd2cSJim Jagielski Reference<XIndexReplace> xLevelParagraphStyles;
908*b1cdbd2cSJim Jagielski aAny >>= xLevelParagraphStyles;
909*b1cdbd2cSJim Jagielski ExportLevelParagraphStyles(xLevelParagraphStyles);
910*b1cdbd2cSJim Jagielski }
911*b1cdbd2cSJim Jagielski }
912*b1cdbd2cSJim Jagielski
913*b1cdbd2cSJim Jagielski
ExportBaseIndexBody(SectionTypeEnum eType,const Reference<XPropertySet> &)914*b1cdbd2cSJim Jagielski void XMLSectionExport::ExportBaseIndexBody(
915*b1cdbd2cSJim Jagielski SectionTypeEnum
916*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0
917*b1cdbd2cSJim Jagielski eType
918*b1cdbd2cSJim Jagielski #endif
919*b1cdbd2cSJim Jagielski ,
920*b1cdbd2cSJim Jagielski const Reference<XPropertySet> &)
921*b1cdbd2cSJim Jagielski {
922*b1cdbd2cSJim Jagielski // type not used; checked anyway.
923*b1cdbd2cSJim Jagielski OSL_ENSURE(eType >= TEXT_SECTION_TYPE_TOC, "illegal index type");
924*b1cdbd2cSJim Jagielski OSL_ENSURE(eType <= TEXT_SECTION_TYPE_BIBLIOGRAPHY, "illegal index type");
925*b1cdbd2cSJim Jagielski
926*b1cdbd2cSJim Jagielski // export start only
927*b1cdbd2cSJim Jagielski
928*b1cdbd2cSJim Jagielski // any old attributes?
929*b1cdbd2cSJim Jagielski GetExport().CheckAttrList();
930*b1cdbd2cSJim Jagielski
931*b1cdbd2cSJim Jagielski // start surrounded by whitespace
932*b1cdbd2cSJim Jagielski GetExport().IgnorableWhitespace();
933*b1cdbd2cSJim Jagielski GetExport().StartElement( XML_NAMESPACE_TEXT, XML_INDEX_BODY, sal_True );
934*b1cdbd2cSJim Jagielski }
935*b1cdbd2cSJim Jagielski
ExportTableAndIllustrationIndexSourceAttributes(const Reference<XPropertySet> & rPropertySet)936*b1cdbd2cSJim Jagielski void XMLSectionExport::ExportTableAndIllustrationIndexSourceAttributes(
937*b1cdbd2cSJim Jagielski const Reference<XPropertySet> & rPropertySet)
938*b1cdbd2cSJim Jagielski {
939*b1cdbd2cSJim Jagielski // use caption
940*b1cdbd2cSJim Jagielski Any aAny = rPropertySet->getPropertyValue(sCreateFromLabels);
941*b1cdbd2cSJim Jagielski if (! *(sal_Bool*)aAny.getValue())
942*b1cdbd2cSJim Jagielski {
943*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_TEXT,
944*b1cdbd2cSJim Jagielski XML_USE_CAPTION, XML_FALSE);
945*b1cdbd2cSJim Jagielski }
946*b1cdbd2cSJim Jagielski
947*b1cdbd2cSJim Jagielski // sequence name
948*b1cdbd2cSJim Jagielski aAny = rPropertySet->getPropertyValue(sLabelCategory);
949*b1cdbd2cSJim Jagielski OUString sSequenceName;
950*b1cdbd2cSJim Jagielski aAny >>= sSequenceName;
951*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_TEXT,
952*b1cdbd2cSJim Jagielski XML_CAPTION_SEQUENCE_NAME,
953*b1cdbd2cSJim Jagielski sSequenceName);
954*b1cdbd2cSJim Jagielski
955*b1cdbd2cSJim Jagielski // caption format
956*b1cdbd2cSJim Jagielski aAny = rPropertySet->getPropertyValue(sLabelDisplayType);
957*b1cdbd2cSJim Jagielski sal_Int16 nType = 0;
958*b1cdbd2cSJim Jagielski aAny >>= nType;
959*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_TEXT,
960*b1cdbd2cSJim Jagielski XML_CAPTION_SEQUENCE_FORMAT,
961*b1cdbd2cSJim Jagielski XMLTextFieldExport::MapReferenceType(nType));
962*b1cdbd2cSJim Jagielski }
963*b1cdbd2cSJim Jagielski
964*b1cdbd2cSJim Jagielski
965*b1cdbd2cSJim Jagielski // map index of LevelFormats to attribute value;
966*b1cdbd2cSJim Jagielski // level 0 is always the header
967*b1cdbd2cSJim Jagielski static const XMLTokenEnum aLevelNameTOCMap[] =
968*b1cdbd2cSJim Jagielski { XML_TOKEN_INVALID, XML_1, XML_2, XML_3, XML_4, XML_5, XML_6, XML_7,
969*b1cdbd2cSJim Jagielski XML_8, XML_9, XML_10, XML_TOKEN_INVALID };
970*b1cdbd2cSJim Jagielski static const XMLTokenEnum aLevelNameTableMap[] =
971*b1cdbd2cSJim Jagielski { XML_TOKEN_INVALID, XML__EMPTY, XML_TOKEN_INVALID };
972*b1cdbd2cSJim Jagielski static const XMLTokenEnum aLevelNameAlphaMap[] =
973*b1cdbd2cSJim Jagielski { XML_TOKEN_INVALID, XML_SEPARATOR, XML_1, XML_2, XML_3, XML_TOKEN_INVALID };
974*b1cdbd2cSJim Jagielski static const XMLTokenEnum aLevelNameBibliographyMap[] =
975*b1cdbd2cSJim Jagielski { XML_TOKEN_INVALID, XML_ARTICLE, XML_BOOK, XML_BOOKLET, XML_CONFERENCE,
976*b1cdbd2cSJim Jagielski XML_CUSTOM1, XML_CUSTOM2, XML_CUSTOM3, XML_CUSTOM4,
977*b1cdbd2cSJim Jagielski XML_CUSTOM5, XML_EMAIL, XML_INBOOK, XML_INCOLLECTION,
978*b1cdbd2cSJim Jagielski XML_INPROCEEDINGS, XML_JOURNAL,
979*b1cdbd2cSJim Jagielski XML_MANUAL, XML_MASTERSTHESIS, XML_MISC, XML_PHDTHESIS,
980*b1cdbd2cSJim Jagielski XML_PROCEEDINGS, XML_TECHREPORT, XML_UNPUBLISHED, XML_WWW,
981*b1cdbd2cSJim Jagielski XML_TOKEN_INVALID };
982*b1cdbd2cSJim Jagielski
983*b1cdbd2cSJim Jagielski static const XMLTokenEnum* aTypeLevelNameMap[] =
984*b1cdbd2cSJim Jagielski {
985*b1cdbd2cSJim Jagielski aLevelNameTOCMap, // TOC
986*b1cdbd2cSJim Jagielski aLevelNameTableMap, // table index
987*b1cdbd2cSJim Jagielski aLevelNameTableMap, // illustration index
988*b1cdbd2cSJim Jagielski aLevelNameTableMap, // object index
989*b1cdbd2cSJim Jagielski aLevelNameTOCMap, // user index
990*b1cdbd2cSJim Jagielski aLevelNameAlphaMap, // alphabetical index
991*b1cdbd2cSJim Jagielski aLevelNameBibliographyMap // bibliography
992*b1cdbd2cSJim Jagielski };
993*b1cdbd2cSJim Jagielski
994*b1cdbd2cSJim Jagielski static const sal_Char* aLevelStylePropNameTOCMap[] =
995*b1cdbd2cSJim Jagielski { NULL, "ParaStyleLevel1", "ParaStyleLevel2", "ParaStyleLevel3",
996*b1cdbd2cSJim Jagielski "ParaStyleLevel4", "ParaStyleLevel5", "ParaStyleLevel6",
997*b1cdbd2cSJim Jagielski "ParaStyleLevel7", "ParaStyleLevel8", "ParaStyleLevel9",
998*b1cdbd2cSJim Jagielski "ParaStyleLevel10", NULL };
999*b1cdbd2cSJim Jagielski static const sal_Char* aLevelStylePropNameTableMap[] =
1000*b1cdbd2cSJim Jagielski { NULL, "ParaStyleLevel1", NULL };
1001*b1cdbd2cSJim Jagielski static const sal_Char* aLevelStylePropNameAlphaMap[] =
1002*b1cdbd2cSJim Jagielski { NULL, "ParaStyleSeparator", "ParaStyleLevel1", "ParaStyleLevel2",
1003*b1cdbd2cSJim Jagielski "ParaStyleLevel3", NULL };
1004*b1cdbd2cSJim Jagielski static const sal_Char* aLevelStylePropNameBibliographyMap[] =
1005*b1cdbd2cSJim Jagielski // TODO: replace with real property names, when available
1006*b1cdbd2cSJim Jagielski { NULL, "ParaStyleLevel1", "ParaStyleLevel1", "ParaStyleLevel1",
1007*b1cdbd2cSJim Jagielski "ParaStyleLevel1", "ParaStyleLevel1", "ParaStyleLevel1",
1008*b1cdbd2cSJim Jagielski "ParaStyleLevel1", "ParaStyleLevel1", "ParaStyleLevel1",
1009*b1cdbd2cSJim Jagielski "ParaStyleLevel1", "ParaStyleLevel1", "ParaStyleLevel1",
1010*b1cdbd2cSJim Jagielski "ParaStyleLevel1", "ParaStyleLevel1", "ParaStyleLevel1",
1011*b1cdbd2cSJim Jagielski "ParaStyleLevel1", "ParaStyleLevel1", "ParaStyleLevel1",
1012*b1cdbd2cSJim Jagielski "ParaStyleLevel1", "ParaStyleLevel1", "ParaStyleLevel1",
1013*b1cdbd2cSJim Jagielski "ParaStyleLevel1",
1014*b1cdbd2cSJim Jagielski NULL };
1015*b1cdbd2cSJim Jagielski
1016*b1cdbd2cSJim Jagielski static const sal_Char** aTypeLevelStylePropNameMap[] =
1017*b1cdbd2cSJim Jagielski {
1018*b1cdbd2cSJim Jagielski aLevelStylePropNameTOCMap, // TOC
1019*b1cdbd2cSJim Jagielski aLevelStylePropNameTableMap, // table index
1020*b1cdbd2cSJim Jagielski aLevelStylePropNameTableMap, // illustration index
1021*b1cdbd2cSJim Jagielski aLevelStylePropNameTableMap, // object index
1022*b1cdbd2cSJim Jagielski aLevelStylePropNameTOCMap, // user index
1023*b1cdbd2cSJim Jagielski aLevelStylePropNameAlphaMap, // alphabetical index
1024*b1cdbd2cSJim Jagielski aLevelStylePropNameBibliographyMap // bibliography
1025*b1cdbd2cSJim Jagielski };
1026*b1cdbd2cSJim Jagielski
1027*b1cdbd2cSJim Jagielski static const XMLTokenEnum aTypeLevelAttrMap[] =
1028*b1cdbd2cSJim Jagielski {
1029*b1cdbd2cSJim Jagielski XML_OUTLINE_LEVEL, // TOC
1030*b1cdbd2cSJim Jagielski XML_TOKEN_INVALID, // table index
1031*b1cdbd2cSJim Jagielski XML_TOKEN_INVALID, // illustration index
1032*b1cdbd2cSJim Jagielski XML_TOKEN_INVALID, // object index
1033*b1cdbd2cSJim Jagielski XML_OUTLINE_LEVEL, // user index
1034*b1cdbd2cSJim Jagielski XML_OUTLINE_LEVEL, // alphabetical index
1035*b1cdbd2cSJim Jagielski XML_BIBLIOGRAPHY_TYPE // bibliography
1036*b1cdbd2cSJim Jagielski };
1037*b1cdbd2cSJim Jagielski
1038*b1cdbd2cSJim Jagielski static const XMLTokenEnum aTypeElementNameMap[] =
1039*b1cdbd2cSJim Jagielski {
1040*b1cdbd2cSJim Jagielski XML_TABLE_OF_CONTENT_ENTRY_TEMPLATE, // TOC
1041*b1cdbd2cSJim Jagielski XML_TABLE_INDEX_ENTRY_TEMPLATE, // table index
1042*b1cdbd2cSJim Jagielski XML_ILLUSTRATION_INDEX_ENTRY_TEMPLATE, // illustration index
1043*b1cdbd2cSJim Jagielski XML_OBJECT_INDEX_ENTRY_TEMPLATE, // object index
1044*b1cdbd2cSJim Jagielski XML_USER_INDEX_ENTRY_TEMPLATE, // user index
1045*b1cdbd2cSJim Jagielski XML_ALPHABETICAL_INDEX_ENTRY_TEMPLATE, // alphabetical index
1046*b1cdbd2cSJim Jagielski XML_BIBLIOGRAPHY_ENTRY_TEMPLATE // bibliography
1047*b1cdbd2cSJim Jagielski };
1048*b1cdbd2cSJim Jagielski
1049*b1cdbd2cSJim Jagielski
ExportIndexTemplate(SectionTypeEnum eType,sal_Int32 nOutlineLevel,const Reference<XPropertySet> & rPropertySet,Sequence<Sequence<PropertyValue>> & rValues)1050*b1cdbd2cSJim Jagielski sal_Bool XMLSectionExport::ExportIndexTemplate(
1051*b1cdbd2cSJim Jagielski SectionTypeEnum eType,
1052*b1cdbd2cSJim Jagielski sal_Int32 nOutlineLevel,
1053*b1cdbd2cSJim Jagielski const Reference<XPropertySet> & rPropertySet,
1054*b1cdbd2cSJim Jagielski Sequence<Sequence<PropertyValue> > & rValues)
1055*b1cdbd2cSJim Jagielski {
1056*b1cdbd2cSJim Jagielski OSL_ENSURE(eType >= TEXT_SECTION_TYPE_TOC, "illegal index type");
1057*b1cdbd2cSJim Jagielski OSL_ENSURE(eType <= TEXT_SECTION_TYPE_BIBLIOGRAPHY, "illegal index type");
1058*b1cdbd2cSJim Jagielski OSL_ENSURE(nOutlineLevel >= 0, "illegal outline level");
1059*b1cdbd2cSJim Jagielski
1060*b1cdbd2cSJim Jagielski if ( (eType >= TEXT_SECTION_TYPE_TOC) &&
1061*b1cdbd2cSJim Jagielski (eType <= TEXT_SECTION_TYPE_BIBLIOGRAPHY) &&
1062*b1cdbd2cSJim Jagielski (nOutlineLevel >= 0) )
1063*b1cdbd2cSJim Jagielski {
1064*b1cdbd2cSJim Jagielski // get level name and level attribute name from aLevelNameMap;
1065*b1cdbd2cSJim Jagielski const XMLTokenEnum eLevelAttrName(
1066*b1cdbd2cSJim Jagielski aTypeLevelAttrMap[eType-TEXT_SECTION_TYPE_TOC]);
1067*b1cdbd2cSJim Jagielski const XMLTokenEnum eLevelName(
1068*b1cdbd2cSJim Jagielski aTypeLevelNameMap[eType-TEXT_SECTION_TYPE_TOC][nOutlineLevel]);
1069*b1cdbd2cSJim Jagielski
1070*b1cdbd2cSJim Jagielski // #92124#: some old documents may be broken, then they have
1071*b1cdbd2cSJim Jagielski // too many template levels; we need to recognize this and
1072*b1cdbd2cSJim Jagielski // export only as many as is legal for the respective index
1073*b1cdbd2cSJim Jagielski // type. To do this, we simply return an error flag, which
1074*b1cdbd2cSJim Jagielski // will then abort further template level exports.
1075*b1cdbd2cSJim Jagielski OSL_ENSURE(XML_TOKEN_INVALID != eLevelName, "can't find level name");
1076*b1cdbd2cSJim Jagielski if ( XML_TOKEN_INVALID == eLevelName )
1077*b1cdbd2cSJim Jagielski {
1078*b1cdbd2cSJim Jagielski // output level not found? Then end of templates! #91214#
1079*b1cdbd2cSJim Jagielski return sal_False;
1080*b1cdbd2cSJim Jagielski }
1081*b1cdbd2cSJim Jagielski
1082*b1cdbd2cSJim Jagielski // output level name
1083*b1cdbd2cSJim Jagielski if ((XML_TOKEN_INVALID != eLevelName) && (XML_TOKEN_INVALID != eLevelAttrName))
1084*b1cdbd2cSJim Jagielski {
1085*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_TEXT,
1086*b1cdbd2cSJim Jagielski GetXMLToken(eLevelAttrName),
1087*b1cdbd2cSJim Jagielski GetXMLToken(eLevelName));
1088*b1cdbd2cSJim Jagielski }
1089*b1cdbd2cSJim Jagielski
1090*b1cdbd2cSJim Jagielski // paragraph level style name
1091*b1cdbd2cSJim Jagielski const sal_Char* pPropName(
1092*b1cdbd2cSJim Jagielski aTypeLevelStylePropNameMap[eType-TEXT_SECTION_TYPE_TOC][nOutlineLevel]);
1093*b1cdbd2cSJim Jagielski OSL_ENSURE(NULL != pPropName, "can't find property name");
1094*b1cdbd2cSJim Jagielski if (NULL != pPropName)
1095*b1cdbd2cSJim Jagielski {
1096*b1cdbd2cSJim Jagielski Any aAny = rPropertySet->getPropertyValue(
1097*b1cdbd2cSJim Jagielski OUString::createFromAscii(pPropName));
1098*b1cdbd2cSJim Jagielski OUString sParaStyleName;
1099*b1cdbd2cSJim Jagielski aAny >>= sParaStyleName;
1100*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_TEXT,
1101*b1cdbd2cSJim Jagielski XML_STYLE_NAME,
1102*b1cdbd2cSJim Jagielski GetExport().EncodeStyleName( sParaStyleName ));
1103*b1cdbd2cSJim Jagielski }
1104*b1cdbd2cSJim Jagielski
1105*b1cdbd2cSJim Jagielski // template element
1106*b1cdbd2cSJim Jagielski const XMLTokenEnum eElementName(
1107*b1cdbd2cSJim Jagielski aTypeElementNameMap[eType - TEXT_SECTION_TYPE_TOC]);
1108*b1cdbd2cSJim Jagielski SvXMLElementExport aLevelTemplate(GetExport(),
1109*b1cdbd2cSJim Jagielski XML_NAMESPACE_TEXT,
1110*b1cdbd2cSJim Jagielski GetXMLToken(eElementName),
1111*b1cdbd2cSJim Jagielski sal_True, sal_True);
1112*b1cdbd2cSJim Jagielski
1113*b1cdbd2cSJim Jagielski // export sequence
1114*b1cdbd2cSJim Jagielski sal_Int32 nTemplateCount = rValues.getLength();
1115*b1cdbd2cSJim Jagielski for(sal_Int32 nTemplateNo = 0;
1116*b1cdbd2cSJim Jagielski nTemplateNo < nTemplateCount;
1117*b1cdbd2cSJim Jagielski nTemplateNo++)
1118*b1cdbd2cSJim Jagielski {
1119*b1cdbd2cSJim Jagielski ExportIndexTemplateElement(
1120*b1cdbd2cSJim Jagielski eType, //i90246
1121*b1cdbd2cSJim Jagielski rValues[nTemplateNo]);
1122*b1cdbd2cSJim Jagielski }
1123*b1cdbd2cSJim Jagielski }
1124*b1cdbd2cSJim Jagielski
1125*b1cdbd2cSJim Jagielski return sal_True;
1126*b1cdbd2cSJim Jagielski }
1127*b1cdbd2cSJim Jagielski
1128*b1cdbd2cSJim Jagielski
1129*b1cdbd2cSJim Jagielski enum TemplateTypeEnum
1130*b1cdbd2cSJim Jagielski {
1131*b1cdbd2cSJim Jagielski TOK_TTYPE_ENTRY_NUMBER,
1132*b1cdbd2cSJim Jagielski TOK_TTYPE_ENTRY_TEXT,
1133*b1cdbd2cSJim Jagielski TOK_TTYPE_TAB_STOP,
1134*b1cdbd2cSJim Jagielski TOK_TTYPE_TEXT,
1135*b1cdbd2cSJim Jagielski TOK_TTYPE_PAGE_NUMBER,
1136*b1cdbd2cSJim Jagielski TOK_TTYPE_CHAPTER_INFO,
1137*b1cdbd2cSJim Jagielski TOK_TTYPE_HYPERLINK_START,
1138*b1cdbd2cSJim Jagielski TOK_TTYPE_HYPERLINK_END,
1139*b1cdbd2cSJim Jagielski TOK_TTYPE_BIBLIOGRAPHY,
1140*b1cdbd2cSJim Jagielski TOK_TTYPE_INVALID
1141*b1cdbd2cSJim Jagielski };
1142*b1cdbd2cSJim Jagielski
1143*b1cdbd2cSJim Jagielski enum TemplateParamEnum
1144*b1cdbd2cSJim Jagielski {
1145*b1cdbd2cSJim Jagielski TOK_TPARAM_TOKEN_TYPE,
1146*b1cdbd2cSJim Jagielski TOK_TPARAM_CHAR_STYLE,
1147*b1cdbd2cSJim Jagielski TOK_TPARAM_TAB_RIGHT_ALIGNED,
1148*b1cdbd2cSJim Jagielski TOK_TPARAM_TAB_POSITION,
1149*b1cdbd2cSJim Jagielski TOK_TPARAM_TAB_WITH_TAB, // #i21237#
1150*b1cdbd2cSJim Jagielski TOK_TPARAM_TAB_FILL_CHAR,
1151*b1cdbd2cSJim Jagielski TOK_TPARAM_TEXT,
1152*b1cdbd2cSJim Jagielski TOK_TPARAM_CHAPTER_FORMAT,
1153*b1cdbd2cSJim Jagielski TOK_TPARAM_CHAPTER_LEVEL,//i53420
1154*b1cdbd2cSJim Jagielski TOK_TPARAM_BIBLIOGRAPHY_DATA
1155*b1cdbd2cSJim Jagielski };
1156*b1cdbd2cSJim Jagielski
1157*b1cdbd2cSJim Jagielski SvXMLEnumStringMapEntry __READONLY_DATA aTemplateTypeMap[] =
1158*b1cdbd2cSJim Jagielski {
1159*b1cdbd2cSJim Jagielski ENUM_STRING_MAP_ENTRY( "TokenEntryNumber", TOK_TTYPE_ENTRY_NUMBER ),
1160*b1cdbd2cSJim Jagielski ENUM_STRING_MAP_ENTRY( "TokenEntryText", TOK_TTYPE_ENTRY_TEXT ),
1161*b1cdbd2cSJim Jagielski ENUM_STRING_MAP_ENTRY( "TokenTabStop", TOK_TTYPE_TAB_STOP ),
1162*b1cdbd2cSJim Jagielski ENUM_STRING_MAP_ENTRY( "TokenText", TOK_TTYPE_TEXT ),
1163*b1cdbd2cSJim Jagielski ENUM_STRING_MAP_ENTRY( "TokenPageNumber", TOK_TTYPE_PAGE_NUMBER ),
1164*b1cdbd2cSJim Jagielski ENUM_STRING_MAP_ENTRY( "TokenChapterInfo", TOK_TTYPE_CHAPTER_INFO ),
1165*b1cdbd2cSJim Jagielski ENUM_STRING_MAP_ENTRY( "TokenHyperlinkStart", TOK_TTYPE_HYPERLINK_START ),
1166*b1cdbd2cSJim Jagielski ENUM_STRING_MAP_ENTRY( "TokenHyperlinkEnd", TOK_TTYPE_HYPERLINK_END ),
1167*b1cdbd2cSJim Jagielski ENUM_STRING_MAP_ENTRY( "TokenBibliographyDataField", TOK_TTYPE_BIBLIOGRAPHY ),
1168*b1cdbd2cSJim Jagielski ENUM_STRING_MAP_END()
1169*b1cdbd2cSJim Jagielski };
1170*b1cdbd2cSJim Jagielski
1171*b1cdbd2cSJim Jagielski SvXMLEnumStringMapEntry __READONLY_DATA aTemplateParamMap[] =
1172*b1cdbd2cSJim Jagielski {
1173*b1cdbd2cSJim Jagielski ENUM_STRING_MAP_ENTRY( "TokenType", TOK_TPARAM_TOKEN_TYPE ),
1174*b1cdbd2cSJim Jagielski ENUM_STRING_MAP_ENTRY( "CharacterStyleName", TOK_TPARAM_CHAR_STYLE ),
1175*b1cdbd2cSJim Jagielski ENUM_STRING_MAP_ENTRY( "TabStopRightAligned", TOK_TPARAM_TAB_RIGHT_ALIGNED ),
1176*b1cdbd2cSJim Jagielski ENUM_STRING_MAP_ENTRY( "TabStopPosition", TOK_TPARAM_TAB_POSITION ),
1177*b1cdbd2cSJim Jagielski ENUM_STRING_MAP_ENTRY( "TabStopFillCharacter", TOK_TPARAM_TAB_FILL_CHAR ),
1178*b1cdbd2cSJim Jagielski // #i21237#
1179*b1cdbd2cSJim Jagielski ENUM_STRING_MAP_ENTRY( "WithTab", TOK_TPARAM_TAB_WITH_TAB ),
1180*b1cdbd2cSJim Jagielski ENUM_STRING_MAP_ENTRY( "Text", TOK_TPARAM_TEXT ),
1181*b1cdbd2cSJim Jagielski ENUM_STRING_MAP_ENTRY( "ChapterFormat", TOK_TPARAM_CHAPTER_FORMAT ),
1182*b1cdbd2cSJim Jagielski ENUM_STRING_MAP_ENTRY( "ChapterLevel", TOK_TPARAM_CHAPTER_LEVEL ),//i53420
1183*b1cdbd2cSJim Jagielski ENUM_STRING_MAP_ENTRY( "BibliographyDataField", TOK_TPARAM_BIBLIOGRAPHY_DATA ),
1184*b1cdbd2cSJim Jagielski ENUM_STRING_MAP_END()
1185*b1cdbd2cSJim Jagielski };
1186*b1cdbd2cSJim Jagielski
1187*b1cdbd2cSJim Jagielski SvXMLEnumMapEntry __READONLY_DATA aBibliographyDataFieldMap[] =
1188*b1cdbd2cSJim Jagielski {
1189*b1cdbd2cSJim Jagielski { XML_ADDRESS, BibliographyDataField::ADDRESS },
1190*b1cdbd2cSJim Jagielski { XML_ANNOTE, BibliographyDataField::ANNOTE },
1191*b1cdbd2cSJim Jagielski { XML_AUTHOR, BibliographyDataField::AUTHOR },
1192*b1cdbd2cSJim Jagielski { XML_BIBLIOGRAPHY_TYPE, BibliographyDataField::BIBILIOGRAPHIC_TYPE },
1193*b1cdbd2cSJim Jagielski { XML_BOOKTITLE, BibliographyDataField::BOOKTITLE },
1194*b1cdbd2cSJim Jagielski { XML_CHAPTER, BibliographyDataField::CHAPTER },
1195*b1cdbd2cSJim Jagielski { XML_CUSTOM1, BibliographyDataField::CUSTOM1 },
1196*b1cdbd2cSJim Jagielski { XML_CUSTOM2, BibliographyDataField::CUSTOM2 },
1197*b1cdbd2cSJim Jagielski { XML_CUSTOM3, BibliographyDataField::CUSTOM3 },
1198*b1cdbd2cSJim Jagielski { XML_CUSTOM4, BibliographyDataField::CUSTOM4 },
1199*b1cdbd2cSJim Jagielski { XML_CUSTOM5, BibliographyDataField::CUSTOM5 },
1200*b1cdbd2cSJim Jagielski { XML_EDITION, BibliographyDataField::EDITION },
1201*b1cdbd2cSJim Jagielski { XML_EDITOR, BibliographyDataField::EDITOR },
1202*b1cdbd2cSJim Jagielski { XML_HOWPUBLISHED, BibliographyDataField::HOWPUBLISHED },
1203*b1cdbd2cSJim Jagielski { XML_IDENTIFIER, BibliographyDataField::IDENTIFIER },
1204*b1cdbd2cSJim Jagielski { XML_INSTITUTION, BibliographyDataField::INSTITUTION },
1205*b1cdbd2cSJim Jagielski { XML_ISBN, BibliographyDataField::ISBN },
1206*b1cdbd2cSJim Jagielski { XML_JOURNAL, BibliographyDataField::JOURNAL },
1207*b1cdbd2cSJim Jagielski { XML_MONTH, BibliographyDataField::MONTH },
1208*b1cdbd2cSJim Jagielski { XML_NOTE, BibliographyDataField::NOTE },
1209*b1cdbd2cSJim Jagielski { XML_NUMBER, BibliographyDataField::NUMBER },
1210*b1cdbd2cSJim Jagielski { XML_ORGANIZATIONS, BibliographyDataField::ORGANIZATIONS },
1211*b1cdbd2cSJim Jagielski { XML_PAGES, BibliographyDataField::PAGES },
1212*b1cdbd2cSJim Jagielski { XML_PUBLISHER, BibliographyDataField::PUBLISHER },
1213*b1cdbd2cSJim Jagielski { XML_REPORT_TYPE, BibliographyDataField::REPORT_TYPE },
1214*b1cdbd2cSJim Jagielski { XML_SCHOOL, BibliographyDataField::SCHOOL },
1215*b1cdbd2cSJim Jagielski { XML_SERIES, BibliographyDataField::SERIES },
1216*b1cdbd2cSJim Jagielski { XML_TITLE, BibliographyDataField::TITLE },
1217*b1cdbd2cSJim Jagielski { XML_URL, BibliographyDataField::URL },
1218*b1cdbd2cSJim Jagielski { XML_VOLUME, BibliographyDataField::VOLUME },
1219*b1cdbd2cSJim Jagielski { XML_YEAR, BibliographyDataField::YEAR },
1220*b1cdbd2cSJim Jagielski { XML_TOKEN_INVALID, 0 }
1221*b1cdbd2cSJim Jagielski };
1222*b1cdbd2cSJim Jagielski
ExportIndexTemplateElement(SectionTypeEnum eType,Sequence<PropertyValue> & rValues)1223*b1cdbd2cSJim Jagielski void XMLSectionExport::ExportIndexTemplateElement(
1224*b1cdbd2cSJim Jagielski SectionTypeEnum eType, //i90246
1225*b1cdbd2cSJim Jagielski Sequence<PropertyValue> & rValues)
1226*b1cdbd2cSJim Jagielski {
1227*b1cdbd2cSJim Jagielski // variables for template values
1228*b1cdbd2cSJim Jagielski
1229*b1cdbd2cSJim Jagielski // char style
1230*b1cdbd2cSJim Jagielski OUString sCharStyle;
1231*b1cdbd2cSJim Jagielski sal_Bool bCharStyleOK = sal_False;
1232*b1cdbd2cSJim Jagielski
1233*b1cdbd2cSJim Jagielski // text
1234*b1cdbd2cSJim Jagielski OUString sText;
1235*b1cdbd2cSJim Jagielski sal_Bool bTextOK = sal_False;
1236*b1cdbd2cSJim Jagielski
1237*b1cdbd2cSJim Jagielski // tab position
1238*b1cdbd2cSJim Jagielski sal_Bool bRightAligned = sal_False;
1239*b1cdbd2cSJim Jagielski sal_Bool bRightAlignedOK = sal_False;
1240*b1cdbd2cSJim Jagielski
1241*b1cdbd2cSJim Jagielski // tab position
1242*b1cdbd2cSJim Jagielski sal_Int32 nTabPosition = 0;
1243*b1cdbd2cSJim Jagielski sal_Bool bTabPositionOK = sal_False;
1244*b1cdbd2cSJim Jagielski
1245*b1cdbd2cSJim Jagielski // fill character
1246*b1cdbd2cSJim Jagielski OUString sFillChar;
1247*b1cdbd2cSJim Jagielski sal_Bool bFillCharOK = sal_False;
1248*b1cdbd2cSJim Jagielski
1249*b1cdbd2cSJim Jagielski // chapter format
1250*b1cdbd2cSJim Jagielski sal_Int16 nChapterFormat = 0;
1251*b1cdbd2cSJim Jagielski sal_Bool bChapterFormatOK = sal_False;
1252*b1cdbd2cSJim Jagielski
1253*b1cdbd2cSJim Jagielski // outline max level
1254*b1cdbd2cSJim Jagielski sal_Int16 nLevel = 0;
1255*b1cdbd2cSJim Jagielski sal_Bool bLevelOK = sal_False;
1256*b1cdbd2cSJim Jagielski
1257*b1cdbd2cSJim Jagielski // Bibliography Data
1258*b1cdbd2cSJim Jagielski sal_Int16 nBibliographyData = 0;
1259*b1cdbd2cSJim Jagielski sal_Bool bBibliographyDataOK = sal_False;
1260*b1cdbd2cSJim Jagielski
1261*b1cdbd2cSJim Jagielski // With Tab Stop #i21237#
1262*b1cdbd2cSJim Jagielski sal_Bool bWithTabStop = sal_False;
1263*b1cdbd2cSJim Jagielski sal_Bool bWithTabStopOK = sal_False;
1264*b1cdbd2cSJim Jagielski
1265*b1cdbd2cSJim Jagielski //i90246, the ODF version being written to is:
1266*b1cdbd2cSJim Jagielski const SvtSaveOptions::ODFDefaultVersion aODFVersion = rExport.getDefaultVersion();
1267*b1cdbd2cSJim Jagielski //the above version cannot be used for old OOo (OOo 1.0) formats!
1268*b1cdbd2cSJim Jagielski
1269*b1cdbd2cSJim Jagielski // token type
1270*b1cdbd2cSJim Jagielski enum TemplateTypeEnum nTokenType = TOK_TTYPE_INVALID;
1271*b1cdbd2cSJim Jagielski
1272*b1cdbd2cSJim Jagielski sal_Int32 nCount = rValues.getLength();
1273*b1cdbd2cSJim Jagielski for(sal_Int32 i = 0; i<nCount; i++)
1274*b1cdbd2cSJim Jagielski {
1275*b1cdbd2cSJim Jagielski sal_uInt16 nToken;
1276*b1cdbd2cSJim Jagielski if ( SvXMLUnitConverter::convertEnum( nToken, rValues[i].Name,
1277*b1cdbd2cSJim Jagielski aTemplateParamMap ) )
1278*b1cdbd2cSJim Jagielski {
1279*b1cdbd2cSJim Jagielski // Only use direct and default values.
1280*b1cdbd2cSJim Jagielski // Wrong. no property states, so ignore.
1281*b1cdbd2cSJim Jagielski // if ( (beans::PropertyState_DIRECT_VALUE == rValues[i].State) ||
1282*b1cdbd2cSJim Jagielski // (beans::PropertyState_DEFAULT_VALUE == rValues[i].State) )
1283*b1cdbd2cSJim Jagielski
1284*b1cdbd2cSJim Jagielski switch (nToken)
1285*b1cdbd2cSJim Jagielski {
1286*b1cdbd2cSJim Jagielski case TOK_TPARAM_TOKEN_TYPE:
1287*b1cdbd2cSJim Jagielski {
1288*b1cdbd2cSJim Jagielski sal_uInt16 nTmp;
1289*b1cdbd2cSJim Jagielski OUString sVal;
1290*b1cdbd2cSJim Jagielski rValues[i].Value >>= sVal;
1291*b1cdbd2cSJim Jagielski if (SvXMLUnitConverter::convertEnum( nTmp, sVal,
1292*b1cdbd2cSJim Jagielski aTemplateTypeMap))
1293*b1cdbd2cSJim Jagielski {
1294*b1cdbd2cSJim Jagielski nTokenType = (enum TemplateTypeEnum)nTmp;
1295*b1cdbd2cSJim Jagielski }
1296*b1cdbd2cSJim Jagielski break;
1297*b1cdbd2cSJim Jagielski }
1298*b1cdbd2cSJim Jagielski
1299*b1cdbd2cSJim Jagielski case TOK_TPARAM_CHAR_STYLE:
1300*b1cdbd2cSJim Jagielski // only valid, if not empty
1301*b1cdbd2cSJim Jagielski rValues[i].Value >>= sCharStyle;
1302*b1cdbd2cSJim Jagielski bCharStyleOK = sCharStyle.getLength() > 0;
1303*b1cdbd2cSJim Jagielski break;
1304*b1cdbd2cSJim Jagielski
1305*b1cdbd2cSJim Jagielski case TOK_TPARAM_TEXT:
1306*b1cdbd2cSJim Jagielski rValues[i].Value >>= sText;
1307*b1cdbd2cSJim Jagielski bTextOK = sal_True;
1308*b1cdbd2cSJim Jagielski break;
1309*b1cdbd2cSJim Jagielski
1310*b1cdbd2cSJim Jagielski case TOK_TPARAM_TAB_RIGHT_ALIGNED:
1311*b1cdbd2cSJim Jagielski bRightAligned =
1312*b1cdbd2cSJim Jagielski *(sal_Bool *)rValues[i].Value.getValue();
1313*b1cdbd2cSJim Jagielski bRightAlignedOK = sal_True;
1314*b1cdbd2cSJim Jagielski break;
1315*b1cdbd2cSJim Jagielski
1316*b1cdbd2cSJim Jagielski case TOK_TPARAM_TAB_POSITION:
1317*b1cdbd2cSJim Jagielski rValues[i].Value >>= nTabPosition;
1318*b1cdbd2cSJim Jagielski bTabPositionOK = sal_True;
1319*b1cdbd2cSJim Jagielski break;
1320*b1cdbd2cSJim Jagielski
1321*b1cdbd2cSJim Jagielski // #i21237#
1322*b1cdbd2cSJim Jagielski case TOK_TPARAM_TAB_WITH_TAB:
1323*b1cdbd2cSJim Jagielski bWithTabStop = *(sal_Bool *)rValues[i].Value.getValue();
1324*b1cdbd2cSJim Jagielski bWithTabStopOK = sal_True;
1325*b1cdbd2cSJim Jagielski break;
1326*b1cdbd2cSJim Jagielski
1327*b1cdbd2cSJim Jagielski case TOK_TPARAM_TAB_FILL_CHAR:
1328*b1cdbd2cSJim Jagielski rValues[i].Value >>= sFillChar;
1329*b1cdbd2cSJim Jagielski bFillCharOK = sal_True;
1330*b1cdbd2cSJim Jagielski break;
1331*b1cdbd2cSJim Jagielski
1332*b1cdbd2cSJim Jagielski case TOK_TPARAM_CHAPTER_FORMAT:
1333*b1cdbd2cSJim Jagielski rValues[i].Value >>= nChapterFormat;
1334*b1cdbd2cSJim Jagielski bChapterFormatOK = sal_True;
1335*b1cdbd2cSJim Jagielski break;
1336*b1cdbd2cSJim Jagielski //---> i53420
1337*b1cdbd2cSJim Jagielski case TOK_TPARAM_CHAPTER_LEVEL:
1338*b1cdbd2cSJim Jagielski rValues[i].Value >>= nLevel;
1339*b1cdbd2cSJim Jagielski bLevelOK = sal_True;
1340*b1cdbd2cSJim Jagielski break;
1341*b1cdbd2cSJim Jagielski //<---
1342*b1cdbd2cSJim Jagielski case TOK_TPARAM_BIBLIOGRAPHY_DATA:
1343*b1cdbd2cSJim Jagielski rValues[i].Value >>= nBibliographyData;
1344*b1cdbd2cSJim Jagielski bBibliographyDataOK = sal_True;
1345*b1cdbd2cSJim Jagielski break;
1346*b1cdbd2cSJim Jagielski }
1347*b1cdbd2cSJim Jagielski }
1348*b1cdbd2cSJim Jagielski }
1349*b1cdbd2cSJim Jagielski
1350*b1cdbd2cSJim Jagielski // convert type to token (and check validity) ...
1351*b1cdbd2cSJim Jagielski XMLTokenEnum eElement(XML_TOKEN_INVALID);
1352*b1cdbd2cSJim Jagielski switch(nTokenType)
1353*b1cdbd2cSJim Jagielski {
1354*b1cdbd2cSJim Jagielski case TOK_TTYPE_ENTRY_TEXT:
1355*b1cdbd2cSJim Jagielski eElement = XML_INDEX_ENTRY_TEXT;
1356*b1cdbd2cSJim Jagielski break;
1357*b1cdbd2cSJim Jagielski case TOK_TTYPE_TAB_STOP:
1358*b1cdbd2cSJim Jagielski // test validity
1359*b1cdbd2cSJim Jagielski if ( bRightAligned || bTabPositionOK || bFillCharOK )
1360*b1cdbd2cSJim Jagielski {
1361*b1cdbd2cSJim Jagielski eElement = XML_INDEX_ENTRY_TAB_STOP;
1362*b1cdbd2cSJim Jagielski }
1363*b1cdbd2cSJim Jagielski break;
1364*b1cdbd2cSJim Jagielski case TOK_TTYPE_TEXT:
1365*b1cdbd2cSJim Jagielski // test validity
1366*b1cdbd2cSJim Jagielski if (bTextOK)
1367*b1cdbd2cSJim Jagielski {
1368*b1cdbd2cSJim Jagielski eElement = XML_INDEX_ENTRY_SPAN;
1369*b1cdbd2cSJim Jagielski }
1370*b1cdbd2cSJim Jagielski break;
1371*b1cdbd2cSJim Jagielski case TOK_TTYPE_PAGE_NUMBER:
1372*b1cdbd2cSJim Jagielski eElement = XML_INDEX_ENTRY_PAGE_NUMBER;
1373*b1cdbd2cSJim Jagielski break;
1374*b1cdbd2cSJim Jagielski case TOK_TTYPE_CHAPTER_INFO: // keyword index
1375*b1cdbd2cSJim Jagielski eElement = XML_INDEX_ENTRY_CHAPTER;
1376*b1cdbd2cSJim Jagielski break;
1377*b1cdbd2cSJim Jagielski case TOK_TTYPE_ENTRY_NUMBER: // table of content
1378*b1cdbd2cSJim Jagielski eElement = XML_INDEX_ENTRY_CHAPTER;
1379*b1cdbd2cSJim Jagielski break;
1380*b1cdbd2cSJim Jagielski case TOK_TTYPE_HYPERLINK_START:
1381*b1cdbd2cSJim Jagielski eElement = XML_INDEX_ENTRY_LINK_START;
1382*b1cdbd2cSJim Jagielski break;
1383*b1cdbd2cSJim Jagielski case TOK_TTYPE_HYPERLINK_END:
1384*b1cdbd2cSJim Jagielski eElement = XML_INDEX_ENTRY_LINK_END;
1385*b1cdbd2cSJim Jagielski break;
1386*b1cdbd2cSJim Jagielski case TOK_TTYPE_BIBLIOGRAPHY:
1387*b1cdbd2cSJim Jagielski if (bBibliographyDataOK)
1388*b1cdbd2cSJim Jagielski {
1389*b1cdbd2cSJim Jagielski eElement = XML_INDEX_ENTRY_BIBLIOGRAPHY;
1390*b1cdbd2cSJim Jagielski }
1391*b1cdbd2cSJim Jagielski break;
1392*b1cdbd2cSJim Jagielski default:
1393*b1cdbd2cSJim Jagielski ; // unknown/unimplemented template
1394*b1cdbd2cSJim Jagielski break;
1395*b1cdbd2cSJim Jagielski }
1396*b1cdbd2cSJim Jagielski
1397*b1cdbd2cSJim Jagielski //--->i90246
1398*b1cdbd2cSJim Jagielski //check the ODF version being exported
1399*b1cdbd2cSJim Jagielski if( aODFVersion == SvtSaveOptions::ODFVER_011
1400*b1cdbd2cSJim Jagielski || aODFVersion == SvtSaveOptions::ODFVER_010)
1401*b1cdbd2cSJim Jagielski {
1402*b1cdbd2cSJim Jagielski bLevelOK = sal_False;
1403*b1cdbd2cSJim Jagielski if (TOK_TTYPE_CHAPTER_INFO == nTokenType)
1404*b1cdbd2cSJim Jagielski {
1405*b1cdbd2cSJim Jagielski //if we are emitting for ODF 1.1 or 1.0, this information can be used for alphabetical index only
1406*b1cdbd2cSJim Jagielski //it's not permitted in other indexes
1407*b1cdbd2cSJim Jagielski if (eType != TEXT_SECTION_TYPE_ALPHABETICAL)
1408*b1cdbd2cSJim Jagielski {
1409*b1cdbd2cSJim Jagielski eElement = XML_TOKEN_INVALID; //not permitted, invalidate the element
1410*b1cdbd2cSJim Jagielski }
1411*b1cdbd2cSJim Jagielski else //maps format for 1.1 & 1.0
1412*b1cdbd2cSJim Jagielski {
1413*b1cdbd2cSJim Jagielski // a few word here: OOo up to 2.4 uses the field chapter info in Alphabetical index
1414*b1cdbd2cSJim Jagielski // in a way different from the ODF 1.1/1.0 specification:
1415*b1cdbd2cSJim Jagielski //
1416*b1cdbd2cSJim Jagielski // ODF1.1/1.0 OOo display in chapter info ODF1.2
1417*b1cdbd2cSJim Jagielski // (used in alphabetical index only
1418*b1cdbd2cSJim Jagielski //
1419*b1cdbd2cSJim Jagielski // number chapter number without pre/postfix plain-number
1420*b1cdbd2cSJim Jagielski // number-and-name chapter number without pre/postfix plus title plain-number-and-name
1421*b1cdbd2cSJim Jagielski //
1422*b1cdbd2cSJim Jagielski // with issue i89791 the reading of ODF 1.1 and 1.0 was corrected
1423*b1cdbd2cSJim Jagielski // this one corrects the writing back from ODF 1.2 to ODF 1.1/1.0
1424*b1cdbd2cSJim Jagielski // unfortunately if there is another application which interprets correctly ODF1.1/1.0,
1425*b1cdbd2cSJim Jagielski // the resulting alphabetical index will be rendered wrong by OOo 2.4 version
1426*b1cdbd2cSJim Jagielski //
1427*b1cdbd2cSJim Jagielski switch( nChapterFormat )
1428*b1cdbd2cSJim Jagielski {
1429*b1cdbd2cSJim Jagielski case ChapterFormat::DIGIT:
1430*b1cdbd2cSJim Jagielski nChapterFormat = ChapterFormat::NUMBER;
1431*b1cdbd2cSJim Jagielski break;
1432*b1cdbd2cSJim Jagielski case ChapterFormat::NO_PREFIX_SUFFIX:
1433*b1cdbd2cSJim Jagielski nChapterFormat = ChapterFormat::NAME_NUMBER;
1434*b1cdbd2cSJim Jagielski break;
1435*b1cdbd2cSJim Jagielski }
1436*b1cdbd2cSJim Jagielski }
1437*b1cdbd2cSJim Jagielski }
1438*b1cdbd2cSJim Jagielski else if (TOK_TTYPE_ENTRY_NUMBER == nTokenType)
1439*b1cdbd2cSJim Jagielski {
1440*b1cdbd2cSJim Jagielski //in case of ODF 1.1 or 1.0 the only allowed number format is "number"
1441*b1cdbd2cSJim Jagielski //so, force it...
1442*b1cdbd2cSJim Jagielski // The only expected 'foreign' nChapterFormat is
1443*b1cdbd2cSJim Jagielski // ' ChapterFormat::DIGIT', forced to 'none, since the
1444*b1cdbd2cSJim Jagielski // 'value allowed in ODF 1.1 and 1.0 is 'number' the default
1445*b1cdbd2cSJim Jagielski // this can be obtained by simply disabling the chapter format
1446*b1cdbd2cSJim Jagielski bChapterFormatOK = sal_False;
1447*b1cdbd2cSJim Jagielski }
1448*b1cdbd2cSJim Jagielski }
1449*b1cdbd2cSJim Jagielski //<---
1450*b1cdbd2cSJim Jagielski
1451*b1cdbd2cSJim Jagielski // ... and write Element
1452*b1cdbd2cSJim Jagielski if (eElement != XML_TOKEN_INVALID)
1453*b1cdbd2cSJim Jagielski {
1454*b1cdbd2cSJim Jagielski // character style (for most templates)
1455*b1cdbd2cSJim Jagielski if (bCharStyleOK)
1456*b1cdbd2cSJim Jagielski {
1457*b1cdbd2cSJim Jagielski switch (nTokenType)
1458*b1cdbd2cSJim Jagielski {
1459*b1cdbd2cSJim Jagielski case TOK_TTYPE_ENTRY_TEXT:
1460*b1cdbd2cSJim Jagielski case TOK_TTYPE_TEXT:
1461*b1cdbd2cSJim Jagielski case TOK_TTYPE_PAGE_NUMBER:
1462*b1cdbd2cSJim Jagielski case TOK_TTYPE_ENTRY_NUMBER:
1463*b1cdbd2cSJim Jagielski case TOK_TTYPE_HYPERLINK_START:
1464*b1cdbd2cSJim Jagielski case TOK_TTYPE_HYPERLINK_END:
1465*b1cdbd2cSJim Jagielski case TOK_TTYPE_BIBLIOGRAPHY:
1466*b1cdbd2cSJim Jagielski case TOK_TTYPE_CHAPTER_INFO:
1467*b1cdbd2cSJim Jagielski case TOK_TTYPE_TAB_STOP:
1468*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_TEXT,
1469*b1cdbd2cSJim Jagielski XML_STYLE_NAME,
1470*b1cdbd2cSJim Jagielski GetExport().EncodeStyleName( sCharStyle) );
1471*b1cdbd2cSJim Jagielski break;
1472*b1cdbd2cSJim Jagielski default:
1473*b1cdbd2cSJim Jagielski ; // nothing: no character style
1474*b1cdbd2cSJim Jagielski break;
1475*b1cdbd2cSJim Jagielski }
1476*b1cdbd2cSJim Jagielski }
1477*b1cdbd2cSJim Jagielski
1478*b1cdbd2cSJim Jagielski // tab properties
1479*b1cdbd2cSJim Jagielski if (TOK_TTYPE_TAB_STOP == nTokenType)
1480*b1cdbd2cSJim Jagielski {
1481*b1cdbd2cSJim Jagielski // tab type
1482*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_STYLE, XML_TYPE,
1483*b1cdbd2cSJim Jagielski bRightAligned ? XML_RIGHT : XML_LEFT);
1484*b1cdbd2cSJim Jagielski
1485*b1cdbd2cSJim Jagielski if (bTabPositionOK && (! bRightAligned))
1486*b1cdbd2cSJim Jagielski {
1487*b1cdbd2cSJim Jagielski // position for left tabs (convert to measure)
1488*b1cdbd2cSJim Jagielski OUStringBuffer sBuf;
1489*b1cdbd2cSJim Jagielski GetExport().GetMM100UnitConverter().convertMeasure(sBuf,
1490*b1cdbd2cSJim Jagielski nTabPosition);
1491*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_STYLE,
1492*b1cdbd2cSJim Jagielski XML_POSITION,
1493*b1cdbd2cSJim Jagielski sBuf.makeStringAndClear());
1494*b1cdbd2cSJim Jagielski }
1495*b1cdbd2cSJim Jagielski
1496*b1cdbd2cSJim Jagielski // fill char ("leader char")
1497*b1cdbd2cSJim Jagielski if (bFillCharOK && (sFillChar.getLength() > 0))
1498*b1cdbd2cSJim Jagielski {
1499*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_STYLE,
1500*b1cdbd2cSJim Jagielski XML_LEADER_CHAR, sFillChar);
1501*b1cdbd2cSJim Jagielski }
1502*b1cdbd2cSJim Jagielski
1503*b1cdbd2cSJim Jagielski // #i21237#
1504*b1cdbd2cSJim Jagielski if (bWithTabStopOK && ! bWithTabStop)
1505*b1cdbd2cSJim Jagielski {
1506*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_STYLE,
1507*b1cdbd2cSJim Jagielski XML_WITH_TAB,
1508*b1cdbd2cSJim Jagielski XML_FALSE);
1509*b1cdbd2cSJim Jagielski }
1510*b1cdbd2cSJim Jagielski }
1511*b1cdbd2cSJim Jagielski
1512*b1cdbd2cSJim Jagielski // bibliography data
1513*b1cdbd2cSJim Jagielski if (TOK_TTYPE_BIBLIOGRAPHY == nTokenType)
1514*b1cdbd2cSJim Jagielski {
1515*b1cdbd2cSJim Jagielski OSL_ENSURE(bBibliographyDataOK, "need bibl data");
1516*b1cdbd2cSJim Jagielski OUStringBuffer sBuf;
1517*b1cdbd2cSJim Jagielski if (SvXMLUnitConverter::convertEnum( sBuf, nBibliographyData,
1518*b1cdbd2cSJim Jagielski aBibliographyDataFieldMap ) )
1519*b1cdbd2cSJim Jagielski {
1520*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_TEXT,
1521*b1cdbd2cSJim Jagielski XML_BIBLIOGRAPHY_DATA_FIELD,
1522*b1cdbd2cSJim Jagielski sBuf.makeStringAndClear());
1523*b1cdbd2cSJim Jagielski }
1524*b1cdbd2cSJim Jagielski }
1525*b1cdbd2cSJim Jagielski
1526*b1cdbd2cSJim Jagielski // chapter info
1527*b1cdbd2cSJim Jagielski if (TOK_TTYPE_CHAPTER_INFO == nTokenType)
1528*b1cdbd2cSJim Jagielski {
1529*b1cdbd2cSJim Jagielski OSL_ENSURE(bChapterFormatOK, "need chapter info");
1530*b1cdbd2cSJim Jagielski GetExport().AddAttribute(
1531*b1cdbd2cSJim Jagielski XML_NAMESPACE_TEXT, XML_DISPLAY,
1532*b1cdbd2cSJim Jagielski XMLTextFieldExport::MapChapterDisplayFormat(nChapterFormat));
1533*b1cdbd2cSJim Jagielski //---> i53420
1534*b1cdbd2cSJim Jagielski if (bLevelOK)
1535*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_TEXT, XML_OUTLINE_LEVEL,
1536*b1cdbd2cSJim Jagielski OUString::valueOf((sal_Int32)nLevel));
1537*b1cdbd2cSJim Jagielski //<---
1538*b1cdbd2cSJim Jagielski }
1539*b1cdbd2cSJim Jagielski
1540*b1cdbd2cSJim Jagielski //--->i53420
1541*b1cdbd2cSJim Jagielski if (TOK_TTYPE_ENTRY_NUMBER == nTokenType)
1542*b1cdbd2cSJim Jagielski {
1543*b1cdbd2cSJim Jagielski if (bChapterFormatOK)
1544*b1cdbd2cSJim Jagielski GetExport().AddAttribute(
1545*b1cdbd2cSJim Jagielski XML_NAMESPACE_TEXT, XML_DISPLAY,
1546*b1cdbd2cSJim Jagielski XMLTextFieldExport::MapChapterDisplayFormat(nChapterFormat));
1547*b1cdbd2cSJim Jagielski
1548*b1cdbd2cSJim Jagielski if (bLevelOK)
1549*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_TEXT, XML_OUTLINE_LEVEL,
1550*b1cdbd2cSJim Jagielski OUString::valueOf((sal_Int32)nLevel));
1551*b1cdbd2cSJim Jagielski }
1552*b1cdbd2cSJim Jagielski //<---
1553*b1cdbd2cSJim Jagielski // export template
1554*b1cdbd2cSJim Jagielski SvXMLElementExport aTemplateElement(GetExport(), XML_NAMESPACE_TEXT,
1555*b1cdbd2cSJim Jagielski GetXMLToken(eElement),
1556*b1cdbd2cSJim Jagielski sal_True, sal_False)
1557*b1cdbd2cSJim Jagielski ;
1558*b1cdbd2cSJim Jagielski
1559*b1cdbd2cSJim Jagielski // entry text or span element: write text
1560*b1cdbd2cSJim Jagielski if (TOK_TTYPE_TEXT == nTokenType)
1561*b1cdbd2cSJim Jagielski {
1562*b1cdbd2cSJim Jagielski GetExport().Characters(sText);
1563*b1cdbd2cSJim Jagielski }
1564*b1cdbd2cSJim Jagielski }
1565*b1cdbd2cSJim Jagielski }
1566*b1cdbd2cSJim Jagielski
ExportLevelParagraphStyles(Reference<XIndexReplace> & xLevelParagraphStyles)1567*b1cdbd2cSJim Jagielski void XMLSectionExport::ExportLevelParagraphStyles(
1568*b1cdbd2cSJim Jagielski Reference<XIndexReplace> & xLevelParagraphStyles)
1569*b1cdbd2cSJim Jagielski {
1570*b1cdbd2cSJim Jagielski // iterate over levels
1571*b1cdbd2cSJim Jagielski sal_Int32 nPLevelCount = xLevelParagraphStyles->getCount();
1572*b1cdbd2cSJim Jagielski for(sal_Int32 nLevel = 0; nLevel < nPLevelCount; nLevel++)
1573*b1cdbd2cSJim Jagielski {
1574*b1cdbd2cSJim Jagielski Any aAny = xLevelParagraphStyles->getByIndex(nLevel);
1575*b1cdbd2cSJim Jagielski Sequence<OUString> aStyleNames;
1576*b1cdbd2cSJim Jagielski aAny >>= aStyleNames;
1577*b1cdbd2cSJim Jagielski
1578*b1cdbd2cSJim Jagielski // export only if at least one style is contained
1579*b1cdbd2cSJim Jagielski sal_Int32 nNamesCount = aStyleNames.getLength();
1580*b1cdbd2cSJim Jagielski if (nNamesCount > 0)
1581*b1cdbd2cSJim Jagielski {
1582*b1cdbd2cSJim Jagielski // level attribute; we count 1..10; API 0..9
1583*b1cdbd2cSJim Jagielski OUStringBuffer sBuf;
1584*b1cdbd2cSJim Jagielski sal_Int32 nLevelPlusOne = nLevel + 1;
1585*b1cdbd2cSJim Jagielski SvXMLUnitConverter::convertNumber(sBuf, nLevelPlusOne);
1586*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_TEXT,
1587*b1cdbd2cSJim Jagielski XML_OUTLINE_LEVEL,
1588*b1cdbd2cSJim Jagielski sBuf.makeStringAndClear());
1589*b1cdbd2cSJim Jagielski
1590*b1cdbd2cSJim Jagielski // source styles element
1591*b1cdbd2cSJim Jagielski SvXMLElementExport aParaStyles(GetExport(),
1592*b1cdbd2cSJim Jagielski XML_NAMESPACE_TEXT,
1593*b1cdbd2cSJim Jagielski XML_INDEX_SOURCE_STYLES,
1594*b1cdbd2cSJim Jagielski sal_True, sal_True);
1595*b1cdbd2cSJim Jagielski
1596*b1cdbd2cSJim Jagielski // iterate over styles in this level
1597*b1cdbd2cSJim Jagielski for(sal_Int32 nName = 0; nName < nNamesCount; nName++)
1598*b1cdbd2cSJim Jagielski {
1599*b1cdbd2cSJim Jagielski // stylename attribute
1600*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_TEXT,
1601*b1cdbd2cSJim Jagielski XML_STYLE_NAME,
1602*b1cdbd2cSJim Jagielski GetExport().EncodeStyleName( aStyleNames[nName]) );
1603*b1cdbd2cSJim Jagielski
1604*b1cdbd2cSJim Jagielski // element
1605*b1cdbd2cSJim Jagielski SvXMLElementExport aParaStyle(GetExport(),
1606*b1cdbd2cSJim Jagielski XML_NAMESPACE_TEXT,
1607*b1cdbd2cSJim Jagielski XML_INDEX_SOURCE_STYLE,
1608*b1cdbd2cSJim Jagielski sal_True, sal_False);
1609*b1cdbd2cSJim Jagielski }
1610*b1cdbd2cSJim Jagielski }
1611*b1cdbd2cSJim Jagielski }
1612*b1cdbd2cSJim Jagielski }
1613*b1cdbd2cSJim Jagielski
ExportBoolean(const Reference<XPropertySet> & rPropSet,const OUString & sPropertyName,enum XMLTokenEnum eAttributeName,sal_Bool bDefault,sal_Bool bInvert)1614*b1cdbd2cSJim Jagielski void XMLSectionExport::ExportBoolean(
1615*b1cdbd2cSJim Jagielski const Reference<XPropertySet> & rPropSet,
1616*b1cdbd2cSJim Jagielski const OUString& sPropertyName,
1617*b1cdbd2cSJim Jagielski enum XMLTokenEnum eAttributeName,
1618*b1cdbd2cSJim Jagielski sal_Bool bDefault,
1619*b1cdbd2cSJim Jagielski sal_Bool bInvert)
1620*b1cdbd2cSJim Jagielski {
1621*b1cdbd2cSJim Jagielski OSL_ENSURE(eAttributeName != XML_TOKEN_INVALID, "Need attribute name");
1622*b1cdbd2cSJim Jagielski
1623*b1cdbd2cSJim Jagielski Any aAny = rPropSet->getPropertyValue(sPropertyName);
1624*b1cdbd2cSJim Jagielski sal_Bool bTmp = *(sal_Bool*)aAny.getValue();
1625*b1cdbd2cSJim Jagielski
1626*b1cdbd2cSJim Jagielski // value = value ^ bInvert
1627*b1cdbd2cSJim Jagielski // omit if value == default
1628*b1cdbd2cSJim Jagielski // negate forces sal_Bool to 0/1, making them comparable
1629*b1cdbd2cSJim Jagielski if ((!(bTmp ^ bInvert)) != (!bDefault))
1630*b1cdbd2cSJim Jagielski {
1631*b1cdbd2cSJim Jagielski // export non-default value (since default is omitted)
1632*b1cdbd2cSJim Jagielski GetExport().AddAttribute(XML_NAMESPACE_TEXT,
1633*b1cdbd2cSJim Jagielski eAttributeName,
1634*b1cdbd2cSJim Jagielski bDefault ? XML_FALSE : XML_TRUE);
1635*b1cdbd2cSJim Jagielski }
1636*b1cdbd2cSJim Jagielski }
1637*b1cdbd2cSJim Jagielski
1638*b1cdbd2cSJim Jagielski const sal_Char sAPI_FieldMaster_Bibliography[] =
1639*b1cdbd2cSJim Jagielski "com.sun.star.text.FieldMaster.Bibliography";
1640*b1cdbd2cSJim Jagielski const sal_Char sAPI_SortKey[] = "SortKey";
1641*b1cdbd2cSJim Jagielski const sal_Char sAPI_IsSortAscending[] = "IsSortAscending";
1642*b1cdbd2cSJim Jagielski
ExportBibliographyConfiguration(SvXMLExport & rExport)1643*b1cdbd2cSJim Jagielski void XMLSectionExport::ExportBibliographyConfiguration(SvXMLExport& rExport)
1644*b1cdbd2cSJim Jagielski {
1645*b1cdbd2cSJim Jagielski // first: get field master (via text field supplier)
1646*b1cdbd2cSJim Jagielski Reference<XTextFieldsSupplier> xTextFieldsSupp( rExport.GetModel(),
1647*b1cdbd2cSJim Jagielski UNO_QUERY );
1648*b1cdbd2cSJim Jagielski if ( xTextFieldsSupp.is() )
1649*b1cdbd2cSJim Jagielski {
1650*b1cdbd2cSJim Jagielski const OUString sFieldMaster_Bibliography(
1651*b1cdbd2cSJim Jagielski RTL_CONSTASCII_USTRINGPARAM(sAPI_FieldMaster_Bibliography));
1652*b1cdbd2cSJim Jagielski
1653*b1cdbd2cSJim Jagielski // get bibliography field master
1654*b1cdbd2cSJim Jagielski Reference<XNameAccess> xMasters =
1655*b1cdbd2cSJim Jagielski xTextFieldsSupp->getTextFieldMasters();
1656*b1cdbd2cSJim Jagielski if ( xMasters->hasByName(sFieldMaster_Bibliography) )
1657*b1cdbd2cSJim Jagielski {
1658*b1cdbd2cSJim Jagielski Any aAny =
1659*b1cdbd2cSJim Jagielski xMasters->getByName(sFieldMaster_Bibliography);
1660*b1cdbd2cSJim Jagielski Reference<XPropertySet> xPropSet;
1661*b1cdbd2cSJim Jagielski aAny >>= xPropSet;
1662*b1cdbd2cSJim Jagielski
1663*b1cdbd2cSJim Jagielski OSL_ENSURE( xPropSet.is(), "field master must have XPropSet" );
1664*b1cdbd2cSJim Jagielski
1665*b1cdbd2cSJim Jagielski const OUString sBracketBefore(
1666*b1cdbd2cSJim Jagielski RTL_CONSTASCII_USTRINGPARAM("BracketBefore"));
1667*b1cdbd2cSJim Jagielski const OUString sBracketAfter(
1668*b1cdbd2cSJim Jagielski RTL_CONSTASCII_USTRINGPARAM("BracketAfter"));
1669*b1cdbd2cSJim Jagielski const OUString sIsNumberEntries(
1670*b1cdbd2cSJim Jagielski RTL_CONSTASCII_USTRINGPARAM("IsNumberEntries"));
1671*b1cdbd2cSJim Jagielski const OUString sIsSortByPosition(
1672*b1cdbd2cSJim Jagielski RTL_CONSTASCII_USTRINGPARAM("IsSortByPosition"));
1673*b1cdbd2cSJim Jagielski const OUString sSortKeys(
1674*b1cdbd2cSJim Jagielski RTL_CONSTASCII_USTRINGPARAM("SortKeys"));
1675*b1cdbd2cSJim Jagielski const OUString sSortAlgorithm(
1676*b1cdbd2cSJim Jagielski RTL_CONSTASCII_USTRINGPARAM("SortAlgorithm"));
1677*b1cdbd2cSJim Jagielski const OUString sLocale(
1678*b1cdbd2cSJim Jagielski RTL_CONSTASCII_USTRINGPARAM("Locale"));
1679*b1cdbd2cSJim Jagielski
1680*b1cdbd2cSJim Jagielski OUString sTmp;
1681*b1cdbd2cSJim Jagielski
1682*b1cdbd2cSJim Jagielski aAny = xPropSet->getPropertyValue(sBracketBefore);
1683*b1cdbd2cSJim Jagielski aAny >>= sTmp;
1684*b1cdbd2cSJim Jagielski rExport.AddAttribute(XML_NAMESPACE_TEXT, XML_PREFIX, sTmp);
1685*b1cdbd2cSJim Jagielski
1686*b1cdbd2cSJim Jagielski aAny = xPropSet->getPropertyValue(sBracketAfter);
1687*b1cdbd2cSJim Jagielski aAny >>= sTmp;
1688*b1cdbd2cSJim Jagielski rExport.AddAttribute(XML_NAMESPACE_TEXT, XML_SUFFIX, sTmp);
1689*b1cdbd2cSJim Jagielski
1690*b1cdbd2cSJim Jagielski aAny = xPropSet->getPropertyValue(sIsNumberEntries);
1691*b1cdbd2cSJim Jagielski if (*(sal_Bool*)aAny.getValue())
1692*b1cdbd2cSJim Jagielski {
1693*b1cdbd2cSJim Jagielski rExport.AddAttribute(XML_NAMESPACE_TEXT,
1694*b1cdbd2cSJim Jagielski XML_NUMBERED_ENTRIES, XML_TRUE);
1695*b1cdbd2cSJim Jagielski }
1696*b1cdbd2cSJim Jagielski
1697*b1cdbd2cSJim Jagielski aAny = xPropSet->getPropertyValue(sIsSortByPosition);
1698*b1cdbd2cSJim Jagielski if (! *(sal_Bool*)aAny.getValue())
1699*b1cdbd2cSJim Jagielski {
1700*b1cdbd2cSJim Jagielski rExport.AddAttribute(XML_NAMESPACE_TEXT,
1701*b1cdbd2cSJim Jagielski XML_SORT_BY_POSITION, XML_FALSE);
1702*b1cdbd2cSJim Jagielski }
1703*b1cdbd2cSJim Jagielski
1704*b1cdbd2cSJim Jagielski // sort algorithm
1705*b1cdbd2cSJim Jagielski aAny = xPropSet->getPropertyValue(sSortAlgorithm);
1706*b1cdbd2cSJim Jagielski OUString sAlgorithm;
1707*b1cdbd2cSJim Jagielski aAny >>= sAlgorithm;
1708*b1cdbd2cSJim Jagielski if( sAlgorithm.getLength() > 0 )
1709*b1cdbd2cSJim Jagielski {
1710*b1cdbd2cSJim Jagielski rExport.AddAttribute( XML_NAMESPACE_TEXT,
1711*b1cdbd2cSJim Jagielski XML_SORT_ALGORITHM, sAlgorithm );
1712*b1cdbd2cSJim Jagielski }
1713*b1cdbd2cSJim Jagielski
1714*b1cdbd2cSJim Jagielski // locale
1715*b1cdbd2cSJim Jagielski aAny = xPropSet->getPropertyValue(sLocale);
1716*b1cdbd2cSJim Jagielski Locale aLocale;
1717*b1cdbd2cSJim Jagielski aAny >>= aLocale;
1718*b1cdbd2cSJim Jagielski rExport.AddAttribute(XML_NAMESPACE_FO, XML_LANGUAGE,
1719*b1cdbd2cSJim Jagielski aLocale.Language);
1720*b1cdbd2cSJim Jagielski rExport.AddAttribute(XML_NAMESPACE_FO, XML_COUNTRY,
1721*b1cdbd2cSJim Jagielski aLocale.Country);
1722*b1cdbd2cSJim Jagielski
1723*b1cdbd2cSJim Jagielski // configuration element
1724*b1cdbd2cSJim Jagielski SvXMLElementExport aElement(rExport, XML_NAMESPACE_TEXT,
1725*b1cdbd2cSJim Jagielski XML_BIBLIOGRAPHY_CONFIGURATION,
1726*b1cdbd2cSJim Jagielski sal_True, sal_True);
1727*b1cdbd2cSJim Jagielski
1728*b1cdbd2cSJim Jagielski // sort keys
1729*b1cdbd2cSJim Jagielski aAny = xPropSet->getPropertyValue(sSortKeys);
1730*b1cdbd2cSJim Jagielski Sequence<Sequence<PropertyValue> > aKeys;
1731*b1cdbd2cSJim Jagielski aAny >>= aKeys;
1732*b1cdbd2cSJim Jagielski sal_Int32 nKeysCount = aKeys.getLength();
1733*b1cdbd2cSJim Jagielski for(sal_Int32 nKeys = 0; nKeys < nKeysCount; nKeys++)
1734*b1cdbd2cSJim Jagielski {
1735*b1cdbd2cSJim Jagielski Sequence<PropertyValue> & rKey = aKeys[nKeys];
1736*b1cdbd2cSJim Jagielski
1737*b1cdbd2cSJim Jagielski sal_Int32 nKeyCount = rKey.getLength();
1738*b1cdbd2cSJim Jagielski for(sal_Int32 nPropertyKey = 0; nPropertyKey < nKeyCount; nPropertyKey++)
1739*b1cdbd2cSJim Jagielski {
1740*b1cdbd2cSJim Jagielski PropertyValue& rValue = rKey[nPropertyKey];
1741*b1cdbd2cSJim Jagielski
1742*b1cdbd2cSJim Jagielski if (rValue.Name.equalsAsciiL(sAPI_SortKey,
1743*b1cdbd2cSJim Jagielski sizeof(sAPI_SortKey)-1))
1744*b1cdbd2cSJim Jagielski {
1745*b1cdbd2cSJim Jagielski sal_Int16 nKey = 0;
1746*b1cdbd2cSJim Jagielski rValue.Value >>= nKey;
1747*b1cdbd2cSJim Jagielski OUStringBuffer sBuf;
1748*b1cdbd2cSJim Jagielski if (SvXMLUnitConverter::convertEnum( sBuf, nKey,
1749*b1cdbd2cSJim Jagielski aBibliographyDataFieldMap ) )
1750*b1cdbd2cSJim Jagielski {
1751*b1cdbd2cSJim Jagielski rExport.AddAttribute(XML_NAMESPACE_TEXT, XML_KEY,
1752*b1cdbd2cSJim Jagielski sBuf.makeStringAndClear());
1753*b1cdbd2cSJim Jagielski }
1754*b1cdbd2cSJim Jagielski }
1755*b1cdbd2cSJim Jagielski else if (rValue.Name.equalsAsciiL(sAPI_IsSortAscending,
1756*b1cdbd2cSJim Jagielski sizeof(sAPI_IsSortAscending)-1))
1757*b1cdbd2cSJim Jagielski {
1758*b1cdbd2cSJim Jagielski sal_Bool bTmp = *(sal_Bool*)rValue.Value.getValue();
1759*b1cdbd2cSJim Jagielski rExport.AddAttribute(XML_NAMESPACE_TEXT,
1760*b1cdbd2cSJim Jagielski XML_SORT_ASCENDING,
1761*b1cdbd2cSJim Jagielski bTmp ? XML_TRUE : XML_FALSE);
1762*b1cdbd2cSJim Jagielski }
1763*b1cdbd2cSJim Jagielski }
1764*b1cdbd2cSJim Jagielski
1765*b1cdbd2cSJim Jagielski SvXMLElementExport aKeyElem(rExport,
1766*b1cdbd2cSJim Jagielski XML_NAMESPACE_TEXT, XML_SORT_KEY,
1767*b1cdbd2cSJim Jagielski sal_True, sal_True);
1768*b1cdbd2cSJim Jagielski }
1769*b1cdbd2cSJim Jagielski }
1770*b1cdbd2cSJim Jagielski }
1771*b1cdbd2cSJim Jagielski }
1772*b1cdbd2cSJim Jagielski
1773*b1cdbd2cSJim Jagielski
IsMuteSection(const Reference<XTextSection> & rSection) const1774*b1cdbd2cSJim Jagielski sal_Bool XMLSectionExport::IsMuteSection(
1775*b1cdbd2cSJim Jagielski const Reference<XTextSection> & rSection) const
1776*b1cdbd2cSJim Jagielski {
1777*b1cdbd2cSJim Jagielski sal_Bool bRet = sal_False;
1778*b1cdbd2cSJim Jagielski
1779*b1cdbd2cSJim Jagielski // a section is mute if
1780*b1cdbd2cSJim Jagielski // 1) it exists
1781*b1cdbd2cSJim Jagielski // 2) the SaveLinkedSections flag (at the export) is false
1782*b1cdbd2cSJim Jagielski // 3) the IsGlobalDocumentSection property is true
1783*b1cdbd2cSJim Jagielski // 4) it is not an Index
1784*b1cdbd2cSJim Jagielski
1785*b1cdbd2cSJim Jagielski if ( (!rExport.IsSaveLinkedSections()) && rSection.is() )
1786*b1cdbd2cSJim Jagielski {
1787*b1cdbd2cSJim Jagielski // walk the section chain and set bRet if any is linked
1788*b1cdbd2cSJim Jagielski for(Reference<XTextSection> aSection(rSection);
1789*b1cdbd2cSJim Jagielski aSection.is();
1790*b1cdbd2cSJim Jagielski aSection = aSection->getParentSection())
1791*b1cdbd2cSJim Jagielski {
1792*b1cdbd2cSJim Jagielski // check if it is a global document section (linked or index)
1793*b1cdbd2cSJim Jagielski Reference<XPropertySet> xPropSet(aSection, UNO_QUERY);
1794*b1cdbd2cSJim Jagielski if (xPropSet.is())
1795*b1cdbd2cSJim Jagielski {
1796*b1cdbd2cSJim Jagielski Any aAny = xPropSet->getPropertyValue(sIsGlobalDocumentSection);
1797*b1cdbd2cSJim Jagielski
1798*b1cdbd2cSJim Jagielski if ( *(sal_Bool*)aAny.getValue() )
1799*b1cdbd2cSJim Jagielski {
1800*b1cdbd2cSJim Jagielski Reference<XDocumentIndex> xIndex;
1801*b1cdbd2cSJim Jagielski if (! GetIndex(rSection, xIndex))
1802*b1cdbd2cSJim Jagielski {
1803*b1cdbd2cSJim Jagielski bRet = sal_True;
1804*b1cdbd2cSJim Jagielski
1805*b1cdbd2cSJim Jagielski // early out if result is known
1806*b1cdbd2cSJim Jagielski break;
1807*b1cdbd2cSJim Jagielski }
1808*b1cdbd2cSJim Jagielski }
1809*b1cdbd2cSJim Jagielski }
1810*b1cdbd2cSJim Jagielski // section has no properties: ignore
1811*b1cdbd2cSJim Jagielski }
1812*b1cdbd2cSJim Jagielski }
1813*b1cdbd2cSJim Jagielski // else: no section, or always save sections: default (false)
1814*b1cdbd2cSJim Jagielski
1815*b1cdbd2cSJim Jagielski return bRet;
1816*b1cdbd2cSJim Jagielski }
1817*b1cdbd2cSJim Jagielski
IsMuteSection(const Reference<XTextContent> & rSection,sal_Bool bDefault) const1818*b1cdbd2cSJim Jagielski sal_Bool XMLSectionExport::IsMuteSection(
1819*b1cdbd2cSJim Jagielski const Reference<XTextContent> & rSection,
1820*b1cdbd2cSJim Jagielski sal_Bool bDefault) const
1821*b1cdbd2cSJim Jagielski {
1822*b1cdbd2cSJim Jagielski // default: like default argument
1823*b1cdbd2cSJim Jagielski sal_Bool bRet = bDefault;
1824*b1cdbd2cSJim Jagielski
1825*b1cdbd2cSJim Jagielski Reference<XPropertySet> xPropSet(rSection->getAnchor(), UNO_QUERY);
1826*b1cdbd2cSJim Jagielski if (xPropSet.is())
1827*b1cdbd2cSJim Jagielski {
1828*b1cdbd2cSJim Jagielski if (xPropSet->getPropertySetInfo()->hasPropertyByName(sTextSection))
1829*b1cdbd2cSJim Jagielski {
1830*b1cdbd2cSJim Jagielski Any aAny = xPropSet->getPropertyValue(sTextSection);
1831*b1cdbd2cSJim Jagielski Reference<XTextSection> xSection;
1832*b1cdbd2cSJim Jagielski aAny >>= xSection;
1833*b1cdbd2cSJim Jagielski
1834*b1cdbd2cSJim Jagielski bRet = IsMuteSection(xSection);
1835*b1cdbd2cSJim Jagielski }
1836*b1cdbd2cSJim Jagielski // else: return default
1837*b1cdbd2cSJim Jagielski }
1838*b1cdbd2cSJim Jagielski // else: return default
1839*b1cdbd2cSJim Jagielski
1840*b1cdbd2cSJim Jagielski return bRet;
1841*b1cdbd2cSJim Jagielski }
1842*b1cdbd2cSJim Jagielski
IsInSection(const Reference<XTextSection> & rEnclosingSection,const Reference<XTextContent> & rContent,sal_Bool bDefault)1843*b1cdbd2cSJim Jagielski sal_Bool XMLSectionExport::IsInSection(
1844*b1cdbd2cSJim Jagielski const Reference<XTextSection> & rEnclosingSection,
1845*b1cdbd2cSJim Jagielski const Reference<XTextContent> & rContent,
1846*b1cdbd2cSJim Jagielski sal_Bool bDefault)
1847*b1cdbd2cSJim Jagielski {
1848*b1cdbd2cSJim Jagielski // default: like default argument
1849*b1cdbd2cSJim Jagielski sal_Bool bRet = bDefault;
1850*b1cdbd2cSJim Jagielski OSL_ENSURE(rEnclosingSection.is(), "enclosing section expected");
1851*b1cdbd2cSJim Jagielski
1852*b1cdbd2cSJim Jagielski Reference<XPropertySet> xPropSet(rContent, UNO_QUERY);
1853*b1cdbd2cSJim Jagielski if (xPropSet.is())
1854*b1cdbd2cSJim Jagielski {
1855*b1cdbd2cSJim Jagielski if (xPropSet->getPropertySetInfo()->hasPropertyByName(sTextSection))
1856*b1cdbd2cSJim Jagielski {
1857*b1cdbd2cSJim Jagielski Any aAny = xPropSet->getPropertyValue(sTextSection);
1858*b1cdbd2cSJim Jagielski Reference<XTextSection> xSection;
1859*b1cdbd2cSJim Jagielski aAny >>= xSection;
1860*b1cdbd2cSJim Jagielski
1861*b1cdbd2cSJim Jagielski // now walk chain of text sections (if we have one)
1862*b1cdbd2cSJim Jagielski if (xSection.is())
1863*b1cdbd2cSJim Jagielski {
1864*b1cdbd2cSJim Jagielski do
1865*b1cdbd2cSJim Jagielski {
1866*b1cdbd2cSJim Jagielski bRet = (rEnclosingSection == xSection);
1867*b1cdbd2cSJim Jagielski xSection = xSection->getParentSection();
1868*b1cdbd2cSJim Jagielski }
1869*b1cdbd2cSJim Jagielski while (!bRet && xSection.is());
1870*b1cdbd2cSJim Jagielski }
1871*b1cdbd2cSJim Jagielski else
1872*b1cdbd2cSJim Jagielski bRet = sal_False; // no section -> can't be inside
1873*b1cdbd2cSJim Jagielski }
1874*b1cdbd2cSJim Jagielski // else: no TextSection property -> return default
1875*b1cdbd2cSJim Jagielski }
1876*b1cdbd2cSJim Jagielski // else: no XPropertySet -> return default
1877*b1cdbd2cSJim Jagielski
1878*b1cdbd2cSJim Jagielski return bRet;
1879*b1cdbd2cSJim Jagielski }
1880*b1cdbd2cSJim Jagielski
1881*b1cdbd2cSJim Jagielski
ExportMasterDocHeadingDummies()1882*b1cdbd2cSJim Jagielski void XMLSectionExport::ExportMasterDocHeadingDummies()
1883*b1cdbd2cSJim Jagielski {
1884*b1cdbd2cSJim Jagielski if( bHeadingDummiesExported )
1885*b1cdbd2cSJim Jagielski return;
1886*b1cdbd2cSJim Jagielski
1887*b1cdbd2cSJim Jagielski Reference< XChapterNumberingSupplier > xCNSupplier( rExport.GetModel(),
1888*b1cdbd2cSJim Jagielski UNO_QUERY );
1889*b1cdbd2cSJim Jagielski
1890*b1cdbd2cSJim Jagielski Reference< XIndexReplace > xChapterNumbering;
1891*b1cdbd2cSJim Jagielski if( xCNSupplier.is() )
1892*b1cdbd2cSJim Jagielski xChapterNumbering = xCNSupplier->getChapterNumberingRules();
1893*b1cdbd2cSJim Jagielski
1894*b1cdbd2cSJim Jagielski if( !xChapterNumbering.is() )
1895*b1cdbd2cSJim Jagielski return;
1896*b1cdbd2cSJim Jagielski
1897*b1cdbd2cSJim Jagielski sal_Int32 nCount = xChapterNumbering->getCount();
1898*b1cdbd2cSJim Jagielski for( sal_Int32 nLevel = 0; nLevel < nCount; nLevel++ )
1899*b1cdbd2cSJim Jagielski {
1900*b1cdbd2cSJim Jagielski OUString sStyle;
1901*b1cdbd2cSJim Jagielski Sequence<PropertyValue> aProperties;
1902*b1cdbd2cSJim Jagielski xChapterNumbering->getByIndex( nLevel ) >>= aProperties;
1903*b1cdbd2cSJim Jagielski for( sal_Int32 i = 0; i < aProperties.getLength(); i++ )
1904*b1cdbd2cSJim Jagielski {
1905*b1cdbd2cSJim Jagielski if( aProperties[i].Name == sHeadingStyleName )
1906*b1cdbd2cSJim Jagielski {
1907*b1cdbd2cSJim Jagielski aProperties[i].Value >>= sStyle;
1908*b1cdbd2cSJim Jagielski break;
1909*b1cdbd2cSJim Jagielski }
1910*b1cdbd2cSJim Jagielski }
1911*b1cdbd2cSJim Jagielski if( sStyle.getLength() > 0 )
1912*b1cdbd2cSJim Jagielski {
1913*b1cdbd2cSJim Jagielski GetExport().AddAttribute( XML_NAMESPACE_TEXT, XML_STYLE_NAME,
1914*b1cdbd2cSJim Jagielski GetExport().EncodeStyleName( sStyle ) );
1915*b1cdbd2cSJim Jagielski
1916*b1cdbd2cSJim Jagielski OUStringBuffer sTmp;
1917*b1cdbd2cSJim Jagielski sTmp.append( nLevel + 1 );
1918*b1cdbd2cSJim Jagielski GetExport().AddAttribute( XML_NAMESPACE_TEXT, XML_LEVEL,
1919*b1cdbd2cSJim Jagielski sTmp.makeStringAndClear() );
1920*b1cdbd2cSJim Jagielski SvXMLElementExport aElem( GetExport(), XML_NAMESPACE_TEXT, XML_H,
1921*b1cdbd2cSJim Jagielski sal_True, sal_False );
1922*b1cdbd2cSJim Jagielski }
1923*b1cdbd2cSJim Jagielski }
1924*b1cdbd2cSJim Jagielski
1925*b1cdbd2cSJim Jagielski bHeadingDummiesExported = sal_True;
1926*b1cdbd2cSJim Jagielski }
1927