|  | /************************************************************** | 
|  | * | 
|  | * Licensed to the Apache Software Foundation (ASF) under one | 
|  | * or more contributor license agreements.  See the NOTICE file | 
|  | * distributed with this work for additional information | 
|  | * regarding copyright ownership.  The ASF licenses this file | 
|  | * to you under the Apache License, Version 2.0 (the | 
|  | * "License"); you may not use this file except in compliance | 
|  | * with the License.  You may obtain a copy of the License at | 
|  | * | 
|  | *   http://www.apache.org/licenses/LICENSE-2.0 | 
|  | * | 
|  | * Unless required by applicable law or agreed to in writing, | 
|  | * software distributed under the License is distributed on an | 
|  | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | 
|  | * KIND, either express or implied.  See the License for the | 
|  | * specific language governing permissions and limitations | 
|  | * under the License. | 
|  | * | 
|  | *************************************************************/ | 
|  |  | 
|  |  | 
|  |  | 
|  | // MARKER(update_precomp.py): autogen include statement, do not remove | 
|  | #include "precompiled_xmloff.hxx" | 
|  |  | 
|  | #include <vector> | 
|  |  | 
|  | #include <boost/scoped_array.hpp> | 
|  | #include <boost/tuple/tuple.hpp> | 
|  |  | 
|  | #include <tools/solar.h> | 
|  | #include <tools/debug.hxx> | 
|  | #ifndef _SVSTDARR_STRINGSDTOR_DECL | 
|  | #define _SVSTDARR_STRINGSDTOR | 
|  | #include <svl/svstdarr.hxx> | 
|  | #endif | 
|  | #include <com/sun/star/beans/XPropertySet.hpp> | 
|  | #include <com/sun/star/beans/PropertyValue.hpp> | 
|  | #include <com/sun/star/container/XEnumerationAccess.hpp> | 
|  | #include <com/sun/star/container/XNameContainer.hpp> | 
|  | #include <com/sun/star/style/XStyleFamiliesSupplier.hpp> | 
|  | #include <com/sun/star/text/XTextCursor.hpp> | 
|  | #include <com/sun/star/text/XChapterNumberingSupplier.hpp> | 
|  | #include <com/sun/star/text/XTextFramesSupplier.hpp> | 
|  | #include <com/sun/star/text/XTextGraphicObjectsSupplier.hpp> | 
|  | #include <com/sun/star/text/XTextEmbeddedObjectsSupplier.hpp> | 
|  | #include <com/sun/star/text/TextContentAnchorType.hpp> | 
|  | #include <com/sun/star/text/XTextFrame.hpp> | 
|  | #include <com/sun/star/text/XFormField.hpp> | 
|  | #include <com/sun/star/drawing/XShapes.hpp> | 
|  | #include <com/sun/star/util/DateTime.hpp> | 
|  | #include <com/sun/star/lang/XMultiServiceFactory.hpp> | 
|  | #include <com/sun/star/ucb/XAnyCompareFactory.hpp> | 
|  | #include <com/sun/star/container/XNamed.hpp> | 
|  | #include <xmloff/xmltoken.hxx> | 
|  | #include "xmloff/xmlnmspe.hxx" | 
|  | #include <xmloff/txtstyli.hxx> | 
|  | #include <xmloff/families.hxx> | 
|  | #include <xmloff/xmlnumfi.hxx> | 
|  | #include <xmloff/xmlnumi.hxx> | 
|  | #include <xmloff/xmlictxt.hxx> | 
|  | #include <xmloff/xmlimppr.hxx> | 
|  |  | 
|  | #include "txtparai.hxx" | 
|  | #include <xmloff/txtimp.hxx> | 
|  | #include <xmloff/txtprmap.hxx> | 
|  | #include "xmloff/txtimppr.hxx" | 
|  | #include <xmloff/xmlimp.hxx> | 
|  | #include "txtvfldi.hxx" | 
|  | #include "xmloff/i18nmap.hxx" | 
|  | #include "XMLTextListItemContext.hxx" | 
|  | #include "XMLTextListBlockContext.hxx" | 
|  | #include "XMLTextFrameContext.hxx" | 
|  | #include "XMLPropertyBackpatcher.hxx" | 
|  | #include "XMLTextFrameHyperlinkContext.hxx" | 
|  | #include "XMLSectionImportContext.hxx" | 
|  | #include "XMLIndexTOCContext.hxx" | 
|  | #include <xmloff/XMLFontStylesContext.hxx> | 
|  | #include <xmloff/ProgressBarHelper.hxx> | 
|  | #include <xmloff/nmspmap.hxx> | 
|  | #include <xmloff/XMLEventsImportContext.hxx> | 
|  | #include "XMLTrackedChangesImportContext.hxx" | 
|  | #include "XMLChangeImportContext.hxx" | 
|  | #include "XMLAutoMarkFileContext.hxx" | 
|  |  | 
|  | #include "XMLCalculationSettingsContext.hxx" | 
|  | #include <xmloff/formsimp.hxx> | 
|  | #include "XMLNumberStylesImport.hxx" | 
|  | #include <com/sun/star/beans/XPropertyState.hpp> | 
|  |  | 
|  | #include <txtlists.hxx> | 
|  | #include <xmloff/odffields.hxx> | 
|  | #include <comphelper/stlunosequence.hxx> | 
|  |  | 
|  | using ::rtl::OUString; | 
|  | using ::rtl::OUStringBuffer; | 
|  | using ::com::sun::star::ucb::XAnyCompare; | 
|  |  | 
|  | using namespace ::std; | 
|  | using namespace ::com::sun::star; | 
|  | using namespace ::com::sun::star::uno; | 
|  | using namespace ::com::sun::star::beans; | 
|  | using namespace ::com::sun::star::text; | 
|  | using namespace ::com::sun::star::frame; | 
|  | using namespace ::com::sun::star::style; | 
|  | using namespace ::com::sun::star::container; | 
|  | using namespace ::com::sun::star::drawing; | 
|  | using namespace ::com::sun::star::xml::sax; | 
|  | using namespace ::com::sun::star::lang; | 
|  | using namespace ::xmloff::token; | 
|  | using ::com::sun::star::util::DateTime; | 
|  | using namespace ::com::sun::star::ucb; | 
|  | using namespace ::com::sun::star; | 
|  | using ::comphelper::UStringLess; | 
|  |  | 
|  |  | 
|  |  | 
|  | static __FAR_DATA SvXMLTokenMapEntry aTextElemTokenMap[] = | 
|  | { | 
|  | { XML_NAMESPACE_TEXT, XML_P, 				XML_TOK_TEXT_P				}, | 
|  | { XML_NAMESPACE_TEXT, XML_H, 				XML_TOK_TEXT_H				}, | 
|  | { XML_NAMESPACE_TEXT, XML_LIST, 			XML_TOK_TEXT_LIST			}, | 
|  | { XML_NAMESPACE_DRAW, XML_FRAME, 			XML_TOK_TEXT_FRAME_PAGE 	}, | 
|  | { XML_NAMESPACE_DRAW, XML_A, 				XML_TOK_DRAW_A_PAGE }, | 
|  | { XML_NAMESPACE_TABLE,XML_TABLE,			XML_TOK_TABLE_TABLE 		}, | 
|  | //	{ XML_NAMESPACE_TABLE,XML_SUB_TABLE,		XML_TOK_TABLE_SUBTABLE 		}, | 
|  | { XML_NAMESPACE_TEXT, XML_VARIABLE_DECLS,	XML_TOK_TEXT_VARFIELD_DECLS }, | 
|  | { XML_NAMESPACE_TEXT, XML_USER_FIELD_DECLS, XML_TOK_TEXT_USERFIELD_DECLS }, | 
|  | { XML_NAMESPACE_TEXT, XML_SEQUENCE_DECLS,	XML_TOK_TEXT_SEQUENCE_DECLS }, | 
|  | { XML_NAMESPACE_TEXT, XML_DDE_CONNECTION_DECLS, XML_TOK_TEXT_DDE_DECLS }, | 
|  | { XML_NAMESPACE_TEXT, XML_SECTION,			XML_TOK_TEXT_SECTION }, | 
|  | { XML_NAMESPACE_TEXT, XML_TABLE_OF_CONTENT, XML_TOK_TEXT_TOC }, | 
|  | { XML_NAMESPACE_TEXT, XML_OBJECT_INDEX, 	XML_TOK_TEXT_OBJECT_INDEX }, | 
|  | { XML_NAMESPACE_TEXT, XML_TABLE_INDEX,		XML_TOK_TEXT_TABLE_INDEX }, | 
|  | { XML_NAMESPACE_TEXT, XML_ILLUSTRATION_INDEX, XML_TOK_TEXT_ILLUSTRATION_INDEX }, | 
|  | { XML_NAMESPACE_TEXT, XML_USER_INDEX,		XML_TOK_TEXT_USER_INDEX }, | 
|  | { XML_NAMESPACE_TEXT, XML_ALPHABETICAL_INDEX, XML_TOK_TEXT_ALPHABETICAL_INDEX }, | 
|  | { XML_NAMESPACE_TEXT, XML_BIBLIOGRAPHY,     XML_TOK_TEXT_BIBLIOGRAPHY_INDEX }, | 
|  | { XML_NAMESPACE_TEXT, XML_INDEX_TITLE,		XML_TOK_TEXT_INDEX_TITLE }, | 
|  | { XML_NAMESPACE_TEXT, XML_TRACKED_CHANGES,  XML_TOK_TEXT_TRACKED_CHANGES }, | 
|  | { XML_NAMESPACE_TEXT, XML_CHANGE_START,	    XML_TOK_TEXT_CHANGE_START }, | 
|  | { XML_NAMESPACE_TEXT, XML_CHANGE_END, 		XML_TOK_TEXT_CHANGE_END }, | 
|  | { XML_NAMESPACE_TEXT, XML_CHANGE, 			XML_TOK_TEXT_CHANGE }, | 
|  | { XML_NAMESPACE_OFFICE, XML_FORMS,			XML_TOK_TEXT_FORMS }, | 
|  | { XML_NAMESPACE_TABLE, XML_CALCULATION_SETTINGS,	XML_TOK_TEXT_CALCULATION_SETTINGS }, | 
|  | { XML_NAMESPACE_TEXT, XML_ALPHABETICAL_INDEX_AUTO_MARK_FILE, XML_TOK_TEXT_AUTOMARK }, | 
|  | // --> FLR #i52127# | 
|  | { XML_NAMESPACE_TEXT, XML_NUMBERED_PARAGRAPH, XML_TOK_TEXT_NUMBERED_PARAGRAPH	}, | 
|  | // <-- | 
|  |  | 
|  | XML_TOKEN_MAP_END | 
|  | }; | 
|  |  | 
|  | static __FAR_DATA SvXMLTokenMapEntry aTextPElemTokenMap[] = | 
|  | { | 
|  | { XML_NAMESPACE_TEXT, XML_SPAN, XML_TOK_TEXT_SPAN }, | 
|  | { XML_NAMESPACE_TEXT, XML_TAB, XML_TOK_TEXT_TAB_STOP }, | 
|  | { XML_NAMESPACE_TEXT, XML_LINE_BREAK, XML_TOK_TEXT_LINE_BREAK }, | 
|  | { XML_NAMESPACE_TEXT, XML_SOFT_PAGE_BREAK, XML_TOK_TEXT_SOFT_PAGE_BREAK }, | 
|  | { XML_NAMESPACE_TEXT, XML_S, XML_TOK_TEXT_S }, | 
|  | { XML_NAMESPACE_TEXT, XML_A, XML_TOK_TEXT_HYPERLINK }, | 
|  | { XML_NAMESPACE_TEXT, XML_RUBY, XML_TOK_TEXT_RUBY }, | 
|  |  | 
|  | { XML_NAMESPACE_TEXT, XML_NOTE, XML_TOK_TEXT_NOTE }, | 
|  | { XML_NAMESPACE_TEXT, XML_BOOKMARK, XML_TOK_TEXT_BOOKMARK }, | 
|  | { XML_NAMESPACE_TEXT, XML_BOOKMARK_START, XML_TOK_TEXT_BOOKMARK_START }, | 
|  | { XML_NAMESPACE_TEXT, XML_BOOKMARK_END, XML_TOK_TEXT_BOOKMARK_END }, | 
|  | { XML_NAMESPACE_TEXT, XML_REFERENCE_MARK, XML_TOK_TEXT_REFERENCE }, | 
|  | { XML_NAMESPACE_TEXT, XML_REFERENCE_MARK_START, | 
|  | XML_TOK_TEXT_REFERENCE_START }, | 
|  | { XML_NAMESPACE_TEXT, XML_REFERENCE_MARK_END, | 
|  | XML_TOK_TEXT_REFERENCE_END }, | 
|  |  | 
|  | { XML_NAMESPACE_DRAW, XML_FRAME, XML_TOK_TEXT_FRAME }, | 
|  | { XML_NAMESPACE_DRAW, XML_A, 				XML_TOK_DRAW_A }, | 
|  |  | 
|  | // index marks | 
|  | { XML_NAMESPACE_TEXT, XML_TOC_MARK, XML_TOK_TEXT_TOC_MARK }, | 
|  | { XML_NAMESPACE_TEXT, XML_TOC_MARK_START, XML_TOK_TEXT_TOC_MARK_START }, | 
|  | { XML_NAMESPACE_TEXT, XML_TOC_MARK_END, XML_TOK_TEXT_TOC_MARK_END }, | 
|  | { XML_NAMESPACE_TEXT, XML_USER_INDEX_MARK, XML_TOK_TEXT_USER_INDEX_MARK }, | 
|  | { XML_NAMESPACE_TEXT, XML_USER_INDEX_MARK_START, | 
|  | XML_TOK_TEXT_USER_INDEX_MARK_START }, | 
|  | { XML_NAMESPACE_TEXT, XML_USER_INDEX_MARK_END, | 
|  | XML_TOK_TEXT_USER_INDEX_MARK_END }, | 
|  | { XML_NAMESPACE_TEXT, XML_ALPHABETICAL_INDEX_MARK, | 
|  | XML_TOK_TEXT_ALPHA_INDEX_MARK }, | 
|  | { XML_NAMESPACE_TEXT, XML_ALPHABETICAL_INDEX_MARK_START, | 
|  | XML_TOK_TEXT_ALPHA_INDEX_MARK_START }, | 
|  | { XML_NAMESPACE_TEXT, XML_ALPHABETICAL_INDEX_MARK_END, | 
|  | XML_TOK_TEXT_ALPHA_INDEX_MARK_END }, | 
|  |  | 
|  | // sender fields | 
|  | { XML_NAMESPACE_TEXT, XML_SENDER_FIRSTNAME,XML_TOK_TEXT_SENDER_FIRSTNAME}, | 
|  | { XML_NAMESPACE_TEXT, XML_SENDER_LASTNAME, XML_TOK_TEXT_SENDER_LASTNAME }, | 
|  | { XML_NAMESPACE_TEXT, XML_SENDER_INITIALS, XML_TOK_TEXT_SENDER_INITIALS }, | 
|  | { XML_NAMESPACE_TEXT, XML_SENDER_TITLE, XML_TOK_TEXT_SENDER_TITLE }, | 
|  | { XML_NAMESPACE_TEXT, XML_SENDER_POSITION, XML_TOK_TEXT_SENDER_POSITION }, | 
|  | { XML_NAMESPACE_TEXT, XML_SENDER_EMAIL, XML_TOK_TEXT_SENDER_EMAIL }, | 
|  | { XML_NAMESPACE_TEXT, XML_SENDER_PHONE_PRIVATE, XML_TOK_TEXT_SENDER_PHONE_PRIVATE }, | 
|  | { XML_NAMESPACE_TEXT, XML_SENDER_FAX, XML_TOK_TEXT_SENDER_FAX }, | 
|  | { XML_NAMESPACE_TEXT, XML_SENDER_COMPANY, XML_TOK_TEXT_SENDER_COMPANY }, | 
|  | { XML_NAMESPACE_TEXT, XML_SENDER_PHONE_WORK, XML_TOK_TEXT_SENDER_PHONE_WORK }, | 
|  | { XML_NAMESPACE_TEXT, XML_SENDER_STREET, XML_TOK_TEXT_SENDER_STREET }, | 
|  | { XML_NAMESPACE_TEXT, XML_SENDER_CITY, XML_TOK_TEXT_SENDER_CITY }, | 
|  | { XML_NAMESPACE_TEXT, XML_SENDER_POSTAL_CODE, XML_TOK_TEXT_SENDER_POSTAL_CODE }, | 
|  | { XML_NAMESPACE_TEXT, XML_SENDER_COUNTRY, XML_TOK_TEXT_SENDER_COUNTRY }, | 
|  | { XML_NAMESPACE_TEXT, XML_SENDER_STATE_OR_PROVINCE, | 
|  | XML_TOK_TEXT_SENDER_STATE_OR_PROVINCE }, | 
|  |  | 
|  | // misc. document fields | 
|  | { XML_NAMESPACE_TEXT, XML_AUTHOR_NAME, XML_TOK_TEXT_AUTHOR_NAME }, | 
|  | { XML_NAMESPACE_TEXT, XML_AUTHOR_INITIALS, XML_TOK_TEXT_AUTHOR_INITIALS }, | 
|  | { XML_NAMESPACE_TEXT, XML_DATE, XML_TOK_TEXT_DATE }, | 
|  | { XML_NAMESPACE_TEXT, XML_TIME, XML_TOK_TEXT_TIME }, | 
|  | { XML_NAMESPACE_TEXT, XML_PAGE_NUMBER, XML_TOK_TEXT_PAGE_NUMBER }, | 
|  | { XML_NAMESPACE_TEXT, XML_PAGE_CONTINUATION_STRING, | 
|  | XML_TOK_TEXT_PAGE_CONTINUATION_STRING }, | 
|  |  | 
|  | // variable fields | 
|  | { XML_NAMESPACE_TEXT, XML_VARIABLE_SET, XML_TOK_TEXT_VARIABLE_SET }, | 
|  | { XML_NAMESPACE_TEXT, XML_VARIABLE_GET, XML_TOK_TEXT_VARIABLE_GET }, | 
|  | { XML_NAMESPACE_TEXT, XML_VARIABLE_INPUT, XML_TOK_TEXT_VARIABLE_INPUT }, | 
|  | { XML_NAMESPACE_TEXT, XML_USER_FIELD_GET, XML_TOK_TEXT_USER_FIELD_GET }, | 
|  | { XML_NAMESPACE_TEXT, XML_USER_FIELD_INPUT,XML_TOK_TEXT_USER_FIELD_INPUT}, | 
|  | { XML_NAMESPACE_TEXT, XML_SEQUENCE, XML_TOK_TEXT_SEQUENCE }, | 
|  | { XML_NAMESPACE_TEXT, XML_EXPRESSION, XML_TOK_TEXT_EXPRESSION }, | 
|  | { XML_NAMESPACE_TEXT, XML_TEXT_INPUT, XML_TOK_TEXT_TEXT_INPUT }, | 
|  |  | 
|  | // database fields | 
|  | { XML_NAMESPACE_TEXT, XML_DATABASE_DISPLAY, | 
|  | XML_TOK_TEXT_DATABASE_DISPLAY }, | 
|  | { XML_NAMESPACE_TEXT, XML_DATABASE_NEXT, | 
|  | XML_TOK_TEXT_DATABASE_NEXT }, | 
|  | { XML_NAMESPACE_TEXT, XML_DATABASE_ROW_SELECT, | 
|  | XML_TOK_TEXT_DATABASE_SELECT }, | 
|  | { XML_NAMESPACE_TEXT, XML_DATABASE_ROW_NUMBER, | 
|  | XML_TOK_TEXT_DATABASE_ROW_NUMBER }, | 
|  | { XML_NAMESPACE_TEXT, XML_DATABASE_NAME, XML_TOK_TEXT_DATABASE_NAME }, | 
|  |  | 
|  | // docinfo fields | 
|  | { XML_NAMESPACE_TEXT, XML_INITIAL_CREATOR, | 
|  | XML_TOK_TEXT_DOCUMENT_CREATION_AUTHOR }, | 
|  | { XML_NAMESPACE_TEXT, XML_DESCRIPTION, XML_TOK_TEXT_DOCUMENT_DESCRIPTION}, | 
|  | { XML_NAMESPACE_TEXT, XML_PRINTED_BY, XML_TOK_TEXT_DOCUMENT_PRINT_AUTHOR}, | 
|  | { XML_NAMESPACE_TEXT, XML_TITLE, XML_TOK_TEXT_DOCUMENT_TITLE }, | 
|  | { XML_NAMESPACE_TEXT, XML_SUBJECT, XML_TOK_TEXT_DOCUMENT_SUBJECT }, | 
|  | { XML_NAMESPACE_TEXT, XML_KEYWORDS, XML_TOK_TEXT_DOCUMENT_KEYWORDS }, | 
|  | { XML_NAMESPACE_TEXT, XML_CREATOR, XML_TOK_TEXT_DOCUMENT_SAVE_AUTHOR }, | 
|  | { XML_NAMESPACE_TEXT, XML_EDITING_CYCLES, | 
|  | XML_TOK_TEXT_DOCUMENT_REVISION }, | 
|  | { XML_NAMESPACE_TEXT, XML_CREATION_DATE, | 
|  | XML_TOK_TEXT_DOCUMENT_CREATION_DATE }, | 
|  | { XML_NAMESPACE_TEXT, XML_CREATION_TIME, | 
|  | XML_TOK_TEXT_DOCUMENT_CREATION_TIME }, | 
|  | { XML_NAMESPACE_TEXT, XML_PRINT_DATE, XML_TOK_TEXT_DOCUMENT_PRINT_DATE }, | 
|  | { XML_NAMESPACE_TEXT, XML_PRINT_TIME, XML_TOK_TEXT_DOCUMENT_PRINT_TIME }, | 
|  | { XML_NAMESPACE_TEXT, XML_MODIFICATION_DATE, | 
|  | XML_TOK_TEXT_DOCUMENT_SAVE_DATE }, | 
|  | { XML_NAMESPACE_TEXT, XML_MODIFICATION_TIME, | 
|  | XML_TOK_TEXT_DOCUMENT_SAVE_TIME }, | 
|  | { XML_NAMESPACE_TEXT, XML_EDITING_DURATION, | 
|  | XML_TOK_TEXT_DOCUMENT_EDIT_DURATION }, | 
|  | { XML_NAMESPACE_TEXT, XML_USER_DEFINED, | 
|  | XML_TOK_TEXT_DOCUMENT_USER_DEFINED }, | 
|  |  | 
|  | // misc fields | 
|  | { XML_NAMESPACE_TEXT, XML_PLACEHOLDER, XML_TOK_TEXT_PLACEHOLDER }, | 
|  | { XML_NAMESPACE_TEXT, XML_HIDDEN_TEXT, XML_TOK_TEXT_HIDDEN_TEXT }, | 
|  | { XML_NAMESPACE_TEXT, XML_HIDDEN_PARAGRAPH, XML_TOK_TEXT_HIDDEN_PARAGRAPH }, | 
|  | { XML_NAMESPACE_TEXT, XML_CONDITIONAL_TEXT, XML_TOK_TEXT_CONDITIONAL_TEXT }, | 
|  | { XML_NAMESPACE_TEXT, XML_FILE_NAME, XML_TOK_TEXT_FILENAME }, | 
|  | { XML_NAMESPACE_TEXT, XML_CHAPTER,	XML_TOK_TEXT_CHAPTER }, | 
|  | { XML_NAMESPACE_TEXT, XML_TEMPLATE_NAME, XML_TOK_TEXT_TEMPLATENAME }, | 
|  | { XML_NAMESPACE_TEXT, XML_PARAGRAPH_COUNT, XML_TOK_TEXT_PARAGRAPH_COUNT }, | 
|  | { XML_NAMESPACE_TEXT, XML_WORD_COUNT, XML_TOK_TEXT_WORD_COUNT }, | 
|  | { XML_NAMESPACE_TEXT, XML_TABLE_COUNT, XML_TOK_TEXT_TABLE_COUNT }, | 
|  | { XML_NAMESPACE_TEXT, XML_CHARACTER_COUNT, XML_TOK_TEXT_CHARACTER_COUNT }, | 
|  | { XML_NAMESPACE_TEXT, XML_IMAGE_COUNT, XML_TOK_TEXT_IMAGE_COUNT }, | 
|  | { XML_NAMESPACE_TEXT, XML_OBJECT_COUNT, XML_TOK_TEXT_OBJECT_COUNT }, | 
|  | { XML_NAMESPACE_TEXT, XML_PAGE_COUNT, XML_TOK_TEXT_PAGE_COUNT }, | 
|  | { XML_NAMESPACE_TEXT, XML_PAGE_VARIABLE_GET, XML_TOK_TEXT_GET_PAGE_VAR }, | 
|  | { XML_NAMESPACE_TEXT, XML_PAGE_VARIABLE_SET, XML_TOK_TEXT_SET_PAGE_VAR }, | 
|  | { XML_NAMESPACE_TEXT, XML_EXECUTE_MACRO, XML_TOK_TEXT_MACRO }, | 
|  | { XML_NAMESPACE_TEXT, XML_DDE_CONNECTION, XML_TOK_TEXT_DDE }, | 
|  | { XML_NAMESPACE_TEXT, XML_REFERENCE_REF, XML_TOK_TEXT_REFERENCE_REF }, | 
|  | { XML_NAMESPACE_TEXT, XML_BOOKMARK_REF, XML_TOK_TEXT_BOOKMARK_REF }, | 
|  | { XML_NAMESPACE_TEXT, XML_SEQUENCE_REF, XML_TOK_TEXT_SEQUENCE_REF }, | 
|  | { XML_NAMESPACE_TEXT, XML_NOTE_REF, XML_TOK_TEXT_NOTE_REF }, | 
|  | { XML_NAMESPACE_TEXT, XML_BIBLIOGRAPHY_MARK, XML_TOK_TEXT_BIBLIOGRAPHY_MARK }, | 
|  | { XML_NAMESPACE_OFFICE, XML_ANNOTATION, XML_TOK_TEXT_ANNOTATION }, | 
|  | { XML_NAMESPACE_OFFICE, XML_ANNOTATION_END, XML_TOK_TEXT_ANNOTATION_END }, | 
|  | { XML_NAMESPACE_TEXT, XML_SCRIPT, XML_TOK_TEXT_SCRIPT }, | 
|  | { XML_NAMESPACE_TEXT, XML_TABLE_FORMULA, XML_TOK_TEXT_TABLE_FORMULA }, | 
|  | { XML_NAMESPACE_TEXT, XML_DROPDOWN, XML_TOK_TEXT_DROPDOWN }, | 
|  |  | 
|  | // Calc fields | 
|  | { XML_NAMESPACE_TEXT, XML_SHEET_NAME, XML_TOK_TEXT_SHEET_NAME }, | 
|  |  | 
|  | // draw fields | 
|  | { XML_NAMESPACE_TEXT, XML_MEASURE,	XML_TOK_TEXT_MEASURE }, | 
|  |  | 
|  | // RDF metadata | 
|  | { XML_NAMESPACE_TEXT, XML_META,         XML_TOK_TEXT_META }, | 
|  | { XML_NAMESPACE_TEXT, XML_META_FIELD,   XML_TOK_TEXT_META_FIELD }, | 
|  |  | 
|  | // redlining (aka change tracking) | 
|  | { XML_NAMESPACE_TEXT, XML_CHANGE_START, XML_TOK_TEXTP_CHANGE_START }, | 
|  | { XML_NAMESPACE_TEXT, XML_CHANGE_END  , XML_TOK_TEXTP_CHANGE_END }, | 
|  | { XML_NAMESPACE_TEXT, XML_CHANGE, XML_TOK_TEXTP_CHANGE }, | 
|  |  | 
|  | { XML_NAMESPACE_PRESENTATION, XML_HEADER, XML_TOK_DRAW_HEADER }, | 
|  | { XML_NAMESPACE_PRESENTATION, XML_FOOTER, XML_TOK_DRAW_FOOTER }, | 
|  | { XML_NAMESPACE_PRESENTATION, XML_DATE_TIME, XML_TOK_DRAW_DATE_TIME }, | 
|  | { XML_NAMESPACE_TEXT, XML_PAGE_CONTINUATION, XML_TOK_TEXT_PAGE_CONTINUATION }, | 
|  |  | 
|  | { XML_NAMESPACE_FIELD, XML_FIELDMARK, XML_TOK_TEXT_FIELDMARK }, | 
|  | { XML_NAMESPACE_FIELD, XML_FIELDMARK_START, XML_TOK_TEXT_FIELDMARK_START }, | 
|  | { XML_NAMESPACE_FIELD, XML_FIELDMARK_END, XML_TOK_TEXT_FIELDMARK_END }, | 
|  |  | 
|  |  | 
|  | XML_TOKEN_MAP_END | 
|  | }; | 
|  |  | 
|  | static __FAR_DATA SvXMLTokenMapEntry aTextPAttrTokenMap[] = | 
|  | { | 
|  | { XML_NAMESPACE_XML  , XML_ID,			XML_TOK_TEXT_P_XMLID }, | 
|  | { XML_NAMESPACE_XHTML, XML_ABOUT,		XML_TOK_TEXT_P_ABOUT }, | 
|  | { XML_NAMESPACE_XHTML, XML_PROPERTY,	XML_TOK_TEXT_P_PROPERTY }, | 
|  | { XML_NAMESPACE_XHTML, XML_CONTENT,		XML_TOK_TEXT_P_CONTENT }, | 
|  | { XML_NAMESPACE_XHTML, XML_DATATYPE,	XML_TOK_TEXT_P_DATATYPE }, | 
|  | { XML_NAMESPACE_TEXT, XML_ID,           XML_TOK_TEXT_P_TEXTID }, | 
|  | { XML_NAMESPACE_TEXT, XML_STYLE_NAME,	XML_TOK_TEXT_P_STYLE_NAME }, | 
|  | { XML_NAMESPACE_TEXT, XML_COND_STYLE_NAME, | 
|  | XML_TOK_TEXT_P_COND_STYLE_NAME }, | 
|  | { XML_NAMESPACE_TEXT, XML_OUTLINE_LEVEL,XML_TOK_TEXT_P_LEVEL }, | 
|  | { XML_NAMESPACE_TEXT, XML_IS_LIST_HEADER,XML_TOK_TEXT_P_IS_LIST_HEADER }, | 
|  | { XML_NAMESPACE_TEXT, XML_RESTART_NUMBERING,XML_TOK_TEXT_P_RESTART_NUMBERING }, | 
|  | { XML_NAMESPACE_TEXT, XML_START_VALUE,XML_TOK_TEXT_P_START_VALUE }, | 
|  | XML_TOKEN_MAP_END | 
|  | }; | 
|  |  | 
|  | static __FAR_DATA SvXMLTokenMapEntry aTextNumberedParagraphAttrTokenMap[] = | 
|  | { | 
|  | { XML_NAMESPACE_XML , XML_ID,    XML_TOK_TEXT_NUMBERED_PARAGRAPH_XMLID }, | 
|  | { XML_NAMESPACE_TEXT, XML_LIST_ID, | 
|  | XML_TOK_TEXT_NUMBERED_PARAGRAPH_LIST_ID }, | 
|  | { XML_NAMESPACE_TEXT, XML_LEVEL, XML_TOK_TEXT_NUMBERED_PARAGRAPH_LEVEL }, | 
|  | { XML_NAMESPACE_TEXT, XML_STYLE_NAME, | 
|  | XML_TOK_TEXT_NUMBERED_PARAGRAPH_STYLE_NAME }, | 
|  | { XML_NAMESPACE_TEXT, XML_CONTINUE_NUMBERING, | 
|  | XML_TOK_TEXT_NUMBERED_PARAGRAPH_CONTINUE_NUMBERING }, | 
|  | { XML_NAMESPACE_TEXT, XML_START_VALUE, | 
|  | XML_TOK_TEXT_NUMBERED_PARAGRAPH_START_VALUE }, | 
|  | XML_TOKEN_MAP_END | 
|  | }; | 
|  |  | 
|  | static __FAR_DATA SvXMLTokenMapEntry aTextListBlockAttrTokenMap[] = | 
|  | { | 
|  | { XML_NAMESPACE_XML , XML_ID,			XML_TOK_TEXT_LIST_BLOCK_XMLID }, | 
|  | { XML_NAMESPACE_TEXT, XML_STYLE_NAME, | 
|  | XML_TOK_TEXT_LIST_BLOCK_STYLE_NAME }, | 
|  | { XML_NAMESPACE_TEXT, XML_CONTINUE_NUMBERING, | 
|  | XML_TOK_TEXT_LIST_BLOCK_CONTINUE_NUMBERING }, | 
|  | // --> OD 2008-04-22 #refactorlists# | 
|  | { XML_NAMESPACE_TEXT, XML_CONTINUE_LIST, | 
|  | XML_TOK_TEXT_LIST_BLOCK_CONTINUE_LIST }, | 
|  | XML_TOKEN_MAP_END | 
|  | }; | 
|  |  | 
|  | static __FAR_DATA SvXMLTokenMapEntry aTextListBlockElemTokenMap[] = | 
|  | { | 
|  | { XML_NAMESPACE_TEXT, XML_LIST_HEADER, XML_TOK_TEXT_LIST_HEADER }, | 
|  | { XML_NAMESPACE_TEXT, XML_LIST_ITEM, 	XML_TOK_TEXT_LIST_ITEM	 }, | 
|  | XML_TOKEN_MAP_END | 
|  | }; | 
|  |  | 
|  | static __FAR_DATA SvXMLTokenMapEntry aTextFrameAttrTokenMap[] = | 
|  | { | 
|  | { XML_NAMESPACE_DRAW, XML_STYLE_NAME, XML_TOK_TEXT_FRAME_STYLE_NAME }, | 
|  | { XML_NAMESPACE_DRAW, XML_NAME, XML_TOK_TEXT_FRAME_NAME }, | 
|  | { XML_NAMESPACE_TEXT, XML_ANCHOR_TYPE, XML_TOK_TEXT_FRAME_ANCHOR_TYPE }, | 
|  | { XML_NAMESPACE_TEXT, XML_ANCHOR_PAGE_NUMBER, XML_TOK_TEXT_FRAME_ANCHOR_PAGE_NUMBER }, | 
|  | { XML_NAMESPACE_SVG, XML_X, XML_TOK_TEXT_FRAME_X }, | 
|  | { XML_NAMESPACE_SVG, XML_Y, XML_TOK_TEXT_FRAME_Y }, | 
|  | { XML_NAMESPACE_SVG, XML_WIDTH, XML_TOK_TEXT_FRAME_WIDTH }, | 
|  | { XML_NAMESPACE_FO, XML_MIN_WIDTH, XML_TOK_TEXT_FRAME_MIN_WIDTH }, | 
|  | { XML_NAMESPACE_STYLE, XML_REL_WIDTH, XML_TOK_TEXT_FRAME_REL_WIDTH }, | 
|  | { XML_NAMESPACE_SVG, XML_HEIGHT, XML_TOK_TEXT_FRAME_HEIGHT }, | 
|  | { XML_NAMESPACE_FO, XML_MIN_HEIGHT, XML_TOK_TEXT_FRAME_MIN_HEIGHT }, | 
|  | { XML_NAMESPACE_STYLE, XML_REL_HEIGHT, XML_TOK_TEXT_FRAME_REL_HEIGHT }, | 
|  | { XML_NAMESPACE_DRAW, XML_CHAIN_NEXT_NAME, XML_TOK_TEXT_FRAME_NEXT_CHAIN_NAME }, | 
|  | { XML_NAMESPACE_XLINK, XML_HREF, XML_TOK_TEXT_FRAME_HREF }, | 
|  | { XML_NAMESPACE_DRAW, XML_NAME, XML_TOK_TEXT_FRAME_FILTER_NAME }, | 
|  | { XML_NAMESPACE_DRAW, XML_ZINDEX, XML_TOK_TEXT_FRAME_Z_INDEX }, | 
|  | { XML_NAMESPACE_SVG, XML_TRANSFORM, XML_TOK_TEXT_FRAME_TRANSFORM }, | 
|  | { XML_NAMESPACE_DRAW, XML_CLASS_ID, XML_TOK_TEXT_FRAME_CLASS_ID }, | 
|  | { XML_NAMESPACE_DRAW,  	XML_CODE,       	XML_TOK_TEXT_FRAME_CODE }, | 
|  | { XML_NAMESPACE_DRAW,  	XML_OBJECT, 		XML_TOK_TEXT_FRAME_OBJECT }, | 
|  | { XML_NAMESPACE_DRAW,  	XML_ARCHIVE, 		XML_TOK_TEXT_FRAME_ARCHIVE }, | 
|  | { XML_NAMESPACE_DRAW,   XML_MAY_SCRIPT, 	XML_TOK_TEXT_FRAME_MAY_SCRIPT }, | 
|  | { XML_NAMESPACE_DRAW,   XML_MIME_TYPE, 	XML_TOK_TEXT_FRAME_MIME_TYPE }, | 
|  | { XML_NAMESPACE_DRAW, XML_APPLET_NAME, XML_TOK_TEXT_FRAME_APPLET_NAME }, | 
|  | { XML_NAMESPACE_DRAW, XML_FRAME_NAME, XML_TOK_TEXT_FRAME_FRAME_NAME }, | 
|  | { XML_NAMESPACE_DRAW, XML_NOTIFY_ON_UPDATE_OF_RANGES, XML_TOK_TEXT_FRAME_NOTIFY_ON_UPDATE }, | 
|  | { XML_NAMESPACE_DRAW, XML_NOTIFY_ON_UPDATE_OF_TABLE, XML_TOK_TEXT_FRAME_NOTIFY_ON_UPDATE }, | 
|  | XML_TOKEN_MAP_END | 
|  | }; | 
|  |  | 
|  | static __FAR_DATA SvXMLTokenMapEntry aTextContourAttrTokenMap[] = | 
|  | { | 
|  | { XML_NAMESPACE_SVG, XML_WIDTH, 	XML_TOK_TEXT_CONTOUR_WIDTH		}, | 
|  | { XML_NAMESPACE_SVG, XML_HEIGHT,	XML_TOK_TEXT_CONTOUR_HEIGHT		}, | 
|  | { XML_NAMESPACE_SVG, XML_VIEWBOX,	XML_TOK_TEXT_CONTOUR_VIEWBOX	}, | 
|  | { XML_NAMESPACE_SVG, XML_D,	    	XML_TOK_TEXT_CONTOUR_D			}, | 
|  | { XML_NAMESPACE_DRAW,XML_POINTS,	XML_TOK_TEXT_CONTOUR_POINTS		}, | 
|  | { XML_NAMESPACE_DRAW,XML_RECREATE_ON_EDIT,	XML_TOK_TEXT_CONTOUR_AUTO	}, | 
|  | XML_TOKEN_MAP_END | 
|  | }; | 
|  |  | 
|  | static __FAR_DATA SvXMLTokenMapEntry aTextHyperlinkAttrTokenMap[] = | 
|  | { | 
|  | { XML_NAMESPACE_XLINK, XML_HREF, XML_TOK_TEXT_HYPERLINK_HREF }, | 
|  | { XML_NAMESPACE_OFFICE, XML_NAME, XML_TOK_TEXT_HYPERLINK_NAME }, | 
|  | { XML_NAMESPACE_XLINK, XML_SHOW, XML_TOK_TEXT_HYPERLINK_SHOW }, | 
|  | { XML_NAMESPACE_OFFICE, XML_TARGET_FRAME_NAME, XML_TOK_TEXT_HYPERLINK_TARGET_FRAME }, | 
|  | { XML_NAMESPACE_TEXT, XML_STYLE_NAME, XML_TOK_TEXT_HYPERLINK_STYLE_NAME }, | 
|  | { XML_NAMESPACE_TEXT, XML_VISITED_STYLE_NAME, XML_TOK_TEXT_HYPERLINK_VIS_STYLE_NAME }, | 
|  | { XML_NAMESPACE_OFFICE, XML_SERVER_MAP, XML_TOK_TEXT_HYPERLINK_SERVER_MAP }, | 
|  | XML_TOKEN_MAP_END | 
|  | }; | 
|  |  | 
|  | static __FAR_DATA SvXMLTokenMapEntry aTextMasterPageElemTokenMap[] = | 
|  | { | 
|  | { XML_NAMESPACE_STYLE, XML_HEADER, XML_TOK_TEXT_MP_HEADER }, | 
|  | { XML_NAMESPACE_STYLE, XML_FOOTER, XML_TOK_TEXT_MP_FOOTER }, | 
|  | { XML_NAMESPACE_STYLE, XML_HEADER_LEFT, XML_TOK_TEXT_MP_HEADER_LEFT }, | 
|  | { XML_NAMESPACE_STYLE, XML_FOOTER_LEFT, XML_TOK_TEXT_MP_FOOTER_LEFT }, | 
|  |  | 
|  | XML_TOKEN_MAP_END | 
|  | }; | 
|  |  | 
|  | static __FAR_DATA SvXMLTokenMapEntry aTextFieldAttrTokenMap[] = | 
|  | { | 
|  | { XML_NAMESPACE_TEXT, XML_FIXED, XML_TOK_TEXTFIELD_FIXED }, | 
|  | { XML_NAMESPACE_TEXT, XML_DESCRIPTION,  XML_TOK_TEXTFIELD_DESCRIPTION }, | 
|  | { XML_NAMESPACE_TEXT, XML_HELP, XML_TOK_TEXTFIELD_HELP }, | 
|  | { XML_NAMESPACE_TEXT, XML_HINT, XML_TOK_TEXTFIELD_HINT }, | 
|  | { XML_NAMESPACE_TEXT, XML_PLACEHOLDER_TYPE, | 
|  | XML_TOK_TEXTFIELD_PLACEHOLDER_TYPE }, | 
|  | { XML_NAMESPACE_TEXT, XML_NAME, XML_TOK_TEXTFIELD_NAME }, | 
|  | { XML_NAMESPACE_TEXT, XML_FORMULA, XML_TOK_TEXTFIELD_FORMULA }, | 
|  | { XML_NAMESPACE_STYLE, XML_NUM_FORMAT, XML_TOK_TEXTFIELD_NUM_FORMAT }, | 
|  | { XML_NAMESPACE_STYLE, XML_NUM_LETTER_SYNC, | 
|  | XML_TOK_TEXTFIELD_NUM_LETTER_SYNC }, | 
|  | { XML_NAMESPACE_TEXT, XML_DISPLAY_FORMULA, | 
|  | XML_TOK_TEXTFIELD_DISPLAY_FORMULA }, | 
|  | { XML_NAMESPACE_TEXT, XML_VALUE_TYPE, XML_TOK_TEXTFIELD_VALUE_TYPE }, // #i32362#: src680m48++ saves text:value-type | 
|  | { XML_NAMESPACE_OFFICE, XML_VALUE_TYPE, XML_TOK_TEXTFIELD_VALUE_TYPE }, | 
|  | { XML_NAMESPACE_TEXT, XML_VALUE, XML_TOK_TEXTFIELD_VALUE }, | 
|  | { XML_NAMESPACE_OFFICE, XML_VALUE, XML_TOK_TEXTFIELD_VALUE }, | 
|  | { XML_NAMESPACE_TEXT, XML_STRING_VALUE, XML_TOK_TEXTFIELD_STRING_VALUE }, | 
|  | { XML_NAMESPACE_OFFICE, XML_STRING_VALUE, XML_TOK_TEXTFIELD_STRING_VALUE }, | 
|  | { XML_NAMESPACE_TEXT, XML_DATE_VALUE, XML_TOK_TEXTFIELD_DATE_VALUE }, | 
|  | { XML_NAMESPACE_OFFICE, XML_DATE_VALUE, XML_TOK_TEXTFIELD_DATE_VALUE }, | 
|  | { XML_NAMESPACE_TEXT, XML_TIME_VALUE, XML_TOK_TEXTFIELD_TIME_VALUE }, | 
|  | { XML_NAMESPACE_OFFICE, XML_TIME_VALUE, XML_TOK_TEXTFIELD_TIME_VALUE }, | 
|  | { XML_NAMESPACE_OFFICE, XML_BOOLEAN_VALUE, XML_TOK_TEXTFIELD_BOOL_VALUE}, | 
|  | { XML_NAMESPACE_OFFICE, XML_CURRENCY, XML_TOK_TEXTFIELD_CURRENCY}, | 
|  | { XML_NAMESPACE_STYLE, XML_DATA_STYLE_NAME, | 
|  | XML_TOK_TEXTFIELD_DATA_STYLE_NAME }, | 
|  | { XML_NAMESPACE_TEXT, XML_DISPLAY_OUTLINE_LEVEL, | 
|  | XML_TOK_TEXTFIELD_NUMBERING_LEVEL }, | 
|  | { XML_NAMESPACE_TEXT, XML_SEPARATION_CHARACTER, | 
|  | XML_TOK_TEXTFIELD_NUMBERING_SEPARATOR }, | 
|  | { XML_NAMESPACE_TEXT, XML_DISPLAY, XML_TOK_TEXTFIELD_DISPLAY }, | 
|  | { XML_NAMESPACE_TEXT, XML_TIME_ADJUST, XML_TOK_TEXTFIELD_TIME_ADJUST }, | 
|  | { XML_NAMESPACE_TEXT, XML_DATE_ADJUST, XML_TOK_TEXTFIELD_DATE_ADJUST }, | 
|  | { XML_NAMESPACE_TEXT, XML_PAGE_ADJUST, XML_TOK_TEXTFIELD_PAGE_ADJUST }, | 
|  | { XML_NAMESPACE_TEXT, XML_SELECT_PAGE, XML_TOK_TEXTFIELD_SELECT_PAGE }, | 
|  | { XML_NAMESPACE_TEXT, XML_DATABASE_NAME, XML_TOK_TEXTFIELD_DATABASE_NAME}, | 
|  | { XML_NAMESPACE_TEXT, XML_TABLE_NAME, XML_TOK_TEXTFIELD_TABLE_NAME }, | 
|  | { XML_NAMESPACE_TEXT, XML_COLUMN_NAME, XML_TOK_TEXTFIELD_COLUMN_NAME }, | 
|  | { XML_NAMESPACE_TEXT, XML_ROW_NUMBER, XML_TOK_TEXTFIELD_ROW_NUMBER }, | 
|  | { XML_NAMESPACE_TEXT, XML_CONDITION, XML_TOK_TEXTFIELD_CONDITION }, | 
|  | { XML_NAMESPACE_TEXT, XML_STRING_VALUE_IF_TRUE, | 
|  | XML_TOK_TEXTFIELD_STRING_VALUE_IF_TRUE }, | 
|  | { XML_NAMESPACE_TEXT, XML_STRING_VALUE_IF_FALSE, | 
|  | XML_TOK_TEXTFIELD_STRING_VALUE_IF_FALSE }, | 
|  | { XML_NAMESPACE_TEXT, XML_EDITING_CYCLES, XML_TOK_TEXTFIELD_REVISION }, | 
|  | { XML_NAMESPACE_TEXT, XML_OUTLINE_LEVEL, XML_TOK_TEXTFIELD_OUTLINE_LEVEL}, | 
|  | { XML_NAMESPACE_TEXT, XML_ACTIVE, XML_TOK_TEXTFIELD_ACTIVE }, | 
|  | { XML_NAMESPACE_TEXT, XML_NOTE_CLASS, XML_TOK_TEXTFIELD_NOTE_CLASS }, | 
|  | { XML_NAMESPACE_TEXT, XML_REFERENCE_FORMAT, | 
|  | XML_TOK_TEXTFIELD_REFERENCE_FORMAT }, | 
|  | { XML_NAMESPACE_TEXT, XML_REF_NAME, XML_TOK_TEXTFIELD_REF_NAME }, | 
|  | { XML_NAMESPACE_TEXT, XML_CONNECTION_NAME, | 
|  | XML_TOK_TEXTFIELD_CONNECTION_NAME }, | 
|  | { XML_NAMESPACE_XLINK, XML_HREF, XML_TOK_TEXTFIELD_HREF }, | 
|  | { XML_NAMESPACE_OFFICE, XML_TARGET_FRAME_NAME, | 
|  | XML_TOK_TEXTFIELD_TARGET_FRAME }, | 
|  | { XML_NAMESPACE_TEXT, XML_ANNOTATION, XML_TOK_TEXTFIELD_ANNOTATION }, | 
|  | { XML_NAMESPACE_SCRIPT, XML_LANGUAGE, XML_TOK_TEXTFIELD_LANGUAGE }, | 
|  | { XML_NAMESPACE_TEXT, XML_KIND, XML_TOK_TEXTFIELD_MEASURE_KIND }, | 
|  | { XML_NAMESPACE_TEXT, XML_IS_HIDDEN, XML_TOK_TEXTFIELD_IS_HIDDEN }, | 
|  | { XML_NAMESPACE_TEXT, XML_CURRENT_VALUE, | 
|  | XML_TOK_TEXTFIELD_CURRENT_VALUE }, | 
|  | { XML_NAMESPACE_TEXT, XML_TABLE_TYPE, XML_TOK_TEXTFIELD_TABLE_TYPE }, | 
|  | { XML_NAMESPACE_OFFICE, XML_NAME, XML_TOK_TEXT_NAME }, | 
|  |  | 
|  | XML_TOKEN_MAP_END | 
|  | }; | 
|  |  | 
|  |  | 
|  | // maximum allowed length of combined characters field | 
|  | #define MAX_COMBINED_CHARACTERS 6 | 
|  |  | 
|  | struct SAL_DLLPRIVATE XMLTextImportHelper::Impl | 
|  | : private ::boost::noncopyable | 
|  | { | 
|  | ::std::auto_ptr<SvXMLTokenMap> m_pTextElemTokenMap; | 
|  | ::std::auto_ptr<SvXMLTokenMap> m_pTextPElemTokenMap; | 
|  | ::std::auto_ptr<SvXMLTokenMap> m_pTextPAttrTokenMap; | 
|  | ::std::auto_ptr<SvXMLTokenMap> m_pTextFieldAttrTokenMap; | 
|  | ::std::auto_ptr<SvXMLTokenMap> m_pTextNumberedParagraphAttrTokenMap; | 
|  | ::std::auto_ptr<SvXMLTokenMap> m_pTextListBlockAttrTokenMap; | 
|  | ::std::auto_ptr<SvXMLTokenMap> m_pTextListBlockElemTokenMap; | 
|  | ::std::auto_ptr<SvXMLTokenMap> m_pTextFrameAttrTokenMap; | 
|  | ::std::auto_ptr<SvXMLTokenMap> m_pTextContourAttrTokenMap; | 
|  | ::std::auto_ptr<SvXMLTokenMap> m_pTextHyperlinkAttrTokenMap; | 
|  | ::std::auto_ptr<SvXMLTokenMap> m_pTextMasterPageElemTokenMap; | 
|  | ::std::auto_ptr<SvStringsDtor> m_pPrevFrmNames; | 
|  | ::std::auto_ptr<SvStringsDtor> m_pNextFrmNames; | 
|  |  | 
|  | // --> OD 2008-04-25 #refactorlists# | 
|  | ::std::auto_ptr<XMLTextListsHelper> m_pTextListsHelper; | 
|  | // <-- | 
|  |  | 
|  | SvXMLImportContextRef m_xAutoStyles; | 
|  | SvXMLImportContextRef m_xFontDecls; | 
|  |  | 
|  | XMLSectionList_Impl m_SectionList; | 
|  |  | 
|  | UniReference< SvXMLImportPropertyMapper > m_xParaImpPrMap; | 
|  | UniReference< SvXMLImportPropertyMapper > m_xTextImpPrMap; | 
|  | UniReference< SvXMLImportPropertyMapper > m_xFrameImpPrMap; | 
|  | UniReference< SvXMLImportPropertyMapper > m_xSectionImpPrMap; | 
|  | UniReference< SvXMLImportPropertyMapper > m_xRubyImpPrMap; | 
|  |  | 
|  | ::std::auto_ptr<SvI18NMap> m_pRenameMap; | 
|  | // --> OD 2006-10-12 #i69629# - change and extend data structure: | 
|  | // - data structure contains candidates of paragraph styles, which | 
|  | //   will be assigned to the outline style | 
|  | // - data structure contains more than one candidate for each list level | 
|  | //   of the outline style | 
|  | ::boost::scoped_array< ::std::vector< ::rtl::OUString > > | 
|  | m_pOutlineStylesCandidates; | 
|  | // <-- | 
|  |  | 
|  | // start range, xml:id, RDFa stuff | 
|  | typedef ::boost::tuple< | 
|  | uno::Reference<text::XTextRange>, ::rtl::OUString, | 
|  | ::boost::shared_ptr< ::xmloff::ParsedRDFaAttributes > > | 
|  | BookmarkMapEntry_t; | 
|  | /// start ranges for open bookmarks | 
|  | ::std::map< ::rtl::OUString, BookmarkMapEntry_t, | 
|  | ::comphelper::UStringLess> m_BookmarkStartRanges; | 
|  |  | 
|  | typedef ::std::vector< ::rtl::OUString > BookmarkVector_t; | 
|  | BookmarkVector_t m_BookmarkVector; | 
|  |  | 
|  | /// name of the last 'open' redline that started between paragraphs | 
|  | ::rtl::OUString m_sOpenRedlineIdentifier; | 
|  |  | 
|  | uno::Reference<text::XText> m_xText; | 
|  | uno::Reference<text::XTextCursor> m_xCursor; | 
|  | uno::Reference<text::XTextRange> m_xCursorAsRange; | 
|  | uno::Reference<container::XNameContainer> m_xParaStyles; | 
|  | uno::Reference<container::XNameContainer> m_xTextStyles; | 
|  | uno::Reference<container::XNameContainer> m_xNumStyles; | 
|  | uno::Reference<container::XNameContainer> m_xFrameStyles; | 
|  | uno::Reference<container::XNameContainer> m_xPageStyles; | 
|  | uno::Reference<container::XIndexReplace> m_xChapterNumbering; | 
|  | uno::Reference<container::XNameAccess> m_xTextFrames; | 
|  | uno::Reference<container::XNameAccess> m_xGraphics; | 
|  | uno::Reference<container::XNameAccess> m_xObjects; | 
|  | uno::Reference<lang::XMultiServiceFactory> m_xServiceFactory; | 
|  |  | 
|  | SvXMLImport & m_rSvXMLImport; | 
|  |  | 
|  | bool m_bInsertMode : 1; | 
|  | bool m_bStylesOnlyMode : 1; | 
|  | bool m_bBlockMode : 1; | 
|  | bool m_bProgress : 1; | 
|  | bool m_bOrganizerMode : 1; | 
|  | bool m_bBodyContentStarted : 1; | 
|  |  | 
|  | // #107848# | 
|  | // One more flag to remember if we are inside a deleted redline section | 
|  | bool m_bInsideDeleteContext : 1; | 
|  |  | 
|  | typedef ::std::pair< ::rtl::OUString, ::rtl::OUString> field_name_type_t; | 
|  | typedef ::std::pair< ::rtl::OUString, ::rtl::OUString > field_param_t; | 
|  | typedef ::std::vector< field_param_t > field_params_t; | 
|  | typedef ::std::pair< field_name_type_t, field_params_t > field_stack_item_t; | 
|  | typedef ::std::stack< field_stack_item_t > field_stack_t; | 
|  |  | 
|  | field_stack_t m_FieldStack; | 
|  |  | 
|  | ::rtl::OUString m_sCellParaStyleDefault; | 
|  |  | 
|  | Impl(       uno::Reference<frame::XModel> const& rModel, | 
|  | SvXMLImport & rImport, | 
|  | bool const bInsertMode, bool const bStylesOnlyMode, | 
|  | bool const bProgress, bool const bBlockMode, | 
|  | bool const bOrganizerMode) | 
|  | :   m_pTextElemTokenMap( 0 ) | 
|  | ,   m_pTextPElemTokenMap( 0 ) | 
|  | ,   m_pTextPAttrTokenMap( 0 ) | 
|  | ,   m_pTextFieldAttrTokenMap( 0 ) | 
|  | ,   m_pTextNumberedParagraphAttrTokenMap( 0 ) | 
|  | ,   m_pTextListBlockAttrTokenMap( 0 ) | 
|  | ,   m_pTextListBlockElemTokenMap( 0 ) | 
|  | ,   m_pTextFrameAttrTokenMap( 0 ) | 
|  | ,   m_pTextContourAttrTokenMap( 0 ) | 
|  | ,   m_pTextHyperlinkAttrTokenMap( 0 ) | 
|  | ,   m_pTextMasterPageElemTokenMap( 0 ) | 
|  | ,   m_pPrevFrmNames( 0 ) | 
|  | ,   m_pNextFrmNames( 0 ) | 
|  | // --> OD 2008-04-25 #refactorlists# | 
|  | ,   m_pTextListsHelper( new XMLTextListsHelper() ) | 
|  | // <-- | 
|  | ,   m_pRenameMap( 0 ) | 
|  | // --> OD 2006-10-12 #i69629# | 
|  | ,   m_pOutlineStylesCandidates( 0 ) | 
|  | // <-- | 
|  | ,   m_xServiceFactory( rModel, UNO_QUERY ) | 
|  | ,   m_rSvXMLImport( rImport ) | 
|  | ,   m_bInsertMode( bInsertMode ) | 
|  | ,   m_bStylesOnlyMode( bStylesOnlyMode ) | 
|  | ,   m_bBlockMode( bBlockMode ) | 
|  | ,   m_bProgress( bProgress ) | 
|  | ,   m_bOrganizerMode( bOrganizerMode ) | 
|  | ,   m_bBodyContentStarted( true ) | 
|  | // #107848# Initialize inside_deleted_section flag correctly | 
|  | ,   m_bInsideDeleteContext( false ) | 
|  | { | 
|  | } | 
|  |  | 
|  | void InitOutlineStylesCandidates() | 
|  | { | 
|  | if (!m_pOutlineStylesCandidates) | 
|  | { | 
|  | size_t const size(m_xChapterNumbering->getCount()); | 
|  | m_pOutlineStylesCandidates.reset( | 
|  | new ::std::vector< ::rtl::OUString >[size] ); | 
|  | } | 
|  | } | 
|  |  | 
|  | }; | 
|  |  | 
|  |  | 
|  | uno::Reference< text::XText > & XMLTextImportHelper::GetText() | 
|  | { | 
|  | return m_pImpl->m_xText; | 
|  | } | 
|  |  | 
|  | uno::Reference< text::XTextCursor > & XMLTextImportHelper::GetCursor() | 
|  | { | 
|  | return m_pImpl->m_xCursor; | 
|  | } | 
|  |  | 
|  | uno::Reference< text::XTextRange > & XMLTextImportHelper::GetCursorAsRange() | 
|  | { | 
|  | return m_pImpl->m_xCursorAsRange; | 
|  | } | 
|  |  | 
|  | bool XMLTextImportHelper::IsInsertMode() const | 
|  | { | 
|  | return m_pImpl->m_bInsertMode; | 
|  | } | 
|  |  | 
|  | bool XMLTextImportHelper::IsStylesOnlyMode() const | 
|  | { | 
|  | return m_pImpl->m_bStylesOnlyMode; | 
|  | } | 
|  |  | 
|  | bool XMLTextImportHelper::IsBlockMode() const | 
|  | { | 
|  | return m_pImpl->m_bBlockMode; | 
|  | } | 
|  |  | 
|  | bool XMLTextImportHelper::IsOrganizerMode() const | 
|  | { | 
|  | return m_pImpl->m_bOrganizerMode; | 
|  | } | 
|  |  | 
|  | bool XMLTextImportHelper::IsProgress() const | 
|  | { | 
|  | return m_pImpl->m_bProgress; | 
|  | } | 
|  |  | 
|  | XMLSectionList_Impl & XMLTextImportHelper::GetSectionList() | 
|  | { | 
|  | return m_pImpl->m_SectionList; | 
|  | } | 
|  |  | 
|  | uno::Reference<container::XNameContainer> const& | 
|  | XMLTextImportHelper::GetParaStyles() const | 
|  | { | 
|  | return m_pImpl->m_xParaStyles; | 
|  | } | 
|  |  | 
|  | uno::Reference<container::XNameContainer> const& | 
|  | XMLTextImportHelper::GetTextStyles() const | 
|  | { | 
|  | return m_pImpl->m_xTextStyles; | 
|  | } | 
|  |  | 
|  | uno::Reference<container::XNameContainer> const& | 
|  | XMLTextImportHelper::GetNumberingStyles() const | 
|  | { | 
|  | return m_pImpl->m_xNumStyles; | 
|  | } | 
|  |  | 
|  | uno::Reference<container::XNameContainer> const& | 
|  | XMLTextImportHelper::GetFrameStyles() const | 
|  | { | 
|  | return m_pImpl->m_xFrameStyles; | 
|  | } | 
|  |  | 
|  | uno::Reference<container::XNameContainer> const& | 
|  | XMLTextImportHelper::GetPageStyles() const | 
|  | { | 
|  | return m_pImpl->m_xPageStyles; | 
|  | } | 
|  |  | 
|  | uno::Reference<container::XIndexReplace> const& | 
|  | XMLTextImportHelper::GetChapterNumbering() const | 
|  | { | 
|  | return m_pImpl->m_xChapterNumbering; | 
|  | } | 
|  |  | 
|  | UniReference< SvXMLImportPropertyMapper > const& | 
|  | XMLTextImportHelper::GetParaImportPropertySetMapper() const | 
|  | { | 
|  | return m_pImpl->m_xParaImpPrMap; | 
|  | } | 
|  |  | 
|  | UniReference< SvXMLImportPropertyMapper > const& | 
|  | XMLTextImportHelper::GetTextImportPropertySetMapper() const | 
|  | { | 
|  | return m_pImpl->m_xTextImpPrMap; | 
|  | } | 
|  |  | 
|  | UniReference< SvXMLImportPropertyMapper > const& | 
|  | XMLTextImportHelper::GetFrameImportPropertySetMapper() const | 
|  | { | 
|  | return m_pImpl->m_xFrameImpPrMap; | 
|  | } | 
|  |  | 
|  | UniReference< SvXMLImportPropertyMapper > const& | 
|  | XMLTextImportHelper::GetSectionImportPropertySetMapper() const | 
|  | { | 
|  | return m_pImpl->m_xSectionImpPrMap; | 
|  | } | 
|  |  | 
|  | UniReference< SvXMLImportPropertyMapper > const& | 
|  | XMLTextImportHelper::GetRubyImportPropertySetMapper() const | 
|  | { | 
|  | return m_pImpl->m_xRubyImpPrMap; | 
|  | } | 
|  |  | 
|  | void XMLTextImportHelper::SetInsideDeleteContext(bool const bNew) | 
|  | { | 
|  | m_pImpl->m_bInsideDeleteContext = bNew; | 
|  | } | 
|  |  | 
|  | bool XMLTextImportHelper::IsInsideDeleteContext() const | 
|  | { | 
|  | return m_pImpl->m_bInsideDeleteContext; | 
|  | } | 
|  |  | 
|  | SvXMLImport & XMLTextImportHelper::GetXMLImport() | 
|  | { | 
|  | return m_pImpl->m_rSvXMLImport; | 
|  | } | 
|  |  | 
|  | XMLTextListsHelper & XMLTextImportHelper::GetTextListHelper() | 
|  | { | 
|  | return *m_pImpl->m_pTextListsHelper; | 
|  | } | 
|  |  | 
|  | const SvXMLTokenMap& XMLTextImportHelper::GetTextElemTokenMap() | 
|  | { | 
|  | if (!m_pImpl->m_pTextElemTokenMap.get()) | 
|  | { | 
|  | m_pImpl->m_pTextElemTokenMap.reset( | 
|  | new SvXMLTokenMap( aTextElemTokenMap )); | 
|  | } | 
|  | return *m_pImpl->m_pTextElemTokenMap; | 
|  | } | 
|  |  | 
|  | const SvXMLTokenMap& XMLTextImportHelper::GetTextPElemTokenMap() | 
|  | { | 
|  | if (!m_pImpl->m_pTextPElemTokenMap.get()) | 
|  | { | 
|  | m_pImpl->m_pTextPElemTokenMap.reset( | 
|  | new SvXMLTokenMap( aTextPElemTokenMap )); | 
|  | } | 
|  | return *m_pImpl->m_pTextPElemTokenMap; | 
|  | } | 
|  |  | 
|  | const SvXMLTokenMap& XMLTextImportHelper::GetTextPAttrTokenMap() | 
|  | { | 
|  | if (!m_pImpl->m_pTextPAttrTokenMap.get()) | 
|  | { | 
|  | m_pImpl->m_pTextPAttrTokenMap.reset( | 
|  | new SvXMLTokenMap( aTextPAttrTokenMap )); | 
|  | } | 
|  | return *m_pImpl->m_pTextPAttrTokenMap; | 
|  | } | 
|  |  | 
|  | const SvXMLTokenMap& XMLTextImportHelper::GetTextFrameAttrTokenMap() | 
|  | { | 
|  | if (!m_pImpl->m_pTextFrameAttrTokenMap.get()) | 
|  | { | 
|  | m_pImpl->m_pTextFrameAttrTokenMap.reset( | 
|  | new SvXMLTokenMap( aTextFrameAttrTokenMap )); | 
|  | } | 
|  | return *m_pImpl->m_pTextFrameAttrTokenMap; | 
|  | } | 
|  |  | 
|  | const SvXMLTokenMap& XMLTextImportHelper::GetTextContourAttrTokenMap() | 
|  | { | 
|  | if (!m_pImpl->m_pTextContourAttrTokenMap.get()) | 
|  | { | 
|  | m_pImpl->m_pTextContourAttrTokenMap.reset( | 
|  | new SvXMLTokenMap( aTextContourAttrTokenMap )); | 
|  | } | 
|  | return *m_pImpl->m_pTextContourAttrTokenMap; | 
|  | } | 
|  |  | 
|  | const SvXMLTokenMap& XMLTextImportHelper::GetTextHyperlinkAttrTokenMap() | 
|  | { | 
|  | if (!m_pImpl->m_pTextHyperlinkAttrTokenMap.get()) | 
|  | { | 
|  | m_pImpl->m_pTextHyperlinkAttrTokenMap.reset( | 
|  | new SvXMLTokenMap( aTextHyperlinkAttrTokenMap )); | 
|  | } | 
|  | return *m_pImpl->m_pTextHyperlinkAttrTokenMap; | 
|  | } | 
|  |  | 
|  | const SvXMLTokenMap& XMLTextImportHelper::GetTextMasterPageElemTokenMap() | 
|  | { | 
|  | if (!m_pImpl->m_pTextMasterPageElemTokenMap.get()) | 
|  | { | 
|  | m_pImpl->m_pTextMasterPageElemTokenMap.reset( | 
|  | new SvXMLTokenMap( aTextMasterPageElemTokenMap )); | 
|  | } | 
|  | return *m_pImpl->m_pTextMasterPageElemTokenMap; | 
|  | } | 
|  |  | 
|  | const SvXMLTokenMap& XMLTextImportHelper::GetTextFieldAttrTokenMap() | 
|  | { | 
|  | if (!m_pImpl->m_pTextFieldAttrTokenMap.get()) | 
|  | { | 
|  | m_pImpl->m_pTextFieldAttrTokenMap.reset( | 
|  | new SvXMLTokenMap( aTextFieldAttrTokenMap )); | 
|  | } | 
|  | return *m_pImpl->m_pTextFieldAttrTokenMap; | 
|  | } | 
|  |  | 
|  |  | 
|  | namespace | 
|  | { | 
|  | class FieldParamImporter | 
|  | { | 
|  | public: | 
|  | typedef pair<OUString,OUString> field_param_t; | 
|  | typedef vector<field_param_t> field_params_t; | 
|  | FieldParamImporter(const field_params_t* const pInParams, Reference<XNameContainer> xOutParams) | 
|  | : m_pInParams(pInParams) | 
|  | , m_xOutParams(xOutParams) | 
|  | { }; | 
|  | void Import(); | 
|  |  | 
|  | private: | 
|  | const field_params_t* const m_pInParams; | 
|  | Reference<XNameContainer> m_xOutParams; | 
|  | }; | 
|  |  | 
|  | void FieldParamImporter::Import() | 
|  | { | 
|  | ::std::vector<OUString> vListEntries; | 
|  | ::std::map<OUString, Any> vOutParams; | 
|  | for(field_params_t::const_iterator pCurrent = m_pInParams->begin(); | 
|  | pCurrent != m_pInParams->end(); | 
|  | ++pCurrent) | 
|  | { | 
|  | if(pCurrent->first.equalsAscii(ODF_FORMDROPDOWN_RESULT)) | 
|  | { | 
|  | // sal_Int32 | 
|  | vOutParams[pCurrent->first] = makeAny(pCurrent->second.toInt32()); | 
|  | } | 
|  | else if(pCurrent->first.equalsAscii(ODF_FORMCHECKBOX_RESULT)) | 
|  | { | 
|  | // bool | 
|  | vOutParams[pCurrent->first] = makeAny(pCurrent->second.toBoolean()); | 
|  | } | 
|  | else if(pCurrent->first.equalsAscii(ODF_FORMDROPDOWN_LISTENTRY)) | 
|  | { | 
|  | // sequence | 
|  | vListEntries.push_back(pCurrent->second); | 
|  | } | 
|  | else | 
|  | vOutParams[pCurrent->first] = makeAny(pCurrent->second); | 
|  | } | 
|  | if(!vListEntries.empty()) | 
|  | { | 
|  | Sequence<OUString> vListEntriesSeq(vListEntries.size()); | 
|  | copy(vListEntries.begin(), vListEntries.end(), ::comphelper::stl_begin(vListEntriesSeq)); | 
|  | vOutParams[OUString::createFromAscii(ODF_FORMDROPDOWN_LISTENTRY)] = makeAny(vListEntriesSeq); | 
|  | } | 
|  | for(::std::map<OUString, Any>::const_iterator pCurrent = vOutParams.begin(); | 
|  | pCurrent != vOutParams.end(); | 
|  | ++pCurrent) | 
|  | { | 
|  | try | 
|  | { | 
|  | m_xOutParams->insertByName(pCurrent->first, pCurrent->second); | 
|  | } | 
|  | catch(ElementExistException) | 
|  | { } | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | XMLTextImportHelper::XMLTextImportHelper( | 
|  | uno::Reference<frame::XModel> const& rModel, | 
|  | SvXMLImport& rImport, | 
|  | bool const bInsertMode, bool const bStylesOnlyMode, | 
|  | bool const bProgress, bool const bBlockMode, | 
|  | bool const bOrganizerMode) | 
|  | : m_pImpl( new Impl(rModel, rImport, bInsertMode, bStylesOnlyMode, | 
|  | bProgress, bBlockMode, bOrganizerMode) ) | 
|  | , m_pBackpatcherImpl( MakeBackpatcherImpl() ) | 
|  | { | 
|  | static ::rtl::OUString s_PropNameDefaultListId( | 
|  | RTL_CONSTASCII_USTRINGPARAM("DefaultListId")); | 
|  |  | 
|  | Reference< XChapterNumberingSupplier > xCNSupplier( rModel, UNO_QUERY ); | 
|  |  | 
|  | if( xCNSupplier.is() ) | 
|  | { | 
|  | m_pImpl->m_xChapterNumbering = xCNSupplier->getChapterNumberingRules(); | 
|  | // --> OD 2008-05-15 #refactorlists# | 
|  | if (m_pImpl->m_xChapterNumbering.is()) | 
|  | { | 
|  | Reference< XPropertySet > const xNumRuleProps( | 
|  | m_pImpl->m_xChapterNumbering, UNO_QUERY); | 
|  | if ( xNumRuleProps.is() ) | 
|  | { | 
|  | Reference< XPropertySetInfo > xNumRulePropSetInfo( | 
|  | xNumRuleProps->getPropertySetInfo()); | 
|  | if (xNumRulePropSetInfo.is() && | 
|  | xNumRulePropSetInfo->hasPropertyByName( | 
|  | s_PropNameDefaultListId)) | 
|  | { | 
|  | ::rtl::OUString sListId; | 
|  | xNumRuleProps->getPropertyValue(s_PropNameDefaultListId) | 
|  | >>= sListId; | 
|  | DBG_ASSERT( sListId.getLength() != 0, | 
|  | "no default list id found at chapter numbering rules instance. Serious defect -> please inform OD." ); | 
|  | if ( sListId.getLength() ) | 
|  | { | 
|  | Reference< XNamed > const xChapterNumNamed( | 
|  | m_pImpl->m_xChapterNumbering, UNO_QUERY); | 
|  | if ( xChapterNumNamed.is() ) | 
|  | { | 
|  | m_pImpl->m_pTextListsHelper->KeepListAsProcessed( | 
|  | sListId, | 
|  | xChapterNumNamed->getName(), | 
|  | ::rtl::OUString() ); | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  | // <-- | 
|  | } | 
|  |  | 
|  | Reference< XStyleFamiliesSupplier > xFamiliesSupp( rModel, UNO_QUERY ); | 
|  | //	DBG_ASSERT( xFamiliesSupp.is(), "no chapter numbering supplier" ); for clipboard there may be documents without styles | 
|  |  | 
|  | if( xFamiliesSupp.is() ) | 
|  | { | 
|  | Reference< XNameAccess > xFamilies(xFamiliesSupp->getStyleFamilies()); | 
|  |  | 
|  | const OUString aParaStyles(RTL_CONSTASCII_USTRINGPARAM("ParagraphStyles")); | 
|  | if( xFamilies->hasByName( aParaStyles ) ) | 
|  | { | 
|  | m_pImpl->m_xParaStyles.set(xFamilies->getByName(aParaStyles), | 
|  | UNO_QUERY); | 
|  | } | 
|  |  | 
|  | const OUString aCharStyles(RTL_CONSTASCII_USTRINGPARAM("CharacterStyles")); | 
|  | if( xFamilies->hasByName( aCharStyles ) ) | 
|  | { | 
|  | m_pImpl->m_xTextStyles.set(xFamilies->getByName(aCharStyles), | 
|  | UNO_QUERY); | 
|  | } | 
|  |  | 
|  | const OUString aNumStyles(RTL_CONSTASCII_USTRINGPARAM("NumberingStyles")); | 
|  | if( xFamilies->hasByName( aNumStyles ) ) | 
|  | { | 
|  | m_pImpl->m_xNumStyles.set(xFamilies->getByName(aNumStyles), | 
|  | UNO_QUERY); | 
|  | } | 
|  |  | 
|  | const OUString aFrameStyles(RTL_CONSTASCII_USTRINGPARAM("FrameStyles")); | 
|  | if( xFamilies->hasByName( aFrameStyles ) ) | 
|  | { | 
|  | m_pImpl->m_xFrameStyles.set(xFamilies->getByName(aFrameStyles), | 
|  | UNO_QUERY); | 
|  | } | 
|  |  | 
|  | const OUString aPageStyles(RTL_CONSTASCII_USTRINGPARAM("PageStyles")); | 
|  | if( xFamilies->hasByName( aPageStyles ) ) | 
|  | { | 
|  | m_pImpl->m_xPageStyles.set(xFamilies->getByName(aPageStyles), | 
|  | UNO_QUERY); | 
|  | } | 
|  | } | 
|  |  | 
|  | Reference < XTextFramesSupplier > xTFS( rModel, UNO_QUERY ); | 
|  | if( xTFS.is() ) | 
|  | { | 
|  | m_pImpl->m_xTextFrames.set(xTFS->getTextFrames()); | 
|  | } | 
|  |  | 
|  | Reference < XTextGraphicObjectsSupplier > xTGOS( rModel, UNO_QUERY ); | 
|  | if( xTGOS.is() ) | 
|  | { | 
|  | m_pImpl->m_xGraphics.set(xTGOS->getGraphicObjects()); | 
|  | } | 
|  |  | 
|  | Reference < XTextEmbeddedObjectsSupplier > xTEOS( rModel, UNO_QUERY ); | 
|  | if( xTEOS.is() ) | 
|  | { | 
|  | m_pImpl->m_xObjects.set(xTEOS->getEmbeddedObjects()); | 
|  | } | 
|  |  | 
|  | XMLPropertySetMapper *pPropMapper = | 
|  | new XMLTextPropertySetMapper( TEXT_PROP_MAP_PARA ); | 
|  | m_pImpl->m_xParaImpPrMap = | 
|  | new XMLTextImportPropertyMapper( pPropMapper, rImport ); | 
|  |  | 
|  | pPropMapper = new XMLTextPropertySetMapper( TEXT_PROP_MAP_TEXT ); | 
|  | m_pImpl->m_xTextImpPrMap = | 
|  | new XMLTextImportPropertyMapper( pPropMapper, rImport ); | 
|  |  | 
|  | pPropMapper = new XMLTextPropertySetMapper( TEXT_PROP_MAP_FRAME ); | 
|  | m_pImpl->m_xFrameImpPrMap = | 
|  | new XMLTextImportPropertyMapper( pPropMapper, rImport ); | 
|  |  | 
|  | pPropMapper = new XMLTextPropertySetMapper( TEXT_PROP_MAP_SECTION ); | 
|  | m_pImpl->m_xSectionImpPrMap = | 
|  | new XMLTextImportPropertyMapper( pPropMapper, rImport ); | 
|  |  | 
|  | pPropMapper = new XMLTextPropertySetMapper( TEXT_PROP_MAP_RUBY ); | 
|  | m_pImpl->m_xRubyImpPrMap = | 
|  | new SvXMLImportPropertyMapper( pPropMapper, rImport ); | 
|  | } | 
|  |  | 
|  | XMLTextImportHelper::~XMLTextImportHelper() | 
|  | { | 
|  | } | 
|  |  | 
|  | SvXMLImportPropertyMapper *XMLTextImportHelper::CreateShapeExtPropMapper(SvXMLImport& rImport) | 
|  | { | 
|  | XMLPropertySetMapper *pPropMapper = | 
|  | new XMLTextPropertySetMapper( TEXT_PROP_MAP_FRAME ); | 
|  | return new XMLTextImportPropertyMapper( pPropMapper, rImport, | 
|  | const_cast<XMLFontStylesContext*>(rImport.GetFontDecls()) ); | 
|  | } | 
|  |  | 
|  | SvXMLImportPropertyMapper *XMLTextImportHelper::CreateCharExtPropMapper(SvXMLImport& rImport, XMLFontStylesContext *pFontDecls) | 
|  | { | 
|  | XMLPropertySetMapper *pPropMapper = | 
|  | new XMLTextPropertySetMapper( TEXT_PROP_MAP_TEXT ); | 
|  | if (!pFontDecls) | 
|  | pFontDecls = const_cast<XMLFontStylesContext*>(rImport.GetFontDecls()); | 
|  | return new XMLTextImportPropertyMapper( pPropMapper, rImport, pFontDecls ); | 
|  | } | 
|  |  | 
|  | SvXMLImportPropertyMapper *XMLTextImportHelper::CreateParaExtPropMapper(SvXMLImport& rImport, XMLFontStylesContext *pFontDecls) | 
|  | { | 
|  | XMLPropertySetMapper *pPropMapper = | 
|  | new XMLTextPropertySetMapper( TEXT_PROP_MAP_SHAPE_PARA ); | 
|  | if (!pFontDecls) | 
|  | pFontDecls = const_cast<XMLFontStylesContext*>(rImport.GetFontDecls()); | 
|  | return new XMLTextImportPropertyMapper( pPropMapper, rImport, pFontDecls ); | 
|  | } | 
|  |  | 
|  | SvXMLImportPropertyMapper *XMLTextImportHelper::CreateParaDefaultExtPropMapper(SvXMLImport& rImport, XMLFontStylesContext* pFontDecls) | 
|  | { | 
|  | if (!pFontDecls) | 
|  | pFontDecls = const_cast<XMLFontStylesContext*>(rImport.GetFontDecls()); | 
|  |  | 
|  | XMLPropertySetMapper* pPropMapper = | 
|  | new XMLTextPropertySetMapper( TEXT_PROP_MAP_SHAPE_PARA ); | 
|  | SvXMLImportPropertyMapper* pImportMapper = new XMLTextImportPropertyMapper( pPropMapper, rImport, pFontDecls ); | 
|  |  | 
|  | pPropMapper = | 
|  | new XMLTextPropertySetMapper( TEXT_PROP_MAP_TEXT_ADDITIONAL_DEFAULTS ); | 
|  | pImportMapper->ChainImportMapper( new XMLTextImportPropertyMapper( pPropMapper, rImport, pFontDecls ) ); | 
|  |  | 
|  | return pImportMapper; | 
|  | } | 
|  |  | 
|  | SvXMLImportPropertyMapper* | 
|  | XMLTextImportHelper::CreateTableDefaultExtPropMapper( | 
|  | SvXMLImport& rImport, | 
|  | XMLFontStylesContext* ) | 
|  | { | 
|  | XMLPropertySetMapper *pPropMapper = | 
|  | new XMLTextPropertySetMapper( TEXT_PROP_MAP_TABLE_DEFAULTS ); | 
|  | return new SvXMLImportPropertyMapper( pPropMapper, rImport ); | 
|  | } | 
|  |  | 
|  | SvXMLImportPropertyMapper* | 
|  | XMLTextImportHelper::CreateTableRowDefaultExtPropMapper( | 
|  | SvXMLImport& rImport, | 
|  | XMLFontStylesContext* ) | 
|  | { | 
|  | XMLPropertySetMapper *pPropMapper = | 
|  | new XMLTextPropertySetMapper( TEXT_PROP_MAP_TABLE_ROW_DEFAULTS ); | 
|  | return new SvXMLImportPropertyMapper( pPropMapper, rImport ); | 
|  | } | 
|  |  | 
|  | void XMLTextImportHelper::SetCursor( const Reference < XTextCursor > & rCursor ) | 
|  | { | 
|  | m_pImpl->m_xCursor.set(rCursor); | 
|  | m_pImpl->m_xText.set(rCursor->getText()); | 
|  | m_pImpl->m_xCursorAsRange.set( rCursor, UNO_QUERY ); | 
|  | } | 
|  |  | 
|  | void XMLTextImportHelper::ResetCursor() | 
|  | { | 
|  | m_pImpl->m_xCursor.set(0); | 
|  | m_pImpl->m_xText.set(0); | 
|  | m_pImpl->m_xCursorAsRange.set(0); | 
|  | } | 
|  |  | 
|  |  | 
|  | sal_Bool XMLTextImportHelper::HasFrameByName( const OUString& rName ) const | 
|  | { | 
|  | return (m_pImpl->m_xTextFrames.is() && | 
|  | m_pImpl->m_xTextFrames->hasByName(rName)) | 
|  | || (m_pImpl->m_xGraphics.is() && | 
|  | m_pImpl->m_xGraphics->hasByName(rName)) | 
|  | || (m_pImpl->m_xObjects.is() && | 
|  | m_pImpl->m_xObjects->hasByName(rName)); | 
|  | } | 
|  |  | 
|  | void XMLTextImportHelper::InsertString( const OUString& rChars ) | 
|  | { | 
|  | DBG_ASSERT(m_pImpl->m_xText.is(), "no text"); | 
|  | DBG_ASSERT(m_pImpl->m_xCursorAsRange.is(), "no range"); | 
|  | if (m_pImpl->m_xText.is()) | 
|  | { | 
|  | m_pImpl->m_xText->insertString(m_pImpl->m_xCursorAsRange, | 
|  | rChars, sal_False); | 
|  | } | 
|  | } | 
|  |  | 
|  | void XMLTextImportHelper::InsertString( const OUString& rChars, | 
|  | sal_Bool& rIgnoreLeadingSpace ) | 
|  | { | 
|  | DBG_ASSERT(m_pImpl->m_xText.is(), "no text"); | 
|  | DBG_ASSERT(m_pImpl->m_xCursorAsRange.is(), "no range"); | 
|  | if (m_pImpl->m_xText.is()) | 
|  | { | 
|  | sal_Int32 nLen = rChars.getLength(); | 
|  | OUStringBuffer sChars( nLen ); | 
|  |  | 
|  | for( sal_Int32 i=0; i < nLen; i++ ) | 
|  | { | 
|  | sal_Unicode c = rChars[i]; | 
|  | switch( c ) | 
|  | { | 
|  | case 0x20: | 
|  | case 0x09: | 
|  | case 0x0a: | 
|  | case 0x0d: | 
|  | if( !rIgnoreLeadingSpace ) | 
|  | sChars.append( (sal_Unicode)0x20 ); | 
|  | rIgnoreLeadingSpace = sal_True; | 
|  | break; | 
|  | default: | 
|  | rIgnoreLeadingSpace = sal_False; | 
|  | sChars.append( c ); | 
|  | break; | 
|  | } | 
|  | } | 
|  | m_pImpl->m_xText->insertString(m_pImpl->m_xCursorAsRange, | 
|  | sChars.makeStringAndClear(), sal_False); | 
|  | } | 
|  | } | 
|  |  | 
|  | void XMLTextImportHelper::InsertControlCharacter( sal_Int16 nControl ) | 
|  | { | 
|  | DBG_ASSERT(m_pImpl->m_xText.is(), "no text"); | 
|  | DBG_ASSERT(m_pImpl->m_xCursorAsRange.is(), "no range"); | 
|  | if (m_pImpl->m_xText.is()) | 
|  | { | 
|  | m_pImpl->m_xText->insertControlCharacter( | 
|  | m_pImpl->m_xCursorAsRange, nControl, sal_False); | 
|  | } | 
|  | } | 
|  |  | 
|  | void XMLTextImportHelper::InsertTextContent( | 
|  | Reference < XTextContent > & xContent ) | 
|  | { | 
|  | DBG_ASSERT(m_pImpl->m_xText.is(), "no text"); | 
|  | DBG_ASSERT(m_pImpl->m_xCursorAsRange.is(), "no range"); | 
|  | if (m_pImpl->m_xText.is()) | 
|  | { | 
|  | m_pImpl->m_xText->insertTextContent( | 
|  | m_pImpl->m_xCursorAsRange, xContent, sal_False); | 
|  | } | 
|  | } | 
|  |  | 
|  | void XMLTextImportHelper::DeleteParagraph() | 
|  | { | 
|  | DBG_ASSERT(m_pImpl->m_xText.is(), "no text"); | 
|  | DBG_ASSERT(m_pImpl->m_xCursor.is(), "no cursor"); | 
|  | DBG_ASSERT(m_pImpl->m_xCursorAsRange.is(), "no range"); | 
|  |  | 
|  | sal_Bool bDelete = sal_True; | 
|  | Reference < XEnumerationAccess > const xEnumAccess( | 
|  | m_pImpl->m_xCursor, UNO_QUERY); | 
|  | if( xEnumAccess.is() ) | 
|  | { | 
|  | Reference < XEnumeration > xEnum(xEnumAccess->createEnumeration()); | 
|  | DBG_ASSERT( xEnum->hasMoreElements(), "empty text enumeration" ); | 
|  | if( xEnum->hasMoreElements() ) | 
|  | { | 
|  | Reference < XComponent > xComp( xEnum->nextElement(), UNO_QUERY ); | 
|  | DBG_ASSERT( xComp.is(), "got no component" ); | 
|  | if( xComp.is() ) | 
|  | { | 
|  | xComp->dispose(); | 
|  | bDelete = sal_False; | 
|  | } | 
|  | } | 
|  | } | 
|  | if( bDelete ) | 
|  | { | 
|  | if (m_pImpl->m_xCursor->goLeft( 1, sal_True )) | 
|  | { | 
|  | OUString sEmpty; | 
|  | m_pImpl->m_xText->insertString(m_pImpl->m_xCursorAsRange, | 
|  | sEmpty, sal_True); | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | OUString XMLTextImportHelper::ConvertStarFonts( const OUString& rChars, | 
|  | const OUString& rStyleName, | 
|  | sal_uInt8& rFlags, | 
|  | sal_Bool bPara, | 
|  | SvXMLImport& rImport ) const | 
|  | { | 
|  | OUStringBuffer sChars( rChars ); | 
|  | sal_Bool bConverted = sal_False; | 
|  | for( sal_Int32 j=0; j<rChars.getLength(); j++ ) | 
|  | { | 
|  | sal_Unicode c = rChars[j]; | 
|  | if( c >= 0xf000 && c <= 0xf0ff ) | 
|  | { | 
|  | if( (rFlags & CONV_STAR_FONT_FLAGS_VALID) == 0 ) | 
|  | { | 
|  | XMLTextStyleContext *pStyle = 0; | 
|  | sal_uInt16 nFamily = bPara ? XML_STYLE_FAMILY_TEXT_PARAGRAPH | 
|  | : XML_STYLE_FAMILY_TEXT_TEXT; | 
|  | if (rStyleName.getLength() && m_pImpl->m_xAutoStyles.Is()) | 
|  | { | 
|  | const SvXMLStyleContext* pTempStyle = | 
|  | ((SvXMLStylesContext *)&m_pImpl->m_xAutoStyles)-> | 
|  | FindStyleChildContext( nFamily, rStyleName, | 
|  | sal_True ); | 
|  | pStyle = PTR_CAST( XMLTextStyleContext,pTempStyle); | 
|  | } | 
|  |  | 
|  | if( pStyle ) | 
|  | { | 
|  | sal_Int32 nCount = pStyle->_GetProperties().size(); | 
|  | if( nCount ) | 
|  | { | 
|  | UniReference < SvXMLImportPropertyMapper > xImpPrMap = | 
|  | ((SvXMLStylesContext *)&m_pImpl->m_xAutoStyles) | 
|  | ->GetImportPropertyMapper(nFamily); | 
|  | if( xImpPrMap.is() ) | 
|  | { | 
|  | UniReference<XMLPropertySetMapper> rPropMapper = | 
|  | xImpPrMap->getPropertySetMapper(); | 
|  | for( sal_Int32 i=0; i < nCount; i++ ) | 
|  | { | 
|  | const XMLPropertyState& rProp = pStyle->_GetProperties()[i]; | 
|  | sal_Int32 nIdx = rProp.mnIndex; | 
|  | sal_uInt32 nContextId = rPropMapper->GetEntryContextId(nIdx); | 
|  | if( CTF_FONTFAMILYNAME == nContextId ) | 
|  | { | 
|  | rFlags &= ~(CONV_FROM_STAR_BATS|CONV_FROM_STAR_MATH); | 
|  | OUString sFontName; | 
|  | rProp.maValue >>= sFontName; | 
|  | OUString sStarBats( RTL_CONSTASCII_USTRINGPARAM("StarBats" ) ); | 
|  | OUString sStarMath( RTL_CONSTASCII_USTRINGPARAM("StarMath" ) ); | 
|  | if( sFontName.equalsIgnoreAsciiCase( sStarBats  ) ) | 
|  | rFlags |= CONV_FROM_STAR_BATS; | 
|  | else if( sFontName.equalsIgnoreAsciiCase( sStarMath ) ) | 
|  | rFlags |= CONV_FROM_STAR_MATH; | 
|  | break; | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | } | 
|  |  | 
|  | rFlags |= CONV_STAR_FONT_FLAGS_VALID; | 
|  | } | 
|  | if( (rFlags & CONV_FROM_STAR_BATS ) != 0 ) | 
|  | { | 
|  | sChars.setCharAt( j, rImport.ConvStarBatsCharToStarSymbol( c ) ); | 
|  | bConverted = sal_True; | 
|  | } | 
|  | else if( (rFlags & CONV_FROM_STAR_MATH ) != 0 ) | 
|  | { | 
|  | sChars.setCharAt( j, rImport.ConvStarMathCharToStarSymbol( c ) ); | 
|  | bConverted = sal_True; | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | return bConverted ? sChars.makeStringAndClear() : rChars; | 
|  | } | 
|  |  | 
|  | // --> OD 2006-10-12 #i69629# | 
|  | // helper method to determine, if a paragraph style has a list style (inclusive | 
|  | // an empty one) inherits a list style (inclusive an empty one) from one of its parents | 
|  | // --> OD 2007-01-29 #i73973# | 
|  | // apply special case, that found list style equals the chapter numbering, also | 
|  | // to the found list styles of the parent styles. | 
|  | sal_Bool lcl_HasListStyle( OUString sStyleName, | 
|  | const Reference < XNameContainer >& xParaStyles, | 
|  | SvXMLImport& rImport, | 
|  | const OUString& sNumberingStyleName, | 
|  | const OUString& sOutlineStyleName ) | 
|  | { | 
|  | sal_Bool bRet( sal_False ); | 
|  |  | 
|  | if ( !xParaStyles->hasByName( sStyleName ) ) | 
|  | { | 
|  | // error case | 
|  | return sal_True; | 
|  | } | 
|  |  | 
|  | Reference< XPropertyState > xPropState( xParaStyles->getByName( sStyleName ), | 
|  | UNO_QUERY ); | 
|  | if ( !xPropState.is() ) | 
|  | { | 
|  | // error case | 
|  | return sal_False; | 
|  | } | 
|  |  | 
|  | if ( xPropState->getPropertyState( sNumberingStyleName ) == PropertyState_DIRECT_VALUE ) | 
|  | { | 
|  | // list style found | 
|  | bRet = sal_True; | 
|  | // special case: the set list style equals the chapter numbering | 
|  | Reference< XPropertySet > xPropSet( xPropState, UNO_QUERY ); | 
|  | if ( xPropSet.is() ) | 
|  | { | 
|  | OUString sListStyle; | 
|  | xPropSet->getPropertyValue( sNumberingStyleName ) >>= sListStyle; | 
|  | if ( sListStyle.getLength() != 0 && | 
|  | sListStyle == sOutlineStyleName ) | 
|  | { | 
|  | bRet = sal_False; | 
|  | } | 
|  | } | 
|  | } | 
|  | else | 
|  | { | 
|  | // --> OD 2007-12-07 #i77708# | 
|  | sal_Int32 nUPD( 0 ); | 
|  | sal_Int32 nBuild( 0 ); | 
|  | // --> OD 2008-03-19 #i86058# | 
|  | //        rImport.getBuildIds( nUPD, nBuild ); | 
|  | const bool bBuildIdFound = rImport.getBuildIds( nUPD, nBuild ); | 
|  | // <-- | 
|  | // <-- | 
|  | // search list style at parent | 
|  | Reference<XStyle> xStyle( xPropState, UNO_QUERY ); | 
|  | while ( xStyle.is() ) | 
|  | { | 
|  | OUString aParentStyle( xStyle->getParentStyle() ); | 
|  | if ( aParentStyle.getLength() > 0 ) | 
|  | { | 
|  | aParentStyle = | 
|  | rImport.GetStyleDisplayName( XML_STYLE_FAMILY_TEXT_PARAGRAPH, | 
|  | aParentStyle ); | 
|  | } | 
|  | if ( aParentStyle.getLength() == 0 || | 
|  | !xParaStyles->hasByName( aParentStyle ) ) | 
|  | { | 
|  | // no list style found | 
|  | break; | 
|  | } | 
|  | else | 
|  | { | 
|  | xPropState = Reference< XPropertyState >( | 
|  | xParaStyles->getByName( aParentStyle ), | 
|  | UNO_QUERY ); | 
|  | if ( !xPropState.is() ) | 
|  | { | 
|  | // error case | 
|  | return sal_True; | 
|  | } | 
|  | if ( xPropState->getPropertyState( sNumberingStyleName ) == PropertyState_DIRECT_VALUE ) | 
|  | { | 
|  | // list style found | 
|  | bRet = sal_True; | 
|  | // --> OD 2007-01-29 #i73973# | 
|  | // special case: the found list style equals the chapter numbering | 
|  | Reference< XPropertySet > xPropSet( xPropState, UNO_QUERY ); | 
|  | if ( xPropSet.is() ) | 
|  | { | 
|  | OUString sListStyle; | 
|  | xPropSet->getPropertyValue( sNumberingStyleName ) >>= sListStyle; | 
|  | if ( sListStyle.getLength() != 0 && | 
|  | sListStyle == sOutlineStyleName ) | 
|  | { | 
|  | bRet = sal_False; | 
|  | } | 
|  | // --> OD 2007-12-07 #i77708# | 
|  | // special handling for text documents from OOo version prior OOo 2.4 | 
|  | // --> OD 2008-03-19 #i86058# | 
|  | // check explicitly on certain versions and on import of | 
|  | // text documents in OpenOffice.org file format | 
|  | else if ( sListStyle.getLength() == 0 && | 
|  | ( rImport.IsTextDocInOOoFileFormat() || | 
|  | ( bBuildIdFound && | 
|  | ( ( nUPD == 641 ) || ( nUPD == 645 ) || // prior OOo 2.0 | 
|  | ( nUPD == 680 && nBuild <= 9238 ) ) ) ) ) // OOo 2.0 - OOo 2.3.1 | 
|  | { | 
|  | bRet = sal_False; | 
|  | } | 
|  | // <-- | 
|  | } | 
|  | // <-- | 
|  | break; | 
|  | } | 
|  | else | 
|  | { | 
|  | // search list style at parent | 
|  | xStyle = Reference<XStyle>( xPropState, UNO_QUERY ); | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | return bRet; | 
|  | } | 
|  | // <-- | 
|  | OUString XMLTextImportHelper::SetStyleAndAttrs( | 
|  | SvXMLImport& rImport, | 
|  | const Reference < XTextCursor >& rCursor, | 
|  | const OUString& rStyleName, | 
|  | sal_Bool bPara, | 
|  | sal_Bool bOutlineLevelAttrFound, | 
|  | sal_Int8 nOutlineLevel, | 
|  | // --> OD 2007-08-17 #i80724# | 
|  | sal_Bool bSetListAttrs ) | 
|  | // <-- | 
|  | { | 
|  | static ::rtl::OUString s_ParaStyleName( | 
|  | RTL_CONSTASCII_USTRINGPARAM("ParaStyleName")); | 
|  | static ::rtl::OUString s_CharStyleName( | 
|  | RTL_CONSTASCII_USTRINGPARAM("CharStyleName")); | 
|  | static ::rtl::OUString s_NumberingRules( | 
|  | RTL_CONSTASCII_USTRINGPARAM("NumberingRules")); | 
|  | static ::rtl::OUString s_NumberingIsNumber( | 
|  | RTL_CONSTASCII_USTRINGPARAM("NumberingIsNumber")); | 
|  | static ::rtl::OUString s_NumberingLevel( | 
|  | RTL_CONSTASCII_USTRINGPARAM("NumberingLevel")); | 
|  | static ::rtl::OUString s_ParaIsNumberingRestart( | 
|  | RTL_CONSTASCII_USTRINGPARAM("ParaIsNumberingRestart")); | 
|  | static ::rtl::OUString s_NumberingStartValue( | 
|  | RTL_CONSTASCII_USTRINGPARAM("NumberingStartValue")); | 
|  | static ::rtl::OUString s_PropNameListId( | 
|  | RTL_CONSTASCII_USTRINGPARAM("ListId")); | 
|  | static ::rtl::OUString s_PageDescName( | 
|  | RTL_CONSTASCII_USTRINGPARAM("PageDescName")); | 
|  | static ::rtl::OUString s_ServiceCombinedCharacters( | 
|  | RTL_CONSTASCII_USTRINGPARAM( | 
|  | "com.sun.star.text.TextField.CombinedCharacters")); | 
|  | static ::rtl::OUString s_Content(RTL_CONSTASCII_USTRINGPARAM("Content")); | 
|  | static ::rtl::OUString s_OutlineLevel( | 
|  | RTL_CONSTASCII_USTRINGPARAM("OutlineLevel")); | 
|  | static ::rtl::OUString s_NumberingStyleName( | 
|  | RTL_CONSTASCII_USTRINGPARAM("NumberingStyleName")); | 
|  |  | 
|  | const sal_uInt16 nFamily = bPara ? XML_STYLE_FAMILY_TEXT_PARAGRAPH | 
|  | : XML_STYLE_FAMILY_TEXT_TEXT; | 
|  | XMLTextStyleContext *pStyle = 0; | 
|  | OUString sStyleName( rStyleName ); | 
|  | if (sStyleName.getLength() && m_pImpl->m_xAutoStyles.Is()) | 
|  | { | 
|  | const SvXMLStyleContext* pTempStyle = | 
|  | ((SvXMLStylesContext *)&m_pImpl->m_xAutoStyles)-> | 
|  | FindStyleChildContext( nFamily, sStyleName, sal_True ); | 
|  | pStyle = PTR_CAST( XMLTextStyleContext,pTempStyle); | 
|  | } | 
|  | if( pStyle ) | 
|  | sStyleName = pStyle->GetParentName(); | 
|  |  | 
|  | Reference < XPropertySet > xPropSet( rCursor, UNO_QUERY ); | 
|  | Reference< XPropertySetInfo > xPropSetInfo( | 
|  | xPropSet->getPropertySetInfo()); | 
|  |  | 
|  | // style | 
|  | if( sStyleName.getLength() ) | 
|  | { | 
|  | sStyleName = rImport.GetStyleDisplayName( nFamily, sStyleName ); | 
|  | const String& rPropName = (bPara) ? s_ParaStyleName : s_CharStyleName; | 
|  | const Reference < XNameContainer > & rStyles = (bPara) | 
|  | ? m_pImpl->m_xParaStyles | 
|  | : m_pImpl->m_xTextStyles; | 
|  | if( rStyles.is() && | 
|  | xPropSetInfo->hasPropertyByName( rPropName ) && | 
|  | rStyles->hasByName( sStyleName ) ) | 
|  | { | 
|  | xPropSet->setPropertyValue( rPropName, makeAny(sStyleName) ); | 
|  | } | 
|  | else | 
|  | sStyleName = OUString(); | 
|  | } | 
|  |  | 
|  | // --> OD 2008-09-10 #i70748# | 
|  | // The outline level needs to be only applied as list level, if the heading | 
|  | // is not inside a list and if it by default applies the outline style. | 
|  | bool bApplyOutlineLevelAsListLevel( false ); | 
|  | // --> OD 2007-08-17 #i80724# | 
|  | if (bSetListAttrs && bPara | 
|  | && xPropSetInfo->hasPropertyByName( s_NumberingRules)) | 
|  | // <-- | 
|  | { | 
|  | // Set numbering rules | 
|  | Reference< XIndexReplace > const xNumRules( | 
|  | xPropSet->getPropertyValue(s_NumberingRules), UNO_QUERY); | 
|  |  | 
|  | XMLTextListBlockContext * pListBlock(0); | 
|  | XMLTextListItemContext  * pListItem(0); | 
|  | XMLNumberedParaContext  * pNumberedParagraph(0); | 
|  | GetTextListHelper().ListContextTop( | 
|  | pListBlock, pListItem, pNumberedParagraph); | 
|  |  | 
|  | OSL_ENSURE(!(pListBlock && pNumberedParagraph), "XMLTextImportHelper::" | 
|  | "SetStyleAndAttrs: both list and numbered-paragraph???"); | 
|  |  | 
|  | Reference < XIndexReplace > xNewNumRules; | 
|  | sal_Int8 nLevel(-1); | 
|  | ::rtl::OUString sListId; | 
|  | sal_Int16 nStartValue(-1); | 
|  | bool bNumberingIsNumber(true); | 
|  |  | 
|  | if (pListBlock) { | 
|  |  | 
|  | if (!pListItem) { | 
|  | bNumberingIsNumber = false; // list-header | 
|  | } | 
|  | // --> OD 2008-05-08 #refactorlists# | 
|  | // consider text:style-override property of <text:list-item> | 
|  | xNewNumRules.set( | 
|  | (pListItem != 0 && pListItem->HasNumRulesOverride()) | 
|  | ? pListItem->GetNumRulesOverride() | 
|  | : pListBlock->GetNumRules() ); | 
|  | // <-- | 
|  | nLevel = static_cast<sal_Int8>(pListBlock->GetLevel()); | 
|  |  | 
|  | if ( pListItem && pListItem->HasStartValue() ) { | 
|  | nStartValue = pListItem->GetStartValue(); | 
|  | } | 
|  |  | 
|  | // --> OD 2008-08-15 #i92811# | 
|  | sListId = m_pImpl->m_pTextListsHelper->GetListIdForListBlock( | 
|  | *pListBlock); | 
|  | // <-- | 
|  | } | 
|  | else if (pNumberedParagraph) | 
|  | { | 
|  | xNewNumRules.set(pNumberedParagraph->GetNumRules()); | 
|  | nLevel = static_cast<sal_Int8>(pNumberedParagraph->GetLevel()); | 
|  | sListId = pNumberedParagraph->GetListId(); | 
|  | nStartValue = pNumberedParagraph->GetStartValue(); | 
|  | } | 
|  |  | 
|  |  | 
|  | if (pListBlock || pNumberedParagraph) | 
|  | { | 
|  | // --> OD 2009-08-24 #i101349# | 
|  | // Assure that list style of automatic paragraph style is applied at paragraph. | 
|  | sal_Bool bApplyNumRules = pStyle && pStyle->IsListStyleSet(); | 
|  | if ( !bApplyNumRules ) | 
|  | { | 
|  | sal_Bool bSameNumRules = xNewNumRules == xNumRules; | 
|  | if( !bSameNumRules && xNewNumRules.is() && xNumRules.is() ) | 
|  | { | 
|  | // If the interface pointers are different then this does | 
|  | // not mean that the num rules are different. Further tests | 
|  | // are required then. However, if only one num rule is | 
|  | // set, no tests are required of course. | 
|  | Reference< XNamed > xNewNamed( xNewNumRules, UNO_QUERY ); | 
|  | Reference< XNamed > xNamed( xNumRules, UNO_QUERY ); | 
|  | if( xNewNamed.is() && xNamed.is() ) | 
|  | { | 
|  | bSameNumRules = xNewNamed->getName() == xNamed->getName(); | 
|  | } | 
|  | else | 
|  | { | 
|  | Reference< XAnyCompare > xNumRuleCompare( xNumRules, UNO_QUERY ); | 
|  | if( xNumRuleCompare.is() ) | 
|  | { | 
|  | bSameNumRules = (xNumRuleCompare->compare( Any(xNumRules), Any(xNewNumRules) ) == 0); | 
|  | } | 
|  | } | 
|  | } | 
|  | bApplyNumRules = !bSameNumRules; | 
|  | } | 
|  |  | 
|  | if ( bApplyNumRules ) | 
|  | // <-- | 
|  | { | 
|  | // #102607# This may except when xNewNumRules contains | 
|  | // a Writer-NumRule-Implementation bug gets applied to | 
|  | // a shape. Since this may occur inside a document | 
|  | // (e.g. when edited), this must be handled | 
|  | // gracefully. | 
|  | try | 
|  | { | 
|  | xPropSet->setPropertyValue( | 
|  | s_NumberingRules, makeAny(xNewNumRules) ); | 
|  | } | 
|  | catch( Exception e ) | 
|  | { | 
|  | ; // I would really like to use a warning here, | 
|  | // but I can't access the XMLErrorHandler from | 
|  | // here. | 
|  | } | 
|  | } | 
|  |  | 
|  | if (!bNumberingIsNumber && | 
|  | xPropSetInfo->hasPropertyByName(s_NumberingIsNumber)) | 
|  | { | 
|  | xPropSet->setPropertyValue(s_NumberingIsNumber, Any(sal_False)); | 
|  | } | 
|  |  | 
|  | xPropSet->setPropertyValue( s_NumberingLevel, Any(nLevel) ); | 
|  |  | 
|  | if( pListBlock && pListBlock->IsRestartNumbering() ) | 
|  | { | 
|  | // TODO: property missing | 
|  | if (xPropSetInfo->hasPropertyByName(s_ParaIsNumberingRestart)) | 
|  | { | 
|  | sal_Bool bTmp = sal_True; | 
|  | xPropSet->setPropertyValue(s_ParaIsNumberingRestart, | 
|  | makeAny(bTmp) ); | 
|  | } | 
|  | pListBlock->ResetRestartNumbering(); | 
|  | } | 
|  |  | 
|  | if ( 0 <= nStartValue && | 
|  | xPropSetInfo->hasPropertyByName(s_NumberingStartValue)) | 
|  | { | 
|  | xPropSet->setPropertyValue(s_NumberingStartValue, | 
|  | makeAny(nStartValue)); | 
|  | } | 
|  |  | 
|  | // --> OD 2008-04-23 #refactorlists# | 
|  | if (xPropSetInfo->hasPropertyByName(s_PropNameListId)) | 
|  | { | 
|  | if (sListId.getLength()) { | 
|  | xPropSet->setPropertyValue(s_PropNameListId, | 
|  | makeAny(sListId) ); | 
|  | } | 
|  | } | 
|  | // <-- | 
|  |  | 
|  | GetTextListHelper().SetListItem( (XMLTextListItemContext *)0 ); | 
|  | } | 
|  | else | 
|  | { | 
|  | // If the paragraph is not in a list but its style, remove it from | 
|  | // the list. | 
|  | // --> OD 2005-10-25 #126347# - do not remove it, if the list | 
|  | // of the style is the chapter numbering rule. | 
|  | if( xNumRules.is() ) | 
|  | { | 
|  | bool bRemove( true ); | 
|  | // --> OD 2008-12-17 #i70748# - special handling for document from OOo 2.x | 
|  | sal_Int32 nUPD( 0 ); | 
|  | sal_Int32 nBuild( 0 ); | 
|  | const bool bBuildIdFound = rImport.getBuildIds( nUPD, nBuild ); | 
|  | DBG_ASSERT( ( bBuildIdFound && nUPD == 680 ) || | 
|  | !pStyle || | 
|  | !pStyle->IsListStyleSet() || | 
|  | pStyle->GetListStyle().getLength() == 0, | 
|  | "automatic paragraph style with list style name, but paragraph not in list???" ); | 
|  | if ( ( bBuildIdFound && nUPD == 680 ) || | 
|  | !pStyle || !pStyle->IsListStyleSet() ) | 
|  | { | 
|  | if (m_pImpl->m_xChapterNumbering.is()) | 
|  | { | 
|  | Reference< XNamed > xNumNamed( xNumRules, UNO_QUERY ); | 
|  | Reference< XNamed > const xChapterNumNamed ( | 
|  | m_pImpl->m_xChapterNumbering, UNO_QUERY); | 
|  | if ( xNumNamed.is() && xChapterNumNamed.is() && | 
|  | xNumNamed->getName() == xChapterNumNamed->getName() ) | 
|  | { | 
|  | bRemove = false; | 
|  | // --> OD 2008-09-10 #i70748# | 
|  | bApplyOutlineLevelAsListLevel = true; | 
|  | // <-- | 
|  | } | 
|  | } | 
|  | } | 
|  | // <-- | 
|  | if ( bRemove ) | 
|  | { | 
|  | xPropSet->setPropertyValue( s_NumberingRules, Any() ); | 
|  | } | 
|  | } | 
|  | // <-- | 
|  | } | 
|  | } | 
|  |  | 
|  | // hard paragraph properties | 
|  | if( pStyle ) | 
|  | { | 
|  | pStyle->FillPropertySet( xPropSet ); | 
|  | if( bPara && pStyle->HasMasterPageName() && | 
|  | xPropSetInfo->hasPropertyByName(s_PageDescName)) | 
|  | { | 
|  | OUString sDisplayName( | 
|  | rImport.GetStyleDisplayName( | 
|  | XML_STYLE_FAMILY_MASTER_PAGE, | 
|  | pStyle->GetMasterPageName()) ); | 
|  | if( !sDisplayName.getLength() || | 
|  | (m_pImpl->m_xPageStyles.is() && | 
|  | m_pImpl->m_xPageStyles->hasByName( sDisplayName))) | 
|  | { | 
|  | xPropSet->setPropertyValue(s_PageDescName, | 
|  | makeAny(sDisplayName)); | 
|  | } | 
|  | } | 
|  | if( bPara && pStyle->GetDropCapStyleName().getLength() && | 
|  | m_pImpl->m_xTextStyles.is()) | 
|  | { | 
|  | OUString sDisplayName( | 
|  | rImport.GetStyleDisplayName( | 
|  | XML_STYLE_FAMILY_TEXT_TEXT, | 
|  | pStyle->GetDropCapStyleName()) ); | 
|  | if (m_pImpl->m_xTextStyles->hasByName(sDisplayName) && | 
|  | xPropSetInfo->hasPropertyByName( sDisplayName ) ) | 
|  | { | 
|  | xPropSet->setPropertyValue( pStyle->sDropCapCharStyleName, makeAny(sDisplayName) ); | 
|  | } | 
|  | } | 
|  |  | 
|  | // combined characters special treatment | 
|  | if (!bPara && pStyle->HasCombinedCharactersLetter()) | 
|  | { | 
|  | // insert combined characters text field | 
|  | if (m_pImpl->m_xServiceFactory.is()) | 
|  | { | 
|  | uno::Reference<beans::XPropertySet> const xTmp( | 
|  | m_pImpl->m_xServiceFactory->createInstance( | 
|  | s_ServiceCombinedCharacters), UNO_QUERY); | 
|  | if( xTmp.is() ) | 
|  | { | 
|  | // fix cursor if larger than possible for | 
|  | // combined characters field | 
|  | if (rCursor->getString().getLength() > | 
|  | MAX_COMBINED_CHARACTERS) | 
|  | { | 
|  | rCursor->gotoRange(rCursor->getStart(), sal_False); | 
|  | rCursor->goRight(MAX_COMBINED_CHARACTERS, sal_True); | 
|  | } | 
|  |  | 
|  | // set field value (the combined character string) | 
|  | xTmp->setPropertyValue(s_Content, | 
|  | makeAny(rCursor->getString())); | 
|  |  | 
|  | // insert the field over it's original text | 
|  | Reference<XTextRange> xRange(rCursor, UNO_QUERY); | 
|  | Reference<XTextContent> xTextContent(xTmp, UNO_QUERY); | 
|  | if (m_pImpl->m_xText.is() && xRange.is()) | 
|  | { | 
|  | // #i107225# the combined characters need to be inserted first | 
|  | // the selected text has to be removed afterwards | 
|  | m_pImpl->m_xText->insertTextContent( xRange->getStart(), xTextContent, sal_True ); | 
|  |  | 
|  | if( xRange->getString().getLength() ) | 
|  | { | 
|  | try | 
|  | { | 
|  | uno::Reference< text::XTextCursor > xCrsr = xRange->getText()->createTextCursorByRange( xRange->getStart() ); | 
|  | xCrsr->goLeft( 1, true ); | 
|  | uno::Reference< beans::XPropertySet> xCrsrProperties( xCrsr, uno::UNO_QUERY_THROW ); | 
|  | //the hard properties of the removed text need to be applied to the combined characters field | 
|  | pStyle->FillPropertySet( xCrsrProperties ); | 
|  | xCrsr->collapseToEnd(); | 
|  | xCrsr->gotoRange( xRange->getEnd(), true ); | 
|  | xCrsr->setString( ::rtl::OUString() ); | 
|  | } | 
|  | catch( const uno::Exception& rEx ) | 
|  | { | 
|  | (void)rEx; | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | // outline level; set after list style has been set | 
|  | // --> OD 2005-08-25 #i53198# | 
|  | // Complete re-worked and corrected: | 
|  | // - set outline level at paragraph | 
|  | // - set numbering level at paragraph, if none is already set | 
|  | // - assure that style is marked as an outline style for the corresponding | 
|  | //   outline level. | 
|  | // - DO NOT set type of numbering rule to outline. | 
|  | // - DO NOT set numbering rule directly at the paragraph. | 
|  |  | 
|  | // --> OD 2008-12-09 #i70748# | 
|  | // Some minor rework and adjust access to paragraph styles | 
|  | if ( bPara ) | 
|  | { | 
|  | // --> OD 2009-08-18 #i103817# | 
|  | sal_Int16 nCurrentOutlineLevelInheritedFromParagraphStyle = 0; | 
|  | const bool bHasOutlineLevelProp( | 
|  | xPropSetInfo->hasPropertyByName(s_OutlineLevel)); | 
|  | if ( bHasOutlineLevelProp ) | 
|  | { | 
|  | xPropSet->getPropertyValue(s_OutlineLevel) | 
|  | >>= nCurrentOutlineLevelInheritedFromParagraphStyle; | 
|  | } | 
|  | // <-- | 
|  | //if ( bPara && nOutlineLevel != -1 )   //#outline level,removed by zhaojianwei | 
|  | if ( nOutlineLevel > 0 )       //add by zhaojianwei | 
|  | { | 
|  | //#outline level,removed by zhaojianwei | 
|  | if ( bHasOutlineLevelProp ) | 
|  | { | 
|  | // In case that the value equals the value of its paragraph style | 
|  | // attribute outline level, the paragraph attribute value is left unset | 
|  | if ( nCurrentOutlineLevelInheritedFromParagraphStyle != nOutlineLevel ) | 
|  | { | 
|  | xPropSet->setPropertyValue( s_OutlineLevel, | 
|  | makeAny( static_cast<sal_Int16>(nOutlineLevel) ) ); | 
|  | } | 
|  | }//<-end,zhaojianwei | 
|  |  | 
|  | // --> OD 2008-09-10 #i70748# | 
|  | if ( bApplyOutlineLevelAsListLevel ) | 
|  | { | 
|  | sal_Int16 nNumLevel = -1; | 
|  | xPropSet->getPropertyValue( s_NumberingLevel ) >>= nNumLevel; | 
|  | if ( nNumLevel == -1 || | 
|  | nNumLevel != (nOutlineLevel - 1) ) | 
|  | { | 
|  | xPropSet->setPropertyValue( s_NumberingLevel, | 
|  | makeAny( static_cast<sal_Int8>(nOutlineLevel - 1) ) ); | 
|  | } | 
|  | } | 
|  | // <-- | 
|  | // --> OD 2006-10-13 #i69629# - correction: | 
|  | // - for text document from version OOo 2.0.4/SO 8 PU4 and earlier | 
|  | //   the paragraph style of a heading should be assigned to the | 
|  | //   corresponding list level of the outline style. | 
|  | // - for other text documents the paragraph style of a heading is only | 
|  | //   a candidate for an assignment to the list level of the outline | 
|  | //   style, if it has no direct list style property and (if exists) the | 
|  | //   automatic paragraph style has also no direct list style set. | 
|  | if (m_pImpl->m_xParaStyles->hasByName(sStyleName)) | 
|  | { | 
|  | bool bOutlineStyleCandidate( false ); | 
|  |  | 
|  | sal_Int32 nUPD( 0 ); | 
|  | sal_Int32 nBuild( 0 ); | 
|  | // --> OD 2007-12-19 #152540# | 
|  | const bool bBuildIdFound = rImport.getBuildIds( nUPD, nBuild ); | 
|  | // --> OD 2007-07-25 #i73509# | 
|  | // --> OD 2008-03-19 #i86058# - check explicitly on certain versions | 
|  | if ( rImport.IsTextDocInOOoFileFormat() || | 
|  | ( bBuildIdFound && | 
|  | ( nUPD == 645 || nUPD == 641 ) ) ) | 
|  | { | 
|  | bOutlineStyleCandidate = true; | 
|  | } | 
|  | else if ( nUPD == 680 && nBuild <= 9073 ) /* BuildId of OOo 2.0.4/SO8 PU4 */ | 
|  | { | 
|  | bOutlineStyleCandidate = bOutlineLevelAttrFound; | 
|  | } | 
|  | // <-- | 
|  | //                else | 
|  | //                { | 
|  | //                    Reference< XPropertyState > xStylePropState( | 
|  | //                                    xParaStyles->getByName( sStyleName ), UNO_QUERY ); | 
|  | //                    if ( xStylePropState.is() && | 
|  | //                         xStylePropState->getPropertyState( sNumberingStyleName ) == PropertyState_DIRECT_VALUE ) | 
|  | //                    { | 
|  | //                        bOutlineStyleCandidate = false; | 
|  | //                    } | 
|  | //                    // --> OD 2007-01-11 #i73361# | 
|  | //                    // The automatic paragraph style doesn't have to be considered. | 
|  | //    //                else if ( pStyle && /* automatic paragraph style */ | 
|  | //    //                          pStyle->IsListStyleSet() ) | 
|  | //    //                { | 
|  | //    //                    bOutlineStyleCandidate = false; | 
|  | //    //                } | 
|  | //                    // <-- | 
|  | //                    else | 
|  | //                    { | 
|  | //                        bOutlineStyleCandidate = true; | 
|  | //                    } | 
|  | //                  } | 
|  |  | 
|  | if ( bOutlineStyleCandidate ) | 
|  | { | 
|  | AddOutlineStyleCandidate( nOutlineLevel, sStyleName ); | 
|  | } | 
|  | // --> OD 2009-08-18 #i103817# | 
|  | // Assure that heading applies the outline style | 
|  | if ( ( !pStyle || !pStyle->IsListStyleSet() ) && | 
|  | !bOutlineStyleCandidate && | 
|  | m_pImpl->m_xChapterNumbering.is()) | 
|  | { | 
|  | OUString sEmptyStr; | 
|  | if ( !lcl_HasListStyle( sStyleName, | 
|  | m_pImpl->m_xParaStyles, GetXMLImport(), | 
|  | s_NumberingStyleName, | 
|  | sEmptyStr ) ) | 
|  | { | 
|  | // heading not in a list --> apply outline style | 
|  | xPropSet->setPropertyValue( s_NumberingRules, | 
|  | makeAny(m_pImpl->m_xChapterNumbering) ); | 
|  | xPropSet->setPropertyValue( s_NumberingLevel, | 
|  | makeAny(static_cast<sal_Int8>(nOutlineLevel - 1))); | 
|  | } | 
|  | } | 
|  | // <-- | 
|  | } | 
|  | // <-- | 
|  | } | 
|  | //-> #outlinelevel added by zhaojianwei | 
|  | //handle for text:p,if the paragraphstyle outlinelevel is set to[1~10] | 
|  | else if( bHasOutlineLevelProp ) | 
|  | { | 
|  | if ( nCurrentOutlineLevelInheritedFromParagraphStyle != 0 ) | 
|  | { | 
|  | sal_Int16 nZero = 0; | 
|  | xPropSet->setPropertyValue(s_OutlineLevel, | 
|  | makeAny( static_cast<sal_Int16>(nZero) )); | 
|  | } | 
|  | }//<-end,zhaojianwei | 
|  | } | 
|  | // <-- | 
|  |  | 
|  | return sStyleName; | 
|  | } | 
|  |  | 
|  | void XMLTextImportHelper::FindOutlineStyleName( ::rtl::OUString& rStyleName, | 
|  | sal_Int8 nOutlineLevel ) | 
|  | { | 
|  | static ::rtl::OUString s_HeadingStyleName( | 
|  | RTL_CONSTASCII_USTRINGPARAM("HeadingStyleName")); | 
|  |  | 
|  | // style name empty? | 
|  | if( rStyleName.getLength() == 0 ) | 
|  | { | 
|  | // Empty? Then we need o do stuff. Let's do error checking first. | 
|  | if (m_pImpl->m_xChapterNumbering.is() && | 
|  | ( nOutlineLevel > 0 ) && | 
|  | (nOutlineLevel <= m_pImpl->m_xChapterNumbering->getCount())) | 
|  | { | 
|  | nOutlineLevel--;   // for the remainder, the level's are 0-based | 
|  |  | 
|  | // empty style name: look-up previously used name | 
|  |  | 
|  | // if we don't have a previously used name, we'll use the default | 
|  | m_pImpl->InitOutlineStylesCandidates(); | 
|  | if (m_pImpl->m_pOutlineStylesCandidates[nOutlineLevel].empty()) | 
|  | { | 
|  | // no other name used previously? Then use default | 
|  |  | 
|  | // iterate over property value sequence to find the style name | 
|  | Sequence<PropertyValue> aProperties; | 
|  | m_pImpl->m_xChapterNumbering->getByIndex( nOutlineLevel ) | 
|  | >>= aProperties; | 
|  | for( sal_Int32 i = 0; i < aProperties.getLength(); i++ ) | 
|  | { | 
|  | if (aProperties[i].Name == s_HeadingStyleName) | 
|  | { | 
|  | rtl::OUString aOutlineStyle; | 
|  | aProperties[i].Value >>= aOutlineStyle; | 
|  | m_pImpl->m_pOutlineStylesCandidates[nOutlineLevel] | 
|  | .push_back( aOutlineStyle ); | 
|  | break;  // early out, if we found it!. | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | // finally, we'll use the previously used style name for this | 
|  | // format (or the default we've just put into that style) | 
|  | // --> OD 2006-11-06 #i71249# - take last added one | 
|  | rStyleName = | 
|  | m_pImpl->m_pOutlineStylesCandidates[nOutlineLevel].back(); | 
|  | // <-- | 
|  | } | 
|  | // else: nothing we can do, so we'll leave it empty | 
|  | } | 
|  | // else: we already had a style name, so we let it pass. | 
|  | } | 
|  |  | 
|  | void XMLTextImportHelper::AddOutlineStyleCandidate( const sal_Int8 nOutlineLevel, | 
|  | const OUString& rStyleName ) | 
|  | { | 
|  | if (rStyleName.getLength() | 
|  | && m_pImpl->m_xChapterNumbering.is() | 
|  | && (nOutlineLevel > 0) | 
|  | && (nOutlineLevel <= m_pImpl->m_xChapterNumbering->getCount())) | 
|  | { | 
|  | m_pImpl->InitOutlineStylesCandidates(); | 
|  | m_pImpl->m_pOutlineStylesCandidates[nOutlineLevel-1].push_back( | 
|  | rStyleName); | 
|  | } | 
|  | } | 
|  |  | 
|  | void XMLTextImportHelper::SetOutlineStyles( sal_Bool bSetEmptyLevels ) | 
|  | { | 
|  | static ::rtl::OUString s_NumberingStyleName( | 
|  | RTL_CONSTASCII_USTRINGPARAM("NumberingStyleName")); | 
|  | static ::rtl::OUString s_HeadingStyleName( | 
|  | RTL_CONSTASCII_USTRINGPARAM("HeadingStyleName")); | 
|  |  | 
|  | if (( bool(m_pImpl->m_pOutlineStylesCandidates) || bSetEmptyLevels) && | 
|  | m_pImpl->m_xChapterNumbering.is() && | 
|  | !IsInsertMode()) | 
|  | { | 
|  | bool bChooseLastOne( false ); | 
|  | { | 
|  | if ( GetXMLImport().IsTextDocInOOoFileFormat() ) | 
|  | { | 
|  | bChooseLastOne = true; | 
|  | } | 
|  | else | 
|  | { | 
|  | sal_Int32 nUPD( 0 ); | 
|  | sal_Int32 nBuild( 0 ); | 
|  | if ( GetXMLImport().getBuildIds( nUPD, nBuild ) ) | 
|  | { | 
|  | // check explicitly on certain versions | 
|  | bChooseLastOne = ( nUPD == 641 ) || ( nUPD == 645 ) ||  // prior OOo 2.0 | 
|  | ( nUPD == 680 && nBuild <= 9073 ); // OOo 2.0 - OOo 2.0.4 | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | OUString sOutlineStyleName; | 
|  | { | 
|  | Reference<XPropertySet> xChapterNumRule( | 
|  | m_pImpl->m_xChapterNumbering, UNO_QUERY); | 
|  | const OUString sName(RTL_CONSTASCII_USTRINGPARAM("Name")); | 
|  | xChapterNumRule->getPropertyValue(sName) >>= sOutlineStyleName; | 
|  | } | 
|  |  | 
|  | const sal_Int32 nCount = m_pImpl->m_xChapterNumbering->getCount(); | 
|  | // --> OD 2009-11-13 #i106218# | 
|  | // First collect all paragraph styles chosen for assignment to each | 
|  | // list level of the outline style, then perform the intrinsic assignment. | 
|  | // Reason: The assignment of a certain paragraph style to a list level | 
|  | //         of the outline style causes side effects on the children | 
|  | //         paragraph styles in Writer. | 
|  | ::std::vector<OUString> sChosenStyles(nCount); | 
|  | // <-- | 
|  | for( sal_Int32 i=0; i < nCount; ++i ) | 
|  | { | 
|  | if ( bSetEmptyLevels || | 
|  | (m_pImpl->m_pOutlineStylesCandidates && | 
|  | !m_pImpl->m_pOutlineStylesCandidates[i].empty())) | 
|  | { | 
|  | // determine, which candidate is one to be assigned to the list | 
|  | // level of the outline style | 
|  | if (m_pImpl->m_pOutlineStylesCandidates && | 
|  | !m_pImpl->m_pOutlineStylesCandidates[i].empty()) | 
|  | { | 
|  | if ( bChooseLastOne ) | 
|  | { | 
|  | sChosenStyles[i] = | 
|  | m_pImpl->m_pOutlineStylesCandidates[i].back(); | 
|  | } | 
|  | else | 
|  | { | 
|  | for (sal_uInt32 j = 0; | 
|  | j < m_pImpl->m_pOutlineStylesCandidates[i].size(); | 
|  | ++j) | 
|  | { | 
|  | if (!lcl_HasListStyle( | 
|  | m_pImpl->m_pOutlineStylesCandidates[i][j], | 
|  | m_pImpl->m_xParaStyles, | 
|  | GetXMLImport(), | 
|  | s_NumberingStyleName, | 
|  | sOutlineStyleName)) | 
|  | { | 
|  | sChosenStyles[i] = | 
|  | m_pImpl->m_pOutlineStylesCandidates[i][j]; | 
|  | break; | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  | // --> OD 2009-11-13 #i106218# | 
|  | Sequence < PropertyValue > aProps( 1 ); | 
|  | PropertyValue *pProps = aProps.getArray(); | 
|  | pProps->Name = s_HeadingStyleName; | 
|  | for ( sal_Int32 i = 0; i < nCount; ++i ) | 
|  | { | 
|  | // --> OD 2009-12-11 #i107610# | 
|  | if ( bSetEmptyLevels || | 
|  | sChosenStyles[i].getLength() > 0 ) | 
|  | // <-- | 
|  | { | 
|  | pProps->Value <<= sChosenStyles[i]; | 
|  | m_pImpl->m_xChapterNumbering->replaceByIndex(i, | 
|  | makeAny( aProps )); | 
|  | } | 
|  | } | 
|  | // <-- | 
|  | } | 
|  | } | 
|  |  | 
|  | void XMLTextImportHelper::SetHyperlink( | 
|  | SvXMLImport& rImport, | 
|  | const Reference < XTextCursor >& rCursor, | 
|  | const OUString& rHRef, | 
|  | const OUString& rName, | 
|  | const OUString& rTargetFrameName, | 
|  | const OUString& rStyleName, | 
|  | const OUString& rVisitedStyleName, | 
|  | XMLEventsImportContext* pEvents) | 
|  | { | 
|  | static ::rtl::OUString s_HyperLinkURL( | 
|  | RTL_CONSTASCII_USTRINGPARAM("HyperLinkURL")); | 
|  | static ::rtl::OUString s_HyperLinkName( | 
|  | RTL_CONSTASCII_USTRINGPARAM("HyperLinkName")); | 
|  | static ::rtl::OUString s_HyperLinkTarget( | 
|  | RTL_CONSTASCII_USTRINGPARAM("HyperLinkTarget")); | 
|  | static ::rtl::OUString s_UnvisitedCharStyleName( | 
|  | RTL_CONSTASCII_USTRINGPARAM("UnvisitedCharStyleName")); | 
|  | static ::rtl::OUString s_VisitedCharStyleName( | 
|  | RTL_CONSTASCII_USTRINGPARAM("VisitedCharStyleName")); | 
|  | static ::rtl::OUString s_HyperLinkEvents( | 
|  | RTL_CONSTASCII_USTRINGPARAM("HyperLinkEvents")); | 
|  |  | 
|  | Reference < XPropertySet > xPropSet( rCursor, UNO_QUERY ); | 
|  | Reference < XPropertySetInfo > xPropSetInfo( | 
|  | xPropSet->getPropertySetInfo()); | 
|  | if (!xPropSetInfo.is() || !xPropSetInfo->hasPropertyByName(s_HyperLinkURL)) | 
|  | return; | 
|  |  | 
|  | xPropSet->setPropertyValue(s_HyperLinkURL, makeAny(rHRef)); | 
|  |  | 
|  | if (xPropSetInfo->hasPropertyByName(s_HyperLinkName)) | 
|  | { | 
|  | xPropSet->setPropertyValue(s_HyperLinkName, makeAny(rName)); | 
|  | } | 
|  |  | 
|  | if (xPropSetInfo->hasPropertyByName(s_HyperLinkTarget)) | 
|  | { | 
|  | xPropSet->setPropertyValue(s_HyperLinkTarget, | 
|  | makeAny(rTargetFrameName)); | 
|  | } | 
|  |  | 
|  | if ( (pEvents != NULL) && | 
|  | xPropSetInfo->hasPropertyByName(s_HyperLinkEvents)) | 
|  | { | 
|  | // The API treats events at hyperlinks differently from most | 
|  | // other properties: You have to set a name replace with the | 
|  | // events in it. The easiest way to to this is to 1) get | 
|  | // events, 2) set new ones, and 3) then put events back. | 
|  | uno::Reference<XNameReplace> const xReplace( | 
|  | xPropSet->getPropertyValue(s_HyperLinkEvents), UNO_QUERY); | 
|  | if (xReplace.is()) | 
|  | { | 
|  | // set events | 
|  | pEvents->SetEvents(xReplace); | 
|  |  | 
|  | // put events | 
|  | xPropSet->setPropertyValue(s_HyperLinkEvents, makeAny(xReplace)); | 
|  | } | 
|  | } | 
|  |  | 
|  | if (m_pImpl->m_xTextStyles.is()) | 
|  | { | 
|  | OUString sDisplayName( | 
|  | rImport.GetStyleDisplayName( | 
|  | XML_STYLE_FAMILY_TEXT_TEXT, rStyleName ) ); | 
|  | if( sDisplayName.getLength() && | 
|  | xPropSetInfo->hasPropertyByName(s_UnvisitedCharStyleName) && | 
|  | m_pImpl->m_xTextStyles->hasByName(sDisplayName)) | 
|  | { | 
|  | xPropSet->setPropertyValue(s_UnvisitedCharStyleName, | 
|  | makeAny(sDisplayName)); | 
|  | } | 
|  |  | 
|  | sDisplayName = | 
|  | rImport.GetStyleDisplayName( | 
|  | XML_STYLE_FAMILY_TEXT_TEXT, rVisitedStyleName ); | 
|  | if( sDisplayName.getLength() && | 
|  | xPropSetInfo->hasPropertyByName(s_VisitedCharStyleName) && | 
|  | m_pImpl->m_xTextStyles->hasByName(sDisplayName)) | 
|  | { | 
|  | xPropSet->setPropertyValue(s_VisitedCharStyleName, | 
|  | makeAny(sDisplayName)); | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | void XMLTextImportHelper::SetRuby( | 
|  | SvXMLImport& rImport, | 
|  | const Reference < XTextCursor >& rCursor, | 
|  | const OUString& rStyleName, | 
|  | const OUString& rTextStyleName, | 
|  | const OUString& rText ) | 
|  | { | 
|  | Reference<XPropertySet> xPropSet(rCursor, UNO_QUERY); | 
|  |  | 
|  | OUString sRubyText(RTL_CONSTASCII_USTRINGPARAM("RubyText")); | 
|  | OUString sRubyCharStyleName(RTL_CONSTASCII_USTRINGPARAM("RubyCharStyleName")); | 
|  |  | 
|  | // if we have one Ruby property, we assume all of them are present | 
|  | if (xPropSet.is() && | 
|  | xPropSet->getPropertySetInfo()->hasPropertyByName( sRubyText )) | 
|  | { | 
|  | // the ruby text | 
|  | xPropSet->setPropertyValue(sRubyText, makeAny(rText)); | 
|  |  | 
|  | // the ruby style (ruby-adjust) | 
|  | XMLPropStyleContext *pStyle = 0; | 
|  | if (rStyleName.getLength() && m_pImpl->m_xAutoStyles.Is()) | 
|  | { | 
|  | const SvXMLStyleContext* pTempStyle = | 
|  | ((SvXMLStylesContext *)&m_pImpl->m_xAutoStyles)-> | 
|  | FindStyleChildContext( XML_STYLE_FAMILY_TEXT_RUBY, | 
|  | rStyleName, sal_True ); | 
|  | pStyle = PTR_CAST(XMLPropStyleContext,pTempStyle); | 
|  |  | 
|  | if (NULL != pStyle) | 
|  | pStyle->FillPropertySet( xPropSet ); | 
|  | } | 
|  |  | 
|  | // the ruby text character style | 
|  | if (m_pImpl->m_xTextStyles.is()) | 
|  | { | 
|  | OUString sDisplayName( | 
|  | rImport.GetStyleDisplayName( | 
|  | XML_STYLE_FAMILY_TEXT_TEXT, rTextStyleName ) ); | 
|  | if( (sDisplayName.getLength() > 0) && | 
|  | //				xPropSetInfo->hasPropertyByName( sRubyCharStyleName ) && | 
|  | m_pImpl->m_xTextStyles->hasByName( sDisplayName )) | 
|  | { | 
|  | xPropSet->setPropertyValue(sRubyCharStyleName, makeAny(sDisplayName)); | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | void XMLTextImportHelper::SetAutoStyles( SvXMLStylesContext *pStyles ) | 
|  | { | 
|  | m_pImpl->m_xAutoStyles = pStyles; | 
|  | } | 
|  |  | 
|  | void XMLTextImportHelper::SetFontDecls( XMLFontStylesContext *pFontDecls ) | 
|  | { | 
|  | m_pImpl->m_xFontDecls = pFontDecls; | 
|  | ((XMLTextImportPropertyMapper *)m_pImpl->m_xParaImpPrMap.get()) | 
|  | ->SetFontDecls( pFontDecls ); | 
|  | ((XMLTextImportPropertyMapper *)m_pImpl->m_xTextImpPrMap.get()) | 
|  | ->SetFontDecls( pFontDecls ); | 
|  | } | 
|  |  | 
|  | const XMLFontStylesContext *XMLTextImportHelper::GetFontDecls() const | 
|  | { | 
|  | return (XMLFontStylesContext *)&m_pImpl->m_xFontDecls; | 
|  | } | 
|  |  | 
|  | sal_Bool XMLTextImportHelper::HasDrawNameAttribute( | 
|  | const Reference< XAttributeList > & xAttrList, | 
|  | SvXMLNamespaceMap& rNamespaceMap ) | 
|  | { | 
|  | sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; | 
|  | for( sal_Int16 i=0; i < nAttrCount; i++ ) | 
|  | { | 
|  | const OUString& rAttrName = xAttrList->getNameByIndex( i ); | 
|  |  | 
|  | OUString aLocalName; | 
|  | sal_uInt16 nPrefix = | 
|  | rNamespaceMap.GetKeyByAttrName( rAttrName, &aLocalName ); | 
|  | if( XML_NAMESPACE_DRAW == nPrefix && | 
|  | IsXMLToken( aLocalName, XML_NAME ) ) | 
|  | { | 
|  | return xAttrList->getValueByIndex(i).getLength() != 0; | 
|  | } | 
|  | } | 
|  |  | 
|  | return sal_False; | 
|  | } | 
|  |  | 
|  | SvXMLImportContext *XMLTextImportHelper::CreateTextChildContext( | 
|  | SvXMLImport& rImport, | 
|  | sal_uInt16 nPrefix, const OUString& rLocalName, | 
|  | const Reference< XAttributeList > & xAttrList, | 
|  | XMLTextType eType ) | 
|  | { | 
|  | SvXMLImportContext *pContext = 0; | 
|  |  | 
|  | const SvXMLTokenMap& rTokenMap = GetTextElemTokenMap(); | 
|  | sal_Bool bHeading = sal_False; | 
|  | sal_Bool bContent = sal_True; | 
|  | sal_uInt16 nToken = rTokenMap.Get( nPrefix, rLocalName ); | 
|  | switch( nToken ) | 
|  | { | 
|  | case XML_TOK_TEXT_H: | 
|  | bHeading = sal_True; | 
|  | case XML_TOK_TEXT_P: | 
|  | pContext = new XMLParaContext( rImport, | 
|  | nPrefix, rLocalName, | 
|  | xAttrList, bHeading ); | 
|  | if (m_pImpl->m_bProgress && XML_TEXT_TYPE_SHAPE != eType) | 
|  | { | 
|  | rImport.GetProgressBarHelper()->Increment(); | 
|  | } | 
|  | break; | 
|  | case XML_TOK_TEXT_NUMBERED_PARAGRAPH: | 
|  | pContext = new XMLNumberedParaContext( | 
|  | rImport, nPrefix, rLocalName, xAttrList ); | 
|  | break; | 
|  | case XML_TOK_TEXT_LIST: | 
|  | pContext = new XMLTextListBlockContext( rImport, *this, | 
|  | nPrefix, rLocalName, | 
|  | xAttrList ); | 
|  | break; | 
|  | case XML_TOK_TABLE_TABLE: | 
|  | if( XML_TEXT_TYPE_BODY == eType || | 
|  | XML_TEXT_TYPE_TEXTBOX == eType || | 
|  | XML_TEXT_TYPE_SECTION == eType || | 
|  | XML_TEXT_TYPE_HEADER_FOOTER == eType || | 
|  | XML_TEXT_TYPE_CHANGED_REGION == eType || | 
|  | XML_TEXT_TYPE_CELL == eType ) | 
|  | pContext = CreateTableChildContext( rImport, nPrefix, rLocalName, | 
|  | xAttrList ); | 
|  | break; | 
|  | case XML_TOK_TEXT_SEQUENCE_DECLS: | 
|  | if ((XML_TEXT_TYPE_BODY == eType && m_pImpl->m_bBodyContentStarted) || | 
|  | XML_TEXT_TYPE_HEADER_FOOTER == eType ) | 
|  | { | 
|  | pContext = new XMLVariableDeclsImportContext( | 
|  | rImport, *this,	nPrefix, rLocalName, VarTypeSequence); | 
|  | bContent = sal_False; | 
|  | } | 
|  | break; | 
|  |  | 
|  | case XML_TOK_TEXT_VARFIELD_DECLS: | 
|  | if ((XML_TEXT_TYPE_BODY == eType && m_pImpl->m_bBodyContentStarted) || | 
|  | XML_TEXT_TYPE_HEADER_FOOTER == eType ) | 
|  | { | 
|  | pContext = new XMLVariableDeclsImportContext( | 
|  | rImport, *this, nPrefix, rLocalName, VarTypeSimple); | 
|  | bContent = sal_False; | 
|  | } | 
|  | break; | 
|  |  | 
|  | case XML_TOK_TEXT_USERFIELD_DECLS: | 
|  | if ((XML_TEXT_TYPE_BODY == eType && m_pImpl->m_bBodyContentStarted)|| | 
|  | XML_TEXT_TYPE_HEADER_FOOTER == eType ) | 
|  | { | 
|  | pContext = new XMLVariableDeclsImportContext( | 
|  | rImport, *this, nPrefix, rLocalName, VarTypeUserField); | 
|  | bContent = sal_False; | 
|  | } | 
|  | break; | 
|  |  | 
|  | case XML_TOK_TEXT_DDE_DECLS: | 
|  | if ((XML_TEXT_TYPE_BODY == eType && m_pImpl->m_bBodyContentStarted) || | 
|  | XML_TEXT_TYPE_HEADER_FOOTER == eType ) | 
|  | { | 
|  | pContext = new XMLDdeFieldDeclsImportContext( | 
|  | rImport, nPrefix, rLocalName); | 
|  | bContent = sal_False; | 
|  | } | 
|  | break; | 
|  |  | 
|  | case XML_TOK_TEXT_FRAME_PAGE: | 
|  | if ((XML_TEXT_TYPE_BODY == eType && m_pImpl->m_bBodyContentStarted) || | 
|  | XML_TEXT_TYPE_TEXTBOX == eType || | 
|  | XML_TEXT_TYPE_CHANGED_REGION == eType ) | 
|  | { | 
|  | TextContentAnchorType eAnchorType = | 
|  | XML_TEXT_TYPE_TEXTBOX == eType ? TextContentAnchorType_AT_FRAME | 
|  | : TextContentAnchorType_AT_PAGE; | 
|  | pContext = new XMLTextFrameContext( rImport, nPrefix, | 
|  | rLocalName, xAttrList, | 
|  | eAnchorType ); | 
|  | bContent = sal_False; | 
|  | } | 
|  | break; | 
|  |  | 
|  | case XML_TOK_DRAW_A_PAGE: | 
|  | if ((XML_TEXT_TYPE_BODY == eType && m_pImpl->m_bBodyContentStarted) || | 
|  | XML_TEXT_TYPE_TEXTBOX == eType || | 
|  | XML_TEXT_TYPE_CHANGED_REGION == eType) | 
|  | { | 
|  | TextContentAnchorType eAnchorType = | 
|  | XML_TEXT_TYPE_TEXTBOX == eType ? TextContentAnchorType_AT_FRAME | 
|  | : TextContentAnchorType_AT_PAGE; | 
|  | pContext = new XMLTextFrameHyperlinkContext( rImport, nPrefix, | 
|  | rLocalName, xAttrList, | 
|  | eAnchorType ); | 
|  | bContent = sal_False; | 
|  | } | 
|  | break; | 
|  |  | 
|  | case XML_TOK_TEXT_INDEX_TITLE: | 
|  | case XML_TOK_TEXT_SECTION: | 
|  | #ifndef SVX_LIGHT | 
|  | pContext = new XMLSectionImportContext( rImport, nPrefix, rLocalName ); | 
|  | #else | 
|  | // create default context to skip content | 
|  | pContext = new SvXMLImportContext( rImport, nPrefix, rLocalName ); | 
|  | #endif // #ifndef SVX_LIGHT | 
|  | break; | 
|  |  | 
|  | case XML_TOK_TEXT_TOC: | 
|  | case XML_TOK_TEXT_OBJECT_INDEX: | 
|  | case XML_TOK_TEXT_TABLE_INDEX: | 
|  | case XML_TOK_TEXT_ILLUSTRATION_INDEX: | 
|  | case XML_TOK_TEXT_USER_INDEX: | 
|  | case XML_TOK_TEXT_ALPHABETICAL_INDEX: | 
|  | case XML_TOK_TEXT_BIBLIOGRAPHY_INDEX: | 
|  | #ifndef SVX_LIGHT | 
|  | if( XML_TEXT_TYPE_SHAPE != eType ) | 
|  | pContext = new XMLIndexTOCContext( rImport, nPrefix, rLocalName ); | 
|  | #else | 
|  | // create default context to skip content | 
|  | pContext = new SvXMLImportContext( rImport, nPrefix, rLocalName ); | 
|  | #endif // #ifndef SVX_LIGHT | 
|  | break; | 
|  |  | 
|  | case XML_TOK_TEXT_TRACKED_CHANGES: | 
|  | #ifndef SVX_LIGHT | 
|  | pContext = new XMLTrackedChangesImportContext( rImport, nPrefix, | 
|  | rLocalName); | 
|  | #else | 
|  | // create default context to skip content | 
|  | pContext = new SvXMLImportContext( rImport, nPrefix, rLocalName ); | 
|  | #endif // #ifndef SVX_LIGHT | 
|  | bContent = sal_False; | 
|  | break; | 
|  |  | 
|  | case XML_TOK_TEXT_CHANGE: | 
|  | case XML_TOK_TEXT_CHANGE_START: | 
|  | case XML_TOK_TEXT_CHANGE_END: | 
|  | pContext = new XMLChangeImportContext( | 
|  | rImport, nPrefix, rLocalName, | 
|  | (XML_TOK_TEXT_CHANGE_END != nToken), | 
|  | (XML_TOK_TEXT_CHANGE_START != nToken), | 
|  | sal_True); | 
|  | break; | 
|  |  | 
|  | case XML_TOK_TEXT_FORMS: | 
|  | #ifndef SVX_LIGHT | 
|  | pContext = rImport.GetFormImport()->createOfficeFormsContext(rImport, nPrefix, rLocalName); | 
|  | #else | 
|  | // create default context to skip content | 
|  | pContext = new SvXMLImportContext( rImport, nPrefix, rLocalName ); | 
|  | #endif // #ifndef SVX_LIGHT | 
|  | bContent = sal_False; | 
|  | break; | 
|  |  | 
|  | case XML_TOK_TEXT_AUTOMARK: | 
|  | if( XML_TEXT_TYPE_BODY == eType ) | 
|  | { | 
|  | pContext = new XMLAutoMarkFileContext(rImport, nPrefix,rLocalName); | 
|  | } | 
|  | bContent = sal_False; | 
|  | break; | 
|  |  | 
|  | case XML_TOK_TEXT_CALCULATION_SETTINGS: | 
|  | #ifndef SVX_LIGHT | 
|  | pContext = new XMLCalculationSettingsContext ( rImport, nPrefix, rLocalName, xAttrList); | 
|  | #else | 
|  | // create default context to skip content | 
|  | pContext = new SvXMLImportContext( rImport, nPrefix, rLocalName ); | 
|  | #endif // #ifndef SVX_LIGHT | 
|  | bContent = sal_False; | 
|  | break; | 
|  |  | 
|  | default: | 
|  | if ((XML_TEXT_TYPE_BODY == eType && m_pImpl->m_bBodyContentStarted) || | 
|  | XML_TEXT_TYPE_TEXTBOX == eType || | 
|  | XML_TEXT_TYPE_CHANGED_REGION == eType ) | 
|  | { | 
|  | Reference < XShapes > xShapes; | 
|  | pContext = rImport.GetShapeImport()->CreateGroupChildContext( | 
|  | rImport, nPrefix, rLocalName, xAttrList, xShapes ); | 
|  | bContent = sal_False; | 
|  | } | 
|  | } | 
|  |  | 
|  | //	if( !pContext ) | 
|  | //		pContext = new SvXMLImportContext( GetImport(), nPrefix, rLocalName ); | 
|  |  | 
|  | // handle open redlines | 
|  | if ( (XML_TOK_TEXT_CHANGE != nToken) && | 
|  | (XML_TOK_TEXT_CHANGE_END != nToken) && | 
|  | (XML_TOK_TEXT_CHANGE_START != nToken) ) | 
|  | { | 
|  | //		ResetOpenRedlineId(); | 
|  | } | 
|  |  | 
|  | if( XML_TEXT_TYPE_BODY == eType && bContent ) | 
|  | { | 
|  | m_pImpl->m_bBodyContentStarted = sal_False; | 
|  | } | 
|  |  | 
|  | return pContext; | 
|  | } | 
|  |  | 
|  | SvXMLImportContext *XMLTextImportHelper::CreateTableChildContext( | 
|  | SvXMLImport&, | 
|  | sal_uInt16 /*nPrefix*/, const OUString& /*rLocalName*/, | 
|  | const Reference< XAttributeList > & ) | 
|  | { | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | /// get data style key for use with NumberFormat property | 
|  | sal_Int32 XMLTextImportHelper::GetDataStyleKey(const OUString& sStyleName, | 
|  | sal_Bool* pIsSystemLanguage ) | 
|  | { | 
|  | const SvXMLStyleContext* pStyle = | 
|  | ((SvXMLStylesContext *)&m_pImpl->m_xAutoStyles)-> | 
|  | FindStyleChildContext( XML_STYLE_FAMILY_DATA_STYLE, | 
|  | sStyleName, sal_True ); | 
|  |  | 
|  | // get appropriate context | 
|  |  | 
|  |  | 
|  | // first check if its a impress and draw only number format | 
|  | // this is needed since its also a SvXMLNumFormatContext, | 
|  | // that was needed to support them for controls in impress/draw also | 
|  | SdXMLNumberFormatImportContext* pSdNumStyle = PTR_CAST( SdXMLNumberFormatImportContext, pStyle ); | 
|  | if( pSdNumStyle ) | 
|  | { | 
|  | return pSdNumStyle->GetDrawKey(); | 
|  | } | 
|  | else | 
|  | { | 
|  | SvXMLNumFormatContext* pNumStyle = PTR_CAST( SvXMLNumFormatContext, pStyle ); | 
|  | if( pNumStyle ) | 
|  | { | 
|  | if( pIsSystemLanguage != NULL ) | 
|  | *pIsSystemLanguage = pNumStyle->IsSystemLanguage(); | 
|  |  | 
|  | // return key | 
|  | return pNumStyle->GetKey(); | 
|  | } | 
|  | } | 
|  | return -1; | 
|  | } | 
|  |  | 
|  | const SvxXMLListStyleContext *XMLTextImportHelper::FindAutoListStyle( const OUString& rName ) const | 
|  | { | 
|  | const SvxXMLListStyleContext *pStyle = 0; | 
|  | if (m_pImpl->m_xAutoStyles.Is()) | 
|  | { | 
|  | const SvXMLStyleContext* pTempStyle = | 
|  | ((SvXMLStylesContext *)&m_pImpl->m_xAutoStyles)-> | 
|  | FindStyleChildContext( XML_STYLE_FAMILY_TEXT_LIST, rName, | 
|  | sal_True ); | 
|  | pStyle = PTR_CAST( SvxXMLListStyleContext ,pTempStyle); | 
|  | } | 
|  |  | 
|  | return pStyle; | 
|  | } | 
|  |  | 
|  | XMLPropStyleContext *XMLTextImportHelper::FindAutoFrameStyle( const OUString& rName ) const | 
|  | { | 
|  | XMLPropStyleContext *pStyle = 0; | 
|  | if (m_pImpl->m_xAutoStyles.Is()) | 
|  | { | 
|  | const SvXMLStyleContext* pTempStyle = | 
|  | ((SvXMLStylesContext *)&m_pImpl->m_xAutoStyles)-> | 
|  | FindStyleChildContext( XML_STYLE_FAMILY_SD_GRAPHICS_ID, rName, | 
|  | sal_True ); | 
|  | pStyle = PTR_CAST( XMLPropStyleContext ,pTempStyle); | 
|  | } | 
|  |  | 
|  | return pStyle; | 
|  | } | 
|  |  | 
|  | XMLPropStyleContext* XMLTextImportHelper::FindSectionStyle( | 
|  | const OUString& rName ) const | 
|  | { | 
|  | XMLPropStyleContext* pStyle = NULL; | 
|  | if (m_pImpl->m_xAutoStyles.Is()) | 
|  | { | 
|  | const SvXMLStyleContext* pTempStyle = | 
|  | ((SvXMLStylesContext *)&m_pImpl->m_xAutoStyles)-> | 
|  | FindStyleChildContext( | 
|  | XML_STYLE_FAMILY_TEXT_SECTION, | 
|  | rName, sal_True ); | 
|  | pStyle = PTR_CAST( XMLPropStyleContext,pTempStyle); | 
|  | } | 
|  |  | 
|  | return pStyle; | 
|  | } | 
|  |  | 
|  | XMLPropStyleContext* XMLTextImportHelper::FindPageMaster( | 
|  | const OUString& rName ) const | 
|  | { | 
|  | XMLPropStyleContext* pStyle = NULL; | 
|  | if (m_pImpl->m_xAutoStyles.Is()) | 
|  | { | 
|  | const SvXMLStyleContext* pTempStyle = | 
|  | ((SvXMLStylesContext *)&m_pImpl->m_xAutoStyles)-> | 
|  | FindStyleChildContext( | 
|  | XML_STYLE_FAMILY_PAGE_MASTER, | 
|  | rName, sal_True ); | 
|  | pStyle = PTR_CAST( XMLPropStyleContext,pTempStyle); | 
|  | } | 
|  |  | 
|  | return pStyle; | 
|  | } | 
|  |  | 
|  |  | 
|  | void XMLTextImportHelper::PushListContext(XMLTextListBlockContext *i_pListBlock) | 
|  | { | 
|  | GetTextListHelper().PushListContext(i_pListBlock); | 
|  | } | 
|  |  | 
|  | void XMLTextImportHelper::PopListContext() | 
|  | { | 
|  | GetTextListHelper().PopListContext(); | 
|  | } | 
|  |  | 
|  |  | 
|  | const SvXMLTokenMap& XMLTextImportHelper::GetTextNumberedParagraphAttrTokenMap() | 
|  | { | 
|  | if (!m_pImpl->m_pTextNumberedParagraphAttrTokenMap.get()) | 
|  | { | 
|  | m_pImpl->m_pTextNumberedParagraphAttrTokenMap.reset( | 
|  | new SvXMLTokenMap( aTextNumberedParagraphAttrTokenMap ) ); | 
|  | } | 
|  | return *m_pImpl->m_pTextNumberedParagraphAttrTokenMap; | 
|  | } | 
|  |  | 
|  | const SvXMLTokenMap& XMLTextImportHelper::GetTextListBlockAttrTokenMap() | 
|  | { | 
|  | if (!m_pImpl->m_pTextListBlockAttrTokenMap.get()) | 
|  | { | 
|  | m_pImpl->m_pTextListBlockAttrTokenMap.reset( | 
|  | new SvXMLTokenMap( aTextListBlockAttrTokenMap ) ); | 
|  | } | 
|  | return *m_pImpl->m_pTextListBlockAttrTokenMap; | 
|  | } | 
|  |  | 
|  | const SvXMLTokenMap& XMLTextImportHelper::GetTextListBlockElemTokenMap() | 
|  | { | 
|  | if (!m_pImpl->m_pTextListBlockElemTokenMap.get()) | 
|  | { | 
|  | m_pImpl->m_pTextListBlockElemTokenMap.reset( | 
|  | new SvXMLTokenMap( aTextListBlockElemTokenMap ) ); | 
|  | } | 
|  | return *m_pImpl->m_pTextListBlockElemTokenMap; | 
|  | } | 
|  |  | 
|  | SvI18NMap& XMLTextImportHelper::GetRenameMap() | 
|  | { | 
|  | if (!m_pImpl->m_pRenameMap.get()) | 
|  | { | 
|  | m_pImpl->m_pRenameMap.reset( new SvI18NMap() ); | 
|  | } | 
|  | return *m_pImpl->m_pRenameMap; | 
|  | } | 
|  |  | 
|  | void XMLTextImportHelper::InsertBookmarkStartRange( | 
|  | const OUString sName, | 
|  | const Reference<XTextRange> & rRange, | 
|  | OUString const& i_rXmlId, | 
|  | ::boost::shared_ptr< ::xmloff::ParsedRDFaAttributes > & i_rpRDFaAttributes) | 
|  | { | 
|  | m_pImpl->m_BookmarkStartRanges[sName] = | 
|  | ::boost::make_tuple(rRange, i_rXmlId, i_rpRDFaAttributes); | 
|  | m_pImpl->m_BookmarkVector.push_back(sName); | 
|  | } | 
|  |  | 
|  | sal_Bool XMLTextImportHelper::FindAndRemoveBookmarkStartRange( | 
|  | const OUString sName, | 
|  | Reference<XTextRange> & o_rRange, | 
|  | OUString & o_rXmlId, | 
|  | ::boost::shared_ptr< ::xmloff::ParsedRDFaAttributes > & o_rpRDFaAttributes) | 
|  | { | 
|  | if (m_pImpl->m_BookmarkStartRanges.count(sName)) | 
|  | { | 
|  | Impl::BookmarkMapEntry_t & rEntry = | 
|  | (*m_pImpl->m_BookmarkStartRanges.find(sName)).second; | 
|  | o_rRange.set(rEntry.get<0>()); | 
|  | o_rXmlId = rEntry.get<1>(); | 
|  | o_rpRDFaAttributes = rEntry.get<2>(); | 
|  | m_pImpl->m_BookmarkStartRanges.erase(sName); | 
|  | Impl::BookmarkVector_t::iterator it(m_pImpl->m_BookmarkVector.begin()); | 
|  | while (it != m_pImpl->m_BookmarkVector.end() && it->compareTo(sName)!=0) | 
|  | { | 
|  | it++; | 
|  | } | 
|  | if (it!=m_pImpl->m_BookmarkVector.end()) { | 
|  | m_pImpl->m_BookmarkVector.erase(it); | 
|  | } | 
|  | return sal_True; | 
|  | } | 
|  | else | 
|  | { | 
|  | return sal_False; | 
|  | } | 
|  | } | 
|  |  | 
|  | ::rtl::OUString XMLTextImportHelper::FindActiveBookmarkName() | 
|  | { | 
|  | if (!m_pImpl->m_BookmarkVector.empty()) { | 
|  | return m_pImpl->m_BookmarkVector.back(); | 
|  | } else return ::rtl::OUString(); // return the empty string on error... | 
|  | } | 
|  |  | 
|  | ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > XMLTextImportHelper::GetRangeFor(::rtl::OUString &sName) | 
|  | { | 
|  | return m_pImpl->m_BookmarkStartRanges[sName].get<0>(); | 
|  | } | 
|  |  | 
|  |  | 
|  | void XMLTextImportHelper::pushFieldCtx( ::rtl::OUString name, ::rtl::OUString type ) | 
|  | { | 
|  | m_pImpl->m_FieldStack.push(Impl::field_stack_item_t( | 
|  | Impl::field_name_type_t(name, type), Impl::field_params_t())); | 
|  | } | 
|  |  | 
|  | void XMLTextImportHelper::popFieldCtx() | 
|  | { | 
|  | m_pImpl->m_FieldStack.pop(); | 
|  | } | 
|  |  | 
|  | void XMLTextImportHelper::addFieldParam( ::rtl::OUString name, ::rtl::OUString value ) | 
|  | { | 
|  | DBG_ASSERT(!m_pImpl->m_FieldStack.empty(), | 
|  | "stack is empty: not good! Do a pushFieldCtx before..."); | 
|  | if (!m_pImpl->m_FieldStack.empty()) { | 
|  | Impl::field_stack_item_t & FieldStackItem(m_pImpl->m_FieldStack.top()); | 
|  | FieldStackItem.second.push_back(Impl::field_param_t( name, value )); | 
|  | } | 
|  | } | 
|  | ::rtl::OUString XMLTextImportHelper::getCurrentFieldName() | 
|  | { | 
|  | DBG_ASSERT(!m_pImpl->m_FieldStack.empty(), | 
|  | "stack is empty: not good! Do a pushFieldCtx before..."); | 
|  | if (!m_pImpl->m_FieldStack.empty()) { | 
|  | return m_pImpl->m_FieldStack.top().first.first; | 
|  | } else  return ::rtl::OUString(); | 
|  | } | 
|  |  | 
|  | ::rtl::OUString XMLTextImportHelper::getCurrentFieldType() | 
|  | { | 
|  | DBG_ASSERT(!m_pImpl->m_FieldStack.empty(), | 
|  | "stack is empty: not good! Do a pushFieldCtx before..."); | 
|  | if (!m_pImpl->m_FieldStack.empty()) { | 
|  | return m_pImpl->m_FieldStack.top().first.second; | 
|  | } else  return ::rtl::OUString(); | 
|  | } | 
|  |  | 
|  | bool XMLTextImportHelper::hasCurrentFieldCtx() | 
|  | { | 
|  | return !m_pImpl->m_FieldStack.empty(); | 
|  | } | 
|  |  | 
|  | void XMLTextImportHelper::setCurrentFieldParamsTo(::com::sun::star::uno::Reference< ::com::sun::star::text::XFormField> &xFormField) | 
|  | { | 
|  | DBG_ASSERT(!m_pImpl->m_FieldStack.empty(), | 
|  | "stack is empty: not good! Do a pushFieldCtx before..."); | 
|  | if (!m_pImpl->m_FieldStack.empty() && xFormField.is()) | 
|  | { | 
|  | FieldParamImporter(&m_pImpl->m_FieldStack.top().second, | 
|  | xFormField->getParameters()).Import(); | 
|  | } | 
|  | } | 
|  |  | 
|  |  | 
|  | void XMLTextImportHelper::ConnectFrameChains( | 
|  | const OUString& rFrmName, | 
|  | const OUString& rNextFrmName, | 
|  | const Reference < XPropertySet >& rFrmPropSet ) | 
|  | { | 
|  | static ::rtl::OUString s_ChainNextName( | 
|  | RTL_CONSTASCII_USTRINGPARAM("ChainNextName")); | 
|  | static ::rtl::OUString s_ChainPrevName( | 
|  | RTL_CONSTASCII_USTRINGPARAM("ChainPrevName")); | 
|  |  | 
|  | if( !rFrmName.getLength() ) | 
|  | return; | 
|  |  | 
|  | if( rNextFrmName.getLength() ) | 
|  | { | 
|  | OUString sNextFrmName(GetRenameMap().Get( XML_TEXT_RENAME_TYPE_FRAME, | 
|  | rNextFrmName )); | 
|  | if (m_pImpl->m_xTextFrames.is() | 
|  | && m_pImpl->m_xTextFrames->hasByName(sNextFrmName)) | 
|  | { | 
|  | rFrmPropSet->setPropertyValue(s_ChainNextName, | 
|  | makeAny(sNextFrmName)); | 
|  | } | 
|  | else | 
|  | { | 
|  | if (!m_pImpl->m_pPrevFrmNames.get()) | 
|  | { | 
|  | m_pImpl->m_pPrevFrmNames.reset( new SvStringsDtor ); | 
|  | m_pImpl->m_pNextFrmNames.reset( new SvStringsDtor ); | 
|  | } | 
|  | m_pImpl->m_pPrevFrmNames->Insert( new String( rFrmName ), | 
|  | m_pImpl->m_pPrevFrmNames->Count() ); | 
|  | m_pImpl->m_pNextFrmNames->Insert( new String( sNextFrmName ), | 
|  | m_pImpl->m_pNextFrmNames->Count() ); | 
|  | } | 
|  | } | 
|  | if (m_pImpl->m_pPrevFrmNames.get() && m_pImpl->m_pPrevFrmNames->Count()) | 
|  | { | 
|  | sal_uInt16 nCount = m_pImpl->m_pPrevFrmNames->Count(); | 
|  | for( sal_uInt16 i=0; i<nCount; i++ ) | 
|  | { | 
|  | String *pNext = (*m_pImpl->m_pNextFrmNames)[i]; | 
|  | if( OUString(*pNext) == rFrmName ) | 
|  | { | 
|  | // The previuous frame must exist, because it existing than | 
|  | // inserting the entry | 
|  | String *pPrev = (*m_pImpl->m_pPrevFrmNames)[i]; | 
|  |  | 
|  | rFrmPropSet->setPropertyValue(s_ChainPrevName, | 
|  | makeAny(OUString( *pPrev ))); | 
|  |  | 
|  | m_pImpl->m_pPrevFrmNames->Remove( i, 1 ); | 
|  | m_pImpl->m_pNextFrmNames->Remove( i, 1 ); | 
|  | delete pPrev; | 
|  | delete pNext; | 
|  |  | 
|  | // There cannot be more than one previous frames | 
|  | break; | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | sal_Bool XMLTextImportHelper::IsInFrame() const | 
|  | { | 
|  | static ::rtl::OUString s_TextFrame( | 
|  | RTL_CONSTASCII_USTRINGPARAM("TextFrame")); | 
|  |  | 
|  | sal_Bool bIsInFrame = sal_False; | 
|  |  | 
|  | // are we currently in a text frame? yes, if the cursor has a | 
|  | // TextFrame property and it's non-NULL | 
|  | Reference<XPropertySet> xPropSet(((XMLTextImportHelper *)this)->GetCursor(), UNO_QUERY); | 
|  | if (xPropSet.is()) | 
|  | { | 
|  | if (xPropSet->getPropertySetInfo()->hasPropertyByName(s_TextFrame)) | 
|  | { | 
|  | uno::Reference<XTextFrame> const xFrame( | 
|  | xPropSet->getPropertyValue(s_TextFrame), UNO_QUERY); | 
|  |  | 
|  | if (xFrame.is()) | 
|  | { | 
|  | bIsInFrame = sal_True; | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | return bIsInFrame; | 
|  | } | 
|  |  | 
|  | sal_Bool XMLTextImportHelper::IsInHeaderFooter() const | 
|  | { | 
|  | return sal_False; | 
|  | } | 
|  |  | 
|  | Reference< XPropertySet> XMLTextImportHelper::createAndInsertOLEObject( | 
|  | SvXMLImport&, | 
|  | const OUString& /*rHRef*/, | 
|  | const OUString& /*rStyleName*/, | 
|  | const OUString& /*rTblName*/, | 
|  | sal_Int32 /*nWidth*/, sal_Int32 /*nHeight*/ ) | 
|  | { | 
|  | Reference< XPropertySet> xPropSet; | 
|  | return xPropSet; | 
|  | } | 
|  |  | 
|  | Reference< XPropertySet> XMLTextImportHelper::createAndInsertOOoLink( | 
|  | SvXMLImport&, | 
|  | const OUString& /*rHRef*/, | 
|  | const OUString& /*rStyleName*/, | 
|  | const OUString& /*rTblName*/, | 
|  | sal_Int32 /*nWidth*/, sal_Int32 /*nHeight*/ ) | 
|  | { | 
|  | Reference< XPropertySet> xPropSet; | 
|  | return xPropSet; | 
|  | } | 
|  |  | 
|  | Reference< XPropertySet> XMLTextImportHelper::createAndInsertApplet( | 
|  | const OUString& /*rCode*/, | 
|  | const OUString& /*rName*/, | 
|  | sal_Bool /*bMayScript*/, | 
|  | const OUString& /*rHRef*/, | 
|  | sal_Int32 /*nWidth*/, sal_Int32 /*nHeight*/ ) | 
|  | { | 
|  | Reference< XPropertySet> xPropSet; | 
|  | return xPropSet; | 
|  | } | 
|  | Reference< XPropertySet> XMLTextImportHelper::createAndInsertPlugin( | 
|  | const OUString& /*rMimeType*/, | 
|  | const OUString& /*rHRef*/, | 
|  | sal_Int32 /*nWidth*/, sal_Int32 /*nHeight*/ ) | 
|  | { | 
|  | Reference< XPropertySet> xPropSet; | 
|  | return xPropSet; | 
|  | } | 
|  | Reference< XPropertySet> XMLTextImportHelper::createAndInsertFloatingFrame( | 
|  | const OUString& /*rName*/, | 
|  | const OUString& /*rHRef*/, | 
|  | const OUString& /*rStyleName*/, | 
|  | sal_Int32 /*nWidth*/, sal_Int32 /*nHeight*/ ) | 
|  | { | 
|  | Reference< XPropertySet> xPropSet; | 
|  | return xPropSet; | 
|  | } | 
|  |  | 
|  | void XMLTextImportHelper::endAppletOrPlugin( | 
|  | const Reference < XPropertySet> &, | 
|  | std::map < const rtl::OUString, rtl::OUString, UStringLess > &) | 
|  | { | 
|  | } | 
|  | // redline helper: dummy implementation to be overridden in sw/filter/xml | 
|  | void XMLTextImportHelper::RedlineAdd( | 
|  | const OUString& /*rType*/, | 
|  | const OUString& /*rId*/, | 
|  | const OUString& /*rAuthor*/, | 
|  | const OUString& /*rComment*/, | 
|  | const DateTime& /*rDateTime*/, | 
|  | sal_Bool /*bMergeLastPara*/) | 
|  | { | 
|  | // dummy implementation: do nothing | 
|  | } | 
|  |  | 
|  | Reference<XTextCursor> XMLTextImportHelper::RedlineCreateText( | 
|  | Reference<XTextCursor> & /*rOldCursor*/, | 
|  | const OUString& /*rId*/) | 
|  | { | 
|  | // dummy implementation: do nothing | 
|  | Reference<XTextCursor> xRet; | 
|  | return xRet; | 
|  | } | 
|  |  | 
|  | void XMLTextImportHelper::RedlineSetCursor( | 
|  | const OUString& /*rId*/, | 
|  | sal_Bool /*bStart*/, | 
|  | sal_Bool /*bIsOutsideOfParagraph*/) | 
|  | { | 
|  | // dummy implementation: do nothing | 
|  | } | 
|  |  | 
|  | void XMLTextImportHelper::RedlineAdjustStartNodeCursor(sal_Bool) | 
|  | { | 
|  | // dummy implementation: do nothing | 
|  | } | 
|  |  | 
|  | void XMLTextImportHelper::SetShowChanges( sal_Bool ) | 
|  | { | 
|  | // dummy implementation: do nothing | 
|  | } | 
|  |  | 
|  | void XMLTextImportHelper::SetRecordChanges( sal_Bool ) | 
|  | { | 
|  | // dummy implementation: do nothing | 
|  | } | 
|  | void XMLTextImportHelper::SetChangesProtectionKey(const Sequence<sal_Int8> &) | 
|  | { | 
|  | // dummy implementation: do nothing | 
|  | } | 
|  |  | 
|  |  | 
|  | OUString XMLTextImportHelper::GetOpenRedlineId() | 
|  | { | 
|  | return m_pImpl->m_sOpenRedlineIdentifier; | 
|  | } | 
|  |  | 
|  | void XMLTextImportHelper::SetOpenRedlineId( ::rtl::OUString& rId) | 
|  | { | 
|  | m_pImpl->m_sOpenRedlineIdentifier = rId; | 
|  | } | 
|  |  | 
|  | void XMLTextImportHelper::ResetOpenRedlineId() | 
|  | { | 
|  | OUString sEmpty; | 
|  | SetOpenRedlineId(sEmpty); | 
|  | } | 
|  |  | 
|  | void | 
|  | XMLTextImportHelper::SetCellParaStyleDefault(::rtl::OUString const& rNewValue) | 
|  | { | 
|  | m_pImpl->m_sCellParaStyleDefault = rNewValue; | 
|  | } | 
|  |  | 
|  | ::rtl::OUString const& XMLTextImportHelper::GetCellParaStyleDefault() | 
|  | { | 
|  | return m_pImpl->m_sCellParaStyleDefault; | 
|  | } | 
|  |  |