xref: /aoo4110/main/xmloff/source/text/txtflde.cxx (revision b1cdbd2c)
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 
27*b1cdbd2cSJim Jagielski /** @#file
28*b1cdbd2cSJim Jagielski  *
29*b1cdbd2cSJim Jagielski  *  export of all text fields
30*b1cdbd2cSJim Jagielski  */
31*b1cdbd2cSJim Jagielski #include "txtflde.hxx"
32*b1cdbd2cSJim Jagielski #include <xmloff/xmlexp.hxx>
33*b1cdbd2cSJim Jagielski #include <xmloff/xmlnumfe.hxx>
34*b1cdbd2cSJim Jagielski #include <xmloff/xmltoken.hxx>
35*b1cdbd2cSJim Jagielski #include <xmloff/xmlement.hxx>
36*b1cdbd2cSJim Jagielski #include <xmloff/xmluconv.hxx>
37*b1cdbd2cSJim Jagielski #include <xmloff/xmlnume.hxx>
38*b1cdbd2cSJim Jagielski #include "xmloff/numehelp.hxx"
39*b1cdbd2cSJim Jagielski 
40*b1cdbd2cSJim Jagielski #include <xmloff/families.hxx>
41*b1cdbd2cSJim Jagielski #include <xmloff/XMLEventExport.hxx>
42*b1cdbd2cSJim Jagielski #include "XMLTextCharStyleNamesElementExport.hxx"
43*b1cdbd2cSJim Jagielski #include <xmloff/nmspmap.hxx>
44*b1cdbd2cSJim Jagielski #include <com/sun/star/util/DateTime.hpp>
45*b1cdbd2cSJim Jagielski #include <com/sun/star/util/Date.hpp>
46*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XServiceInfo.hpp>
47*b1cdbd2cSJim Jagielski #include <com/sun/star/text/UserDataPart.hpp>
48*b1cdbd2cSJim Jagielski #include <com/sun/star/text/PageNumberType.hpp>
49*b1cdbd2cSJim Jagielski #include <com/sun/star/style/NumberingType.hpp>
50*b1cdbd2cSJim Jagielski #include <com/sun/star/text/ReferenceFieldPart.hpp>
51*b1cdbd2cSJim Jagielski #include <com/sun/star/text/ReferenceFieldSource.hpp>
52*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertySet.hpp>
53*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertyState.hpp>
54*b1cdbd2cSJim Jagielski #include <com/sun/star/text/XTextField.hpp>
55*b1cdbd2cSJim Jagielski #include <com/sun/star/text/XDependentTextField.hpp>
56*b1cdbd2cSJim Jagielski #include <com/sun/star/text/XTextFieldsSupplier.hpp>
57*b1cdbd2cSJim Jagielski 
58*b1cdbd2cSJim Jagielski #include <com/sun/star/text/SetVariableType.hpp>
59*b1cdbd2cSJim Jagielski #include <com/sun/star/text/PlaceholderType.hpp>
60*b1cdbd2cSJim Jagielski #include <com/sun/star/text/FilenameDisplayFormat.hpp>
61*b1cdbd2cSJim Jagielski #include <com/sun/star/text/ChapterFormat.hpp>
62*b1cdbd2cSJim Jagielski #include <com/sun/star/text/TemplateDisplayFormat.hpp>
63*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XModel.hpp>
64*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XNameReplace.hpp>
65*b1cdbd2cSJim Jagielski #include <com/sun/star/uno/Sequence.h>
66*b1cdbd2cSJim Jagielski #include <com/sun/star/util/NumberFormat.hpp>
67*b1cdbd2cSJim Jagielski #include <com/sun/star/text/BibliographyDataType.hpp>
68*b1cdbd2cSJim Jagielski #include <com/sun/star/sdb/CommandType.hpp>
69*b1cdbd2cSJim Jagielski #include <com/sun/star/rdf/XMetadatable.hpp>
70*b1cdbd2cSJim Jagielski #include <rtl/ustrbuf.hxx>
71*b1cdbd2cSJim Jagielski #include <tools/debug.hxx>
72*b1cdbd2cSJim Jagielski #include <rtl/math.hxx>
73*b1cdbd2cSJim Jagielski 
74*b1cdbd2cSJim Jagielski #include <vector>
75*b1cdbd2cSJim Jagielski 
76*b1cdbd2cSJim Jagielski using ::rtl::OUString;
77*b1cdbd2cSJim Jagielski using ::rtl::OUStringBuffer;
78*b1cdbd2cSJim Jagielski 
79*b1cdbd2cSJim Jagielski using namespace ::std;
80*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
81*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
82*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::text;
83*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::lang;
84*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::beans;
85*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::util;
86*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::style;
87*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::document;
88*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::container;
89*b1cdbd2cSJim Jagielski using namespace ::xmloff::token;
90*b1cdbd2cSJim Jagielski 
91*b1cdbd2cSJim Jagielski 
92*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_SENDER[] = "ExtendedUser";
93*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_AUTHOR[] = "Author";
94*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_JUMPEDIT[] = "JumpEdit";
95*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_GETEXP[] = "GetExpression";
96*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_SETEXP[] = "SetExpression";
97*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_USER[] = "User";
98*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_INPUT[] = "Input";
99*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_USERINPUT[] = "InputUser";
100*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_DATETIME[] = "DateTime";
101*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_PAGENUMBER[] = "PageNumber";
102*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_DB_NEXT[] = "DatabaseNextSet";
103*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_DB_SELECT[] = "DatabaseNumberOfSet";
104*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_DB_NUMBER[] = "DatabaseSetNumber";
105*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_DB_DISPLAY[] = "Database";
106*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_DB_NAME[] = "DatabaseName";
107*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_CONDITIONAL_TEXT[] = "ConditionalText";
108*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_HIDDEN_TEXT[] = "HiddenText";
109*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_HIDDEN_PARAGRAPH[] = "HiddenParagraph";
110*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_DOC_INFO_CHANGE_AUTHOR[] = "DocInfo.ChangeAuthor";
111*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_DOC_INFO_CHANGE_AUTHOR2[] = "docinfo.ChangeAuthor";
112*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_DOC_INFO_CHANGE_DATE_TIME[] = "DocInfo.ChangeDateTime";
113*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_DOC_INFO_CHANGE_DATE_TIME2[] = "docinfo.ChangeDateTime";
114*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_DOC_INFO_EDIT_TIME[] = "DocInfo.EditTime";
115*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_DOC_INFO_EDIT_TIME2[] = "docinfo.EditTime";
116*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_DOC_INFO_DESCRIPTION[] = "DocInfo.Description";
117*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_DOC_INFO_DESCRIPTION2[] = "docinfo.Description";
118*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_DOC_INFO_CREATE_AUTHOR[] = "DocInfo.CreateAuthor";
119*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_DOC_INFO_CREATE_AUTHOR2[] = "docinfo.CreateAuthor";
120*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_DOC_INFO_CREATE_DATE_TIME[] = "DocInfo.CreateDateTime";
121*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_DOC_INFO_CREATE_DATE_TIME2[] = "docinfo.CreateDateTime";
122*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_DOC_INFO_CUSTOM[] = "DocInfo.Custom";
123*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_DOC_INFO_CUSTOM2[] = "docinfo.Custom";
124*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_DOC_INFO_PRINT_AUTHOR[] = "DocInfo.PrintAuthor";
125*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_DOC_INFO_PRINT_AUTHOR2[] = "docinfo.PrintAuthor";
126*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_DOC_INFO_PRINT_DATE_TIME[] = "DocInfo.PrintDateTime";
127*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_DOC_INFO_PRINT_DATE_TIME2[] = "docinfo.PrintDateTime";
128*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_DOC_INFO_KEY_WORDS[] = "DocInfo.KeyWords";
129*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_DOC_INFO_KEY_WORDS2[] = "docinfo.KeyWords";
130*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_DOC_INFO_SUBJECT[] = "DocInfo.Subject";
131*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_DOC_INFO_SUBJECT2[] = "docinfo.Subject";
132*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_DOC_INFO_TITLE[] = "DocInfo.Title";
133*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_DOC_INFO_TITLE2[] = "docinfo.Title";
134*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_DOC_INFO_REVISION[] = "DocInfo.Revision";
135*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_DOC_INFO_REVISION2[] = "docinfo.Revision";
136*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_FILE_NAME[] = "FileName";
137*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_CHAPTER[] = "Chapter";
138*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_TEMPLATE_NAME[] = "TemplateName";
139*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_PAGE_COUNT[] = "PageCount";
140*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_PARAGRAPH_COUNT[] = "ParagraphCount";
141*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_WORD_COUNT[] = "WordCount";
142*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_CHARACTER_COUNT[] = "CharacterCount";
143*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_TABLE_COUNT[] = "TableCount";
144*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_GRAPHIC_COUNT[] = "GraphicObjectCount";
145*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_OBJECT_COUNT[] = "EmbeddedObjectCount";
146*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_REFERENCE_PAGE_SET[] = "ReferencePageSet";
147*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_REFERENCE_PAGE_GET[] = "ReferencePageGet";
148*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_SHEET_NAME[] = "SheetName";
149*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_MACRO[] = "Macro";
150*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_GET_REFERENCE[] = "GetReference";
151*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_DDE[] = "DDE";
152*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_URL[] = "URL";
153*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_BIBLIOGRAPHY[] = "Bibliography";
154*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_SCRIPT[] = "Script";
155*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_ANNOTATION[] = "Annotation";
156*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_COMBINED_CHARACTERS[] = "CombinedCharacters";
157*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_META[] = "MetadataField";
158*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_MEASURE[] = "Measure";
159*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_TABLE_FORMULA[] = "TableFormula";
160*b1cdbd2cSJim Jagielski static sal_Char __READONLY_DATA FIELD_SERVICE_DROP_DOWN[] = "DropDown";
161*b1cdbd2cSJim Jagielski 
162*b1cdbd2cSJim Jagielski SvXMLEnumStringMapEntry __READONLY_DATA aFieldServiceNameMapping[] =
163*b1cdbd2cSJim Jagielski {
164*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_SENDER, FIELD_ID_SENDER ),
165*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_AUTHOR, FIELD_ID_AUTHOR ),
166*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_JUMPEDIT, FIELD_ID_PLACEHOLDER ),
167*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_GETEXP, FIELD_ID_VARIABLE_GET ),
168*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_SETEXP, FIELD_ID_VARIABLE_SET ),
169*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_USER, FIELD_ID_USER_GET ),
170*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_INPUT, FIELD_ID_TEXT_INPUT ),
171*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_USERINPUT, FIELD_ID_USER_INPUT ),
172*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_DATETIME, FIELD_ID_TIME ),
173*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_PAGENUMBER, FIELD_ID_PAGENUMBER ),
174*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_REFERENCE_PAGE_SET, FIELD_ID_REFPAGE_SET ),
175*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_REFERENCE_PAGE_GET, FIELD_ID_REFPAGE_GET ),
176*b1cdbd2cSJim Jagielski 
177*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_DB_NEXT, FIELD_ID_DATABASE_NEXT ),
178*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_DB_SELECT, FIELD_ID_DATABASE_SELECT ),
179*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_DB_NUMBER, FIELD_ID_DATABASE_NUMBER ),
180*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_DB_DISPLAY, FIELD_ID_DATABASE_DISPLAY ),
181*b1cdbd2cSJim Jagielski 	// workaround for #no-bug#: Database/DataBase
182*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( "DataBase", FIELD_ID_DATABASE_DISPLAY ),
183*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_DB_NAME, FIELD_ID_DATABASE_NAME ),
184*b1cdbd2cSJim Jagielski 
185*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_DOC_INFO_CREATE_AUTHOR, FIELD_ID_DOCINFO_CREATION_AUTHOR ),
186*b1cdbd2cSJim Jagielski     ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_DOC_INFO_CREATE_AUTHOR2, FIELD_ID_DOCINFO_CREATION_AUTHOR ),
187*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_DOC_INFO_CREATE_DATE_TIME, FIELD_ID_DOCINFO_CREATION_TIME),
188*b1cdbd2cSJim Jagielski     ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_DOC_INFO_CREATE_DATE_TIME2, FIELD_ID_DOCINFO_CREATION_TIME),
189*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_DOC_INFO_CHANGE_AUTHOR, FIELD_ID_DOCINFO_SAVE_AUTHOR ),
190*b1cdbd2cSJim Jagielski     ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_DOC_INFO_CHANGE_AUTHOR2, FIELD_ID_DOCINFO_SAVE_AUTHOR ),
191*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_DOC_INFO_CHANGE_DATE_TIME, FIELD_ID_DOCINFO_SAVE_TIME ),
192*b1cdbd2cSJim Jagielski     ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_DOC_INFO_CHANGE_DATE_TIME2, FIELD_ID_DOCINFO_SAVE_TIME ),
193*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_DOC_INFO_EDIT_TIME, FIELD_ID_DOCINFO_EDIT_DURATION ),
194*b1cdbd2cSJim Jagielski     ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_DOC_INFO_EDIT_TIME2, FIELD_ID_DOCINFO_EDIT_DURATION ),
195*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_DOC_INFO_DESCRIPTION, FIELD_ID_DOCINFO_DESCRIPTION ),
196*b1cdbd2cSJim Jagielski     ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_DOC_INFO_DESCRIPTION2, FIELD_ID_DOCINFO_DESCRIPTION ),
197*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_DOC_INFO_CUSTOM, FIELD_ID_DOCINFO_CUSTOM ),
198*b1cdbd2cSJim Jagielski     ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_DOC_INFO_CUSTOM2, FIELD_ID_DOCINFO_CUSTOM ),
199*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_DOC_INFO_PRINT_AUTHOR, FIELD_ID_DOCINFO_PRINT_AUTHOR ),
200*b1cdbd2cSJim Jagielski     ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_DOC_INFO_PRINT_AUTHOR2, FIELD_ID_DOCINFO_PRINT_AUTHOR ),
201*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_DOC_INFO_PRINT_DATE_TIME, FIELD_ID_DOCINFO_PRINT_TIME ),
202*b1cdbd2cSJim Jagielski     ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_DOC_INFO_PRINT_DATE_TIME2, FIELD_ID_DOCINFO_PRINT_TIME ),
203*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_DOC_INFO_KEY_WORDS, FIELD_ID_DOCINFO_KEYWORDS ),
204*b1cdbd2cSJim Jagielski     ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_DOC_INFO_KEY_WORDS2, FIELD_ID_DOCINFO_KEYWORDS ),
205*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_DOC_INFO_SUBJECT, FIELD_ID_DOCINFO_SUBJECT ),
206*b1cdbd2cSJim Jagielski     ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_DOC_INFO_SUBJECT2, FIELD_ID_DOCINFO_SUBJECT ),
207*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_DOC_INFO_TITLE, FIELD_ID_DOCINFO_TITLE ),
208*b1cdbd2cSJim Jagielski     ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_DOC_INFO_TITLE2, FIELD_ID_DOCINFO_TITLE ),
209*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_DOC_INFO_REVISION, FIELD_ID_DOCINFO_REVISION ),
210*b1cdbd2cSJim Jagielski     ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_DOC_INFO_REVISION2, FIELD_ID_DOCINFO_REVISION ),
211*b1cdbd2cSJim Jagielski 
212*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_CONDITIONAL_TEXT, FIELD_ID_CONDITIONAL_TEXT ),
213*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_HIDDEN_TEXT, FIELD_ID_HIDDEN_TEXT ),
214*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_HIDDEN_PARAGRAPH, FIELD_ID_HIDDEN_PARAGRAPH ),
215*b1cdbd2cSJim Jagielski 
216*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_FILE_NAME, FIELD_ID_FILE_NAME ),
217*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_CHAPTER, FIELD_ID_CHAPTER ),
218*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_TEMPLATE_NAME, FIELD_ID_TEMPLATE_NAME ),
219*b1cdbd2cSJim Jagielski 
220*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_PAGE_COUNT, FIELD_ID_COUNT_PAGES ),
221*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_PARAGRAPH_COUNT, FIELD_ID_COUNT_PARAGRAPHS ),
222*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_WORD_COUNT, FIELD_ID_COUNT_WORDS ),
223*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_CHARACTER_COUNT, FIELD_ID_COUNT_CHARACTERS ),
224*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_TABLE_COUNT, FIELD_ID_COUNT_TABLES ),
225*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_GRAPHIC_COUNT, FIELD_ID_COUNT_GRAPHICS ),
226*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_OBJECT_COUNT, FIELD_ID_COUNT_OBJECTS ),
227*b1cdbd2cSJim Jagielski 
228*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_MACRO, FIELD_ID_MACRO ),
229*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_GET_REFERENCE, FIELD_ID_REF_REFERENCE ),
230*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_DDE, FIELD_ID_DDE ),
231*b1cdbd2cSJim Jagielski 
232*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_BIBLIOGRAPHY, FIELD_ID_BIBLIOGRAPHY ),
233*b1cdbd2cSJim Jagielski 
234*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_SCRIPT, FIELD_ID_SCRIPT ),
235*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_ANNOTATION, FIELD_ID_ANNOTATION ),
236*b1cdbd2cSJim Jagielski 
237*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_COMBINED_CHARACTERS, FIELD_ID_COMBINED_CHARACTERS ),
238*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_META, FIELD_ID_META ),
239*b1cdbd2cSJim Jagielski 
240*b1cdbd2cSJim Jagielski 	// non-writer fields
241*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_SHEET_NAME, FIELD_ID_SHEET_NAME ),
242*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_URL, FIELD_ID_URL ),
243*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_MEASURE, FIELD_ID_MEASURE ),
244*b1cdbd2cSJim Jagielski 
245*b1cdbd2cSJim Jagielski     // deprecated fields
246*b1cdbd2cSJim Jagielski     ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_TABLE_FORMULA, FIELD_ID_TABLE_FORMULA ),
247*b1cdbd2cSJim Jagielski     ENUM_STRING_MAP_ENTRY( FIELD_SERVICE_DROP_DOWN, FIELD_ID_DROP_DOWN ),
248*b1cdbd2cSJim Jagielski 
249*b1cdbd2cSJim Jagielski 	ENUM_STRING_MAP_END()
250*b1cdbd2cSJim Jagielski };
251*b1cdbd2cSJim Jagielski 
252*b1cdbd2cSJim Jagielski 
253*b1cdbd2cSJim Jagielski 
254*b1cdbd2cSJim Jagielski // property accessor helper functions
255*b1cdbd2cSJim Jagielski inline sal_Bool GetBoolProperty(const OUString&,
256*b1cdbd2cSJim Jagielski 									  const Reference<XPropertySet> &);
257*b1cdbd2cSJim Jagielski inline sal_Bool GetOptionalBoolProperty(const OUString&,
258*b1cdbd2cSJim Jagielski                                               const Reference<XPropertySet> &,
259*b1cdbd2cSJim Jagielski                                               const Reference<XPropertySetInfo> &,
260*b1cdbd2cSJim Jagielski                                               sal_Bool bDefault);
261*b1cdbd2cSJim Jagielski inline double GetDoubleProperty(const OUString&,
262*b1cdbd2cSJim Jagielski 									  const Reference<XPropertySet> &);
263*b1cdbd2cSJim Jagielski inline OUString const GetStringProperty(const OUString&,
264*b1cdbd2cSJim Jagielski 										const Reference<XPropertySet> &);
265*b1cdbd2cSJim Jagielski inline sal_Int32 GetIntProperty(const OUString&,
266*b1cdbd2cSJim Jagielski 									  const Reference<XPropertySet> &);
267*b1cdbd2cSJim Jagielski inline sal_Int16 GetInt16Property(const OUString&,
268*b1cdbd2cSJim Jagielski 										const Reference<XPropertySet> &);
269*b1cdbd2cSJim Jagielski inline sal_Int8 GetInt8Property(const OUString&,
270*b1cdbd2cSJim Jagielski 									  const Reference<XPropertySet> &);
271*b1cdbd2cSJim Jagielski inline DateTime const GetDateTimeProperty( const OUString& sPropName,
272*b1cdbd2cSJim Jagielski 										   const Reference<XPropertySet> & xPropSet);
273*b1cdbd2cSJim Jagielski inline Date const GetDateProperty( const OUString& sPropName,
274*b1cdbd2cSJim Jagielski 								   const Reference<XPropertySet> & xPropSet);
275*b1cdbd2cSJim Jagielski inline Sequence<OUString> const GetStringSequenceProperty(
276*b1cdbd2cSJim Jagielski 	                               const OUString& sPropName,
277*b1cdbd2cSJim Jagielski                                    const Reference<XPropertySet> & xPropSet);
278*b1cdbd2cSJim Jagielski 
279*b1cdbd2cSJim Jagielski 
280*b1cdbd2cSJim Jagielski 
XMLTextFieldExport(SvXMLExport & rExp,XMLPropertyState * pCombinedCharState)281*b1cdbd2cSJim Jagielski XMLTextFieldExport::XMLTextFieldExport( SvXMLExport& rExp,
282*b1cdbd2cSJim Jagielski 										XMLPropertyState* pCombinedCharState)
283*b1cdbd2cSJim Jagielski 	: rExport(rExp),
284*b1cdbd2cSJim Jagielski 	  pUsedMasters(NULL),
285*b1cdbd2cSJim Jagielski 	  sServicePrefix(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.textfield.")),
286*b1cdbd2cSJim Jagielski 	  sFieldMasterPrefix(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.FieldMaster.")),
287*b1cdbd2cSJim Jagielski 	  sPresentationServicePrefix(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.presentation.TextField.")),
288*b1cdbd2cSJim Jagielski 
289*b1cdbd2cSJim Jagielski 	sPropertyAdjust(RTL_CONSTASCII_USTRINGPARAM("Adjust")),
290*b1cdbd2cSJim Jagielski 	sPropertyAuthor(RTL_CONSTASCII_USTRINGPARAM("Author")),
291*b1cdbd2cSJim Jagielski 	sPropertyChapterFormat(RTL_CONSTASCII_USTRINGPARAM("ChapterFormat")),
292*b1cdbd2cSJim Jagielski 	sPropertyChapterNumberingLevel(RTL_CONSTASCII_USTRINGPARAM("ChapterNumberingLevel")),
293*b1cdbd2cSJim Jagielski 	sPropertyCharStyleNames(RTL_CONSTASCII_USTRINGPARAM("CharStyleNames")),
294*b1cdbd2cSJim Jagielski 	sPropertyCondition(RTL_CONSTASCII_USTRINGPARAM("Condition")),
295*b1cdbd2cSJim Jagielski 	sPropertyContent(RTL_CONSTASCII_USTRINGPARAM("Content")),
296*b1cdbd2cSJim Jagielski 	sPropertyDataBaseName(RTL_CONSTASCII_USTRINGPARAM("DataBaseName")),
297*b1cdbd2cSJim Jagielski 	sPropertyDataBaseURL(RTL_CONSTASCII_USTRINGPARAM("DataBaseURL")),
298*b1cdbd2cSJim Jagielski 	sPropertyDataColumnName(RTL_CONSTASCII_USTRINGPARAM("DataColumnName")),
299*b1cdbd2cSJim Jagielski 	sPropertyDataCommandType(RTL_CONSTASCII_USTRINGPARAM("DataCommandType")),
300*b1cdbd2cSJim Jagielski 	sPropertyDataTableName(RTL_CONSTASCII_USTRINGPARAM("DataTableName")),
301*b1cdbd2cSJim Jagielski 	sPropertyDate(RTL_CONSTASCII_USTRINGPARAM("Date")),
302*b1cdbd2cSJim Jagielski 	sPropertyDateTime(RTL_CONSTASCII_USTRINGPARAM("DateTime")),
303*b1cdbd2cSJim Jagielski 	sPropertyDateTimeValue(RTL_CONSTASCII_USTRINGPARAM("DateTimeValue")),
304*b1cdbd2cSJim Jagielski 	sPropertyDDECommandElement(RTL_CONSTASCII_USTRINGPARAM("DDECommandElement")),
305*b1cdbd2cSJim Jagielski 	sPropertyDDECommandFile(RTL_CONSTASCII_USTRINGPARAM("DDECommandFile")),
306*b1cdbd2cSJim Jagielski 	sPropertyDDECommandType(RTL_CONSTASCII_USTRINGPARAM("DDECommandType")),
307*b1cdbd2cSJim Jagielski 	sPropertyDependentTextFields(RTL_CONSTASCII_USTRINGPARAM("DependentTextFields")),
308*b1cdbd2cSJim Jagielski 	sPropertyFalseContent(RTL_CONSTASCII_USTRINGPARAM("FalseContent")),
309*b1cdbd2cSJim Jagielski 	sPropertyFields(RTL_CONSTASCII_USTRINGPARAM("Fields")),
310*b1cdbd2cSJim Jagielski 	sPropertyFieldSubType(RTL_CONSTASCII_USTRINGPARAM("UserDataType")),
311*b1cdbd2cSJim Jagielski 	sPropertyFileFormat(RTL_CONSTASCII_USTRINGPARAM("FileFormat")),
312*b1cdbd2cSJim Jagielski 	sPropertyFullName(RTL_CONSTASCII_USTRINGPARAM("FullName")),
313*b1cdbd2cSJim Jagielski 	sPropertyHint(RTL_CONSTASCII_USTRINGPARAM("Hint")),
314*b1cdbd2cSJim Jagielski     sPropertyInitials(RTL_CONSTASCII_USTRINGPARAM("Initials")),
315*b1cdbd2cSJim Jagielski 	sPropertyInstanceName(RTL_CONSTASCII_USTRINGPARAM("InstanceName")),
316*b1cdbd2cSJim Jagielski 	sPropertyIsAutomaticUpdate(RTL_CONSTASCII_USTRINGPARAM("IsAutomaticUpdate")),
317*b1cdbd2cSJim Jagielski 	sPropertyIsConditionTrue(RTL_CONSTASCII_USTRINGPARAM("IsConditionTrue")),
318*b1cdbd2cSJim Jagielski 	sPropertyIsDataBaseFormat(RTL_CONSTASCII_USTRINGPARAM("DataBaseFormat")),
319*b1cdbd2cSJim Jagielski 	sPropertyIsDate(RTL_CONSTASCII_USTRINGPARAM("IsDate")),
320*b1cdbd2cSJim Jagielski 	sPropertyIsExpression(RTL_CONSTASCII_USTRINGPARAM("IsExpression")),
321*b1cdbd2cSJim Jagielski 	sPropertyIsFixed(RTL_CONSTASCII_USTRINGPARAM("IsFixed")),
322*b1cdbd2cSJim Jagielski 	sPropertyIsFixedLanguage(RTL_CONSTASCII_USTRINGPARAM("IsFixedLanguage")),
323*b1cdbd2cSJim Jagielski 	sPropertyIsHidden(RTL_CONSTASCII_USTRINGPARAM("IsHidden")),
324*b1cdbd2cSJim Jagielski 	sPropertyIsInput(RTL_CONSTASCII_USTRINGPARAM("Input")),
325*b1cdbd2cSJim Jagielski 	sPropertyIsShowFormula(RTL_CONSTASCII_USTRINGPARAM("IsShowFormula")),
326*b1cdbd2cSJim Jagielski 	sPropertyIsVisible(RTL_CONSTASCII_USTRINGPARAM("IsVisible")),
327*b1cdbd2cSJim Jagielski 	sPropertyItems(RTL_CONSTASCII_USTRINGPARAM("Items")),
328*b1cdbd2cSJim Jagielski 	sPropertyLevel(RTL_CONSTASCII_USTRINGPARAM("Level")),
329*b1cdbd2cSJim Jagielski 	sPropertyMacro(RTL_CONSTASCII_USTRINGPARAM("Macro")),
330*b1cdbd2cSJim Jagielski 	sPropertyMeasureKind(RTL_CONSTASCII_USTRINGPARAM("Kind")),
331*b1cdbd2cSJim Jagielski 	sPropertyName(RTL_CONSTASCII_USTRINGPARAM("Name")),
332*b1cdbd2cSJim Jagielski 	sPropertyNumberFormat(RTL_CONSTASCII_USTRINGPARAM("NumberFormat")),
333*b1cdbd2cSJim Jagielski 	sPropertyNumberingSeparator(RTL_CONSTASCII_USTRINGPARAM("NumberingSeparator")),
334*b1cdbd2cSJim Jagielski 	sPropertyNumberingType(RTL_CONSTASCII_USTRINGPARAM("NumberingType")),
335*b1cdbd2cSJim Jagielski 	sPropertyOffset(RTL_CONSTASCII_USTRINGPARAM("Offset")),
336*b1cdbd2cSJim Jagielski 	sPropertyOn(RTL_CONSTASCII_USTRINGPARAM("On")),
337*b1cdbd2cSJim Jagielski 	sPropertyPlaceholder(RTL_CONSTASCII_USTRINGPARAM("PlaceHolder")),
338*b1cdbd2cSJim Jagielski 	sPropertyPlaceholderType(RTL_CONSTASCII_USTRINGPARAM("PlaceHolderType")),
339*b1cdbd2cSJim Jagielski 	sPropertyReferenceFieldPart(RTL_CONSTASCII_USTRINGPARAM("ReferenceFieldPart")),
340*b1cdbd2cSJim Jagielski 	sPropertyReferenceFieldSource(RTL_CONSTASCII_USTRINGPARAM("ReferenceFieldSource")),
341*b1cdbd2cSJim Jagielski 	sPropertyReferenceFieldType(RTL_CONSTASCII_USTRINGPARAM("ReferenceFieldType")),
342*b1cdbd2cSJim Jagielski 	sPropertyRevision(RTL_CONSTASCII_USTRINGPARAM("Revision")),
343*b1cdbd2cSJim Jagielski 	sPropertyScriptType(RTL_CONSTASCII_USTRINGPARAM("ScriptType")),
344*b1cdbd2cSJim Jagielski 	sPropertySelectedItem(RTL_CONSTASCII_USTRINGPARAM("SelectedItem")),
345*b1cdbd2cSJim Jagielski 	sPropertySequenceNumber(RTL_CONSTASCII_USTRINGPARAM("SequenceNumber")),
346*b1cdbd2cSJim Jagielski 	sPropertySequenceValue(RTL_CONSTASCII_USTRINGPARAM("SequenceValue")),
347*b1cdbd2cSJim Jagielski 	sPropertySetNumber(RTL_CONSTASCII_USTRINGPARAM("SetNumber")),
348*b1cdbd2cSJim Jagielski 	sPropertySourceName(RTL_CONSTASCII_USTRINGPARAM("SourceName")),
349*b1cdbd2cSJim Jagielski 	sPropertySubType(RTL_CONSTASCII_USTRINGPARAM("SubType")),
350*b1cdbd2cSJim Jagielski 	sPropertyTargetFrame(RTL_CONSTASCII_USTRINGPARAM("TargetFrame")),
351*b1cdbd2cSJim Jagielski 	sPropertyTrueContent(RTL_CONSTASCII_USTRINGPARAM("TrueContent")),
352*b1cdbd2cSJim Jagielski 	sPropertyURL(RTL_CONSTASCII_USTRINGPARAM("URL")),
353*b1cdbd2cSJim Jagielski 	sPropertyURLContent(RTL_CONSTASCII_USTRINGPARAM("URLContent")),
354*b1cdbd2cSJim Jagielski 	sPropertyUserText(RTL_CONSTASCII_USTRINGPARAM("UserText")),
355*b1cdbd2cSJim Jagielski 	sPropertyValue(RTL_CONSTASCII_USTRINGPARAM("Value")),
356*b1cdbd2cSJim Jagielski 	sPropertyVariableName(RTL_CONSTASCII_USTRINGPARAM("VariableName")),
357*b1cdbd2cSJim Jagielski 	sPropertyVariableSubType(RTL_CONSTASCII_USTRINGPARAM("VariableSubtype")),
358*b1cdbd2cSJim Jagielski       sPropertyHelp(RTL_CONSTASCII_USTRINGPARAM("Help")),
359*b1cdbd2cSJim Jagielski       sPropertyTooltip(RTL_CONSTASCII_USTRINGPARAM("Tooltip")),
360*b1cdbd2cSJim Jagielski       sPropertyTextRange(RTL_CONSTASCII_USTRINGPARAM("TextRange")),
361*b1cdbd2cSJim Jagielski 	  pCombinedCharactersPropertyState(pCombinedCharState)
362*b1cdbd2cSJim Jagielski {
363*b1cdbd2cSJim Jagielski 	SetExportOnlyUsedFieldDeclarations();
364*b1cdbd2cSJim Jagielski }
365*b1cdbd2cSJim Jagielski 
~XMLTextFieldExport()366*b1cdbd2cSJim Jagielski XMLTextFieldExport::~XMLTextFieldExport()
367*b1cdbd2cSJim Jagielski {
368*b1cdbd2cSJim Jagielski 	delete pCombinedCharactersPropertyState;
369*b1cdbd2cSJim Jagielski 	delete pUsedMasters;
370*b1cdbd2cSJim Jagielski }
371*b1cdbd2cSJim Jagielski 
372*b1cdbd2cSJim Jagielski /// get the field ID (as in FieldIDEnum) from XTextField
GetFieldID(const Reference<XTextField> & rTextField,const Reference<XPropertySet> & xPropSet)373*b1cdbd2cSJim Jagielski enum FieldIdEnum XMLTextFieldExport::GetFieldID(
374*b1cdbd2cSJim Jagielski 	const Reference<XTextField> & rTextField,
375*b1cdbd2cSJim Jagielski 	const Reference<XPropertySet> & xPropSet)
376*b1cdbd2cSJim Jagielski {
377*b1cdbd2cSJim Jagielski 	// get service names for rTextField (via XServiceInfo service)
378*b1cdbd2cSJim Jagielski 	Reference<XServiceInfo> xService(rTextField, UNO_QUERY);
379*b1cdbd2cSJim Jagielski 	const Sequence<OUString> aServices = xService->getSupportedServiceNames();
380*b1cdbd2cSJim Jagielski 	const OUString* pNames = aServices.getConstArray();
381*b1cdbd2cSJim Jagielski 	sal_Int32 nCount = aServices.getLength();
382*b1cdbd2cSJim Jagielski 
383*b1cdbd2cSJim Jagielski 	OUString sFieldName;	// service name postfix of current field
384*b1cdbd2cSJim Jagielski 
385*b1cdbd2cSJim Jagielski 	// search for TextField service name
386*b1cdbd2cSJim Jagielski 	while( nCount-- )
387*b1cdbd2cSJim Jagielski 	{
388*b1cdbd2cSJim Jagielski         if (pNames->matchIgnoreAsciiCase(sServicePrefix))
389*b1cdbd2cSJim Jagielski 		{
390*b1cdbd2cSJim Jagielski 			// TextField found => postfix is field type!
391*b1cdbd2cSJim Jagielski 			sFieldName = pNames->copy(sServicePrefix.getLength());
392*b1cdbd2cSJim Jagielski 			break;
393*b1cdbd2cSJim Jagielski 		}
394*b1cdbd2cSJim Jagielski 
395*b1cdbd2cSJim Jagielski 		++pNames;
396*b1cdbd2cSJim Jagielski 	}
397*b1cdbd2cSJim Jagielski 
398*b1cdbd2cSJim Jagielski 	// if this is not a normal text field, check if its a presentation text field
399*b1cdbd2cSJim Jagielski 	if( sFieldName.getLength() == 0 )
400*b1cdbd2cSJim Jagielski 	{
401*b1cdbd2cSJim Jagielski 		const OUString* pNames2 = aServices.getConstArray();
402*b1cdbd2cSJim Jagielski 		sal_Int32 nCount2 = aServices.getLength();
403*b1cdbd2cSJim Jagielski 		// search for TextField service name
404*b1cdbd2cSJim Jagielski 		while( nCount2-- )
405*b1cdbd2cSJim Jagielski 		{
406*b1cdbd2cSJim Jagielski 			if( 0 == pNames2->compareTo(sPresentationServicePrefix, sPresentationServicePrefix.getLength()))
407*b1cdbd2cSJim Jagielski 			{
408*b1cdbd2cSJim Jagielski 				// TextField found => postfix is field type!
409*b1cdbd2cSJim Jagielski 				sFieldName = pNames2->copy(sPresentationServicePrefix.getLength());
410*b1cdbd2cSJim Jagielski 				break;
411*b1cdbd2cSJim Jagielski 			}
412*b1cdbd2cSJim Jagielski 
413*b1cdbd2cSJim Jagielski 			++pNames2;
414*b1cdbd2cSJim Jagielski 		}
415*b1cdbd2cSJim Jagielski 
416*b1cdbd2cSJim Jagielski 		if( sFieldName.getLength() != 0 )
417*b1cdbd2cSJim Jagielski 		{
418*b1cdbd2cSJim Jagielski 			if( sFieldName.reverseCompareToAsciiL( RTL_CONSTASCII_STRINGPARAM( "Header" ) ) == 0 )
419*b1cdbd2cSJim Jagielski 			{
420*b1cdbd2cSJim Jagielski 				return FIELD_ID_DRAW_HEADER;
421*b1cdbd2cSJim Jagielski 			}
422*b1cdbd2cSJim Jagielski 			else if( sFieldName.reverseCompareToAsciiL( RTL_CONSTASCII_STRINGPARAM( "Footer" ) ) == 0 )
423*b1cdbd2cSJim Jagielski 			{
424*b1cdbd2cSJim Jagielski 				return FIELD_ID_DRAW_FOOTER;
425*b1cdbd2cSJim Jagielski 			}
426*b1cdbd2cSJim Jagielski 			else if( sFieldName.reverseCompareToAsciiL( RTL_CONSTASCII_STRINGPARAM( "DateTime" ) ) == 0 )
427*b1cdbd2cSJim Jagielski 			{
428*b1cdbd2cSJim Jagielski 				return FIELD_ID_DRAW_DATE_TIME;
429*b1cdbd2cSJim Jagielski 			}
430*b1cdbd2cSJim Jagielski 		}
431*b1cdbd2cSJim Jagielski 	}
432*b1cdbd2cSJim Jagielski 
433*b1cdbd2cSJim Jagielski 	// map postfix of service name to field ID
434*b1cdbd2cSJim Jagielski 	DBG_ASSERT(sFieldName.getLength()>0, "no TextField service found!");
435*b1cdbd2cSJim Jagielski 	return MapFieldName(sFieldName, xPropSet);
436*b1cdbd2cSJim Jagielski }
437*b1cdbd2cSJim Jagielski 
MapFieldName(const OUString & sFieldName,const Reference<XPropertySet> & xPropSet)438*b1cdbd2cSJim Jagielski enum FieldIdEnum XMLTextFieldExport::MapFieldName(
439*b1cdbd2cSJim Jagielski 	const OUString& sFieldName,				// field (master) name
440*b1cdbd2cSJim Jagielski 	const Reference<XPropertySet> & xPropSet)	// for subtype
441*b1cdbd2cSJim Jagielski {
442*b1cdbd2cSJim Jagielski 	// we'll proceed in 2 steps:
443*b1cdbd2cSJim Jagielski 	// a) map service name to preliminary FIELD_ID
444*b1cdbd2cSJim Jagielski 	// b) map those prelim. FIELD_IDs that correspond to several field types
445*b1cdbd2cSJim Jagielski 	//    (in our (XML) world) to final FIELD IDs
446*b1cdbd2cSJim Jagielski 
447*b1cdbd2cSJim Jagielski 
448*b1cdbd2cSJim Jagielski 	// a) find prelim. FIELD_ID via aFieldServiceMapping
449*b1cdbd2cSJim Jagielski 
450*b1cdbd2cSJim Jagielski 	// check for non-empty service name
451*b1cdbd2cSJim Jagielski 	DBG_ASSERT(sFieldName.getLength()>0, "no valid service name!");
452*b1cdbd2cSJim Jagielski 	enum FieldIdEnum nToken = FIELD_ID_UNKNOWN;
453*b1cdbd2cSJim Jagielski 	if (sFieldName.getLength() > 0)
454*b1cdbd2cSJim Jagielski 	{
455*b1cdbd2cSJim Jagielski 		// map name to prelim. ID
456*b1cdbd2cSJim Jagielski 		sal_uInt16 nTmp;
457*b1cdbd2cSJim Jagielski 		sal_Bool bRet = GetExport().GetMM100UnitConverter().convertEnum(
458*b1cdbd2cSJim Jagielski 			nTmp, sFieldName, aFieldServiceNameMapping);
459*b1cdbd2cSJim Jagielski 
460*b1cdbd2cSJim Jagielski 		// check return
461*b1cdbd2cSJim Jagielski 		DBG_ASSERT(bRet, "Unknown field service name encountered!");
462*b1cdbd2cSJim Jagielski 		if (! bRet)
463*b1cdbd2cSJim Jagielski 		{
464*b1cdbd2cSJim Jagielski 			nToken = FIELD_ID_UNKNOWN;
465*b1cdbd2cSJim Jagielski 		}
466*b1cdbd2cSJim Jagielski 		else
467*b1cdbd2cSJim Jagielski 		{
468*b1cdbd2cSJim Jagielski 			nToken = (enum FieldIdEnum)nTmp;
469*b1cdbd2cSJim Jagielski 		}
470*b1cdbd2cSJim Jagielski 	} else {
471*b1cdbd2cSJim Jagielski 		// invalid service name
472*b1cdbd2cSJim Jagielski 		nToken = FIELD_ID_UNKNOWN;
473*b1cdbd2cSJim Jagielski 	}
474*b1cdbd2cSJim Jagielski 
475*b1cdbd2cSJim Jagielski 	// b) map prelim. to final FIELD_IDs
476*b1cdbd2cSJim Jagielski 	switch (nToken) {
477*b1cdbd2cSJim Jagielski 		case FIELD_ID_VARIABLE_SET:
478*b1cdbd2cSJim Jagielski 			if (GetBoolProperty(sPropertyIsInput, xPropSet))
479*b1cdbd2cSJim Jagielski 			{
480*b1cdbd2cSJim Jagielski 				nToken = FIELD_ID_VARIABLE_INPUT;
481*b1cdbd2cSJim Jagielski 			}
482*b1cdbd2cSJim Jagielski 			else
483*b1cdbd2cSJim Jagielski 			{
484*b1cdbd2cSJim Jagielski 				switch (GetIntProperty(sPropertySubType, xPropSet))
485*b1cdbd2cSJim Jagielski 				{
486*b1cdbd2cSJim Jagielski 					case SetVariableType::STRING:	// text field
487*b1cdbd2cSJim Jagielski 					case SetVariableType::VAR:		// num field
488*b1cdbd2cSJim Jagielski 						nToken = FIELD_ID_VARIABLE_SET;
489*b1cdbd2cSJim Jagielski 						break;
490*b1cdbd2cSJim Jagielski 					case SetVariableType::SEQUENCE:
491*b1cdbd2cSJim Jagielski 						nToken = FIELD_ID_SEQUENCE;
492*b1cdbd2cSJim Jagielski 						break;
493*b1cdbd2cSJim Jagielski 					case SetVariableType::FORMULA:
494*b1cdbd2cSJim Jagielski 					default:
495*b1cdbd2cSJim Jagielski 						nToken = FIELD_ID_UNKNOWN;
496*b1cdbd2cSJim Jagielski 						break;
497*b1cdbd2cSJim Jagielski 				}
498*b1cdbd2cSJim Jagielski 			}
499*b1cdbd2cSJim Jagielski 			break;
500*b1cdbd2cSJim Jagielski 
501*b1cdbd2cSJim Jagielski 		case FIELD_ID_VARIABLE_GET:
502*b1cdbd2cSJim Jagielski 			switch (GetIntProperty(sPropertySubType, xPropSet))
503*b1cdbd2cSJim Jagielski 			{
504*b1cdbd2cSJim Jagielski 				case SetVariableType::STRING:	// text field
505*b1cdbd2cSJim Jagielski 				case SetVariableType::VAR:		// num field
506*b1cdbd2cSJim Jagielski 					nToken = FIELD_ID_VARIABLE_GET;
507*b1cdbd2cSJim Jagielski 					break;
508*b1cdbd2cSJim Jagielski 				case SetVariableType::FORMULA:
509*b1cdbd2cSJim Jagielski 					nToken = FIELD_ID_EXPRESSION;
510*b1cdbd2cSJim Jagielski 					break;
511*b1cdbd2cSJim Jagielski 				case SetVariableType::SEQUENCE:
512*b1cdbd2cSJim Jagielski 				default:
513*b1cdbd2cSJim Jagielski 					nToken = FIELD_ID_UNKNOWN;
514*b1cdbd2cSJim Jagielski 					break;
515*b1cdbd2cSJim Jagielski 			}
516*b1cdbd2cSJim Jagielski 			break;
517*b1cdbd2cSJim Jagielski 
518*b1cdbd2cSJim Jagielski 		case FIELD_ID_TIME:
519*b1cdbd2cSJim Jagielski 			if (GetBoolProperty(sPropertyIsDate, xPropSet))
520*b1cdbd2cSJim Jagielski 			{
521*b1cdbd2cSJim Jagielski 				nToken = FIELD_ID_DATE;
522*b1cdbd2cSJim Jagielski 			}
523*b1cdbd2cSJim Jagielski 			break;
524*b1cdbd2cSJim Jagielski 
525*b1cdbd2cSJim Jagielski 		case FIELD_ID_PAGENUMBER:
526*b1cdbd2cSJim Jagielski 			// NumberingType not available in non-Writer apps
527*b1cdbd2cSJim Jagielski 			if (xPropSet->getPropertySetInfo()->
528*b1cdbd2cSJim Jagielski 				hasPropertyByName(sPropertyNumberingType))
529*b1cdbd2cSJim Jagielski 			{
530*b1cdbd2cSJim Jagielski 				if (NumberingType::CHAR_SPECIAL == GetIntProperty(
531*b1cdbd2cSJim Jagielski 											sPropertyNumberingType, xPropSet))
532*b1cdbd2cSJim Jagielski 				{
533*b1cdbd2cSJim Jagielski 					nToken = FIELD_ID_PAGESTRING;
534*b1cdbd2cSJim Jagielski 				}
535*b1cdbd2cSJim Jagielski 			}
536*b1cdbd2cSJim Jagielski 			break;
537*b1cdbd2cSJim Jagielski 
538*b1cdbd2cSJim Jagielski 		case FIELD_ID_DOCINFO_CREATION_TIME:
539*b1cdbd2cSJim Jagielski  			if (GetBoolProperty(sPropertyIsDate, xPropSet))
540*b1cdbd2cSJim Jagielski 			{
541*b1cdbd2cSJim Jagielski 				nToken = FIELD_ID_DOCINFO_CREATION_DATE;
542*b1cdbd2cSJim Jagielski 			}
543*b1cdbd2cSJim Jagielski 			break;
544*b1cdbd2cSJim Jagielski 
545*b1cdbd2cSJim Jagielski 		case FIELD_ID_DOCINFO_PRINT_TIME:
546*b1cdbd2cSJim Jagielski  			if (GetBoolProperty(sPropertyIsDate, xPropSet))
547*b1cdbd2cSJim Jagielski 			{
548*b1cdbd2cSJim Jagielski 				nToken = FIELD_ID_DOCINFO_PRINT_DATE;
549*b1cdbd2cSJim Jagielski 			}
550*b1cdbd2cSJim Jagielski 			break;
551*b1cdbd2cSJim Jagielski 
552*b1cdbd2cSJim Jagielski 		case FIELD_ID_DOCINFO_SAVE_TIME:
553*b1cdbd2cSJim Jagielski  			if (GetBoolProperty(sPropertyIsDate, xPropSet))
554*b1cdbd2cSJim Jagielski 			{
555*b1cdbd2cSJim Jagielski 				nToken = FIELD_ID_DOCINFO_SAVE_DATE;
556*b1cdbd2cSJim Jagielski 			}
557*b1cdbd2cSJim Jagielski 			break;
558*b1cdbd2cSJim Jagielski 
559*b1cdbd2cSJim Jagielski 		case FIELD_ID_REF_REFERENCE:
560*b1cdbd2cSJim Jagielski 			switch (GetInt16Property(sPropertyReferenceFieldSource, xPropSet))
561*b1cdbd2cSJim Jagielski 			{
562*b1cdbd2cSJim Jagielski 				case ReferenceFieldSource::REFERENCE_MARK:
563*b1cdbd2cSJim Jagielski 					nToken = FIELD_ID_REF_REFERENCE;
564*b1cdbd2cSJim Jagielski 					break;
565*b1cdbd2cSJim Jagielski 				case ReferenceFieldSource::SEQUENCE_FIELD:
566*b1cdbd2cSJim Jagielski 					nToken = FIELD_ID_REF_SEQUENCE;
567*b1cdbd2cSJim Jagielski 					break;
568*b1cdbd2cSJim Jagielski 				case ReferenceFieldSource::BOOKMARK:
569*b1cdbd2cSJim Jagielski 					nToken = FIELD_ID_REF_BOOKMARK;
570*b1cdbd2cSJim Jagielski 					break;
571*b1cdbd2cSJim Jagielski 				case ReferenceFieldSource::FOOTNOTE:
572*b1cdbd2cSJim Jagielski 					nToken = FIELD_ID_REF_FOOTNOTE;
573*b1cdbd2cSJim Jagielski 					break;
574*b1cdbd2cSJim Jagielski 				case ReferenceFieldSource::ENDNOTE:
575*b1cdbd2cSJim Jagielski 					nToken = FIELD_ID_REF_ENDNOTE;
576*b1cdbd2cSJim Jagielski 					break;
577*b1cdbd2cSJim Jagielski 				default:
578*b1cdbd2cSJim Jagielski 					nToken = FIELD_ID_UNKNOWN;
579*b1cdbd2cSJim Jagielski 					break;
580*b1cdbd2cSJim Jagielski 			}
581*b1cdbd2cSJim Jagielski 			break;
582*b1cdbd2cSJim Jagielski 
583*b1cdbd2cSJim Jagielski 		case FIELD_ID_COMBINED_CHARACTERS:
584*b1cdbd2cSJim Jagielski 		case FIELD_ID_SCRIPT:
585*b1cdbd2cSJim Jagielski 		case FIELD_ID_ANNOTATION:
586*b1cdbd2cSJim Jagielski 		case FIELD_ID_BIBLIOGRAPHY:
587*b1cdbd2cSJim Jagielski 		case FIELD_ID_DDE:
588*b1cdbd2cSJim Jagielski 		case FIELD_ID_MACRO:
589*b1cdbd2cSJim Jagielski 		case FIELD_ID_REFPAGE_SET:
590*b1cdbd2cSJim Jagielski 		case FIELD_ID_REFPAGE_GET:
591*b1cdbd2cSJim Jagielski 		case FIELD_ID_COUNT_PAGES:
592*b1cdbd2cSJim Jagielski 		case FIELD_ID_COUNT_PARAGRAPHS:
593*b1cdbd2cSJim Jagielski 		case FIELD_ID_COUNT_WORDS:
594*b1cdbd2cSJim Jagielski 		case FIELD_ID_COUNT_CHARACTERS:
595*b1cdbd2cSJim Jagielski 		case FIELD_ID_COUNT_TABLES:
596*b1cdbd2cSJim Jagielski 		case FIELD_ID_COUNT_GRAPHICS:
597*b1cdbd2cSJim Jagielski 		case FIELD_ID_COUNT_OBJECTS:
598*b1cdbd2cSJim Jagielski 		case FIELD_ID_CONDITIONAL_TEXT:
599*b1cdbd2cSJim Jagielski 		case FIELD_ID_HIDDEN_TEXT:
600*b1cdbd2cSJim Jagielski 		case FIELD_ID_HIDDEN_PARAGRAPH:
601*b1cdbd2cSJim Jagielski 		case FIELD_ID_DOCINFO_CREATION_AUTHOR:
602*b1cdbd2cSJim Jagielski 		case FIELD_ID_DOCINFO_DESCRIPTION:
603*b1cdbd2cSJim Jagielski 		case FIELD_ID_DOCINFO_CUSTOM:
604*b1cdbd2cSJim Jagielski 		case FIELD_ID_DOCINFO_PRINT_AUTHOR:
605*b1cdbd2cSJim Jagielski 		case FIELD_ID_DOCINFO_TITLE:
606*b1cdbd2cSJim Jagielski 		case FIELD_ID_DOCINFO_SUBJECT:
607*b1cdbd2cSJim Jagielski 		case FIELD_ID_DOCINFO_KEYWORDS:
608*b1cdbd2cSJim Jagielski 		case FIELD_ID_DOCINFO_REVISION:
609*b1cdbd2cSJim Jagielski 		case FIELD_ID_DOCINFO_EDIT_DURATION:
610*b1cdbd2cSJim Jagielski 		case FIELD_ID_DOCINFO_SAVE_AUTHOR:
611*b1cdbd2cSJim Jagielski 		case FIELD_ID_TEXT_INPUT:
612*b1cdbd2cSJim Jagielski 		case FIELD_ID_USER_INPUT:
613*b1cdbd2cSJim Jagielski 		case FIELD_ID_AUTHOR:
614*b1cdbd2cSJim Jagielski 		case FIELD_ID_SENDER:
615*b1cdbd2cSJim Jagielski 		case FIELD_ID_PLACEHOLDER:
616*b1cdbd2cSJim Jagielski 		case FIELD_ID_USER_GET:
617*b1cdbd2cSJim Jagielski 		case FIELD_ID_DATABASE_NEXT:
618*b1cdbd2cSJim Jagielski 		case FIELD_ID_DATABASE_SELECT:
619*b1cdbd2cSJim Jagielski 		case FIELD_ID_DATABASE_DISPLAY:
620*b1cdbd2cSJim Jagielski 		case FIELD_ID_DATABASE_NAME:
621*b1cdbd2cSJim Jagielski 		case FIELD_ID_DATABASE_NUMBER:
622*b1cdbd2cSJim Jagielski 		case FIELD_ID_TEMPLATE_NAME:
623*b1cdbd2cSJim Jagielski 		case FIELD_ID_CHAPTER:
624*b1cdbd2cSJim Jagielski 		case FIELD_ID_FILE_NAME:
625*b1cdbd2cSJim Jagielski         case FIELD_ID_META:
626*b1cdbd2cSJim Jagielski 		case FIELD_ID_SHEET_NAME:
627*b1cdbd2cSJim Jagielski 		case FIELD_ID_MEASURE:
628*b1cdbd2cSJim Jagielski 		case FIELD_ID_URL:
629*b1cdbd2cSJim Jagielski         case FIELD_ID_TABLE_FORMULA:
630*b1cdbd2cSJim Jagielski         case FIELD_ID_DROP_DOWN:
631*b1cdbd2cSJim Jagielski 			; // these field IDs are final
632*b1cdbd2cSJim Jagielski 			break;
633*b1cdbd2cSJim Jagielski 
634*b1cdbd2cSJim Jagielski 		default:
635*b1cdbd2cSJim Jagielski 			nToken = FIELD_ID_UNKNOWN;
636*b1cdbd2cSJim Jagielski 	}
637*b1cdbd2cSJim Jagielski 
638*b1cdbd2cSJim Jagielski 	// ... and return final FIELD_ID
639*b1cdbd2cSJim Jagielski 	return nToken;
640*b1cdbd2cSJim Jagielski }
641*b1cdbd2cSJim Jagielski 
642*b1cdbd2cSJim Jagielski // is string or numeric field?
IsStringField(FieldIdEnum nFieldType,const Reference<XPropertySet> & xPropSet)643*b1cdbd2cSJim Jagielski sal_Bool XMLTextFieldExport::IsStringField(
644*b1cdbd2cSJim Jagielski 	FieldIdEnum nFieldType,
645*b1cdbd2cSJim Jagielski 	const Reference<XPropertySet> & xPropSet)
646*b1cdbd2cSJim Jagielski {
647*b1cdbd2cSJim Jagielski 	switch (nFieldType) {
648*b1cdbd2cSJim Jagielski 
649*b1cdbd2cSJim Jagielski 	case FIELD_ID_VARIABLE_GET:
650*b1cdbd2cSJim Jagielski 	case FIELD_ID_VARIABLE_SET:
651*b1cdbd2cSJim Jagielski 	case FIELD_ID_VARIABLE_INPUT:
652*b1cdbd2cSJim Jagielski 	{
653*b1cdbd2cSJim Jagielski 		// depends on field sub type
654*b1cdbd2cSJim Jagielski 		return ( GetIntProperty(sPropertySubType, xPropSet) ==
655*b1cdbd2cSJim Jagielski 				 SetVariableType::STRING					);
656*b1cdbd2cSJim Jagielski 	}
657*b1cdbd2cSJim Jagielski 
658*b1cdbd2cSJim Jagielski 	case FIELD_ID_USER_GET:
659*b1cdbd2cSJim Jagielski 	case FIELD_ID_USER_INPUT:
660*b1cdbd2cSJim Jagielski 	{
661*b1cdbd2cSJim Jagielski 		Reference<XTextField> xTextField(xPropSet, UNO_QUERY);
662*b1cdbd2cSJim Jagielski 		DBG_ASSERT(xTextField.is(), "field is no XTextField!");
663*b1cdbd2cSJim Jagielski 		sal_Bool bRet = GetBoolProperty(sPropertyIsExpression,
664*b1cdbd2cSJim Jagielski 										GetMasterPropertySet(xTextField));
665*b1cdbd2cSJim Jagielski 		return !bRet;
666*b1cdbd2cSJim Jagielski 	}
667*b1cdbd2cSJim Jagielski 
668*b1cdbd2cSJim Jagielski     case FIELD_ID_META:
669*b1cdbd2cSJim Jagielski         return 0 > GetIntProperty(sPropertyNumberFormat, xPropSet);
670*b1cdbd2cSJim Jagielski 
671*b1cdbd2cSJim Jagielski 	case FIELD_ID_DATABASE_DISPLAY:
672*b1cdbd2cSJim Jagielski 		// TODO: depends on... ???
673*b1cdbd2cSJim Jagielski 		// workaround #no-bug#: no data type
674*b1cdbd2cSJim Jagielski 		return 5100 == GetIntProperty(sPropertyNumberFormat, xPropSet);
675*b1cdbd2cSJim Jagielski 
676*b1cdbd2cSJim Jagielski     case FIELD_ID_TABLE_FORMULA:
677*b1cdbd2cSJim Jagielski         // legacy field: always a number field (because it always has
678*b1cdbd2cSJim Jagielski         // a number format)
679*b1cdbd2cSJim Jagielski         return sal_False;
680*b1cdbd2cSJim Jagielski 
681*b1cdbd2cSJim Jagielski 	case FIELD_ID_COUNT_PAGES:
682*b1cdbd2cSJim Jagielski 	case FIELD_ID_COUNT_PARAGRAPHS:
683*b1cdbd2cSJim Jagielski 	case FIELD_ID_COUNT_WORDS:
684*b1cdbd2cSJim Jagielski 	case FIELD_ID_COUNT_CHARACTERS:
685*b1cdbd2cSJim Jagielski 	case FIELD_ID_COUNT_TABLES:
686*b1cdbd2cSJim Jagielski 	case FIELD_ID_COUNT_GRAPHICS:
687*b1cdbd2cSJim Jagielski 	case FIELD_ID_COUNT_OBJECTS:
688*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_SAVE_TIME:
689*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_SAVE_DATE:
690*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_CREATION_DATE:
691*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_CREATION_TIME:
692*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_PRINT_TIME:
693*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_PRINT_DATE:
694*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_EDIT_DURATION:
695*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_REVISION:
696*b1cdbd2cSJim Jagielski 	case FIELD_ID_DATABASE_NUMBER:
697*b1cdbd2cSJim Jagielski 	case FIELD_ID_EXPRESSION:
698*b1cdbd2cSJim Jagielski 	case FIELD_ID_SEQUENCE:
699*b1cdbd2cSJim Jagielski 	case FIELD_ID_DATE:
700*b1cdbd2cSJim Jagielski 	case FIELD_ID_TIME:
701*b1cdbd2cSJim Jagielski 	case FIELD_ID_PAGENUMBER:
702*b1cdbd2cSJim Jagielski 	case FIELD_ID_REFPAGE_SET:
703*b1cdbd2cSJim Jagielski 	case FIELD_ID_REFPAGE_GET:
704*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_CUSTOM:
705*b1cdbd2cSJim Jagielski 		// always number
706*b1cdbd2cSJim Jagielski 		return sal_False;
707*b1cdbd2cSJim Jagielski 
708*b1cdbd2cSJim Jagielski 	case FIELD_ID_COMBINED_CHARACTERS:
709*b1cdbd2cSJim Jagielski 	case FIELD_ID_BIBLIOGRAPHY:
710*b1cdbd2cSJim Jagielski 	case FIELD_ID_DDE:
711*b1cdbd2cSJim Jagielski 	case FIELD_ID_REF_REFERENCE:
712*b1cdbd2cSJim Jagielski 	case FIELD_ID_REF_SEQUENCE:
713*b1cdbd2cSJim Jagielski 	case FIELD_ID_REF_BOOKMARK:
714*b1cdbd2cSJim Jagielski 	case FIELD_ID_REF_FOOTNOTE:
715*b1cdbd2cSJim Jagielski 	case FIELD_ID_REF_ENDNOTE:
716*b1cdbd2cSJim Jagielski 	case FIELD_ID_MACRO:
717*b1cdbd2cSJim Jagielski 	case FIELD_ID_TEMPLATE_NAME:
718*b1cdbd2cSJim Jagielski 	case FIELD_ID_CHAPTER:
719*b1cdbd2cSJim Jagielski 	case FIELD_ID_FILE_NAME:
720*b1cdbd2cSJim Jagielski 	case FIELD_ID_CONDITIONAL_TEXT:
721*b1cdbd2cSJim Jagielski 	case FIELD_ID_HIDDEN_TEXT:
722*b1cdbd2cSJim Jagielski 	case FIELD_ID_HIDDEN_PARAGRAPH:
723*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_CREATION_AUTHOR:
724*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_DESCRIPTION:
725*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_PRINT_AUTHOR:
726*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_TITLE:
727*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_SUBJECT:
728*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_KEYWORDS:
729*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_SAVE_AUTHOR:
730*b1cdbd2cSJim Jagielski 	case FIELD_ID_DATABASE_NAME:
731*b1cdbd2cSJim Jagielski 	case FIELD_ID_TEXT_INPUT:
732*b1cdbd2cSJim Jagielski 	case FIELD_ID_SENDER:
733*b1cdbd2cSJim Jagielski 	case FIELD_ID_AUTHOR:
734*b1cdbd2cSJim Jagielski 	case FIELD_ID_PAGESTRING:
735*b1cdbd2cSJim Jagielski 	case FIELD_ID_SHEET_NAME:
736*b1cdbd2cSJim Jagielski 	case FIELD_ID_MEASURE:
737*b1cdbd2cSJim Jagielski 	case FIELD_ID_URL:
738*b1cdbd2cSJim Jagielski     case FIELD_ID_DROP_DOWN:
739*b1cdbd2cSJim Jagielski 		// always string:
740*b1cdbd2cSJim Jagielski 		return sal_True;
741*b1cdbd2cSJim Jagielski 
742*b1cdbd2cSJim Jagielski 	case FIELD_ID_SCRIPT:
743*b1cdbd2cSJim Jagielski 	case FIELD_ID_ANNOTATION:
744*b1cdbd2cSJim Jagielski    	case FIELD_ID_DATABASE_NEXT:
745*b1cdbd2cSJim Jagielski 	case FIELD_ID_DATABASE_SELECT:
746*b1cdbd2cSJim Jagielski 	case FIELD_ID_VARIABLE_DECL:
747*b1cdbd2cSJim Jagielski 	case FIELD_ID_USER_DECL:
748*b1cdbd2cSJim Jagielski 	case FIELD_ID_SEQUENCE_DECL:
749*b1cdbd2cSJim Jagielski 	case FIELD_ID_PLACEHOLDER:
750*b1cdbd2cSJim Jagielski 	case FIELD_ID_UNKNOWN:
751*b1cdbd2cSJim Jagielski 	case FIELD_ID_DRAW_HEADER:
752*b1cdbd2cSJim Jagielski 	case FIELD_ID_DRAW_FOOTER:
753*b1cdbd2cSJim Jagielski 	case FIELD_ID_DRAW_DATE_TIME:
754*b1cdbd2cSJim Jagielski 	default:
755*b1cdbd2cSJim Jagielski 		DBG_ERROR("unkown field type/field has no content");
756*b1cdbd2cSJim Jagielski 		return sal_True; // invalid info; string in case of doubt
757*b1cdbd2cSJim Jagielski 	}
758*b1cdbd2cSJim Jagielski }
759*b1cdbd2cSJim Jagielski 
760*b1cdbd2cSJim Jagielski /// export the styles needed by the given field. Called on first pass
761*b1cdbd2cSJim Jagielski /// through document
ExportFieldAutoStyle(const Reference<XTextField> & rTextField,const sal_Bool bProgress,const sal_Bool bRecursive)762*b1cdbd2cSJim Jagielski void XMLTextFieldExport::ExportFieldAutoStyle(
763*b1cdbd2cSJim Jagielski     const Reference<XTextField> & rTextField, const sal_Bool bProgress,
764*b1cdbd2cSJim Jagielski     const sal_Bool bRecursive )
765*b1cdbd2cSJim Jagielski {
766*b1cdbd2cSJim Jagielski 	// get property set
767*b1cdbd2cSJim Jagielski 	Reference<XPropertySet> xPropSet(rTextField, UNO_QUERY);
768*b1cdbd2cSJim Jagielski 
769*b1cdbd2cSJim Jagielski 	// add field master to list of used field masters (if desired)
770*b1cdbd2cSJim Jagielski 	if (NULL != pUsedMasters)
771*b1cdbd2cSJim Jagielski 	{
772*b1cdbd2cSJim Jagielski 		Reference<XDependentTextField> xDepField(rTextField, UNO_QUERY);
773*b1cdbd2cSJim Jagielski 		if (xDepField.is())
774*b1cdbd2cSJim Jagielski 		{
775*b1cdbd2cSJim Jagielski 			Reference<XText> xOurText = rTextField->getAnchor()->getText();
776*b1cdbd2cSJim Jagielski 
777*b1cdbd2cSJim Jagielski 			map<Reference<XText>, set<OUString> >::iterator aMapIter =
778*b1cdbd2cSJim Jagielski 				pUsedMasters->find(xOurText);
779*b1cdbd2cSJim Jagielski 
780*b1cdbd2cSJim Jagielski 			// insert a list for our XText (if necessary)
781*b1cdbd2cSJim Jagielski 			if (aMapIter == pUsedMasters->end())
782*b1cdbd2cSJim Jagielski 			{
783*b1cdbd2cSJim Jagielski 				set<OUString> aSet;
784*b1cdbd2cSJim Jagielski 				(*pUsedMasters)[xOurText] = aSet;
785*b1cdbd2cSJim Jagielski 				aMapIter = pUsedMasters->find(xOurText);
786*b1cdbd2cSJim Jagielski 			}
787*b1cdbd2cSJim Jagielski 
788*b1cdbd2cSJim Jagielski 			// insert this text field master
789*b1cdbd2cSJim Jagielski 			OUString sFieldMasterName = GetStringProperty(
790*b1cdbd2cSJim Jagielski 				sPropertyInstanceName, xDepField->getTextFieldMaster());
791*b1cdbd2cSJim Jagielski 			if (sFieldMasterName.getLength() > 0)
792*b1cdbd2cSJim Jagielski 				aMapIter->second.insert( sFieldMasterName );
793*b1cdbd2cSJim Jagielski 		}
794*b1cdbd2cSJim Jagielski 		// else: no dependent field -> no master -> ignore
795*b1cdbd2cSJim Jagielski 	}
796*b1cdbd2cSJim Jagielski 
797*b1cdbd2cSJim Jagielski 	// get Field ID
798*b1cdbd2cSJim Jagielski 	FieldIdEnum nToken = GetFieldID(rTextField, xPropSet);
799*b1cdbd2cSJim Jagielski 
800*b1cdbd2cSJim Jagielski 	// export the character style for all fields
801*b1cdbd2cSJim Jagielski 	// with one exception: combined character fields export their own
802*b1cdbd2cSJim Jagielski 	//                     text style below
803*b1cdbd2cSJim Jagielski 	Reference <XPropertySet> xRangePropSet(rTextField->getAnchor(), UNO_QUERY);
804*b1cdbd2cSJim Jagielski 	if (FIELD_ID_COMBINED_CHARACTERS != nToken)
805*b1cdbd2cSJim Jagielski 	{
806*b1cdbd2cSJim Jagielski 		GetExport().GetTextParagraphExport()->Add(
807*b1cdbd2cSJim Jagielski 			XML_STYLE_FAMILY_TEXT_TEXT, xRangePropSet);
808*b1cdbd2cSJim Jagielski 	}
809*b1cdbd2cSJim Jagielski 
810*b1cdbd2cSJim Jagielski 	// process special styles for each field (e.g. data styles)
811*b1cdbd2cSJim Jagielski 	switch (nToken) {
812*b1cdbd2cSJim Jagielski 
813*b1cdbd2cSJim Jagielski 	case FIELD_ID_DATABASE_DISPLAY:
814*b1cdbd2cSJim Jagielski 	{
815*b1cdbd2cSJim Jagielski 		sal_Int32 nFormat = GetIntProperty(sPropertyNumberFormat, xPropSet);
816*b1cdbd2cSJim Jagielski 		// workaround: #no-bug#; see IsStringField(...)
817*b1cdbd2cSJim Jagielski 		if ( (5100 != nFormat) &&
818*b1cdbd2cSJim Jagielski 			 !GetBoolProperty(sPropertyIsDataBaseFormat, xPropSet) )
819*b1cdbd2cSJim Jagielski 		{
820*b1cdbd2cSJim Jagielski 				GetExport().addDataStyle(nFormat);
821*b1cdbd2cSJim Jagielski 		}
822*b1cdbd2cSJim Jagielski 		break;
823*b1cdbd2cSJim Jagielski 	}
824*b1cdbd2cSJim Jagielski 
825*b1cdbd2cSJim Jagielski 	case FIELD_ID_DATE:
826*b1cdbd2cSJim Jagielski 	case FIELD_ID_TIME:
827*b1cdbd2cSJim Jagielski         {
828*b1cdbd2cSJim Jagielski             // date and time fields are always number fields, but the
829*b1cdbd2cSJim Jagielski             // NumberFormat property is optional (e.g. Calc doesn't
830*b1cdbd2cSJim Jagielski             // support it)
831*b1cdbd2cSJim Jagielski             Reference<XPropertySetInfo> xPropSetInfo(
832*b1cdbd2cSJim Jagielski                 xPropSet->getPropertySetInfo() );
833*b1cdbd2cSJim Jagielski             if ( xPropSetInfo->hasPropertyByName( sPropertyNumberFormat ) )
834*b1cdbd2cSJim Jagielski             {
835*b1cdbd2cSJim Jagielski                 sal_Int32 nFormat =
836*b1cdbd2cSJim Jagielski                     GetIntProperty(sPropertyNumberFormat, xPropSet);
837*b1cdbd2cSJim Jagielski 
838*b1cdbd2cSJim Jagielski                 // nFormat may be -1 for numeric fields that display their
839*b1cdbd2cSJim Jagielski                 //  variable name. (Maybe this should be a field type, then?)
840*b1cdbd2cSJim Jagielski                 if (nFormat != -1)
841*b1cdbd2cSJim Jagielski                 {
842*b1cdbd2cSJim Jagielski                     if( ! GetOptionalBoolProperty(
843*b1cdbd2cSJim Jagielski                             sPropertyIsFixedLanguage,
844*b1cdbd2cSJim Jagielski                             xPropSet, xPropSetInfo, sal_False ) )
845*b1cdbd2cSJim Jagielski                     {
846*b1cdbd2cSJim Jagielski                         nFormat =
847*b1cdbd2cSJim Jagielski                             GetExport().dataStyleForceSystemLanguage(nFormat);
848*b1cdbd2cSJim Jagielski                     }
849*b1cdbd2cSJim Jagielski 
850*b1cdbd2cSJim Jagielski                     GetExport().addDataStyle( nFormat,
851*b1cdbd2cSJim Jagielski                                               nToken == FIELD_ID_TIME );
852*b1cdbd2cSJim Jagielski                 }
853*b1cdbd2cSJim Jagielski             }
854*b1cdbd2cSJim Jagielski         }
855*b1cdbd2cSJim Jagielski 		break;
856*b1cdbd2cSJim Jagielski 
857*b1cdbd2cSJim Jagielski     case FIELD_ID_META:
858*b1cdbd2cSJim Jagielski         // recurse into content (does not export element, so can be done first)
859*b1cdbd2cSJim Jagielski         if (bRecursive)
860*b1cdbd2cSJim Jagielski         {
861*b1cdbd2cSJim Jagielski             ExportMetaField(xPropSet, true, bProgress);
862*b1cdbd2cSJim Jagielski         }
863*b1cdbd2cSJim Jagielski         // fall-through: for the meta-field itself!
864*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_PRINT_TIME:
865*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_PRINT_DATE:
866*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_CREATION_DATE:
867*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_CREATION_TIME:
868*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_SAVE_TIME:
869*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_SAVE_DATE:
870*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_EDIT_DURATION:
871*b1cdbd2cSJim Jagielski 	case FIELD_ID_VARIABLE_SET:
872*b1cdbd2cSJim Jagielski 	case FIELD_ID_VARIABLE_GET:
873*b1cdbd2cSJim Jagielski 	case FIELD_ID_VARIABLE_INPUT:
874*b1cdbd2cSJim Jagielski 	case FIELD_ID_USER_GET:
875*b1cdbd2cSJim Jagielski 	case FIELD_ID_EXPRESSION:
876*b1cdbd2cSJim Jagielski     case FIELD_ID_TABLE_FORMULA:
877*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_CUSTOM:
878*b1cdbd2cSJim Jagielski 		// register number format, if this is a numeric field
879*b1cdbd2cSJim Jagielski 		if (! IsStringField(nToken, xPropSet)) {
880*b1cdbd2cSJim Jagielski 
881*b1cdbd2cSJim Jagielski 			sal_Int32 nFormat =
882*b1cdbd2cSJim Jagielski 				GetIntProperty(sPropertyNumberFormat, xPropSet);
883*b1cdbd2cSJim Jagielski 
884*b1cdbd2cSJim Jagielski 			// nFormat may be -1 for numeric fields that display their
885*b1cdbd2cSJim Jagielski 			//  variable name. (Maybe this should be a field type, then?)
886*b1cdbd2cSJim Jagielski 			if (nFormat != -1)
887*b1cdbd2cSJim Jagielski             {
888*b1cdbd2cSJim Jagielski                 // handle formats for fixed language fields
889*b1cdbd2cSJim Jagielski                 // for all these fields (except table formula)
890*b1cdbd2cSJim Jagielski                 if( ( nToken != FIELD_ID_TABLE_FORMULA ) &&
891*b1cdbd2cSJim Jagielski                     ! GetOptionalBoolProperty(
892*b1cdbd2cSJim Jagielski                           sPropertyIsFixedLanguage,
893*b1cdbd2cSJim Jagielski                           xPropSet, xPropSet->getPropertySetInfo(),
894*b1cdbd2cSJim Jagielski                           sal_False ) )
895*b1cdbd2cSJim Jagielski                 {
896*b1cdbd2cSJim Jagielski                     nFormat =
897*b1cdbd2cSJim Jagielski                         GetExport().dataStyleForceSystemLanguage(nFormat);
898*b1cdbd2cSJim Jagielski                 }
899*b1cdbd2cSJim Jagielski 
900*b1cdbd2cSJim Jagielski 				GetExport().addDataStyle(nFormat);
901*b1cdbd2cSJim Jagielski 			}
902*b1cdbd2cSJim Jagielski 		}
903*b1cdbd2cSJim Jagielski 		break;
904*b1cdbd2cSJim Jagielski 
905*b1cdbd2cSJim Jagielski 	case FIELD_ID_COMBINED_CHARACTERS:
906*b1cdbd2cSJim Jagielski 	{
907*b1cdbd2cSJim Jagielski 		// export text style with the addition of the combined characters
908*b1cdbd2cSJim Jagielski 		DBG_ASSERT(NULL != pCombinedCharactersPropertyState,
909*b1cdbd2cSJim Jagielski 				   "need proper PropertyState for combined characters");
910*b1cdbd2cSJim Jagielski 		const XMLPropertyState *aStates[] = { pCombinedCharactersPropertyState, 0 };
911*b1cdbd2cSJim Jagielski 		GetExport().GetTextParagraphExport()->Add(
912*b1cdbd2cSJim Jagielski 			XML_STYLE_FAMILY_TEXT_TEXT, xRangePropSet,
913*b1cdbd2cSJim Jagielski 			aStates);
914*b1cdbd2cSJim Jagielski 		break;
915*b1cdbd2cSJim Jagielski 	}
916*b1cdbd2cSJim Jagielski 
917*b1cdbd2cSJim Jagielski 	case FIELD_ID_SCRIPT:
918*b1cdbd2cSJim Jagielski 	case FIELD_ID_ANNOTATION:
919*b1cdbd2cSJim Jagielski 	case FIELD_ID_BIBLIOGRAPHY:
920*b1cdbd2cSJim Jagielski 	case FIELD_ID_DDE:
921*b1cdbd2cSJim Jagielski 	case FIELD_ID_REF_REFERENCE:
922*b1cdbd2cSJim Jagielski 	case FIELD_ID_REF_SEQUENCE:
923*b1cdbd2cSJim Jagielski 	case FIELD_ID_REF_BOOKMARK:
924*b1cdbd2cSJim Jagielski 	case FIELD_ID_REF_FOOTNOTE:
925*b1cdbd2cSJim Jagielski 	case FIELD_ID_REF_ENDNOTE:
926*b1cdbd2cSJim Jagielski 	case FIELD_ID_MACRO:
927*b1cdbd2cSJim Jagielski 	case FIELD_ID_REFPAGE_SET:
928*b1cdbd2cSJim Jagielski 	case FIELD_ID_REFPAGE_GET:
929*b1cdbd2cSJim Jagielski 	case FIELD_ID_COUNT_PAGES:
930*b1cdbd2cSJim Jagielski 	case FIELD_ID_COUNT_PARAGRAPHS:
931*b1cdbd2cSJim Jagielski 	case FIELD_ID_COUNT_WORDS:
932*b1cdbd2cSJim Jagielski 	case FIELD_ID_COUNT_CHARACTERS:
933*b1cdbd2cSJim Jagielski 	case FIELD_ID_COUNT_TABLES:
934*b1cdbd2cSJim Jagielski 	case FIELD_ID_COUNT_GRAPHICS:
935*b1cdbd2cSJim Jagielski 	case FIELD_ID_COUNT_OBJECTS:
936*b1cdbd2cSJim Jagielski 	case FIELD_ID_CONDITIONAL_TEXT:
937*b1cdbd2cSJim Jagielski 	case FIELD_ID_HIDDEN_TEXT:
938*b1cdbd2cSJim Jagielski 	case FIELD_ID_HIDDEN_PARAGRAPH:
939*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_CREATION_AUTHOR:
940*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_DESCRIPTION:
941*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_PRINT_AUTHOR:
942*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_TITLE:
943*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_SUBJECT:
944*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_KEYWORDS:
945*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_REVISION:
946*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_SAVE_AUTHOR:
947*b1cdbd2cSJim Jagielski 	case FIELD_ID_SEQUENCE:
948*b1cdbd2cSJim Jagielski 	case FIELD_ID_PAGENUMBER:
949*b1cdbd2cSJim Jagielski 	case FIELD_ID_PAGESTRING:
950*b1cdbd2cSJim Jagielski 	case FIELD_ID_AUTHOR:
951*b1cdbd2cSJim Jagielski 	case FIELD_ID_SENDER:
952*b1cdbd2cSJim Jagielski 	case FIELD_ID_PLACEHOLDER:
953*b1cdbd2cSJim Jagielski 	case FIELD_ID_USER_INPUT:
954*b1cdbd2cSJim Jagielski 	case FIELD_ID_TEXT_INPUT:
955*b1cdbd2cSJim Jagielski 	case FIELD_ID_DATABASE_NEXT:
956*b1cdbd2cSJim Jagielski 	case FIELD_ID_DATABASE_SELECT:
957*b1cdbd2cSJim Jagielski 	case FIELD_ID_DATABASE_NAME:
958*b1cdbd2cSJim Jagielski 	case FIELD_ID_DATABASE_NUMBER:
959*b1cdbd2cSJim Jagielski 	case FIELD_ID_TEMPLATE_NAME:
960*b1cdbd2cSJim Jagielski 	case FIELD_ID_CHAPTER:
961*b1cdbd2cSJim Jagielski 	case FIELD_ID_FILE_NAME:
962*b1cdbd2cSJim Jagielski 	case FIELD_ID_SHEET_NAME:
963*b1cdbd2cSJim Jagielski 	case FIELD_ID_MEASURE:
964*b1cdbd2cSJim Jagielski 	case FIELD_ID_URL:
965*b1cdbd2cSJim Jagielski     case FIELD_ID_DROP_DOWN:
966*b1cdbd2cSJim Jagielski 	case FIELD_ID_DRAW_DATE_TIME:
967*b1cdbd2cSJim Jagielski 	case FIELD_ID_DRAW_FOOTER:
968*b1cdbd2cSJim Jagielski 	case FIELD_ID_DRAW_HEADER:
969*b1cdbd2cSJim Jagielski 		; // no formats for these fields!
970*b1cdbd2cSJim Jagielski 		break;
971*b1cdbd2cSJim Jagielski 
972*b1cdbd2cSJim Jagielski 	case FIELD_ID_UNKNOWN:
973*b1cdbd2cSJim Jagielski 	default:
974*b1cdbd2cSJim Jagielski 		DBG_ERROR("unkown field type!");
975*b1cdbd2cSJim Jagielski 		// ignore -> no format for unkowns
976*b1cdbd2cSJim Jagielski 		break;
977*b1cdbd2cSJim Jagielski 	}
978*b1cdbd2cSJim Jagielski }
979*b1cdbd2cSJim Jagielski 
980*b1cdbd2cSJim Jagielski /// export the given field to XML. Called on second pass through document
ExportField(const Reference<XTextField> & rTextField,sal_Bool bProgress)981*b1cdbd2cSJim Jagielski void XMLTextFieldExport::ExportField(
982*b1cdbd2cSJim Jagielski     const Reference<XTextField> & rTextField, sal_Bool bProgress )
983*b1cdbd2cSJim Jagielski {
984*b1cdbd2cSJim Jagielski 	// get property set
985*b1cdbd2cSJim Jagielski 	Reference<XPropertySet> xPropSet(rTextField, UNO_QUERY);
986*b1cdbd2cSJim Jagielski 
987*b1cdbd2cSJim Jagielski 	// get property set of range (for the attributes)
988*b1cdbd2cSJim Jagielski 	Reference <XPropertySet> xRangePropSet(rTextField->getAnchor(), UNO_QUERY);
989*b1cdbd2cSJim Jagielski 
990*b1cdbd2cSJim Jagielski 	// get Field ID
991*b1cdbd2cSJim Jagielski 	enum FieldIdEnum nToken = GetFieldID(rTextField, xPropSet);
992*b1cdbd2cSJim Jagielski 
993*b1cdbd2cSJim Jagielski     // special treatment for combined characters field, because it is
994*b1cdbd2cSJim Jagielski     // exported as a style
995*b1cdbd2cSJim Jagielski     const XMLPropertyState* aStates[] = { pCombinedCharactersPropertyState, 0 };
996*b1cdbd2cSJim Jagielski     const XMLPropertyState **pStates =
997*b1cdbd2cSJim Jagielski 				FIELD_ID_COMBINED_CHARACTERS == nToken
998*b1cdbd2cSJim Jagielski 					? aStates
999*b1cdbd2cSJim Jagielski 					: 0;
1000*b1cdbd2cSJim Jagielski 
1001*b1cdbd2cSJim Jagielski     // find out whether we need to set the style or hyperlink
1002*b1cdbd2cSJim Jagielski     sal_Bool bHasHyperlink;
1003*b1cdbd2cSJim Jagielski 	sal_Bool bIsUICharStyle;
1004*b1cdbd2cSJim Jagielski     sal_Bool bHasAutoStyle;
1005*b1cdbd2cSJim Jagielski     OUString sStyle = GetExport().GetTextParagraphExport()->
1006*b1cdbd2cSJim Jagielski         FindTextStyleAndHyperlink( xRangePropSet, bHasHyperlink, bIsUICharStyle,
1007*b1cdbd2cSJim Jagielski                                    bHasAutoStyle, pStates );
1008*b1cdbd2cSJim Jagielski     sal_Bool bHasStyle = (sStyle.getLength() > 0);
1009*b1cdbd2cSJim Jagielski 
1010*b1cdbd2cSJim Jagielski     // export hyperlink (if we have one)
1011*b1cdbd2cSJim Jagielski 	Reference < XPropertySetInfo > xRangePropSetInfo;
1012*b1cdbd2cSJim Jagielski     if( bHasHyperlink )
1013*b1cdbd2cSJim Jagielski 	{
1014*b1cdbd2cSJim Jagielski         Reference<XPropertyState> xRangePropState( xRangePropSet, UNO_QUERY );
1015*b1cdbd2cSJim Jagielski 		xRangePropSetInfo = xRangePropSet->getPropertySetInfo();
1016*b1cdbd2cSJim Jagielski         bHasHyperlink =
1017*b1cdbd2cSJim Jagielski             GetExport().GetTextParagraphExport()->addHyperlinkAttributes(
1018*b1cdbd2cSJim Jagielski                 xRangePropSet, xRangePropState,
1019*b1cdbd2cSJim Jagielski                 xRangePropSetInfo );
1020*b1cdbd2cSJim Jagielski     }
1021*b1cdbd2cSJim Jagielski     SvXMLElementExport aHyperlink( GetExport(), bHasHyperlink,
1022*b1cdbd2cSJim Jagielski                                    XML_NAMESPACE_TEXT, XML_A,
1023*b1cdbd2cSJim Jagielski                                    sal_False, sal_False );
1024*b1cdbd2cSJim Jagielski 
1025*b1cdbd2cSJim Jagielski 	if( bHasHyperlink )
1026*b1cdbd2cSJim Jagielski 	{
1027*b1cdbd2cSJim Jagielski 		// export events (if supported)
1028*b1cdbd2cSJim Jagielski 		OUString sHyperLinkEvents(RTL_CONSTASCII_USTRINGPARAM(
1029*b1cdbd2cSJim Jagielski 			"HyperLinkEvents"));
1030*b1cdbd2cSJim Jagielski 		if (xRangePropSetInfo->hasPropertyByName(sHyperLinkEvents))
1031*b1cdbd2cSJim Jagielski 		{
1032*b1cdbd2cSJim Jagielski 			Any aAny = xRangePropSet->getPropertyValue(sHyperLinkEvents);
1033*b1cdbd2cSJim Jagielski 			Reference<XNameReplace> xName;
1034*b1cdbd2cSJim Jagielski 			aAny >>= xName;
1035*b1cdbd2cSJim Jagielski 			GetExport().GetEventExport().Export(xName, sal_False);
1036*b1cdbd2cSJim Jagielski 		}
1037*b1cdbd2cSJim Jagielski 	}
1038*b1cdbd2cSJim Jagielski 
1039*b1cdbd2cSJim Jagielski 	{
1040*b1cdbd2cSJim Jagielski 		XMLTextCharStyleNamesElementExport aCharStylesExport(
1041*b1cdbd2cSJim Jagielski 			GetExport(), bIsUICharStyle &&
1042*b1cdbd2cSJim Jagielski 						 GetExport().GetTextParagraphExport()
1043*b1cdbd2cSJim Jagielski 						 	->GetCharStyleNamesPropInfoCache().hasProperty(
1044*b1cdbd2cSJim Jagielski                                         xRangePropSet, xRangePropSetInfo ), bHasAutoStyle,
1045*b1cdbd2cSJim Jagielski 			xRangePropSet, sPropertyCharStyleNames );
1046*b1cdbd2cSJim Jagielski 
1047*b1cdbd2cSJim Jagielski 		// export span with style (if necessary)
1048*b1cdbd2cSJim Jagielski 		// (except for combined characters field)
1049*b1cdbd2cSJim Jagielski 		if( bHasStyle )
1050*b1cdbd2cSJim Jagielski 		{
1051*b1cdbd2cSJim Jagielski 			// export <text:span> element
1052*b1cdbd2cSJim Jagielski 			GetExport().AddAttribute( XML_NAMESPACE_TEXT, XML_STYLE_NAME,
1053*b1cdbd2cSJim Jagielski 							GetExport().EncodeStyleName( sStyle ) );
1054*b1cdbd2cSJim Jagielski 		}
1055*b1cdbd2cSJim Jagielski 		SvXMLElementExport aSpan( GetExport(), bHasStyle,
1056*b1cdbd2cSJim Jagielski 								  XML_NAMESPACE_TEXT, XML_SPAN,
1057*b1cdbd2cSJim Jagielski 								  sal_False, sal_False);
1058*b1cdbd2cSJim Jagielski 
1059*b1cdbd2cSJim Jagielski 		// finally, export the field itself
1060*b1cdbd2cSJim Jagielski         ExportFieldHelper( rTextField, xPropSet, xRangePropSet, nToken,
1061*b1cdbd2cSJim Jagielski             bProgress );
1062*b1cdbd2cSJim Jagielski 	}
1063*b1cdbd2cSJim Jagielski }
1064*b1cdbd2cSJim Jagielski 
1065*b1cdbd2cSJim Jagielski /// export the given field to XML. Called on second pass through document
ExportFieldHelper(const Reference<XTextField> & rTextField,const Reference<XPropertySet> & rPropSet,const Reference<XPropertySet> &,enum FieldIdEnum nToken,sal_Bool bProgress)1066*b1cdbd2cSJim Jagielski void XMLTextFieldExport::ExportFieldHelper(
1067*b1cdbd2cSJim Jagielski 	const Reference<XTextField> & rTextField,
1068*b1cdbd2cSJim Jagielski 	const Reference<XPropertySet> & rPropSet,
1069*b1cdbd2cSJim Jagielski 	const Reference<XPropertySet> &,
1070*b1cdbd2cSJim Jagielski     enum FieldIdEnum nToken,
1071*b1cdbd2cSJim Jagielski     sal_Bool bProgress )
1072*b1cdbd2cSJim Jagielski {
1073*b1cdbd2cSJim Jagielski 	// get property set info (because some attributes are not support
1074*b1cdbd2cSJim Jagielski 	// in all implementations)
1075*b1cdbd2cSJim Jagielski 	Reference<XPropertySetInfo> xPropSetInfo(rPropSet->getPropertySetInfo());
1076*b1cdbd2cSJim Jagielski 
1077*b1cdbd2cSJim Jagielski 	OUString sPresentation = rTextField->getPresentation(sal_False);
1078*b1cdbd2cSJim Jagielski 
1079*b1cdbd2cSJim Jagielski 	// process each field type
1080*b1cdbd2cSJim Jagielski 	switch (nToken) {
1081*b1cdbd2cSJim Jagielski 	case FIELD_ID_AUTHOR:
1082*b1cdbd2cSJim Jagielski 		// author field: fixed, field (sub-)type
1083*b1cdbd2cSJim Jagielski 		ProcessBoolean(XML_FIXED,
1084*b1cdbd2cSJim Jagielski 					   GetBoolProperty(sPropertyIsFixed, rPropSet), sal_True);
1085*b1cdbd2cSJim Jagielski 		ExportElement(MapAuthorFieldName(rPropSet), sPresentation);
1086*b1cdbd2cSJim Jagielski 		break;
1087*b1cdbd2cSJim Jagielski 
1088*b1cdbd2cSJim Jagielski 	case FIELD_ID_SENDER:
1089*b1cdbd2cSJim Jagielski 		// sender field: fixed, field (sub-)type
1090*b1cdbd2cSJim Jagielski 		ProcessBoolean(XML_FIXED,
1091*b1cdbd2cSJim Jagielski 					   GetBoolProperty(sPropertyIsFixed, rPropSet), sal_True);
1092*b1cdbd2cSJim Jagielski 		ExportElement(MapSenderFieldName(rPropSet), sPresentation);
1093*b1cdbd2cSJim Jagielski 		break;
1094*b1cdbd2cSJim Jagielski 
1095*b1cdbd2cSJim Jagielski 	case FIELD_ID_PLACEHOLDER:
1096*b1cdbd2cSJim Jagielski 		// placeholder field: type, name, description
1097*b1cdbd2cSJim Jagielski 		ProcessString(XML_PLACEHOLDER_TYPE,
1098*b1cdbd2cSJim Jagielski 					  MapPlaceholderType(
1099*b1cdbd2cSJim Jagielski 						GetInt16Property(sPropertyPlaceholderType, rPropSet)));
1100*b1cdbd2cSJim Jagielski 		ProcessString(XML_DESCRIPTION,
1101*b1cdbd2cSJim Jagielski 					  GetStringProperty(sPropertyHint,rPropSet), sal_True);
1102*b1cdbd2cSJim Jagielski 		ExportElement(XML_PLACEHOLDER, sPresentation);
1103*b1cdbd2cSJim Jagielski 		break;
1104*b1cdbd2cSJim Jagielski 
1105*b1cdbd2cSJim Jagielski 	case FIELD_ID_VARIABLE_SET:
1106*b1cdbd2cSJim Jagielski 	{
1107*b1cdbd2cSJim Jagielski 		// variable set field: name, visible, format&value
1108*b1cdbd2cSJim Jagielski 		ProcessString(XML_NAME,
1109*b1cdbd2cSJim Jagielski 					  GetStringProperty(sPropertyVariableName, rPropSet));
1110*b1cdbd2cSJim Jagielski 		ProcessDisplay(GetBoolProperty(sPropertyIsVisible, rPropSet),
1111*b1cdbd2cSJim Jagielski 					   sal_False);
1112*b1cdbd2cSJim Jagielski 		ProcessString(XML_FORMULA, XML_NAMESPACE_OOOW,
1113*b1cdbd2cSJim Jagielski 					  GetStringProperty(sPropertyContent, rPropSet),
1114*b1cdbd2cSJim Jagielski 					  sPresentation);
1115*b1cdbd2cSJim Jagielski 		ProcessValueAndType(IsStringField(nToken, rPropSet),
1116*b1cdbd2cSJim Jagielski 							GetIntProperty(sPropertyNumberFormat, rPropSet),
1117*b1cdbd2cSJim Jagielski 							GetStringProperty(sPropertyContent, rPropSet),
1118*b1cdbd2cSJim Jagielski 							sPresentation,
1119*b1cdbd2cSJim Jagielski 							GetDoubleProperty(sPropertyValue, rPropSet),
1120*b1cdbd2cSJim Jagielski 							sal_True, sal_True, sal_True,
1121*b1cdbd2cSJim Jagielski                             ! GetOptionalBoolProperty(
1122*b1cdbd2cSJim Jagielski                                  sPropertyIsFixedLanguage,
1123*b1cdbd2cSJim Jagielski                                  rPropSet, xPropSetInfo, sal_False ) );
1124*b1cdbd2cSJim Jagielski 		ExportElement(XML_VARIABLE_SET, sPresentation);
1125*b1cdbd2cSJim Jagielski 		break;
1126*b1cdbd2cSJim Jagielski 	}
1127*b1cdbd2cSJim Jagielski 	case FIELD_ID_VARIABLE_GET:
1128*b1cdbd2cSJim Jagielski 	{
1129*b1cdbd2cSJim Jagielski 		// variable get field: name, format&value
1130*b1cdbd2cSJim Jagielski 		ProcessString(XML_NAME,
1131*b1cdbd2cSJim Jagielski 					  GetStringProperty(sPropertyContent, rPropSet));
1132*b1cdbd2cSJim Jagielski 		sal_Bool bCmd = GetBoolProperty(sPropertyIsShowFormula, rPropSet);
1133*b1cdbd2cSJim Jagielski 		ProcessDisplay(sal_True, bCmd);
1134*b1cdbd2cSJim Jagielski         // #i81766# for older versions export of the value-type
1135*b1cdbd2cSJim Jagielski         sal_Bool bExportValueType = !bCmd && ( GetExport().getExportFlags() & EXPORT_SAVEBACKWARDCOMPATIBLE );
1136*b1cdbd2cSJim Jagielski 		// show style, unless name will be shown
1137*b1cdbd2cSJim Jagielski 		ProcessValueAndType(IsStringField(nToken, rPropSet),
1138*b1cdbd2cSJim Jagielski 							GetIntProperty(sPropertyNumberFormat, rPropSet),
1139*b1cdbd2cSJim Jagielski 							sEmpty, sEmpty, 0.0, // values not used
1140*b1cdbd2cSJim Jagielski 							sal_False,
1141*b1cdbd2cSJim Jagielski                             bExportValueType,
1142*b1cdbd2cSJim Jagielski                             !bCmd,
1143*b1cdbd2cSJim Jagielski                             ! GetOptionalBoolProperty(
1144*b1cdbd2cSJim Jagielski                                  sPropertyIsFixedLanguage,
1145*b1cdbd2cSJim Jagielski                                  rPropSet, xPropSetInfo, sal_False ) );
1146*b1cdbd2cSJim Jagielski 		ExportElement(XML_VARIABLE_GET, sPresentation);
1147*b1cdbd2cSJim Jagielski 		break;
1148*b1cdbd2cSJim Jagielski 	}
1149*b1cdbd2cSJim Jagielski 	case FIELD_ID_VARIABLE_INPUT:
1150*b1cdbd2cSJim Jagielski 		// variable input field: name, description, format&value
1151*b1cdbd2cSJim Jagielski 		ProcessString(XML_NAME,
1152*b1cdbd2cSJim Jagielski 					  GetStringProperty(sPropertyVariableName, rPropSet));
1153*b1cdbd2cSJim Jagielski 		ProcessString(XML_DESCRIPTION,
1154*b1cdbd2cSJim Jagielski 					  GetStringProperty(sPropertyHint , rPropSet));
1155*b1cdbd2cSJim Jagielski 		ProcessDisplay(GetBoolProperty(sPropertyIsVisible, rPropSet),
1156*b1cdbd2cSJim Jagielski 					   sal_False);
1157*b1cdbd2cSJim Jagielski 		ProcessString(XML_FORMULA, XML_NAMESPACE_OOOW,
1158*b1cdbd2cSJim Jagielski 					  GetStringProperty(sPropertyContent, rPropSet),
1159*b1cdbd2cSJim Jagielski 					  sPresentation);
1160*b1cdbd2cSJim Jagielski 		ProcessValueAndType(IsStringField(nToken, rPropSet),
1161*b1cdbd2cSJim Jagielski 							GetIntProperty(sPropertyNumberFormat, rPropSet),
1162*b1cdbd2cSJim Jagielski 							GetStringProperty(sPropertyContent, rPropSet),
1163*b1cdbd2cSJim Jagielski 							sPresentation,
1164*b1cdbd2cSJim Jagielski 							GetDoubleProperty(sPropertyValue, rPropSet),
1165*b1cdbd2cSJim Jagielski 							sal_True, sal_True, sal_True,
1166*b1cdbd2cSJim Jagielski                             ! GetOptionalBoolProperty(
1167*b1cdbd2cSJim Jagielski                                  sPropertyIsFixedLanguage,
1168*b1cdbd2cSJim Jagielski                                  rPropSet, xPropSetInfo, sal_False ) );
1169*b1cdbd2cSJim Jagielski 		ExportElement(XML_VARIABLE_INPUT, sPresentation);
1170*b1cdbd2cSJim Jagielski 		break;
1171*b1cdbd2cSJim Jagielski 
1172*b1cdbd2cSJim Jagielski 	case FIELD_ID_USER_GET:
1173*b1cdbd2cSJim Jagielski 		// user field: name, hidden, style
1174*b1cdbd2cSJim Jagielski 	{
1175*b1cdbd2cSJim Jagielski 		sal_Bool bCmd = GetBoolProperty(sPropertyIsShowFormula, rPropSet);
1176*b1cdbd2cSJim Jagielski 		ProcessDisplay(GetBoolProperty(sPropertyIsVisible, rPropSet),
1177*b1cdbd2cSJim Jagielski 					   bCmd);
1178*b1cdbd2cSJim Jagielski 		ProcessValueAndType(IsStringField(nToken, rPropSet),
1179*b1cdbd2cSJim Jagielski 							GetIntProperty(sPropertyNumberFormat, rPropSet),
1180*b1cdbd2cSJim Jagielski 							sEmpty, sEmpty,	0.0, // values not used
1181*b1cdbd2cSJim Jagielski 							sal_False, sal_False, !bCmd,
1182*b1cdbd2cSJim Jagielski                             ! GetOptionalBoolProperty(
1183*b1cdbd2cSJim Jagielski                                  sPropertyIsFixedLanguage,
1184*b1cdbd2cSJim Jagielski                                  rPropSet, xPropSetInfo, sal_False ) );
1185*b1cdbd2cSJim Jagielski 
1186*b1cdbd2cSJim Jagielski 		// name from FieldMaster
1187*b1cdbd2cSJim Jagielski 		ProcessString(XML_NAME,
1188*b1cdbd2cSJim Jagielski 					  GetStringProperty(sPropertyName,
1189*b1cdbd2cSJim Jagielski 										GetMasterPropertySet(rTextField)));
1190*b1cdbd2cSJim Jagielski 		ExportElement(XML_USER_FIELD_GET, sPresentation);
1191*b1cdbd2cSJim Jagielski 		break;
1192*b1cdbd2cSJim Jagielski 	}
1193*b1cdbd2cSJim Jagielski 
1194*b1cdbd2cSJim Jagielski 	case FIELD_ID_USER_INPUT:
1195*b1cdbd2cSJim Jagielski 		// user input field: name (from FieldMaster), description
1196*b1cdbd2cSJim Jagielski // 		ProcessString(XML_NAME,
1197*b1cdbd2cSJim Jagielski // 					  GetStringProperty(sPropertyName,
1198*b1cdbd2cSJim Jagielski // 										GetMasterPropertySet(rTextField)));
1199*b1cdbd2cSJim Jagielski 		ProcessString(XML_NAME,
1200*b1cdbd2cSJim Jagielski 					  GetStringProperty(sPropertyContent, rPropSet));
1201*b1cdbd2cSJim Jagielski 		ProcessString(XML_DESCRIPTION,
1202*b1cdbd2cSJim Jagielski 					  GetStringProperty(sPropertyHint, rPropSet));
1203*b1cdbd2cSJim Jagielski 		ExportElement(XML_USER_FIELD_INPUT, sPresentation);
1204*b1cdbd2cSJim Jagielski 		break;
1205*b1cdbd2cSJim Jagielski 
1206*b1cdbd2cSJim Jagielski 	case FIELD_ID_SEQUENCE:
1207*b1cdbd2cSJim Jagielski 	{
1208*b1cdbd2cSJim Jagielski 		// sequence field: name, formula, seq-format
1209*b1cdbd2cSJim Jagielski 		OUString sName = GetStringProperty(sPropertyVariableName, rPropSet);
1210*b1cdbd2cSJim Jagielski 		// TODO: use reference name only if actually beeing referenced.
1211*b1cdbd2cSJim Jagielski 		ProcessString(XML_REF_NAME,
1212*b1cdbd2cSJim Jagielski 					  MakeSequenceRefName(
1213*b1cdbd2cSJim Jagielski 						  GetInt16Property(sPropertySequenceValue, rPropSet),
1214*b1cdbd2cSJim Jagielski 						  sName));
1215*b1cdbd2cSJim Jagielski 		ProcessString(XML_NAME, sName);
1216*b1cdbd2cSJim Jagielski 		ProcessString(XML_FORMULA,  XML_NAMESPACE_OOOW,
1217*b1cdbd2cSJim Jagielski 					  GetStringProperty(sPropertyContent, rPropSet),
1218*b1cdbd2cSJim Jagielski 					  sPresentation);
1219*b1cdbd2cSJim Jagielski 		ProcessNumberingType(GetInt16Property(sPropertyNumberingType,
1220*b1cdbd2cSJim Jagielski 											  rPropSet));
1221*b1cdbd2cSJim Jagielski 		ExportElement(XML_SEQUENCE, sPresentation);
1222*b1cdbd2cSJim Jagielski 		break;
1223*b1cdbd2cSJim Jagielski 	}
1224*b1cdbd2cSJim Jagielski 
1225*b1cdbd2cSJim Jagielski 	case FIELD_ID_EXPRESSION:
1226*b1cdbd2cSJim Jagielski 	{
1227*b1cdbd2cSJim Jagielski 		// formula field: formula, format&value
1228*b1cdbd2cSJim Jagielski 		sal_Bool bCmd = GetBoolProperty(sPropertyIsShowFormula, rPropSet);
1229*b1cdbd2cSJim Jagielski 		ProcessString(XML_FORMULA,  XML_NAMESPACE_OOOW,
1230*b1cdbd2cSJim Jagielski 					  GetStringProperty(sPropertyContent, rPropSet),
1231*b1cdbd2cSJim Jagielski 					  sPresentation);
1232*b1cdbd2cSJim Jagielski 		ProcessDisplay(sal_True, bCmd);
1233*b1cdbd2cSJim Jagielski 		ProcessValueAndType(IsStringField(nToken, rPropSet),
1234*b1cdbd2cSJim Jagielski 							GetIntProperty(sPropertyNumberFormat, rPropSet),
1235*b1cdbd2cSJim Jagielski 							GetStringProperty(sPropertyContent, rPropSet),
1236*b1cdbd2cSJim Jagielski 							sPresentation,
1237*b1cdbd2cSJim Jagielski 							GetDoubleProperty(sPropertyValue, rPropSet),
1238*b1cdbd2cSJim Jagielski 							!bCmd, !bCmd, !bCmd,
1239*b1cdbd2cSJim Jagielski                             ! GetOptionalBoolProperty(
1240*b1cdbd2cSJim Jagielski                                  sPropertyIsFixedLanguage,
1241*b1cdbd2cSJim Jagielski                                  rPropSet, xPropSetInfo, sal_False ) );
1242*b1cdbd2cSJim Jagielski 		ExportElement(XML_EXPRESSION, sPresentation);
1243*b1cdbd2cSJim Jagielski 		break;
1244*b1cdbd2cSJim Jagielski 	}
1245*b1cdbd2cSJim Jagielski 
1246*b1cdbd2cSJim Jagielski 	case FIELD_ID_TEXT_INPUT:
1247*b1cdbd2cSJim Jagielski 		// text input field: description and string-value
1248*b1cdbd2cSJim Jagielski 		ProcessString(XML_DESCRIPTION,
1249*b1cdbd2cSJim Jagielski 					  GetStringProperty(sPropertyHint, rPropSet));
1250*b1cdbd2cSJim Jagielski         ProcessString(XML_HELP,
1251*b1cdbd2cSJim Jagielski                       GetStringProperty(sPropertyHelp, rPropSet), true);
1252*b1cdbd2cSJim Jagielski         ProcessString(XML_HINT,
1253*b1cdbd2cSJim Jagielski                       GetStringProperty(sPropertyTooltip, rPropSet), true);
1254*b1cdbd2cSJim Jagielski 		ExportElement(XML_TEXT_INPUT, sPresentation);
1255*b1cdbd2cSJim Jagielski 		break;
1256*b1cdbd2cSJim Jagielski 
1257*b1cdbd2cSJim Jagielski 	case FIELD_ID_TIME:
1258*b1cdbd2cSJim Jagielski 		// all properties (except IsDate) are optional!
1259*b1cdbd2cSJim Jagielski 		if (xPropSetInfo->hasPropertyByName(sPropertyNumberFormat))
1260*b1cdbd2cSJim Jagielski 		{
1261*b1cdbd2cSJim Jagielski 			ProcessValueAndType(sal_False,
1262*b1cdbd2cSJim Jagielski 								GetIntProperty(sPropertyNumberFormat,rPropSet),
1263*b1cdbd2cSJim Jagielski 								sEmpty, sEmpty, 0.0, // not used
1264*b1cdbd2cSJim Jagielski 								sal_False, sal_False, sal_True,
1265*b1cdbd2cSJim Jagielski                                 ! GetOptionalBoolProperty(
1266*b1cdbd2cSJim Jagielski                                     sPropertyIsFixedLanguage,
1267*b1cdbd2cSJim Jagielski                                     rPropSet, xPropSetInfo, sal_False ),
1268*b1cdbd2cSJim Jagielski                                 sal_True);
1269*b1cdbd2cSJim Jagielski 		}
1270*b1cdbd2cSJim Jagielski 		if (xPropSetInfo->hasPropertyByName(sPropertyDateTimeValue))
1271*b1cdbd2cSJim Jagielski 		{
1272*b1cdbd2cSJim Jagielski 			// no value -> current time
1273*b1cdbd2cSJim Jagielski 			ProcessDateTime(XML_TIME_VALUE,
1274*b1cdbd2cSJim Jagielski 							GetDateTimeProperty(sPropertyDateTimeValue,
1275*b1cdbd2cSJim Jagielski 												rPropSet),
1276*b1cdbd2cSJim Jagielski 							sal_False );
1277*b1cdbd2cSJim Jagielski 		}
1278*b1cdbd2cSJim Jagielski 		if (xPropSetInfo->hasPropertyByName(sPropertyDateTime))
1279*b1cdbd2cSJim Jagielski 		{
1280*b1cdbd2cSJim Jagielski 			// no value -> current time
1281*b1cdbd2cSJim Jagielski 			ProcessDateTime(XML_TIME_VALUE,
1282*b1cdbd2cSJim Jagielski 							GetDateTimeProperty(sPropertyDateTime,rPropSet),
1283*b1cdbd2cSJim Jagielski 							sal_False );
1284*b1cdbd2cSJim Jagielski 		}
1285*b1cdbd2cSJim Jagielski 		if (xPropSetInfo->hasPropertyByName(sPropertyIsFixed))
1286*b1cdbd2cSJim Jagielski 		{
1287*b1cdbd2cSJim Jagielski 			ProcessBoolean(XML_FIXED,
1288*b1cdbd2cSJim Jagielski 						   GetBoolProperty(sPropertyIsFixed, rPropSet),
1289*b1cdbd2cSJim Jagielski 						   sal_False);
1290*b1cdbd2cSJim Jagielski 		}
1291*b1cdbd2cSJim Jagielski 		if (xPropSetInfo->hasPropertyByName(sPropertyAdjust))
1292*b1cdbd2cSJim Jagielski 		{
1293*b1cdbd2cSJim Jagielski 			// adjust value given as integer in minutes
1294*b1cdbd2cSJim Jagielski 			ProcessDateTime(XML_TIME_ADJUST,
1295*b1cdbd2cSJim Jagielski 							GetIntProperty(sPropertyAdjust, rPropSet),
1296*b1cdbd2cSJim Jagielski 							sal_False, sal_True, sal_True);
1297*b1cdbd2cSJim Jagielski 		}
1298*b1cdbd2cSJim Jagielski 		ExportElement(XML_TIME, sPresentation);
1299*b1cdbd2cSJim Jagielski 		break;
1300*b1cdbd2cSJim Jagielski 
1301*b1cdbd2cSJim Jagielski 	case FIELD_ID_DATE:
1302*b1cdbd2cSJim Jagielski 		// all properties (except IsDate) are optional!
1303*b1cdbd2cSJim Jagielski 		if (xPropSetInfo->hasPropertyByName(sPropertyNumberFormat))
1304*b1cdbd2cSJim Jagielski 		{
1305*b1cdbd2cSJim Jagielski 			ProcessValueAndType(sal_False,
1306*b1cdbd2cSJim Jagielski 								GetIntProperty(sPropertyNumberFormat,rPropSet),
1307*b1cdbd2cSJim Jagielski 								sEmpty, sEmpty, 0.0, // not used
1308*b1cdbd2cSJim Jagielski 								sal_False, sal_False, sal_True,
1309*b1cdbd2cSJim Jagielski                                 ! GetOptionalBoolProperty(
1310*b1cdbd2cSJim Jagielski                                     sPropertyIsFixedLanguage,
1311*b1cdbd2cSJim Jagielski                                     rPropSet, xPropSetInfo, sal_False ) );
1312*b1cdbd2cSJim Jagielski 		}
1313*b1cdbd2cSJim Jagielski 		if (xPropSetInfo->hasPropertyByName(sPropertyDateTimeValue))
1314*b1cdbd2cSJim Jagielski 		{
1315*b1cdbd2cSJim Jagielski 			// no value -> current date
1316*b1cdbd2cSJim Jagielski 			ProcessDateTime(XML_DATE_VALUE,
1317*b1cdbd2cSJim Jagielski 							GetDateTimeProperty(sPropertyDateTimeValue,
1318*b1cdbd2cSJim Jagielski 												rPropSet),
1319*b1cdbd2cSJim Jagielski                             // #96457#: date fields should also save time
1320*b1cdbd2cSJim Jagielski 							sal_False);
1321*b1cdbd2cSJim Jagielski 		}
1322*b1cdbd2cSJim Jagielski 		// TODO: remove double-handling after SRC614
1323*b1cdbd2cSJim Jagielski 		else if (xPropSetInfo->hasPropertyByName(sPropertyDateTime))
1324*b1cdbd2cSJim Jagielski 		{
1325*b1cdbd2cSJim Jagielski 			ProcessDateTime(XML_DATE_VALUE,
1326*b1cdbd2cSJim Jagielski 							GetDateTimeProperty(sPropertyDateTime,rPropSet),
1327*b1cdbd2cSJim Jagielski                             // #96457#: date fields should also save time
1328*b1cdbd2cSJim Jagielski 							sal_False);
1329*b1cdbd2cSJim Jagielski 		}
1330*b1cdbd2cSJim Jagielski 		if (xPropSetInfo->hasPropertyByName(sPropertyIsFixed))
1331*b1cdbd2cSJim Jagielski 		{
1332*b1cdbd2cSJim Jagielski 			ProcessBoolean(XML_FIXED,
1333*b1cdbd2cSJim Jagielski 						   GetBoolProperty(sPropertyIsFixed, rPropSet),
1334*b1cdbd2cSJim Jagielski 						   sal_False);
1335*b1cdbd2cSJim Jagielski 		}
1336*b1cdbd2cSJim Jagielski 		if (xPropSetInfo->hasPropertyByName(sPropertyAdjust))
1337*b1cdbd2cSJim Jagielski 		{
1338*b1cdbd2cSJim Jagielski 			// adjust value given as number of days
1339*b1cdbd2cSJim Jagielski 			ProcessDateTime(XML_DATE_ADJUST,
1340*b1cdbd2cSJim Jagielski 							GetIntProperty(sPropertyAdjust, rPropSet),
1341*b1cdbd2cSJim Jagielski 							sal_True, sal_True, sal_True);
1342*b1cdbd2cSJim Jagielski 		}
1343*b1cdbd2cSJim Jagielski 		ExportElement(XML_DATE, sPresentation);
1344*b1cdbd2cSJim Jagielski 		break;
1345*b1cdbd2cSJim Jagielski 
1346*b1cdbd2cSJim Jagielski 	case FIELD_ID_PAGENUMBER:
1347*b1cdbd2cSJim Jagielski 		// all properties are optional
1348*b1cdbd2cSJim Jagielski 		if (xPropSetInfo->hasPropertyByName(sPropertyNumberingType))
1349*b1cdbd2cSJim Jagielski 		{
1350*b1cdbd2cSJim Jagielski 			ProcessNumberingType(GetInt16Property(sPropertyNumberingType,
1351*b1cdbd2cSJim Jagielski 												  rPropSet));
1352*b1cdbd2cSJim Jagielski 		}
1353*b1cdbd2cSJim Jagielski 		if (xPropSetInfo->hasPropertyByName(sPropertyOffset))
1354*b1cdbd2cSJim Jagielski 		{
1355*b1cdbd2cSJim Jagielski 			sal_Int32 nAdjust = GetIntProperty(sPropertyOffset, rPropSet);
1356*b1cdbd2cSJim Jagielski 
1357*b1cdbd2cSJim Jagielski 			if (xPropSetInfo->hasPropertyByName(sPropertySubType))
1358*b1cdbd2cSJim Jagielski 			{
1359*b1cdbd2cSJim Jagielski 				// property SubType used in MapPageNumebrName
1360*b1cdbd2cSJim Jagielski 				ProcessString(XML_SELECT_PAGE,
1361*b1cdbd2cSJim Jagielski 							  MapPageNumberName(rPropSet, nAdjust));
1362*b1cdbd2cSJim Jagielski 			}
1363*b1cdbd2cSJim Jagielski 			ProcessIntegerDef(XML_PAGE_ADJUST, nAdjust, 0);
1364*b1cdbd2cSJim Jagielski 		}
1365*b1cdbd2cSJim Jagielski 		ExportElement(XML_PAGE_NUMBER, sPresentation);
1366*b1cdbd2cSJim Jagielski 		break;
1367*b1cdbd2cSJim Jagielski 
1368*b1cdbd2cSJim Jagielski 	case FIELD_ID_PAGESTRING:
1369*b1cdbd2cSJim Jagielski 	{
1370*b1cdbd2cSJim Jagielski 		ProcessString(XML_STRING_VALUE,
1371*b1cdbd2cSJim Jagielski 					  GetStringProperty(sPropertyUserText, rPropSet),
1372*b1cdbd2cSJim Jagielski 					  sPresentation);
1373*b1cdbd2cSJim Jagielski 		sal_Int32 nDummy = 0; // MapPageNumberName need int
1374*b1cdbd2cSJim Jagielski 		ProcessString(XML_SELECT_PAGE, MapPageNumberName(rPropSet, nDummy));
1375*b1cdbd2cSJim Jagielski 		if( 0 == ( GetExport().getExportFlags() & EXPORT_SAVEBACKWARDCOMPATIBLE ) )
1376*b1cdbd2cSJim Jagielski 			ExportElement(XML_PAGE_CONTINUATION, sPresentation);
1377*b1cdbd2cSJim Jagielski 		else
1378*b1cdbd2cSJim Jagielski 			ExportElement(XML_PAGE_CONTINUATION_STRING, sPresentation);
1379*b1cdbd2cSJim Jagielski 		break;
1380*b1cdbd2cSJim Jagielski 	}
1381*b1cdbd2cSJim Jagielski 
1382*b1cdbd2cSJim Jagielski 	case FIELD_ID_DATABASE_NAME:
1383*b1cdbd2cSJim Jagielski 		ProcessString(XML_TABLE_NAME,
1384*b1cdbd2cSJim Jagielski 					  GetStringProperty(sPropertyDataTableName, rPropSet));
1385*b1cdbd2cSJim Jagielski         ProcessCommandType(GetIntProperty(sPropertyDataCommandType, rPropSet));
1386*b1cdbd2cSJim Jagielski 		ProcessDisplay(GetBoolProperty(sPropertyIsVisible, rPropSet),
1387*b1cdbd2cSJim Jagielski 					   sal_False);
1388*b1cdbd2cSJim Jagielski 		ExportDataBaseElement(XML_DATABASE_NAME, sPresentation,
1389*b1cdbd2cSJim Jagielski                               rPropSet, xPropSetInfo);
1390*b1cdbd2cSJim Jagielski 		break;
1391*b1cdbd2cSJim Jagielski 
1392*b1cdbd2cSJim Jagielski 	case FIELD_ID_DATABASE_NUMBER:
1393*b1cdbd2cSJim Jagielski 		ProcessString(XML_TABLE_NAME,
1394*b1cdbd2cSJim Jagielski 					  GetStringProperty(sPropertyDataTableName, rPropSet));
1395*b1cdbd2cSJim Jagielski         ProcessCommandType(GetIntProperty(sPropertyDataCommandType, rPropSet));
1396*b1cdbd2cSJim Jagielski 		ProcessNumberingType(
1397*b1cdbd2cSJim Jagielski 			GetInt16Property(sPropertyNumberingType,rPropSet));
1398*b1cdbd2cSJim Jagielski 		ProcessInteger(XML_VALUE,
1399*b1cdbd2cSJim Jagielski 					   GetIntProperty(sPropertySetNumber, rPropSet));
1400*b1cdbd2cSJim Jagielski 		ProcessDisplay(GetBoolProperty(sPropertyIsVisible, rPropSet),
1401*b1cdbd2cSJim Jagielski 					   sal_False);
1402*b1cdbd2cSJim Jagielski 		ExportDataBaseElement(XML_DATABASE_ROW_NUMBER, sPresentation,
1403*b1cdbd2cSJim Jagielski                               rPropSet, xPropSetInfo);
1404*b1cdbd2cSJim Jagielski 		break;
1405*b1cdbd2cSJim Jagielski 
1406*b1cdbd2cSJim Jagielski 	case FIELD_ID_DATABASE_NEXT:
1407*b1cdbd2cSJim Jagielski 		ProcessString(XML_TABLE_NAME,
1408*b1cdbd2cSJim Jagielski 					  GetStringProperty(sPropertyDataTableName, rPropSet));
1409*b1cdbd2cSJim Jagielski         ProcessCommandType(GetIntProperty(sPropertyDataCommandType, rPropSet));
1410*b1cdbd2cSJim Jagielski 		ProcessString(XML_CONDITION, XML_NAMESPACE_OOOW,
1411*b1cdbd2cSJim Jagielski 					  GetStringProperty(sPropertyCondition, rPropSet));
1412*b1cdbd2cSJim Jagielski 		DBG_ASSERT(sPresentation.equals(sEmpty),
1413*b1cdbd2cSJim Jagielski 				   "Unexpected presentation for database next field");
1414*b1cdbd2cSJim Jagielski 		ExportDataBaseElement(XML_DATABASE_NEXT, OUString(),
1415*b1cdbd2cSJim Jagielski                               rPropSet, xPropSetInfo);
1416*b1cdbd2cSJim Jagielski 		break;
1417*b1cdbd2cSJim Jagielski 
1418*b1cdbd2cSJim Jagielski 	case FIELD_ID_DATABASE_SELECT:
1419*b1cdbd2cSJim Jagielski 		ProcessString(XML_TABLE_NAME,
1420*b1cdbd2cSJim Jagielski 					  GetStringProperty(sPropertyDataTableName, rPropSet));
1421*b1cdbd2cSJim Jagielski         ProcessCommandType(GetIntProperty(sPropertyDataCommandType, rPropSet));
1422*b1cdbd2cSJim Jagielski 		ProcessString(XML_CONDITION, XML_NAMESPACE_OOOW,
1423*b1cdbd2cSJim Jagielski 					  GetStringProperty(sPropertyCondition, rPropSet));
1424*b1cdbd2cSJim Jagielski 		ProcessInteger(XML_ROW_NUMBER,
1425*b1cdbd2cSJim Jagielski 					   GetIntProperty(sPropertySetNumber, rPropSet));
1426*b1cdbd2cSJim Jagielski 		DBG_ASSERT(sPresentation.equals(sEmpty),
1427*b1cdbd2cSJim Jagielski 				   "Unexpected presentation for database select field");
1428*b1cdbd2cSJim Jagielski 		ExportDataBaseElement(XML_DATABASE_ROW_SELECT, OUString(),
1429*b1cdbd2cSJim Jagielski                               rPropSet, xPropSetInfo);
1430*b1cdbd2cSJim Jagielski 		break;
1431*b1cdbd2cSJim Jagielski 
1432*b1cdbd2cSJim Jagielski 	case FIELD_ID_DATABASE_DISPLAY:
1433*b1cdbd2cSJim Jagielski 	{
1434*b1cdbd2cSJim Jagielski 		// get database, table and column name from field master
1435*b1cdbd2cSJim Jagielski 		const Reference<XPropertySet> & xMaster = GetMasterPropertySet(rTextField);
1436*b1cdbd2cSJim Jagielski 		ProcessString(XML_TABLE_NAME,
1437*b1cdbd2cSJim Jagielski 					  GetStringProperty(sPropertyDataTableName, xMaster));
1438*b1cdbd2cSJim Jagielski         ProcessCommandType(GetIntProperty(sPropertyDataCommandType, xMaster));
1439*b1cdbd2cSJim Jagielski 		ProcessString(XML_COLUMN_NAME,
1440*b1cdbd2cSJim Jagielski 					  GetStringProperty(sPropertyDataColumnName, xMaster));
1441*b1cdbd2cSJim Jagielski 		// export number format if available (happens only for numbers!)
1442*b1cdbd2cSJim Jagielski 		if (!GetBoolProperty(sPropertyIsDataBaseFormat, rPropSet))
1443*b1cdbd2cSJim Jagielski 		{
1444*b1cdbd2cSJim Jagielski 			ProcessValueAndType(sal_False,	// doesn't happen for text
1445*b1cdbd2cSJim Jagielski 								GetIntProperty(sPropertyNumberFormat,rPropSet),
1446*b1cdbd2cSJim Jagielski 								sEmpty, sEmpty, 0.0, // not used
1447*b1cdbd2cSJim Jagielski 								sal_False, sal_False, sal_True, sal_False);
1448*b1cdbd2cSJim Jagielski 		}
1449*b1cdbd2cSJim Jagielski 		ProcessDisplay(GetBoolProperty(sPropertyIsVisible, rPropSet),
1450*b1cdbd2cSJim Jagielski 					   sal_False);
1451*b1cdbd2cSJim Jagielski 		ExportDataBaseElement(XML_DATABASE_DISPLAY, sPresentation,
1452*b1cdbd2cSJim Jagielski                               xMaster, xMaster->getPropertySetInfo());
1453*b1cdbd2cSJim Jagielski 		break;
1454*b1cdbd2cSJim Jagielski 	}
1455*b1cdbd2cSJim Jagielski 
1456*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_REVISION:
1457*b1cdbd2cSJim Jagielski 		ProcessBoolean(XML_FIXED,
1458*b1cdbd2cSJim Jagielski 					   GetBoolProperty(sPropertyIsFixed, rPropSet), sal_False);
1459*b1cdbd2cSJim Jagielski 		ExportElement(MapDocInfoFieldName(nToken), sPresentation);
1460*b1cdbd2cSJim Jagielski 		break;
1461*b1cdbd2cSJim Jagielski 
1462*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_EDIT_DURATION:
1463*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_SAVE_TIME:
1464*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_CREATION_TIME:
1465*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_PRINT_TIME:
1466*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_SAVE_DATE:
1467*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_CREATION_DATE:
1468*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_PRINT_DATE:
1469*b1cdbd2cSJim Jagielski 		ProcessValueAndType(sal_False,
1470*b1cdbd2cSJim Jagielski 							GetIntProperty(sPropertyNumberFormat, rPropSet),
1471*b1cdbd2cSJim Jagielski 							sEmpty, sEmpty, 0.0,
1472*b1cdbd2cSJim Jagielski 							sal_False, sal_False, sal_True,
1473*b1cdbd2cSJim Jagielski                             ! GetOptionalBoolProperty(
1474*b1cdbd2cSJim Jagielski                                     sPropertyIsFixedLanguage,
1475*b1cdbd2cSJim Jagielski                                     rPropSet, xPropSetInfo, sal_False ) );
1476*b1cdbd2cSJim Jagielski 
1477*b1cdbd2cSJim Jagielski 		// todo: export date/time value, but values not available -> core bug
1478*b1cdbd2cSJim Jagielski 		ProcessBoolean(XML_FIXED,
1479*b1cdbd2cSJim Jagielski 					   GetBoolProperty(sPropertyIsFixed, rPropSet), sal_False);
1480*b1cdbd2cSJim Jagielski 		ExportElement(MapDocInfoFieldName(nToken), sPresentation);
1481*b1cdbd2cSJim Jagielski 		break;
1482*b1cdbd2cSJim Jagielski 
1483*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_CREATION_AUTHOR:
1484*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_DESCRIPTION:
1485*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_PRINT_AUTHOR:
1486*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_TITLE:
1487*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_SUBJECT:
1488*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_KEYWORDS:
1489*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_SAVE_AUTHOR:
1490*b1cdbd2cSJim Jagielski 		if (xPropSetInfo->hasPropertyByName(sPropertyIsFixed))
1491*b1cdbd2cSJim Jagielski 		{
1492*b1cdbd2cSJim Jagielski 			ProcessBoolean(XML_FIXED,
1493*b1cdbd2cSJim Jagielski 						   GetBoolProperty(sPropertyIsFixed, rPropSet), sal_False);
1494*b1cdbd2cSJim Jagielski 		}
1495*b1cdbd2cSJim Jagielski 		ExportElement(MapDocInfoFieldName(nToken), sPresentation);
1496*b1cdbd2cSJim Jagielski 		break;
1497*b1cdbd2cSJim Jagielski 
1498*b1cdbd2cSJim Jagielski 	case FIELD_ID_DOCINFO_CUSTOM:
1499*b1cdbd2cSJim Jagielski 	{
1500*b1cdbd2cSJim Jagielski         ProcessValueAndType(sal_False,	// doesn't happen for text
1501*b1cdbd2cSJim Jagielski 								GetIntProperty(sPropertyNumberFormat,rPropSet),
1502*b1cdbd2cSJim Jagielski 								sEmpty, sEmpty, 0.0, // not used
1503*b1cdbd2cSJim Jagielski 								sal_False, sal_False, sal_True,
1504*b1cdbd2cSJim Jagielski                                 ! GetOptionalBoolProperty(
1505*b1cdbd2cSJim Jagielski                                     sPropertyIsFixedLanguage,
1506*b1cdbd2cSJim Jagielski                                     rPropSet, xPropSetInfo, sal_False ));
1507*b1cdbd2cSJim Jagielski 		uno::Any aAny = rPropSet->getPropertyValue( sPropertyName );
1508*b1cdbd2cSJim Jagielski 		::rtl::OUString sName;
1509*b1cdbd2cSJim Jagielski 		aAny >>= sName;
1510*b1cdbd2cSJim Jagielski 		ProcessString(XML_NAME, sName);
1511*b1cdbd2cSJim Jagielski 		ProcessBoolean(XML_FIXED, GetBoolProperty(sPropertyIsFixed, rPropSet), sal_False);
1512*b1cdbd2cSJim Jagielski 		ExportElement(XML_USER_DEFINED, sPresentation);
1513*b1cdbd2cSJim Jagielski 		break;
1514*b1cdbd2cSJim Jagielski 	}
1515*b1cdbd2cSJim Jagielski 
1516*b1cdbd2cSJim Jagielski 	case FIELD_ID_COUNT_PAGES:
1517*b1cdbd2cSJim Jagielski 	case FIELD_ID_COUNT_PARAGRAPHS:
1518*b1cdbd2cSJim Jagielski 	case FIELD_ID_COUNT_WORDS:
1519*b1cdbd2cSJim Jagielski 	case FIELD_ID_COUNT_CHARACTERS:
1520*b1cdbd2cSJim Jagielski 	case FIELD_ID_COUNT_TABLES:
1521*b1cdbd2cSJim Jagielski 	case FIELD_ID_COUNT_GRAPHICS:
1522*b1cdbd2cSJim Jagielski 	case FIELD_ID_COUNT_OBJECTS:
1523*b1cdbd2cSJim Jagielski 		// all properties optional (applies to pages only, but I'll do
1524*b1cdbd2cSJim Jagielski 		// it for all for sake of common implementation)
1525*b1cdbd2cSJim Jagielski 		if (xPropSetInfo->hasPropertyByName(sPropertyNumberingType))
1526*b1cdbd2cSJim Jagielski 		{
1527*b1cdbd2cSJim Jagielski 			ProcessNumberingType(GetInt16Property(sPropertyNumberingType,
1528*b1cdbd2cSJim Jagielski 												  rPropSet));
1529*b1cdbd2cSJim Jagielski 		}
1530*b1cdbd2cSJim Jagielski 		ExportElement(MapCountFieldName(nToken), sPresentation);
1531*b1cdbd2cSJim Jagielski 		break;
1532*b1cdbd2cSJim Jagielski 
1533*b1cdbd2cSJim Jagielski 	case FIELD_ID_CONDITIONAL_TEXT:
1534*b1cdbd2cSJim Jagielski 		ProcessString(XML_CONDITION, XML_NAMESPACE_OOOW,
1535*b1cdbd2cSJim Jagielski 					  GetStringProperty(sPropertyCondition, rPropSet));
1536*b1cdbd2cSJim Jagielski 		ProcessString(XML_STRING_VALUE_IF_TRUE,
1537*b1cdbd2cSJim Jagielski 					  GetStringProperty(sPropertyTrueContent, rPropSet));
1538*b1cdbd2cSJim Jagielski 		ProcessString(XML_STRING_VALUE_IF_FALSE,
1539*b1cdbd2cSJim Jagielski 					  GetStringProperty(sPropertyFalseContent, rPropSet));
1540*b1cdbd2cSJim Jagielski 		ProcessBoolean(XML_CURRENT_VALUE,
1541*b1cdbd2cSJim Jagielski 					   GetBoolProperty(sPropertyIsConditionTrue, rPropSet),
1542*b1cdbd2cSJim Jagielski 					   sal_False);
1543*b1cdbd2cSJim Jagielski 		ExportElement(XML_CONDITIONAL_TEXT, sPresentation);
1544*b1cdbd2cSJim Jagielski 		break;
1545*b1cdbd2cSJim Jagielski 
1546*b1cdbd2cSJim Jagielski 	case FIELD_ID_HIDDEN_TEXT:
1547*b1cdbd2cSJim Jagielski 		ProcessString(XML_CONDITION, XML_NAMESPACE_OOOW,
1548*b1cdbd2cSJim Jagielski 					  GetStringProperty(sPropertyCondition, rPropSet));
1549*b1cdbd2cSJim Jagielski 		ProcessString(XML_STRING_VALUE,
1550*b1cdbd2cSJim Jagielski 					  GetStringProperty(sPropertyContent, rPropSet));
1551*b1cdbd2cSJim Jagielski 		ProcessBoolean(XML_IS_HIDDEN,
1552*b1cdbd2cSJim Jagielski 					   GetBoolProperty(sPropertyIsHidden, rPropSet),
1553*b1cdbd2cSJim Jagielski 					   sal_False);
1554*b1cdbd2cSJim Jagielski 		ExportElement(XML_HIDDEN_TEXT, sPresentation);
1555*b1cdbd2cSJim Jagielski 		break;
1556*b1cdbd2cSJim Jagielski 
1557*b1cdbd2cSJim Jagielski 	case FIELD_ID_HIDDEN_PARAGRAPH:
1558*b1cdbd2cSJim Jagielski 		ProcessString(XML_CONDITION, XML_NAMESPACE_OOOW,
1559*b1cdbd2cSJim Jagielski 					  GetStringProperty(sPropertyCondition, rPropSet));
1560*b1cdbd2cSJim Jagielski 		ProcessBoolean(XML_IS_HIDDEN,
1561*b1cdbd2cSJim Jagielski 					   GetBoolProperty(sPropertyIsHidden, rPropSet),
1562*b1cdbd2cSJim Jagielski 					   sal_False);
1563*b1cdbd2cSJim Jagielski 		DBG_ASSERT(sPresentation.equals(sEmpty),
1564*b1cdbd2cSJim Jagielski 				   "Unexpected presentation for hidden paragraph field");
1565*b1cdbd2cSJim Jagielski 		ExportElement(XML_HIDDEN_PARAGRAPH);
1566*b1cdbd2cSJim Jagielski 		break;
1567*b1cdbd2cSJim Jagielski 
1568*b1cdbd2cSJim Jagielski 	case FIELD_ID_TEMPLATE_NAME:
1569*b1cdbd2cSJim Jagielski 		ProcessString(XML_DISPLAY,
1570*b1cdbd2cSJim Jagielski 					  MapTemplateDisplayFormat(
1571*b1cdbd2cSJim Jagielski 						  GetInt16Property(sPropertyFileFormat, rPropSet)));
1572*b1cdbd2cSJim Jagielski 		ExportElement(XML_TEMPLATE_NAME, sPresentation);
1573*b1cdbd2cSJim Jagielski 		break;
1574*b1cdbd2cSJim Jagielski 
1575*b1cdbd2cSJim Jagielski 	case FIELD_ID_CHAPTER:
1576*b1cdbd2cSJim Jagielski 		ProcessString(XML_DISPLAY,
1577*b1cdbd2cSJim Jagielski 					  MapChapterDisplayFormat(
1578*b1cdbd2cSJim Jagielski 						  GetInt16Property(sPropertyChapterFormat, rPropSet)));
1579*b1cdbd2cSJim Jagielski 		// API numbers 0..9, we number 1..10
1580*b1cdbd2cSJim Jagielski 		ProcessInteger(XML_OUTLINE_LEVEL,
1581*b1cdbd2cSJim Jagielski 					   GetInt8Property(sPropertyLevel, rPropSet) + 1);
1582*b1cdbd2cSJim Jagielski 		ExportElement(XML_CHAPTER, sPresentation);
1583*b1cdbd2cSJim Jagielski 		break;
1584*b1cdbd2cSJim Jagielski 
1585*b1cdbd2cSJim Jagielski 	case FIELD_ID_FILE_NAME:
1586*b1cdbd2cSJim Jagielski 		// all properties are optional
1587*b1cdbd2cSJim Jagielski 		if (xPropSetInfo->hasPropertyByName(sPropertyFileFormat))
1588*b1cdbd2cSJim Jagielski 		{
1589*b1cdbd2cSJim Jagielski 			ProcessString(XML_DISPLAY,
1590*b1cdbd2cSJim Jagielski 						  MapFilenameDisplayFormat(
1591*b1cdbd2cSJim Jagielski 							 GetInt16Property(sPropertyFileFormat, rPropSet)));
1592*b1cdbd2cSJim Jagielski 		}
1593*b1cdbd2cSJim Jagielski 		if (xPropSetInfo->hasPropertyByName(sPropertyIsFixed))
1594*b1cdbd2cSJim Jagielski 		{
1595*b1cdbd2cSJim Jagielski 			ProcessBoolean(XML_FIXED,
1596*b1cdbd2cSJim Jagielski 						   GetBoolProperty(sPropertyIsFixed, rPropSet),
1597*b1cdbd2cSJim Jagielski 						   sal_False);
1598*b1cdbd2cSJim Jagielski 		}
1599*b1cdbd2cSJim Jagielski 		ExportElement(XML_FILE_NAME, sPresentation);
1600*b1cdbd2cSJim Jagielski 		break;
1601*b1cdbd2cSJim Jagielski 
1602*b1cdbd2cSJim Jagielski 	case FIELD_ID_REFPAGE_SET:
1603*b1cdbd2cSJim Jagielski 		ProcessBoolean(XML_ACTIVE,
1604*b1cdbd2cSJim Jagielski 					   GetBoolProperty(sPropertyOn, rPropSet), sal_True);
1605*b1cdbd2cSJim Jagielski 		ProcessIntegerDef(XML_PAGE_ADJUST,
1606*b1cdbd2cSJim Jagielski 					   GetInt16Property(sPropertyOffset, rPropSet), 0);
1607*b1cdbd2cSJim Jagielski 		DBG_ASSERT(sPresentation.equals(sEmpty),
1608*b1cdbd2cSJim Jagielski 				   "Unexpected presentation page variable field");
1609*b1cdbd2cSJim Jagielski 		ExportElement(XML_PAGE_VARIABLE_SET);
1610*b1cdbd2cSJim Jagielski 		break;
1611*b1cdbd2cSJim Jagielski 
1612*b1cdbd2cSJim Jagielski 	case FIELD_ID_REFPAGE_GET:
1613*b1cdbd2cSJim Jagielski 		ProcessNumberingType(
1614*b1cdbd2cSJim Jagielski 			GetInt16Property(sPropertyNumberingType, rPropSet));
1615*b1cdbd2cSJim Jagielski 		ExportElement(XML_PAGE_VARIABLE_GET, sPresentation);
1616*b1cdbd2cSJim Jagielski 		break;
1617*b1cdbd2cSJim Jagielski 
1618*b1cdbd2cSJim Jagielski 	case FIELD_ID_MACRO:
1619*b1cdbd2cSJim Jagielski         ExportMacro( rPropSet, sPresentation );
1620*b1cdbd2cSJim Jagielski 		break;
1621*b1cdbd2cSJim Jagielski 
1622*b1cdbd2cSJim Jagielski 	case FIELD_ID_REF_SEQUENCE:
1623*b1cdbd2cSJim Jagielski 		// reference to sequence: format, name, find value (and element)
1624*b1cdbd2cSJim Jagielski 		// was: if (nSeqNumber != -1) ...
1625*b1cdbd2cSJim Jagielski 		ProcessString(XML_REFERENCE_FORMAT,
1626*b1cdbd2cSJim Jagielski 					  MapReferenceType(GetInt16Property(
1627*b1cdbd2cSJim Jagielski 						  sPropertyReferenceFieldPart, rPropSet)),
1628*b1cdbd2cSJim Jagielski 					  XML_TEMPLATE);
1629*b1cdbd2cSJim Jagielski 		ProcessString(XML_REF_NAME,
1630*b1cdbd2cSJim Jagielski 					  MakeSequenceRefName(
1631*b1cdbd2cSJim Jagielski 						  GetInt16Property(sPropertySequenceNumber, rPropSet),
1632*b1cdbd2cSJim Jagielski 						  GetStringProperty(sPropertySourceName, rPropSet) ) );
1633*b1cdbd2cSJim Jagielski 		ExportElement(
1634*b1cdbd2cSJim Jagielski 			MapReferenceSource(
1635*b1cdbd2cSJim Jagielski 				GetInt16Property(sPropertyReferenceFieldSource, rPropSet)),
1636*b1cdbd2cSJim Jagielski 			sPresentation);
1637*b1cdbd2cSJim Jagielski 		break;
1638*b1cdbd2cSJim Jagielski 
1639*b1cdbd2cSJim Jagielski 	case FIELD_ID_REF_REFERENCE:
1640*b1cdbd2cSJim Jagielski 	case FIELD_ID_REF_BOOKMARK:
1641*b1cdbd2cSJim Jagielski 		// reference to bookmarks, references: format, name (and element)
1642*b1cdbd2cSJim Jagielski 		ProcessString(XML_REFERENCE_FORMAT,
1643*b1cdbd2cSJim Jagielski 					  MapReferenceType(GetInt16Property(
1644*b1cdbd2cSJim Jagielski 						  sPropertyReferenceFieldPart, rPropSet)),
1645*b1cdbd2cSJim Jagielski 					  XML_TEMPLATE);
1646*b1cdbd2cSJim Jagielski 		ProcessString(XML_REF_NAME,
1647*b1cdbd2cSJim Jagielski 					  GetStringProperty(sPropertySourceName, rPropSet));
1648*b1cdbd2cSJim Jagielski 		ExportElement(
1649*b1cdbd2cSJim Jagielski 			MapReferenceSource(GetInt16Property(
1650*b1cdbd2cSJim Jagielski 				sPropertyReferenceFieldSource, rPropSet)),
1651*b1cdbd2cSJim Jagielski 			sPresentation);
1652*b1cdbd2cSJim Jagielski 		break;
1653*b1cdbd2cSJim Jagielski 
1654*b1cdbd2cSJim Jagielski 	case FIELD_ID_REF_FOOTNOTE:
1655*b1cdbd2cSJim Jagielski 	case FIELD_ID_REF_ENDNOTE:
1656*b1cdbd2cSJim Jagielski 		// reference to end-/footnote: format, generate name, (and element)
1657*b1cdbd2cSJim Jagielski 		GetExport().AddAttribute( XML_NAMESPACE_TEXT, XML_NOTE_CLASS,
1658*b1cdbd2cSJim Jagielski 			FIELD_ID_REF_ENDNOTE==nToken ? XML_ENDNOTE : XML_FOOTNOTE );
1659*b1cdbd2cSJim Jagielski 		ProcessString(XML_REFERENCE_FORMAT,
1660*b1cdbd2cSJim Jagielski 					  MapReferenceType(GetInt16Property(
1661*b1cdbd2cSJim Jagielski 						  sPropertyReferenceFieldPart, rPropSet)),
1662*b1cdbd2cSJim Jagielski 					  XML_TEMPLATE);
1663*b1cdbd2cSJim Jagielski 		ProcessString(XML_REF_NAME,
1664*b1cdbd2cSJim Jagielski 					  MakeFootnoteRefName(GetInt16Property(
1665*b1cdbd2cSJim Jagielski 						  sPropertySequenceNumber, rPropSet)));
1666*b1cdbd2cSJim Jagielski 		ExportElement(
1667*b1cdbd2cSJim Jagielski 			MapReferenceSource(GetInt16Property(
1668*b1cdbd2cSJim Jagielski 				sPropertyReferenceFieldSource, rPropSet)),
1669*b1cdbd2cSJim Jagielski 			sPresentation);
1670*b1cdbd2cSJim Jagielski 		break;
1671*b1cdbd2cSJim Jagielski 
1672*b1cdbd2cSJim Jagielski 	case FIELD_ID_DDE:
1673*b1cdbd2cSJim Jagielski 		// name from field master
1674*b1cdbd2cSJim Jagielski  		ProcessString(XML_CONNECTION_NAME,
1675*b1cdbd2cSJim Jagielski 
1676*b1cdbd2cSJim Jagielski  					  GetStringProperty(sPropertyName,
1677*b1cdbd2cSJim Jagielski  										GetMasterPropertySet(rTextField)));
1678*b1cdbd2cSJim Jagielski 		ExportElement(XML_DDE_CONNECTION, sPresentation);
1679*b1cdbd2cSJim Jagielski 		break;
1680*b1cdbd2cSJim Jagielski 
1681*b1cdbd2cSJim Jagielski 	case FIELD_ID_SHEET_NAME:
1682*b1cdbd2cSJim Jagielski 		// name of spreadsheet (Calc only)
1683*b1cdbd2cSJim Jagielski 		ExportElement(XML_SHEET_NAME, sPresentation);
1684*b1cdbd2cSJim Jagielski 		break;
1685*b1cdbd2cSJim Jagielski 
1686*b1cdbd2cSJim Jagielski 	case FIELD_ID_URL:
1687*b1cdbd2cSJim Jagielski 	{
1688*b1cdbd2cSJim Jagielski 		// this field is a special case because it gets mapped onto a
1689*b1cdbd2cSJim Jagielski 		// hyperlink, rather than one of the regular text field.
1690*b1cdbd2cSJim Jagielski 		ProcessString(XML_HREF, GetExport().GetRelativeReference(GetStringProperty(sPropertyURL, rPropSet)),
1691*b1cdbd2cSJim Jagielski 					  sal_False, XML_NAMESPACE_XLINK);
1692*b1cdbd2cSJim Jagielski 		ProcessString(XML_TARGET_FRAME_NAME,
1693*b1cdbd2cSJim Jagielski 					  GetStringProperty(sPropertyTargetFrame,rPropSet),
1694*b1cdbd2cSJim Jagielski 					  sal_True, XML_NAMESPACE_OFFICE);
1695*b1cdbd2cSJim Jagielski 		SvXMLElementExport aUrlField(rExport, XML_NAMESPACE_TEXT, XML_A,
1696*b1cdbd2cSJim Jagielski 									 sal_False, sal_False);
1697*b1cdbd2cSJim Jagielski 		GetExport().Characters(sPresentation);
1698*b1cdbd2cSJim Jagielski 		break;
1699*b1cdbd2cSJim Jagielski 	}
1700*b1cdbd2cSJim Jagielski 
1701*b1cdbd2cSJim Jagielski 	case FIELD_ID_BIBLIOGRAPHY:
1702*b1cdbd2cSJim Jagielski 	{
1703*b1cdbd2cSJim Jagielski 		ProcessBibliographyData(rPropSet);
1704*b1cdbd2cSJim Jagielski 		ExportElement(XML_BIBLIOGRAPHY_MARK, sPresentation);
1705*b1cdbd2cSJim Jagielski 		break;
1706*b1cdbd2cSJim Jagielski 	}
1707*b1cdbd2cSJim Jagielski 
1708*b1cdbd2cSJim Jagielski 	case FIELD_ID_SCRIPT:
1709*b1cdbd2cSJim Jagielski 		ProcessString(XML_LANGUAGE,
1710*b1cdbd2cSJim Jagielski 					  GetStringProperty(sPropertyScriptType, rPropSet),
1711*b1cdbd2cSJim Jagielski 					  sal_True, XML_NAMESPACE_SCRIPT);
1712*b1cdbd2cSJim Jagielski 		DBG_ASSERT(sPresentation.equals(sEmpty),
1713*b1cdbd2cSJim Jagielski 				   "Unexpected presentation for script field");
1714*b1cdbd2cSJim Jagielski 		if (GetBoolProperty(sPropertyURLContent, rPropSet))
1715*b1cdbd2cSJim Jagielski 		{
1716*b1cdbd2cSJim Jagielski 			ProcessString(XML_HREF,
1717*b1cdbd2cSJim Jagielski 						  GetExport().GetRelativeReference(GetStringProperty(sPropertyContent, rPropSet)),
1718*b1cdbd2cSJim Jagielski 						  sal_False, XML_NAMESPACE_XLINK);
1719*b1cdbd2cSJim Jagielski 			ExportElement(XML_SCRIPT);
1720*b1cdbd2cSJim Jagielski 		}
1721*b1cdbd2cSJim Jagielski 		else
1722*b1cdbd2cSJim Jagielski 		{
1723*b1cdbd2cSJim Jagielski 			ExportElement(XML_SCRIPT,
1724*b1cdbd2cSJim Jagielski 						  GetStringProperty(sPropertyContent, rPropSet));
1725*b1cdbd2cSJim Jagielski 		}
1726*b1cdbd2cSJim Jagielski 		break;
1727*b1cdbd2cSJim Jagielski 
1728*b1cdbd2cSJim Jagielski 	case FIELD_ID_ANNOTATION:
1729*b1cdbd2cSJim Jagielski 	{
1730*b1cdbd2cSJim Jagielski 		// check for empty presentation (just in case)
1731*b1cdbd2cSJim Jagielski 		DBG_ASSERT(sPresentation.equals(sEmpty),
1732*b1cdbd2cSJim Jagielski 				   "Unexpected presentation for annotation field");
1733*b1cdbd2cSJim Jagielski 
1734*b1cdbd2cSJim Jagielski         // annotation element + content
1735*b1cdbd2cSJim Jagielski         OUString aAnnotationName;
1736*b1cdbd2cSJim Jagielski         rPropSet->getPropertyValue(sPropertyName) >>= aAnnotationName;
1737*b1cdbd2cSJim Jagielski         if ( aAnnotationName.getLength() > 0 )
1738*b1cdbd2cSJim Jagielski         {
1739*b1cdbd2cSJim Jagielski             GetExport().AddAttribute( XML_NAMESPACE_OFFICE, XML_NAME, aAnnotationName );
1740*b1cdbd2cSJim Jagielski         }
1741*b1cdbd2cSJim Jagielski         SvXMLElementExport aElem( GetExport(), XML_NAMESPACE_OFFICE, XML_ANNOTATION, sal_False, sal_True );
1742*b1cdbd2cSJim Jagielski 
1743*b1cdbd2cSJim Jagielski 		// author
1744*b1cdbd2cSJim Jagielski 		OUString aAuthor( GetStringProperty(sPropertyAuthor, rPropSet) );
1745*b1cdbd2cSJim Jagielski 		if ( aAuthor.getLength() > 0 )
1746*b1cdbd2cSJim Jagielski 		{
1747*b1cdbd2cSJim Jagielski 			SvXMLElementExport aCreatorElem( GetExport(), XML_NAMESPACE_DC,
1748*b1cdbd2cSJim Jagielski 											  XML_CREATOR, sal_True,
1749*b1cdbd2cSJim Jagielski 											  sal_False );
1750*b1cdbd2cSJim Jagielski 			GetExport().Characters(aAuthor);
1751*b1cdbd2cSJim Jagielski 		}
1752*b1cdbd2cSJim Jagielski 
1753*b1cdbd2cSJim Jagielski 		// date time
1754*b1cdbd2cSJim Jagielski 		DateTime aDate( GetDateTimeProperty(sPropertyDateTimeValue, rPropSet) );
1755*b1cdbd2cSJim Jagielski 		{
1756*b1cdbd2cSJim Jagielski 			OUStringBuffer aBuffer;
1757*b1cdbd2cSJim Jagielski 			GetExport().GetMM100UnitConverter().convertDateTime(aBuffer,
1758*b1cdbd2cSJim Jagielski 																aDate,
1759*b1cdbd2cSJim Jagielski 																sal_True);
1760*b1cdbd2cSJim Jagielski 			SvXMLElementExport aDateElem( GetExport(), XML_NAMESPACE_DC,
1761*b1cdbd2cSJim Jagielski 											  XML_DATE, sal_True,
1762*b1cdbd2cSJim Jagielski 											  sal_False );
1763*b1cdbd2cSJim Jagielski 			GetExport().Characters(aBuffer.makeStringAndClear());
1764*b1cdbd2cSJim Jagielski 		}
1765*b1cdbd2cSJim Jagielski 
1766*b1cdbd2cSJim Jagielski         // initials
1767*b1cdbd2cSJim Jagielski         if ( GetExport().getDefaultVersion() > SvtSaveOptions::ODFVER_012 )
1768*b1cdbd2cSJim Jagielski         {
1769*b1cdbd2cSJim Jagielski             OUString aInitials( GetStringProperty(sPropertyInitials, rPropSet) );
1770*b1cdbd2cSJim Jagielski             if ( aInitials.getLength() > 0 )
1771*b1cdbd2cSJim Jagielski             {
1772*b1cdbd2cSJim Jagielski                 SvXMLElementExport aCreatorElem(
1773*b1cdbd2cSJim Jagielski                     GetExport(),
1774*b1cdbd2cSJim Jagielski                     XML_NAMESPACE_TEXT_EXT,
1775*b1cdbd2cSJim Jagielski                     XML_SENDER_INITIALS,
1776*b1cdbd2cSJim Jagielski                     sal_True,
1777*b1cdbd2cSJim Jagielski                     sal_False );
1778*b1cdbd2cSJim Jagielski                 GetExport().Characters(aInitials);
1779*b1cdbd2cSJim Jagielski             }
1780*b1cdbd2cSJim Jagielski         }
1781*b1cdbd2cSJim Jagielski 
1782*b1cdbd2cSJim Jagielski 		com::sun::star::uno::Reference < com::sun::star::text::XText > xText;
1783*b1cdbd2cSJim Jagielski 		try
1784*b1cdbd2cSJim Jagielski 		{
1785*b1cdbd2cSJim Jagielski 			com::sun::star::uno::Any aRet = rPropSet->getPropertyValue(sPropertyTextRange);
1786*b1cdbd2cSJim Jagielski 			aRet >>= xText;
1787*b1cdbd2cSJim Jagielski 		}
1788*b1cdbd2cSJim Jagielski 		catch ( com::sun::star::uno::Exception& )
1789*b1cdbd2cSJim Jagielski 		{}
1790*b1cdbd2cSJim Jagielski 
1791*b1cdbd2cSJim Jagielski 		if ( xText.is() )
1792*b1cdbd2cSJim Jagielski 			GetExport().GetTextParagraphExport()->exportText( xText );
1793*b1cdbd2cSJim Jagielski 		else
1794*b1cdbd2cSJim Jagielski 			ProcessParagraphSequence(GetStringProperty(sPropertyContent,rPropSet));
1795*b1cdbd2cSJim Jagielski 		break;
1796*b1cdbd2cSJim Jagielski 	}
1797*b1cdbd2cSJim Jagielski 
1798*b1cdbd2cSJim Jagielski 	case FIELD_ID_COMBINED_CHARACTERS:
1799*b1cdbd2cSJim Jagielski 	{
1800*b1cdbd2cSJim Jagielski         // The style with the combined characters attribute has
1801*b1cdbd2cSJim Jagielski         // already been handled in the ExportField method. So all that
1802*b1cdbd2cSJim Jagielski         // is left to do now is to export the characters.
1803*b1cdbd2cSJim Jagielski 		GetExport().Characters(sPresentation);
1804*b1cdbd2cSJim Jagielski 		break;
1805*b1cdbd2cSJim Jagielski 	}
1806*b1cdbd2cSJim Jagielski 
1807*b1cdbd2cSJim Jagielski     case FIELD_ID_META:
1808*b1cdbd2cSJim Jagielski     {
1809*b1cdbd2cSJim Jagielski         ExportMetaField(rPropSet, false, bProgress);
1810*b1cdbd2cSJim Jagielski         break;
1811*b1cdbd2cSJim Jagielski     }
1812*b1cdbd2cSJim Jagielski 
1813*b1cdbd2cSJim Jagielski 	case FIELD_ID_MEASURE:
1814*b1cdbd2cSJim Jagielski 	{
1815*b1cdbd2cSJim Jagielski 		ProcessString(XML_KIND, MapMeasureKind(GetInt16Property(sPropertyMeasureKind, rPropSet)));
1816*b1cdbd2cSJim Jagielski 		ExportElement( XML_MEASURE, sPresentation );
1817*b1cdbd2cSJim Jagielski 		break;
1818*b1cdbd2cSJim Jagielski 	}
1819*b1cdbd2cSJim Jagielski 
1820*b1cdbd2cSJim Jagielski     case FIELD_ID_TABLE_FORMULA:
1821*b1cdbd2cSJim Jagielski         ProcessString( XML_FORMULA,  XML_NAMESPACE_OOOW,
1822*b1cdbd2cSJim Jagielski                        GetStringProperty(sPropertyContent, rPropSet) );
1823*b1cdbd2cSJim Jagielski 		ProcessDisplay( sal_True,
1824*b1cdbd2cSJim Jagielski                         GetBoolProperty(sPropertyIsShowFormula, rPropSet),
1825*b1cdbd2cSJim Jagielski                         sal_True );
1826*b1cdbd2cSJim Jagielski 		ProcessValueAndType( sal_False,
1827*b1cdbd2cSJim Jagielski                              GetIntProperty(sPropertyNumberFormat, rPropSet),
1828*b1cdbd2cSJim Jagielski                              sEmpty, sEmpty, 0.0f,
1829*b1cdbd2cSJim Jagielski                              sal_False, sal_False, sal_True,
1830*b1cdbd2cSJim Jagielski                              sal_False, sal_False );
1831*b1cdbd2cSJim Jagielski         ExportElement( XML_TABLE_FORMULA, sPresentation );
1832*b1cdbd2cSJim Jagielski         break;
1833*b1cdbd2cSJim Jagielski 
1834*b1cdbd2cSJim Jagielski     case FIELD_ID_DROP_DOWN:
1835*b1cdbd2cSJim Jagielski     {
1836*b1cdbd2cSJim Jagielski 		ProcessString(XML_NAME, GetStringProperty(sPropertyName, rPropSet));
1837*b1cdbd2cSJim Jagielski         ProcessString(XML_HELP,
1838*b1cdbd2cSJim Jagielski                       GetStringProperty(sPropertyHelp, rPropSet), true);
1839*b1cdbd2cSJim Jagielski         ProcessString(XML_HINT,
1840*b1cdbd2cSJim Jagielski                       GetStringProperty(sPropertyTooltip, rPropSet), true);
1841*b1cdbd2cSJim Jagielski         SvXMLElementExport aElem( GetExport(),
1842*b1cdbd2cSJim Jagielski                                   XML_NAMESPACE_TEXT, XML_DROPDOWN,
1843*b1cdbd2cSJim Jagielski                                   sal_False, sal_False );
1844*b1cdbd2cSJim Jagielski         ProcessStringSequence
1845*b1cdbd2cSJim Jagielski             (GetStringSequenceProperty( sPropertyItems, rPropSet ),
1846*b1cdbd2cSJim Jagielski              GetStringProperty( sPropertySelectedItem, rPropSet ) );
1847*b1cdbd2cSJim Jagielski 
1848*b1cdbd2cSJim Jagielski         GetExport().Characters( sPresentation );
1849*b1cdbd2cSJim Jagielski     }
1850*b1cdbd2cSJim Jagielski     break;
1851*b1cdbd2cSJim Jagielski 
1852*b1cdbd2cSJim Jagielski 	case FIELD_ID_DRAW_HEADER:
1853*b1cdbd2cSJim Jagielski 	{
1854*b1cdbd2cSJim Jagielski         SvXMLElementExport aElem( GetExport(), XML_NAMESPACE_PRESENTATION, XML_HEADER, sal_False, sal_False );
1855*b1cdbd2cSJim Jagielski 	}
1856*b1cdbd2cSJim Jagielski 	break;
1857*b1cdbd2cSJim Jagielski 
1858*b1cdbd2cSJim Jagielski 	case FIELD_ID_DRAW_FOOTER:
1859*b1cdbd2cSJim Jagielski 	{
1860*b1cdbd2cSJim Jagielski         SvXMLElementExport aElem( GetExport(), XML_NAMESPACE_PRESENTATION, XML_FOOTER, sal_False, sal_False );
1861*b1cdbd2cSJim Jagielski 	}
1862*b1cdbd2cSJim Jagielski 	break;
1863*b1cdbd2cSJim Jagielski 
1864*b1cdbd2cSJim Jagielski 	case FIELD_ID_DRAW_DATE_TIME:
1865*b1cdbd2cSJim Jagielski 	{
1866*b1cdbd2cSJim Jagielski         SvXMLElementExport aElem( GetExport(), XML_NAMESPACE_PRESENTATION, XML_DATE_TIME, sal_False, sal_False );
1867*b1cdbd2cSJim Jagielski 	}
1868*b1cdbd2cSJim Jagielski 	break;
1869*b1cdbd2cSJim Jagielski 
1870*b1cdbd2cSJim Jagielski 	case FIELD_ID_UNKNOWN:
1871*b1cdbd2cSJim Jagielski 	default:
1872*b1cdbd2cSJim Jagielski 		DBG_ERROR("unkown field type encountered!");
1873*b1cdbd2cSJim Jagielski 		// always export content
1874*b1cdbd2cSJim Jagielski 		GetExport().Characters(sPresentation);
1875*b1cdbd2cSJim Jagielski 	}
1876*b1cdbd2cSJim Jagielski }
1877*b1cdbd2cSJim Jagielski 
1878*b1cdbd2cSJim Jagielski 
1879*b1cdbd2cSJim Jagielski /// export field declarations / field masters
ExportFieldDeclarations()1880*b1cdbd2cSJim Jagielski void XMLTextFieldExport::ExportFieldDeclarations()
1881*b1cdbd2cSJim Jagielski {
1882*b1cdbd2cSJim Jagielski 	Reference<XText> xEmptyText;
1883*b1cdbd2cSJim Jagielski 	ExportFieldDeclarations(xEmptyText);
1884*b1cdbd2cSJim Jagielski }
1885*b1cdbd2cSJim Jagielski 
1886*b1cdbd2cSJim Jagielski /// export field declarations / field masters
ExportFieldDeclarations(const Reference<XText> & rText)1887*b1cdbd2cSJim Jagielski void XMLTextFieldExport::ExportFieldDeclarations(
1888*b1cdbd2cSJim Jagielski 	const Reference<XText> & rText )
1889*b1cdbd2cSJim Jagielski {
1890*b1cdbd2cSJim Jagielski 	// store lists for decl elements
1891*b1cdbd2cSJim Jagielski 	vector<OUString> 					aVarName;
1892*b1cdbd2cSJim Jagielski 	vector<OUString>					aUserName;
1893*b1cdbd2cSJim Jagielski 	vector<OUString>					aSeqName;
1894*b1cdbd2cSJim Jagielski 	vector<OUString>					aDdeName;
1895*b1cdbd2cSJim Jagielski 
1896*b1cdbd2cSJim Jagielski 	// get text fields supplier and field master name access
1897*b1cdbd2cSJim Jagielski 	Reference<XTextFieldsSupplier> xTextFieldsSupp(GetExport().GetModel(),
1898*b1cdbd2cSJim Jagielski 												   UNO_QUERY);
1899*b1cdbd2cSJim Jagielski 	if( !xTextFieldsSupp.is() )
1900*b1cdbd2cSJim Jagielski 		return;
1901*b1cdbd2cSJim Jagielski 
1902*b1cdbd2cSJim Jagielski 	Reference<container::XNameAccess> xFieldMasterNameAccess(
1903*b1cdbd2cSJim Jagielski 		xTextFieldsSupp->getTextFieldMasters(), UNO_QUERY);
1904*b1cdbd2cSJim Jagielski 
1905*b1cdbd2cSJim Jagielski 	// where to get the text field masters from?
1906*b1cdbd2cSJim Jagielski 	// a) we get a specific XText: then use pUsedMasters
1907*b1cdbd2cSJim Jagielski 	// b) the XText is empty: then export all text fields
1908*b1cdbd2cSJim Jagielski 	Sequence<OUString> aFieldMasters;
1909*b1cdbd2cSJim Jagielski 	if (rText.is())
1910*b1cdbd2cSJim Jagielski 	{
1911*b1cdbd2cSJim Jagielski 		// export only used masters
1912*b1cdbd2cSJim Jagielski 		DBG_ASSERT(NULL != pUsedMasters,
1913*b1cdbd2cSJim Jagielski 				   "field masters must be recorded in order to be "
1914*b1cdbd2cSJim Jagielski 				   "written out separatly" );
1915*b1cdbd2cSJim Jagielski 		if (NULL != pUsedMasters)
1916*b1cdbd2cSJim Jagielski 		{
1917*b1cdbd2cSJim Jagielski 			map<Reference<XText>, set<OUString> > ::iterator aMapIter =
1918*b1cdbd2cSJim Jagielski 				pUsedMasters->find(rText);
1919*b1cdbd2cSJim Jagielski 			if (aMapIter != pUsedMasters->end())
1920*b1cdbd2cSJim Jagielski 			{
1921*b1cdbd2cSJim Jagielski 				// found the set of used field masters
1922*b1cdbd2cSJim Jagielski 				set<OUString> & rOurMasters = aMapIter->second;
1923*b1cdbd2cSJim Jagielski 
1924*b1cdbd2cSJim Jagielski 				// copy set to sequence
1925*b1cdbd2cSJim Jagielski 				aFieldMasters.realloc( rOurMasters.size() );
1926*b1cdbd2cSJim Jagielski 				sal_Int32 i = 0;
1927*b1cdbd2cSJim Jagielski 				for( set<OUString>::iterator aSetIter = rOurMasters.begin();
1928*b1cdbd2cSJim Jagielski 					 aSetIter != rOurMasters.end();
1929*b1cdbd2cSJim Jagielski 					 aSetIter++, i++ )
1930*b1cdbd2cSJim Jagielski 				{
1931*b1cdbd2cSJim Jagielski 					aFieldMasters[i] = *aSetIter;
1932*b1cdbd2cSJim Jagielski 				}
1933*b1cdbd2cSJim Jagielski 
1934*b1cdbd2cSJim Jagielski 				pUsedMasters->erase(rText);
1935*b1cdbd2cSJim Jagielski 			}
1936*b1cdbd2cSJim Jagielski 			// else: XText not found -> ignore
1937*b1cdbd2cSJim Jagielski 		}
1938*b1cdbd2cSJim Jagielski 		// else: no field masters have been recorded -> ignore
1939*b1cdbd2cSJim Jagielski 	}
1940*b1cdbd2cSJim Jagielski 	else
1941*b1cdbd2cSJim Jagielski 	{
1942*b1cdbd2cSJim Jagielski 		// no XText: export all!
1943*b1cdbd2cSJim Jagielski 		aFieldMasters = xFieldMasterNameAccess->getElementNames();
1944*b1cdbd2cSJim Jagielski 	}
1945*b1cdbd2cSJim Jagielski 
1946*b1cdbd2cSJim Jagielski 	for(sal_Int32 i=0; i<aFieldMasters.getLength(); i++) {
1947*b1cdbd2cSJim Jagielski 
1948*b1cdbd2cSJim Jagielski 		// get field master name
1949*b1cdbd2cSJim Jagielski 		OUString sFieldMaster = aFieldMasters[i];
1950*b1cdbd2cSJim Jagielski 
1951*b1cdbd2cSJim Jagielski 		// workaround for #no-bug#
1952*b1cdbd2cSJim Jagielski 		static const sal_Char sDB[] =
1953*b1cdbd2cSJim Jagielski 			"com.sun.star.text.FieldMaster.DataBase.";
1954*b1cdbd2cSJim Jagielski 		if ( sFieldMaster.matchIgnoreAsciiCaseAsciiL( sDB, sizeof(sDB)-1) )
1955*b1cdbd2cSJim Jagielski 		{
1956*b1cdbd2cSJim Jagielski 			continue;
1957*b1cdbd2cSJim Jagielski 		}
1958*b1cdbd2cSJim Jagielski 
1959*b1cdbd2cSJim Jagielski 
1960*b1cdbd2cSJim Jagielski 		OUString sFieldMasterType;
1961*b1cdbd2cSJim Jagielski 		OUString sVarName;
1962*b1cdbd2cSJim Jagielski 		ExplodeFieldMasterName(sFieldMaster, sFieldMasterType, sVarName);
1963*b1cdbd2cSJim Jagielski 
1964*b1cdbd2cSJim Jagielski 		// get XPropertySet of this field master
1965*b1cdbd2cSJim Jagielski 		Reference<XPropertySet> xPropSet;
1966*b1cdbd2cSJim Jagielski 		Any aAny = xFieldMasterNameAccess->getByName(sFieldMaster);
1967*b1cdbd2cSJim Jagielski 		aAny >>= xPropSet;
1968*b1cdbd2cSJim Jagielski 
1969*b1cdbd2cSJim Jagielski 		// save interesting field masters
1970*b1cdbd2cSJim Jagielski 		if (0 == sFieldMasterType.compareToAscii(FIELD_SERVICE_SETEXP))
1971*b1cdbd2cSJim Jagielski 		{
1972*b1cdbd2cSJim Jagielski 			sal_Int32 nType = GetIntProperty(sPropertySubType, xPropSet);
1973*b1cdbd2cSJim Jagielski 
1974*b1cdbd2cSJim Jagielski 			// sequence or variable?
1975*b1cdbd2cSJim Jagielski 			if ( SetVariableType::SEQUENCE == nType )
1976*b1cdbd2cSJim Jagielski 			{
1977*b1cdbd2cSJim Jagielski 				aSeqName.push_back( sFieldMaster );
1978*b1cdbd2cSJim Jagielski 			}
1979*b1cdbd2cSJim Jagielski 			else
1980*b1cdbd2cSJim Jagielski 			{
1981*b1cdbd2cSJim Jagielski 				aVarName.push_back( sFieldMaster );
1982*b1cdbd2cSJim Jagielski 			}
1983*b1cdbd2cSJim Jagielski 		}
1984*b1cdbd2cSJim Jagielski 		else if (0 == sFieldMasterType.compareToAscii(FIELD_SERVICE_USER))
1985*b1cdbd2cSJim Jagielski 		{
1986*b1cdbd2cSJim Jagielski 			aUserName.push_back( sFieldMaster );
1987*b1cdbd2cSJim Jagielski 		}
1988*b1cdbd2cSJim Jagielski 		else if (0 == sFieldMasterType.compareToAscii(FIELD_SERVICE_DDE))
1989*b1cdbd2cSJim Jagielski 		{
1990*b1cdbd2cSJim Jagielski 			aDdeName.push_back( sFieldMaster );
1991*b1cdbd2cSJim Jagielski 		}
1992*b1cdbd2cSJim Jagielski 		else
1993*b1cdbd2cSJim Jagielski 		{
1994*b1cdbd2cSJim Jagielski 			; // ignore
1995*b1cdbd2cSJim Jagielski 		}
1996*b1cdbd2cSJim Jagielski 	}
1997*b1cdbd2cSJim Jagielski 
1998*b1cdbd2cSJim Jagielski 	// now process fields:
1999*b1cdbd2cSJim Jagielski 
2000*b1cdbd2cSJim Jagielski 	// variable field masters:
2001*b1cdbd2cSJim Jagielski 	if ( !aVarName.empty() )
2002*b1cdbd2cSJim Jagielski 	{
2003*b1cdbd2cSJim Jagielski 		SvXMLElementExport aElem( GetExport(),
2004*b1cdbd2cSJim Jagielski 								  XML_NAMESPACE_TEXT,
2005*b1cdbd2cSJim Jagielski 								  XML_VARIABLE_DECLS,
2006*b1cdbd2cSJim Jagielski 								  sal_True, sal_True );
2007*b1cdbd2cSJim Jagielski 
2008*b1cdbd2cSJim Jagielski 		for (vector<OUString>::iterator aVarIter = aVarName.begin();
2009*b1cdbd2cSJim Jagielski 			 aVarIter != aVarName.end();
2010*b1cdbd2cSJim Jagielski 			 aVarIter++) {
2011*b1cdbd2cSJim Jagielski 
2012*b1cdbd2cSJim Jagielski 			OUString sName = *aVarIter;
2013*b1cdbd2cSJim Jagielski 
2014*b1cdbd2cSJim Jagielski 			// get field master property set
2015*b1cdbd2cSJim Jagielski 			Reference<XPropertySet> xPropSet;
2016*b1cdbd2cSJim Jagielski 			Any aAny = xFieldMasterNameAccess->getByName(sName);
2017*b1cdbd2cSJim Jagielski 			aAny >>= xPropSet;
2018*b1cdbd2cSJim Jagielski 
2019*b1cdbd2cSJim Jagielski 			// field name and type
2020*b1cdbd2cSJim Jagielski 			OUString sFieldMasterType;
2021*b1cdbd2cSJim Jagielski 			OUString sVarName;
2022*b1cdbd2cSJim Jagielski 			ExplodeFieldMasterName(sName, sFieldMasterType, sVarName);
2023*b1cdbd2cSJim Jagielski 
2024*b1cdbd2cSJim Jagielski 			// determine string/numeric field
2025*b1cdbd2cSJim Jagielski 			sal_Bool bIsString = ( GetIntProperty(sPropertySubType, xPropSet)
2026*b1cdbd2cSJim Jagielski 								   == SetVariableType::STRING );
2027*b1cdbd2cSJim Jagielski 
2028*b1cdbd2cSJim Jagielski 			// get dependent field property set
2029*b1cdbd2cSJim Jagielski 			Reference<XPropertySet> xFieldPropSet;
2030*b1cdbd2cSJim Jagielski 			if (GetDependentFieldPropertySet(xPropSet, xFieldPropSet))
2031*b1cdbd2cSJim Jagielski 			{
2032*b1cdbd2cSJim Jagielski 				// process value and type.
2033*b1cdbd2cSJim Jagielski 				ProcessValueAndType(
2034*b1cdbd2cSJim Jagielski 					bIsString,
2035*b1cdbd2cSJim Jagielski 					GetIntProperty(sPropertyNumberFormat, xFieldPropSet),
2036*b1cdbd2cSJim Jagielski 					sEmpty, sEmpty, 0.0,
2037*b1cdbd2cSJim Jagielski 					sal_False, sal_True, sal_False, sal_False);
2038*b1cdbd2cSJim Jagielski 			}
2039*b1cdbd2cSJim Jagielski 			else
2040*b1cdbd2cSJim Jagielski 			{
2041*b1cdbd2cSJim Jagielski 				// If no dependent field is found, only string and
2042*b1cdbd2cSJim Jagielski 				// float types can be supported
2043*b1cdbd2cSJim Jagielski 
2044*b1cdbd2cSJim Jagielski 				// number format: 0 is default number format for 1st
2045*b1cdbd2cSJim Jagielski 				// language. should be: getDefaultNumberFormat(Locale)
2046*b1cdbd2cSJim Jagielski 				// from NumberFormats
2047*b1cdbd2cSJim Jagielski 				ProcessValueAndType(
2048*b1cdbd2cSJim Jagielski 					bIsString,
2049*b1cdbd2cSJim Jagielski 					0, sEmpty, sEmpty, 0.0,
2050*b1cdbd2cSJim Jagielski 					sal_False, sal_True, sal_False, sal_False);
2051*b1cdbd2cSJim Jagielski 			}
2052*b1cdbd2cSJim Jagielski 
2053*b1cdbd2cSJim Jagielski 			ProcessString(XML_NAME, sVarName);
2054*b1cdbd2cSJim Jagielski 			ExportElement(XML_VARIABLE_DECL, sal_True);
2055*b1cdbd2cSJim Jagielski 		}
2056*b1cdbd2cSJim Jagielski 	}
2057*b1cdbd2cSJim Jagielski 	// else: no declarations element
2058*b1cdbd2cSJim Jagielski 
2059*b1cdbd2cSJim Jagielski 	// sequence field masters:
2060*b1cdbd2cSJim Jagielski 	if ( !aSeqName.empty() )
2061*b1cdbd2cSJim Jagielski 	{
2062*b1cdbd2cSJim Jagielski 		SvXMLElementExport aElem( GetExport(),
2063*b1cdbd2cSJim Jagielski 								  XML_NAMESPACE_TEXT,
2064*b1cdbd2cSJim Jagielski 								  XML_SEQUENCE_DECLS,
2065*b1cdbd2cSJim Jagielski 								  sal_True, sal_True );
2066*b1cdbd2cSJim Jagielski 
2067*b1cdbd2cSJim Jagielski 		for (vector<OUString>::iterator aSeqIter = aSeqName.begin();
2068*b1cdbd2cSJim Jagielski 			 aSeqIter != aSeqName.end();
2069*b1cdbd2cSJim Jagielski 			 aSeqIter++) {
2070*b1cdbd2cSJim Jagielski 
2071*b1cdbd2cSJim Jagielski 			OUString sName = *aSeqIter;
2072*b1cdbd2cSJim Jagielski 
2073*b1cdbd2cSJim Jagielski 			// get field master property set
2074*b1cdbd2cSJim Jagielski 			Reference<XPropertySet> xPropSet;
2075*b1cdbd2cSJim Jagielski 			Any aAny = xFieldMasterNameAccess->getByName(sName);
2076*b1cdbd2cSJim Jagielski 			aAny >>= xPropSet;
2077*b1cdbd2cSJim Jagielski 
2078*b1cdbd2cSJim Jagielski 			// field name and type
2079*b1cdbd2cSJim Jagielski 			OUString sFieldMasterType;
2080*b1cdbd2cSJim Jagielski 			OUString sVarName;
2081*b1cdbd2cSJim Jagielski 			ExplodeFieldMasterName(sName, sFieldMasterType, sVarName);
2082*b1cdbd2cSJim Jagielski 
2083*b1cdbd2cSJim Jagielski 			// outline level
2084*b1cdbd2cSJim Jagielski 			sal_Int32 nLevel = 1 + GetIntProperty(
2085*b1cdbd2cSJim Jagielski 				sPropertyChapterNumberingLevel, xPropSet);
2086*b1cdbd2cSJim Jagielski 			DBG_ASSERT(nLevel >= 0, "illegal outline level");
2087*b1cdbd2cSJim Jagielski 			DBG_ASSERT(nLevel < 127, "possible illegal outline level");
2088*b1cdbd2cSJim Jagielski 			ProcessInteger(XML_DISPLAY_OUTLINE_LEVEL, nLevel);
2089*b1cdbd2cSJim Jagielski 
2090*b1cdbd2cSJim Jagielski 			// separation character
2091*b1cdbd2cSJim Jagielski 			if (nLevel > 0) {
2092*b1cdbd2cSJim Jagielski 				ProcessString(XML_SEPARATION_CHARACTER, GetStringProperty(
2093*b1cdbd2cSJim Jagielski 					sPropertyNumberingSeparator, xPropSet));
2094*b1cdbd2cSJim Jagielski 			}
2095*b1cdbd2cSJim Jagielski 			ProcessString(XML_NAME, sVarName);
2096*b1cdbd2cSJim Jagielski 			ExportElement(XML_SEQUENCE_DECL, sal_True);
2097*b1cdbd2cSJim Jagielski 		}
2098*b1cdbd2cSJim Jagielski 	}
2099*b1cdbd2cSJim Jagielski 	// else: no declarations element
2100*b1cdbd2cSJim Jagielski 
2101*b1cdbd2cSJim Jagielski 	// user field field masters:
2102*b1cdbd2cSJim Jagielski 	if ( !aUserName.empty() )
2103*b1cdbd2cSJim Jagielski 	{
2104*b1cdbd2cSJim Jagielski 		SvXMLElementExport aElem( GetExport(),
2105*b1cdbd2cSJim Jagielski 								  XML_NAMESPACE_TEXT,
2106*b1cdbd2cSJim Jagielski 								  XML_USER_FIELD_DECLS,
2107*b1cdbd2cSJim Jagielski 								  sal_True, sal_True );
2108*b1cdbd2cSJim Jagielski 
2109*b1cdbd2cSJim Jagielski 		for (vector<OUString>::iterator aUserIter = aUserName.begin();
2110*b1cdbd2cSJim Jagielski 			 aUserIter != aUserName.end();
2111*b1cdbd2cSJim Jagielski 			 aUserIter++) {
2112*b1cdbd2cSJim Jagielski 
2113*b1cdbd2cSJim Jagielski 			OUString sName = *aUserIter;
2114*b1cdbd2cSJim Jagielski 
2115*b1cdbd2cSJim Jagielski 			// get field master property set
2116*b1cdbd2cSJim Jagielski 			Reference<XPropertySet> xPropSet;
2117*b1cdbd2cSJim Jagielski 			Any aAny = xFieldMasterNameAccess->getByName(sName);
2118*b1cdbd2cSJim Jagielski 			aAny >>= xPropSet;
2119*b1cdbd2cSJim Jagielski 
2120*b1cdbd2cSJim Jagielski 			// field name and type
2121*b1cdbd2cSJim Jagielski 			OUString sFieldMasterType;
2122*b1cdbd2cSJim Jagielski 			OUString sVarName;
2123*b1cdbd2cSJim Jagielski 			ExplodeFieldMasterName(sName, sFieldMasterType, sVarName);
2124*b1cdbd2cSJim Jagielski 
2125*b1cdbd2cSJim Jagielski 			if (GetBoolProperty(sPropertyIsExpression, xPropSet))
2126*b1cdbd2cSJim Jagielski 			{
2127*b1cdbd2cSJim Jagielski 				// expression:
2128*b1cdbd2cSJim Jagielski 				ProcessValueAndType(
2129*b1cdbd2cSJim Jagielski 					sal_False,
2130*b1cdbd2cSJim Jagielski 					0, sEmpty, sEmpty,
2131*b1cdbd2cSJim Jagielski 					GetDoubleProperty(sPropertyValue, xPropSet),
2132*b1cdbd2cSJim Jagielski 					sal_True,
2133*b1cdbd2cSJim Jagielski 					sal_True,
2134*b1cdbd2cSJim Jagielski 					sal_False,
2135*b1cdbd2cSJim Jagielski                     sal_False);
2136*b1cdbd2cSJim Jagielski 			}
2137*b1cdbd2cSJim Jagielski 			else
2138*b1cdbd2cSJim Jagielski 			{
2139*b1cdbd2cSJim Jagielski 				// string: write regardless of default
2140*b1cdbd2cSJim Jagielski 				ProcessString(XML_VALUE_TYPE, XML_STRING, sal_False,
2141*b1cdbd2cSJim Jagielski 							  XML_NAMESPACE_OFFICE);
2142*b1cdbd2cSJim Jagielski 				ProcessString(XML_STRING_VALUE,
2143*b1cdbd2cSJim Jagielski 							  GetStringProperty(sPropertyContent, xPropSet),
2144*b1cdbd2cSJim Jagielski 							  sal_False, XML_NAMESPACE_OFFICE );
2145*b1cdbd2cSJim Jagielski 			}
2146*b1cdbd2cSJim Jagielski 			ProcessString(XML_NAME, sVarName);
2147*b1cdbd2cSJim Jagielski 			ExportElement(XML_USER_FIELD_DECL, sal_True);
2148*b1cdbd2cSJim Jagielski 		}
2149*b1cdbd2cSJim Jagielski 	}
2150*b1cdbd2cSJim Jagielski 	// else: no declarations element
2151*b1cdbd2cSJim Jagielski 
2152*b1cdbd2cSJim Jagielski 	// DDE field field masters:
2153*b1cdbd2cSJim Jagielski 	if ( !aDdeName.empty() )
2154*b1cdbd2cSJim Jagielski 	{
2155*b1cdbd2cSJim Jagielski 		SvXMLElementExport aElem( GetExport(),
2156*b1cdbd2cSJim Jagielski 								  XML_NAMESPACE_TEXT,
2157*b1cdbd2cSJim Jagielski 								  XML_DDE_CONNECTION_DECLS,
2158*b1cdbd2cSJim Jagielski 								  sal_True, sal_True );
2159*b1cdbd2cSJim Jagielski 
2160*b1cdbd2cSJim Jagielski 		for (vector<OUString>::iterator aDdeIter = aDdeName.begin();
2161*b1cdbd2cSJim Jagielski 			 aDdeIter != aDdeName.end();
2162*b1cdbd2cSJim Jagielski 			 aDdeIter++)
2163*b1cdbd2cSJim Jagielski 		{
2164*b1cdbd2cSJim Jagielski 			OUString sName = *aDdeIter;
2165*b1cdbd2cSJim Jagielski 
2166*b1cdbd2cSJim Jagielski 			// get field master property set
2167*b1cdbd2cSJim Jagielski 			Reference<XPropertySet> xPropSet;
2168*b1cdbd2cSJim Jagielski 			Any aAny = xFieldMasterNameAccess->getByName(sName);
2169*b1cdbd2cSJim Jagielski 			aAny >>= xPropSet;
2170*b1cdbd2cSJim Jagielski 
2171*b1cdbd2cSJim Jagielski 			// check if this connection is being used by a field
2172*b1cdbd2cSJim Jagielski 			Reference<XPropertySet> xDummy;
2173*b1cdbd2cSJim Jagielski 			if (GetDependentFieldPropertySet(xPropSet, xDummy))
2174*b1cdbd2cSJim Jagielski 			{
2175*b1cdbd2cSJim Jagielski 
2176*b1cdbd2cSJim Jagielski 				ProcessString(XML_NAME,
2177*b1cdbd2cSJim Jagielski 							  GetStringProperty(sPropertyName, xPropSet),
2178*b1cdbd2cSJim Jagielski 							  sal_False, XML_NAMESPACE_OFFICE);
2179*b1cdbd2cSJim Jagielski 
2180*b1cdbd2cSJim Jagielski 				// export elements; can't use ProcessString because
2181*b1cdbd2cSJim Jagielski 				// elements are in office namespace
2182*b1cdbd2cSJim Jagielski 				ProcessString(XML_DDE_APPLICATION,
2183*b1cdbd2cSJim Jagielski 							  GetStringProperty(sPropertyDDECommandType,
2184*b1cdbd2cSJim Jagielski 												xPropSet),
2185*b1cdbd2cSJim Jagielski 							  sal_False, XML_NAMESPACE_OFFICE);
2186*b1cdbd2cSJim Jagielski 				ProcessString(XML_DDE_TOPIC,
2187*b1cdbd2cSJim Jagielski 							  GetStringProperty(sPropertyDDECommandFile,
2188*b1cdbd2cSJim Jagielski 												xPropSet),
2189*b1cdbd2cSJim Jagielski 							  sal_False, XML_NAMESPACE_OFFICE);
2190*b1cdbd2cSJim Jagielski 				ProcessString(XML_DDE_ITEM,
2191*b1cdbd2cSJim Jagielski 							  GetStringProperty(sPropertyDDECommandElement,
2192*b1cdbd2cSJim Jagielski 												xPropSet),
2193*b1cdbd2cSJim Jagielski 							  sal_False, XML_NAMESPACE_OFFICE);
2194*b1cdbd2cSJim Jagielski 				sal_Bool bIsAutomaticUpdate = GetBoolProperty(
2195*b1cdbd2cSJim Jagielski 					sPropertyIsAutomaticUpdate, xPropSet);
2196*b1cdbd2cSJim Jagielski 				if (bIsAutomaticUpdate)
2197*b1cdbd2cSJim Jagielski 				{
2198*b1cdbd2cSJim Jagielski 					GetExport().AddAttribute(XML_NAMESPACE_OFFICE,
2199*b1cdbd2cSJim Jagielski                                              XML_AUTOMATIC_UPDATE,
2200*b1cdbd2cSJim Jagielski                                              XML_TRUE);
2201*b1cdbd2cSJim Jagielski 				}
2202*b1cdbd2cSJim Jagielski 
2203*b1cdbd2cSJim Jagielski 				ExportElement(XML_DDE_CONNECTION_DECL, sal_True);
2204*b1cdbd2cSJim Jagielski 			}
2205*b1cdbd2cSJim Jagielski 			// else: no dependent field -> no export of field declaration
2206*b1cdbd2cSJim Jagielski 		}
2207*b1cdbd2cSJim Jagielski 	}
2208*b1cdbd2cSJim Jagielski 	// else: no declarations element
2209*b1cdbd2cSJim Jagielski }
2210*b1cdbd2cSJim Jagielski 
SetExportOnlyUsedFieldDeclarations(sal_Bool bExportOnlyUsed)2211*b1cdbd2cSJim Jagielski void XMLTextFieldExport::SetExportOnlyUsedFieldDeclarations(
2212*b1cdbd2cSJim Jagielski 	sal_Bool bExportOnlyUsed)
2213*b1cdbd2cSJim Jagielski {
2214*b1cdbd2cSJim Jagielski 	delete pUsedMasters;
2215*b1cdbd2cSJim Jagielski 	pUsedMasters = NULL;
2216*b1cdbd2cSJim Jagielski 
2217*b1cdbd2cSJim Jagielski 	// create used masters set (if none is used)
2218*b1cdbd2cSJim Jagielski 	if (bExportOnlyUsed)
2219*b1cdbd2cSJim Jagielski 		pUsedMasters = new map<Reference<XText>, set<OUString> > ;
2220*b1cdbd2cSJim Jagielski }
2221*b1cdbd2cSJim Jagielski 
ExportElement(enum XMLTokenEnum eElementName,sal_Bool bAddSpace)2222*b1cdbd2cSJim Jagielski void XMLTextFieldExport::ExportElement(enum XMLTokenEnum eElementName,
2223*b1cdbd2cSJim Jagielski 									   sal_Bool bAddSpace)
2224*b1cdbd2cSJim Jagielski {
2225*b1cdbd2cSJim Jagielski 	// can't call ExportElement(eElementName, const OUString&) with empty
2226*b1cdbd2cSJim Jagielski 	// string because xmlprinter only uses empty tags if no content
2227*b1cdbd2cSJim Jagielski 	// (not even empty content) was written.
2228*b1cdbd2cSJim Jagielski 
2229*b1cdbd2cSJim Jagielski 	DBG_ASSERT(XML_TOKEN_INVALID != eElementName, "invalid element name!");
2230*b1cdbd2cSJim Jagielski 	if (XML_TOKEN_INVALID != eElementName)
2231*b1cdbd2cSJim Jagielski 	{
2232*b1cdbd2cSJim Jagielski 		// Element
2233*b1cdbd2cSJim Jagielski 		SvXMLElementExport aElem( GetExport(), XML_NAMESPACE_TEXT,
2234*b1cdbd2cSJim Jagielski 								  eElementName, bAddSpace, bAddSpace );
2235*b1cdbd2cSJim Jagielski 	} // else: ignore
2236*b1cdbd2cSJim Jagielski }
2237*b1cdbd2cSJim Jagielski 
ExportElement(enum XMLTokenEnum eElementName,const OUString & sContent,sal_Bool bAddSpace)2238*b1cdbd2cSJim Jagielski void XMLTextFieldExport::ExportElement(enum XMLTokenEnum eElementName,
2239*b1cdbd2cSJim Jagielski 									   const OUString& sContent,
2240*b1cdbd2cSJim Jagielski 									   sal_Bool bAddSpace)
2241*b1cdbd2cSJim Jagielski {
2242*b1cdbd2cSJim Jagielski 	DBG_ASSERT(eElementName != XML_TOKEN_INVALID, "invalid element name!");
2243*b1cdbd2cSJim Jagielski 	if (eElementName != XML_TOKEN_INVALID)
2244*b1cdbd2cSJim Jagielski 	{
2245*b1cdbd2cSJim Jagielski 		// Element
2246*b1cdbd2cSJim Jagielski 		SvXMLElementExport aElem( GetExport(), XML_NAMESPACE_TEXT,
2247*b1cdbd2cSJim Jagielski 								  eElementName, bAddSpace, bAddSpace );
2248*b1cdbd2cSJim Jagielski 		// export content
2249*b1cdbd2cSJim Jagielski 		GetExport().Characters(sContent);
2250*b1cdbd2cSJim Jagielski 	} else {
2251*b1cdbd2cSJim Jagielski 		// always export content
2252*b1cdbd2cSJim Jagielski 		GetExport().Characters(sContent);
2253*b1cdbd2cSJim Jagielski 	}
2254*b1cdbd2cSJim Jagielski }
2255*b1cdbd2cSJim Jagielski 
ExportMacro(const Reference<XPropertySet> & rPropSet,const OUString & rContent)2256*b1cdbd2cSJim Jagielski void XMLTextFieldExport::ExportMacro(
2257*b1cdbd2cSJim Jagielski     const Reference<XPropertySet> & rPropSet,
2258*b1cdbd2cSJim Jagielski     const OUString& rContent )
2259*b1cdbd2cSJim Jagielski {
2260*b1cdbd2cSJim Jagielski     // some strings we'll need
2261*b1cdbd2cSJim Jagielski     OUString sEventType( RTL_CONSTASCII_USTRINGPARAM( "EventType" ));
2262*b1cdbd2cSJim Jagielski     OUString sStarBasic( RTL_CONSTASCII_USTRINGPARAM( "StarBasic" ));
2263*b1cdbd2cSJim Jagielski     OUString sScript( RTL_CONSTASCII_USTRINGPARAM( "Script" ));
2264*b1cdbd2cSJim Jagielski     OUString sLibrary( RTL_CONSTASCII_USTRINGPARAM( "Library" ));
2265*b1cdbd2cSJim Jagielski     OUString sMacroName( RTL_CONSTASCII_USTRINGPARAM( "MacroName" ));
2266*b1cdbd2cSJim Jagielski     OUString sOnClick( RTL_CONSTASCII_USTRINGPARAM( "OnClick" ));
2267*b1cdbd2cSJim Jagielski     OUString sPropertyMacroLibrary( RTL_CONSTASCII_USTRINGPARAM( "MacroLibrary" ));
2268*b1cdbd2cSJim Jagielski     OUString sPropertyMacroName( RTL_CONSTASCII_USTRINGPARAM( "MacroName" ));
2269*b1cdbd2cSJim Jagielski     OUString sPropertyScriptURL( RTL_CONSTASCII_USTRINGPARAM( "ScriptURL" ));
2270*b1cdbd2cSJim Jagielski 
2271*b1cdbd2cSJim Jagielski 
2272*b1cdbd2cSJim Jagielski     // the description attribute
2273*b1cdbd2cSJim Jagielski     ProcessString(XML_DESCRIPTION,
2274*b1cdbd2cSJim Jagielski                   GetStringProperty(sPropertyHint, rPropSet),
2275*b1cdbd2cSJim Jagielski                   rContent);
2276*b1cdbd2cSJim Jagielski 
2277*b1cdbd2cSJim Jagielski     // the element
2278*b1cdbd2cSJim Jagielski     SvXMLElementExport aElem( GetExport(), XML_NAMESPACE_TEXT,
2279*b1cdbd2cSJim Jagielski                               XML_EXECUTE_MACRO, sal_False, sal_False );
2280*b1cdbd2cSJim Jagielski 
2281*b1cdbd2cSJim Jagielski     // the <office:events>-macro:
2282*b1cdbd2cSJim Jagielski 
2283*b1cdbd2cSJim Jagielski     // 1) build sequence of PropertyValues
2284*b1cdbd2cSJim Jagielski     Sequence<PropertyValue> aSeq;
2285*b1cdbd2cSJim Jagielski     OUString sName;
2286*b1cdbd2cSJim Jagielski     rPropSet->getPropertyValue( sPropertyScriptURL ) >>= sName;
2287*b1cdbd2cSJim Jagielski 
2288*b1cdbd2cSJim Jagielski     // if the ScriptURL property is not empty then this is a Scripting
2289*b1cdbd2cSJim Jagielski     // Framework URL, otherwise treat it as a Basic Macro
2290*b1cdbd2cSJim Jagielski     if (sName.getLength() != 0)
2291*b1cdbd2cSJim Jagielski     {
2292*b1cdbd2cSJim Jagielski         aSeq = Sequence<PropertyValue> (2);
2293*b1cdbd2cSJim Jagielski         PropertyValue* pArr = aSeq.getArray();
2294*b1cdbd2cSJim Jagielski         pArr[0].Name = sEventType;
2295*b1cdbd2cSJim Jagielski         pArr[0].Value <<= sScript;
2296*b1cdbd2cSJim Jagielski         pArr[1].Name = sScript;
2297*b1cdbd2cSJim Jagielski         pArr[1].Value = rPropSet->getPropertyValue( sPropertyScriptURL );
2298*b1cdbd2cSJim Jagielski     }
2299*b1cdbd2cSJim Jagielski     else
2300*b1cdbd2cSJim Jagielski     {
2301*b1cdbd2cSJim Jagielski         aSeq = Sequence<PropertyValue> (3);
2302*b1cdbd2cSJim Jagielski         PropertyValue* pArr = aSeq.getArray();
2303*b1cdbd2cSJim Jagielski         pArr[0].Name = sEventType;
2304*b1cdbd2cSJim Jagielski         pArr[0].Value <<= sStarBasic;
2305*b1cdbd2cSJim Jagielski         pArr[1].Name = sLibrary;
2306*b1cdbd2cSJim Jagielski         pArr[1].Value = rPropSet->getPropertyValue( sPropertyMacroLibrary );
2307*b1cdbd2cSJim Jagielski         pArr[2].Name = sMacroName;
2308*b1cdbd2cSJim Jagielski         pArr[2].Value = rPropSet->getPropertyValue( sPropertyMacroName );
2309*b1cdbd2cSJim Jagielski     }
2310*b1cdbd2cSJim Jagielski 
2311*b1cdbd2cSJim Jagielski     // 2) export the sequence
2312*b1cdbd2cSJim Jagielski     GetExport().GetEventExport().ExportSingleEvent( aSeq, sOnClick, sal_False );
2313*b1cdbd2cSJim Jagielski 
2314*b1cdbd2cSJim Jagielski     // and finally, the field presentation
2315*b1cdbd2cSJim Jagielski     GetExport().Characters(rContent);
2316*b1cdbd2cSJim Jagielski }
2317*b1cdbd2cSJim Jagielski 
ExportMetaField(const Reference<XPropertySet> & i_xMeta,bool i_bAutoStyles,sal_Bool i_bProgress)2318*b1cdbd2cSJim Jagielski void XMLTextFieldExport::ExportMetaField(
2319*b1cdbd2cSJim Jagielski     const Reference<XPropertySet> & i_xMeta,
2320*b1cdbd2cSJim Jagielski     bool i_bAutoStyles, sal_Bool i_bProgress )
2321*b1cdbd2cSJim Jagielski {
2322*b1cdbd2cSJim Jagielski     bool doExport(!i_bAutoStyles); // do not export element if autostyles
2323*b1cdbd2cSJim Jagielski     // check version >= 1.2
2324*b1cdbd2cSJim Jagielski     switch (GetExport().getDefaultVersion()) {
2325*b1cdbd2cSJim Jagielski         case SvtSaveOptions::ODFVER_011: // fall thru
2326*b1cdbd2cSJim Jagielski         case SvtSaveOptions::ODFVER_010: doExport = false; break;
2327*b1cdbd2cSJim Jagielski         default: break;
2328*b1cdbd2cSJim Jagielski     }
2329*b1cdbd2cSJim Jagielski 
2330*b1cdbd2cSJim Jagielski     const Reference < XEnumerationAccess > xEA( i_xMeta, UNO_QUERY_THROW );
2331*b1cdbd2cSJim Jagielski     const Reference < XEnumeration > xTextEnum( xEA->createEnumeration() );
2332*b1cdbd2cSJim Jagielski 
2333*b1cdbd2cSJim Jagielski     if (doExport)
2334*b1cdbd2cSJim Jagielski     {
2335*b1cdbd2cSJim Jagielski         const Reference<rdf::XMetadatable> xMeta( i_xMeta, UNO_QUERY_THROW );
2336*b1cdbd2cSJim Jagielski 
2337*b1cdbd2cSJim Jagielski         // style:data-style-name
2338*b1cdbd2cSJim Jagielski         ProcessValueAndType(sal_False,
2339*b1cdbd2cSJim Jagielski             GetIntProperty(sPropertyNumberFormat, i_xMeta),
2340*b1cdbd2cSJim Jagielski             sEmpty, sEmpty, 0.0, sal_False, sal_False, sal_True,
2341*b1cdbd2cSJim Jagielski             sal_False, sal_False /*, sal_False*/ );
2342*b1cdbd2cSJim Jagielski 
2343*b1cdbd2cSJim Jagielski         // text:meta-field without xml:id is invalid
2344*b1cdbd2cSJim Jagielski         xMeta->ensureMetadataReference();
2345*b1cdbd2cSJim Jagielski 
2346*b1cdbd2cSJim Jagielski         // xml:id for RDF metadata
2347*b1cdbd2cSJim Jagielski         GetExport().AddAttributeXmlId(xMeta);
2348*b1cdbd2cSJim Jagielski     }
2349*b1cdbd2cSJim Jagielski 
2350*b1cdbd2cSJim Jagielski     SvXMLElementExport aElem( GetExport(), doExport,
2351*b1cdbd2cSJim Jagielski         XML_NAMESPACE_TEXT, XML_META_FIELD, sal_False, sal_False );
2352*b1cdbd2cSJim Jagielski 
2353*b1cdbd2cSJim Jagielski     // recurse to export content
2354*b1cdbd2cSJim Jagielski     GetExport().GetTextParagraphExport()->
2355*b1cdbd2cSJim Jagielski         exportTextRangeEnumeration( xTextEnum, i_bAutoStyles, i_bProgress );
2356*b1cdbd2cSJim Jagielski }
2357*b1cdbd2cSJim Jagielski 
2358*b1cdbd2cSJim Jagielski /// export all data-style related attributes
ProcessValueAndType(sal_Bool bIsString,sal_Int32 nFormatKey,const OUString & sContent,const OUString & sDefault,double fValue,sal_Bool bExportValue,sal_Bool bExportValueType,sal_Bool bExportStyle,sal_Bool bForceSystemLanguage,sal_Bool bTimeStyle)2359*b1cdbd2cSJim Jagielski void XMLTextFieldExport::ProcessValueAndType(
2360*b1cdbd2cSJim Jagielski 	sal_Bool bIsString,		/// do we process a string or a number?
2361*b1cdbd2cSJim Jagielski 	sal_Int32 nFormatKey,	/// format key for NumberFormatter; inv. if string
2362*b1cdbd2cSJim Jagielski 	const OUString& sContent,	/// string content; possibly invalid
2363*b1cdbd2cSJim Jagielski 	const OUString& sDefault,	/// default string
2364*b1cdbd2cSJim Jagielski 	double fValue,			/// float content; possibly invalid
2365*b1cdbd2cSJim Jagielski 	sal_Bool bExportValue,	/// export value attribute?
2366*b1cdbd2cSJim Jagielski 	sal_Bool bExportValueType,	/// export value-type attribute?
2367*b1cdbd2cSJim Jagielski 	sal_Bool bExportStyle,	/// export style-sttribute?
2368*b1cdbd2cSJim Jagielski     sal_Bool bForceSystemLanguage, /// export language attributes?
2369*b1cdbd2cSJim Jagielski 	sal_Bool bTimeStyle)	// exporting a time style?
2370*b1cdbd2cSJim Jagielski {
2371*b1cdbd2cSJim Jagielski 	// String or number?
2372*b1cdbd2cSJim Jagielski 	if (bIsString)
2373*b1cdbd2cSJim Jagielski 	{
2374*b1cdbd2cSJim Jagielski 
2375*b1cdbd2cSJim Jagielski 		// string: attributes value-type=string, string-value=...
2376*b1cdbd2cSJim Jagielski 
2377*b1cdbd2cSJim Jagielski 		if (bExportValue || bExportValueType)
2378*b1cdbd2cSJim Jagielski 		{
2379*b1cdbd2cSJim Jagielski 			XMLNumberFormatAttributesExportHelper::SetNumberFormatAttributes(
2380*b1cdbd2cSJim Jagielski 				GetExport(), sContent, sDefault, bExportValue);
2381*b1cdbd2cSJim Jagielski 		}
2382*b1cdbd2cSJim Jagielski 
2383*b1cdbd2cSJim Jagielski 	}
2384*b1cdbd2cSJim Jagielski 	else
2385*b1cdbd2cSJim Jagielski 	{
2386*b1cdbd2cSJim Jagielski 
2387*b1cdbd2cSJim Jagielski 		// number: value-type=..., value...=..., data-style-name=...
2388*b1cdbd2cSJim Jagielski 
2389*b1cdbd2cSJim Jagielski 		DBG_ASSERT(bExportValueType || !bExportValue, "value w/o value type not supported!");
2390*b1cdbd2cSJim Jagielski 
2391*b1cdbd2cSJim Jagielski 		// take care of illegal formats
2392*b1cdbd2cSJim Jagielski 		// (shouldn't happen, but does if document is corrupted)
2393*b1cdbd2cSJim Jagielski 		if (-1 != nFormatKey)
2394*b1cdbd2cSJim Jagielski 		{
2395*b1cdbd2cSJim Jagielski 			if (bExportValue || bExportValueType)
2396*b1cdbd2cSJim Jagielski 			{
2397*b1cdbd2cSJim Jagielski 				XMLNumberFormatAttributesExportHelper::
2398*b1cdbd2cSJim Jagielski 					SetNumberFormatAttributes(
2399*b1cdbd2cSJim Jagielski 						GetExport(), nFormatKey, fValue, bExportValue);
2400*b1cdbd2cSJim Jagielski 			}
2401*b1cdbd2cSJim Jagielski 
2402*b1cdbd2cSJim Jagielski 			if (bExportStyle)
2403*b1cdbd2cSJim Jagielski 			{
2404*b1cdbd2cSJim Jagielski                 // don't export language (if desired)
2405*b1cdbd2cSJim Jagielski                 if( bForceSystemLanguage )
2406*b1cdbd2cSJim Jagielski                     nFormatKey =
2407*b1cdbd2cSJim Jagielski                         GetExport().dataStyleForceSystemLanguage( nFormatKey );
2408*b1cdbd2cSJim Jagielski 
2409*b1cdbd2cSJim Jagielski                 OUString sDataStyleName =
2410*b1cdbd2cSJim Jagielski                     GetExport().getDataStyleName(nFormatKey, bTimeStyle);
2411*b1cdbd2cSJim Jagielski                 if( sDataStyleName.getLength() > 0 )
2412*b1cdbd2cSJim Jagielski                 {
2413*b1cdbd2cSJim Jagielski                     GetExport().AddAttribute( XML_NAMESPACE_STYLE,
2414*b1cdbd2cSJim Jagielski                                               XML_DATA_STYLE_NAME,
2415*b1cdbd2cSJim Jagielski 						  					  sDataStyleName );
2416*b1cdbd2cSJim Jagielski                 } // else: ignore (no valid number format)
2417*b1cdbd2cSJim Jagielski 			}  // else: ignore (no number format)
2418*b1cdbd2cSJim Jagielski 		}
2419*b1cdbd2cSJim Jagielski 	}
2420*b1cdbd2cSJim Jagielski }
2421*b1cdbd2cSJim Jagielski 
2422*b1cdbd2cSJim Jagielski 
2423*b1cdbd2cSJim Jagielski 
2424*b1cdbd2cSJim Jagielski /// process display related properties
ProcessDisplay(sal_Bool bIsVisible,sal_Bool bIsCommand,sal_Bool bValueDefault)2425*b1cdbd2cSJim Jagielski void XMLTextFieldExport::ProcessDisplay(sal_Bool bIsVisible,
2426*b1cdbd2cSJim Jagielski 										sal_Bool bIsCommand,
2427*b1cdbd2cSJim Jagielski 										sal_Bool bValueDefault)
2428*b1cdbd2cSJim Jagielski {
2429*b1cdbd2cSJim Jagielski 	enum XMLTokenEnum eValue;
2430*b1cdbd2cSJim Jagielski 
2431*b1cdbd2cSJim Jagielski 	if (bIsVisible)
2432*b1cdbd2cSJim Jagielski 	{
2433*b1cdbd2cSJim Jagielski 		eValue = bIsCommand ? XML_FORMULA : XML_VALUE;
2434*b1cdbd2cSJim Jagielski 	}
2435*b1cdbd2cSJim Jagielski 	else
2436*b1cdbd2cSJim Jagielski 	{
2437*b1cdbd2cSJim Jagielski 		eValue = XML_NONE;
2438*b1cdbd2cSJim Jagielski 	}
2439*b1cdbd2cSJim Jagielski 
2440*b1cdbd2cSJim Jagielski 	// omit attribute if default
2441*b1cdbd2cSJim Jagielski 	if (!bValueDefault || (eValue != XML_VALUE))
2442*b1cdbd2cSJim Jagielski 	{
2443*b1cdbd2cSJim Jagielski 		GetExport().AddAttribute(XML_NAMESPACE_TEXT, XML_DISPLAY, eValue);
2444*b1cdbd2cSJim Jagielski 	}
2445*b1cdbd2cSJim Jagielski }
2446*b1cdbd2cSJim Jagielski 
2447*b1cdbd2cSJim Jagielski 
2448*b1cdbd2cSJim Jagielski 
2449*b1cdbd2cSJim Jagielski /// export boolean property
ProcessBoolean(enum XMLTokenEnum eName,sal_Bool bBool,sal_Bool bDefault)2450*b1cdbd2cSJim Jagielski void XMLTextFieldExport::ProcessBoolean(enum XMLTokenEnum eName,
2451*b1cdbd2cSJim Jagielski 										sal_Bool bBool, sal_Bool bDefault)
2452*b1cdbd2cSJim Jagielski {
2453*b1cdbd2cSJim Jagielski 	DBG_ASSERT( eName != XML_TOKEN_INVALID, "invalid element token");
2454*b1cdbd2cSJim Jagielski 	if ( XML_TOKEN_INVALID == eName )
2455*b1cdbd2cSJim Jagielski 		return;
2456*b1cdbd2cSJim Jagielski 
2457*b1cdbd2cSJim Jagielski 	// write attribute (if different than default)
2458*b1cdbd2cSJim Jagielski 	// negate to force 0/1 values (and make sal_Bool comparable)
2459*b1cdbd2cSJim Jagielski 	if ((!bBool) != (!bDefault)) {
2460*b1cdbd2cSJim Jagielski 		GetExport().AddAttribute(XML_NAMESPACE_TEXT, eName,
2461*b1cdbd2cSJim Jagielski                                  (bBool ? XML_TRUE : XML_FALSE) );
2462*b1cdbd2cSJim Jagielski 	}
2463*b1cdbd2cSJim Jagielski }
2464*b1cdbd2cSJim Jagielski 
2465*b1cdbd2cSJim Jagielski 
2466*b1cdbd2cSJim Jagielski 
2467*b1cdbd2cSJim Jagielski 
2468*b1cdbd2cSJim Jagielski /// export string attribute
ProcessString(enum XMLTokenEnum eName,const OUString & sValue,sal_Bool bOmitEmpty,sal_uInt16 nPrefix)2469*b1cdbd2cSJim Jagielski void XMLTextFieldExport::ProcessString(enum XMLTokenEnum eName,
2470*b1cdbd2cSJim Jagielski 									   const OUString& sValue,
2471*b1cdbd2cSJim Jagielski 									   sal_Bool bOmitEmpty,
2472*b1cdbd2cSJim Jagielski 									   sal_uInt16 nPrefix)
2473*b1cdbd2cSJim Jagielski {
2474*b1cdbd2cSJim Jagielski 	DBG_ASSERT( eName != XML_TOKEN_INVALID, "invalid element token");
2475*b1cdbd2cSJim Jagielski 	if ( XML_TOKEN_INVALID == eName )
2476*b1cdbd2cSJim Jagielski 		return;
2477*b1cdbd2cSJim Jagielski 
2478*b1cdbd2cSJim Jagielski 	// check for empty string, if applicable
2479*b1cdbd2cSJim Jagielski 	if ( bOmitEmpty && (sValue.getLength()==0) )
2480*b1cdbd2cSJim Jagielski 		return;
2481*b1cdbd2cSJim Jagielski 
2482*b1cdbd2cSJim Jagielski 	// write attribute
2483*b1cdbd2cSJim Jagielski 	GetExport().AddAttribute(nPrefix, eName, sValue);
2484*b1cdbd2cSJim Jagielski }
2485*b1cdbd2cSJim Jagielski 
ProcessString(enum XMLTokenEnum eName,sal_uInt16 nValuePrefix,const OUString & sValue,sal_Bool bOmitEmpty,sal_uInt16 nPrefix)2486*b1cdbd2cSJim Jagielski void XMLTextFieldExport::ProcessString(enum XMLTokenEnum eName,
2487*b1cdbd2cSJim Jagielski 									   sal_uInt16 nValuePrefix,
2488*b1cdbd2cSJim Jagielski 									   const OUString& sValue,
2489*b1cdbd2cSJim Jagielski 									   sal_Bool bOmitEmpty,
2490*b1cdbd2cSJim Jagielski 									   sal_uInt16 nPrefix)
2491*b1cdbd2cSJim Jagielski {
2492*b1cdbd2cSJim Jagielski 	OUString sQValue =
2493*b1cdbd2cSJim Jagielski 		GetExport().GetNamespaceMap().GetQNameByKey( nValuePrefix, sValue, sal_False );
2494*b1cdbd2cSJim Jagielski 	ProcessString( eName, sQValue, bOmitEmpty, nPrefix );
2495*b1cdbd2cSJim Jagielski }
2496*b1cdbd2cSJim Jagielski 
2497*b1cdbd2cSJim Jagielski /// export a string attribute
ProcessString(enum XMLTokenEnum eName,const::rtl::OUString & sValue,const::rtl::OUString & sDefault,sal_uInt16 nPrefix)2498*b1cdbd2cSJim Jagielski void XMLTextFieldExport::ProcessString(enum XMLTokenEnum eName,
2499*b1cdbd2cSJim Jagielski 									   const ::rtl::OUString& sValue,
2500*b1cdbd2cSJim Jagielski 									   const ::rtl::OUString& sDefault,
2501*b1cdbd2cSJim Jagielski 									   sal_uInt16 nPrefix)
2502*b1cdbd2cSJim Jagielski {
2503*b1cdbd2cSJim Jagielski 	if (sValue != sDefault)
2504*b1cdbd2cSJim Jagielski 	{
2505*b1cdbd2cSJim Jagielski 		ProcessString(eName, sValue, sal_False, nPrefix);
2506*b1cdbd2cSJim Jagielski 	}
2507*b1cdbd2cSJim Jagielski }
2508*b1cdbd2cSJim Jagielski 
2509*b1cdbd2cSJim Jagielski /// export a string attribute
ProcessString(enum XMLTokenEnum eName,sal_uInt16 nValuePrefix,const::rtl::OUString & sValue,const::rtl::OUString & sDefault,sal_uInt16 nPrefix)2510*b1cdbd2cSJim Jagielski void XMLTextFieldExport::ProcessString(enum XMLTokenEnum eName,
2511*b1cdbd2cSJim Jagielski 									   sal_uInt16 nValuePrefix,
2512*b1cdbd2cSJim Jagielski 									   const ::rtl::OUString& sValue,
2513*b1cdbd2cSJim Jagielski 									   const ::rtl::OUString& sDefault,
2514*b1cdbd2cSJim Jagielski 									   sal_uInt16 nPrefix)
2515*b1cdbd2cSJim Jagielski {
2516*b1cdbd2cSJim Jagielski 	if (sValue != sDefault)
2517*b1cdbd2cSJim Jagielski 	{
2518*b1cdbd2cSJim Jagielski 		ProcessString(eName, nValuePrefix, sValue, sal_False, nPrefix);
2519*b1cdbd2cSJim Jagielski 	}
2520*b1cdbd2cSJim Jagielski }
2521*b1cdbd2cSJim Jagielski 
2522*b1cdbd2cSJim Jagielski 
2523*b1cdbd2cSJim Jagielski /// export string attribute
ProcessString(enum XMLTokenEnum eName,enum XMLTokenEnum eValue,sal_Bool bOmitEmpty,sal_uInt16 nPrefix)2524*b1cdbd2cSJim Jagielski void XMLTextFieldExport::ProcessString(
2525*b1cdbd2cSJim Jagielski     enum XMLTokenEnum eName,
2526*b1cdbd2cSJim Jagielski     enum XMLTokenEnum eValue,
2527*b1cdbd2cSJim Jagielski 	sal_Bool bOmitEmpty,
2528*b1cdbd2cSJim Jagielski 	sal_uInt16 nPrefix)
2529*b1cdbd2cSJim Jagielski {
2530*b1cdbd2cSJim Jagielski 	DBG_ASSERT( eName != XML_TOKEN_INVALID, "invalid element token" );
2531*b1cdbd2cSJim Jagielski     DBG_ASSERT( bOmitEmpty || (eValue != XML_TOKEN_INVALID),
2532*b1cdbd2cSJim Jagielski                 "invalid value token" );
2533*b1cdbd2cSJim Jagielski 	if ( XML_TOKEN_INVALID == eName )
2534*b1cdbd2cSJim Jagielski 		return;
2535*b1cdbd2cSJim Jagielski 
2536*b1cdbd2cSJim Jagielski 	// check for empty string, if applicable
2537*b1cdbd2cSJim Jagielski 	if (bOmitEmpty && (eValue == XML_TOKEN_INVALID))
2538*b1cdbd2cSJim Jagielski 		return;
2539*b1cdbd2cSJim Jagielski 
2540*b1cdbd2cSJim Jagielski 	GetExport().AddAttribute(nPrefix, eName, eValue);
2541*b1cdbd2cSJim Jagielski }
2542*b1cdbd2cSJim Jagielski 
2543*b1cdbd2cSJim Jagielski /// export a string attribute
ProcessString(enum XMLTokenEnum eName,enum XMLTokenEnum eValue,enum XMLTokenEnum eDefault,sal_uInt16 nPrefix)2544*b1cdbd2cSJim Jagielski void XMLTextFieldExport::ProcessString(
2545*b1cdbd2cSJim Jagielski     enum XMLTokenEnum eName,
2546*b1cdbd2cSJim Jagielski     enum XMLTokenEnum eValue,
2547*b1cdbd2cSJim Jagielski     enum XMLTokenEnum eDefault,
2548*b1cdbd2cSJim Jagielski 	sal_uInt16 nPrefix)
2549*b1cdbd2cSJim Jagielski {
2550*b1cdbd2cSJim Jagielski     if ( eValue != eDefault )
2551*b1cdbd2cSJim Jagielski 		ProcessString( eName, eValue, sal_False, nPrefix);
2552*b1cdbd2cSJim Jagielski }
2553*b1cdbd2cSJim Jagielski 
2554*b1cdbd2cSJim Jagielski 
2555*b1cdbd2cSJim Jagielski /// export a string as a sequence of paragraphs
ProcessParagraphSequence(const::rtl::OUString & sParagraphSequence)2556*b1cdbd2cSJim Jagielski void XMLTextFieldExport::ProcessParagraphSequence(
2557*b1cdbd2cSJim Jagielski 	const ::rtl::OUString& sParagraphSequence)
2558*b1cdbd2cSJim Jagielski {
2559*b1cdbd2cSJim Jagielski 	// iterate over all string-pieces separated by return (0x0a) and
2560*b1cdbd2cSJim Jagielski 	// put each inside a paragraph element.
2561*b1cdbd2cSJim Jagielski 	SvXMLTokenEnumerator aEnumerator(sParagraphSequence, sal_Char(0x0a));
2562*b1cdbd2cSJim Jagielski 	OUString aSubString;
2563*b1cdbd2cSJim Jagielski 	while (aEnumerator.getNextToken(aSubString))
2564*b1cdbd2cSJim Jagielski 	{
2565*b1cdbd2cSJim Jagielski 		SvXMLElementExport aParagraph(
2566*b1cdbd2cSJim Jagielski 			GetExport(), XML_NAMESPACE_TEXT, XML_P, sal_True, sal_False);
2567*b1cdbd2cSJim Jagielski 		GetExport().Characters(aSubString);
2568*b1cdbd2cSJim Jagielski 	}
2569*b1cdbd2cSJim Jagielski }
2570*b1cdbd2cSJim Jagielski 
2571*b1cdbd2cSJim Jagielski // export an integer attribute
ProcessInteger(enum XMLTokenEnum eName,sal_Int32 nNum)2572*b1cdbd2cSJim Jagielski void XMLTextFieldExport::ProcessInteger(enum XMLTokenEnum eName,
2573*b1cdbd2cSJim Jagielski 										sal_Int32 nNum)
2574*b1cdbd2cSJim Jagielski {
2575*b1cdbd2cSJim Jagielski 	DBG_ASSERT( eName != XML_TOKEN_INVALID, "invalid element token");
2576*b1cdbd2cSJim Jagielski 	if ( XML_TOKEN_INVALID == eName )
2577*b1cdbd2cSJim Jagielski 		return;
2578*b1cdbd2cSJim Jagielski 
2579*b1cdbd2cSJim Jagielski 	GetExport().AddAttribute(XML_NAMESPACE_TEXT, eName,
2580*b1cdbd2cSJim Jagielski 							 OUString::valueOf(nNum));
2581*b1cdbd2cSJim Jagielski }
2582*b1cdbd2cSJim Jagielski 
2583*b1cdbd2cSJim Jagielski /// export an integer attribute, omit if default
ProcessIntegerDef(enum XMLTokenEnum eName,sal_Int32 nNum,sal_Int32 nDefault)2584*b1cdbd2cSJim Jagielski void XMLTextFieldExport::ProcessIntegerDef(enum XMLTokenEnum eName,
2585*b1cdbd2cSJim Jagielski 										sal_Int32 nNum, sal_Int32 nDefault)
2586*b1cdbd2cSJim Jagielski {
2587*b1cdbd2cSJim Jagielski 	if (nNum != nDefault)
2588*b1cdbd2cSJim Jagielski 		ProcessInteger(eName, nNum);
2589*b1cdbd2cSJim Jagielski }
2590*b1cdbd2cSJim Jagielski 
2591*b1cdbd2cSJim Jagielski 
2592*b1cdbd2cSJim Jagielski 
2593*b1cdbd2cSJim Jagielski /// export a numbering type
ProcessNumberingType(sal_Int16 nNumberingType)2594*b1cdbd2cSJim Jagielski void XMLTextFieldExport::ProcessNumberingType(sal_Int16 nNumberingType)
2595*b1cdbd2cSJim Jagielski {
2596*b1cdbd2cSJim Jagielski 	// process only if real format (not: like page descriptor)
2597*b1cdbd2cSJim Jagielski 	if (NumberingType::PAGE_DESCRIPTOR != nNumberingType)
2598*b1cdbd2cSJim Jagielski 	{
2599*b1cdbd2cSJim Jagielski 		OUStringBuffer sTmp( 10 );
2600*b1cdbd2cSJim Jagielski 		// number type: num format
2601*b1cdbd2cSJim Jagielski 		GetExport().GetMM100UnitConverter().convertNumFormat( sTmp,
2602*b1cdbd2cSJim Jagielski 															  nNumberingType );
2603*b1cdbd2cSJim Jagielski 		GetExport().AddAttribute(XML_NAMESPACE_STYLE, XML_NUM_FORMAT,
2604*b1cdbd2cSJim Jagielski 									  sTmp.makeStringAndClear() );
2605*b1cdbd2cSJim Jagielski 		// and letter sync, if applicable
2606*b1cdbd2cSJim Jagielski 		GetExport().GetMM100UnitConverter().convertNumLetterSync( sTmp,
2607*b1cdbd2cSJim Jagielski 															  nNumberingType );
2608*b1cdbd2cSJim Jagielski 
2609*b1cdbd2cSJim Jagielski 		if (sTmp.getLength())
2610*b1cdbd2cSJim Jagielski 		{
2611*b1cdbd2cSJim Jagielski 			GetExport().AddAttribute(XML_NAMESPACE_STYLE, XML_NUM_LETTER_SYNC,
2612*b1cdbd2cSJim Jagielski                                      sTmp.makeStringAndClear() );
2613*b1cdbd2cSJim Jagielski 		}
2614*b1cdbd2cSJim Jagielski 	}
2615*b1cdbd2cSJim Jagielski 	// else: like page descriptor => ignore
2616*b1cdbd2cSJim Jagielski }
2617*b1cdbd2cSJim Jagielski 
2618*b1cdbd2cSJim Jagielski 
2619*b1cdbd2cSJim Jagielski /// export a date, time, or duration
ProcessDateTime(enum XMLTokenEnum eName,double dValue,sal_Bool bIsDate,sal_Bool bIsDuration,sal_Bool bOmitDurationIfZero,sal_uInt16 nPrefix)2620*b1cdbd2cSJim Jagielski void XMLTextFieldExport::ProcessDateTime(enum XMLTokenEnum eName,
2621*b1cdbd2cSJim Jagielski 										 double dValue,
2622*b1cdbd2cSJim Jagielski 										 sal_Bool bIsDate,
2623*b1cdbd2cSJim Jagielski 										 sal_Bool bIsDuration,
2624*b1cdbd2cSJim Jagielski 										 sal_Bool bOmitDurationIfZero,
2625*b1cdbd2cSJim Jagielski 										 sal_uInt16 nPrefix)
2626*b1cdbd2cSJim Jagielski {
2627*b1cdbd2cSJim Jagielski 	// truncate for date granularity
2628*b1cdbd2cSJim Jagielski 	if (bIsDate)
2629*b1cdbd2cSJim Jagielski 	{
2630*b1cdbd2cSJim Jagielski 		dValue = ::rtl::math::approxFloor(dValue);
2631*b1cdbd2cSJim Jagielski 	}
2632*b1cdbd2cSJim Jagielski 
2633*b1cdbd2cSJim Jagielski 	OUStringBuffer aBuffer;
2634*b1cdbd2cSJim Jagielski 	if (bIsDuration)
2635*b1cdbd2cSJim Jagielski 	{
2636*b1cdbd2cSJim Jagielski 		// date/time durationM handle bOmitDurationIfZero
2637*b1cdbd2cSJim Jagielski 		if (!bOmitDurationIfZero || !::rtl::math::approxEqual(dValue, 0.0))
2638*b1cdbd2cSJim Jagielski 		{
2639*b1cdbd2cSJim Jagielski 			rExport.GetMM100UnitConverter().convertTime(aBuffer, dValue);
2640*b1cdbd2cSJim Jagielski 		}
2641*b1cdbd2cSJim Jagielski 	}
2642*b1cdbd2cSJim Jagielski 	else
2643*b1cdbd2cSJim Jagielski 	{
2644*b1cdbd2cSJim Jagielski 		// date/time value
2645*b1cdbd2cSJim Jagielski 		rExport.GetMM100UnitConverter().convertDateTime(aBuffer, dValue);
2646*b1cdbd2cSJim Jagielski 	}
2647*b1cdbd2cSJim Jagielski 
2648*b1cdbd2cSJim Jagielski 	// output attribute
2649*b1cdbd2cSJim Jagielski 	ProcessString(eName, aBuffer.makeStringAndClear(), sal_True, nPrefix);
2650*b1cdbd2cSJim Jagielski }
2651*b1cdbd2cSJim Jagielski 
2652*b1cdbd2cSJim Jagielski /// export a date or time
ProcessDateTime(enum XMLTokenEnum eName,const DateTime & rTime,sal_Bool bIsDate,sal_uInt16 nPrefix)2653*b1cdbd2cSJim Jagielski void XMLTextFieldExport::ProcessDateTime(enum XMLTokenEnum eName,
2654*b1cdbd2cSJim Jagielski 										 const DateTime& rTime,
2655*b1cdbd2cSJim Jagielski 										 sal_Bool bIsDate,
2656*b1cdbd2cSJim Jagielski 										 sal_uInt16 nPrefix)
2657*b1cdbd2cSJim Jagielski {
2658*b1cdbd2cSJim Jagielski 	OUStringBuffer aBuffer;
2659*b1cdbd2cSJim Jagielski 
2660*b1cdbd2cSJim Jagielski 	DateTime aDateTime(rTime);
2661*b1cdbd2cSJim Jagielski 
2662*b1cdbd2cSJim Jagielski 	// truncate dates
2663*b1cdbd2cSJim Jagielski 	if(bIsDate)
2664*b1cdbd2cSJim Jagielski 	{
2665*b1cdbd2cSJim Jagielski 		aDateTime.HundredthSeconds = 0;
2666*b1cdbd2cSJim Jagielski 		aDateTime.Seconds = 0;
2667*b1cdbd2cSJim Jagielski 		aDateTime.Minutes = 0;
2668*b1cdbd2cSJim Jagielski 		aDateTime.Hours = 0;
2669*b1cdbd2cSJim Jagielski 	}
2670*b1cdbd2cSJim Jagielski 
2671*b1cdbd2cSJim Jagielski 	// date/time value
2672*b1cdbd2cSJim Jagielski 	rExport.GetMM100UnitConverter().convertDateTime(aBuffer, aDateTime);
2673*b1cdbd2cSJim Jagielski 
2674*b1cdbd2cSJim Jagielski 	// output attribute
2675*b1cdbd2cSJim Jagielski 	ProcessString(eName, aBuffer.makeStringAndClear(), sal_True, nPrefix);
2676*b1cdbd2cSJim Jagielski }
2677*b1cdbd2cSJim Jagielski 
2678*b1cdbd2cSJim Jagielski /// export date according to ISO 8601
ProcessDate(enum XMLTokenEnum eName,const::com::sun::star::util::Date & rDate,sal_uInt16 nPrefix)2679*b1cdbd2cSJim Jagielski void XMLTextFieldExport::ProcessDate(
2680*b1cdbd2cSJim Jagielski     enum XMLTokenEnum eName,
2681*b1cdbd2cSJim Jagielski 	const ::com::sun::star::util::Date& rDate,
2682*b1cdbd2cSJim Jagielski 	sal_uInt16 nPrefix)
2683*b1cdbd2cSJim Jagielski {
2684*b1cdbd2cSJim Jagielski 	// the easiest way: delegate to ProcessDateTime (as date)
2685*b1cdbd2cSJim Jagielski 	DateTime aDateTime;
2686*b1cdbd2cSJim Jagielski 	aDateTime.Day = rDate.Day;
2687*b1cdbd2cSJim Jagielski 	aDateTime.Month = rDate.Month;
2688*b1cdbd2cSJim Jagielski 	aDateTime.Year = rDate.Year;
2689*b1cdbd2cSJim Jagielski 	ProcessDateTime(eName, aDateTime, sal_True, nPrefix);
2690*b1cdbd2cSJim Jagielski }
2691*b1cdbd2cSJim Jagielski 
2692*b1cdbd2cSJim Jagielski 
2693*b1cdbd2cSJim Jagielski /// export a date, time, or duration
ProcessDateTime(enum XMLTokenEnum eName,sal_Int32 nMinutes,sal_Bool bIsDate,sal_Bool bIsDuration,sal_Bool bOmitDurationIfZero,sal_uInt16 nPrefix)2694*b1cdbd2cSJim Jagielski void XMLTextFieldExport::ProcessDateTime(enum XMLTokenEnum eName,
2695*b1cdbd2cSJim Jagielski 										 sal_Int32 nMinutes,
2696*b1cdbd2cSJim Jagielski 										 sal_Bool bIsDate,
2697*b1cdbd2cSJim Jagielski 										 sal_Bool bIsDuration,
2698*b1cdbd2cSJim Jagielski 										 sal_Bool bOmitDurationIfZero,
2699*b1cdbd2cSJim Jagielski 										 sal_uInt16 nPrefix)
2700*b1cdbd2cSJim Jagielski {
2701*b1cdbd2cSJim Jagielski 	// handle bOmitDurationIfZero here, because we can precisely compare ints
2702*b1cdbd2cSJim Jagielski 	if (!(bIsDuration && bOmitDurationIfZero && (nMinutes==0)))
2703*b1cdbd2cSJim Jagielski 	{
2704*b1cdbd2cSJim Jagielski 		ProcessDateTime(eName, (double)nMinutes / (double)(24*60),
2705*b1cdbd2cSJim Jagielski 						bIsDate, bIsDuration, bOmitDurationIfZero, nPrefix);
2706*b1cdbd2cSJim Jagielski 	}
2707*b1cdbd2cSJim Jagielski }
2708*b1cdbd2cSJim Jagielski 
2709*b1cdbd2cSJim Jagielski 
2710*b1cdbd2cSJim Jagielski SvXMLEnumMapEntry __READONLY_DATA aBibliographyDataTypeMap[] =
2711*b1cdbd2cSJim Jagielski {
2712*b1cdbd2cSJim Jagielski 	{ XML_ARTICLE,			BibliographyDataType::ARTICLE },
2713*b1cdbd2cSJim Jagielski 	{ XML_BOOK,			    BibliographyDataType::BOOK },
2714*b1cdbd2cSJim Jagielski 	{ XML_BOOKLET,			BibliographyDataType::BOOKLET },
2715*b1cdbd2cSJim Jagielski 	{ XML_CONFERENCE,		BibliographyDataType::CONFERENCE },
2716*b1cdbd2cSJim Jagielski 	{ XML_CUSTOM1,			BibliographyDataType::CUSTOM1 },
2717*b1cdbd2cSJim Jagielski 	{ XML_CUSTOM2,			BibliographyDataType::CUSTOM2 },
2718*b1cdbd2cSJim Jagielski 	{ XML_CUSTOM3,			BibliographyDataType::CUSTOM3 },
2719*b1cdbd2cSJim Jagielski 	{ XML_CUSTOM4,			BibliographyDataType::CUSTOM4 },
2720*b1cdbd2cSJim Jagielski 	{ XML_CUSTOM5,			BibliographyDataType::CUSTOM5 },
2721*b1cdbd2cSJim Jagielski 	{ XML_EMAIL,			BibliographyDataType::EMAIL },
2722*b1cdbd2cSJim Jagielski 	{ XML_INBOOK,			BibliographyDataType::INBOOK },
2723*b1cdbd2cSJim Jagielski 	{ XML_INCOLLECTION,	    BibliographyDataType::INCOLLECTION },
2724*b1cdbd2cSJim Jagielski 	{ XML_INPROCEEDINGS,	BibliographyDataType::INPROCEEDINGS },
2725*b1cdbd2cSJim Jagielski 	{ XML_JOURNAL,			BibliographyDataType::JOURNAL },
2726*b1cdbd2cSJim Jagielski 	{ XML_MANUAL,			BibliographyDataType::MANUAL },
2727*b1cdbd2cSJim Jagielski 	{ XML_MASTERSTHESIS,	BibliographyDataType::MASTERSTHESIS },
2728*b1cdbd2cSJim Jagielski 	{ XML_MISC,			    BibliographyDataType::MISC },
2729*b1cdbd2cSJim Jagielski 	{ XML_PHDTHESIS,		BibliographyDataType::PHDTHESIS },
2730*b1cdbd2cSJim Jagielski 	{ XML_PROCEEDINGS,		BibliographyDataType::PROCEEDINGS },
2731*b1cdbd2cSJim Jagielski 	{ XML_TECHREPORT,		BibliographyDataType::TECHREPORT },
2732*b1cdbd2cSJim Jagielski 	{ XML_UNPUBLISHED,		BibliographyDataType::UNPUBLISHED },
2733*b1cdbd2cSJim Jagielski 	{ XML_WWW,				BibliographyDataType::WWW },
2734*b1cdbd2cSJim Jagielski 	{ XML_TOKEN_INVALID, 0 }
2735*b1cdbd2cSJim Jagielski };
2736*b1cdbd2cSJim Jagielski 
2737*b1cdbd2cSJim Jagielski 
2738*b1cdbd2cSJim Jagielski 
ProcessBibliographyData(const Reference<XPropertySet> & rPropSet)2739*b1cdbd2cSJim Jagielski void XMLTextFieldExport::ProcessBibliographyData(
2740*b1cdbd2cSJim Jagielski 	const Reference<XPropertySet>& rPropSet)
2741*b1cdbd2cSJim Jagielski {
2742*b1cdbd2cSJim Jagielski 	// get the values
2743*b1cdbd2cSJim Jagielski 	Any aAny = rPropSet->getPropertyValue(sPropertyFields);
2744*b1cdbd2cSJim Jagielski 	Sequence<PropertyValue> aValues;
2745*b1cdbd2cSJim Jagielski 	aAny >>= aValues;
2746*b1cdbd2cSJim Jagielski 
2747*b1cdbd2cSJim Jagielski 	// one attribute per value (unless empty)
2748*b1cdbd2cSJim Jagielski 	sal_Int32 nLength = aValues.getLength();
2749*b1cdbd2cSJim Jagielski 	for (sal_Int32 i = 0; i < nLength; i++)
2750*b1cdbd2cSJim Jagielski 	{
2751*b1cdbd2cSJim Jagielski 		if (aValues[i].Name.equalsAsciiL("BibiliographicType",
2752*b1cdbd2cSJim Jagielski 										 sizeof("BibiliographicType")-1))
2753*b1cdbd2cSJim Jagielski 		{
2754*b1cdbd2cSJim Jagielski 			sal_Int16 nTypeId = 0;
2755*b1cdbd2cSJim Jagielski 			aValues[i].Value >>= nTypeId;
2756*b1cdbd2cSJim Jagielski 			OUStringBuffer sBuf;
2757*b1cdbd2cSJim Jagielski 
2758*b1cdbd2cSJim Jagielski 			if (SvXMLUnitConverter::convertEnum(sBuf, nTypeId,
2759*b1cdbd2cSJim Jagielski 												aBibliographyDataTypeMap))
2760*b1cdbd2cSJim Jagielski 			{
2761*b1cdbd2cSJim Jagielski 				rExport.AddAttribute(XML_NAMESPACE_TEXT,
2762*b1cdbd2cSJim Jagielski 									 XML_BIBLIOGRAPHY_TYPE,
2763*b1cdbd2cSJim Jagielski 									 sBuf.makeStringAndClear());
2764*b1cdbd2cSJim Jagielski 			}
2765*b1cdbd2cSJim Jagielski 			// else: ignore this argument
2766*b1cdbd2cSJim Jagielski 		}
2767*b1cdbd2cSJim Jagielski 		else
2768*b1cdbd2cSJim Jagielski 		{
2769*b1cdbd2cSJim Jagielski 			OUString sStr;
2770*b1cdbd2cSJim Jagielski 			aValues[i].Value >>= sStr;
2771*b1cdbd2cSJim Jagielski 
2772*b1cdbd2cSJim Jagielski 			if (sStr.getLength() > 0)
2773*b1cdbd2cSJim Jagielski 			{
2774*b1cdbd2cSJim Jagielski 				rExport.AddAttribute(XML_NAMESPACE_TEXT,
2775*b1cdbd2cSJim Jagielski 									 MapBibliographyFieldName(aValues[i].Name),
2776*b1cdbd2cSJim Jagielski 									 sStr);
2777*b1cdbd2cSJim Jagielski 			}
2778*b1cdbd2cSJim Jagielski 		}
2779*b1cdbd2cSJim Jagielski 	}
2780*b1cdbd2cSJim Jagielski }
2781*b1cdbd2cSJim Jagielski 
2782*b1cdbd2cSJim Jagielski /// export CommandTypeAttribute
ProcessCommandType(sal_Int32 nCommandType)2783*b1cdbd2cSJim Jagielski void XMLTextFieldExport::ProcessCommandType(
2784*b1cdbd2cSJim Jagielski     sal_Int32 nCommandType)
2785*b1cdbd2cSJim Jagielski {
2786*b1cdbd2cSJim Jagielski     enum XMLTokenEnum eToken = XML_TOKEN_INVALID;
2787*b1cdbd2cSJim Jagielski     switch( nCommandType )
2788*b1cdbd2cSJim Jagielski     {
2789*b1cdbd2cSJim Jagielski         case sdb::CommandType::TABLE:   eToken = XML_TABLE; break;
2790*b1cdbd2cSJim Jagielski         case sdb::CommandType::QUERY:   eToken = XML_QUERY; break;
2791*b1cdbd2cSJim Jagielski         case sdb::CommandType::COMMAND: eToken = XML_COMMAND; break;
2792*b1cdbd2cSJim Jagielski     }
2793*b1cdbd2cSJim Jagielski 
2794*b1cdbd2cSJim Jagielski     if( eToken != XML_TOKEN_INVALID )
2795*b1cdbd2cSJim Jagielski         rExport.AddAttribute( XML_NAMESPACE_TEXT, XML_TABLE_TYPE, eToken );
2796*b1cdbd2cSJim Jagielski }
2797*b1cdbd2cSJim Jagielski 
2798*b1cdbd2cSJim Jagielski 
ProcessStringSequence(const Sequence<OUString> & rSequence,const OUString sSelected)2799*b1cdbd2cSJim Jagielski void XMLTextFieldExport::ProcessStringSequence(
2800*b1cdbd2cSJim Jagielski     const Sequence<OUString>& rSequence,
2801*b1cdbd2cSJim Jagielski     const OUString sSelected )
2802*b1cdbd2cSJim Jagielski {
2803*b1cdbd2cSJim Jagielski     // find selected element
2804*b1cdbd2cSJim Jagielski     sal_Int32 nSelected = -1;
2805*b1cdbd2cSJim Jagielski     sal_Int32 nLength = rSequence.getLength();
2806*b1cdbd2cSJim Jagielski     const OUString* pSequence = rSequence.getConstArray();
2807*b1cdbd2cSJim Jagielski     for( sal_Int32 i = 0; i < nLength; i++ )
2808*b1cdbd2cSJim Jagielski     {
2809*b1cdbd2cSJim Jagielski         if( pSequence[i] == sSelected )
2810*b1cdbd2cSJim Jagielski             nSelected = i;
2811*b1cdbd2cSJim Jagielski     }
2812*b1cdbd2cSJim Jagielski 
2813*b1cdbd2cSJim Jagielski     // delegate to ProcessStringSequence(OUString,sal_Int32)
2814*b1cdbd2cSJim Jagielski     ProcessStringSequence( rSequence, nSelected );
2815*b1cdbd2cSJim Jagielski }
2816*b1cdbd2cSJim Jagielski 
ProcessStringSequence(const Sequence<OUString> & rSequence,sal_Int32 nSelected)2817*b1cdbd2cSJim Jagielski void XMLTextFieldExport::ProcessStringSequence(
2818*b1cdbd2cSJim Jagielski     const Sequence<OUString>& rSequence,
2819*b1cdbd2cSJim Jagielski     sal_Int32 nSelected )
2820*b1cdbd2cSJim Jagielski {
2821*b1cdbd2cSJim Jagielski     sal_Int32 nLength = rSequence.getLength();
2822*b1cdbd2cSJim Jagielski     const OUString* pSequence = rSequence.getConstArray();
2823*b1cdbd2cSJim Jagielski     for( sal_Int32 i = 0; i < nLength; i++ )
2824*b1cdbd2cSJim Jagielski     {
2825*b1cdbd2cSJim Jagielski         if( i == nSelected )
2826*b1cdbd2cSJim Jagielski             rExport.AddAttribute( XML_NAMESPACE_TEXT,
2827*b1cdbd2cSJim Jagielski                                   XML_CURRENT_SELECTED, XML_TRUE );
2828*b1cdbd2cSJim Jagielski         rExport.AddAttribute( XML_NAMESPACE_TEXT, XML_VALUE, pSequence[i] );
2829*b1cdbd2cSJim Jagielski         SvXMLElementExport aElement( rExport, XML_NAMESPACE_TEXT, XML_LABEL,
2830*b1cdbd2cSJim Jagielski                                      sal_False, sal_False );
2831*b1cdbd2cSJim Jagielski     }
2832*b1cdbd2cSJim Jagielski }
2833*b1cdbd2cSJim Jagielski 
ExportDataBaseElement(enum XMLTokenEnum eElementName,const OUString & sPresentation,const Reference<XPropertySet> & rPropertySet,const Reference<XPropertySetInfo> & rPropertySetInfo)2834*b1cdbd2cSJim Jagielski void XMLTextFieldExport::ExportDataBaseElement(
2835*b1cdbd2cSJim Jagielski     enum XMLTokenEnum eElementName,
2836*b1cdbd2cSJim Jagielski     const OUString& sPresentation,
2837*b1cdbd2cSJim Jagielski     const Reference<XPropertySet>& rPropertySet,
2838*b1cdbd2cSJim Jagielski     const Reference<XPropertySetInfo>& rPropertySetInfo )
2839*b1cdbd2cSJim Jagielski {
2840*b1cdbd2cSJim Jagielski     DBG_ASSERT( eElementName != XML_TOKEN_INVALID, "need token" );
2841*b1cdbd2cSJim Jagielski     DBG_ASSERT( rPropertySet.is(), "need property set" );
2842*b1cdbd2cSJim Jagielski     DBG_ASSERT( rPropertySetInfo.is(), "need property set info" );
2843*b1cdbd2cSJim Jagielski 
2844*b1cdbd2cSJim Jagielski     // get database properties
2845*b1cdbd2cSJim Jagielski     OUString sDataBaseName;
2846*b1cdbd2cSJim Jagielski     OUString sDataBaseURL;
2847*b1cdbd2cSJim Jagielski     OUString sStr;
2848*b1cdbd2cSJim Jagielski     if( ( rPropertySet->getPropertyValue( sPropertyDataBaseName ) >>= sStr )
2849*b1cdbd2cSJim Jagielski         && ( sStr.getLength() > 0 ) )
2850*b1cdbd2cSJim Jagielski     {
2851*b1cdbd2cSJim Jagielski         sDataBaseName = sStr;
2852*b1cdbd2cSJim Jagielski     }
2853*b1cdbd2cSJim Jagielski     else if( rPropertySetInfo->hasPropertyByName( sPropertyDataBaseURL ) &&
2854*b1cdbd2cSJim Jagielski              (rPropertySet->getPropertyValue( sPropertyDataBaseURL ) >>= sStr) &&
2855*b1cdbd2cSJim Jagielski              (sStr.getLength() > 0) )
2856*b1cdbd2cSJim Jagielski     {
2857*b1cdbd2cSJim Jagielski         sDataBaseURL = sStr;
2858*b1cdbd2cSJim Jagielski     }
2859*b1cdbd2cSJim Jagielski 
2860*b1cdbd2cSJim Jagielski     // add database name property (if present)
2861*b1cdbd2cSJim Jagielski     if( sDataBaseName.getLength() > 0 )
2862*b1cdbd2cSJim Jagielski         rExport.AddAttribute( XML_NAMESPACE_TEXT, XML_DATABASE_NAME,
2863*b1cdbd2cSJim Jagielski                               sDataBaseName );
2864*b1cdbd2cSJim Jagielski     SvXMLElementExport aDataBaseElement( GetExport(),
2865*b1cdbd2cSJim Jagielski                                          XML_NAMESPACE_TEXT, eElementName,
2866*b1cdbd2cSJim Jagielski                                          sal_False, sal_False );
2867*b1cdbd2cSJim Jagielski 
2868*b1cdbd2cSJim Jagielski     // write URL as children
2869*b1cdbd2cSJim Jagielski     if( sDataBaseURL.getLength() > 0 )
2870*b1cdbd2cSJim Jagielski     {
2871*b1cdbd2cSJim Jagielski         rExport.AddAttribute( XML_NAMESPACE_XLINK, XML_HREF, sDataBaseURL );
2872*b1cdbd2cSJim Jagielski         SvXMLElementExport aDataSourceElement(
2873*b1cdbd2cSJim Jagielski             GetExport(), XML_NAMESPACE_FORM, XML_CONNECTION_RESOURCE,
2874*b1cdbd2cSJim Jagielski             sal_False, sal_False );
2875*b1cdbd2cSJim Jagielski     }
2876*b1cdbd2cSJim Jagielski 
2877*b1cdbd2cSJim Jagielski     // write presentation
2878*b1cdbd2cSJim Jagielski     rExport.Characters( sPresentation );
2879*b1cdbd2cSJim Jagielski }
2880*b1cdbd2cSJim Jagielski 
2881*b1cdbd2cSJim Jagielski 
2882*b1cdbd2cSJim Jagielski 
2883*b1cdbd2cSJim Jagielski // explode a field master name into field type and field name
ExplodeFieldMasterName(const OUString & sMasterName,OUString & sFieldType,OUString & sVarName)2884*b1cdbd2cSJim Jagielski sal_Bool XMLTextFieldExport::ExplodeFieldMasterName(
2885*b1cdbd2cSJim Jagielski 	const OUString& sMasterName, OUString& sFieldType, OUString& sVarName)
2886*b1cdbd2cSJim Jagielski {
2887*b1cdbd2cSJim Jagielski 	sal_Int32 nLength = sFieldMasterPrefix.getLength();
2888*b1cdbd2cSJim Jagielski 	sal_Int32 nSeparator = sMasterName.indexOf('.', nLength);
2889*b1cdbd2cSJim Jagielski 	sal_Bool bReturn = sal_True;
2890*b1cdbd2cSJim Jagielski 
2891*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL
2892*b1cdbd2cSJim Jagielski 	// check for service name
2893*b1cdbd2cSJim Jagielski 	bReturn &= (0 == sFieldMasterPrefix.compareTo(sMasterName, nLength));
2894*b1cdbd2cSJim Jagielski #endif
2895*b1cdbd2cSJim Jagielski 
2896*b1cdbd2cSJim Jagielski 	// '.' found?
2897*b1cdbd2cSJim Jagielski 	if (nSeparator <= nLength) {
2898*b1cdbd2cSJim Jagielski 		nSeparator = sMasterName.getLength();
2899*b1cdbd2cSJim Jagielski 		DBG_WARNING("no field var name!");
2900*b1cdbd2cSJim Jagielski 		bReturn = sal_False;
2901*b1cdbd2cSJim Jagielski 	}
2902*b1cdbd2cSJim Jagielski     else
2903*b1cdbd2cSJim Jagielski     {
2904*b1cdbd2cSJim Jagielski     	sFieldType = sMasterName.copy(nLength, nSeparator-nLength);
2905*b1cdbd2cSJim Jagielski 	    sVarName = sMasterName.copy(nSeparator+1);
2906*b1cdbd2cSJim Jagielski     }
2907*b1cdbd2cSJim Jagielski 
2908*b1cdbd2cSJim Jagielski 	return bReturn;
2909*b1cdbd2cSJim Jagielski }
2910*b1cdbd2cSJim Jagielski 
2911*b1cdbd2cSJim Jagielski 
2912*b1cdbd2cSJim Jagielski // for XDependentTextFields, get PropertySet of FieldMaster
GetMasterPropertySet(const Reference<XTextField> & rTextField)2913*b1cdbd2cSJim Jagielski Reference<XPropertySet>	XMLTextFieldExport::GetMasterPropertySet(
2914*b1cdbd2cSJim Jagielski 	const Reference<XTextField> & rTextField)
2915*b1cdbd2cSJim Jagielski {
2916*b1cdbd2cSJim Jagielski 	// name, value => get Property set of TextFieldMaster
2917*b1cdbd2cSJim Jagielski 	Reference<XDependentTextField> xDep(rTextField, UNO_QUERY);
2918*b1cdbd2cSJim Jagielski 	return xDep->getTextFieldMaster();
2919*b1cdbd2cSJim Jagielski }
2920*b1cdbd2cSJim Jagielski 
2921*b1cdbd2cSJim Jagielski // get PropertySet of (any; the first) dependent field
GetDependentFieldPropertySet(const Reference<XPropertySet> & xMaster,Reference<XPropertySet> & xField)2922*b1cdbd2cSJim Jagielski sal_Bool XMLTextFieldExport::GetDependentFieldPropertySet(
2923*b1cdbd2cSJim Jagielski 	const Reference<XPropertySet> & xMaster,
2924*b1cdbd2cSJim Jagielski 	Reference<XPropertySet> & xField)
2925*b1cdbd2cSJim Jagielski {
2926*b1cdbd2cSJim Jagielski 	Any aAny;
2927*b1cdbd2cSJim Jagielski 	Sequence<Reference<XDependentTextField> > aFields;
2928*b1cdbd2cSJim Jagielski 	aAny = xMaster->getPropertyValue(sPropertyDependentTextFields);
2929*b1cdbd2cSJim Jagielski 	aAny >>= aFields;
2930*b1cdbd2cSJim Jagielski 
2931*b1cdbd2cSJim Jagielski 	// any fields?
2932*b1cdbd2cSJim Jagielski 	if (aFields.getLength() > 0)
2933*b1cdbd2cSJim Jagielski 	{
2934*b1cdbd2cSJim Jagielski 		// get first one and return
2935*b1cdbd2cSJim Jagielski 		Reference<XDependentTextField> xTField = aFields[0];
2936*b1cdbd2cSJim Jagielski 		xField = Reference<XPropertySet>(xTField, UNO_QUERY);
2937*b1cdbd2cSJim Jagielski 		DBG_ASSERT(xField.is(),
2938*b1cdbd2cSJim Jagielski 				  "Surprisinlgy, this TextField refuses to be a PropertySet!");
2939*b1cdbd2cSJim Jagielski 		return sal_True;
2940*b1cdbd2cSJim Jagielski 	}
2941*b1cdbd2cSJim Jagielski 	else
2942*b1cdbd2cSJim Jagielski 	{
2943*b1cdbd2cSJim Jagielski 		return sal_False;
2944*b1cdbd2cSJim Jagielski 	}
2945*b1cdbd2cSJim Jagielski }
2946*b1cdbd2cSJim Jagielski 
2947*b1cdbd2cSJim Jagielski 
2948*b1cdbd2cSJim Jagielski /// map placeholder type
MapPlaceholderType(sal_uInt16 nType)2949*b1cdbd2cSJim Jagielski enum XMLTokenEnum XMLTextFieldExport::MapPlaceholderType(sal_uInt16 nType)
2950*b1cdbd2cSJim Jagielski {
2951*b1cdbd2cSJim Jagielski 	enum XMLTokenEnum eType = XML_TEXT;
2952*b1cdbd2cSJim Jagielski 
2953*b1cdbd2cSJim Jagielski 	switch (nType)
2954*b1cdbd2cSJim Jagielski     {
2955*b1cdbd2cSJim Jagielski         case PlaceholderType::TEXT:
2956*b1cdbd2cSJim Jagielski             eType = XML_TEXT;
2957*b1cdbd2cSJim Jagielski             break;
2958*b1cdbd2cSJim Jagielski 
2959*b1cdbd2cSJim Jagielski         case PlaceholderType::TABLE:
2960*b1cdbd2cSJim Jagielski             eType = XML_TABLE;
2961*b1cdbd2cSJim Jagielski             break;
2962*b1cdbd2cSJim Jagielski 
2963*b1cdbd2cSJim Jagielski         case PlaceholderType::TEXTFRAME:
2964*b1cdbd2cSJim Jagielski             eType = XML_TEXT_BOX;
2965*b1cdbd2cSJim Jagielski             break;
2966*b1cdbd2cSJim Jagielski 
2967*b1cdbd2cSJim Jagielski         case PlaceholderType::GRAPHIC:
2968*b1cdbd2cSJim Jagielski             eType = XML_IMAGE;
2969*b1cdbd2cSJim Jagielski             break;
2970*b1cdbd2cSJim Jagielski 
2971*b1cdbd2cSJim Jagielski         case PlaceholderType::OBJECT:
2972*b1cdbd2cSJim Jagielski             eType = XML_OBJECT;
2973*b1cdbd2cSJim Jagielski             break;
2974*b1cdbd2cSJim Jagielski 
2975*b1cdbd2cSJim Jagielski         default:
2976*b1cdbd2cSJim Jagielski             // unkown placeholder: XML_TEXT
2977*b1cdbd2cSJim Jagielski             DBG_ERROR("unkown placeholder type");
2978*b1cdbd2cSJim Jagielski     }
2979*b1cdbd2cSJim Jagielski 
2980*b1cdbd2cSJim Jagielski 	return eType;
2981*b1cdbd2cSJim Jagielski }
2982*b1cdbd2cSJim Jagielski 
2983*b1cdbd2cSJim Jagielski 
2984*b1cdbd2cSJim Jagielski /// element name for author	fields
MapAuthorFieldName(const Reference<XPropertySet> & xPropSet)2985*b1cdbd2cSJim Jagielski enum XMLTokenEnum XMLTextFieldExport::MapAuthorFieldName(
2986*b1cdbd2cSJim Jagielski 	const Reference<XPropertySet> & xPropSet)
2987*b1cdbd2cSJim Jagielski {
2988*b1cdbd2cSJim Jagielski 	// Initalen oder voller Name?
2989*b1cdbd2cSJim Jagielski 	return GetBoolProperty(sPropertyFullName, xPropSet)
2990*b1cdbd2cSJim Jagielski 		? XML_AUTHOR_NAME : XML_AUTHOR_INITIALS;
2991*b1cdbd2cSJim Jagielski }
2992*b1cdbd2cSJim Jagielski 
MapPageNumberName(const Reference<XPropertySet> & xPropSet,sal_Int32 & nOffset)2993*b1cdbd2cSJim Jagielski enum XMLTokenEnum XMLTextFieldExport::MapPageNumberName(
2994*b1cdbd2cSJim Jagielski 	const Reference<XPropertySet> & xPropSet,
2995*b1cdbd2cSJim Jagielski 	sal_Int32& nOffset)
2996*b1cdbd2cSJim Jagielski {
2997*b1cdbd2cSJim Jagielski 	enum XMLTokenEnum eName = XML_TOKEN_INVALID;
2998*b1cdbd2cSJim Jagielski 	PageNumberType ePage;
2999*b1cdbd2cSJim Jagielski 	Any aAny = xPropSet->getPropertyValue(sPropertySubType);
3000*b1cdbd2cSJim Jagielski 	ePage = *(PageNumberType*)aAny.getValue();
3001*b1cdbd2cSJim Jagielski 
3002*b1cdbd2cSJim Jagielski 	switch (ePage)
3003*b1cdbd2cSJim Jagielski 	{
3004*b1cdbd2cSJim Jagielski 		case PageNumberType_PREV:
3005*b1cdbd2cSJim Jagielski 			eName = XML_PREVIOUS;
3006*b1cdbd2cSJim Jagielski 			nOffset += 1;
3007*b1cdbd2cSJim Jagielski 			break;
3008*b1cdbd2cSJim Jagielski 		case PageNumberType_CURRENT:
3009*b1cdbd2cSJim Jagielski 			eName = XML_CURRENT;
3010*b1cdbd2cSJim Jagielski 		    break;
3011*b1cdbd2cSJim Jagielski 		case PageNumberType_NEXT:
3012*b1cdbd2cSJim Jagielski 			eName = XML_NEXT;
3013*b1cdbd2cSJim Jagielski 			nOffset -= 1;
3014*b1cdbd2cSJim Jagielski 			break;
3015*b1cdbd2cSJim Jagielski 		default:
3016*b1cdbd2cSJim Jagielski 			DBG_ERROR("unknown page number type");
3017*b1cdbd2cSJim Jagielski 			eName = XML_TOKEN_INVALID;
3018*b1cdbd2cSJim Jagielski 			break;
3019*b1cdbd2cSJim Jagielski 	}
3020*b1cdbd2cSJim Jagielski 
3021*b1cdbd2cSJim Jagielski 	return eName;
3022*b1cdbd2cSJim Jagielski }
3023*b1cdbd2cSJim Jagielski 
3024*b1cdbd2cSJim Jagielski /// map TemplateDisplayFormat to XML
MapTemplateDisplayFormat(sal_Int16 nFormat)3025*b1cdbd2cSJim Jagielski enum XMLTokenEnum XMLTextFieldExport::MapTemplateDisplayFormat(sal_Int16 nFormat)
3026*b1cdbd2cSJim Jagielski {
3027*b1cdbd2cSJim Jagielski 	enum XMLTokenEnum eName = XML_TOKEN_INVALID;
3028*b1cdbd2cSJim Jagielski 
3029*b1cdbd2cSJim Jagielski 	switch (nFormat)
3030*b1cdbd2cSJim Jagielski 	{
3031*b1cdbd2cSJim Jagielski 		case TemplateDisplayFormat::FULL:
3032*b1cdbd2cSJim Jagielski 			eName = XML_FULL;
3033*b1cdbd2cSJim Jagielski 			break;
3034*b1cdbd2cSJim Jagielski 		case TemplateDisplayFormat::PATH:
3035*b1cdbd2cSJim Jagielski 			eName = XML_PATH;
3036*b1cdbd2cSJim Jagielski 			break;
3037*b1cdbd2cSJim Jagielski 		case TemplateDisplayFormat::NAME:
3038*b1cdbd2cSJim Jagielski 			eName = XML_NAME;
3039*b1cdbd2cSJim Jagielski 			break;
3040*b1cdbd2cSJim Jagielski 		case TemplateDisplayFormat::NAME_AND_EXT:
3041*b1cdbd2cSJim Jagielski 			eName = XML_NAME_AND_EXTENSION;
3042*b1cdbd2cSJim Jagielski 			break;
3043*b1cdbd2cSJim Jagielski 		case TemplateDisplayFormat::AREA:
3044*b1cdbd2cSJim Jagielski 			eName = XML_AREA;
3045*b1cdbd2cSJim Jagielski 			break;
3046*b1cdbd2cSJim Jagielski 		case TemplateDisplayFormat::TITLE:
3047*b1cdbd2cSJim Jagielski 			eName = XML_TITLE;
3048*b1cdbd2cSJim Jagielski 			break;
3049*b1cdbd2cSJim Jagielski 		default:
3050*b1cdbd2cSJim Jagielski 			DBG_ERROR("unknown template display format");
3051*b1cdbd2cSJim Jagielski 			eName = XML_TOKEN_INVALID;
3052*b1cdbd2cSJim Jagielski 			break;
3053*b1cdbd2cSJim Jagielski 	}
3054*b1cdbd2cSJim Jagielski 
3055*b1cdbd2cSJim Jagielski 	return eName;
3056*b1cdbd2cSJim Jagielski }
3057*b1cdbd2cSJim Jagielski 
3058*b1cdbd2cSJim Jagielski /// map count/statistics field token to XML name
MapCountFieldName(FieldIdEnum nToken)3059*b1cdbd2cSJim Jagielski enum XMLTokenEnum XMLTextFieldExport::MapCountFieldName(FieldIdEnum nToken)
3060*b1cdbd2cSJim Jagielski {
3061*b1cdbd2cSJim Jagielski 	enum XMLTokenEnum eElement = XML_TOKEN_INVALID;
3062*b1cdbd2cSJim Jagielski 
3063*b1cdbd2cSJim Jagielski 	switch (nToken)
3064*b1cdbd2cSJim Jagielski 	{
3065*b1cdbd2cSJim Jagielski 		case FIELD_ID_COUNT_PAGES:
3066*b1cdbd2cSJim Jagielski 			eElement = XML_PAGE_COUNT;
3067*b1cdbd2cSJim Jagielski 			break;
3068*b1cdbd2cSJim Jagielski 		case FIELD_ID_COUNT_PARAGRAPHS:
3069*b1cdbd2cSJim Jagielski 			eElement = XML_PARAGRAPH_COUNT;
3070*b1cdbd2cSJim Jagielski 			break;
3071*b1cdbd2cSJim Jagielski 		case FIELD_ID_COUNT_WORDS:
3072*b1cdbd2cSJim Jagielski 			eElement = XML_WORD_COUNT;
3073*b1cdbd2cSJim Jagielski 			break;
3074*b1cdbd2cSJim Jagielski 		case FIELD_ID_COUNT_CHARACTERS:
3075*b1cdbd2cSJim Jagielski 			eElement = XML_CHARACTER_COUNT;
3076*b1cdbd2cSJim Jagielski 			break;
3077*b1cdbd2cSJim Jagielski 		case FIELD_ID_COUNT_TABLES:
3078*b1cdbd2cSJim Jagielski 			eElement = XML_TABLE_COUNT;
3079*b1cdbd2cSJim Jagielski 			break;
3080*b1cdbd2cSJim Jagielski 		case FIELD_ID_COUNT_GRAPHICS:
3081*b1cdbd2cSJim Jagielski 			eElement = XML_IMAGE_COUNT;
3082*b1cdbd2cSJim Jagielski 			break;
3083*b1cdbd2cSJim Jagielski 		case FIELD_ID_COUNT_OBJECTS:
3084*b1cdbd2cSJim Jagielski 			eElement = XML_OBJECT_COUNT;
3085*b1cdbd2cSJim Jagielski 			break;
3086*b1cdbd2cSJim Jagielski 		default:
3087*b1cdbd2cSJim Jagielski 			DBG_ERROR("no count field token");
3088*b1cdbd2cSJim Jagielski 			eElement = XML_TOKEN_INVALID;
3089*b1cdbd2cSJim Jagielski 			break;
3090*b1cdbd2cSJim Jagielski 	}
3091*b1cdbd2cSJim Jagielski 
3092*b1cdbd2cSJim Jagielski 	return eElement;
3093*b1cdbd2cSJim Jagielski }
3094*b1cdbd2cSJim Jagielski 
3095*b1cdbd2cSJim Jagielski /// map ChapterDisplayFormat to XML string
MapChapterDisplayFormat(sal_Int16 nFormat)3096*b1cdbd2cSJim Jagielski enum XMLTokenEnum XMLTextFieldExport::MapChapterDisplayFormat(sal_Int16 nFormat)
3097*b1cdbd2cSJim Jagielski {
3098*b1cdbd2cSJim Jagielski 	enum XMLTokenEnum eName = XML_TOKEN_INVALID;
3099*b1cdbd2cSJim Jagielski 
3100*b1cdbd2cSJim Jagielski 	switch (nFormat)
3101*b1cdbd2cSJim Jagielski 	{
3102*b1cdbd2cSJim Jagielski 		case ChapterFormat::NAME:
3103*b1cdbd2cSJim Jagielski 			eName = XML_NAME;
3104*b1cdbd2cSJim Jagielski 			break;
3105*b1cdbd2cSJim Jagielski 		case ChapterFormat::NUMBER:
3106*b1cdbd2cSJim Jagielski 			eName = XML_NUMBER;
3107*b1cdbd2cSJim Jagielski 			break;
3108*b1cdbd2cSJim Jagielski 		case ChapterFormat::NAME_NUMBER:
3109*b1cdbd2cSJim Jagielski 			eName = XML_NUMBER_AND_NAME;
3110*b1cdbd2cSJim Jagielski 			break;
3111*b1cdbd2cSJim Jagielski 		case ChapterFormat::NO_PREFIX_SUFFIX:
3112*b1cdbd2cSJim Jagielski 			eName = XML_PLAIN_NUMBER_AND_NAME;
3113*b1cdbd2cSJim Jagielski 			break;
3114*b1cdbd2cSJim Jagielski 		case ChapterFormat::DIGIT:
3115*b1cdbd2cSJim Jagielski 			eName = XML_PLAIN_NUMBER;
3116*b1cdbd2cSJim Jagielski 			break;
3117*b1cdbd2cSJim Jagielski 		default:
3118*b1cdbd2cSJim Jagielski 			DBG_ERROR("unkown chapter display format");
3119*b1cdbd2cSJim Jagielski 			eName = XML_TOKEN_INVALID;
3120*b1cdbd2cSJim Jagielski 			break;
3121*b1cdbd2cSJim Jagielski 	}
3122*b1cdbd2cSJim Jagielski 
3123*b1cdbd2cSJim Jagielski 	return eName;
3124*b1cdbd2cSJim Jagielski }
3125*b1cdbd2cSJim Jagielski 
3126*b1cdbd2cSJim Jagielski 
3127*b1cdbd2cSJim Jagielski /// map FilenameDisplayFormat to XML attribute names
MapFilenameDisplayFormat(sal_Int16 nFormat)3128*b1cdbd2cSJim Jagielski enum XMLTokenEnum XMLTextFieldExport::MapFilenameDisplayFormat(sal_Int16 nFormat)
3129*b1cdbd2cSJim Jagielski {
3130*b1cdbd2cSJim Jagielski 	enum XMLTokenEnum eName = XML_TOKEN_INVALID;
3131*b1cdbd2cSJim Jagielski 
3132*b1cdbd2cSJim Jagielski 	switch (nFormat)
3133*b1cdbd2cSJim Jagielski 	{
3134*b1cdbd2cSJim Jagielski 		case FilenameDisplayFormat::FULL:
3135*b1cdbd2cSJim Jagielski 			eName = XML_FULL;
3136*b1cdbd2cSJim Jagielski 			break;
3137*b1cdbd2cSJim Jagielski 		case FilenameDisplayFormat::PATH:
3138*b1cdbd2cSJim Jagielski 			eName = XML_PATH;
3139*b1cdbd2cSJim Jagielski 			break;
3140*b1cdbd2cSJim Jagielski 		case FilenameDisplayFormat::NAME:
3141*b1cdbd2cSJim Jagielski 			eName = XML_NAME;
3142*b1cdbd2cSJim Jagielski 			break;
3143*b1cdbd2cSJim Jagielski 		case FilenameDisplayFormat::NAME_AND_EXT:
3144*b1cdbd2cSJim Jagielski 			eName = XML_NAME_AND_EXTENSION;
3145*b1cdbd2cSJim Jagielski 			break;
3146*b1cdbd2cSJim Jagielski 		default:
3147*b1cdbd2cSJim Jagielski 			DBG_ERROR("unknown filename display format");
3148*b1cdbd2cSJim Jagielski 	}
3149*b1cdbd2cSJim Jagielski 
3150*b1cdbd2cSJim Jagielski 	return eName;
3151*b1cdbd2cSJim Jagielski }
3152*b1cdbd2cSJim Jagielski 
3153*b1cdbd2cSJim Jagielski 
3154*b1cdbd2cSJim Jagielski /// map ReferenceFieldPart to XML string
MapReferenceType(sal_Int16 nType)3155*b1cdbd2cSJim Jagielski enum XMLTokenEnum XMLTextFieldExport::MapReferenceType(sal_Int16 nType)
3156*b1cdbd2cSJim Jagielski {
3157*b1cdbd2cSJim Jagielski 	enum XMLTokenEnum eElement = XML_TOKEN_INVALID;
3158*b1cdbd2cSJim Jagielski 
3159*b1cdbd2cSJim Jagielski 	switch (nType)
3160*b1cdbd2cSJim Jagielski 	{
3161*b1cdbd2cSJim Jagielski 		case ReferenceFieldPart::PAGE:
3162*b1cdbd2cSJim Jagielski 			eElement = XML_PAGE;
3163*b1cdbd2cSJim Jagielski 			break;
3164*b1cdbd2cSJim Jagielski 		case ReferenceFieldPart::CHAPTER:
3165*b1cdbd2cSJim Jagielski 			eElement = XML_CHAPTER;
3166*b1cdbd2cSJim Jagielski 			break;
3167*b1cdbd2cSJim Jagielski 		case ReferenceFieldPart::TEXT:
3168*b1cdbd2cSJim Jagielski 			eElement = XML_TEXT;
3169*b1cdbd2cSJim Jagielski 			break;
3170*b1cdbd2cSJim Jagielski 		case ReferenceFieldPart::UP_DOWN:
3171*b1cdbd2cSJim Jagielski 			eElement = XML_DIRECTION;
3172*b1cdbd2cSJim Jagielski 			break;
3173*b1cdbd2cSJim Jagielski 		case ReferenceFieldPart::CATEGORY_AND_NUMBER:
3174*b1cdbd2cSJim Jagielski 			eElement = XML_CATEGORY_AND_VALUE;
3175*b1cdbd2cSJim Jagielski 			break;
3176*b1cdbd2cSJim Jagielski 		case ReferenceFieldPart::ONLY_CAPTION:
3177*b1cdbd2cSJim Jagielski 			eElement = XML_CAPTION;
3178*b1cdbd2cSJim Jagielski 			break;
3179*b1cdbd2cSJim Jagielski 		case ReferenceFieldPart::ONLY_SEQUENCE_NUMBER:
3180*b1cdbd2cSJim Jagielski 			eElement = XML_VALUE;
3181*b1cdbd2cSJim Jagielski 			break;
3182*b1cdbd2cSJim Jagielski 		case ReferenceFieldPart::PAGE_DESC:
3183*b1cdbd2cSJim Jagielski 			// small hack: this value never gets written, because
3184*b1cdbd2cSJim Jagielski 			// XML_TEMPLATE is default
3185*b1cdbd2cSJim Jagielski 			eElement = XML_TEMPLATE;
3186*b1cdbd2cSJim Jagielski 			break;
3187*b1cdbd2cSJim Jagielski         // --> OD 2007-09-14 #i81002#
3188*b1cdbd2cSJim Jagielski         case ReferenceFieldPart::NUMBER:
3189*b1cdbd2cSJim Jagielski             eElement = XML_NUMBER;
3190*b1cdbd2cSJim Jagielski             break;
3191*b1cdbd2cSJim Jagielski         case ReferenceFieldPart::NUMBER_NO_CONTEXT:
3192*b1cdbd2cSJim Jagielski             eElement = XML_NUMBER_NO_SUPERIOR;
3193*b1cdbd2cSJim Jagielski             break;
3194*b1cdbd2cSJim Jagielski         case ReferenceFieldPart::NUMBER_FULL_CONTEXT:
3195*b1cdbd2cSJim Jagielski             eElement = XML_NUMBER_ALL_SUPERIOR;
3196*b1cdbd2cSJim Jagielski             break;
3197*b1cdbd2cSJim Jagielski         // <--
3198*b1cdbd2cSJim Jagielski         default:
3199*b1cdbd2cSJim Jagielski 			DBG_ERROR("unknown reference type");
3200*b1cdbd2cSJim Jagielski 			eElement = XML_TEMPLATE;
3201*b1cdbd2cSJim Jagielski 			break;
3202*b1cdbd2cSJim Jagielski 	}
3203*b1cdbd2cSJim Jagielski 
3204*b1cdbd2cSJim Jagielski 	return eElement;
3205*b1cdbd2cSJim Jagielski }
3206*b1cdbd2cSJim Jagielski 
3207*b1cdbd2cSJim Jagielski /// map ReferenceFieldPart to XML string
MapReferenceSource(sal_Int16 nType)3208*b1cdbd2cSJim Jagielski enum XMLTokenEnum XMLTextFieldExport::MapReferenceSource(sal_Int16 nType)
3209*b1cdbd2cSJim Jagielski {
3210*b1cdbd2cSJim Jagielski 	enum XMLTokenEnum eElement = XML_TOKEN_INVALID;
3211*b1cdbd2cSJim Jagielski 
3212*b1cdbd2cSJim Jagielski 	switch (nType)
3213*b1cdbd2cSJim Jagielski 	{
3214*b1cdbd2cSJim Jagielski 		case ReferenceFieldSource::REFERENCE_MARK:
3215*b1cdbd2cSJim Jagielski 			eElement = XML_REFERENCE_REF;
3216*b1cdbd2cSJim Jagielski 			break;
3217*b1cdbd2cSJim Jagielski 		case ReferenceFieldSource::SEQUENCE_FIELD:
3218*b1cdbd2cSJim Jagielski 			eElement = XML_SEQUENCE_REF;
3219*b1cdbd2cSJim Jagielski 			break;
3220*b1cdbd2cSJim Jagielski 		case ReferenceFieldSource::BOOKMARK:
3221*b1cdbd2cSJim Jagielski 			eElement = XML_BOOKMARK_REF;
3222*b1cdbd2cSJim Jagielski 			break;
3223*b1cdbd2cSJim Jagielski 		case ReferenceFieldSource::FOOTNOTE:
3224*b1cdbd2cSJim Jagielski 		case ReferenceFieldSource::ENDNOTE:
3225*b1cdbd2cSJim Jagielski 			eElement = XML_NOTE_REF;
3226*b1cdbd2cSJim Jagielski 			break;
3227*b1cdbd2cSJim Jagielski 		default:
3228*b1cdbd2cSJim Jagielski 			DBG_ERROR("unkown reference source");
3229*b1cdbd2cSJim Jagielski 			break;
3230*b1cdbd2cSJim Jagielski 	}
3231*b1cdbd2cSJim Jagielski 
3232*b1cdbd2cSJim Jagielski 	return eElement;
3233*b1cdbd2cSJim Jagielski }
3234*b1cdbd2cSJim Jagielski 
3235*b1cdbd2cSJim Jagielski 
3236*b1cdbd2cSJim Jagielski /// element name for sender fields
MapSenderFieldName(const Reference<XPropertySet> & xPropSet)3237*b1cdbd2cSJim Jagielski enum XMLTokenEnum XMLTextFieldExport::MapSenderFieldName(
3238*b1cdbd2cSJim Jagielski 	const Reference<XPropertySet> & xPropSet)
3239*b1cdbd2cSJim Jagielski {
3240*b1cdbd2cSJim Jagielski 	enum XMLTokenEnum eName = XML_TOKEN_INVALID;
3241*b1cdbd2cSJim Jagielski 
3242*b1cdbd2cSJim Jagielski 	// sub-field type
3243*b1cdbd2cSJim Jagielski 	switch (GetInt16Property(sPropertyFieldSubType, xPropSet))
3244*b1cdbd2cSJim Jagielski 	{
3245*b1cdbd2cSJim Jagielski 		case UserDataPart::COMPANY :
3246*b1cdbd2cSJim Jagielski 			eName = XML_SENDER_COMPANY;
3247*b1cdbd2cSJim Jagielski 			break;
3248*b1cdbd2cSJim Jagielski 		case UserDataPart::FIRSTNAME :
3249*b1cdbd2cSJim Jagielski 			eName = XML_SENDER_FIRSTNAME;
3250*b1cdbd2cSJim Jagielski 			break;
3251*b1cdbd2cSJim Jagielski 		case UserDataPart::NAME :
3252*b1cdbd2cSJim Jagielski 			eName = XML_SENDER_LASTNAME;
3253*b1cdbd2cSJim Jagielski 			break;
3254*b1cdbd2cSJim Jagielski 		case UserDataPart::SHORTCUT :
3255*b1cdbd2cSJim Jagielski 			eName = XML_SENDER_INITIALS;
3256*b1cdbd2cSJim Jagielski 			break;
3257*b1cdbd2cSJim Jagielski 		case UserDataPart::STREET :
3258*b1cdbd2cSJim Jagielski 			eName = XML_SENDER_STREET;
3259*b1cdbd2cSJim Jagielski 			break;
3260*b1cdbd2cSJim Jagielski 		case UserDataPart::COUNTRY :
3261*b1cdbd2cSJim Jagielski 			eName = XML_SENDER_COUNTRY;
3262*b1cdbd2cSJim Jagielski 			break;
3263*b1cdbd2cSJim Jagielski 		case UserDataPart::ZIP :
3264*b1cdbd2cSJim Jagielski 			eName = XML_SENDER_POSTAL_CODE;
3265*b1cdbd2cSJim Jagielski 			break;
3266*b1cdbd2cSJim Jagielski 		case UserDataPart::CITY :
3267*b1cdbd2cSJim Jagielski 			eName = XML_SENDER_CITY;
3268*b1cdbd2cSJim Jagielski 			break;
3269*b1cdbd2cSJim Jagielski 		case UserDataPart::TITLE :
3270*b1cdbd2cSJim Jagielski 			eName = XML_SENDER_TITLE;
3271*b1cdbd2cSJim Jagielski 			break;
3272*b1cdbd2cSJim Jagielski 		case UserDataPart::POSITION :
3273*b1cdbd2cSJim Jagielski 			eName = XML_SENDER_POSITION;
3274*b1cdbd2cSJim Jagielski 			break;
3275*b1cdbd2cSJim Jagielski 		case UserDataPart::PHONE_PRIVATE :
3276*b1cdbd2cSJim Jagielski 			eName = XML_SENDER_PHONE_PRIVATE;
3277*b1cdbd2cSJim Jagielski 			break;
3278*b1cdbd2cSJim Jagielski 		case UserDataPart::PHONE_COMPANY :
3279*b1cdbd2cSJim Jagielski 			eName = XML_SENDER_PHONE_WORK;
3280*b1cdbd2cSJim Jagielski 			break;
3281*b1cdbd2cSJim Jagielski 		case UserDataPart::FAX :
3282*b1cdbd2cSJim Jagielski 			eName = XML_SENDER_FAX;
3283*b1cdbd2cSJim Jagielski 			break;
3284*b1cdbd2cSJim Jagielski 		case UserDataPart::EMAIL :
3285*b1cdbd2cSJim Jagielski 			eName = XML_SENDER_EMAIL;
3286*b1cdbd2cSJim Jagielski 			break;
3287*b1cdbd2cSJim Jagielski 		case UserDataPart::STATE :
3288*b1cdbd2cSJim Jagielski 			eName = XML_SENDER_STATE_OR_PROVINCE;
3289*b1cdbd2cSJim Jagielski 			break;
3290*b1cdbd2cSJim Jagielski 		default:
3291*b1cdbd2cSJim Jagielski 			DBG_WARNING("unknown sender type");
3292*b1cdbd2cSJim Jagielski 			eName = XML_TOKEN_INVALID;
3293*b1cdbd2cSJim Jagielski 			break;
3294*b1cdbd2cSJim Jagielski 	}
3295*b1cdbd2cSJim Jagielski 
3296*b1cdbd2cSJim Jagielski 	return eName;
3297*b1cdbd2cSJim Jagielski }
3298*b1cdbd2cSJim Jagielski 
MapDocInfoFieldName(enum FieldIdEnum nToken)3299*b1cdbd2cSJim Jagielski enum XMLTokenEnum XMLTextFieldExport::MapDocInfoFieldName(
3300*b1cdbd2cSJim Jagielski 	enum FieldIdEnum nToken)
3301*b1cdbd2cSJim Jagielski {
3302*b1cdbd2cSJim Jagielski 	enum XMLTokenEnum eElement = XML_TOKEN_INVALID;
3303*b1cdbd2cSJim Jagielski 
3304*b1cdbd2cSJim Jagielski 	switch (nToken)
3305*b1cdbd2cSJim Jagielski 	{
3306*b1cdbd2cSJim Jagielski 		case FIELD_ID_DOCINFO_CREATION_AUTHOR:
3307*b1cdbd2cSJim Jagielski 			eElement = XML_INITIAL_CREATOR;
3308*b1cdbd2cSJim Jagielski 			break;
3309*b1cdbd2cSJim Jagielski 		case FIELD_ID_DOCINFO_CREATION_DATE:
3310*b1cdbd2cSJim Jagielski 			eElement = XML_CREATION_DATE;
3311*b1cdbd2cSJim Jagielski 			break;
3312*b1cdbd2cSJim Jagielski 		case FIELD_ID_DOCINFO_CREATION_TIME:
3313*b1cdbd2cSJim Jagielski 			eElement = XML_CREATION_TIME;
3314*b1cdbd2cSJim Jagielski 			break;
3315*b1cdbd2cSJim Jagielski 		case FIELD_ID_DOCINFO_DESCRIPTION:
3316*b1cdbd2cSJim Jagielski 			eElement = XML_DESCRIPTION;
3317*b1cdbd2cSJim Jagielski 			break;
3318*b1cdbd2cSJim Jagielski 		case FIELD_ID_DOCINFO_PRINT_TIME:
3319*b1cdbd2cSJim Jagielski 			eElement = XML_PRINT_TIME;
3320*b1cdbd2cSJim Jagielski 			break;
3321*b1cdbd2cSJim Jagielski 		case FIELD_ID_DOCINFO_PRINT_DATE:
3322*b1cdbd2cSJim Jagielski 			eElement = XML_PRINT_DATE;
3323*b1cdbd2cSJim Jagielski 			break;
3324*b1cdbd2cSJim Jagielski 		case FIELD_ID_DOCINFO_PRINT_AUTHOR:
3325*b1cdbd2cSJim Jagielski 			eElement = XML_PRINTED_BY;
3326*b1cdbd2cSJim Jagielski 			break;
3327*b1cdbd2cSJim Jagielski 		case FIELD_ID_DOCINFO_TITLE:
3328*b1cdbd2cSJim Jagielski 			eElement = XML_TITLE;
3329*b1cdbd2cSJim Jagielski 			break;
3330*b1cdbd2cSJim Jagielski 		case FIELD_ID_DOCINFO_SUBJECT:
3331*b1cdbd2cSJim Jagielski 			eElement = XML_SUBJECT;
3332*b1cdbd2cSJim Jagielski 			break;
3333*b1cdbd2cSJim Jagielski 		case FIELD_ID_DOCINFO_KEYWORDS:
3334*b1cdbd2cSJim Jagielski 			eElement = XML_KEYWORDS;
3335*b1cdbd2cSJim Jagielski 			break;
3336*b1cdbd2cSJim Jagielski 		case FIELD_ID_DOCINFO_REVISION:
3337*b1cdbd2cSJim Jagielski 			eElement = XML_EDITING_CYCLES;
3338*b1cdbd2cSJim Jagielski 			break;
3339*b1cdbd2cSJim Jagielski 		case FIELD_ID_DOCINFO_EDIT_DURATION:
3340*b1cdbd2cSJim Jagielski 			eElement = XML_EDITING_DURATION;
3341*b1cdbd2cSJim Jagielski 			break;
3342*b1cdbd2cSJim Jagielski 		case FIELD_ID_DOCINFO_SAVE_TIME:
3343*b1cdbd2cSJim Jagielski 			eElement = XML_MODIFICATION_TIME;
3344*b1cdbd2cSJim Jagielski 			break;
3345*b1cdbd2cSJim Jagielski 		case FIELD_ID_DOCINFO_SAVE_DATE:
3346*b1cdbd2cSJim Jagielski 			eElement = XML_MODIFICATION_DATE;
3347*b1cdbd2cSJim Jagielski 			break;
3348*b1cdbd2cSJim Jagielski 		case FIELD_ID_DOCINFO_SAVE_AUTHOR:
3349*b1cdbd2cSJim Jagielski 			eElement = XML_CREATOR;
3350*b1cdbd2cSJim Jagielski 			break;
3351*b1cdbd2cSJim Jagielski 		default:
3352*b1cdbd2cSJim Jagielski 			DBG_WARNING("unknown docinfo field type!");
3353*b1cdbd2cSJim Jagielski 			eElement = XML_TOKEN_INVALID;
3354*b1cdbd2cSJim Jagielski 			break;
3355*b1cdbd2cSJim Jagielski 	}
3356*b1cdbd2cSJim Jagielski 
3357*b1cdbd2cSJim Jagielski 	return eElement;
3358*b1cdbd2cSJim Jagielski }
3359*b1cdbd2cSJim Jagielski 
MapBibliographyFieldName(OUString sName)3360*b1cdbd2cSJim Jagielski enum XMLTokenEnum XMLTextFieldExport::MapBibliographyFieldName(OUString sName)
3361*b1cdbd2cSJim Jagielski {
3362*b1cdbd2cSJim Jagielski 	enum XMLTokenEnum eName = XML_TOKEN_INVALID;
3363*b1cdbd2cSJim Jagielski 
3364*b1cdbd2cSJim Jagielski 	if (sName.equalsAsciiL("Identifier", sizeof("Identifier")-1))
3365*b1cdbd2cSJim Jagielski 	{
3366*b1cdbd2cSJim Jagielski 		eName = XML_IDENTIFIER;
3367*b1cdbd2cSJim Jagielski 	}
3368*b1cdbd2cSJim Jagielski 	else if (sName.equalsAsciiL("BibiliographicType",
3369*b1cdbd2cSJim Jagielski 								sizeof("BibiliographicType")-1))
3370*b1cdbd2cSJim Jagielski 	{
3371*b1cdbd2cSJim Jagielski 		eName = XML_BIBLIOGRAPHY_TYPE;
3372*b1cdbd2cSJim Jagielski 	}
3373*b1cdbd2cSJim Jagielski 	else if (sName.equalsAsciiL("Address", sizeof("Address")-1))
3374*b1cdbd2cSJim Jagielski 	{
3375*b1cdbd2cSJim Jagielski 		eName = XML_ADDRESS;
3376*b1cdbd2cSJim Jagielski 	}
3377*b1cdbd2cSJim Jagielski 	else if (sName.equalsAsciiL("Annote", sizeof("Annote")-1))
3378*b1cdbd2cSJim Jagielski 	{
3379*b1cdbd2cSJim Jagielski 		eName = XML_ANNOTE;
3380*b1cdbd2cSJim Jagielski 	}
3381*b1cdbd2cSJim Jagielski 	else if (sName.equalsAsciiL("Author", sizeof("Author")-1))
3382*b1cdbd2cSJim Jagielski 	{
3383*b1cdbd2cSJim Jagielski 		eName = XML_AUTHOR;
3384*b1cdbd2cSJim Jagielski 	}
3385*b1cdbd2cSJim Jagielski 	else if (sName.equalsAsciiL("Booktitle", sizeof("Booktitle")-1))
3386*b1cdbd2cSJim Jagielski 	{
3387*b1cdbd2cSJim Jagielski 		eName = XML_BOOKTITLE;
3388*b1cdbd2cSJim Jagielski 	}
3389*b1cdbd2cSJim Jagielski 	else if (sName.equalsAsciiL("Chapter", sizeof("Chapter")-1))
3390*b1cdbd2cSJim Jagielski 	{
3391*b1cdbd2cSJim Jagielski 		eName = XML_CHAPTER;
3392*b1cdbd2cSJim Jagielski 	}
3393*b1cdbd2cSJim Jagielski 	else if (sName.equalsAsciiL("Edition", sizeof("Edition")-1))
3394*b1cdbd2cSJim Jagielski 	{
3395*b1cdbd2cSJim Jagielski 		eName = XML_EDITION;
3396*b1cdbd2cSJim Jagielski 	}
3397*b1cdbd2cSJim Jagielski 	else if (sName.equalsAsciiL("Editor", sizeof("Editor")-1))
3398*b1cdbd2cSJim Jagielski 	{
3399*b1cdbd2cSJim Jagielski 		eName = XML_EDITOR;
3400*b1cdbd2cSJim Jagielski 	}
3401*b1cdbd2cSJim Jagielski 	else if (sName.equalsAsciiL("Howpublished", sizeof("Howpublished")-1))
3402*b1cdbd2cSJim Jagielski 	{
3403*b1cdbd2cSJim Jagielski 		eName = XML_HOWPUBLISHED;
3404*b1cdbd2cSJim Jagielski 	}
3405*b1cdbd2cSJim Jagielski 	else if (sName.equalsAsciiL("Institution", sizeof("Institution")-1))
3406*b1cdbd2cSJim Jagielski 	{
3407*b1cdbd2cSJim Jagielski 		eName = XML_INSTITUTION;
3408*b1cdbd2cSJim Jagielski 	}
3409*b1cdbd2cSJim Jagielski 	else if (sName.equalsAsciiL("Journal", sizeof("Journal")-1))
3410*b1cdbd2cSJim Jagielski 	{
3411*b1cdbd2cSJim Jagielski 		eName = XML_JOURNAL;
3412*b1cdbd2cSJim Jagielski 	}
3413*b1cdbd2cSJim Jagielski 	else if (sName.equalsAsciiL("Month", sizeof("Month")-1))
3414*b1cdbd2cSJim Jagielski 	{
3415*b1cdbd2cSJim Jagielski 		eName = XML_MONTH;
3416*b1cdbd2cSJim Jagielski 	}
3417*b1cdbd2cSJim Jagielski 	else if (sName.equalsAsciiL("Note", sizeof("Note")-1))
3418*b1cdbd2cSJim Jagielski 	{
3419*b1cdbd2cSJim Jagielski 		eName = XML_NOTE;
3420*b1cdbd2cSJim Jagielski 	}
3421*b1cdbd2cSJim Jagielski 	else if (sName.equalsAsciiL("Number", sizeof("Number")-1))
3422*b1cdbd2cSJim Jagielski 	{
3423*b1cdbd2cSJim Jagielski 		eName = XML_NUMBER;
3424*b1cdbd2cSJim Jagielski 	}
3425*b1cdbd2cSJim Jagielski 	else if (sName.equalsAsciiL("Organizations", sizeof("Organizations")-1))
3426*b1cdbd2cSJim Jagielski 	{
3427*b1cdbd2cSJim Jagielski 		eName = XML_ORGANIZATIONS;
3428*b1cdbd2cSJim Jagielski 	}
3429*b1cdbd2cSJim Jagielski 	else if (sName.equalsAsciiL("Pages", sizeof("Pages")-1))
3430*b1cdbd2cSJim Jagielski 	{
3431*b1cdbd2cSJim Jagielski 		eName = XML_PAGES;
3432*b1cdbd2cSJim Jagielski 	}
3433*b1cdbd2cSJim Jagielski 	else if (sName.equalsAsciiL("Publisher", sizeof("Publisher")-1))
3434*b1cdbd2cSJim Jagielski 	{
3435*b1cdbd2cSJim Jagielski 		eName = XML_PUBLISHER;
3436*b1cdbd2cSJim Jagielski 	}
3437*b1cdbd2cSJim Jagielski 	else if (sName.equalsAsciiL("School", sizeof("School")-1))
3438*b1cdbd2cSJim Jagielski 	{
3439*b1cdbd2cSJim Jagielski 		eName = XML_SCHOOL;
3440*b1cdbd2cSJim Jagielski 	}
3441*b1cdbd2cSJim Jagielski 	else if (sName.equalsAsciiL("Series", sizeof("Series")-1))
3442*b1cdbd2cSJim Jagielski 	{
3443*b1cdbd2cSJim Jagielski 		eName = XML_SERIES;
3444*b1cdbd2cSJim Jagielski 	}
3445*b1cdbd2cSJim Jagielski 	else if (sName.equalsAsciiL("Title", sizeof("Title")-1))
3446*b1cdbd2cSJim Jagielski 	{
3447*b1cdbd2cSJim Jagielski 		eName = XML_TITLE;
3448*b1cdbd2cSJim Jagielski 	}
3449*b1cdbd2cSJim Jagielski 	else if (sName.equalsAsciiL("Report_Type", sizeof("Report_Type")-1))
3450*b1cdbd2cSJim Jagielski 	{
3451*b1cdbd2cSJim Jagielski 		eName = XML_REPORT_TYPE;
3452*b1cdbd2cSJim Jagielski 	}
3453*b1cdbd2cSJim Jagielski 	else if (sName.equalsAsciiL("Volume", sizeof("Volume")-1))
3454*b1cdbd2cSJim Jagielski 	{
3455*b1cdbd2cSJim Jagielski 		eName = XML_VOLUME;
3456*b1cdbd2cSJim Jagielski 	}
3457*b1cdbd2cSJim Jagielski 	else if (sName.equalsAsciiL("Year", sizeof("Year")-1))
3458*b1cdbd2cSJim Jagielski 	{
3459*b1cdbd2cSJim Jagielski 		eName = XML_YEAR;
3460*b1cdbd2cSJim Jagielski 	}
3461*b1cdbd2cSJim Jagielski 	else if (sName.equalsAsciiL("URL", sizeof("URL")-1))
3462*b1cdbd2cSJim Jagielski 	{
3463*b1cdbd2cSJim Jagielski 		eName = XML_URL;
3464*b1cdbd2cSJim Jagielski 	}
3465*b1cdbd2cSJim Jagielski 	else if (sName.equalsAsciiL("Custom1", sizeof("Custom1")-1))
3466*b1cdbd2cSJim Jagielski 	{
3467*b1cdbd2cSJim Jagielski 		eName = XML_CUSTOM1;
3468*b1cdbd2cSJim Jagielski 	}
3469*b1cdbd2cSJim Jagielski 	else if (sName.equalsAsciiL("Custom2", sizeof("Custom2")-1))
3470*b1cdbd2cSJim Jagielski 	{
3471*b1cdbd2cSJim Jagielski 		eName = XML_CUSTOM2;
3472*b1cdbd2cSJim Jagielski 	}
3473*b1cdbd2cSJim Jagielski 	else if (sName.equalsAsciiL("Custom3", sizeof("Custom3")-1))
3474*b1cdbd2cSJim Jagielski 	{
3475*b1cdbd2cSJim Jagielski 		eName = XML_CUSTOM3;
3476*b1cdbd2cSJim Jagielski 	}
3477*b1cdbd2cSJim Jagielski 	else if (sName.equalsAsciiL("Custom4", sizeof("Custom4")-1))
3478*b1cdbd2cSJim Jagielski 	{
3479*b1cdbd2cSJim Jagielski 		eName = XML_CUSTOM4;
3480*b1cdbd2cSJim Jagielski 	}
3481*b1cdbd2cSJim Jagielski 	else if (sName.equalsAsciiL("Custom5", sizeof("Custom5")-1))
3482*b1cdbd2cSJim Jagielski 	{
3483*b1cdbd2cSJim Jagielski 		eName = XML_CUSTOM5;
3484*b1cdbd2cSJim Jagielski 	}
3485*b1cdbd2cSJim Jagielski 	else if (sName.equalsAsciiL("ISBN", sizeof("ISBN")-1))
3486*b1cdbd2cSJim Jagielski 	{
3487*b1cdbd2cSJim Jagielski 		eName = XML_ISBN;
3488*b1cdbd2cSJim Jagielski 	}
3489*b1cdbd2cSJim Jagielski 	else
3490*b1cdbd2cSJim Jagielski 	{
3491*b1cdbd2cSJim Jagielski 		DBG_ERROR("Unknown bibliography info data");
3492*b1cdbd2cSJim Jagielski 		eName = XML_TOKEN_INVALID;
3493*b1cdbd2cSJim Jagielski 	}
3494*b1cdbd2cSJim Jagielski 
3495*b1cdbd2cSJim Jagielski 	return eName;
3496*b1cdbd2cSJim Jagielski }
3497*b1cdbd2cSJim Jagielski 
MapMeasureKind(sal_Int16 nKind)3498*b1cdbd2cSJim Jagielski enum XMLTokenEnum XMLTextFieldExport::MapMeasureKind(sal_Int16 nKind)
3499*b1cdbd2cSJim Jagielski {
3500*b1cdbd2cSJim Jagielski 	switch( nKind )
3501*b1cdbd2cSJim Jagielski 	{
3502*b1cdbd2cSJim Jagielski 	case 0:
3503*b1cdbd2cSJim Jagielski 		return XML_VALUE;
3504*b1cdbd2cSJim Jagielski 	case 1:
3505*b1cdbd2cSJim Jagielski 		return XML_UNIT;
3506*b1cdbd2cSJim Jagielski 	}
3507*b1cdbd2cSJim Jagielski 	return XML_GAP;
3508*b1cdbd2cSJim Jagielski }
3509*b1cdbd2cSJim Jagielski 
MakeFootnoteRefName(sal_Int16 nSeqNo)3510*b1cdbd2cSJim Jagielski OUString XMLTextFieldExport::MakeFootnoteRefName(
3511*b1cdbd2cSJim Jagielski 	sal_Int16 nSeqNo)
3512*b1cdbd2cSJim Jagielski {
3513*b1cdbd2cSJim Jagielski 	// generate foot-/endnote ID
3514*b1cdbd2cSJim Jagielski 	OUStringBuffer aBuf;
3515*b1cdbd2cSJim Jagielski 	aBuf.appendAscii("ftn");
3516*b1cdbd2cSJim Jagielski 	aBuf.append((sal_Int32)nSeqNo);
3517*b1cdbd2cSJim Jagielski 	return aBuf.makeStringAndClear();
3518*b1cdbd2cSJim Jagielski }
3519*b1cdbd2cSJim Jagielski 
MakeSequenceRefName(sal_Int16 nSeqNo,const OUString & rSeqName)3520*b1cdbd2cSJim Jagielski OUString XMLTextFieldExport::MakeSequenceRefName(
3521*b1cdbd2cSJim Jagielski 	sal_Int16 nSeqNo,
3522*b1cdbd2cSJim Jagielski 	const OUString& rSeqName)
3523*b1cdbd2cSJim Jagielski {
3524*b1cdbd2cSJim Jagielski 	// generate foot-/endnote ID
3525*b1cdbd2cSJim Jagielski 	OUStringBuffer aBuf;
3526*b1cdbd2cSJim Jagielski 	aBuf.appendAscii("ref");
3527*b1cdbd2cSJim Jagielski 	aBuf.append(rSeqName);
3528*b1cdbd2cSJim Jagielski 	aBuf.append((sal_Int32)nSeqNo);
3529*b1cdbd2cSJim Jagielski 	return aBuf.makeStringAndClear();
3530*b1cdbd2cSJim Jagielski }
3531*b1cdbd2cSJim Jagielski 
3532*b1cdbd2cSJim Jagielski //
3533*b1cdbd2cSJim Jagielski // Property accessor helper functions
3534*b1cdbd2cSJim Jagielski //
3535*b1cdbd2cSJim Jagielski 
3536*b1cdbd2cSJim Jagielski // to be relegated (does that word exist?) to a more appropriate place
3537*b1cdbd2cSJim Jagielski //
3538*b1cdbd2cSJim Jagielski 
3539*b1cdbd2cSJim Jagielski 
GetBoolProperty(const OUString & sPropName,const Reference<XPropertySet> & xPropSet)3540*b1cdbd2cSJim Jagielski inline sal_Bool GetBoolProperty(
3541*b1cdbd2cSJim Jagielski 	const OUString& sPropName,
3542*b1cdbd2cSJim Jagielski 	const Reference<XPropertySet> & xPropSet)
3543*b1cdbd2cSJim Jagielski {
3544*b1cdbd2cSJim Jagielski 	Any aAny = xPropSet->getPropertyValue(sPropName);
3545*b1cdbd2cSJim Jagielski 	sal_Bool bBool = *(sal_Bool *)aAny.getValue();
3546*b1cdbd2cSJim Jagielski 	return bBool;
3547*b1cdbd2cSJim Jagielski }
3548*b1cdbd2cSJim Jagielski 
GetOptionalBoolProperty(const OUString & sPropName,const Reference<XPropertySet> & xPropSet,const Reference<XPropertySetInfo> & xPropSetInfo,sal_Bool bDefault)3549*b1cdbd2cSJim Jagielski inline sal_Bool GetOptionalBoolProperty(
3550*b1cdbd2cSJim Jagielski     const OUString& sPropName,
3551*b1cdbd2cSJim Jagielski     const Reference<XPropertySet> & xPropSet,
3552*b1cdbd2cSJim Jagielski     const Reference<XPropertySetInfo> & xPropSetInfo,
3553*b1cdbd2cSJim Jagielski     sal_Bool bDefault)
3554*b1cdbd2cSJim Jagielski {
3555*b1cdbd2cSJim Jagielski     return xPropSetInfo->hasPropertyByName( sPropName )
3556*b1cdbd2cSJim Jagielski         ? GetBoolProperty( sPropName, xPropSet ) : bDefault;
3557*b1cdbd2cSJim Jagielski }
3558*b1cdbd2cSJim Jagielski 
GetDoubleProperty(const OUString & sPropName,const Reference<XPropertySet> & xPropSet)3559*b1cdbd2cSJim Jagielski inline double GetDoubleProperty(
3560*b1cdbd2cSJim Jagielski 	const OUString& sPropName,
3561*b1cdbd2cSJim Jagielski 	const Reference<XPropertySet> & xPropSet)
3562*b1cdbd2cSJim Jagielski {
3563*b1cdbd2cSJim Jagielski 	Any aAny = xPropSet->getPropertyValue(sPropName);
3564*b1cdbd2cSJim Jagielski 	double fDouble = 0.0;
3565*b1cdbd2cSJim Jagielski 	aAny >>= fDouble;
3566*b1cdbd2cSJim Jagielski 	return fDouble;
3567*b1cdbd2cSJim Jagielski }
3568*b1cdbd2cSJim Jagielski 
GetStringProperty(const OUString & sPropName,const Reference<XPropertySet> & xPropSet)3569*b1cdbd2cSJim Jagielski inline OUString const GetStringProperty(
3570*b1cdbd2cSJim Jagielski 	const OUString& sPropName,
3571*b1cdbd2cSJim Jagielski 	const Reference<XPropertySet> & xPropSet)
3572*b1cdbd2cSJim Jagielski {
3573*b1cdbd2cSJim Jagielski 	Any aAny = xPropSet->getPropertyValue(sPropName);
3574*b1cdbd2cSJim Jagielski 	OUString sString;
3575*b1cdbd2cSJim Jagielski 	aAny >>= sString;
3576*b1cdbd2cSJim Jagielski 	return sString;
3577*b1cdbd2cSJim Jagielski }
3578*b1cdbd2cSJim Jagielski 
GetIntProperty(const OUString & sPropName,const Reference<XPropertySet> & xPropSet)3579*b1cdbd2cSJim Jagielski inline sal_Int32 GetIntProperty(
3580*b1cdbd2cSJim Jagielski 	const OUString& sPropName,
3581*b1cdbd2cSJim Jagielski 	const Reference<XPropertySet> & xPropSet)
3582*b1cdbd2cSJim Jagielski {
3583*b1cdbd2cSJim Jagielski 	Any aAny = xPropSet->getPropertyValue(sPropName);
3584*b1cdbd2cSJim Jagielski 	sal_Int32 nInt = 0;
3585*b1cdbd2cSJim Jagielski 	aAny >>= nInt;
3586*b1cdbd2cSJim Jagielski 	return nInt;
3587*b1cdbd2cSJim Jagielski }
3588*b1cdbd2cSJim Jagielski 
GetInt16Property(const OUString & sPropName,const Reference<XPropertySet> & xPropSet)3589*b1cdbd2cSJim Jagielski inline sal_Int16 GetInt16Property(
3590*b1cdbd2cSJim Jagielski 	const OUString& sPropName,
3591*b1cdbd2cSJim Jagielski 	const Reference<XPropertySet> & xPropSet)
3592*b1cdbd2cSJim Jagielski {
3593*b1cdbd2cSJim Jagielski 	Any aAny = xPropSet->getPropertyValue(sPropName);
3594*b1cdbd2cSJim Jagielski 	sal_Int16 nInt = 0;
3595*b1cdbd2cSJim Jagielski 	aAny >>= nInt;
3596*b1cdbd2cSJim Jagielski 	return nInt;
3597*b1cdbd2cSJim Jagielski }
3598*b1cdbd2cSJim Jagielski 
GetInt8Property(const OUString & sPropName,const Reference<XPropertySet> & xPropSet)3599*b1cdbd2cSJim Jagielski inline sal_Int8 GetInt8Property(
3600*b1cdbd2cSJim Jagielski 	const OUString& sPropName,
3601*b1cdbd2cSJim Jagielski 	const Reference<XPropertySet> & xPropSet)
3602*b1cdbd2cSJim Jagielski {
3603*b1cdbd2cSJim Jagielski 	Any aAny = xPropSet->getPropertyValue(sPropName);
3604*b1cdbd2cSJim Jagielski 	sal_Int8 nInt = 0;
3605*b1cdbd2cSJim Jagielski 	aAny >>= nInt;
3606*b1cdbd2cSJim Jagielski 	return nInt;
3607*b1cdbd2cSJim Jagielski }
3608*b1cdbd2cSJim Jagielski 
GetDateTimeProperty(const OUString & sPropName,const Reference<XPropertySet> & xPropSet)3609*b1cdbd2cSJim Jagielski inline DateTime const GetDateTimeProperty(
3610*b1cdbd2cSJim Jagielski 	const OUString& sPropName,
3611*b1cdbd2cSJim Jagielski 	const Reference<XPropertySet> & xPropSet)
3612*b1cdbd2cSJim Jagielski {
3613*b1cdbd2cSJim Jagielski 	Any aAny = xPropSet->getPropertyValue(sPropName);
3614*b1cdbd2cSJim Jagielski 	DateTime aTime;
3615*b1cdbd2cSJim Jagielski 	aAny >>= aTime;
3616*b1cdbd2cSJim Jagielski 	return aTime;
3617*b1cdbd2cSJim Jagielski }
3618*b1cdbd2cSJim Jagielski 
GetDateProperty(const OUString & sPropName,const Reference<XPropertySet> & xPropSet)3619*b1cdbd2cSJim Jagielski inline Date const GetDateProperty(
3620*b1cdbd2cSJim Jagielski 	const OUString& sPropName,
3621*b1cdbd2cSJim Jagielski 	const Reference<XPropertySet> & xPropSet)
3622*b1cdbd2cSJim Jagielski {
3623*b1cdbd2cSJim Jagielski 	Any aAny = xPropSet->getPropertyValue(sPropName);
3624*b1cdbd2cSJim Jagielski 	Date aDate;
3625*b1cdbd2cSJim Jagielski 	aAny >>= aDate;
3626*b1cdbd2cSJim Jagielski 	return aDate;
3627*b1cdbd2cSJim Jagielski }
3628*b1cdbd2cSJim Jagielski 
GetStringSequenceProperty(const OUString & sPropName,const Reference<XPropertySet> & xPropSet)3629*b1cdbd2cSJim Jagielski inline Sequence<OUString> const GetStringSequenceProperty(
3630*b1cdbd2cSJim Jagielski 	const OUString& sPropName,
3631*b1cdbd2cSJim Jagielski 	const Reference<XPropertySet> & xPropSet)
3632*b1cdbd2cSJim Jagielski {
3633*b1cdbd2cSJim Jagielski 	Any aAny = xPropSet->getPropertyValue(sPropName);
3634*b1cdbd2cSJim Jagielski 	Sequence<OUString> aSequence;
3635*b1cdbd2cSJim Jagielski 	aAny >>= aSequence;
3636*b1cdbd2cSJim Jagielski 	return aSequence;
3637*b1cdbd2cSJim Jagielski }
3638