diff options
Diffstat (limited to 'xmloff/inc/xmloff/txtimp.hxx')
-rw-r--r-- | xmloff/inc/xmloff/txtimp.hxx | 967 |
1 files changed, 967 insertions, 0 deletions
diff --git a/xmloff/inc/xmloff/txtimp.hxx b/xmloff/inc/xmloff/txtimp.hxx new file mode 100644 index 000000000000..7e041d0bdc91 --- /dev/null +++ b/xmloff/inc/xmloff/txtimp.hxx @@ -0,0 +1,967 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: txtimp.hxx,v $ + * $Revision: 1.13.2.2 $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ +#ifndef _XMLOFF_TEXTIMP_HXX_ +#define _XMLOFF_TEXTIMP_HXX_ + +#include "sal/config.h" +#include "xmloff/dllapi.h" +#include "sal/types.h" +#include <com/sun/star/uno/Reference.h> + +#include <map> +#include <vector> +#include <memory> +#include <boost/utility.hpp> + +#include <tools/list.hxx> +#include <xmloff/xmlictxt.hxx> +#include <xmloff/xmlimppr.hxx> +#include <xmloff/xmltkmap.hxx> + +// functional.hxx is obsolete and should be replaced by its comphelper +// counterpart +#include <comphelper/stl_types.hxx> +#include <xmloff/uniref.hxx> + +// --> OD 2008-04-25 #refactorlists# +class XMLTextListsHelper; +// <-- + +#include <com/sun/star/text/XFormField.hpp> + + +class SvXMLImport; +class SvXMLStylesContext; +class XMLTextListBlockContext; +class SvxXMLListStyleContext; +class XMLPropStyleContext; +class SvI18NMap; +class SvStringsDtor; +class XMLSectionImportContext; +class XMLFontStylesContext; +template<class A> class XMLPropertyBackpatcher; +class XMLEventsImportContext; + +namespace com { namespace sun { namespace star { +namespace text { class XText; class XTextCursor; class XTextRange; class XTextContent; } +namespace frame { class XModel; } +namespace container { class XNameContainer; class XIndexReplace; class XNameAccess; } +namespace beans { class XPropertySet; } +namespace xml { namespace sax { class XAttributeList; } } +namespace util { struct DateTime; } +namespace lang { class XMultiServiceFactory; } +namespace ucb { class XAnyCompare; } +} } } + +enum SwXMLTextElemTokens +{ + XML_TOK_TEXT_P, + XML_TOK_TEXT_H, + XML_TOK_TEXT_LIST, + XML_TOK_TEXT_FRAME_PAGE, + XML_TOK_TABLE_TABLE, + XML_TOK_TEXT_VARFIELD_DECLS, + XML_TOK_TEXT_USERFIELD_DECLS, + XML_TOK_TEXT_SEQUENCE_DECLS, + XML_TOK_TEXT_DDE_DECLS, + XML_TOK_DRAW_A_PAGE, + XML_TOK_TEXT_SECTION, + XML_TOK_TEXT_TOC, + XML_TOK_TEXT_OBJECT_INDEX, + XML_TOK_TEXT_TABLE_INDEX, + XML_TOK_TEXT_ILLUSTRATION_INDEX, + XML_TOK_TEXT_USER_INDEX, + XML_TOK_TEXT_ALPHABETICAL_INDEX, + XML_TOK_TEXT_BIBLIOGRAPHY_INDEX, + XML_TOK_TEXT_INDEX_TITLE, + XML_TOK_TEXT_TRACKED_CHANGES, + XML_TOK_TEXT_CHANGE_START, + XML_TOK_TEXT_CHANGE_END, + XML_TOK_TEXT_CHANGE, + XML_TOK_TEXT_FORMS, + XML_TOK_TEXT_CALCULATION_SETTINGS, + XML_TOK_TEXT_AUTOMARK, + XML_TOK_TEXT_NUMBERED_PARAGRAPH, + XML_TOK_TEXT_ELEM_END=XML_TOK_UNKNOWN +}; + +enum XMLTextPElemTokens +{ + XML_TOK_TEXT_SPAN, + XML_TOK_TEXT_TAB_STOP, + XML_TOK_TEXT_LINE_BREAK, + XML_TOK_TEXT_SOFT_PAGE_BREAK, + XML_TOK_TEXT_S, + XML_TOK_TEXT_FRAME, + XML_TOK_TEXT_HYPERLINK, + XML_TOK_TEXT_RUBY, + + XML_TOK_TEXT_NOTE, + XML_TOK_TEXT_BOOKMARK, + XML_TOK_TEXT_BOOKMARK_START, + XML_TOK_TEXT_BOOKMARK_END, + XML_TOK_TEXT_REFERENCE, + XML_TOK_TEXT_REFERENCE_START, + XML_TOK_TEXT_REFERENCE_END, + + XML_TOK_TEXT_TOC_MARK, // index marks + XML_TOK_TEXT_TOC_MARK_START, + XML_TOK_TEXT_TOC_MARK_END, + XML_TOK_TEXT_USER_INDEX_MARK, + XML_TOK_TEXT_USER_INDEX_MARK_START, + XML_TOK_TEXT_USER_INDEX_MARK_END, + XML_TOK_TEXT_ALPHA_INDEX_MARK, + XML_TOK_TEXT_ALPHA_INDEX_MARK_START, + XML_TOK_TEXT_ALPHA_INDEX_MARK_END, + + XML_TOK_TEXT_SENDER_FIRSTNAME, // sender fields + XML_TOK_TEXT_SENDER_LASTNAME, + XML_TOK_TEXT_SENDER_INITIALS, + XML_TOK_TEXT_SENDER_TITLE, + XML_TOK_TEXT_SENDER_POSITION, + XML_TOK_TEXT_SENDER_EMAIL, + XML_TOK_TEXT_SENDER_PHONE_PRIVATE, + XML_TOK_TEXT_SENDER_FAX, + XML_TOK_TEXT_SENDER_COMPANY, + XML_TOK_TEXT_SENDER_PHONE_WORK, + XML_TOK_TEXT_SENDER_STREET, + XML_TOK_TEXT_SENDER_CITY, + XML_TOK_TEXT_SENDER_POSTAL_CODE, + XML_TOK_TEXT_SENDER_COUNTRY, + XML_TOK_TEXT_SENDER_STATE_OR_PROVINCE, + + XML_TOK_TEXT_AUTHOR_NAME, // author fields + XML_TOK_TEXT_AUTHOR_INITIALS, + + XML_TOK_TEXT_DATE, // date & time fields + XML_TOK_TEXT_TIME, + + XML_TOK_TEXT_PAGE_NUMBER, // page number fields + XML_TOK_TEXT_PAGE_CONTINUATION_STRING, + + XML_TOK_TEXT_VARIABLE_SET, // variable fields + XML_TOK_TEXT_VARIABLE_GET, + XML_TOK_TEXT_VARIABLE_INPUT, + XML_TOK_TEXT_USER_FIELD_GET, + XML_TOK_TEXT_USER_FIELD_INPUT, + XML_TOK_TEXT_SEQUENCE, + XML_TOK_TEXT_EXPRESSION, + XML_TOK_TEXT_TEXT_INPUT, + + XML_TOK_TEXT_DATABASE_DISPLAY, // database fields + XML_TOK_TEXT_DATABASE_NEXT, + XML_TOK_TEXT_DATABASE_SELECT, + XML_TOK_TEXT_DATABASE_ROW_NUMBER, + XML_TOK_TEXT_DATABASE_NAME, + + XML_TOK_TEXT_DOCUMENT_CREATION_AUTHOR, //document info fields + XML_TOK_TEXT_DOCUMENT_CREATION_DATE, + XML_TOK_TEXT_DOCUMENT_CREATION_TIME, + XML_TOK_TEXT_DOCUMENT_DESCRIPTION, + XML_TOK_TEXT_DOCUMENT_PRINT_AUTHOR, + XML_TOK_TEXT_DOCUMENT_PRINT_DATE, + XML_TOK_TEXT_DOCUMENT_PRINT_TIME, + XML_TOK_TEXT_DOCUMENT_TITLE, + XML_TOK_TEXT_DOCUMENT_SUBJECT, + XML_TOK_TEXT_DOCUMENT_KEYWORDS, + XML_TOK_TEXT_DOCUMENT_REVISION, + XML_TOK_TEXT_DOCUMENT_EDIT_DURATION, + XML_TOK_TEXT_DOCUMENT_SAVE_AUTHOR, + XML_TOK_TEXT_DOCUMENT_SAVE_DATE, + XML_TOK_TEXT_DOCUMENT_SAVE_TIME, + XML_TOK_TEXT_DOCUMENT_USER_DEFINED, + + XML_TOK_TEXT_PLACEHOLDER, // misc. fields + XML_TOK_TEXT_CONDITIONAL_TEXT, + XML_TOK_TEXT_HIDDEN_TEXT, + XML_TOK_TEXT_HIDDEN_PARAGRAPH, + XML_TOK_TEXT_FILENAME, + XML_TOK_TEXT_CHAPTER, + XML_TOK_TEXT_TEMPLATENAME, + XML_TOK_TEXT_WORD_COUNT, // statistics/count fields + XML_TOK_TEXT_PARAGRAPH_COUNT, + XML_TOK_TEXT_TABLE_COUNT, + XML_TOK_TEXT_CHARACTER_COUNT, + XML_TOK_TEXT_IMAGE_COUNT, + XML_TOK_TEXT_OBJECT_COUNT, + XML_TOK_TEXT_PAGE_COUNT, + XML_TOK_TEXT_GET_PAGE_VAR, + XML_TOK_TEXT_SET_PAGE_VAR, + XML_TOK_TEXT_MACRO, + XML_TOK_TEXT_DDE, + XML_TOK_TEXT_REFERENCE_REF, + XML_TOK_TEXT_BOOKMARK_REF, + XML_TOK_TEXT_SEQUENCE_REF, + XML_TOK_TEXT_NOTE_REF, + XML_TOK_TEXT_SHEET_NAME, + XML_TOK_TEXT_BIBLIOGRAPHY_MARK, + XML_TOK_TEXT_ANNOTATION, + XML_TOK_TEXT_SCRIPT, + XML_TOK_TEXT_TABLE_FORMULA, + XML_TOK_TEXT_DROPDOWN, + + // RDF metadata + XML_TOK_TEXT_META, + XML_TOK_TEXT_META_FIELD, + + // misc + XML_TOK_TEXTP_CHANGE_START, // TEXTP avoids clash with SwXMLTextElemTokens + XML_TOK_TEXTP_CHANGE_END, + XML_TOK_TEXTP_CHANGE, + XML_TOK_DRAW_A, + XML_TOK_TEXT_MEASURE, + + XML_TOK_DRAW_HEADER, + XML_TOK_DRAW_FOOTER, + XML_TOK_DRAW_DATE_TIME, + XML_TOK_TEXT_PAGE_CONTINUATION, + + XML_TOK_TEXT_FIELDMARK, + XML_TOK_TEXT_FIELDMARK_START, + XML_TOK_TEXT_FIELDMARK_END, + + XML_TOK_TEXT_P_ELEM_END=XML_TOK_UNKNOWN +}; + +enum XMLTextPAttrTokens +{ + XML_TOK_TEXT_P_XMLID, + XML_TOK_TEXT_P_ABOUT, + XML_TOK_TEXT_P_PROPERTY, + XML_TOK_TEXT_P_CONTENT, + XML_TOK_TEXT_P_DATATYPE, + XML_TOK_TEXT_P_STYLE_NAME, + XML_TOK_TEXT_P_COND_STYLE_NAME, + XML_TOK_TEXT_P_LEVEL, + XML_TOK_TEXT_P_CLASS_NAMES, + XML_TOK_TEXT_P_ID, + XML_TOK_TEXT_P_IS_LIST_HEADER, + XML_TOK_TEXT_P_RESTART_NUMBERING, + XML_TOK_TEXT_P_START_VALUE, + XML_TOK_TEXT_P_END=XML_TOK_UNKNOWN +}; + +enum XMLTextNumberedParagraphAttrTokens +{ + XML_TOK_TEXT_NUMBERED_PARAGRAPH_XMLID, + XML_TOK_TEXT_NUMBERED_PARAGRAPH_LIST_ID, + XML_TOK_TEXT_NUMBERED_PARAGRAPH_LEVEL, + XML_TOK_TEXT_NUMBERED_PARAGRAPH_STYLE_NAME, + XML_TOK_TEXT_NUMBERED_PARAGRAPH_CONTINUE_NUMBERING, + XML_TOK_TEXT_NUMBERED_PARAGRAPH_START_VALUE, + XML_TOK_TEXT_NUMBERED_PARAGRAPH_END=XML_TOK_UNKNOWN +}; + +enum XMLTextListBlockAttrTokens +{ + XML_TOK_TEXT_LIST_BLOCK_XMLID, + XML_TOK_TEXT_LIST_BLOCK_STYLE_NAME, + XML_TOK_TEXT_LIST_BLOCK_CONTINUE_NUMBERING, + // --> OD 2008-04-22 #refactorlists# + XML_TOK_TEXT_LIST_BLOCK_ID, + XML_TOK_TEXT_LIST_BLOCK_CONTINUE_LIST, + // <-- + XML_TOK_TEXT_LIST_BLOCK_END=XML_TOK_UNKNOWN +}; + +enum XMLTextListBlockElemTokens +{ + XML_TOK_TEXT_LIST_HEADER, + XML_TOK_TEXT_LIST_ITEM, + XML_TOK_TEXT_LIST_BLOCK_ELEM_END=XML_TOK_UNKNOWN +}; + +enum XMLTextFrameAttrTokens +{ + XML_TOK_TEXT_FRAME_STYLE_NAME, + XML_TOK_TEXT_FRAME_NAME, + XML_TOK_TEXT_FRAME_ANCHOR_TYPE, + XML_TOK_TEXT_FRAME_ANCHOR_PAGE_NUMBER, + XML_TOK_TEXT_FRAME_X, + XML_TOK_TEXT_FRAME_Y, + XML_TOK_TEXT_FRAME_WIDTH, + XML_TOK_TEXT_FRAME_REL_WIDTH, + XML_TOK_TEXT_FRAME_HEIGHT, + XML_TOK_TEXT_FRAME_MIN_HEIGHT, + XML_TOK_TEXT_FRAME_REL_HEIGHT, + XML_TOK_TEXT_FRAME_NEXT_CHAIN_NAME, + XML_TOK_TEXT_FRAME_HREF, + XML_TOK_TEXT_FRAME_FILTER_NAME, + XML_TOK_TEXT_FRAME_Z_INDEX, + XML_TOK_TEXT_FRAME_TRANSFORM, + XML_TOK_TEXT_FRAME_CLASS_ID, + XML_TOK_TEXT_FRAME_CODE, + XML_TOK_TEXT_FRAME_OBJECT, + XML_TOK_TEXT_FRAME_ARCHIVE, + XML_TOK_TEXT_FRAME_MAY_SCRIPT, + XML_TOK_TEXT_FRAME_MIME_TYPE, + XML_TOK_TEXT_FRAME_APPLET_NAME, + XML_TOK_TEXT_FRAME_FRAME_NAME, + XML_TOK_TEXT_FRAME_NOTIFY_ON_UPDATE, + XML_TOK_TEXT_FRAME_MIN_WIDTH, + XML_TOK_TEXT_FRAME_END=XML_TOK_UNKNOWN +}; + +enum XMLTextHyperlinkAttrTokens +{ + XML_TOK_TEXT_HYPERLINK_HREF, + XML_TOK_TEXT_HYPERLINK_NAME, + XML_TOK_TEXT_HYPERLINK_TARGET_FRAME, + XML_TOK_TEXT_HYPERLINK_SHOW, + XML_TOK_TEXT_HYPERLINK_STYLE_NAME, + XML_TOK_TEXT_HYPERLINK_VIS_STYLE_NAME, + XML_TOK_TEXT_HYPERLINK_SERVER_MAP, + XML_TOK_TEXT_HYPERLINK_END=XML_TOK_UNKNOWN +}; + +enum XMLTextPageMasterElemTokens +{ + XML_TOK_TEXT_MP_HEADER, + XML_TOK_TEXT_MP_FOOTER, + XML_TOK_TEXT_MP_HEADER_LEFT, + XML_TOK_TEXT_MP_FOOTER_LEFT, + XML_TOK_TEXT_MP_END=XML_TOK_UNKNOWN +}; + +enum XMLTextContourAttrTokens +{ + XML_TOK_TEXT_CONTOUR_WIDTH, + XML_TOK_TEXT_CONTOUR_HEIGHT, + XML_TOK_TEXT_CONTOUR_VIEWBOX, + XML_TOK_TEXT_CONTOUR_POINTS, + XML_TOK_TEXT_CONTOUR_D, + XML_TOK_TEXT_CONTOUR_AUTO, + XML_TOK_TEXT_CONTOUR_END=XML_TOK_UNKNOWN +}; +enum XMLTextType +{ + XML_TEXT_TYPE_BODY, + XML_TEXT_TYPE_CELL, + XML_TEXT_TYPE_SHAPE, + XML_TEXT_TYPE_TEXTBOX, + XML_TEXT_TYPE_HEADER_FOOTER, + XML_TEXT_TYPE_SECTION, + XML_TEXT_TYPE_FOOTNOTE, + XML_TEXT_TYPE_CHANGED_REGION +}; + +#define XML_TEXT_RENAME_TYPE_FRAME 10 +#define XML_TEXT_RENAME_TYPE_TABLE 20 + +// create type for section list, XMLSectionList_Impl +DECLARE_LIST( XMLSectionList_Impl, XMLSectionImportContext* ) + +class XMLOFF_DLLPUBLIC XMLTextImportHelper : public UniRefBase, + private boost::noncopyable +{ + ::std::auto_ptr<SvXMLTokenMap> pTextElemTokenMap; + ::std::auto_ptr<SvXMLTokenMap> pTextPElemTokenMap; + ::std::auto_ptr<SvXMLTokenMap> pTextPAttrTokenMap; + ::std::auto_ptr<SvXMLTokenMap> pTextFieldAttrTokenMap; + ::std::auto_ptr<SvXMLTokenMap> pTextNumberedParagraphAttrTokenMap; + ::std::auto_ptr<SvXMLTokenMap> pTextListBlockAttrTokenMap; + ::std::auto_ptr<SvXMLTokenMap> pTextListBlockElemTokenMap; + ::std::auto_ptr<SvXMLTokenMap> pTextFrameAttrTokenMap; + ::std::auto_ptr<SvXMLTokenMap> pTextContourAttrTokenMap; + ::std::auto_ptr<SvXMLTokenMap> pTextHyperlinkAttrTokenMap; + ::std::auto_ptr<SvXMLTokenMap> pTextMasterPageElemTokenMap; + ::std::auto_ptr<SvStringsDtor> pPrevFrmNames; + ::std::auto_ptr<SvStringsDtor> pNextFrmNames; + + // --> OD 2008-04-25 #refactorlists# + ::std::auto_ptr<XMLTextListsHelper> mpTextListsHelper; + // <-- + + SvXMLImportContextRef xAutoStyles; + SvXMLImportContextRef xFontDecls; + + XMLSectionList_Impl aSectionList; + + UniReference < SvXMLImportPropertyMapper > xParaImpPrMap; + UniReference < SvXMLImportPropertyMapper > xTextImpPrMap; + UniReference < SvXMLImportPropertyMapper > xFrameImpPrMap; + UniReference < SvXMLImportPropertyMapper > xSectionImpPrMap; + UniReference < SvXMLImportPropertyMapper > xRubyImpPrMap; + + ::std::auto_ptr<SvI18NMap> 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 +// ::rtl::OUString *pOutlineStyles; + ::std::vector< ::rtl::OUString >* mpOutlineStylesCandidates; + // <-- + + /// start ranges for open bookmarks + ::std::map< ::rtl::OUString, + // start range, xml:id + ::std::pair< + ::com::sun::star::uno::Reference< + ::com::sun::star::text::XTextRange>, + ::rtl::OUString>, + ::comphelper::UStringLess> aBookmarkStartRanges; + + typedef ::std::vector< ::rtl::OUString> BookmarkVector_t; + BookmarkVector_t aBookmarkVector; + + /// backpatcher for references to footnotes and endnotes + XMLPropertyBackpatcher<sal_Int16> * pFootnoteBackpatcher; + + /// backpatchers for references to sequences + XMLPropertyBackpatcher<sal_Int16> * pSequenceIdBackpatcher; + + XMLPropertyBackpatcher< ::rtl::OUString> * pSequenceNameBackpatcher; + + /// name of the last 'open' redline that started between paragraphs + ::rtl::OUString sOpenRedlineIdentifier; + + ::com::sun::star::uno::Reference < + ::com::sun::star::text::XText > xText; + ::com::sun::star::uno::Reference < + ::com::sun::star::text::XTextCursor > xCursor; + ::com::sun::star::uno::Reference < + ::com::sun::star::text::XTextRange > xCursorAsRange; + ::com::sun::star::uno::Reference < + ::com::sun::star::container::XNameContainer > xParaStyles; + ::com::sun::star::uno::Reference < + ::com::sun::star::container::XNameContainer > xTextStyles; + ::com::sun::star::uno::Reference < + ::com::sun::star::container::XNameContainer > xNumStyles; + ::com::sun::star::uno::Reference < + ::com::sun::star::container::XNameContainer > xFrameStyles; + ::com::sun::star::uno::Reference < + ::com::sun::star::container::XNameContainer > xPageStyles; + ::com::sun::star::uno::Reference< + ::com::sun::star::container::XIndexReplace > xChapterNumbering; + ::com::sun::star::uno::Reference< + ::com::sun::star::container::XNameAccess > xTextFrames; + ::com::sun::star::uno::Reference< + ::com::sun::star::container::XNameAccess > xGraphics; + ::com::sun::star::uno::Reference< + ::com::sun::star::container::XNameAccess > xObjects; + ::com::sun::star::uno::Reference< + ::com::sun::star::lang::XMultiServiceFactory > xServiceFactory; + + SvXMLImport& rSvXMLImport; + + sal_Bool bInsertMode : 1; + sal_Bool bStylesOnlyMode : 1; + sal_Bool bBlockMode : 1; + sal_Bool bProgress : 1; + sal_Bool bOrganizerMode : 1; + sal_Bool bBodyContentStarted : 1; + + // #107848# + // One more flag to remember if we are inside a deleted redline section + sal_Bool bInsideDeleteContext : 1; + + SAL_DLLPRIVATE SvXMLTokenMap *_GetTextElemTokenMap(); + SAL_DLLPRIVATE SvXMLTokenMap *_GetTextPElemTokenMap(); + SAL_DLLPRIVATE SvXMLTokenMap *_GetTextPAttrTokenMap(); + SAL_DLLPRIVATE SvXMLTokenMap *_GetTextFrameAttrTokenMap(); + SAL_DLLPRIVATE SvXMLTokenMap *_GetTextContourAttrTokenMap(); + SAL_DLLPRIVATE SvXMLTokenMap *_GetTextHyperlinkAttrTokenMap(); + SAL_DLLPRIVATE SvXMLTokenMap *_GetTextMasterPageElemTokenMap(); + + // clean up backpatchers; to be called only by destructor + // Code is implemented in XMLPropertyBackpatcher.cxx + SAL_DLLPRIVATE void _FinitBackpatcher(); + + 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 aFieldStack; + +protected: + virtual SvXMLImportContext *CreateTableChildContext( + SvXMLImport& rImport, + sal_uInt16 nPrefix, const ::rtl::OUString& rLocalName, + const ::com::sun::star::uno::Reference< + ::com::sun::star::xml::sax::XAttributeList > & xAttrList ); + + // access, lazy initialization and destruction of backpatchers + // Code is implemented in XMLPropertyBackpatcher.cxx + inline XMLPropertyBackpatcher<sal_Int16>& GetFootnoteBP(); + inline XMLPropertyBackpatcher<sal_Int16>& GetSequenceIdBP(); + inline XMLPropertyBackpatcher< ::rtl::OUString> & GetSequenceNameBP(); + +public: + + const ::rtl::OUString sParaStyleName; + const ::rtl::OUString sCharStyleName; + const ::rtl::OUString sHeadingStyleName; + const ::rtl::OUString sNumberingLevel; + const ::rtl::OUString sNumberingStartValue; + const ::rtl::OUString sNumberingRules; + const ::rtl::OUString sParaIsNumberingRestart; + const ::rtl::OUString sNumberingIsNumber; + const ::rtl::OUString sCurrentPresentation; + const ::rtl::OUString sSequenceNumber; + const ::rtl::OUString sSourceName; + const ::rtl::OUString sChainNextName; + const ::rtl::OUString sChainPrevName; + const ::rtl::OUString sHyperLinkURL; + const ::rtl::OUString sHyperLinkName; + const ::rtl::OUString sHyperLinkTarget; + const ::rtl::OUString sUnvisitedCharStyleName; + const ::rtl::OUString sVisitedCharStyleName; + const ::rtl::OUString sTextFrame; + const ::rtl::OUString sPageDescName; + const ::rtl::OUString sServerMap; + const ::rtl::OUString sHyperLinkEvents; + const ::rtl::OUString sContent; + const ::rtl::OUString sServiceCombinedCharacters; + const ::rtl::OUString sNumberingStyleName; + // --> OD 2008-04-23 #refactorlists# + const ::rtl::OUString sPropNameDefaultListId; + const ::rtl::OUString sPropNameListId; + const ::rtl::OUString sOutlineLevel; //#outline level,add by zhaojianwei + // <-- + + ::rtl::OUString sCellParaStyleDefault; + XMLTextImportHelper( + const ::com::sun::star::uno::Reference < + ::com::sun::star::frame::XModel>& rModel, + SvXMLImport& rImport, + sal_Bool bInsertM = sal_False, sal_Bool bStylesOnlyM = sal_False, + sal_Bool bProgress = sal_False, + sal_Bool bBlockMode = sal_False, + sal_Bool bOrganizerMode = sal_False ); + + ~XMLTextImportHelper(); + + void SetCursor( + const ::com::sun::star::uno::Reference < + ::com::sun::star::text::XTextCursor >& rCursor ); + void ResetCursor(); + + void SetAutoStyles( SvXMLStylesContext *pStyles ); + + void SetFontDecls( XMLFontStylesContext *pFontDecls ); + const XMLFontStylesContext *GetFontDecls() const; + + SvXMLImportContext *CreateTextChildContext( + SvXMLImport& rImport, + sal_uInt16 nPrefix, const ::rtl::OUString& rLocalName, + const ::com::sun::star::uno::Reference< + ::com::sun::star::xml::sax::XAttributeList > & xAttrList, + XMLTextType eType = XML_TEXT_TYPE_SHAPE ); + + inline const SvXMLTokenMap& GetTextElemTokenMap(); + inline const SvXMLTokenMap& GetTextPElemTokenMap(); + inline const SvXMLTokenMap& GetTextPAttrTokenMap(); + inline const SvXMLTokenMap& GetTextFrameAttrTokenMap(); + inline const SvXMLTokenMap& GetTextContourAttrTokenMap(); + inline const SvXMLTokenMap& GetTextHyperlinkAttrTokenMap(); + inline const SvXMLTokenMap& GetTextMasterPageElemTokenMap(); + + const SvXMLTokenMap& GetTextNumberedParagraphAttrTokenMap(); + const SvXMLTokenMap& GetTextListBlockAttrTokenMap(); + const SvXMLTokenMap& GetTextListBlockElemTokenMap(); + const SvXMLTokenMap& GetTextFieldAttrTokenMap(); // impl: txtfldi.cxx + + ::com::sun::star::uno::Reference < + ::com::sun::star::text::XText > & GetText() { return xText; } + ::com::sun::star::uno::Reference < + ::com::sun::star::text::XTextCursor > & GetCursor() { return xCursor; } + ::com::sun::star::uno::Reference < + ::com::sun::star::text::XTextRange > & GetCursorAsRange() + { + return xCursorAsRange; + } + + sal_Bool IsInsertMode() { return bInsertMode; } + sal_Bool IsStylesOnlyMode() { return bStylesOnlyMode; } + sal_Bool IsBlockMode() { return bBlockMode; } + sal_Bool IsOrganizerMode() { return bOrganizerMode; } + sal_Bool IsProgress() { return bProgress; } + + XMLSectionList_Impl& GetSectionList() { return aSectionList; } + + ::rtl::OUString ConvertStarFonts( const ::rtl::OUString& rChars, + const ::rtl::OUString& rStyleName, + sal_uInt8& rFlags, + sal_Bool bPara, + SvXMLImport& rImport ) const; + // insert a string without special whitespace processing enabled + void InsertString( const ::rtl::OUString& rChars ); + // insert a string with special whitespace processing enabled + void InsertString( const ::rtl::OUString& rChars, + sal_Bool& rIgnoreLeadingSpace ); + // Delete current paragraph + void DeleteParagraph(); + + void InsertControlCharacter( sal_Int16 nControl ); + void InsertTextContent( ::com::sun::star::uno::Reference < + ::com::sun::star::text::XTextContent > & xContent); + + // --> OD 2007-07-25 #i73509# - add parameter <bOutlineLevelAttrFound> + // --> OD 2007-08-17 #i80724# + // add parameter <bSetListAttrs> in order to suppress the handling of the list attributes + ::rtl::OUString SetStyleAndAttrs( + SvXMLImport& rImport, + const ::com::sun::star::uno::Reference < + ::com::sun::star::text::XTextCursor >& rCursor, + const ::rtl::OUString& rStyleName, + sal_Bool bPara, + sal_Bool bOutlineLevelAttrFound = sal_False, + sal_Int8 nOutlineLevel = -1, + sal_Bool bSetListAttrs = sal_True ); + // <-- + + /** Find a suitable name for the given outline level. + * If rStyleName is empty, change it to a previously used or default style + * name for that level. Otherwise, leave rStyleName unmodified. + */ + // --> OD 2006-10-12 #i69629# - adjust 2nd parameter + void FindOutlineStyleName( ::rtl::OUString& rStyleName, + sal_Int8 nOutlineLevel ); + // <-- + + // --> OD 2006-10-12 #i69629# + // change method name to reflect change of data structure + void AddOutlineStyleCandidate( const sal_Int8 nOutlineLevel, + const ::rtl::OUString& rStyleName ); + // <-- + void SetOutlineStyles( sal_Bool bSetEmpty ); + + void SetHyperlink( + SvXMLImport& rImport, + const ::com::sun::star::uno::Reference < + ::com::sun::star::text::XTextCursor >& rCursor, + const ::rtl::OUString& rHRef, + const ::rtl::OUString& rName, + const ::rtl::OUString& rTargetFrameName, + const ::rtl::OUString& rStyleName, + const ::rtl::OUString& rVisitedStyleName, + XMLEventsImportContext* pEvents = NULL); + void SetRuby( + SvXMLImport& rImport, + const ::com::sun::star::uno::Reference < + ::com::sun::star::text::XTextCursor >& rCursor, + const ::rtl::OUString& rStyleName, + const ::rtl::OUString& rTextStyleName, + const ::rtl::OUString& rText ); + + /// return key appropriate for use with NumberFormat property + /// return -1 if style is not found + /// (may return whether data style uses the system language) + sal_Int32 GetDataStyleKey( const ::rtl::OUString& sStyleName, + sal_Bool* pIsSystemLanguage = NULL ); + + const SvxXMLListStyleContext *FindAutoListStyle( + const ::rtl::OUString& rName ) const; + XMLPropStyleContext *FindAutoFrameStyle( + const ::rtl::OUString& rName ) const; + XMLPropStyleContext* FindSectionStyle( + const ::rtl::OUString& rName ) const; + XMLPropStyleContext* FindPageMaster( + const ::rtl::OUString& rName ) const; + + const ::com::sun::star::uno::Reference < + ::com::sun::star::container::XNameContainer>& GetParaStyles() const + { + return xParaStyles; + } + + const ::com::sun::star::uno::Reference < + ::com::sun::star::container::XNameContainer>& GetTextStyles() const + { + return xTextStyles; + } + + const ::com::sun::star::uno::Reference < + ::com::sun::star::container::XNameContainer>& GetNumberingStyles() const + { + return xNumStyles; + } + + const ::com::sun::star::uno::Reference < + ::com::sun::star::container::XNameContainer>& GetFrameStyles() const + { + return xFrameStyles; + } + + const ::com::sun::star::uno::Reference < + ::com::sun::star::container::XNameContainer>& GetPageStyles() const + { + return xPageStyles; + } + + const ::com::sun::star::uno::Reference< + ::com::sun::star::container::XIndexReplace >& GetChapterNumbering() const + { + return xChapterNumbering; + } + + sal_Bool HasFrameByName( const ::rtl::OUString& rName ) const; + void ConnectFrameChains( const ::rtl::OUString& rFrmName, + const ::rtl::OUString& rNextFrmName, + const ::com::sun::star::uno::Reference < + ::com::sun::star::beans::XPropertySet >& rFrmPropSet ); + + const UniReference < SvXMLImportPropertyMapper >& + GetParaImportPropertySetMapper() const { return xParaImpPrMap; } + const UniReference < SvXMLImportPropertyMapper >& + GetTextImportPropertySetMapper() const { return xTextImpPrMap; } + const UniReference < SvXMLImportPropertyMapper >& + GetFrameImportPropertySetMapper() const { return xFrameImpPrMap; } + const UniReference < SvXMLImportPropertyMapper >& + GetSectionImportPropertySetMapper() const { return xSectionImpPrMap; } + const UniReference < SvXMLImportPropertyMapper >& + GetRubyImportPropertySetMapper() const { return xRubyImpPrMap; } + static SvXMLImportPropertyMapper *CreateShapeExtPropMapper(SvXMLImport&); + static SvXMLImportPropertyMapper *CreateCharExtPropMapper(SvXMLImport&, XMLFontStylesContext *pFontDecls = NULL); + static SvXMLImportPropertyMapper *CreateParaExtPropMapper(SvXMLImport&, XMLFontStylesContext *pFontDecls = NULL); + static SvXMLImportPropertyMapper* CreateParaDefaultExtPropMapper(SvXMLImport&, XMLFontStylesContext* pFontDecls = NULL); + static SvXMLImportPropertyMapper* CreateTableDefaultExtPropMapper(SvXMLImport&, XMLFontStylesContext* pFontDecls = NULL); + static SvXMLImportPropertyMapper* CreateTableRowDefaultExtPropMapper(SvXMLImport&, XMLFontStylesContext* pFontDecls = NULL); + + static sal_Bool HasDrawNameAttribute( + const ::com::sun::star::uno::Reference< + ::com::sun::star::xml::sax::XAttributeList > & xAttrList, + SvXMLNamespaceMap& rNamespaceMap ); + + SvI18NMap& GetRenameMap(); + + /// save the start of a range reference + void InsertBookmarkStartRange( + const ::rtl::OUString sName, + const ::com::sun::star::uno::Reference< + ::com::sun::star::text::XTextRange> & rRange, + const ::rtl::OUString & i_rXmlId); + + /// process the start of a range reference + sal_Bool FindAndRemoveBookmarkStartRange( + const ::rtl::OUString sName, + ::com::sun::star::uno::Reference< + ::com::sun::star::text::XTextRange> & o_rRange, + ::rtl::OUString& o_rXmlId); + + ::rtl::OUString FindActiveBookmarkName(); + ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > GetRangeFor(::rtl::OUString &sName); + + void pushFieldCtx( ::rtl::OUString name, ::rtl::OUString type ); + void popFieldCtx(); + void addFieldParam( ::rtl::OUString name, ::rtl::OUString value ); + void setCurrentFieldParamsTo(::com::sun::star::uno::Reference< ::com::sun::star::text::XFormField> &xFormField); + ::rtl::OUString getCurrentFieldName(); + ::rtl::OUString getCurrentFieldType(); + bool hasCurrentFieldCtx(); + + + /// insert new footnote ID. + /// Also fixup open references from the backpatch list to this ID. + // Code is implemented in XMLPropertyBackpatcher.cxx + void InsertFootnoteID(const ::rtl::OUString& sXMLId, sal_Int16 nAPIId); + + /// set the proper footnote reference ID, + /// or put into backpatch list if ID is unknown + // Code is implemented in XMLPropertyBackpatcher.cxx + void ProcessFootnoteReference( + const ::rtl::OUString& sXMLId, + const ::com::sun::star::uno::Reference< + ::com::sun::star::beans::XPropertySet> & xPropSet); + + /// insert new sequence ID + /// Also fixup open references from backpatch list to this ID. + // Code is implemented in XMLPropertyBackpatcher.cxx + void InsertSequenceID(const ::rtl::OUString& sXMLId, + const ::rtl::OUString& sName, + sal_Int16 nAPIId); + + /// set sequence ID or insert into backpatch list + // Code is implemented in XMLPropertyBackpatcher.cxx + void ProcessSequenceReference( + const ::rtl::OUString& sXMLId, + const ::com::sun::star::uno::Reference< + ::com::sun::star::beans::XPropertySet> & xPropSet); + + sal_Bool IsInFrame() const; + virtual sal_Bool IsInHeaderFooter() const; + + virtual ::com::sun::star::uno::Reference< + ::com::sun::star::beans::XPropertySet> + createAndInsertOLEObject( SvXMLImport& rImport, + const ::rtl::OUString& rHRef, + const ::rtl::OUString &rStyleName, + const ::rtl::OUString &rTblName, + sal_Int32 nWidth, sal_Int32 nHeight ); + + virtual ::com::sun::star::uno::Reference< + ::com::sun::star::beans::XPropertySet> + createAndInsertOOoLink( SvXMLImport& rImport, + const ::rtl::OUString& rHRef, + const ::rtl::OUString &rStyleName, + const ::rtl::OUString &rTblName, + sal_Int32 nWidth, sal_Int32 nHeight ); + + virtual ::com::sun::star::uno::Reference< + ::com::sun::star::beans::XPropertySet> + createAndInsertApplet( + const ::rtl::OUString &rName, + const ::rtl::OUString &rCode, + sal_Bool bMayScript, + const ::rtl::OUString& rHRef, + sal_Int32 nWidth, sal_Int32 nHeight ); + + virtual ::com::sun::star::uno::Reference< + ::com::sun::star::beans::XPropertySet> + createAndInsertPlugin( + const ::rtl::OUString &rMimeType, + const ::rtl::OUString& rHRef, + sal_Int32 nWidth, sal_Int32 nHeight ); + + virtual ::com::sun::star::uno::Reference< + ::com::sun::star::beans::XPropertySet> + createAndInsertFloatingFrame( + const ::rtl::OUString &rName, + const ::rtl::OUString &rHRef, + const ::rtl::OUString &rStyleName, + sal_Int32 nWidth, sal_Int32 nHeight ); + + virtual void endAppletOrPlugin( + const com::sun::star::uno::Reference< + ::com::sun::star::beans::XPropertySet> &rPropSet, + ::std::map < const ::rtl::OUString, ::rtl::OUString, ::comphelper::UStringLess > &rParamMap ); + + // applet helper methods + // implemented in sw/filter/xml/txtparai.hxx + + // redlining helper methods + // (to be implemented in sw/filter/xml/txtparai.hxx) + + virtual void RedlineAdd( + const ::rtl::OUString& rType, /// redline type (insert, del,... ) + const ::rtl::OUString& rId, /// use to identify this redline + const ::rtl::OUString& rAuthor, /// name of the author + const ::rtl::OUString& rComment, /// redline comment + const ::com::sun::star::util::DateTime& rDateTime, /// date+time + sal_Bool bMergeLastParagraph); /// merge last paras + virtual ::com::sun::star::uno::Reference< + ::com::sun::star::text::XTextCursor> RedlineCreateText( + ::com::sun::star::uno::Reference< /// needed to get the document + ::com::sun::star::text::XTextCursor> & rOldCursor, + const ::rtl::OUString& rId); /// ID used to RedlineAdd() call + virtual void RedlineSetCursor( + const ::rtl::OUString& rId, /// ID used to RedlineAdd() call + sal_Bool bStart, /// start or end Cursor + sal_Bool bIsOutsideOfParagraph); /// range is not within <text:p> + virtual void RedlineAdjustStartNodeCursor( + sal_Bool bStart); + virtual void SetShowChanges( sal_Bool bShowChanges ); + virtual void SetRecordChanges( sal_Bool bRecordChanges ); + virtual void SetChangesProtectionKey( + const ::com::sun::star::uno::Sequence<sal_Int8> & rProtectionKey ); + + // access to the last open redline ID: + ::rtl::OUString GetOpenRedlineId(); + void SetOpenRedlineId( ::rtl::OUString& rId); + void ResetOpenRedlineId(); + + // #107848# + // Access methods to the inside_deleted_section flag (redlining) + void SetInsideDeleteContext(sal_Bool bNew) { bInsideDeleteContext = bNew; } + sal_Bool IsInsideDeleteContext() const { return bInsideDeleteContext; } + + SvXMLImport& GetXMLImport() { return rSvXMLImport;} + + // --> OD 2008-04-25 #refactorlists# + XMLTextListsHelper& GetTextListHelper() { return *mpTextListsHelper; } + // <-- + + // forwards to TextListHelper; these are used in many places + /// push a list context on the list context stack + void PushListContext(XMLTextListBlockContext *i_pListBlock = 0); + /// pop the list context stack + void PopListContext(); +}; + +inline const SvXMLTokenMap& XMLTextImportHelper::GetTextElemTokenMap() +{ + if( !pTextElemTokenMap.get() ) + pTextElemTokenMap.reset( _GetTextElemTokenMap() ); + + return *pTextElemTokenMap; +} + +inline const SvXMLTokenMap& XMLTextImportHelper::GetTextPElemTokenMap() +{ + if( !pTextPElemTokenMap.get() ) + pTextPElemTokenMap.reset( _GetTextPElemTokenMap() ); + + return *pTextPElemTokenMap; +} + +inline const SvXMLTokenMap& XMLTextImportHelper::GetTextPAttrTokenMap() +{ + if( !pTextPAttrTokenMap.get() ) + pTextPAttrTokenMap.reset( _GetTextPAttrTokenMap() ); + + return *pTextPAttrTokenMap; +} + +inline const SvXMLTokenMap& XMLTextImportHelper::GetTextFrameAttrTokenMap() +{ + if( !pTextFrameAttrTokenMap.get() ) + pTextFrameAttrTokenMap.reset( _GetTextFrameAttrTokenMap() ); + + return *pTextFrameAttrTokenMap; +} + +inline const SvXMLTokenMap& XMLTextImportHelper::GetTextContourAttrTokenMap() +{ + if( !pTextContourAttrTokenMap.get() ) + pTextContourAttrTokenMap.reset( _GetTextContourAttrTokenMap() ); + + return *pTextContourAttrTokenMap; +} + +inline const SvXMLTokenMap& XMLTextImportHelper::GetTextHyperlinkAttrTokenMap() +{ + if( !pTextHyperlinkAttrTokenMap.get() ) + pTextHyperlinkAttrTokenMap.reset( _GetTextHyperlinkAttrTokenMap() ); + + return *pTextHyperlinkAttrTokenMap; +} + +inline const SvXMLTokenMap& XMLTextImportHelper::GetTextMasterPageElemTokenMap() +{ + if( !pTextMasterPageElemTokenMap.get() ) + pTextMasterPageElemTokenMap.reset( _GetTextMasterPageElemTokenMap() ); + + return *pTextMasterPageElemTokenMap; +} + +#endif |