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