summaryrefslogtreecommitdiff
path: root/sc/source/filter/xml/xmlimprt.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sc/source/filter/xml/xmlimprt.cxx')
-rw-r--r--sc/source/filter/xml/xmlimprt.cxx3187
1 files changed, 3187 insertions, 0 deletions
diff --git a/sc/source/filter/xml/xmlimprt.cxx b/sc/source/filter/xml/xmlimprt.cxx
new file mode 100644
index 000000000000..c048813a1f66
--- /dev/null
+++ b/sc/source/filter/xml/xmlimprt.cxx
@@ -0,0 +1,3187 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_sc.hxx"
+
+// INCLUDE ---------------------------------------------------------------
+
+#include <svl/zforlist.hxx>
+#include <sal/macros.h>
+
+#include <xmloff/nmspmap.hxx>
+#include <xmloff/xmlnmspe.hxx>
+#include <xmloff/i18nmap.hxx>
+#include <xmloff/xmltkmap.hxx>
+#include <xmloff/xmlictxt.hxx>
+#include <xmloff/xmlmetai.hxx>
+#include <sfx2/objsh.hxx>
+#include <xmloff/xmlnumfi.hxx>
+#include <xmloff/xmlscripti.hxx>
+#include <xmloff/XMLFontStylesContext.hxx>
+#include <xmloff/DocumentSettingsContext.hxx>
+#include <xmloff/xmluconv.hxx>
+#include <xmloff/numehelp.hxx>
+#include <xmloff/xmltoken.hxx>
+#include <xmloff/xmlerror.hxx>
+
+#include <svl/zforlist.hxx>
+#include <svl/zformat.hxx>
+#include <svl/languageoptions.hxx>
+
+#include "xmlimprt.hxx"
+#include "document.hxx"
+#include "docuno.hxx"
+#include "nameuno.hxx"
+#include "xmlbodyi.hxx"
+#include "xmlstyli.hxx"
+#include "ViewSettingsSequenceDefines.hxx"
+
+#include "patattr.hxx"
+
+#include "XMLConverter.hxx"
+#include "XMLTableShapeImportHelper.hxx"
+#include "XMLChangeTrackingImportHelper.hxx"
+#include "chgviset.hxx"
+#include "XMLStylesImportHelper.hxx"
+#include "sheetdata.hxx"
+#include "unonames.hxx"
+#include "rangeutl.hxx"
+#include "postit.hxx"
+#include "formulaparserpool.hxx"
+#include <comphelper/extract.hxx>
+
+#include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
+#include <com/sun/star/frame/XModel.hpp>
+#include <com/sun/star/sheet/XSheetCellRange.hpp>
+#include <com/sun/star/sheet/XCellRangeAddressable.hpp>
+#include <com/sun/star/sheet/XSpreadsheetDocument.hpp>
+#include <com/sun/star/util/XMergeable.hpp>
+#include <com/sun/star/sheet/CellInsertMode.hpp>
+#include <com/sun/star/sheet/XCellRangeMovement.hpp>
+#include <com/sun/star/document/XActionLockable.hpp>
+#include <com/sun/star/util/NumberFormat.hpp>
+#include <com/sun/star/util/XNumberFormatTypes.hpp>
+#include <tools/urlobj.hxx>
+#include <com/sun/star/sheet/XNamedRanges.hpp>
+#include <com/sun/star/sheet/NamedRangeFlag.hpp>
+#include <com/sun/star/sheet/XNamedRange.hpp>
+#include <com/sun/star/sheet/XLabelRanges.hpp>
+#include <com/sun/star/io/XSeekable.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
+
+#include <memory>
+
+#define SC_LOCALE "Locale"
+#define SC_STANDARDFORMAT "StandardFormat"
+#define SC_CURRENCYSYMBOL "CurrencySymbol"
+#define SC_NAMEDRANGES "NamedRanges"
+#define SC_REPEAT_COLUMN "repeat-column"
+#define SC_REPEAT_ROW "repeat-row"
+#define SC_FILTER "filter"
+#define SC_PRINT_RANGE "print-range"
+
+using namespace com::sun::star;
+using namespace ::xmloff::token;
+using namespace ::formula;
+using ::com::sun::star::uno::Reference;
+using ::com::sun::star::uno::UNO_QUERY;
+using ::rtl::OUString;
+using ::rtl::OUStringBuffer;
+
+OUString SAL_CALL ScXMLImport_getImplementationName() throw()
+{
+ return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.Calc.XMLOasisImporter" ) );
+}
+
+uno::Sequence< rtl::OUString > SAL_CALL ScXMLImport_getSupportedServiceNames() throw()
+{
+ const rtl::OUString aServiceName( ScXMLImport_getImplementationName() );
+ return uno::Sequence< rtl::OUString > ( &aServiceName, 1 );
+}
+
+uno::Reference< uno::XInterface > SAL_CALL ScXMLImport_createInstance(
+ const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception )
+{
+ // #110680#
+ // return (cppu::OWeakObject*)new ScXMLImport(IMPORT_ALL);
+ return (cppu::OWeakObject*)new ScXMLImport( rSMgr, IMPORT_ALL );
+}
+
+OUString SAL_CALL ScXMLImport_Meta_getImplementationName() throw()
+{
+ return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.Calc.XMLOasisMetaImporter" ) );
+}
+
+uno::Sequence< rtl::OUString > SAL_CALL ScXMLImport_Meta_getSupportedServiceNames() throw()
+{
+ const rtl::OUString aServiceName( ScXMLImport_Meta_getImplementationName() );
+ return uno::Sequence< rtl::OUString > ( &aServiceName, 1 );
+}
+
+uno::Reference< uno::XInterface > SAL_CALL ScXMLImport_Meta_createInstance(
+ const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception )
+{
+ // #110680#
+ // return (cppu::OWeakObject*)new ScXMLImport(IMPORT_META);
+ return (cppu::OWeakObject*)new ScXMLImport( rSMgr, IMPORT_META );
+}
+
+OUString SAL_CALL ScXMLImport_Styles_getImplementationName() throw()
+{
+ return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.Calc.XMLOasisStylesImporter" ) );
+}
+
+uno::Sequence< rtl::OUString > SAL_CALL ScXMLImport_Styles_getSupportedServiceNames() throw()
+{
+ const rtl::OUString aServiceName( ScXMLImport_Styles_getImplementationName() );
+ return uno::Sequence< rtl::OUString > ( &aServiceName, 1 );
+}
+
+uno::Reference< uno::XInterface > SAL_CALL ScXMLImport_Styles_createInstance(
+ const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception )
+{
+ // #110680#
+ // return (cppu::OWeakObject*)new ScXMLImport(IMPORT_STYLES|IMPORT_AUTOSTYLES|IMPORT_MASTERSTYLES|IMPORT_FONTDECLS);
+ return (cppu::OWeakObject*)new ScXMLImport( rSMgr, IMPORT_STYLES|IMPORT_AUTOSTYLES|IMPORT_MASTERSTYLES|IMPORT_FONTDECLS);
+}
+
+OUString SAL_CALL ScXMLImport_Content_getImplementationName() throw()
+{
+ return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.Calc.XMLOasisContentImporter" ) );
+}
+
+uno::Sequence< rtl::OUString > SAL_CALL ScXMLImport_Content_getSupportedServiceNames() throw()
+{
+ const rtl::OUString aServiceName( ScXMLImport_Content_getImplementationName() );
+ return uno::Sequence< rtl::OUString > ( &aServiceName, 1 );
+}
+
+uno::Reference< uno::XInterface > SAL_CALL ScXMLImport_Content_createInstance(
+ const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception )
+{
+ // #110680#
+ // return (cppu::OWeakObject*)new ScXMLImport(IMPORT_META|IMPORT_STYLES|IMPORT_MASTERSTYLES|IMPORT_AUTOSTYLES|IMPORT_CONTENT|IMPORT_SCRIPTS|IMPORT_SETTINGS|IMPORT_FONTDECLS);
+ return (cppu::OWeakObject*)new ScXMLImport( rSMgr, IMPORT_AUTOSTYLES|IMPORT_CONTENT|IMPORT_SCRIPTS|IMPORT_FONTDECLS);
+}
+
+OUString SAL_CALL ScXMLImport_Settings_getImplementationName() throw()
+{
+ return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.Calc.XMLOasisSettingsImporter" ) );
+}
+
+uno::Sequence< rtl::OUString > SAL_CALL ScXMLImport_Settings_getSupportedServiceNames() throw()
+{
+ const rtl::OUString aServiceName( ScXMLImport_Settings_getImplementationName() );
+ return uno::Sequence< rtl::OUString > ( &aServiceName, 1 );
+}
+
+uno::Reference< uno::XInterface > SAL_CALL ScXMLImport_Settings_createInstance(
+ const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception )
+{
+ // #110680#
+ // return (cppu::OWeakObject*)new ScXMLImport(IMPORT_SETTINGS);
+ return (cppu::OWeakObject*)new ScXMLImport( rSMgr, IMPORT_SETTINGS );
+}
+
+const SvXMLTokenMap& ScXMLImport::GetTableRowCellAttrTokenMap()
+{
+ static SvXMLTokenMapEntry aTableRowCellAttrTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_STYLE_NAME, XML_TOK_TABLE_ROW_CELL_ATTR_STYLE_NAME },
+ { XML_NAMESPACE_TABLE, XML_CONTENT_VALIDATION_NAME, XML_TOK_TABLE_ROW_CELL_ATTR_CONTENT_VALIDATION_NAME },
+ { XML_NAMESPACE_TABLE, XML_NUMBER_ROWS_SPANNED, XML_TOK_TABLE_ROW_CELL_ATTR_SPANNED_ROWS },
+ { XML_NAMESPACE_TABLE, XML_NUMBER_COLUMNS_SPANNED, XML_TOK_TABLE_ROW_CELL_ATTR_SPANNED_COLS },
+ { XML_NAMESPACE_TABLE, XML_NUMBER_MATRIX_COLUMNS_SPANNED, XML_TOK_TABLE_ROW_CELL_ATTR_SPANNED_MATRIX_COLS },
+ { XML_NAMESPACE_TABLE, XML_NUMBER_MATRIX_ROWS_SPANNED, XML_TOK_TABLE_ROW_CELL_ATTR_SPANNED_MATRIX_ROWS },
+ { XML_NAMESPACE_TABLE, XML_NUMBER_COLUMNS_REPEATED, XML_TOK_TABLE_ROW_CELL_ATTR_REPEATED },
+ { XML_NAMESPACE_OFFICE, XML_VALUE_TYPE, XML_TOK_TABLE_ROW_CELL_ATTR_VALUE_TYPE },
+ { XML_NAMESPACE_OFFICE, XML_VALUE, XML_TOK_TABLE_ROW_CELL_ATTR_VALUE },
+ { XML_NAMESPACE_OFFICE, XML_DATE_VALUE, XML_TOK_TABLE_ROW_CELL_ATTR_DATE_VALUE },
+ { XML_NAMESPACE_OFFICE, XML_TIME_VALUE, XML_TOK_TABLE_ROW_CELL_ATTR_TIME_VALUE },
+ { XML_NAMESPACE_OFFICE, XML_STRING_VALUE, XML_TOK_TABLE_ROW_CELL_ATTR_STRING_VALUE },
+ { XML_NAMESPACE_OFFICE, XML_BOOLEAN_VALUE, XML_TOK_TABLE_ROW_CELL_ATTR_BOOLEAN_VALUE },
+ { XML_NAMESPACE_TABLE, XML_FORMULA, XML_TOK_TABLE_ROW_CELL_ATTR_FORMULA },
+ { XML_NAMESPACE_OFFICE, XML_CURRENCY, XML_TOK_TABLE_ROW_CELL_ATTR_CURRENCY },
+ XML_TOKEN_MAP_END
+ };
+
+ if ( !pTableRowCellAttrTokenMap )
+ pTableRowCellAttrTokenMap = new SvXMLTokenMap( aTableRowCellAttrTokenMap );
+ return *pTableRowCellAttrTokenMap;
+}
+
+//----------------------------------------------------------------------------
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+// NB: virtually inherit so we can multiply inherit properly
+// in ScXMLFlatDocContext_Impl
+class ScXMLDocContext_Impl : public virtual SvXMLImportContext
+{
+protected:
+ const ScXMLImport& GetScImport() const { return (const ScXMLImport&)GetImport(); }
+ ScXMLImport& GetScImport() { return (ScXMLImport&)GetImport(); }
+
+public:
+
+ ScXMLDocContext_Impl( ScXMLImport& rImport,
+ sal_uInt16 nPrfx,
+ const OUString& rLName,
+ const uno::Reference<xml::sax::XAttributeList>& xAttrList );
+ virtual ~ScXMLDocContext_Impl();
+
+ virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
+ const rtl::OUString& rLocalName,
+ const uno::Reference<xml::sax::XAttributeList>& xAttrList );
+};
+
+ScXMLDocContext_Impl::ScXMLDocContext_Impl( ScXMLImport& rImport, sal_uInt16 nPrfx,
+ const OUString& rLName,
+ const uno::Reference<xml::sax::XAttributeList>& /* xAttrList */ ) :
+SvXMLImportContext( rImport, nPrfx, rLName )
+{
+
+}
+
+ScXMLDocContext_Impl::~ScXMLDocContext_Impl()
+{
+}
+
+// context for flat file xml format
+class ScXMLFlatDocContext_Impl
+ : public ScXMLDocContext_Impl, public SvXMLMetaDocumentContext
+{
+public:
+ ScXMLFlatDocContext_Impl( ScXMLImport& i_rImport,
+ sal_uInt16 i_nPrefix, const OUString & i_rLName,
+ const uno::Reference<xml::sax::XAttributeList>& i_xAttrList,
+ const uno::Reference<document::XDocumentProperties>& i_xDocProps,
+ const uno::Reference<xml::sax::XDocumentHandler>& i_xDocBuilder);
+
+ virtual ~ScXMLFlatDocContext_Impl();
+
+ virtual SvXMLImportContext *CreateChildContext(
+ sal_uInt16 i_nPrefix, const OUString& i_rLocalName,
+ const uno::Reference<xml::sax::XAttributeList>& i_xAttrList);
+};
+
+ScXMLFlatDocContext_Impl::ScXMLFlatDocContext_Impl( ScXMLImport& i_rImport,
+ sal_uInt16 i_nPrefix, const OUString & i_rLName,
+ const uno::Reference<xml::sax::XAttributeList>& i_xAttrList,
+ const uno::Reference<document::XDocumentProperties>& i_xDocProps,
+ const uno::Reference<xml::sax::XDocumentHandler>& i_xDocBuilder) :
+SvXMLImportContext(i_rImport, i_nPrefix, i_rLName),
+ScXMLDocContext_Impl(i_rImport, i_nPrefix, i_rLName, i_xAttrList),
+SvXMLMetaDocumentContext(i_rImport, i_nPrefix, i_rLName,
+ i_xDocProps, i_xDocBuilder)
+{
+}
+
+ScXMLFlatDocContext_Impl::~ScXMLFlatDocContext_Impl() { }
+
+
+SvXMLImportContext *ScXMLFlatDocContext_Impl::CreateChildContext(
+ sal_uInt16 i_nPrefix, const OUString& i_rLocalName,
+ const uno::Reference<xml::sax::XAttributeList>& i_xAttrList)
+{
+ // behave like meta base class iff we encounter office:meta
+ const SvXMLTokenMap& rTokenMap = GetScImport().GetDocElemTokenMap();
+ if ( XML_TOK_DOC_META == rTokenMap.Get( i_nPrefix, i_rLocalName ) ) {
+ return SvXMLMetaDocumentContext::CreateChildContext(
+ i_nPrefix, i_rLocalName, i_xAttrList );
+ } else {
+ return ScXMLDocContext_Impl::CreateChildContext(
+ i_nPrefix, i_rLocalName, i_xAttrList );
+ }
+}
+
+class ScXMLBodyContext_Impl : public SvXMLImportContext
+{
+ const ScXMLImport& GetScImport() const
+ { return (const ScXMLImport&)GetImport(); }
+ ScXMLImport& GetScImport() { return (ScXMLImport&)GetImport(); }
+
+public:
+
+ ScXMLBodyContext_Impl( ScXMLImport& rImport, sal_uInt16 nPrfx,
+ const OUString& rLName,
+ const uno::Reference< xml::sax::XAttributeList > & xAttrList );
+ virtual ~ScXMLBodyContext_Impl();
+
+ virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
+ const OUString& rLocalName,
+ const uno::Reference< xml::sax::XAttributeList > & xAttrList );
+};
+
+ScXMLBodyContext_Impl::ScXMLBodyContext_Impl( ScXMLImport& rImport,
+ sal_uInt16 nPrfx, const OUString& rLName,
+ const uno::Reference< xml::sax::XAttributeList > & /* xAttrList */ ) :
+SvXMLImportContext( rImport, nPrfx, rLName )
+{
+}
+
+ScXMLBodyContext_Impl::~ScXMLBodyContext_Impl()
+{
+}
+
+SvXMLImportContext *ScXMLBodyContext_Impl::CreateChildContext(
+ sal_uInt16 /* nPrefix */,
+ const OUString& rLocalName,
+ const uno::Reference< xml::sax::XAttributeList > & xAttrList )
+{
+ return GetScImport().CreateBodyContext( rLocalName, xAttrList );
+}
+
+SvXMLImportContext *ScXMLDocContext_Impl::CreateChildContext( sal_uInt16 nPrefix,
+ const rtl::OUString& rLocalName,
+ const uno::Reference<xml::sax::XAttributeList>& xAttrList )
+{
+ SvXMLImportContext *pContext(0);
+
+ const SvXMLTokenMap& rTokenMap(GetScImport().GetDocElemTokenMap());
+ switch( rTokenMap.Get( nPrefix, rLocalName ) )
+ {
+ case XML_TOK_DOC_FONTDECLS:
+ if (GetScImport().getImportFlags() & IMPORT_FONTDECLS)
+ pContext = GetScImport().CreateFontDeclsContext(nPrefix, rLocalName, xAttrList);
+ break;
+ case XML_TOK_DOC_STYLES:
+ if (GetScImport().getImportFlags() & IMPORT_STYLES)
+ pContext = GetScImport().CreateStylesContext( rLocalName, xAttrList, false);
+ break;
+ case XML_TOK_DOC_AUTOSTYLES:
+ if (GetScImport().getImportFlags() & IMPORT_AUTOSTYLES)
+ pContext = GetScImport().CreateStylesContext( rLocalName, xAttrList, sal_True);
+ break;
+ case XML_TOK_DOC_MASTERSTYLES:
+ if (GetScImport().getImportFlags() & IMPORT_MASTERSTYLES)
+ pContext = new ScXMLMasterStylesContext( GetImport(), nPrefix, rLocalName,
+ xAttrList );
+ break;
+ case XML_TOK_DOC_META:
+ DBG_WARNING("XML_TOK_DOC_META: should not have come here, maybe document is invalid?");
+ break;
+ case XML_TOK_DOC_SCRIPTS:
+ if (GetScImport().getImportFlags() & IMPORT_SCRIPTS)
+ pContext = GetScImport().CreateScriptContext( rLocalName );
+ break;
+ case XML_TOK_DOC_BODY:
+ if (GetScImport().getImportFlags() & IMPORT_CONTENT)
+ pContext = new ScXMLBodyContext_Impl( GetScImport(), nPrefix,
+ rLocalName, xAttrList );
+ break;
+ case XML_TOK_DOC_SETTINGS:
+ if (GetScImport().getImportFlags() & IMPORT_SETTINGS)
+ pContext = new XMLDocumentSettingsContext(GetScImport(), nPrefix, rLocalName, xAttrList );
+ break;
+ }
+
+ if(!pContext)
+ pContext = new SvXMLImportContext( GetImport(), nPrefix, rLocalName );
+
+ return pContext;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetDocElemTokenMap()
+{
+ if( !pDocElemTokenMap )
+ {
+ static SvXMLTokenMapEntry aDocTokenMap[] =
+ {
+ { XML_NAMESPACE_OFFICE, XML_FONT_FACE_DECLS, XML_TOK_DOC_FONTDECLS },
+ { XML_NAMESPACE_OFFICE, XML_STYLES, XML_TOK_DOC_STYLES },
+ { XML_NAMESPACE_OFFICE, XML_AUTOMATIC_STYLES, XML_TOK_DOC_AUTOSTYLES },
+ { XML_NAMESPACE_OFFICE, XML_MASTER_STYLES, XML_TOK_DOC_MASTERSTYLES },
+ { XML_NAMESPACE_OFFICE, XML_META, XML_TOK_DOC_META },
+ { XML_NAMESPACE_OFFICE, XML_SCRIPTS, XML_TOK_DOC_SCRIPTS },
+ { XML_NAMESPACE_OFFICE, XML_BODY, XML_TOK_DOC_BODY },
+ { XML_NAMESPACE_OFFICE, XML_SETTINGS, XML_TOK_DOC_SETTINGS },
+ XML_TOKEN_MAP_END
+ };
+
+ pDocElemTokenMap = new SvXMLTokenMap( aDocTokenMap );
+
+ } // if( !pDocElemTokenMap )
+
+ return *pDocElemTokenMap;
+}
+
+
+const SvXMLTokenMap& ScXMLImport::GetBodyElemTokenMap()
+{
+ if( !pBodyElemTokenMap )
+ {
+ static SvXMLTokenMapEntry aBodyTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_TRACKED_CHANGES, XML_TOK_BODY_TRACKED_CHANGES },
+ { XML_NAMESPACE_TABLE, XML_CALCULATION_SETTINGS, XML_TOK_BODY_CALCULATION_SETTINGS },
+ { XML_NAMESPACE_TABLE, XML_CONTENT_VALIDATIONS, XML_TOK_BODY_CONTENT_VALIDATIONS },
+ { XML_NAMESPACE_TABLE, XML_LABEL_RANGES, XML_TOK_BODY_LABEL_RANGES },
+ { XML_NAMESPACE_TABLE, XML_TABLE, XML_TOK_BODY_TABLE },
+ { XML_NAMESPACE_TABLE, XML_NAMED_EXPRESSIONS, XML_TOK_BODY_NAMED_EXPRESSIONS },
+ { XML_NAMESPACE_TABLE, XML_DATABASE_RANGES, XML_TOK_BODY_DATABASE_RANGES },
+ { XML_NAMESPACE_TABLE, XML_DATABASE_RANGE, XML_TOK_BODY_DATABASE_RANGE },
+ { XML_NAMESPACE_TABLE, XML_DATA_PILOT_TABLES, XML_TOK_BODY_DATA_PILOT_TABLES },
+ { XML_NAMESPACE_TABLE, XML_CONSOLIDATION, XML_TOK_BODY_CONSOLIDATION },
+ { XML_NAMESPACE_TABLE, XML_DDE_LINKS, XML_TOK_BODY_DDE_LINKS },
+ XML_TOKEN_MAP_END
+ };
+
+ pBodyElemTokenMap = new SvXMLTokenMap( aBodyTokenMap );
+ } // if( !pBodyElemTokenMap )
+
+ return *pBodyElemTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetContentValidationsElemTokenMap()
+{
+ if( !pContentValidationsElemTokenMap )
+ {
+ static SvXMLTokenMapEntry aContentValidationsElemTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_CONTENT_VALIDATION, XML_TOK_CONTENT_VALIDATION },
+ XML_TOKEN_MAP_END
+ };
+
+ pContentValidationsElemTokenMap = new SvXMLTokenMap( aContentValidationsElemTokenMap );
+ } // if( !pContentValidationsElemTokenMap )
+
+ return *pContentValidationsElemTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetContentValidationElemTokenMap()
+{
+ if( !pContentValidationElemTokenMap )
+ {
+ static SvXMLTokenMapEntry aContentValidationElemTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_HELP_MESSAGE, XML_TOK_CONTENT_VALIDATION_ELEM_HELP_MESSAGE },
+ { XML_NAMESPACE_TABLE, XML_ERROR_MESSAGE, XML_TOK_CONTENT_VALIDATION_ELEM_ERROR_MESSAGE },
+ { XML_NAMESPACE_TABLE, XML_ERROR_MACRO, XML_TOK_CONTENT_VALIDATION_ELEM_ERROR_MACRO },
+ { XML_NAMESPACE_OFFICE, XML_EVENT_LISTENERS, XML_TOK_CONTENT_VALIDATION_ELEM_EVENT_LISTENERS },
+ XML_TOKEN_MAP_END
+ };
+
+ pContentValidationElemTokenMap = new SvXMLTokenMap( aContentValidationElemTokenMap );
+ } // if( !pContentValidationElemTokenMap )
+
+ return *pContentValidationElemTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetContentValidationAttrTokenMap()
+{
+ if( !pContentValidationAttrTokenMap )
+ {
+ static SvXMLTokenMapEntry aContentValidationAttrTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_NAME, XML_TOK_CONTENT_VALIDATION_NAME },
+ { XML_NAMESPACE_TABLE, XML_CONDITION, XML_TOK_CONTENT_VALIDATION_CONDITION },
+ { XML_NAMESPACE_TABLE, XML_BASE_CELL_ADDRESS, XML_TOK_CONTENT_VALIDATION_BASE_CELL_ADDRESS },
+ { XML_NAMESPACE_TABLE, XML_ALLOW_EMPTY_CELL, XML_TOK_CONTENT_VALIDATION_ALLOW_EMPTY_CELL },
+ { XML_NAMESPACE_TABLE, XML_DISPLAY_LIST, XML_TOK_CONTENT_VALIDATION_DISPLAY_LIST },
+ XML_TOKEN_MAP_END
+ };
+
+ pContentValidationAttrTokenMap = new SvXMLTokenMap( aContentValidationAttrTokenMap );
+ } // if( !pContentValidationAttrTokenMap )
+
+ return *pContentValidationAttrTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetContentValidationMessageElemTokenMap()
+{
+ if( !pContentValidationMessageElemTokenMap )
+ {
+ static SvXMLTokenMapEntry aContentValidationMessageElemTokenMap[] =
+ {
+ { XML_NAMESPACE_TEXT, XML_P, XML_TOK_P },
+ XML_TOKEN_MAP_END
+ };
+
+ pContentValidationMessageElemTokenMap = new SvXMLTokenMap( aContentValidationMessageElemTokenMap );
+ } // if( !pContentValidationMessageElemTokenMap )
+
+ return *pContentValidationMessageElemTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetContentValidationHelpMessageAttrTokenMap()
+{
+ if( !pContentValidationHelpMessageAttrTokenMap )
+ {
+ static SvXMLTokenMapEntry aContentValidationHelpMessageAttrTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_TITLE, XML_TOK_HELP_MESSAGE_ATTR_TITLE },
+ { XML_NAMESPACE_TABLE, XML_DISPLAY, XML_TOK_HELP_MESSAGE_ATTR_DISPLAY },
+ XML_TOKEN_MAP_END
+ };
+
+ pContentValidationHelpMessageAttrTokenMap = new SvXMLTokenMap( aContentValidationHelpMessageAttrTokenMap );
+ } // if( !pContentValidationHelpMessageAttrTokenMap )
+
+ return *pContentValidationHelpMessageAttrTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetContentValidationErrorMessageAttrTokenMap()
+{
+ if( !pContentValidationErrorMessageAttrTokenMap )
+ {
+ static SvXMLTokenMapEntry aContentValidationErrorMessageAttrTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_TITLE, XML_TOK_ERROR_MESSAGE_ATTR_TITLE },
+ { XML_NAMESPACE_TABLE, XML_DISPLAY, XML_TOK_ERROR_MESSAGE_ATTR_DISPLAY },
+ { XML_NAMESPACE_TABLE, XML_MESSAGE_TYPE, XML_TOK_ERROR_MESSAGE_ATTR_MESSAGE_TYPE },
+ XML_TOKEN_MAP_END
+ };
+
+ pContentValidationErrorMessageAttrTokenMap = new SvXMLTokenMap( aContentValidationErrorMessageAttrTokenMap );
+ } // if( !pContentValidationErrorMessageAttrTokenMap )
+
+ return *pContentValidationErrorMessageAttrTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetContentValidationErrorMacroAttrTokenMap()
+{
+ if( !pContentValidationErrorMacroAttrTokenMap )
+ {
+ static SvXMLTokenMapEntry aContentValidationErrorMacroAttrTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_NAME, XML_TOK_ERROR_MACRO_ATTR_NAME },
+ { XML_NAMESPACE_TABLE, XML_EXECUTE, XML_TOK_ERROR_MACRO_ATTR_EXECUTE },
+ XML_TOKEN_MAP_END
+ };
+
+ pContentValidationErrorMacroAttrTokenMap = new SvXMLTokenMap( aContentValidationErrorMacroAttrTokenMap );
+ } // if( !pContentValidationErrorMacroAttrTokenMap )
+
+ return *pContentValidationErrorMacroAttrTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetLabelRangesElemTokenMap()
+{
+ if( !pLabelRangesElemTokenMap )
+ {
+ static SvXMLTokenMapEntry aLabelRangesElemTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_LABEL_RANGE, XML_TOK_LABEL_RANGE_ELEM },
+ XML_TOKEN_MAP_END
+ };
+
+ pLabelRangesElemTokenMap = new SvXMLTokenMap( aLabelRangesElemTokenMap );
+ } // if( !pLabelRangesElemTokenMap )
+
+ return *pLabelRangesElemTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetLabelRangeAttrTokenMap()
+{
+ if( !pLabelRangeAttrTokenMap )
+ {
+ static SvXMLTokenMapEntry aLabelRangeAttrTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_LABEL_CELL_RANGE_ADDRESS, XML_TOK_LABEL_RANGE_ATTR_LABEL_RANGE },
+ { XML_NAMESPACE_TABLE, XML_DATA_CELL_RANGE_ADDRESS, XML_TOK_LABEL_RANGE_ATTR_DATA_RANGE },
+ { XML_NAMESPACE_TABLE, XML_ORIENTATION, XML_TOK_LABEL_RANGE_ATTR_ORIENTATION },
+ XML_TOKEN_MAP_END
+ };
+
+ pLabelRangeAttrTokenMap = new SvXMLTokenMap( aLabelRangeAttrTokenMap );
+ } // if( !pLabelRangeAttrTokenMap )
+
+ return *pLabelRangeAttrTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetTableElemTokenMap()
+{
+ if( !pTableElemTokenMap )
+ {
+ static SvXMLTokenMapEntry aTableTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_NAMED_EXPRESSIONS, XML_TOK_TABLE_NAMED_EXPRESSIONS },
+ { XML_NAMESPACE_TABLE, XML_TABLE_COLUMN_GROUP, XML_TOK_TABLE_COL_GROUP },
+ { XML_NAMESPACE_TABLE, XML_TABLE_HEADER_COLUMNS, XML_TOK_TABLE_HEADER_COLS },
+ { XML_NAMESPACE_TABLE, XML_TABLE_COLUMNS, XML_TOK_TABLE_COLS },
+ { XML_NAMESPACE_TABLE, XML_TABLE_COLUMN, XML_TOK_TABLE_COL },
+ { XML_NAMESPACE_TABLE, XML_TABLE_PROTECTION, XML_TOK_TABLE_PROTECTION },
+ { XML_NAMESPACE_TABLE, XML_TABLE_ROW_GROUP, XML_TOK_TABLE_ROW_GROUP },
+ { XML_NAMESPACE_TABLE, XML_TABLE_HEADER_ROWS, XML_TOK_TABLE_HEADER_ROWS },
+ { XML_NAMESPACE_TABLE, XML_TABLE_ROWS, XML_TOK_TABLE_ROWS },
+ { XML_NAMESPACE_TABLE, XML_TABLE_ROW, XML_TOK_TABLE_ROW },
+ { XML_NAMESPACE_TABLE, XML_TABLE_SOURCE, XML_TOK_TABLE_SOURCE },
+ { XML_NAMESPACE_TABLE, XML_SCENARIO, XML_TOK_TABLE_SCENARIO },
+ { XML_NAMESPACE_TABLE, XML_SHAPES, XML_TOK_TABLE_SHAPES },
+ { XML_NAMESPACE_OFFICE, XML_FORMS, XML_TOK_TABLE_FORMS },
+ { XML_NAMESPACE_OFFICE, XML_EVENT_LISTENERS, XML_TOK_TABLE_EVENT_LISTENERS },
+ { XML_NAMESPACE_OFFICE_EXT, XML_EVENT_LISTENERS, XML_TOK_TABLE_EVENT_LISTENERS_EXT },
+ XML_TOKEN_MAP_END
+ };
+
+ pTableElemTokenMap = new SvXMLTokenMap( aTableTokenMap );
+ } // if( !pTableElemTokenMap )
+
+ return *pTableElemTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetTableProtectionAttrTokenMap()
+{
+ if (!pTableProtectionElemTokenMap)
+ {
+ static SvXMLTokenMapEntry aTableProtectionTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_SELECT_PROTECTED_CELLS, XML_TOK_TABLE_SELECT_PROTECTED_CELLS },
+ { XML_NAMESPACE_TABLE, XML_SELECT_UNPROTECTED_CELLS, XML_TOK_TABLE_SELECT_UNPROTECTED_CELLS },
+ XML_TOKEN_MAP_END
+ };
+ pTableProtectionElemTokenMap = new SvXMLTokenMap(aTableProtectionTokenMap);
+ }
+
+ return *pTableProtectionElemTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetTableRowsElemTokenMap()
+{
+ if( !pTableRowsElemTokenMap )
+ {
+ static SvXMLTokenMapEntry aTableRowsElemTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_TABLE_ROW_GROUP, XML_TOK_TABLE_ROWS_ROW_GROUP },
+ { XML_NAMESPACE_TABLE, XML_TABLE_HEADER_ROWS, XML_TOK_TABLE_ROWS_HEADER_ROWS },
+ { XML_NAMESPACE_TABLE, XML_TABLE_ROWS, XML_TOK_TABLE_ROWS_ROWS },
+ { XML_NAMESPACE_TABLE, XML_TABLE_ROW, XML_TOK_TABLE_ROWS_ROW },
+ XML_TOKEN_MAP_END
+ };
+
+ pTableRowsElemTokenMap = new SvXMLTokenMap( aTableRowsElemTokenMap );
+ } // if( !pTableRowsElemTokenMap )
+
+ return *pTableRowsElemTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetTableColsElemTokenMap()
+{
+ if( !pTableColsElemTokenMap )
+ {
+ static SvXMLTokenMapEntry aTableColsElemTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_TABLE_COLUMN_GROUP, XML_TOK_TABLE_COLS_COL_GROUP },
+ { XML_NAMESPACE_TABLE, XML_TABLE_HEADER_COLUMNS, XML_TOK_TABLE_COLS_HEADER_COLS },
+ { XML_NAMESPACE_TABLE, XML_TABLE_COLUMNS, XML_TOK_TABLE_COLS_COLS },
+ { XML_NAMESPACE_TABLE, XML_TABLE_COLUMN, XML_TOK_TABLE_COLS_COL },
+ XML_TOKEN_MAP_END
+ };
+
+ pTableColsElemTokenMap = new SvXMLTokenMap( aTableColsElemTokenMap );
+ } // if( !pTableColsElemTokenMap )
+
+ return *pTableColsElemTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetTableAttrTokenMap()
+{
+ if( !pTableAttrTokenMap )
+ {
+ static SvXMLTokenMapEntry aTableAttrTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_NAME, XML_TOK_TABLE_NAME },
+ { XML_NAMESPACE_TABLE, XML_STYLE_NAME, XML_TOK_TABLE_STYLE_NAME },
+ { XML_NAMESPACE_TABLE, XML_PROTECTED, XML_TOK_TABLE_PROTECTED },
+ { XML_NAMESPACE_TABLE, XML_PRINT_RANGES, XML_TOK_TABLE_PRINT_RANGES },
+ { XML_NAMESPACE_TABLE, XML_PROTECTION_KEY, XML_TOK_TABLE_PASSWORD },
+ { XML_NAMESPACE_TABLE, XML_PROTECTION_KEY_DIGEST_ALGORITHM, XML_TOK_TABLE_PASSHASH },
+ { XML_NAMESPACE_TABLE, XML_PROTECTION_KEY_DIGEST_ALGORITHM_2, XML_TOK_TABLE_PASSHASH_2 },
+ { XML_NAMESPACE_TABLE, XML_PRINT, XML_TOK_TABLE_PRINT },
+ XML_TOKEN_MAP_END
+ };
+
+ pTableAttrTokenMap = new SvXMLTokenMap( aTableAttrTokenMap );
+ } // if( !pTableAttrTokenMap )
+
+ return *pTableAttrTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetTableScenarioAttrTokenMap()
+{
+ if( !pTableScenarioAttrTokenMap )
+ {
+ static SvXMLTokenMapEntry aTableScenarioAttrTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_DISPLAY_BORDER, XML_TOK_TABLE_SCENARIO_ATTR_DISPLAY_BORDER },
+ { XML_NAMESPACE_TABLE, XML_BORDER_COLOR, XML_TOK_TABLE_SCENARIO_ATTR_BORDER_COLOR },
+ { XML_NAMESPACE_TABLE, XML_COPY_BACK, XML_TOK_TABLE_SCENARIO_ATTR_COPY_BACK },
+ { XML_NAMESPACE_TABLE, XML_COPY_STYLES, XML_TOK_TABLE_SCENARIO_ATTR_COPY_STYLES },
+ { XML_NAMESPACE_TABLE, XML_COPY_FORMULAS, XML_TOK_TABLE_SCENARIO_ATTR_COPY_FORMULAS },
+ { XML_NAMESPACE_TABLE, XML_IS_ACTIVE, XML_TOK_TABLE_SCENARIO_ATTR_IS_ACTIVE },
+ { XML_NAMESPACE_TABLE, XML_SCENARIO_RANGES, XML_TOK_TABLE_SCENARIO_ATTR_SCENARIO_RANGES },
+ { XML_NAMESPACE_TABLE, XML_COMMENT, XML_TOK_TABLE_SCENARIO_ATTR_COMMENT },
+ { XML_NAMESPACE_TABLE, XML_PROTECTED, XML_TOK_TABLE_SCENARIO_ATTR_PROTECTED },
+ XML_TOKEN_MAP_END
+ };
+
+ pTableScenarioAttrTokenMap = new SvXMLTokenMap( aTableScenarioAttrTokenMap );
+ } // if( !pTableScenarioAttrTokenMap )
+
+ return *pTableScenarioAttrTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetTableColAttrTokenMap()
+{
+ if( !pTableColAttrTokenMap )
+ {
+ static SvXMLTokenMapEntry aTableColAttrTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_STYLE_NAME, XML_TOK_TABLE_COL_ATTR_STYLE_NAME },
+ { XML_NAMESPACE_TABLE, XML_NUMBER_COLUMNS_REPEATED, XML_TOK_TABLE_COL_ATTR_REPEATED },
+ { XML_NAMESPACE_TABLE, XML_VISIBILITY, XML_TOK_TABLE_COL_ATTR_VISIBILITY },
+ { XML_NAMESPACE_TABLE, XML_DEFAULT_CELL_STYLE_NAME, XML_TOK_TABLE_COL_ATTR_DEFAULT_CELL_STYLE_NAME },
+ XML_TOKEN_MAP_END
+ };
+
+ pTableColAttrTokenMap = new SvXMLTokenMap( aTableColAttrTokenMap );
+ } // if( !pTableColAttrTokenMap )
+
+ return *pTableColAttrTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetTableRowElemTokenMap()
+{
+ if( !pTableRowElemTokenMap )
+ {
+ static SvXMLTokenMapEntry aTableRowTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_TABLE_CELL, XML_TOK_TABLE_ROW_CELL },
+ { XML_NAMESPACE_TABLE, XML_COVERED_TABLE_CELL, XML_TOK_TABLE_ROW_COVERED_CELL },
+ XML_TOKEN_MAP_END
+ };
+
+ pTableRowElemTokenMap = new SvXMLTokenMap( aTableRowTokenMap );
+ } // if( !pTableRowElemTokenMap )
+
+ return *pTableRowElemTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetTableRowAttrTokenMap()
+{
+ if( !pTableRowAttrTokenMap )
+ {
+ static SvXMLTokenMapEntry aTableRowAttrTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_STYLE_NAME, XML_TOK_TABLE_ROW_ATTR_STYLE_NAME },
+ { XML_NAMESPACE_TABLE, XML_VISIBILITY, XML_TOK_TABLE_ROW_ATTR_VISIBILITY },
+ { XML_NAMESPACE_TABLE, XML_NUMBER_ROWS_REPEATED, XML_TOK_TABLE_ROW_ATTR_REPEATED },
+ { XML_NAMESPACE_TABLE, XML_DEFAULT_CELL_STYLE_NAME, XML_TOK_TABLE_ROW_ATTR_DEFAULT_CELL_STYLE_NAME },
+ // { XML_NAMESPACE_TABLE, XML_USE_OPTIMAL_HEIGHT, XML_TOK_TABLE_ROW_ATTR_USE_OPTIMAL_HEIGHT },
+ XML_TOKEN_MAP_END
+ };
+
+ pTableRowAttrTokenMap = new SvXMLTokenMap( aTableRowAttrTokenMap );
+ } // if( !pTableRowAttrTokenMap )
+
+ return *pTableRowAttrTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetTableRowCellElemTokenMap()
+{
+ if( !pTableRowCellElemTokenMap )
+ {
+ static SvXMLTokenMapEntry aTableRowCellTokenMap[] =
+ {
+ { XML_NAMESPACE_TEXT, XML_P, XML_TOK_TABLE_ROW_CELL_P },
+ { XML_NAMESPACE_TABLE, XML_SUB_TABLE, XML_TOK_TABLE_ROW_CELL_TABLE },
+ { XML_NAMESPACE_OFFICE, XML_ANNOTATION, XML_TOK_TABLE_ROW_CELL_ANNOTATION },
+ { XML_NAMESPACE_TABLE, XML_DETECTIVE, XML_TOK_TABLE_ROW_CELL_DETECTIVE },
+ { XML_NAMESPACE_TABLE, XML_CELL_RANGE_SOURCE, XML_TOK_TABLE_ROW_CELL_CELL_RANGE_SOURCE },
+ XML_TOKEN_MAP_END
+ };
+
+ pTableRowCellElemTokenMap = new SvXMLTokenMap( aTableRowCellTokenMap );
+ } // if( !pTableRowCellElemTokenMap )
+
+ return *pTableRowCellElemTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetTableAnnotationAttrTokenMap()
+{
+ if( !pTableAnnotationAttrTokenMap )
+ {
+ static SvXMLTokenMapEntry aTableAnnotationAttrTokenMap[] =
+ {
+ { XML_NAMESPACE_OFFICE, XML_AUTHOR, XML_TOK_TABLE_ANNOTATION_ATTR_AUTHOR },
+ { XML_NAMESPACE_OFFICE, XML_CREATE_DATE, XML_TOK_TABLE_ANNOTATION_ATTR_CREATE_DATE },
+ { XML_NAMESPACE_OFFICE, XML_CREATE_DATE_STRING, XML_TOK_TABLE_ANNOTATION_ATTR_CREATE_DATE_STRING },
+ { XML_NAMESPACE_OFFICE, XML_DISPLAY, XML_TOK_TABLE_ANNOTATION_ATTR_DISPLAY },
+ { XML_NAMESPACE_SVG, XML_X, XML_TOK_TABLE_ANNOTATION_ATTR_X },
+ { XML_NAMESPACE_SVG, XML_Y, XML_TOK_TABLE_ANNOTATION_ATTR_Y },
+ XML_TOKEN_MAP_END
+ };
+
+ pTableAnnotationAttrTokenMap = new SvXMLTokenMap( aTableAnnotationAttrTokenMap );
+ } // if( !pTableAnnotationAttrTokenMap )
+
+ return *pTableAnnotationAttrTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetDetectiveElemTokenMap()
+{
+ if( !pDetectiveElemTokenMap )
+ {
+ static SvXMLTokenMapEntry aDetectiveElemTokenMap[]=
+ {
+ { XML_NAMESPACE_TABLE, XML_HIGHLIGHTED_RANGE, XML_TOK_DETECTIVE_ELEM_HIGHLIGHTED },
+ { XML_NAMESPACE_TABLE, XML_OPERATION, XML_TOK_DETECTIVE_ELEM_OPERATION },
+ XML_TOKEN_MAP_END
+ };
+
+ pDetectiveElemTokenMap = new SvXMLTokenMap( aDetectiveElemTokenMap );
+ } // if( !pDetectiveElemTokenMap )
+
+ return *pDetectiveElemTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetDetectiveHighlightedAttrTokenMap()
+{
+ if( !pDetectiveHighlightedAttrTokenMap )
+ {
+ static SvXMLTokenMapEntry aDetectiveHighlightedAttrTokenMap[]=
+ {
+ { XML_NAMESPACE_TABLE, XML_CELL_RANGE_ADDRESS, XML_TOK_DETECTIVE_HIGHLIGHTED_ATTR_CELL_RANGE },
+ { XML_NAMESPACE_TABLE, XML_DIRECTION, XML_TOK_DETECTIVE_HIGHLIGHTED_ATTR_DIRECTION },
+ { XML_NAMESPACE_TABLE, XML_CONTAINS_ERROR, XML_TOK_DETECTIVE_HIGHLIGHTED_ATTR_CONTAINS_ERROR },
+ { XML_NAMESPACE_TABLE, XML_MARKED_INVALID, XML_TOK_DETECTIVE_HIGHLIGHTED_ATTR_MARKED_INVALID },
+ XML_TOKEN_MAP_END
+ };
+
+ pDetectiveHighlightedAttrTokenMap = new SvXMLTokenMap( aDetectiveHighlightedAttrTokenMap );
+ } // if( !pDetectiveHighlightedAttrTokenMap )
+
+ return *pDetectiveHighlightedAttrTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetDetectiveOperationAttrTokenMap()
+{
+ if( !pDetectiveOperationAttrTokenMap )
+ {
+ static SvXMLTokenMapEntry aDetectiveOperationAttrTokenMap[]=
+ {
+ { XML_NAMESPACE_TABLE, XML_NAME, XML_TOK_DETECTIVE_OPERATION_ATTR_NAME },
+ { XML_NAMESPACE_TABLE, XML_INDEX, XML_TOK_DETECTIVE_OPERATION_ATTR_INDEX },
+ XML_TOKEN_MAP_END
+ };
+
+ pDetectiveOperationAttrTokenMap = new SvXMLTokenMap( aDetectiveOperationAttrTokenMap );
+ } // if( !pDetectiveOperationAttrTokenMap )
+
+ return *pDetectiveOperationAttrTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetTableCellRangeSourceAttrTokenMap()
+{
+ if( !pTableCellRangeSourceAttrTokenMap )
+ {
+ static SvXMLTokenMapEntry aTableCellRangeSourceAttrTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_NAME, XML_TOK_TABLE_CELL_RANGE_SOURCE_ATTR_NAME },
+ { XML_NAMESPACE_XLINK, XML_HREF, XML_TOK_TABLE_CELL_RANGE_SOURCE_ATTR_HREF },
+ { XML_NAMESPACE_TABLE, XML_FILTER_NAME, XML_TOK_TABLE_CELL_RANGE_SOURCE_ATTR_FILTER_NAME },
+ { XML_NAMESPACE_TABLE, XML_FILTER_OPTIONS, XML_TOK_TABLE_CELL_RANGE_SOURCE_ATTR_FILTER_OPTIONS },
+ { XML_NAMESPACE_TABLE, XML_LAST_COLUMN_SPANNED, XML_TOK_TABLE_CELL_RANGE_SOURCE_ATTR_LAST_COLUMN },
+ { XML_NAMESPACE_TABLE, XML_LAST_ROW_SPANNED, XML_TOK_TABLE_CELL_RANGE_SOURCE_ATTR_LAST_ROW },
+ { XML_NAMESPACE_TABLE, XML_REFRESH_DELAY, XML_TOK_TABLE_CELL_RANGE_SOURCE_ATTR_REFRESH_DELAY },
+ XML_TOKEN_MAP_END
+ };
+
+ pTableCellRangeSourceAttrTokenMap = new SvXMLTokenMap( aTableCellRangeSourceAttrTokenMap );
+ } // if( !pTableCellRangeSourceAttrTokenMap )
+
+ return *pTableCellRangeSourceAttrTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetNamedExpressionsElemTokenMap()
+{
+ if( !pNamedExpressionsElemTokenMap )
+ {
+ static SvXMLTokenMapEntry aNamedExpressionsTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_NAMED_RANGE, XML_TOK_NAMED_EXPRESSIONS_NAMED_RANGE },
+ { XML_NAMESPACE_TABLE, XML_NAMED_EXPRESSION, XML_TOK_NAMED_EXPRESSIONS_NAMED_EXPRESSION },
+ XML_TOKEN_MAP_END
+ };
+
+ pNamedExpressionsElemTokenMap = new SvXMLTokenMap( aNamedExpressionsTokenMap );
+ } // if( !pNamedExpressionsElemTokenMap )
+
+ return *pNamedExpressionsElemTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetNamedRangeAttrTokenMap()
+{
+ if( !pNamedRangeAttrTokenMap )
+ {
+ static SvXMLTokenMapEntry aNamedRangeAttrTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_NAME, XML_TOK_NAMED_RANGE_ATTR_NAME },
+ { XML_NAMESPACE_TABLE, XML_CELL_RANGE_ADDRESS, XML_TOK_NAMED_RANGE_ATTR_CELL_RANGE_ADDRESS },
+ { XML_NAMESPACE_TABLE, XML_BASE_CELL_ADDRESS, XML_TOK_NAMED_RANGE_ATTR_BASE_CELL_ADDRESS },
+ { XML_NAMESPACE_TABLE, XML_RANGE_USABLE_AS, XML_TOK_NAMED_RANGE_ATTR_RANGE_USABLE_AS },
+ XML_TOKEN_MAP_END
+ };
+
+ pNamedRangeAttrTokenMap = new SvXMLTokenMap( aNamedRangeAttrTokenMap );
+ } // if( !pNamedRangeAttrTokenMap )
+
+ return *pNamedRangeAttrTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetNamedExpressionAttrTokenMap()
+{
+ if( !pNamedExpressionAttrTokenMap )
+ {
+ static SvXMLTokenMapEntry aNamedExpressionAttrTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_NAME, XML_TOK_NAMED_EXPRESSION_ATTR_NAME },
+ { XML_NAMESPACE_TABLE, XML_BASE_CELL_ADDRESS, XML_TOK_NAMED_EXPRESSION_ATTR_BASE_CELL_ADDRESS },
+ { XML_NAMESPACE_TABLE, XML_EXPRESSION, XML_TOK_NAMED_EXPRESSION_ATTR_EXPRESSION },
+ XML_TOKEN_MAP_END
+ };
+
+ pNamedExpressionAttrTokenMap = new SvXMLTokenMap( aNamedExpressionAttrTokenMap );
+ } // if( !pNamedExpressionAttrTokenMap )
+
+ return *pNamedExpressionAttrTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetDatabaseRangesElemTokenMap()
+{
+ if( !pDatabaseRangesElemTokenMap )
+ {
+ static SvXMLTokenMapEntry aDatabaseRangesTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_DATABASE_RANGE, XML_TOK_DATABASE_RANGE },
+ XML_TOKEN_MAP_END
+ };
+
+ pDatabaseRangesElemTokenMap = new SvXMLTokenMap( aDatabaseRangesTokenMap );
+ } // if( !pDatabaseRangesElemTokenMap )
+
+ return *pDatabaseRangesElemTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetDatabaseRangeElemTokenMap()
+{
+ if( !pDatabaseRangeElemTokenMap )
+ {
+ static SvXMLTokenMapEntry aDatabaseRangeTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_DATABASE_SOURCE_SQL, XML_TOK_DATABASE_RANGE_SOURCE_SQL },
+ { XML_NAMESPACE_TABLE, XML_DATABASE_SOURCE_TABLE, XML_TOK_DATABASE_RANGE_SOURCE_TABLE },
+ { XML_NAMESPACE_TABLE, XML_DATABASE_SOURCE_QUERY, XML_TOK_DATABASE_RANGE_SOURCE_QUERY },
+ { XML_NAMESPACE_TABLE, XML_FILTER, XML_TOK_FILTER },
+ { XML_NAMESPACE_TABLE, XML_SORT, XML_TOK_SORT },
+ { XML_NAMESPACE_TABLE, XML_SUBTOTAL_RULES, XML_TOK_DATABASE_RANGE_SUBTOTAL_RULES },
+ XML_TOKEN_MAP_END
+ };
+
+ pDatabaseRangeElemTokenMap = new SvXMLTokenMap( aDatabaseRangeTokenMap );
+ } // if( !pDatabaseRangeElemTokenMap )
+
+ return *pDatabaseRangeElemTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetDatabaseRangeAttrTokenMap()
+{
+ if( !pDatabaseRangeAttrTokenMap )
+ {
+ static SvXMLTokenMapEntry aDatabaseRangeAttrTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_NAME, XML_TOK_DATABASE_RANGE_ATTR_NAME },
+ { XML_NAMESPACE_TABLE, XML_IS_SELECTION, XML_TOK_DATABASE_RANGE_ATTR_IS_SELECTION },
+ { XML_NAMESPACE_TABLE, XML_ON_UPDATE_KEEP_STYLES, XML_TOK_DATABASE_RANGE_ATTR_ON_UPDATE_KEEP_STYLES },
+ { XML_NAMESPACE_TABLE, XML_ON_UPDATE_KEEP_SIZE, XML_TOK_DATABASE_RANGE_ATTR_ON_UPDATE_KEEP_SIZE },
+ { XML_NAMESPACE_TABLE, XML_HAS_PERSISTENT_DATA, XML_TOK_DATABASE_RANGE_ATTR_HAS_PERSISTENT_DATA },
+ { XML_NAMESPACE_TABLE, XML_ORIENTATION, XML_TOK_DATABASE_RANGE_ATTR_ORIENTATION },
+ { XML_NAMESPACE_TABLE, XML_CONTAINS_HEADER, XML_TOK_DATABASE_RANGE_ATTR_CONTAINS_HEADER },
+ { XML_NAMESPACE_TABLE, XML_DISPLAY_FILTER_BUTTONS, XML_TOK_DATABASE_RANGE_ATTR_DISPLAY_FILTER_BUTTONS },
+ { XML_NAMESPACE_TABLE, XML_TARGET_RANGE_ADDRESS, XML_TOK_DATABASE_RANGE_ATTR_TARGET_RANGE_ADDRESS },
+ { XML_NAMESPACE_TABLE, XML_REFRESH_DELAY, XML_TOK_DATABASE_RANGE_ATTR_REFRESH_DELAY },
+ XML_TOKEN_MAP_END
+ };
+
+ pDatabaseRangeAttrTokenMap = new SvXMLTokenMap( aDatabaseRangeAttrTokenMap );
+ } // if( !pDatabaseRangeAttrTokenMap )
+
+ return *pDatabaseRangeAttrTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetDatabaseRangeSourceSQLAttrTokenMap()
+{
+ if( !pDatabaseRangeSourceSQLAttrTokenMap )
+ {
+ static SvXMLTokenMapEntry aDatabaseRangeSourceSQLAttrTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_DATABASE_NAME, XML_TOK_SOURCE_SQL_ATTR_DATABASE_NAME },
+ { XML_NAMESPACE_XLINK, XML_HREF, XML_TOK_SOURCE_SQL_ATTR_HREF },
+ { XML_NAMESPACE_TABLE, XML_CONNECTION_RESOURCE, XML_TOK_SOURCE_SQL_ATTR_CONNECTION_RESSOURCE},
+ { XML_NAMESPACE_TABLE, XML_SQL_STATEMENT, XML_TOK_SOURCE_SQL_ATTR_SQL_STATEMENT },
+ { XML_NAMESPACE_TABLE, XML_PARSE_SQL_STATEMENT, XML_TOK_SOURCE_SQL_ATTR_PARSE_SQL_STATEMENT },
+ XML_TOKEN_MAP_END
+ };
+
+ pDatabaseRangeSourceSQLAttrTokenMap = new SvXMLTokenMap( aDatabaseRangeSourceSQLAttrTokenMap );
+ } // if( !pDatabaseRangeSourceSQLAttrTokenMap )
+
+ return *pDatabaseRangeSourceSQLAttrTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetDatabaseRangeSourceTableAttrTokenMap()
+{
+ if( !pDatabaseRangeSourceTableAttrTokenMap )
+ {
+ static SvXMLTokenMapEntry aDatabaseRangeSourceTableAttrTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_DATABASE_NAME, XML_TOK_SOURCE_TABLE_ATTR_DATABASE_NAME },
+ { XML_NAMESPACE_XLINK, XML_HREF, XML_TOK_SOURCE_TABLE_ATTR_HREF },
+ { XML_NAMESPACE_TABLE, XML_CONNECTION_RESOURCE, XML_TOK_SOURCE_TABLE_ATTR_CONNECTION_RESSOURCE },
+ { XML_NAMESPACE_TABLE, XML_TABLE_NAME, XML_TOK_SOURCE_TABLE_ATTR_TABLE_NAME },
+ XML_TOKEN_MAP_END
+ };
+
+ pDatabaseRangeSourceTableAttrTokenMap = new SvXMLTokenMap( aDatabaseRangeSourceTableAttrTokenMap );
+ } // if( !pDatabaseRangeSourceTableAttrTokenMap )
+
+ return *pDatabaseRangeSourceTableAttrTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetDatabaseRangeSourceQueryAttrTokenMap()
+{
+ if( !pDatabaseRangeSourceQueryAttrTokenMap )
+ {
+ static SvXMLTokenMapEntry aDatabaseRangeSourceQueryAttrTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_DATABASE_NAME, XML_TOK_SOURCE_QUERY_ATTR_DATABASE_NAME },
+ { XML_NAMESPACE_XLINK, XML_HREF, XML_TOK_SOURCE_QUERY_ATTR_HREF },
+ { XML_NAMESPACE_TABLE, XML_CONNECTION_RESOURCE, XML_TOK_SOURCE_QUERY_ATTR_CONNECTION_RESSOURCE },
+ { XML_NAMESPACE_TABLE, XML_QUERY_NAME, XML_TOK_SOURCE_QUERY_ATTR_QUERY_NAME },
+ XML_TOKEN_MAP_END
+ };
+
+ pDatabaseRangeSourceQueryAttrTokenMap = new SvXMLTokenMap( aDatabaseRangeSourceQueryAttrTokenMap );
+ } // if( !pDatabaseRangeSourceQueryAttrTokenMap )
+
+ return *pDatabaseRangeSourceQueryAttrTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetFilterElemTokenMap()
+{
+ if( !pFilterElemTokenMap )
+ {
+ static SvXMLTokenMapEntry aFilterTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_FILTER_AND, XML_TOK_FILTER_AND },
+ { XML_NAMESPACE_TABLE, XML_FILTER_OR, XML_TOK_FILTER_OR },
+ { XML_NAMESPACE_TABLE, XML_FILTER_CONDITION, XML_TOK_FILTER_CONDITION },
+ XML_TOKEN_MAP_END
+ };
+
+ pFilterElemTokenMap = new SvXMLTokenMap( aFilterTokenMap );
+ } // if( !pFilterElemTokenMap )
+
+ return *pFilterElemTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetFilterAttrTokenMap()
+{
+ if( !pFilterAttrTokenMap )
+ {
+ static SvXMLTokenMapEntry aFilterAttrTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_TARGET_RANGE_ADDRESS, XML_TOK_FILTER_ATTR_TARGET_RANGE_ADDRESS },
+ { XML_NAMESPACE_TABLE, XML_CONDITION_SOURCE_RANGE_ADDRESS, XML_TOK_FILTER_ATTR_CONDITION_SOURCE_RANGE_ADDRESS },
+ { XML_NAMESPACE_TABLE, XML_CONDITION_SOURCE, XML_TOK_FILTER_ATTR_CONDITION_SOURCE },
+ { XML_NAMESPACE_TABLE, XML_DISPLAY_DUPLICATES, XML_TOK_FILTER_ATTR_DISPLAY_DUPLICATES },
+ XML_TOKEN_MAP_END
+ };
+
+ pFilterAttrTokenMap = new SvXMLTokenMap( aFilterAttrTokenMap );
+ } // if( !pFilterAttrTokenMap )
+
+ return *pFilterAttrTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetFilterConditionAttrTokenMap()
+{
+ if( !pFilterConditionAttrTokenMap )
+ {
+ static SvXMLTokenMapEntry aFilterConditionAttrTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_FIELD_NUMBER, XML_TOK_CONDITION_ATTR_FIELD_NUMBER },
+ { XML_NAMESPACE_TABLE, XML_CASE_SENSITIVE, XML_TOK_CONDITION_ATTR_CASE_SENSITIVE },
+ { XML_NAMESPACE_TABLE, XML_DATA_TYPE, XML_TOK_CONDITION_ATTR_DATA_TYPE },
+ { XML_NAMESPACE_TABLE, XML_VALUE, XML_TOK_CONDITION_ATTR_VALUE },
+ { XML_NAMESPACE_TABLE, XML_OPERATOR, XML_TOK_CONDITION_ATTR_OPERATOR },
+ XML_TOKEN_MAP_END
+ };
+
+ pFilterConditionAttrTokenMap = new SvXMLTokenMap( aFilterConditionAttrTokenMap );
+ } // if( !pFilterConditionAttrTokenMap )
+
+ return *pFilterConditionAttrTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetSortElemTokenMap()
+{
+ if( !pSortElemTokenMap )
+ {
+ static SvXMLTokenMapEntry aSortTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_SORT_BY, XML_TOK_SORT_SORT_BY },
+ XML_TOKEN_MAP_END
+ };
+
+ pSortElemTokenMap = new SvXMLTokenMap( aSortTokenMap );
+ } // if( !pSortElemTokenMap )
+
+ return *pSortElemTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetSortAttrTokenMap()
+{
+ if( !pSortAttrTokenMap )
+ {
+ static SvXMLTokenMapEntry aSortAttrTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_BIND_STYLES_TO_CONTENT, XML_TOK_SORT_ATTR_BIND_STYLES_TO_CONTENT },
+ { XML_NAMESPACE_TABLE, XML_TARGET_RANGE_ADDRESS, XML_TOK_SORT_ATTR_TARGET_RANGE_ADDRESS },
+ { XML_NAMESPACE_TABLE, XML_CASE_SENSITIVE, XML_TOK_SORT_ATTR_CASE_SENSITIVE },
+ { XML_NAMESPACE_TABLE, XML_LANGUAGE, XML_TOK_SORT_ATTR_LANGUAGE },
+ { XML_NAMESPACE_TABLE, XML_COUNTRY, XML_TOK_SORT_ATTR_COUNTRY },
+ { XML_NAMESPACE_TABLE, XML_ALGORITHM, XML_TOK_SORT_ATTR_ALGORITHM },
+ XML_TOKEN_MAP_END
+ };
+
+ pSortAttrTokenMap = new SvXMLTokenMap( aSortAttrTokenMap );
+ } // if( !pSortAttrTokenMap )
+
+ return *pSortAttrTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetSortSortByAttrTokenMap()
+{
+ if( !pSortSortByAttrTokenMap )
+ {
+ static SvXMLTokenMapEntry aSortSortByAttrTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_FIELD_NUMBER, XML_TOK_SORT_BY_ATTR_FIELD_NUMBER },
+ { XML_NAMESPACE_TABLE, XML_DATA_TYPE, XML_TOK_SORT_BY_ATTR_DATA_TYPE },
+ { XML_NAMESPACE_TABLE, XML_ORDER, XML_TOK_SORT_BY_ATTR_ORDER },
+ XML_TOKEN_MAP_END
+ };
+
+ pSortSortByAttrTokenMap = new SvXMLTokenMap( aSortSortByAttrTokenMap );
+ } // if( !pSortSortByAttrTokenMap )
+
+ return *pSortSortByAttrTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetDatabaseRangeSubTotalRulesElemTokenMap()
+{
+ if( !pDatabaseRangeSubTotalRulesElemTokenMap )
+ {
+ static SvXMLTokenMapEntry aDatabaseRangeSubTotalRulesTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_SORT_GROUPS, XML_TOK_SUBTOTAL_RULES_SORT_GROUPS },
+ { XML_NAMESPACE_TABLE, XML_SUBTOTAL_RULE, XML_TOK_SUBTOTAL_RULES_SUBTOTAL_RULE },
+ XML_TOKEN_MAP_END
+ };
+
+ pDatabaseRangeSubTotalRulesElemTokenMap = new SvXMLTokenMap( aDatabaseRangeSubTotalRulesTokenMap );
+ } // if( !pDatabaseRangeSubTotalRulesElemTokenMap )
+
+ return *pDatabaseRangeSubTotalRulesElemTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetDatabaseRangeSubTotalRulesAttrTokenMap()
+{
+ if( !pDatabaseRangeSubTotalRulesAttrTokenMap )
+ {
+ static SvXMLTokenMapEntry aDatabaseRangeSubTotalRulesAttrTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_BIND_STYLES_TO_CONTENT, XML_TOK_SUBTOTAL_RULES_ATTR_BIND_STYLES_TO_CONTENT },
+ { XML_NAMESPACE_TABLE, XML_CASE_SENSITIVE, XML_TOK_SUBTOTAL_RULES_ATTR_CASE_SENSITIVE },
+ { XML_NAMESPACE_TABLE, XML_PAGE_BREAKS_ON_GROUP_CHANGE, XML_TOK_SUBTOTAL_RULES_ATTR_PAGE_BREAKS_ON_GROUP_CHANGE },
+ XML_TOKEN_MAP_END
+ };
+
+ pDatabaseRangeSubTotalRulesAttrTokenMap = new SvXMLTokenMap( aDatabaseRangeSubTotalRulesAttrTokenMap );
+ } // if( !pDatabaseRangeSubTotalRulesAttrTokenMap )
+
+ return *pDatabaseRangeSubTotalRulesAttrTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetSubTotalRulesSortGroupsAttrTokenMap()
+{
+ if( !pSubTotalRulesSortGroupsAttrTokenMap )
+ {
+ static SvXMLTokenMapEntry aSubTotalRulesSortGroupsAttrTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_DATA_TYPE, XML_TOK_SORT_GROUPS_ATTR_DATA_TYPE },
+ { XML_NAMESPACE_TABLE, XML_ORDER, XML_TOK_SORT_GROUPS_ATTR_ORDER },
+ XML_TOKEN_MAP_END
+ };
+
+ pSubTotalRulesSortGroupsAttrTokenMap = new SvXMLTokenMap( aSubTotalRulesSortGroupsAttrTokenMap );
+ } // if( !pSubTotalRulesSortGroupsAttrTokenMap )
+
+ return *pSubTotalRulesSortGroupsAttrTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetSubTotalRulesSubTotalRuleElemTokenMap()
+{
+ if( !pSubTotalRulesSubTotalRuleElemTokenMap )
+ {
+ static SvXMLTokenMapEntry aSubTotalRulesSubTotalRuleTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_SUBTOTAL_FIELD, XML_TOK_SUBTOTAL_RULE_SUBTOTAL_FIELD },
+ XML_TOKEN_MAP_END
+ };
+
+ pSubTotalRulesSubTotalRuleElemTokenMap = new SvXMLTokenMap( aSubTotalRulesSubTotalRuleTokenMap );
+ } // if( !pSubTotalRulesSubTotalRuleElemTokenMap )
+
+ return *pSubTotalRulesSubTotalRuleElemTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetSubTotalRulesSubTotalRuleAttrTokenMap()
+{
+ if( !pSubTotalRulesSubTotalRuleAttrTokenMap )
+ {
+ static SvXMLTokenMapEntry aSubTotalRulesSubTotalRuleAttrTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_GROUP_BY_FIELD_NUMBER, XML_TOK_SUBTOTAL_RULE_ATTR_GROUP_BY_FIELD_NUMBER },
+ XML_TOKEN_MAP_END
+ };
+
+ pSubTotalRulesSubTotalRuleAttrTokenMap = new SvXMLTokenMap( aSubTotalRulesSubTotalRuleAttrTokenMap );
+ } // if( !pSubTotalRulesSubTotalRuleAttrTokenMap )
+
+ return *pSubTotalRulesSubTotalRuleAttrTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetSubTotalRuleSubTotalFieldAttrTokenMap()
+{
+ if( !pSubTotalRuleSubTotalFieldAttrTokenMap )
+ {
+ static SvXMLTokenMapEntry aSubTotalRuleSubTotalFieldAttrTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_FIELD_NUMBER, XML_TOK_SUBTOTAL_FIELD_ATTR_FIELD_NUMBER },
+ { XML_NAMESPACE_TABLE, XML_FUNCTION, XML_TOK_SUBTOTAL_FIELD_ATTR_FUNCTION },
+ XML_TOKEN_MAP_END
+ };
+
+ pSubTotalRuleSubTotalFieldAttrTokenMap = new SvXMLTokenMap( aSubTotalRuleSubTotalFieldAttrTokenMap );
+ } // if( !pSubTotalRuleSubTotalFieldAttrTokenMap )
+
+ return *pSubTotalRuleSubTotalFieldAttrTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetDataPilotTablesElemTokenMap()
+{
+ if( !pDataPilotTablesElemTokenMap )
+ {
+ static SvXMLTokenMapEntry aDataPilotTablesElemTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_DATA_PILOT_TABLE, XML_TOK_DATA_PILOT_TABLE },
+ XML_TOKEN_MAP_END
+ };
+
+ pDataPilotTablesElemTokenMap = new SvXMLTokenMap( aDataPilotTablesElemTokenMap );
+ } // if( !pDataPilotTablesElemTokenMap )
+
+ return *pDataPilotTablesElemTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetDataPilotTableAttrTokenMap()
+{
+ if( !pDataPilotTableAttrTokenMap )
+ {
+ static SvXMLTokenMapEntry aDataPilotTableAttrTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_NAME, XML_TOK_DATA_PILOT_TABLE_ATTR_NAME },
+ { XML_NAMESPACE_TABLE, XML_APPLICATION_DATA, XML_TOK_DATA_PILOT_TABLE_ATTR_APPLICATION_DATA },
+ { XML_NAMESPACE_TABLE, XML_GRAND_TOTAL, XML_TOK_DATA_PILOT_TABLE_ATTR_GRAND_TOTAL },
+ { XML_NAMESPACE_TABLE, XML_IGNORE_EMPTY_ROWS, XML_TOK_DATA_PILOT_TABLE_ATTR_IGNORE_EMPTY_ROWS },
+ { XML_NAMESPACE_TABLE, XML_IDENTIFY_CATEGORIES, XML_TOK_DATA_PILOT_TABLE_ATTR_IDENTIFY_CATEGORIES },
+ { XML_NAMESPACE_TABLE, XML_TARGET_RANGE_ADDRESS, XML_TOK_DATA_PILOT_TABLE_ATTR_TARGET_RANGE_ADDRESS },
+ { XML_NAMESPACE_TABLE, XML_BUTTONS, XML_TOK_DATA_PILOT_TABLE_ATTR_BUTTONS },
+ { XML_NAMESPACE_TABLE, XML_SHOW_FILTER_BUTTON, XML_TOK_DATA_PILOT_TABLE_ATTR_SHOW_FILTER_BUTTON },
+ { XML_NAMESPACE_TABLE, XML_DRILL_DOWN_ON_DOUBLE_CLICK, XML_TOK_DATA_PILOT_TABLE_ATTR_DRILL_DOWN },
+ { XML_NAMESPACE_TABLE, XML_HEADER_GRID_LAYOUT, XML_TOK_DATA_PILOT_TABLE_ATTR_HEADER_GRID_LAYOUT },
+ XML_TOKEN_MAP_END
+ };
+
+ pDataPilotTableAttrTokenMap = new SvXMLTokenMap( aDataPilotTableAttrTokenMap );
+ } // if( !pDataPilotTableAttrTokenMap )
+
+ return *pDataPilotTableAttrTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetDataPilotTableElemTokenMap()
+{
+ if( !pDataPilotTableElemTokenMap )
+ {
+ static SvXMLTokenMapEntry aDataPilotTableElemTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_DATABASE_SOURCE_SQL, XML_TOK_DATA_PILOT_TABLE_ELEM_SOURCE_SQL },
+ { XML_NAMESPACE_TABLE, XML_DATABASE_SOURCE_TABLE, XML_TOK_DATA_PILOT_TABLE_ELEM_SOURCE_TABLE },
+ { XML_NAMESPACE_TABLE, XML_DATA_PILOT_GRAND_TOTAL, XML_TOK_DATA_PILOT_TABLE_ELEM_GRAND_TOTAL },
+ { XML_NAMESPACE_TABLE, XML_DATABASE_SOURCE_QUERY, XML_TOK_DATA_PILOT_TABLE_ELEM_SOURCE_QUERY },
+ { XML_NAMESPACE_TABLE, XML_SOURCE_SERVICE, XML_TOK_DATA_PILOT_TABLE_ELEM_SOURCE_SERVICE },
+ { XML_NAMESPACE_TABLE, XML_SOURCE_CELL_RANGE, XML_TOK_DATA_PILOT_TABLE_ELEM_SOURCE_CELL_RANGE },
+ { XML_NAMESPACE_TABLE, XML_DATA_PILOT_FIELD, XML_TOK_DATA_PILOT_TABLE_ELEM_DATA_PILOT_FIELD },
+ XML_TOKEN_MAP_END
+ };
+
+ pDataPilotTableElemTokenMap = new SvXMLTokenMap( aDataPilotTableElemTokenMap );
+ } // if( !pDataPilotTableElemTokenMap )
+
+ return *pDataPilotTableElemTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetDataPilotTableSourceServiceAttrTokenMap()
+{
+ if( !pDataPilotTableSourceServiceAttrTokenMap )
+ {
+ static SvXMLTokenMapEntry aDataPilotTableSourceServiceAttrTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_NAME, XML_TOK_SOURCE_SERVICE_ATTR_NAME },
+ { XML_NAMESPACE_TABLE, XML_SOURCE_NAME, XML_TOK_SOURCE_SERVICE_ATTR_SOURCE_NAME },
+ { XML_NAMESPACE_TABLE, XML_OBJECT_NAME, XML_TOK_SOURCE_SERVICE_ATTR_OBJECT_NAME },
+ { XML_NAMESPACE_TABLE, XML_USER_NAME, XML_TOK_SOURCE_SERVICE_ATTR_USER_NAME },
+ { XML_NAMESPACE_TABLE, XML_PASSWORD, XML_TOK_SOURCE_SERVICE_ATTR_PASSWORD },
+ XML_TOKEN_MAP_END
+ };
+
+ pDataPilotTableSourceServiceAttrTokenMap = new SvXMLTokenMap( aDataPilotTableSourceServiceAttrTokenMap );
+ } // if( !pDataPilotTableSourceServiceAttrTokenMap )
+
+ return *pDataPilotTableSourceServiceAttrTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetDataPilotGrandTotalAttrTokenMap()
+{
+ if (!pDataPilotGrandTotalAttrTokenMap)
+ {
+ static SvXMLTokenMapEntry aDataPilotGrandTotalAttrTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_DISPLAY, XML_TOK_DATA_PILOT_GRAND_TOTAL_ATTR_DISPLAY },
+ { XML_NAMESPACE_TABLE, XML_ORIENTATION, XML_TOK_DATA_PILOT_GRAND_TOTAL_ATTR_ORIENTATION },
+ { XML_NAMESPACE_TABLE, XML_DISPLAY_NAME, XML_TOK_DATA_PILOT_GRAND_TOTAL_ATTR_DISPLAY_NAME },
+ { XML_NAMESPACE_TABLE_EXT, XML_DISPLAY_NAME, XML_TOK_DATA_PILOT_GRAND_TOTAL_ATTR_DISPLAY_NAME_EXT },
+ XML_TOKEN_MAP_END
+ };
+
+ pDataPilotGrandTotalAttrTokenMap = new SvXMLTokenMap( aDataPilotGrandTotalAttrTokenMap );
+ }
+
+ return *pDataPilotGrandTotalAttrTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetDataPilotTableSourceCellRangeAttrTokenMap()
+{
+ if( !pDataPilotTableSourceCellRangeAttrTokenMap )
+ {
+ static SvXMLTokenMapEntry aDataPilotTableSourceCellRangeAttrTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_CELL_RANGE_ADDRESS, XML_TOK_SOURCE_CELL_RANGE_ATTR_CELL_RANGE_ADDRESS },
+ { XML_NAMESPACE_TABLE, XML_NAME, XML_TOK_SOURCE_CELL_RANGE_ATTR_NAME },
+ XML_TOKEN_MAP_END
+ };
+
+ pDataPilotTableSourceCellRangeAttrTokenMap = new SvXMLTokenMap( aDataPilotTableSourceCellRangeAttrTokenMap );
+ } // if( !pDataPilotTableSourceCellRangeAttrTokenMap )
+
+ return *pDataPilotTableSourceCellRangeAttrTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetDataPilotTableSourceCellRangeElemTokenMap()
+{
+ if( !pDataPilotTableSourceCellRangeElemTokenMap )
+ {
+ static SvXMLTokenMapEntry aDataPilotTableSourceCellRangeElemTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_FILTER, XML_TOK_SOURCE_CELL_RANGE_ELEM_FILTER},
+ XML_TOKEN_MAP_END
+ };
+
+ pDataPilotTableSourceCellRangeElemTokenMap = new SvXMLTokenMap( aDataPilotTableSourceCellRangeElemTokenMap );
+ } // if( !pDataPilotTableSourceCellRangeElemTokenMap )
+
+ return *pDataPilotTableSourceCellRangeElemTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetDataPilotFieldAttrTokenMap()
+{
+ if( !pDataPilotFieldAttrTokenMap )
+ {
+ static SvXMLTokenMapEntry aDataPilotFieldAttrTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_SOURCE_FIELD_NAME, XML_TOK_DATA_PILOT_FIELD_ATTR_SOURCE_FIELD_NAME },
+ { XML_NAMESPACE_TABLE, XML_DISPLAY_NAME, XML_TOK_DATA_PILOT_FIELD_ATTR_DISPLAY_NAME },
+ { XML_NAMESPACE_TABLE_EXT, XML_DISPLAY_NAME, XML_TOK_DATA_PILOT_FIELD_ATTR_DISPLAY_NAME_EXT },
+ { XML_NAMESPACE_TABLE, XML_IS_DATA_LAYOUT_FIELD, XML_TOK_DATA_PILOT_FIELD_ATTR_IS_DATA_LAYOUT_FIELD },
+ { XML_NAMESPACE_TABLE, XML_FUNCTION, XML_TOK_DATA_PILOT_FIELD_ATTR_FUNCTION },
+ { XML_NAMESPACE_TABLE, XML_ORIENTATION, XML_TOK_DATA_PILOT_FIELD_ATTR_ORIENTATION },
+ { XML_NAMESPACE_TABLE, XML_SELECTED_PAGE, XML_TOK_DATA_PILOT_FIELD_ATTR_SELECTED_PAGE },
+ { XML_NAMESPACE_TABLE, XML_USED_HIERARCHY, XML_TOK_DATA_PILOT_FIELD_ATTR_USED_HIERARCHY },
+ XML_TOKEN_MAP_END
+ };
+
+ pDataPilotFieldAttrTokenMap = new SvXMLTokenMap( aDataPilotFieldAttrTokenMap );
+ } // if( !pDataPilotFieldAttrTokenMap )
+
+ return *pDataPilotFieldAttrTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetDataPilotFieldElemTokenMap()
+{
+ if( !pDataPilotFieldElemTokenMap )
+ {
+ static SvXMLTokenMapEntry aDataPilotFieldElemTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_DATA_PILOT_LEVEL, XML_TOK_DATA_PILOT_FIELD_ELEM_DATA_PILOT_LEVEL },
+ { XML_NAMESPACE_TABLE, XML_DATA_PILOT_FIELD_REFERENCE, XML_TOK_DATA_PILOT_FIELD_ELEM_DATA_PILOT_REFERENCE },
+ { XML_NAMESPACE_TABLE, XML_DATA_PILOT_GROUPS, XML_TOK_DATA_PILOT_FIELD_ELEM_DATA_PILOT_GROUPS },
+ XML_TOKEN_MAP_END
+ };
+
+ pDataPilotFieldElemTokenMap = new SvXMLTokenMap( aDataPilotFieldElemTokenMap );
+ } // if( !pDataPilotFieldElemTokenMap )
+
+ return *pDataPilotFieldElemTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetDataPilotLevelAttrTokenMap()
+{
+ if( !pDataPilotLevelAttrTokenMap )
+ {
+ static SvXMLTokenMapEntry aDataPilotLevelAttrTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_SHOW_EMPTY, XML_TOK_DATA_PILOT_LEVEL_ATTR_SHOW_EMPTY },
+ XML_TOKEN_MAP_END
+ };
+
+ pDataPilotLevelAttrTokenMap = new SvXMLTokenMap( aDataPilotLevelAttrTokenMap );
+ } // if( !pDataPilotLevelAttrTokenMap )
+
+ return *pDataPilotLevelAttrTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetDataPilotLevelElemTokenMap()
+{
+ if( !pDataPilotLevelElemTokenMap )
+ {
+ static SvXMLTokenMapEntry aDataPilotLevelElemTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_DATA_PILOT_SUBTOTALS, XML_TOK_DATA_PILOT_LEVEL_ELEM_DATA_PILOT_SUBTOTALS },
+ { XML_NAMESPACE_TABLE, XML_DATA_PILOT_MEMBERS, XML_TOK_DATA_PILOT_LEVEL_ELEM_DATA_PILOT_MEMBERS },
+ { XML_NAMESPACE_TABLE, XML_DATA_PILOT_DISPLAY_INFO, XML_TOK_DATA_PILOT_FIELD_ELEM_DATA_PILOT_DISPLAY_INFO },
+ { XML_NAMESPACE_TABLE, XML_DATA_PILOT_SORT_INFO, XML_TOK_DATA_PILOT_FIELD_ELEM_DATA_PILOT_SORT_INFO },
+ { XML_NAMESPACE_TABLE, XML_DATA_PILOT_LAYOUT_INFO, XML_TOK_DATA_PILOT_FIELD_ELEM_DATA_PILOT_LAYOUT_INFO },
+ XML_TOKEN_MAP_END
+ };
+
+ pDataPilotLevelElemTokenMap = new SvXMLTokenMap( aDataPilotLevelElemTokenMap );
+ } // if( !pDataPilotLevelElemTokenMap )
+
+ return *pDataPilotLevelElemTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetDataPilotSubTotalsElemTokenMap()
+{
+ if( !pDataPilotSubTotalsElemTokenMap )
+ {
+ static SvXMLTokenMapEntry aDataPilotSubTotalsElemTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_DATA_PILOT_SUBTOTAL, XML_TOK_DATA_PILOT_SUBTOTALS_ELEM_DATA_PILOT_SUBTOTAL },
+ XML_TOKEN_MAP_END
+ };
+
+ pDataPilotSubTotalsElemTokenMap = new SvXMLTokenMap( aDataPilotSubTotalsElemTokenMap );
+ } // if( !pDataPilotSubTotalsElemTokenMap )
+
+ return *pDataPilotSubTotalsElemTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetDataPilotSubTotalAttrTokenMap()
+{
+ if( !pDataPilotSubTotalAttrTokenMap )
+ {
+ static SvXMLTokenMapEntry aDataPilotSubTotalAttrTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_FUNCTION, XML_TOK_DATA_PILOT_SUBTOTAL_ATTR_FUNCTION },
+ { XML_NAMESPACE_TABLE, XML_DISPLAY_NAME, XML_TOK_DATA_PILOT_SUBTOTAL_ATTR_DISPLAY_NAME },
+ { XML_NAMESPACE_TABLE_EXT, XML_DISPLAY_NAME, XML_TOK_DATA_PILOT_SUBTOTAL_ATTR_DISPLAY_NAME_EXT },
+ XML_TOKEN_MAP_END
+ };
+
+ pDataPilotSubTotalAttrTokenMap = new SvXMLTokenMap( aDataPilotSubTotalAttrTokenMap );
+ } // if( !pDataPilotSubTotalAttrTokenMap )
+
+ return *pDataPilotSubTotalAttrTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetDataPilotMembersElemTokenMap()
+{
+ if( !pDataPilotMembersElemTokenMap )
+ {
+ static SvXMLTokenMapEntry aDataPilotMembersElemTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_DATA_PILOT_MEMBER, XML_TOK_DATA_PILOT_MEMBERS_ELEM_DATA_PILOT_MEMBER },
+ XML_TOKEN_MAP_END
+ };
+
+ pDataPilotMembersElemTokenMap = new SvXMLTokenMap( aDataPilotMembersElemTokenMap );
+ } // if( !pDataPilotMembersElemTokenMap )
+
+ return *pDataPilotMembersElemTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetDataPilotMemberAttrTokenMap()
+{
+ if( !pDataPilotMemberAttrTokenMap )
+ {
+ static SvXMLTokenMapEntry aDataPilotMemberAttrTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_NAME, XML_TOK_DATA_PILOT_MEMBER_ATTR_NAME },
+ { XML_NAMESPACE_TABLE, XML_DISPLAY_NAME, XML_TOK_DATA_PILOT_MEMBER_ATTR_DISPLAY_NAME },
+ { XML_NAMESPACE_TABLE_EXT, XML_DISPLAY_NAME, XML_TOK_DATA_PILOT_MEMBER_ATTR_DISPLAY_NAME_EXT },
+ { XML_NAMESPACE_TABLE, XML_DISPLAY, XML_TOK_DATA_PILOT_MEMBER_ATTR_DISPLAY },
+ { XML_NAMESPACE_TABLE, XML_SHOW_DETAILS, XML_TOK_DATA_PILOT_MEMBER_ATTR_SHOW_DETAILS },
+ XML_TOKEN_MAP_END
+ };
+
+ pDataPilotMemberAttrTokenMap = new SvXMLTokenMap( aDataPilotMemberAttrTokenMap );
+ } // if( !pDataPilotMemberAttrTokenMap )
+
+ return *pDataPilotMemberAttrTokenMap;
+}
+
+const SvXMLTokenMap& ScXMLImport::GetConsolidationAttrTokenMap()
+{
+ if( !pConsolidationAttrTokenMap )
+ {
+ static SvXMLTokenMapEntry aConsolidationAttrTokenMap[] =
+ {
+ { XML_NAMESPACE_TABLE, XML_FUNCTION, XML_TOK_CONSOLIDATION_ATTR_FUNCTION },
+ { XML_NAMESPACE_TABLE, XML_SOURCE_CELL_RANGE_ADDRESSES, XML_TOK_CONSOLIDATION_ATTR_SOURCE_RANGES },
+ { XML_NAMESPACE_TABLE, XML_TARGET_CELL_ADDRESS, XML_TOK_CONSOLIDATION_ATTR_TARGET_ADDRESS },
+ { XML_NAMESPACE_TABLE, XML_USE_LABEL, XML_TOK_CONSOLIDATION_ATTR_USE_LABEL },
+ { XML_NAMESPACE_TABLE, XML_LINK_TO_SOURCE_DATA, XML_TOK_CONSOLIDATION_ATTR_LINK_TO_SOURCE },
+ XML_TOKEN_MAP_END
+ };
+
+ pConsolidationAttrTokenMap = new SvXMLTokenMap( aConsolidationAttrTokenMap );
+ } // if( !pConsolidationAttrTokenMap )
+
+ return *pConsolidationAttrTokenMap;
+}
+
+
+SvXMLImportContext *ScXMLImport::CreateContext( sal_uInt16 nPrefix,
+ const OUString& rLocalName,
+ const uno::Reference<xml::sax::XAttributeList>& xAttrList )
+{
+ SvXMLImportContext *pContext = 0;
+
+ if( (XML_NAMESPACE_OFFICE == nPrefix) &&
+ ( IsXMLToken(rLocalName, XML_DOCUMENT_STYLES) ||
+ IsXMLToken(rLocalName, XML_DOCUMENT_CONTENT) ||
+ IsXMLToken(rLocalName, XML_DOCUMENT_SETTINGS) )) {
+ pContext = new ScXMLDocContext_Impl( *this, nPrefix, rLocalName,
+ xAttrList );
+ } else if ( (XML_NAMESPACE_OFFICE == nPrefix) &&
+ ( IsXMLToken(rLocalName, XML_DOCUMENT_META)) ) {
+ pContext = CreateMetaContext(rLocalName);
+ } else if ( (XML_NAMESPACE_OFFICE == nPrefix) &&
+ ( IsXMLToken(rLocalName, XML_DOCUMENT)) ) {
+ uno::Reference<xml::sax::XDocumentHandler> xDocBuilder(
+ mxServiceFactory->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.xml.dom.SAXDocumentBuilder"))),
+ uno::UNO_QUERY_THROW);
+ uno::Reference<document::XDocumentPropertiesSupplier> xDPS(
+ GetModel(), uno::UNO_QUERY_THROW);
+ // flat OpenDocument file format
+ pContext = new ScXMLFlatDocContext_Impl( *this, nPrefix, rLocalName,
+ xAttrList, xDPS->getDocumentProperties(), xDocBuilder);
+ }
+ else
+ pContext = SvXMLImport::CreateContext( nPrefix, rLocalName, xAttrList );
+
+ return pContext;
+}
+
+// #110680#
+ScXMLImport::ScXMLImport(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xServiceFactory,
+ const sal_uInt16 nImportFlag)
+: SvXMLImport( xServiceFactory, nImportFlag ),
+ pDoc( NULL ),
+ pChangeTrackingImportHelper(NULL),
+ pStylesImportHelper(NULL),
+ sNumberFormat(RTL_CONSTASCII_USTRINGPARAM(SC_UNONAME_NUMFMT)),
+ sLocale(RTL_CONSTASCII_USTRINGPARAM(SC_LOCALE)),
+ sCellStyle(RTL_CONSTASCII_USTRINGPARAM(SC_UNONAME_CELLSTYL)),
+ sStandardFormat(RTL_CONSTASCII_USTRINGPARAM(SC_STANDARDFORMAT)),
+ sType(RTL_CONSTASCII_USTRINGPARAM(SC_UNONAME_TYPE)),
+// pScAutoStylePool(new SvXMLAutoStylePoolP),
+// pParaItemMapper( 0 ),
+// pI18NMap( new SvI18NMap ),
+ pDocElemTokenMap( 0 ),
+ pStylesElemTokenMap( 0 ),
+ pStylesAttrTokenMap( 0 ),
+ pStyleElemTokenMap( 0 ),
+ pBodyElemTokenMap( 0 ),
+ pContentValidationsElemTokenMap( 0 ),
+ pContentValidationElemTokenMap( 0 ),
+ pContentValidationAttrTokenMap( 0 ),
+ pContentValidationMessageElemTokenMap( 0 ),
+ pContentValidationHelpMessageAttrTokenMap( 0 ),
+ pContentValidationErrorMessageAttrTokenMap( 0 ),
+ pContentValidationErrorMacroAttrTokenMap( 0 ),
+ pLabelRangesElemTokenMap( 0 ),
+ pLabelRangeAttrTokenMap( 0 ),
+ pTableElemTokenMap( 0 ),
+ pTableProtectionElemTokenMap(NULL),
+ pTableRowsElemTokenMap( 0 ),
+ pTableColsElemTokenMap( 0 ),
+ pTableScenarioAttrTokenMap( 0 ),
+ pTableAttrTokenMap( 0 ),
+ pTableColAttrTokenMap( 0 ),
+ pTableRowElemTokenMap( 0 ),
+ pTableRowAttrTokenMap( 0 ),
+ pTableRowCellElemTokenMap( 0 ),
+ pTableRowCellAttrTokenMap( 0 ),
+ pTableAnnotationAttrTokenMap( 0 ),
+ pDetectiveElemTokenMap( 0 ),
+ pDetectiveHighlightedAttrTokenMap( 0 ),
+ pDetectiveOperationAttrTokenMap( 0 ),
+ pTableCellRangeSourceAttrTokenMap( 0 ),
+ pNamedExpressionsElemTokenMap( 0 ),
+ pNamedRangeAttrTokenMap( 0 ),
+ pNamedExpressionAttrTokenMap( 0 ),
+ pDatabaseRangesElemTokenMap( 0 ),
+ pDatabaseRangeElemTokenMap( 0 ),
+ pDatabaseRangeAttrTokenMap( 0 ),
+ pDatabaseRangeSourceSQLAttrTokenMap( 0 ),
+ pDatabaseRangeSourceTableAttrTokenMap( 0 ),
+ pDatabaseRangeSourceQueryAttrTokenMap( 0 ),
+ pFilterElemTokenMap( 0 ),
+ pFilterAttrTokenMap( 0 ),
+ pFilterConditionAttrTokenMap( 0 ),
+ pSortElemTokenMap( 0 ),
+ pSortAttrTokenMap( 0 ),
+ pSortSortByAttrTokenMap( 0 ),
+ pDatabaseRangeSubTotalRulesElemTokenMap( 0 ),
+ pDatabaseRangeSubTotalRulesAttrTokenMap( 0 ),
+ pSubTotalRulesSortGroupsAttrTokenMap( 0 ),
+ pSubTotalRulesSubTotalRuleElemTokenMap( 0 ),
+ pSubTotalRulesSubTotalRuleAttrTokenMap( 0 ),
+ pSubTotalRuleSubTotalFieldAttrTokenMap( 0 ),
+ pDataPilotTablesElemTokenMap( 0 ),
+ pDataPilotTableAttrTokenMap( 0 ),
+ pDataPilotTableElemTokenMap( 0 ),
+ pDataPilotTableSourceServiceAttrTokenMap( 0 ),
+ pDataPilotGrandTotalAttrTokenMap(NULL),
+ pDataPilotTableSourceCellRangeElemTokenMap( 0 ),
+ pDataPilotTableSourceCellRangeAttrTokenMap( 0 ),
+ pDataPilotFieldAttrTokenMap( 0 ),
+ pDataPilotFieldElemTokenMap( 0 ),
+ pDataPilotLevelAttrTokenMap( 0 ),
+ pDataPilotLevelElemTokenMap( 0 ),
+ pDataPilotSubTotalsElemTokenMap( 0 ),
+ pDataPilotSubTotalAttrTokenMap( 0 ),
+ pDataPilotMembersElemTokenMap( 0 ),
+ pDataPilotMemberAttrTokenMap( 0 ),
+ pConsolidationAttrTokenMap( 0 ),
+ aTables(*this),
+ pMyNamedExpressions(NULL),
+ pMyLabelRanges(NULL),
+ pValidations(NULL),
+ pDetectiveOpArray(NULL),
+ pSolarMutexGuard(NULL),
+ pNumberFormatAttributesExportHelper(NULL),
+ pStyleNumberFormats(NULL),
+ sPrevStyleName(),
+ sPrevCurrency(),
+ nSolarMutexLocked(0),
+ nProgressCount(0),
+ nStyleFamilyMask( 0 ),
+ nPrevCellType(0),
+ bLoadDoc( sal_True ),
+ bRemoveLastChar(false),
+ bNullDateSetted(false),
+ bSelfImportingXMLSet(false),
+ bLatinDefaultStyle(false),
+ bFromWrapper(false)
+{
+ pStylesImportHelper = new ScMyStylesImportHelper(*this);
+
+ xScPropHdlFactory = new XMLScPropHdlFactory;
+ xCellStylesPropertySetMapper = new XMLPropertySetMapper((XMLPropertyMapEntry*)aXMLScCellStylesProperties, xScPropHdlFactory);
+ xColumnStylesPropertySetMapper = new XMLPropertySetMapper((XMLPropertyMapEntry*)aXMLScColumnStylesProperties, xScPropHdlFactory);
+ xRowStylesPropertySetMapper = new XMLPropertySetMapper((XMLPropertyMapEntry*)aXMLScRowStylesImportProperties, xScPropHdlFactory);
+ xTableStylesPropertySetMapper = new XMLPropertySetMapper((XMLPropertyMapEntry*)aXMLScTableStylesImportProperties, xScPropHdlFactory);
+
+ // #i66550# needed for 'presentation:event-listener' element for URLs in shapes
+ GetNamespaceMap().Add(
+ GetXMLToken( XML_NP_PRESENTATION ),
+ GetXMLToken( XML_N_PRESENTATION ),
+ XML_NAMESPACE_PRESENTATION );
+
+ // initialize cell type map.
+ const struct { XMLTokenEnum _token; sal_Int16 _type; } aCellTypePairs[] =
+ {
+ { XML_FLOAT, util::NumberFormat::NUMBER },
+ { XML_STRING, util::NumberFormat::TEXT },
+ { XML_TIME, util::NumberFormat::TIME },
+ { XML_DATE, util::NumberFormat::DATETIME },
+ { XML_PERCENTAGE, util::NumberFormat::PERCENT },
+ { XML_CURRENCY, util::NumberFormat::CURRENCY },
+ { XML_BOOLEAN, util::NumberFormat::LOGICAL }
+ };
+ size_t n = SAL_N_ELEMENTS(aCellTypePairs);
+ for (size_t i = 0; i < n; ++i)
+ {
+ aCellTypeMap.insert(
+ CellTypeMap::value_type(
+ GetXMLToken(aCellTypePairs[i]._token), aCellTypePairs[i]._type));
+ }
+}
+
+ScXMLImport::~ScXMLImport() throw()
+{
+ // delete pI18NMap;
+ delete pDocElemTokenMap;
+ delete pStylesElemTokenMap;
+ delete pStylesAttrTokenMap;
+ delete pStyleElemTokenMap;
+ delete pBodyElemTokenMap;
+ delete pContentValidationsElemTokenMap;
+ delete pContentValidationElemTokenMap;
+ delete pContentValidationAttrTokenMap;
+ delete pContentValidationMessageElemTokenMap;
+ delete pContentValidationHelpMessageAttrTokenMap;
+ delete pContentValidationErrorMessageAttrTokenMap;
+ delete pContentValidationErrorMacroAttrTokenMap;
+ delete pLabelRangesElemTokenMap;
+ delete pLabelRangeAttrTokenMap;
+ delete pTableElemTokenMap;
+ delete pTableProtectionElemTokenMap;
+ delete pTableRowsElemTokenMap;
+ delete pTableColsElemTokenMap;
+ delete pTableAttrTokenMap;
+ delete pTableScenarioAttrTokenMap;
+ delete pTableColAttrTokenMap;
+ delete pTableRowElemTokenMap;
+ delete pTableRowAttrTokenMap;
+ delete pTableRowCellElemTokenMap;
+ delete pTableRowCellAttrTokenMap;
+ delete pTableAnnotationAttrTokenMap;
+ delete pDetectiveElemTokenMap;
+ delete pDetectiveHighlightedAttrTokenMap;
+ delete pDetectiveOperationAttrTokenMap;
+ delete pTableCellRangeSourceAttrTokenMap;
+ delete pNamedExpressionsElemTokenMap;
+ delete pNamedRangeAttrTokenMap;
+ delete pNamedExpressionAttrTokenMap;
+ delete pDatabaseRangesElemTokenMap;
+ delete pDatabaseRangeElemTokenMap;
+ delete pDatabaseRangeAttrTokenMap;
+ delete pDatabaseRangeSourceSQLAttrTokenMap;
+ delete pDatabaseRangeSourceTableAttrTokenMap;
+ delete pDatabaseRangeSourceQueryAttrTokenMap;
+ delete pFilterElemTokenMap;
+ delete pFilterAttrTokenMap;
+ delete pFilterConditionAttrTokenMap;
+ delete pSortElemTokenMap;
+ delete pSortAttrTokenMap;
+ delete pSortSortByAttrTokenMap;
+ delete pDatabaseRangeSubTotalRulesElemTokenMap;
+ delete pDatabaseRangeSubTotalRulesAttrTokenMap;
+ delete pSubTotalRulesSortGroupsAttrTokenMap;
+ delete pSubTotalRulesSubTotalRuleElemTokenMap;
+ delete pSubTotalRulesSubTotalRuleAttrTokenMap;
+ delete pSubTotalRuleSubTotalFieldAttrTokenMap;
+ delete pDataPilotTablesElemTokenMap;
+ delete pDataPilotTableAttrTokenMap;
+ delete pDataPilotTableElemTokenMap;
+ delete pDataPilotTableSourceServiceAttrTokenMap;
+ delete pDataPilotTableSourceCellRangeAttrTokenMap;
+ delete pDataPilotTableSourceCellRangeElemTokenMap;
+ delete pDataPilotFieldAttrTokenMap;
+ delete pDataPilotFieldElemTokenMap;
+ delete pDataPilotLevelAttrTokenMap;
+ delete pDataPilotLevelElemTokenMap;
+ delete pDataPilotSubTotalsElemTokenMap;
+ delete pDataPilotSubTotalAttrTokenMap;
+ delete pDataPilotMembersElemTokenMap;
+ delete pDataPilotMemberAttrTokenMap;
+ delete pConsolidationAttrTokenMap;
+
+ // if (pScAutoStylePool)
+ // delete pScAutoStylePool;
+ if (pChangeTrackingImportHelper)
+ delete pChangeTrackingImportHelper;
+ if (pNumberFormatAttributesExportHelper)
+ delete pNumberFormatAttributesExportHelper;
+ if (pStyleNumberFormats)
+ delete pStyleNumberFormats;
+ if (pStylesImportHelper)
+ delete pStylesImportHelper;
+
+ if (pSolarMutexGuard)
+ delete pSolarMutexGuard;
+
+ if (pMyNamedExpressions)
+ delete pMyNamedExpressions;
+ if (pMyLabelRanges)
+ delete pMyLabelRanges;
+ if (pValidations)
+ delete pValidations;
+ if (pDetectiveOpArray)
+ delete pDetectiveOpArray;
+}
+
+// ---------------------------------------------------------------------
+
+SvXMLImportContext *ScXMLImport::CreateFontDeclsContext(const sal_uInt16 nPrefix, const ::rtl::OUString& rLocalName,
+ const uno::Reference<xml::sax::XAttributeList>& xAttrList)
+{
+ XMLFontStylesContext *pFSContext = new XMLFontStylesContext(
+ *this, nPrefix, rLocalName, xAttrList, gsl_getSystemTextEncoding());
+ SetFontDecls(pFSContext);
+ SvXMLImportContext* pContext = pFSContext;
+ return pContext;
+}
+
+SvXMLImportContext *ScXMLImport::CreateStylesContext(const ::rtl::OUString& rLocalName,
+ const uno::Reference<xml::sax::XAttributeList>& xAttrList, sal_Bool bIsAutoStyle )
+{
+ SvXMLImportContext* pContext = new XMLTableStylesContext(
+ *this, XML_NAMESPACE_OFFICE, rLocalName, xAttrList, bIsAutoStyle);
+
+ if (bIsAutoStyle)
+ SetAutoStyles((SvXMLStylesContext*)pContext);
+ else
+ SetStyles((SvXMLStylesContext*)pContext);
+
+ return pContext;
+}
+
+SvXMLImportContext *ScXMLImport::CreateBodyContext(const ::rtl::OUString& rLocalName,
+ const uno::Reference<xml::sax::XAttributeList>& xAttrList)
+{
+ return new ScXMLBodyContext(*this, XML_NAMESPACE_OFFICE, rLocalName, xAttrList);
+}
+
+SvXMLImportContext *ScXMLImport::CreateMetaContext(
+ const OUString& rLocalName )
+{
+ SvXMLImportContext* pContext = NULL;
+
+ if( !IsStylesOnlyMode() && (getImportFlags() & IMPORT_META))
+ {
+ uno::Reference<xml::sax::XDocumentHandler> xDocBuilder(
+ mxServiceFactory->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.xml.dom.SAXDocumentBuilder"))),
+ uno::UNO_QUERY_THROW);
+ uno::Reference<document::XDocumentPropertiesSupplier> xDPS(
+ GetModel(), uno::UNO_QUERY_THROW);
+ pContext = new SvXMLMetaDocumentContext(*this,
+ XML_NAMESPACE_OFFICE, rLocalName,
+ xDPS->getDocumentProperties(), xDocBuilder);
+ }
+
+ if( !pContext )
+ pContext = new SvXMLImportContext( *this,
+ XML_NAMESPACE_OFFICE, rLocalName );
+
+ return pContext;
+}
+
+SvXMLImportContext *ScXMLImport::CreateScriptContext(
+ const OUString& rLocalName )
+{
+ SvXMLImportContext* pContext = NULL;
+
+ if( !(IsStylesOnlyMode()) )
+ {
+ pContext = new XMLScriptContext( *this,
+ XML_NAMESPACE_OFFICE, rLocalName,
+ GetModel() );
+ }
+
+ if( !pContext )
+ pContext = new SvXMLImportContext( *this, XML_NAMESPACE_OFFICE,
+ rLocalName );
+
+ return pContext;
+}
+
+void ScXMLImport::SetStatistics(
+ const uno::Sequence<beans::NamedValue> & i_rStats)
+{
+ static const char* s_stats[] =
+ { "TableCount", "CellCount", "ObjectCount", 0 };
+
+ SvXMLImport::SetStatistics(i_rStats);
+
+ sal_uInt32 nCount(0);
+ for (sal_Int32 i = 0; i < i_rStats.getLength(); ++i) {
+ for (const char** pStat = s_stats; *pStat != 0; ++pStat) {
+ if (i_rStats[i].Name.equalsAscii(*pStat)) {
+ sal_Int32 val = 0;
+ if (i_rStats[i].Value >>= val) {
+ nCount += val;
+ } else {
+ OSL_FAIL("ScXMLImport::SetStatistics: invalid entry");
+ }
+ }
+ }
+ }
+
+ if (nCount)
+ {
+ GetProgressBarHelper()->SetReference(nCount);
+ GetProgressBarHelper()->SetValue(0);
+ }
+}
+
+sal_Int16 ScXMLImport::GetCellType(const OUString& rStrValue) const
+{
+ CellTypeMap::const_iterator itr = aCellTypeMap.find(rStrValue);
+ if (itr != aCellTypeMap.end())
+ return itr->second;
+
+ return util::NumberFormat::UNDEFINED;
+}
+
+XMLShapeImportHelper* ScXMLImport::CreateShapeImport()
+{
+ return new XMLTableShapeImportHelper(*this);
+}
+
+sal_Bool ScXMLImport::GetValidation(const rtl::OUString& sName, ScMyImportValidation& aValidation)
+{
+ if (pValidations)
+ {
+ sal_Bool bFound(false);
+ ScMyImportValidations::iterator aItr(pValidations->begin());
+ ScMyImportValidations::iterator aEndItr(pValidations->end());
+ while(aItr != aEndItr && !bFound)
+ {
+ if (aItr->sName == sName)
+ {
+ // source position must be set as string,
+ // so sBaseCellAddress no longer has to be converted here
+
+ bFound = sal_True;
+ }
+ else
+ ++aItr;
+ }
+ if (bFound)
+ aValidation = *aItr;
+ return bFound;
+ }
+ return false;
+}
+
+void ScXMLImport::AddNamedExpression(SCTAB nTab, ScMyNamedExpression* pNamedExp)
+{
+ ::std::auto_ptr<ScMyNamedExpression> p(pNamedExp);
+ SheetNamedExpMap::iterator itr = maSheetNamedExpressions.find(nTab);
+ if (itr == maSheetNamedExpressions.end())
+ {
+ // No chain exists for this sheet. Create one.
+ ::std::auto_ptr<ScMyNamedExpressions> pNew(new ScMyNamedExpressions);
+ ::std::pair<SheetNamedExpMap::iterator, bool> r = maSheetNamedExpressions.insert(nTab, pNew);
+ if (!r.second)
+ // insertion failed.
+ return;
+
+ itr = r.first;
+ }
+ ScMyNamedExpressions& r = *itr->second;
+ r.push_back(p);
+}
+
+ScXMLChangeTrackingImportHelper* ScXMLImport::GetChangeTrackingImportHelper()
+{
+ if (!pChangeTrackingImportHelper)
+ pChangeTrackingImportHelper = new ScXMLChangeTrackingImportHelper();
+ return pChangeTrackingImportHelper;
+}
+
+void ScXMLImport::InsertStyles()
+{
+ GetStyles()->CopyStylesToDoc(sal_True);
+
+ // if content is going to be loaded with the same import, set bLatinDefaultStyle flag now
+ if ( getImportFlags() & IMPORT_CONTENT )
+ ExamineDefaultStyle();
+}
+
+void ScXMLImport::ExamineDefaultStyle()
+{
+ if (pDoc)
+ {
+ // #i62435# after inserting the styles, check if the default style has a latin-script-only
+ // number format (then, value cells can be pre-initialized with western script type)
+
+ const ScPatternAttr* pDefPattern = pDoc->GetDefPattern();
+ SvNumberFormatter* pFormatter = pDoc->GetFormatTable();
+ if ( pFormatter && pDefPattern )
+ {
+ sal_uInt32 nKey = pDefPattern->GetNumberFormat(pFormatter);
+ const SvNumberformat* pFormat = pFormatter->GetEntry(nKey);
+ if ( pFormat && pFormat->IsStandard() )
+ {
+ // The standard format is all-latin if the decimal separator dosen't
+ // have a different script type
+
+ String aDecSep;
+ LanguageType nFormatLang = pFormat->GetLanguage();
+ if ( nFormatLang == LANGUAGE_SYSTEM )
+ aDecSep = ScGlobal::pLocaleData->getNumDecimalSep();
+ else
+ {
+ LocaleDataWrapper aLocaleData( pDoc->GetServiceManager(),
+ MsLangId::convertLanguageToLocale( nFormatLang ) );
+ aDecSep = aLocaleData.getNumDecimalSep();
+ }
+
+ sal_uInt8 nScript = pDoc->GetStringScriptType( aDecSep );
+ if ( nScript == 0 || nScript == SCRIPTTYPE_LATIN )
+ bLatinDefaultStyle = sal_True;
+ }
+ }
+ }
+}
+
+void ScXMLImport::SetChangeTrackingViewSettings(const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& rChangeProps)
+{
+ if (pDoc)
+ {
+ sal_Int32 nCount(rChangeProps.getLength());
+ if (nCount)
+ {
+ ScXMLImport::MutexGuard aGuard(*this);
+ sal_Int16 nTemp16(0);
+ ScChangeViewSettings* pViewSettings(new ScChangeViewSettings());
+ for (sal_Int32 i = 0; i < nCount; ++i)
+ {
+ rtl::OUString sName(rChangeProps[i].Name);
+ if (sName.compareToAscii("ShowChanges") == 0)
+ pViewSettings->SetShowChanges(::cppu::any2bool(rChangeProps[i].Value));
+ else if (sName.compareToAscii("ShowAcceptedChanges") == 0)
+ pViewSettings->SetShowAccepted(::cppu::any2bool(rChangeProps[i].Value));
+ else if (sName.compareToAscii("ShowRejectedChanges") == 0)
+ pViewSettings->SetShowRejected(::cppu::any2bool(rChangeProps[i].Value));
+ else if (sName.compareToAscii("ShowChangesByDatetime") == 0)
+ pViewSettings->SetHasDate(::cppu::any2bool(rChangeProps[i].Value));
+ else if (sName.compareToAscii("ShowChangesByDatetimeMode") == 0)
+ {
+ if (rChangeProps[i].Value >>= nTemp16)
+ pViewSettings->SetTheDateMode(ScChgsDateMode(nTemp16));
+ }
+ else if (sName.compareToAscii("ShowChangesByDatetimeFirstDatetime") == 0)
+ {
+ util::DateTime aDateTime;
+ if (rChangeProps[i].Value >>= aDateTime)
+ {
+ DateTime aCoreDateTime;
+ ScXMLConverter::ConvertAPIToCoreDateTime(aDateTime, aCoreDateTime);
+ pViewSettings->SetTheFirstDateTime(aCoreDateTime);
+ }
+ }
+ else if (sName.compareToAscii("ShowChangesByDatetimeSecondDatetime") == 0)
+ {
+ util::DateTime aDateTime;
+ if (rChangeProps[i].Value >>= aDateTime)
+ {
+ DateTime aCoreDateTime;
+ ScXMLConverter::ConvertAPIToCoreDateTime(aDateTime, aCoreDateTime);
+ pViewSettings->SetTheLastDateTime(aCoreDateTime);
+ }
+ }
+ else if (sName.compareToAscii("ShowChangesByAuthor") == 0)
+ pViewSettings->SetHasAuthor(::cppu::any2bool(rChangeProps[i].Value));
+ else if (sName.compareToAscii("ShowChangesByAuthorName") == 0)
+ {
+ rtl::OUString sOUName;
+ if (rChangeProps[i].Value >>= sOUName)
+ {
+ String sAuthorName(sOUName);
+ pViewSettings->SetTheAuthorToShow(sAuthorName);
+ }
+ }
+ else if (sName.compareToAscii("ShowChangesByComment") == 0)
+ pViewSettings->SetHasComment(::cppu::any2bool(rChangeProps[i].Value));
+ else if (sName.compareToAscii("ShowChangesByCommentText") == 0)
+ {
+ rtl::OUString sOUComment;
+ if (rChangeProps[i].Value >>= sOUComment)
+ {
+ String sComment(sOUComment);
+ pViewSettings->SetTheComment(sComment);
+ }
+ }
+ else if (sName.compareToAscii("ShowChangesByRanges") == 0)
+ pViewSettings->SetHasRange(::cppu::any2bool(rChangeProps[i].Value));
+ else if (sName.compareToAscii("ShowChangesByRangesList") == 0)
+ {
+ rtl::OUString sRanges;
+ if ((rChangeProps[i].Value >>= sRanges) && sRanges.getLength())
+ {
+ ScRangeList aRangeList;
+ ScRangeStringConverter::GetRangeListFromString(
+ aRangeList, sRanges, GetDocument(), FormulaGrammar::CONV_OOO);
+ pViewSettings->SetTheRangeList(aRangeList);
+ }
+ }
+ }
+ pDoc->SetChangeViewSettings(*pViewSettings);
+ }
+ }
+}
+
+void ScXMLImport::SetViewSettings(const uno::Sequence<beans::PropertyValue>& aViewProps)
+{
+ sal_Int32 nCount(aViewProps.getLength());
+ sal_Int32 nHeight(0);
+ sal_Int32 nLeft(0);
+ sal_Int32 nTop(0);
+ sal_Int32 nWidth(0);
+ for (sal_Int32 i = 0; i < nCount; ++i)
+ {
+ rtl::OUString sName(aViewProps[i].Name);
+ if (sName.compareToAscii("VisibleAreaHeight") == 0)
+ aViewProps[i].Value >>= nHeight;
+ else if (sName.compareToAscii("VisibleAreaLeft") == 0)
+ aViewProps[i].Value >>= nLeft;
+ else if (sName.compareToAscii("VisibleAreaTop") == 0)
+ aViewProps[i].Value >>= nTop;
+ else if (sName.compareToAscii("VisibleAreaWidth") == 0)
+ aViewProps[i].Value >>= nWidth;
+ else if (sName.compareToAscii("TrackedChangesViewSettings") == 0)
+ {
+ uno::Sequence<beans::PropertyValue> aChangeProps;
+ if(aViewProps[i].Value >>= aChangeProps)
+ SetChangeTrackingViewSettings(aChangeProps);
+ }
+ }
+ if (nHeight && nWidth)
+ {
+ if (GetModel().is())
+ {
+ ScModelObj* pDocObj(ScModelObj::getImplementation( GetModel() ));
+ if (pDocObj)
+ {
+ SfxObjectShell* pEmbeddedObj = pDocObj->GetEmbeddedObject();
+ if (pEmbeddedObj)
+ {
+ Rectangle aRect;
+ aRect.setX( nLeft );
+ aRect.setY( nTop );
+ aRect.setWidth( nWidth );
+ aRect.setHeight( nHeight );
+ pEmbeddedObj->SetVisArea(aRect);
+ }
+ }
+ }
+ }
+}
+
+void ScXMLImport::SetConfigurationSettings(const uno::Sequence<beans::PropertyValue>& aConfigProps)
+{
+ if (GetModel().is())
+ {
+ uno::Reference <lang::XMultiServiceFactory> xMultiServiceFactory(GetModel(), uno::UNO_QUERY);
+ if (xMultiServiceFactory.is())
+ {
+ sal_Int32 nCount(aConfigProps.getLength());
+ rtl::OUString sCTName(RTL_CONSTASCII_USTRINGPARAM("TrackedChangesProtectionKey"));
+ rtl::OUString sVBName(RTL_CONSTASCII_USTRINGPARAM("VBACompatibilityMode"));
+ rtl::OUString sSCName(RTL_CONSTASCII_USTRINGPARAM("ScriptConfiguration"));
+ for (sal_Int32 i = nCount - 1; i >= 0; --i)
+ {
+ if (aConfigProps[i].Name == sCTName)
+ {
+ rtl::OUString sKey;
+ if (aConfigProps[i].Value >>= sKey)
+ {
+ uno::Sequence<sal_Int8> aPass;
+ SvXMLUnitConverter::decodeBase64(aPass, sKey);
+ if (aPass.getLength())
+ {
+ if (pDoc->GetChangeTrack())
+ pDoc->GetChangeTrack()->SetProtection(aPass);
+ else
+ {
+ ScStrCollection aUsers;
+ ScChangeTrack* pTrack = new ScChangeTrack(pDoc, aUsers);
+ pTrack->SetProtection(aPass);
+ pDoc->SetChangeTrack(pTrack);
+ }
+ }
+ }
+ }
+ // store the following items for later use (after document is loaded)
+ else if ((aConfigProps[i].Name == sVBName) || (aConfigProps[i].Name == sSCName))
+ {
+ uno::Reference< beans::XPropertySet > xImportInfo = getImportInfo();
+ if (xImportInfo.is())
+ {
+ uno::Reference< beans::XPropertySetInfo > xPropertySetInfo = xImportInfo->getPropertySetInfo();
+ if (xPropertySetInfo.is() && xPropertySetInfo->hasPropertyByName(aConfigProps[i].Name))
+ xImportInfo->setPropertyValue( aConfigProps[i].Name, aConfigProps[i].Value );
+ }
+ }
+ }
+ uno::Reference <uno::XInterface> xInterface = xMultiServiceFactory->createInstance(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.SpreadsheetSettings")));
+ uno::Reference <beans::XPropertySet> xProperties(xInterface, uno::UNO_QUERY);
+ if (xProperties.is())
+ SvXMLUnitConverter::convertPropertySet(xProperties, aConfigProps);
+ }
+ }
+}
+
+sal_Int32 ScXMLImport::SetCurrencySymbol(const sal_Int32 nKey, const rtl::OUString& rCurrency)
+{
+ uno::Reference <util::XNumberFormatsSupplier> xNumberFormatsSupplier(GetNumberFormatsSupplier());
+ if (xNumberFormatsSupplier.is())
+ {
+ uno::Reference <util::XNumberFormats> xLocalNumberFormats(xNumberFormatsSupplier->getNumberFormats());
+ if (xLocalNumberFormats.is())
+ {
+ rtl::OUString sFormatString;
+ try
+ {
+ uno::Reference <beans::XPropertySet> xProperties(xLocalNumberFormats->getByKey(nKey));
+ if (xProperties.is())
+ {
+ lang::Locale aLocale;
+ if (GetDocument() && (xProperties->getPropertyValue(sLocale) >>= aLocale))
+ {
+ {
+ ScXMLImport::MutexGuard aGuard(*this);
+ LocaleDataWrapper aLocaleData( GetDocument()->GetServiceManager(), aLocale );
+ rtl::OUStringBuffer aBuffer(15);
+ aBuffer.appendAscii("#");
+ aBuffer.append( aLocaleData.getNumThousandSep() );
+ aBuffer.appendAscii("##0");
+ aBuffer.append( aLocaleData.getNumDecimalSep() );
+ aBuffer.appendAscii("00 [$");
+ aBuffer.append(rCurrency);
+ aBuffer.appendAscii("]");
+ sFormatString = aBuffer.makeStringAndClear();
+ }
+ sal_Int32 nNewKey = xLocalNumberFormats->queryKey(sFormatString, aLocale, sal_True);
+ if (nNewKey == -1)
+ nNewKey = xLocalNumberFormats->addNew(sFormatString, aLocale);
+ return nNewKey;
+ }
+ }
+ }
+ catch ( util::MalformedNumberFormatException& rException )
+ {
+ rtl::OUString sErrorMessage(RTL_CONSTASCII_USTRINGPARAM("Fehler im Formatstring "));
+ sErrorMessage += sFormatString;
+ sErrorMessage += rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" an Position "));
+ sErrorMessage += rtl::OUString::valueOf(rException.CheckPos);
+ uno::Sequence<rtl::OUString> aSeq(1);
+ aSeq[0] = sErrorMessage;
+ uno::Reference<xml::sax::XLocator> xLocator;
+ SetError(XMLERROR_API | XMLERROR_FLAG_ERROR, aSeq, rException.Message, xLocator);
+ }
+ }
+ }
+ return nKey;
+}
+
+sal_Bool ScXMLImport::IsCurrencySymbol(const sal_Int32 nNumberFormat, const rtl::OUString& sCurrentCurrency, const rtl::OUString& sBankSymbol)
+{
+ uno::Reference <util::XNumberFormatsSupplier> xNumberFormatsSupplier(GetNumberFormatsSupplier());
+ if (xNumberFormatsSupplier.is())
+ {
+ uno::Reference <util::XNumberFormats> xLocalNumberFormats(xNumberFormatsSupplier->getNumberFormats());
+ if (xLocalNumberFormats.is())
+ {
+ try
+ {
+ uno::Reference <beans::XPropertySet> xNumberPropertySet(xLocalNumberFormats->getByKey(nNumberFormat));
+ if (xNumberPropertySet.is())
+ {
+ rtl::OUString sTemp;
+ if ( xNumberPropertySet->getPropertyValue(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_CURRENCYSYMBOL))) >>= sTemp)
+ {
+ if (sCurrentCurrency.equals(sTemp))
+ return sal_True;
+ // #i61657# This may be a legacy currency symbol that changed in the meantime.
+ if (SvNumberFormatter::GetLegacyOnlyCurrencyEntry( sCurrentCurrency, sBankSymbol) != NULL)
+ return true;
+ // In the rare case that sCurrentCurrency is not the
+ // currency symbol, but a matching ISO code
+ // abbreviation instead that was obtained through
+ // XMLNumberFormatAttributesExportHelper::GetCellType(),
+ // check with the number format's symbol. This happens,
+ // for example, in the es_BO locale, where a legacy
+ // B$,BOB matched B$->BOP, which leads to
+ // sCurrentCurrency being BOP, and the previous call
+ // with BOP,BOB didn't find an entry, but B$,BOB will.
+ return SvNumberFormatter::GetLegacyOnlyCurrencyEntry( sTemp, sBankSymbol) != NULL;
+ }
+ }
+ }
+ catch ( uno::Exception& )
+ {
+ OSL_FAIL("Numberformat not found");
+ }
+ }
+ }
+ return false;
+}
+
+void ScXMLImport::SetType(uno::Reference <beans::XPropertySet>& rProperties,
+ sal_Int32& rNumberFormat,
+ const sal_Int16 nCellType,
+ const rtl::OUString& rCurrency)
+{
+ if ((nCellType != util::NumberFormat::TEXT) && (nCellType != util::NumberFormat::UNDEFINED))
+ {
+ if (rNumberFormat == -1)
+ rProperties->getPropertyValue( sNumberFormat ) >>= rNumberFormat;
+ DBG_ASSERT(rNumberFormat != -1, "no NumberFormat");
+ sal_Bool bIsStandard;
+ // sCurrentCurrency may be the ISO code abbreviation if the currency
+ // symbol matches such, or if no match found the symbol itself!
+ rtl::OUString sCurrentCurrency;
+ sal_Int32 nCurrentCellType(
+ GetNumberFormatAttributesExportHelper()->GetCellType(
+ rNumberFormat, sCurrentCurrency, bIsStandard) & ~util::NumberFormat::DEFINED);
+ if ((nCellType != nCurrentCellType) && !((nCellType == util::NumberFormat::NUMBER &&
+ ((nCurrentCellType == util::NumberFormat::SCIENTIFIC) ||
+ (nCurrentCellType == util::NumberFormat::FRACTION) ||
+ (nCurrentCellType == util::NumberFormat::LOGICAL) ||
+ (nCurrentCellType == 0))) || (nCurrentCellType == util::NumberFormat::TEXT)) && !((nCellType == util::NumberFormat::DATETIME) &&
+ (nCurrentCellType == util::NumberFormat::DATE)))
+ {
+ if (!xNumberFormats.is())
+ {
+ uno::Reference <util::XNumberFormatsSupplier> xNumberFormatsSupplier(GetNumberFormatsSupplier());
+ if (xNumberFormatsSupplier.is())
+ xNumberFormats.set(xNumberFormatsSupplier->getNumberFormats());
+ }
+ if (xNumberFormats.is())
+ {
+ try
+ {
+ uno::Reference < beans::XPropertySet> xNumberFormatProperties(xNumberFormats->getByKey(rNumberFormat));
+ if (xNumberFormatProperties.is())
+ {
+ if (nCellType != util::NumberFormat::CURRENCY)
+ {
+ lang::Locale aLocale;
+ if ( xNumberFormatProperties->getPropertyValue(sLocale) >>= aLocale )
+ {
+ if (!xNumberFormatTypes.is())
+ xNumberFormatTypes.set(uno::Reference <util::XNumberFormatTypes>(xNumberFormats, uno::UNO_QUERY));
+ rProperties->setPropertyValue( sNumberFormat, uno::makeAny(xNumberFormatTypes->getStandardFormat(nCellType, aLocale)) );
+ }
+ }
+ else if (rCurrency.getLength() && sCurrentCurrency.getLength())
+ {
+ if (!sCurrentCurrency.equals(rCurrency))
+ if (!IsCurrencySymbol(rNumberFormat, sCurrentCurrency, rCurrency))
+ rProperties->setPropertyValue( sNumberFormat, uno::makeAny(SetCurrencySymbol(rNumberFormat, rCurrency)));
+ }
+ }
+ }
+ catch ( uno::Exception& )
+ {
+ OSL_FAIL("Numberformat not found");
+ }
+ }
+ }
+ else
+ {
+ if ((nCellType == util::NumberFormat::CURRENCY) && rCurrency.getLength() && sCurrentCurrency.getLength() &&
+ !sCurrentCurrency.equals(rCurrency) && !IsCurrencySymbol(rNumberFormat, sCurrentCurrency, rCurrency))
+ rProperties->setPropertyValue( sNumberFormat, uno::makeAny(SetCurrencySymbol(rNumberFormat, rCurrency)));
+ }
+ }
+}
+
+void ScXMLImport::AddStyleRange(const table::CellRangeAddress& rCellRange)
+{
+ if (!xSheetCellRanges.is() && GetModel().is())
+ {
+ uno::Reference <lang::XMultiServiceFactory> xMultiServiceFactory(GetModel(), uno::UNO_QUERY);
+ if (xMultiServiceFactory.is())
+ xSheetCellRanges.set(uno::Reference <sheet::XSheetCellRangeContainer>(xMultiServiceFactory->createInstance(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sheet.SheetCellRanges"))), uno::UNO_QUERY));
+ DBG_ASSERT(xSheetCellRanges.is(), "didn't get SheetCellRanges");
+
+ }
+ xSheetCellRanges->addRangeAddress(rCellRange, false);
+}
+
+void ScXMLImport::SetStyleToRanges()
+{
+ if (sPrevStyleName.getLength())
+ {
+ uno::Reference <beans::XPropertySet> xProperties (xSheetCellRanges, uno::UNO_QUERY);
+ if (xProperties.is())
+ {
+ XMLTableStylesContext *pStyles((XMLTableStylesContext *)GetAutoStyles());
+ XMLTableStyleContext* pStyle( pStyles ? (XMLTableStyleContext *)pStyles->FindStyleChildContext(
+ XML_STYLE_FAMILY_TABLE_CELL, sPrevStyleName, sal_True) : NULL );
+ if (pStyle)
+ {
+ pStyle->FillPropertySet(xProperties);
+ sal_Int32 nNumberFormat(pStyle->GetNumberFormat());
+ SetType(xProperties, nNumberFormat, nPrevCellType, sPrevCurrency);
+
+ // store first cell of first range for each style, once per sheet
+ uno::Sequence<table::CellRangeAddress> aAddresses(xSheetCellRanges->getRangeAddresses());
+ if ( aAddresses.getLength() > 0 )
+ {
+ const table::CellRangeAddress& rRange = aAddresses[0];
+ if ( rRange.Sheet != pStyle->GetLastSheet() )
+ {
+ ScSheetSaveData* pSheetData = ScModelObj::getImplementation(GetModel())->GetSheetSaveData();
+ pSheetData->AddCellStyle( sPrevStyleName,
+ ScAddress( (SCCOL)rRange.StartColumn, (SCROW)rRange.StartRow, (SCTAB)rRange.Sheet ) );
+ pStyle->SetLastSheet(rRange.Sheet);
+ }
+ }
+ }
+ else
+ {
+ xProperties->setPropertyValue(sCellStyle, uno::makeAny(GetStyleDisplayName( XML_STYLE_FAMILY_TABLE_CELL, sPrevStyleName )));
+ sal_Int32 nNumberFormat(GetStyleNumberFormats()->GetStyleNumberFormat(sPrevStyleName));
+ sal_Bool bInsert(nNumberFormat == -1);
+ SetType(xProperties, nNumberFormat, nPrevCellType, sPrevCurrency);
+ if (bInsert)
+ GetStyleNumberFormats()->AddStyleNumberFormat(sPrevStyleName, nNumberFormat);
+ }
+ }
+ }
+ if (GetModel().is())
+ {
+ uno::Reference <lang::XMultiServiceFactory> xMultiServiceFactory(GetModel(), uno::UNO_QUERY);
+ if (xMultiServiceFactory.is())
+ xSheetCellRanges.set(uno::Reference <sheet::XSheetCellRangeContainer>(
+ xMultiServiceFactory->createInstance(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sheet.SheetCellRanges"))),
+ uno::UNO_QUERY));
+ }
+ DBG_ASSERT(xSheetCellRanges.is(), "didn't get SheetCellRanges");
+}
+
+void ScXMLImport::SetStyleToRange(const ScRange& rRange, const rtl::OUString* pStyleName,
+ const sal_Int16 nCellType, const rtl::OUString* pCurrency)
+{
+ if (!sPrevStyleName.getLength())
+ {
+ nPrevCellType = nCellType;
+ if (pStyleName)
+ sPrevStyleName = *pStyleName;
+ if (pCurrency)
+ sPrevCurrency = *pCurrency;
+ else if (sPrevCurrency.getLength())
+ sPrevCurrency = sEmpty;
+ }
+ else if ((nCellType != nPrevCellType) ||
+ ((pStyleName && !pStyleName->equals(sPrevStyleName)) ||
+ (!pStyleName && sPrevStyleName.getLength())) ||
+ ((pCurrency && !pCurrency->equals(sPrevCurrency)) ||
+ (!pCurrency && sPrevCurrency.getLength())))
+ {
+ SetStyleToRanges();
+ nPrevCellType = nCellType;
+ if (pStyleName)
+ sPrevStyleName = *pStyleName;
+ else if(sPrevStyleName.getLength())
+ sPrevStyleName = sEmpty;
+ if (pCurrency)
+ sPrevCurrency = *pCurrency;
+ else if(sPrevCurrency.getLength())
+ sPrevCurrency = sEmpty;
+ }
+ table::CellRangeAddress aCellRange;
+ aCellRange.StartColumn = rRange.aStart.Col();
+ aCellRange.StartRow = rRange.aStart.Row();
+ aCellRange.Sheet = rRange.aStart.Tab();
+ aCellRange.EndColumn = rRange.aEnd.Col();
+ aCellRange.EndRow = rRange.aEnd.Row();
+ AddStyleRange(aCellRange);
+}
+
+sal_Bool ScXMLImport::SetNullDateOnUnitConverter()
+{
+ if (!bNullDateSetted)
+ bNullDateSetted = GetMM100UnitConverter().setNullDate(GetModel());
+ DBG_ASSERT(bNullDateSetted, "could not set the null date");
+ return bNullDateSetted;
+}
+
+XMLNumberFormatAttributesExportHelper* ScXMLImport::GetNumberFormatAttributesExportHelper()
+{
+ if (!pNumberFormatAttributesExportHelper)
+ pNumberFormatAttributesExportHelper = new XMLNumberFormatAttributesExportHelper(GetNumberFormatsSupplier());
+ return pNumberFormatAttributesExportHelper;
+}
+
+ScMyStyleNumberFormats* ScXMLImport::GetStyleNumberFormats()
+{
+ if (!pStyleNumberFormats)
+ pStyleNumberFormats = new ScMyStyleNumberFormats();
+ return pStyleNumberFormats;
+}
+
+void ScXMLImport::SetStylesToRangesFinished()
+{
+ SetStyleToRanges();
+ sPrevStyleName = sEmpty;
+}
+
+// XImporter
+void SAL_CALL ScXMLImport::setTargetDocument( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >& xDoc )
+throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException)
+{
+ ScXMLImport::MutexGuard aGuard(*this);
+ SvXMLImport::setTargetDocument( xDoc );
+
+ uno::Reference<frame::XModel> xModel(xDoc, uno::UNO_QUERY);
+ pDoc = ScXMLConverter::GetScDocument( xModel );
+ DBG_ASSERT( pDoc, "ScXMLImport::setTargetDocument - no ScDocument!" );
+ if (!pDoc)
+ throw lang::IllegalArgumentException();
+
+ bFromWrapper = pDoc->IsXMLFromWrapper(); // UnlockSolarMutex below still works normally
+
+ uno::Reference<document::XActionLockable> xActionLockable(xDoc, uno::UNO_QUERY);
+ if (xActionLockable.is())
+ xActionLockable->addActionLock();
+}
+
+// XServiceInfo
+::rtl::OUString SAL_CALL ScXMLImport::getImplementationName( )
+throw(::com::sun::star::uno::RuntimeException)
+{
+ switch( getImportFlags() )
+ {
+ case IMPORT_ALL:
+ return ScXMLImport_getImplementationName();
+ case (IMPORT_STYLES|IMPORT_MASTERSTYLES|IMPORT_AUTOSTYLES|IMPORT_FONTDECLS):
+ return ScXMLImport_Styles_getImplementationName();
+ case (IMPORT_AUTOSTYLES|IMPORT_CONTENT|IMPORT_SCRIPTS|IMPORT_FONTDECLS):
+ return ScXMLImport_Content_getImplementationName();
+ case IMPORT_META:
+ return ScXMLImport_Meta_getImplementationName();
+ case IMPORT_SETTINGS:
+ return ScXMLImport_Settings_getImplementationName();
+ default:
+ // generic name for 'unknown' cases
+ return ScXMLImport_getImplementationName();
+ }
+ return SvXMLImport::getImplementationName();
+}
+
+// ::com::sun::star::xml::sax::XDocumentHandler
+void SAL_CALL ScXMLImport::startDocument(void)
+throw( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException )
+{
+ ScXMLImport::MutexGuard aGuard(*this);
+ SvXMLImport::startDocument();
+ if (pDoc && !pDoc->IsImportingXML())
+ {
+ ScModelObj::getImplementation(GetModel())->BeforeXMLLoading();
+ bSelfImportingXMLSet = sal_True;
+ }
+
+ // if content and styles are loaded with separate imports,
+ // set bLatinDefaultStyle flag at the start of the content import
+ sal_uInt16 nFlags = getImportFlags();
+ if ( ( nFlags & IMPORT_CONTENT ) && !( nFlags & IMPORT_STYLES ) )
+ ExamineDefaultStyle();
+
+ if (getImportFlags() & IMPORT_CONTENT)
+ {
+ if (GetModel().is())
+ {
+ // store initial namespaces, to find the ones that were added from the file later
+ ScSheetSaveData* pSheetData = ScModelObj::getImplementation(GetModel())->GetSheetSaveData();
+ const SvXMLNamespaceMap& rNamespaces = GetNamespaceMap();
+ pSheetData->StoreInitialNamespaces(rNamespaces);
+ }
+ }
+}
+
+sal_Int32 ScXMLImport::GetRangeType(const rtl::OUString sRangeType) const
+{
+ sal_Int32 nRangeType(0);
+ rtl::OUStringBuffer sBuffer;
+ sal_Int16 i = 0;
+ while (i <= sRangeType.getLength())
+ {
+ if ((sRangeType[i] == ' ') || (i == sRangeType.getLength()))
+ {
+ rtl::OUString sTemp = sBuffer.makeStringAndClear();
+ if (sTemp.compareToAscii(SC_REPEAT_COLUMN) == 0)
+ nRangeType |= sheet::NamedRangeFlag::COLUMN_HEADER;
+ else if (sTemp.compareToAscii(SC_REPEAT_ROW) == 0)
+ nRangeType |= sheet::NamedRangeFlag::ROW_HEADER;
+ else if (sTemp.compareToAscii(SC_FILTER) == 0)
+ nRangeType |= sheet::NamedRangeFlag::FILTER_CRITERIA;
+ else if (sTemp.compareToAscii(SC_PRINT_RANGE) == 0)
+ nRangeType |= sheet::NamedRangeFlag::PRINT_AREA;
+ }
+ else if (i < sRangeType.getLength())
+ sBuffer.append(sRangeType[i]);
+ ++i;
+ }
+ return nRangeType;
+}
+
+void ScXMLImport::SetLabelRanges()
+{
+ ScMyLabelRanges* pLabelRanges = GetLabelRanges();
+ if (pLabelRanges)
+ {
+ uno::Reference <beans::XPropertySet> xPropertySet (GetModel(), uno::UNO_QUERY);
+ if (xPropertySet.is())
+ {
+ uno::Any aColAny = xPropertySet->getPropertyValue(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_COLLABELRNG)));
+ uno::Any aRowAny = xPropertySet->getPropertyValue(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_ROWLABELRNG)));
+
+ uno::Reference< sheet::XLabelRanges > xColRanges;
+ uno::Reference< sheet::XLabelRanges > xRowRanges;
+
+ if ( ( aColAny >>= xColRanges ) && ( aRowAny >>= xRowRanges ) )
+ {
+ table::CellRangeAddress aLabelRange;
+ table::CellRangeAddress aDataRange;
+
+ ScMyLabelRanges::iterator aItr = pLabelRanges->begin();
+ while (aItr != pLabelRanges->end())
+ {
+ sal_Int32 nOffset1(0);
+ sal_Int32 nOffset2(0);
+ FormulaGrammar::AddressConvention eConv = FormulaGrammar::CONV_OOO;
+
+ if (ScRangeStringConverter::GetRangeFromString( aLabelRange, (*aItr)->sLabelRangeStr, GetDocument(), eConv, nOffset1 ) &&
+ ScRangeStringConverter::GetRangeFromString( aDataRange, (*aItr)->sDataRangeStr, GetDocument(), eConv, nOffset2 ))
+ {
+ if ( (*aItr)->bColumnOrientation )
+ xColRanges->addNew( aLabelRange, aDataRange );
+ else
+ xRowRanges->addNew( aLabelRange, aDataRange );
+ }
+
+ delete *aItr;
+ aItr = pLabelRanges->erase(aItr);
+ }
+ }
+ }
+ }
+}
+
+namespace {
+
+/**
+ * Used to switch off document modify and broadcast while populating named
+ * ranges during import.
+ */
+class NamedRangesSwitch
+{
+public:
+ NamedRangesSwitch(Reference<beans::XPropertySet>& xPropSet) :
+ mxPropSet(xPropSet), maPropName(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_MODIFY_BROADCAST))
+ {
+ uno::Any any;
+ any <<= false;
+ mxPropSet->setPropertyValue(maPropName, any);
+ }
+
+ ~NamedRangesSwitch()
+ {
+ uno::Any any;
+ any <<= sal_True;
+ mxPropSet->setPropertyValue(maPropName, any);
+ }
+
+private:
+ Reference<beans::XPropertySet>& mxPropSet;
+ OUString maPropName;
+};
+
+}
+
+void ScXMLImport::SetNamedRanges()
+{
+ ScMyNamedExpressions* pNamedExpressions = GetNamedExpressions();
+ if (!pNamedExpressions)
+ return;
+
+ Reference <beans::XPropertySet> xPropertySet (GetModel(), UNO_QUERY);
+ if (!xPropertySet.is())
+ return;
+
+ Reference <sheet::XNamedRanges> xNamedRanges(
+ xPropertySet->getPropertyValue(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_NAMEDRANGES))), UNO_QUERY);
+
+ if (!xNamedRanges.is())
+ return;
+
+ Reference<beans::XPropertySet> xPropSet(xNamedRanges, UNO_QUERY);
+ if (!xPropSet.is())
+ return;
+
+ // Turn off broadcasting while adding imported range names.
+ NamedRangesSwitch aSwitch(xPropSet);
+
+ ScMyNamedExpressions::iterator aItr(pNamedExpressions->begin());
+ ScMyNamedExpressions::const_iterator aEndItr(pNamedExpressions->end());
+ table::CellAddress aCellAddress;
+ OUString sTempContent(RTL_CONSTASCII_USTRINGPARAM("0"));
+
+ for (; aItr != aEndItr; ++aItr)
+ {
+ sal_Int32 nOffset = 0;
+ bool bSuccess = ScRangeStringConverter::GetAddressFromString(
+ aCellAddress, aItr->sBaseCellAddress, GetDocument(), FormulaGrammar::CONV_OOO, nOffset);
+
+ if (!bSuccess)
+ // Conversion of base cell address failed. Skip this.
+ continue;
+
+ try
+ {
+ xNamedRanges->addNewByName(
+ aItr->sName, sTempContent, aCellAddress, GetRangeType(aItr->sRangeType));
+ }
+ catch( uno::RuntimeException& )
+ {
+ OSL_FAIL("here are some Named Ranges with the same name");
+ uno::Reference < container::XIndexAccess > xIndex(xNamedRanges, uno::UNO_QUERY);
+ if (xIndex.is())
+ {
+ sal_Int32 nMax = xIndex->getCount();
+ bool bInserted = false;
+ sal_Int32 nCount = 1;
+ OUStringBuffer sName(aItr->sName);
+ sName.append(sal_Unicode('_'));
+ while (!bInserted && nCount <= nMax)
+ {
+ OUStringBuffer sTemp(sName);
+ sTemp.append(OUString::valueOf(nCount));
+ try
+ {
+ xNamedRanges->addNewByName(
+ sTemp.makeStringAndClear(), sTempContent, aCellAddress,
+ GetRangeType(aItr->sRangeType));
+ bInserted = true;
+ }
+ catch( uno::RuntimeException& )
+ {
+ ++nCount;
+ }
+ }
+ UnlockSolarMutex();
+ }
+ }
+ }
+
+ aItr = pNamedExpressions->begin();
+ while (aItr != aEndItr)
+ {
+ sal_Int32 nOffset(0);
+ if (ScRangeStringConverter::GetAddressFromString(
+ aCellAddress, aItr->sBaseCellAddress, GetDocument(), FormulaGrammar::CONV_OOO, nOffset ))
+ {
+ uno::Reference <sheet::XNamedRange> xNamedRange(xNamedRanges->getByName(aItr->sName), uno::UNO_QUERY);
+ if (xNamedRange.is())
+ {
+ ScXMLImport::MutexGuard aGuard(*this);
+ ScNamedRangeObj* pNamedRangeObj = ScNamedRangeObj::getImplementation( xNamedRange);
+ if (pNamedRangeObj)
+ {
+ sTempContent = aItr->sContent;
+ // Get rid of leading sheet dots in simple ranges.
+ if (!aItr->bIsExpression)
+ ScXMLConverter::ParseFormula( sTempContent, false);
+ pNamedRangeObj->SetContentWithGrammar( sTempContent, aItr->eGrammar);
+ }
+ }
+ }
+ aItr = pNamedExpressions->erase(aItr);
+ }
+}
+
+namespace {
+
+class SheetRangeNameInserter : public ::std::unary_function<ScMyNamedExpression, void>
+{
+ ScDocument* mpDoc;
+ ScRangeName& mrRangeName;
+public:
+ SheetRangeNameInserter(ScDocument* pDoc, ScRangeName& rRangeName) :
+ mpDoc(pDoc), mrRangeName(rRangeName) {}
+
+ void operator() (const ScMyNamedExpression& r) const
+ {
+ using namespace formula;
+
+ if (r.sRangeType.getLength() > 0)
+ // For now, we only accept normal named expressions.
+ return;
+
+ if (mpDoc && !mrRangeName.findByName(r.sName))
+ {
+ // Insert a new name.
+ ScAddress aPos;
+ sal_Int32 nOffset = 0;
+ bool bSuccess = ScRangeStringConverter::GetAddressFromString(
+ aPos, r.sBaseCellAddress, mpDoc, FormulaGrammar::CONV_OOO, nOffset);
+
+ if (bSuccess)
+ {
+ ::rtl::OUString aContent = r.sContent;
+ if (!r.bIsExpression)
+ ScXMLConverter::ParseFormula(aContent, false);
+
+ ScRangeData* pData = new ScRangeData(
+ mpDoc, r.sName, r.sContent, aPos, RT_NAME, r.eGrammar);
+ mrRangeName.insert(pData);
+ }
+ }
+ }
+};
+
+}
+
+void ScXMLImport::SetSheetNamedRanges()
+{
+ if (!pDoc)
+ return;
+
+ SheetNamedExpMap::const_iterator itr = maSheetNamedExpressions.begin(), itrEnd = maSheetNamedExpressions.end();
+ for (; itr != itrEnd; ++itr)
+ {
+ SCTAB nTab = itr->first;
+ ScRangeName* pRangeNames = pDoc->GetRangeName(nTab);
+ if (!pRangeNames)
+ continue;
+
+ const ScMyNamedExpressions& rNames = *itr->second;
+ ::std::for_each(rNames.begin(), rNames.end(), SheetRangeNameInserter(pDoc, *pRangeNames));
+ }
+}
+
+void SAL_CALL ScXMLImport::endDocument(void)
+throw( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException )
+{
+ ScXMLImport::MutexGuard aGuard(*this);
+ if (getImportFlags() & IMPORT_CONTENT)
+ {
+ if (GetModel().is())
+ {
+ uno::Reference<document::XViewDataSupplier> xViewDataSupplier(GetModel(), uno::UNO_QUERY);
+ if (xViewDataSupplier.is())
+ {
+ uno::Reference<container::XIndexAccess> xIndexAccess(xViewDataSupplier->getViewData());
+ if (xIndexAccess.is() && xIndexAccess->getCount() > 0)
+ {
+ uno::Sequence< beans::PropertyValue > aSeq;
+ if (xIndexAccess->getByIndex(0) >>= aSeq)
+ {
+ sal_Int32 nCount (aSeq.getLength());
+ for (sal_Int32 i = 0; i < nCount; ++i)
+ {
+ rtl::OUString sName(aSeq[i].Name);
+ if (sName.compareToAscii(SC_ACTIVETABLE) == 0)
+ {
+ rtl::OUString sValue;
+ if(aSeq[i].Value >>= sValue)
+ {
+ String sTabName(sValue);
+ SCTAB nTab(0);
+ if (pDoc->GetTable(sTabName, nTab))
+ {
+ pDoc->SetVisibleTab(nTab);
+ i = nCount;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ SetLabelRanges();
+ SetNamedRanges();
+ SetSheetNamedRanges();
+ }
+ GetProgressBarHelper()->End(); // make room for subsequent SfxProgressBars
+ if (pDoc)
+ pDoc->CompileXML();
+
+ if (pDoc && GetModel().is())
+ {
+ // set "valid stream" flags after loading (before UpdateRowHeights, so changed formula results
+ // in UpdateRowHeights can already clear the flags again)
+ ScSheetSaveData* pSheetData = ScModelObj::getImplementation(GetModel())->GetSheetSaveData();
+
+ SCTAB nTabCount = pDoc->GetTableCount();
+ for (SCTAB nTab=0; nTab<nTabCount; ++nTab)
+ if (!pSheetData->IsSheetBlocked( nTab ))
+ pDoc->SetStreamValid( nTab, sal_True );
+ }
+
+ aTables.UpdateRowHeights();
+ aTables.FixupOLEs();
+ }
+ if (GetModel().is())
+ {
+ uno::Reference<document::XActionLockable> xActionLockable(GetModel(), uno::UNO_QUERY);
+ if (xActionLockable.is())
+ xActionLockable->removeActionLock();
+ }
+ SvXMLImport::endDocument();
+
+ if (pDoc && bSelfImportingXMLSet)
+ {
+ ScModelObj::getImplementation(GetModel())->AfterXMLLoading(sal_True);
+ }
+}
+
+// XEventListener
+void ScXMLImport::DisposingModel()
+{
+ SvXMLImport::DisposingModel();
+ pDoc = NULL;
+}
+
+ScXMLImport::MutexGuard::MutexGuard(ScXMLImport& rImport) :
+ mrImport(rImport)
+{
+ mrImport.LockSolarMutex();
+}
+
+ScXMLImport::MutexGuard::~MutexGuard()
+{
+ mrImport.UnlockSolarMutex();
+}
+
+void ScXMLImport::LockSolarMutex()
+{
+ // #i62677# When called from DocShell/Wrapper, the SolarMutex is already locked,
+ // so there's no need to allocate (and later delete) the SolarMutexGuard.
+ if (bFromWrapper)
+ {
+ DBG_TESTSOLARMUTEX();
+ return;
+ }
+
+ if (nSolarMutexLocked == 0)
+ {
+ DBG_ASSERT(!pSolarMutexGuard, "Solar Mutex is locked");
+ pSolarMutexGuard = new SolarMutexGuard();
+ }
+ ++nSolarMutexLocked;
+}
+
+
+void ScXMLImport::UnlockSolarMutex()
+{
+ if (nSolarMutexLocked > 0)
+ {
+ nSolarMutexLocked--;
+ if (nSolarMutexLocked == 0)
+ {
+ DBG_ASSERT(pSolarMutexGuard, "Solar Mutex is always unlocked");
+ delete pSolarMutexGuard;
+ pSolarMutexGuard = NULL;
+ }
+ }
+}
+
+sal_Int32 ScXMLImport::GetByteOffset()
+{
+ sal_Int32 nOffset = -1;
+ uno::Reference<xml::sax::XLocator> xLocator = GetLocator();
+ uno::Reference<io::XSeekable> xSeek( xLocator, uno::UNO_QUERY ); //! should use different interface
+ if ( xSeek.is() )
+ nOffset = (sal_Int32)xSeek->getPosition();
+ return nOffset;
+}
+
+void ScXMLImport::SetRangeOverflowType(sal_uInt32 nType)
+{
+ // #i31130# Overflow is stored in the document, because the ScXMLImport object
+ // isn't available in ScXMLImportWrapper::ImportFromComponent when using the
+ // OOo->Oasis transformation.
+
+ if ( pDoc )
+ pDoc->SetRangeOverflowType( nType );
+}
+
+void ScXMLImport::ProgressBarIncrement(sal_Bool bEditCell, sal_Int32 nInc)
+{
+ nProgressCount += nInc;
+ if (bEditCell || nProgressCount > 100)
+ {
+ GetProgressBarHelper()->Increment(nProgressCount);
+ nProgressCount = 0;
+ }
+}
+
+sal_Int32 ScXMLImport::GetVisibleSheet()
+{
+ // Get the visible sheet number from model's view data (after settings were loaded),
+ // or 0 (default: first sheet) if no settings available.
+
+ uno::Reference<document::XViewDataSupplier> xSupp(GetModel(), uno::UNO_QUERY);
+ if (xSupp.is())
+ {
+ uno::Reference<container::XIndexAccess> xIndex = xSupp->getViewData();
+ if ( xIndex.is() && xIndex->getCount() > 0 )
+ {
+ uno::Any aAny( xIndex->getByIndex(0) );
+ uno::Sequence<beans::PropertyValue> aViewSettings; // settings for (first) view
+ if ( aAny >>= aViewSettings )
+ {
+ sal_Int32 nCount = aViewSettings.getLength();
+ for (sal_Int32 i = 0; i < nCount; ++i)
+ {
+ if ( aViewSettings[i].Name.compareToAscii(SC_ACTIVETABLE) == 0 )
+ {
+ rtl::OUString sValue;
+ if(aViewSettings[i].Value >>= sValue)
+ {
+ String sTabName(sValue);
+ SCTAB nTab = 0;
+ if (pDoc->GetTable(sTabName, nTab))
+ return nTab;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return 0;
+}
+
+void ScXMLImport::ExtractFormulaNamespaceGrammar(
+ OUString& rFormula, OUString& rFormulaNmsp, FormulaGrammar::Grammar& reGrammar,
+ const OUString& rAttrValue, bool bRestrictToExternalNmsp ) const
+{
+ // parse the attribute value, extract namespace ID, literal namespace, and formula string
+ rFormulaNmsp = OUString();
+ sal_uInt16 nNsId = GetNamespaceMap()._GetKeyByAttrName( rAttrValue, 0, &rFormula, &rFormulaNmsp, false );
+
+ // check if we have an ODF formula namespace
+ if( !bRestrictToExternalNmsp ) switch( nNsId )
+ {
+ case XML_NAMESPACE_OOOC:
+ rFormulaNmsp = OUString(); // remove namespace string for built-in grammar
+ reGrammar = FormulaGrammar::GRAM_PODF;
+ return;
+ case XML_NAMESPACE_OF:
+ rFormulaNmsp = OUString(); // remove namespace string for built-in grammar
+ reGrammar = FormulaGrammar::GRAM_ODFF;
+ return;
+ }
+
+ /* Find default grammar for formulas without namespace. There may be
+ documents in the wild that stored no namespace in ODF 1.0/1.1. Use
+ GRAM_PODF then (old style ODF 1.0/1.1 formulas). The default for ODF
+ 1.2 and later without namespace is GRAM_ODFF (OpenFormula). */
+ FormulaGrammar::Grammar eDefaultGrammar =
+ (GetDocument()->GetStorageGrammar() == FormulaGrammar::GRAM_PODF) ?
+ FormulaGrammar::GRAM_PODF : FormulaGrammar::GRAM_ODFF;
+
+ /* Check if we have no namespace at all. The value XML_NAMESPACE_NONE
+ indicates that there is no colon. If the first character of the
+ attribute value is the equality sign, the value XML_NAMESPACE_UNKNOWN
+ indicates that there is a colon somewhere in the formula string. */
+ if( (nNsId == XML_NAMESPACE_NONE) || ((nNsId == XML_NAMESPACE_UNKNOWN) && (rAttrValue.toChar() == '=')) )
+ {
+ rFormula = rAttrValue; // return entire string as formula
+ reGrammar = eDefaultGrammar;
+ return;
+ }
+
+ /* Check if a namespace URL could be resolved from the attribute value.
+ Use that namespace only, if the Calc document knows an associated
+ external formula parser. This prevents that the range operator in
+ conjunction with defined names is confused as namespaces prefix, e.g.
+ in the expression 'table:A1' where 'table' is a named reference. */
+ if( ((nNsId & XML_NAMESPACE_UNKNOWN_FLAG) != 0) && (rFormulaNmsp.getLength() > 0) &&
+ GetDocument()->GetFormulaParserPool().hasFormulaParser( rFormulaNmsp ) )
+ {
+ reGrammar = FormulaGrammar::GRAM_EXTERNAL;
+ return;
+ }
+
+ /* All attempts failed (e.g. no namespace and no leading equality sign, or
+ an invalid namespace prefix), continue with the entire attribute value. */
+ rFormula = rAttrValue;
+ rFormulaNmsp = OUString(); // remove any namespace string
+ reGrammar = eDefaultGrammar;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */