blob: 8920b568f79d2f3c125186d75ee703591dbd6706 [file] [log] [blame]
/**************************************************************
*
* 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 choosen 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;
}