LCOV - code coverage report
Current view: top level - sc/source/filter/xml - xmlimprt.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 949 1249 76.0 %
Date: 2014-11-03 Functions: 144 175 82.3 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include <sal/config.h>
      21             : 
      22             : #include <o3tl/ptr_container.hxx>
      23             : #include <svl/zforlist.hxx>
      24             : #include <sal/macros.h>
      25             : 
      26             : #include <xmloff/nmspmap.hxx>
      27             : #include <xmloff/xmlnmspe.hxx>
      28             : #include <xmloff/i18nmap.hxx>
      29             : #include <xmloff/xmltkmap.hxx>
      30             : #include <xmloff/xmlictxt.hxx>
      31             : #include <xmloff/xmlmetai.hxx>
      32             : #include <sfx2/objsh.hxx>
      33             : #include <xmloff/xmlnumfi.hxx>
      34             : #include <xmloff/xmlscripti.hxx>
      35             : #include <xmloff/XMLFontStylesContext.hxx>
      36             : #include <xmloff/DocumentSettingsContext.hxx>
      37             : #include <xmloff/xmluconv.hxx>
      38             : #include <xmloff/numehelp.hxx>
      39             : #include <xmloff/xmltoken.hxx>
      40             : #include <xmloff/xmlerror.hxx>
      41             : 
      42             : #include <sax/tools/converter.hxx>
      43             : 
      44             : #include <svl/zformat.hxx>
      45             : #include <svl/languageoptions.hxx>
      46             : #include <editeng/editstat.hxx>
      47             : 
      48             : #include "appluno.hxx"
      49             : #include "xmlimprt.hxx"
      50             : #include "document.hxx"
      51             : #include "docsh.hxx"
      52             : #include "docuno.hxx"
      53             : #include "nameuno.hxx"
      54             : #include "xmlbodyi.hxx"
      55             : #include "xmlstyli.hxx"
      56             : #include "ViewSettingsSequenceDefines.hxx"
      57             : 
      58             : #include "patattr.hxx"
      59             : 
      60             : #include "XMLConverter.hxx"
      61             : #include "XMLDetectiveContext.hxx"
      62             : #include "XMLTableShapeImportHelper.hxx"
      63             : #include "XMLChangeTrackingImportHelper.hxx"
      64             : #include "chgviset.hxx"
      65             : #include "XMLStylesImportHelper.hxx"
      66             : #include "sheetdata.hxx"
      67             : #include "rangeutl.hxx"
      68             : #include "postit.hxx"
      69             : #include "formulaparserpool.hxx"
      70             : #include "externalrefmgr.hxx"
      71             : #include "editutil.hxx"
      72             : #include "editattributemap.hxx"
      73             : #include "documentimport.hxx"
      74             : #include "pivotsource.hxx"
      75             : #include <unonames.hxx>
      76             : #include <numformat.hxx>
      77             : 
      78             : #include <comphelper/extract.hxx>
      79             : 
      80             : #include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
      81             : #include <com/sun/star/frame/XModel.hpp>
      82             : #include <com/sun/star/sheet/XSheetCellRange.hpp>
      83             : #include <com/sun/star/sheet/XCellRangeAddressable.hpp>
      84             : #include <com/sun/star/sheet/XSpreadsheetDocument.hpp>
      85             : #include <com/sun/star/util/XMergeable.hpp>
      86             : #include <com/sun/star/sheet/CellInsertMode.hpp>
      87             : #include <com/sun/star/sheet/XCellRangeMovement.hpp>
      88             : #include <com/sun/star/document/XActionLockable.hpp>
      89             : #include <com/sun/star/util/NumberFormat.hpp>
      90             : #include <com/sun/star/util/XNumberFormatTypes.hpp>
      91             : #include <com/sun/star/sheet/XNamedRanges.hpp>
      92             : #include <com/sun/star/sheet/NamedRangeFlag.hpp>
      93             : #include <com/sun/star/sheet/XNamedRange.hpp>
      94             : #include <com/sun/star/sheet/XLabelRanges.hpp>
      95             : #include <com/sun/star/io/XSeekable.hpp>
      96             : #include <com/sun/star/beans/XPropertySet.hpp>
      97             : 
      98             : #include <memory>
      99             : #include <utility>
     100             : 
     101             : #define SC_LOCALE           "Locale"
     102             : #define SC_STANDARDFORMAT   "StandardFormat"
     103             : #define SC_CURRENCYSYMBOL   "CurrencySymbol"
     104             : #define SC_REPEAT_COLUMN "repeat-column"
     105             : #define SC_REPEAT_ROW "repeat-row"
     106             : #define SC_FILTER "filter"
     107             : #define SC_PRINT_RANGE "print-range"
     108             : 
     109             : using namespace com::sun::star;
     110             : using namespace ::xmloff::token;
     111             : using namespace ::formula;
     112             : using ::com::sun::star::uno::Reference;
     113             : using ::com::sun::star::uno::UNO_QUERY;
     114             : 
     115         366 : OUString SAL_CALL ScXMLImport_getImplementationName() throw()
     116             : {
     117         366 :     return OUString( "com.sun.star.comp.Calc.XMLOasisImporter" );
     118             : }
     119             : 
     120           4 : uno::Sequence< OUString > SAL_CALL ScXMLImport_getSupportedServiceNames() throw()
     121             : {
     122           4 :     const OUString aServiceName( ScXMLImport_getImplementationName() );
     123           4 :     return uno::Sequence< OUString > ( &aServiceName, 1 );
     124             : }
     125             : 
     126          58 : uno::Reference< uno::XInterface > SAL_CALL ScXMLImport_createInstance(
     127             :     const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception )
     128             : {
     129             :     // #110680#
     130             :     // return (cppu::OWeakObject*)new ScXMLImport(IMPORT_ALL);
     131          58 :     return (cppu::OWeakObject*)new ScXMLImport( comphelper::getComponentContext(rSMgr), ScXMLImport_getImplementationName(), IMPORT_ALL );
     132             : }
     133             : 
     134         624 : OUString SAL_CALL ScXMLImport_Meta_getImplementationName() throw()
     135             : {
     136         624 :     return OUString( "com.sun.star.comp.Calc.XMLOasisMetaImporter" );
     137             : }
     138             : 
     139          46 : uno::Sequence< OUString > SAL_CALL ScXMLImport_Meta_getSupportedServiceNames() throw()
     140             : {
     141          46 :     const OUString aServiceName( ScXMLImport_Meta_getImplementationName() );
     142          46 :     return uno::Sequence< OUString > ( &aServiceName, 1 );
     143             : }
     144             : 
     145         236 : uno::Reference< uno::XInterface > SAL_CALL ScXMLImport_Meta_createInstance(
     146             :     const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception )
     147             : {
     148             :     // #110680#
     149             :     // return (cppu::OWeakObject*)new ScXMLImport(IMPORT_META);
     150         236 :     return (cppu::OWeakObject*)new ScXMLImport( comphelper::getComponentContext(rSMgr), ScXMLImport_Meta_getImplementationName(), IMPORT_META );
     151             : }
     152             : 
     153         612 : OUString SAL_CALL ScXMLImport_Styles_getImplementationName() throw()
     154             : {
     155         612 :     return OUString( "com.sun.star.comp.Calc.XMLOasisStylesImporter" );
     156             : }
     157             : 
     158          46 : uno::Sequence< OUString > SAL_CALL ScXMLImport_Styles_getSupportedServiceNames() throw()
     159             : {
     160          46 :     const OUString aServiceName( ScXMLImport_Styles_getImplementationName() );
     161          46 :     return uno::Sequence< OUString > ( &aServiceName, 1 );
     162             : }
     163             : 
     164         270 : uno::Reference< uno::XInterface > SAL_CALL ScXMLImport_Styles_createInstance(
     165             :     const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception )
     166             : {
     167             :     // #110680#
     168             :     // return (cppu::OWeakObject*)new ScXMLImport(IMPORT_STYLES|IMPORT_AUTOSTYLES|IMPORT_MASTERSTYLES|IMPORT_FONTDECLS);
     169         270 :     return (cppu::OWeakObject*)new ScXMLImport( comphelper::getComponentContext(rSMgr), ScXMLImport_Styles_getImplementationName(), IMPORT_STYLES|IMPORT_AUTOSTYLES|IMPORT_MASTERSTYLES|IMPORT_FONTDECLS);
     170             : }
     171             : 
     172         560 : OUString SAL_CALL ScXMLImport_Content_getImplementationName() throw()
     173             : {
     174         560 :     return OUString( "com.sun.star.comp.Calc.XMLOasisContentImporter" );
     175             : }
     176             : 
     177          46 : uno::Sequence< OUString > SAL_CALL ScXMLImport_Content_getSupportedServiceNames() throw()
     178             : {
     179          46 :     const OUString aServiceName( ScXMLImport_Content_getImplementationName() );
     180          46 :     return uno::Sequence< OUString > ( &aServiceName, 1 );
     181             : }
     182             : 
     183         264 : uno::Reference< uno::XInterface > SAL_CALL ScXMLImport_Content_createInstance(
     184             :     const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception )
     185             : {
     186             :     // #110680#
     187             :     // return (cppu::OWeakObject*)new ScXMLImport(IMPORT_META|IMPORT_STYLES|IMPORT_MASTERSTYLES|IMPORT_AUTOSTYLES|IMPORT_CONTENT|IMPORT_SCRIPTS|IMPORT_SETTINGS|IMPORT_FONTDECLS);
     188         264 :     return (cppu::OWeakObject*)new ScXMLImport( comphelper::getComponentContext(rSMgr), ScXMLImport_Content_getImplementationName(), IMPORT_AUTOSTYLES|IMPORT_CONTENT|IMPORT_SCRIPTS|IMPORT_FONTDECLS);
     189             : }
     190             : 
     191         520 : OUString SAL_CALL ScXMLImport_Settings_getImplementationName() throw()
     192             : {
     193         520 :     return OUString( "com.sun.star.comp.Calc.XMLOasisSettingsImporter" );
     194             : }
     195             : 
     196          46 : uno::Sequence< OUString > SAL_CALL ScXMLImport_Settings_getSupportedServiceNames() throw()
     197             : {
     198          46 :     const OUString aServiceName( ScXMLImport_Settings_getImplementationName() );
     199          46 :     return uno::Sequence< OUString > ( &aServiceName, 1 );
     200             : }
     201             : 
     202         270 : uno::Reference< uno::XInterface > SAL_CALL ScXMLImport_Settings_createInstance(
     203             :     const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception )
     204             : {
     205             :     // #110680#
     206             :     // return (cppu::OWeakObject*)new ScXMLImport(IMPORT_SETTINGS);
     207         270 :     return (cppu::OWeakObject*)new ScXMLImport( comphelper::getComponentContext(rSMgr), ScXMLImport_Settings_getImplementationName(), IMPORT_SETTINGS );
     208             : }
     209             : 
     210       21130 : const SvXMLTokenMap& ScXMLImport::GetTableRowCellAttrTokenMap()
     211             : {
     212             :     static const SvXMLTokenMapEntry aTableRowCellAttrTokenMap[] =
     213             :     {
     214             :         { XML_NAMESPACE_TABLE,  XML_STYLE_NAME,                     XML_TOK_TABLE_ROW_CELL_ATTR_STYLE_NAME              },
     215             :         { XML_NAMESPACE_TABLE,  XML_CONTENT_VALIDATION_NAME,        XML_TOK_TABLE_ROW_CELL_ATTR_CONTENT_VALIDATION_NAME },
     216             :         { XML_NAMESPACE_TABLE,  XML_NUMBER_ROWS_SPANNED,            XML_TOK_TABLE_ROW_CELL_ATTR_SPANNED_ROWS            },
     217             :         { XML_NAMESPACE_TABLE,  XML_NUMBER_COLUMNS_SPANNED,         XML_TOK_TABLE_ROW_CELL_ATTR_SPANNED_COLS            },
     218             :         { XML_NAMESPACE_TABLE,  XML_NUMBER_MATRIX_COLUMNS_SPANNED,  XML_TOK_TABLE_ROW_CELL_ATTR_SPANNED_MATRIX_COLS     },
     219             :         { XML_NAMESPACE_TABLE,  XML_NUMBER_MATRIX_ROWS_SPANNED,     XML_TOK_TABLE_ROW_CELL_ATTR_SPANNED_MATRIX_ROWS     },
     220             :         { XML_NAMESPACE_TABLE,  XML_NUMBER_COLUMNS_REPEATED,        XML_TOK_TABLE_ROW_CELL_ATTR_REPEATED                },
     221             :         { XML_NAMESPACE_OFFICE, XML_VALUE_TYPE,                     XML_TOK_TABLE_ROW_CELL_ATTR_VALUE_TYPE              },
     222             :         { XML_NAMESPACE_CALC_EXT, XML_VALUE_TYPE,                   XML_TOK_TABLE_ROW_CELL_ATTR_NEW_VALUE_TYPE          },
     223             :         { XML_NAMESPACE_OFFICE, XML_VALUE,                          XML_TOK_TABLE_ROW_CELL_ATTR_VALUE                   },
     224             :         { XML_NAMESPACE_OFFICE, XML_DATE_VALUE,                     XML_TOK_TABLE_ROW_CELL_ATTR_DATE_VALUE              },
     225             :         { XML_NAMESPACE_OFFICE, XML_TIME_VALUE,                     XML_TOK_TABLE_ROW_CELL_ATTR_TIME_VALUE              },
     226             :         { XML_NAMESPACE_OFFICE, XML_STRING_VALUE,                   XML_TOK_TABLE_ROW_CELL_ATTR_STRING_VALUE            },
     227             :         { XML_NAMESPACE_OFFICE, XML_BOOLEAN_VALUE,                  XML_TOK_TABLE_ROW_CELL_ATTR_BOOLEAN_VALUE           },
     228             :         { XML_NAMESPACE_TABLE,  XML_FORMULA,                        XML_TOK_TABLE_ROW_CELL_ATTR_FORMULA                 },
     229             :         { XML_NAMESPACE_OFFICE, XML_CURRENCY,                       XML_TOK_TABLE_ROW_CELL_ATTR_CURRENCY                },
     230             :         XML_TOKEN_MAP_END
     231             :     };
     232             : 
     233       21130 :     if ( !pTableRowCellAttrTokenMap )
     234         322 :         pTableRowCellAttrTokenMap = new SvXMLTokenMap( aTableRowCellAttrTokenMap );
     235       21130 :     return *pTableRowCellAttrTokenMap;
     236             : }
     237             : 
     238             : // NB: virtually inherit so we can multiply inherit properly
     239             : //     in ScXMLFlatDocContext_Impl
     240             : class ScXMLDocContext_Impl : public virtual SvXMLImportContext
     241             : {
     242             : protected:
     243        7990 :     ScXMLImport& GetScImport() { return static_cast<ScXMLImport&>(GetImport()); }
     244             : 
     245             : public:
     246             : 
     247             :     ScXMLDocContext_Impl( ScXMLImport& rImport,
     248             :         sal_uInt16 nPrfx,
     249             :         const OUString& rLName,
     250             :         const uno::Reference<xml::sax::XAttributeList>& xAttrList );
     251             :     virtual ~ScXMLDocContext_Impl();
     252             : 
     253             :     virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
     254             :         const OUString& rLocalName,
     255             :         const uno::Reference<xml::sax::XAttributeList>& xAttrList ) SAL_OVERRIDE;
     256             : };
     257             : 
     258         852 : ScXMLDocContext_Impl::ScXMLDocContext_Impl( ScXMLImport& rImport, sal_uInt16 nPrfx,
     259             :                                            const OUString& rLName,
     260             :                                            const uno::Reference<xml::sax::XAttributeList>& /* xAttrList */ ) :
     261         852 : SvXMLImportContext( rImport, nPrfx, rLName )
     262             : {
     263             : 
     264         852 : }
     265             : 
     266        1646 : ScXMLDocContext_Impl::~ScXMLDocContext_Impl()
     267             : {
     268        1646 : }
     269             : 
     270             : // context for flat file xml format
     271             : class ScXMLFlatDocContext_Impl
     272             :     : public ScXMLDocContext_Impl, public SvXMLMetaDocumentContext
     273             : {
     274             : public:
     275             :     ScXMLFlatDocContext_Impl( ScXMLImport& i_rImport,
     276             :         sal_uInt16 i_nPrefix, const OUString & i_rLName,
     277             :         const uno::Reference<xml::sax::XAttributeList>& i_xAttrList,
     278             :         const uno::Reference<document::XDocumentProperties>& i_xDocProps);
     279             : 
     280             :     virtual ~ScXMLFlatDocContext_Impl();
     281             : 
     282             :     virtual SvXMLImportContext *CreateChildContext(
     283             :         sal_uInt16 i_nPrefix, const OUString& i_rLocalName,
     284             :         const uno::Reference<xml::sax::XAttributeList>& i_xAttrList) SAL_OVERRIDE;
     285             : };
     286             : 
     287          58 : ScXMLFlatDocContext_Impl::ScXMLFlatDocContext_Impl( ScXMLImport& i_rImport,
     288             :                                                    sal_uInt16 i_nPrefix, const OUString & i_rLName,
     289             :                                                    const uno::Reference<xml::sax::XAttributeList>& i_xAttrList,
     290             :                                                    const uno::Reference<document::XDocumentProperties>& i_xDocProps) :
     291             : SvXMLImportContext(i_rImport, i_nPrefix, i_rLName),
     292             : ScXMLDocContext_Impl(i_rImport, i_nPrefix, i_rLName, i_xAttrList),
     293             : SvXMLMetaDocumentContext(i_rImport, i_nPrefix, i_rLName,
     294          58 :                          i_xDocProps)
     295             : {
     296          58 : }
     297             : 
     298         116 : ScXMLFlatDocContext_Impl::~ScXMLFlatDocContext_Impl() { }
     299             : 
     300         296 : SvXMLImportContext *ScXMLFlatDocContext_Impl::CreateChildContext(
     301             :     sal_uInt16 i_nPrefix, const OUString& i_rLocalName,
     302             :     const uno::Reference<xml::sax::XAttributeList>& i_xAttrList)
     303             : {
     304             :     // behave like meta base class iff we encounter office:meta
     305         296 :     const SvXMLTokenMap& rTokenMap = GetScImport().GetDocElemTokenMap();
     306         296 :     if ( XML_TOK_DOC_META == rTokenMap.Get( i_nPrefix, i_rLocalName ) ) {
     307             :         return SvXMLMetaDocumentContext::CreateChildContext(
     308           2 :             i_nPrefix, i_rLocalName, i_xAttrList );
     309             :     } else {
     310             :         return ScXMLDocContext_Impl::CreateChildContext(
     311         294 :             i_nPrefix, i_rLocalName, i_xAttrList );
     312             :     }
     313             : }
     314             : 
     315             : class ScXMLBodyContext_Impl : public SvXMLImportContext
     316             : {
     317         322 :     ScXMLImport& GetScImport() { return static_cast<ScXMLImport&>(GetImport()); }
     318             : 
     319             : public:
     320             : 
     321             :     ScXMLBodyContext_Impl( ScXMLImport& rImport, sal_uInt16 nPrfx,
     322             :         const OUString& rLName,
     323             :         const uno::Reference< xml::sax::XAttributeList > & xAttrList );
     324             :     virtual ~ScXMLBodyContext_Impl();
     325             : 
     326             :     virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
     327             :         const OUString& rLocalName,
     328             :         const uno::Reference< xml::sax::XAttributeList > & xAttrList ) SAL_OVERRIDE;
     329             : };
     330             : 
     331         322 : ScXMLBodyContext_Impl::ScXMLBodyContext_Impl( ScXMLImport& rImport,
     332             :                                              sal_uInt16 nPrfx, const OUString& rLName,
     333             :                                              const uno::Reference< xml::sax::XAttributeList > & /* xAttrList */ ) :
     334         322 : SvXMLImportContext( rImport, nPrfx, rLName )
     335             : {
     336         322 : }
     337             : 
     338         644 : ScXMLBodyContext_Impl::~ScXMLBodyContext_Impl()
     339             : {
     340         644 : }
     341             : 
     342         322 : SvXMLImportContext *ScXMLBodyContext_Impl::CreateChildContext(
     343             :     sal_uInt16 /* nPrefix */,
     344             :     const OUString& rLocalName,
     345             :     const uno::Reference< xml::sax::XAttributeList > & xAttrList )
     346             : {
     347         322 :     return GetScImport().CreateBodyContext( rLocalName, xAttrList );
     348             : }
     349             : 
     350        2672 : SvXMLImportContext *ScXMLDocContext_Impl::CreateChildContext( sal_uInt16 nPrefix,
     351             :                                                              const OUString& rLocalName,
     352             :                                                              const uno::Reference<xml::sax::XAttributeList>& xAttrList )
     353             : {
     354        2672 :     SvXMLImportContext *pContext(0);
     355             : 
     356        2672 :     const SvXMLTokenMap& rTokenMap(GetScImport().GetDocElemTokenMap());
     357        2672 :     switch( rTokenMap.Get( nPrefix, rLocalName ) )
     358             :     {
     359             :     case XML_TOK_DOC_FONTDECLS:
     360         586 :         if (GetScImport().getImportFlags() & IMPORT_FONTDECLS)
     361         586 :             pContext = GetScImport().CreateFontDeclsContext(nPrefix, rLocalName, xAttrList);
     362         586 :         break;
     363             :     case XML_TOK_DOC_STYLES:
     364         324 :         if (GetScImport().getImportFlags() & IMPORT_STYLES)
     365         324 :             pContext = GetScImport().CreateStylesContext( rLocalName, xAttrList, false);
     366         324 :         break;
     367             :     case XML_TOK_DOC_AUTOSTYLES:
     368         586 :         if (GetScImport().getImportFlags() & IMPORT_AUTOSTYLES)
     369         586 :             pContext = GetScImport().CreateStylesContext( rLocalName, xAttrList, true);
     370         586 :         break;
     371             :     case XML_TOK_DOC_MASTERSTYLES:
     372         322 :         if (GetScImport().getImportFlags() & IMPORT_MASTERSTYLES)
     373         322 :             pContext = new ScXMLMasterStylesContext( GetImport(), nPrefix, rLocalName,
     374         322 :             xAttrList );
     375         322 :         break;
     376             :     case XML_TOK_DOC_META:
     377             :         DBG_WARNING("XML_TOK_DOC_META: should not have come here, maybe document is invalid?");
     378           0 :         break;
     379             :     case XML_TOK_DOC_SCRIPTS:
     380         266 :         if (GetScImport().getImportFlags() & IMPORT_SCRIPTS)
     381         266 :             pContext = GetScImport().CreateScriptContext( rLocalName );
     382         266 :         break;
     383             :     case XML_TOK_DOC_BODY:
     384         322 :         if (GetScImport().getImportFlags() & IMPORT_CONTENT)
     385             :             pContext = new ScXMLBodyContext_Impl( GetScImport(), nPrefix,
     386         322 :             rLocalName, xAttrList );
     387         322 :         break;
     388             :     case XML_TOK_DOC_SETTINGS:
     389         266 :         if (GetScImport().getImportFlags() & IMPORT_SETTINGS)
     390         266 :             pContext = new XMLDocumentSettingsContext(GetScImport(), nPrefix, rLocalName, xAttrList );
     391         266 :         break;
     392             :     }
     393             : 
     394        2672 :     if(!pContext)
     395           0 :         pContext = new SvXMLImportContext( GetImport(), nPrefix, rLocalName );
     396             : 
     397        2672 :     return pContext;
     398             : }
     399             : 
     400        2968 : const SvXMLTokenMap& ScXMLImport::GetDocElemTokenMap()
     401             : {
     402        2968 :     if( !pDocElemTokenMap )
     403             :     {
     404             :         static const SvXMLTokenMapEntry aDocTokenMap[] =
     405             :         {
     406             :             { XML_NAMESPACE_OFFICE, XML_FONT_FACE_DECLS,    XML_TOK_DOC_FONTDECLS           },
     407             :             { XML_NAMESPACE_OFFICE, XML_STYLES,             XML_TOK_DOC_STYLES              },
     408             :             { XML_NAMESPACE_OFFICE, XML_AUTOMATIC_STYLES,   XML_TOK_DOC_AUTOSTYLES          },
     409             :             { XML_NAMESPACE_OFFICE, XML_MASTER_STYLES,      XML_TOK_DOC_MASTERSTYLES        },
     410             :             { XML_NAMESPACE_OFFICE, XML_META,               XML_TOK_DOC_META                },
     411             :             { XML_NAMESPACE_OFFICE, XML_SCRIPTS,            XML_TOK_DOC_SCRIPTS             },
     412             :             { XML_NAMESPACE_OFFICE, XML_BODY,               XML_TOK_DOC_BODY                },
     413             :             { XML_NAMESPACE_OFFICE, XML_SETTINGS,           XML_TOK_DOC_SETTINGS            },
     414             :             XML_TOKEN_MAP_END
     415             :         };
     416             : 
     417         852 :         pDocElemTokenMap = new SvXMLTokenMap( aDocTokenMap );
     418             : 
     419             :     } // if( !pDocElemTokenMap )
     420             : 
     421        2968 :     return *pDocElemTokenMap;
     422             : }
     423             : 
     424         866 : const SvXMLTokenMap& ScXMLImport::GetBodyElemTokenMap()
     425             : {
     426         866 :     if( !pBodyElemTokenMap )
     427             :     {
     428             :         static const SvXMLTokenMapEntry aBodyTokenMap[] =
     429             :         {
     430             :             { XML_NAMESPACE_TABLE, XML_TRACKED_CHANGES,         XML_TOK_BODY_TRACKED_CHANGES        },
     431             :             { XML_NAMESPACE_TABLE, XML_CALCULATION_SETTINGS,    XML_TOK_BODY_CALCULATION_SETTINGS   },
     432             :             { XML_NAMESPACE_TABLE, XML_CONTENT_VALIDATIONS,     XML_TOK_BODY_CONTENT_VALIDATIONS    },
     433             :             { XML_NAMESPACE_TABLE, XML_LABEL_RANGES,            XML_TOK_BODY_LABEL_RANGES           },
     434             :             { XML_NAMESPACE_TABLE, XML_TABLE,                   XML_TOK_BODY_TABLE                  },
     435             :             { XML_NAMESPACE_TABLE, XML_NAMED_EXPRESSIONS,       XML_TOK_BODY_NAMED_EXPRESSIONS      },
     436             :             { XML_NAMESPACE_TABLE, XML_DATABASE_RANGES,         XML_TOK_BODY_DATABASE_RANGES        },
     437             :             { XML_NAMESPACE_TABLE, XML_DATABASE_RANGE,          XML_TOK_BODY_DATABASE_RANGE         },
     438             :             { XML_NAMESPACE_TABLE, XML_DATA_PILOT_TABLES,       XML_TOK_BODY_DATA_PILOT_TABLES      },
     439             :             { XML_NAMESPACE_TABLE, XML_CONSOLIDATION,           XML_TOK_BODY_CONSOLIDATION          },
     440             :             { XML_NAMESPACE_TABLE, XML_DDE_LINKS,               XML_TOK_BODY_DDE_LINKS              },
     441             :             { XML_NAMESPACE_CALC_EXT, XML_DATA_STREAM_SOURCE,   XML_TOK_BODY_DATA_STREAM_SOURCE     },
     442             :             XML_TOKEN_MAP_END
     443             :         };
     444             : 
     445         322 :         pBodyElemTokenMap = new SvXMLTokenMap( aBodyTokenMap );
     446             :     } // if( !pBodyElemTokenMap )
     447             : 
     448         866 :     return *pBodyElemTokenMap;
     449             : }
     450             : 
     451           4 : const SvXMLTokenMap& ScXMLImport::GetContentValidationsElemTokenMap()
     452             : {
     453           4 :     if( !pContentValidationsElemTokenMap )
     454             :     {
     455             :         static const SvXMLTokenMapEntry aContentValidationsElemTokenMap[] =
     456             :         {
     457             :             { XML_NAMESPACE_TABLE, XML_CONTENT_VALIDATION,  XML_TOK_CONTENT_VALIDATION  },
     458             :             XML_TOKEN_MAP_END
     459             :         };
     460             : 
     461           2 :         pContentValidationsElemTokenMap = new SvXMLTokenMap( aContentValidationsElemTokenMap );
     462             :     } // if( !pContentValidationsElemTokenMap )
     463             : 
     464           4 :     return *pContentValidationsElemTokenMap;
     465             : }
     466             : 
     467           4 : const SvXMLTokenMap& ScXMLImport::GetContentValidationElemTokenMap()
     468             : {
     469           4 :     if( !pContentValidationElemTokenMap )
     470             :     {
     471             :         static const SvXMLTokenMapEntry aContentValidationElemTokenMap[] =
     472             :         {
     473             :             { XML_NAMESPACE_TABLE,  XML_HELP_MESSAGE,    XML_TOK_CONTENT_VALIDATION_ELEM_HELP_MESSAGE    },
     474             :             { XML_NAMESPACE_TABLE,  XML_ERROR_MESSAGE,   XML_TOK_CONTENT_VALIDATION_ELEM_ERROR_MESSAGE   },
     475             :             { XML_NAMESPACE_TABLE,  XML_ERROR_MACRO,     XML_TOK_CONTENT_VALIDATION_ELEM_ERROR_MACRO     },
     476             :             { XML_NAMESPACE_OFFICE, XML_EVENT_LISTENERS, XML_TOK_CONTENT_VALIDATION_ELEM_EVENT_LISTENERS },
     477             :             XML_TOKEN_MAP_END
     478             :         };
     479             : 
     480           2 :         pContentValidationElemTokenMap = new SvXMLTokenMap( aContentValidationElemTokenMap );
     481             :     } // if( !pContentValidationElemTokenMap )
     482             : 
     483           4 :     return *pContentValidationElemTokenMap;
     484             : }
     485             : 
     486           4 : const SvXMLTokenMap& ScXMLImport::GetContentValidationAttrTokenMap()
     487             : {
     488           4 :     if( !pContentValidationAttrTokenMap )
     489             :     {
     490             :         static const SvXMLTokenMapEntry aContentValidationAttrTokenMap[] =
     491             :         {
     492             :             { XML_NAMESPACE_TABLE, XML_NAME,                XML_TOK_CONTENT_VALIDATION_NAME                 },
     493             :             { XML_NAMESPACE_TABLE, XML_CONDITION,           XML_TOK_CONTENT_VALIDATION_CONDITION            },
     494             :             { XML_NAMESPACE_TABLE, XML_BASE_CELL_ADDRESS,   XML_TOK_CONTENT_VALIDATION_BASE_CELL_ADDRESS    },
     495             :             { XML_NAMESPACE_TABLE, XML_ALLOW_EMPTY_CELL,    XML_TOK_CONTENT_VALIDATION_ALLOW_EMPTY_CELL     },
     496             :             { XML_NAMESPACE_TABLE, XML_DISPLAY_LIST,        XML_TOK_CONTENT_VALIDATION_DISPLAY_LIST         },
     497             :             XML_TOKEN_MAP_END
     498             :         };
     499             : 
     500           2 :         pContentValidationAttrTokenMap = new SvXMLTokenMap( aContentValidationAttrTokenMap );
     501             :     } // if( !pContentValidationAttrTokenMap )
     502             : 
     503           4 :     return *pContentValidationAttrTokenMap;
     504             : }
     505             : 
     506           4 : const SvXMLTokenMap& ScXMLImport::GetContentValidationMessageElemTokenMap()
     507             : {
     508           4 :     if( !pContentValidationMessageElemTokenMap )
     509             :     {
     510             :         static const SvXMLTokenMapEntry aContentValidationMessageElemTokenMap[] =
     511             :         {
     512             :             { XML_NAMESPACE_TEXT, XML_P,    XML_TOK_P   },
     513             :             XML_TOKEN_MAP_END
     514             :         };
     515             : 
     516           2 :         pContentValidationMessageElemTokenMap = new SvXMLTokenMap( aContentValidationMessageElemTokenMap );
     517             :     } // if( !pContentValidationMessageElemTokenMap )
     518             : 
     519           4 :     return *pContentValidationMessageElemTokenMap;
     520             : }
     521             : 
     522           0 : const SvXMLTokenMap& ScXMLImport::GetContentValidationHelpMessageAttrTokenMap()
     523             : {
     524           0 :     if( !pContentValidationHelpMessageAttrTokenMap )
     525             :     {
     526             :         static const SvXMLTokenMapEntry aContentValidationHelpMessageAttrTokenMap[] =
     527             :         {
     528             :             { XML_NAMESPACE_TABLE, XML_TITLE,   XML_TOK_HELP_MESSAGE_ATTR_TITLE     },
     529             :             { XML_NAMESPACE_TABLE, XML_DISPLAY, XML_TOK_HELP_MESSAGE_ATTR_DISPLAY   },
     530             :             XML_TOKEN_MAP_END
     531             :         };
     532             : 
     533           0 :         pContentValidationHelpMessageAttrTokenMap = new SvXMLTokenMap( aContentValidationHelpMessageAttrTokenMap );
     534             :     } // if( !pContentValidationHelpMessageAttrTokenMap )
     535             : 
     536           0 :     return *pContentValidationHelpMessageAttrTokenMap;
     537             : }
     538             : 
     539           4 : const SvXMLTokenMap& ScXMLImport::GetContentValidationErrorMessageAttrTokenMap()
     540             : {
     541           4 :     if( !pContentValidationErrorMessageAttrTokenMap )
     542             :     {
     543             :         static const SvXMLTokenMapEntry aContentValidationErrorMessageAttrTokenMap[] =
     544             :         {
     545             :             { XML_NAMESPACE_TABLE, XML_TITLE,           XML_TOK_ERROR_MESSAGE_ATTR_TITLE        },
     546             :             { XML_NAMESPACE_TABLE, XML_DISPLAY,         XML_TOK_ERROR_MESSAGE_ATTR_DISPLAY      },
     547             :             { XML_NAMESPACE_TABLE, XML_MESSAGE_TYPE,    XML_TOK_ERROR_MESSAGE_ATTR_MESSAGE_TYPE },
     548             :             XML_TOKEN_MAP_END
     549             :         };
     550             : 
     551           2 :         pContentValidationErrorMessageAttrTokenMap = new SvXMLTokenMap( aContentValidationErrorMessageAttrTokenMap );
     552             :     } // if( !pContentValidationErrorMessageAttrTokenMap )
     553             : 
     554           4 :     return *pContentValidationErrorMessageAttrTokenMap;
     555             : }
     556             : 
     557           0 : const SvXMLTokenMap& ScXMLImport::GetContentValidationErrorMacroAttrTokenMap()
     558             : {
     559           0 :     if( !pContentValidationErrorMacroAttrTokenMap )
     560             :     {
     561             :         static const SvXMLTokenMapEntry aContentValidationErrorMacroAttrTokenMap[] =
     562             :         {
     563             :             { XML_NAMESPACE_TABLE, XML_NAME,    XML_TOK_ERROR_MACRO_ATTR_NAME       },
     564             :             { XML_NAMESPACE_TABLE, XML_EXECUTE, XML_TOK_ERROR_MACRO_ATTR_EXECUTE    },
     565             :             XML_TOKEN_MAP_END
     566             :         };
     567             : 
     568           0 :         pContentValidationErrorMacroAttrTokenMap = new SvXMLTokenMap( aContentValidationErrorMacroAttrTokenMap );
     569             :     } // if( !pContentValidationErrorMacroAttrTokenMap )
     570             : 
     571           0 :     return *pContentValidationErrorMacroAttrTokenMap;
     572             : }
     573             : 
     574         132 : const SvXMLTokenMap& ScXMLImport::GetCondFormatsTokenMap()
     575             : {
     576         132 :     if( !pCondFormatsTokenMap )
     577             :     {
     578             :         static const SvXMLTokenMapEntry aCondFormatsElemTokenMap[] =
     579             :         {
     580             :             { XML_NAMESPACE_CALC_EXT, XML_CONDITIONAL_FORMAT, XML_TOK_CONDFORMATS_CONDFORMAT },
     581             :             XML_TOKEN_MAP_END
     582             :         };
     583             : 
     584          24 :         pCondFormatsTokenMap = new SvXMLTokenMap( aCondFormatsElemTokenMap );
     585             :     }
     586             : 
     587         132 :     return *pCondFormatsTokenMap;
     588             : }
     589             : 
     590         180 : const SvXMLTokenMap& ScXMLImport::GetCondFormatTokenMap()
     591             : {
     592         180 :     if( !pCondFormatTokenMap )
     593             :     {
     594             :         static const SvXMLTokenMapEntry aCondFormatElemTokenMap[] =
     595             :         {
     596             :             { XML_NAMESPACE_CALC_EXT, XML_COLOR_SCALE, XML_TOK_CONDFORMAT_COLORSCALE },
     597             :             { XML_NAMESPACE_CALC_EXT, XML_DATA_BAR, XML_TOK_CONDFORMAT_DATABAR },
     598             :             { XML_NAMESPACE_CALC_EXT, XML_CONDITION, XML_TOK_CONDFORMAT_CONDITION },
     599             :             { XML_NAMESPACE_CALC_EXT, XML_ICON_SET, XML_TOK_CONDFORMAT_ICONSET },
     600             :             { XML_NAMESPACE_CALC_EXT, XML_DATE_IS, XML_TOK_CONDFORMAT_DATE },
     601             :             XML_TOKEN_MAP_END
     602             :         };
     603             : 
     604          24 :         pCondFormatTokenMap = new SvXMLTokenMap( aCondFormatElemTokenMap );
     605             :     }
     606             : 
     607         180 :     return *pCondFormatTokenMap;
     608             : }
     609             : 
     610         132 : const SvXMLTokenMap& ScXMLImport::GetCondFormatAttrMap()
     611             : {
     612         132 :     if( !pCondFormatAttrMap )
     613             :     {
     614             :         static const SvXMLTokenMapEntry aCondFormatAttrTokenMap[] =
     615             :         {
     616             :             { XML_NAMESPACE_CALC_EXT, XML_TARGET_RANGE_ADDRESS, XML_TOK_CONDFORMAT_TARGET_RANGE },
     617             :             XML_TOKEN_MAP_END
     618             :         };
     619             : 
     620          24 :         pCondFormatAttrMap = new SvXMLTokenMap( aCondFormatAttrTokenMap );
     621             :     }
     622             : 
     623         132 :     return *pCondFormatAttrMap;
     624             : }
     625             : 
     626           0 : const SvXMLTokenMap& ScXMLImport::GetCondDateAttrMap()
     627             : {
     628           0 :     if( !pCondDateAttrMap )
     629             :     {
     630             :         static const SvXMLTokenMapEntry aCondDateAttrTokenMap[] =
     631             :         {
     632             :             { XML_NAMESPACE_CALC_EXT, XML_DATE, XML_TOK_COND_DATE_VALUE },
     633             :             { XML_NAMESPACE_CALC_EXT, XML_STYLE, XML_TOK_COND_DATE_STYLE },
     634             :             XML_TOKEN_MAP_END
     635             :         };
     636             : 
     637           0 :         pCondDateAttrMap = new SvXMLTokenMap( aCondDateAttrTokenMap );
     638             :     }
     639             : 
     640           0 :     return *pCondDateAttrMap;
     641             : }
     642             : 
     643         114 : const SvXMLTokenMap& ScXMLImport::GetConditionAttrMap()
     644             : {
     645         114 :     if( !pConditionAttrMap )
     646             :     {
     647             :         static const SvXMLTokenMapEntry aConditionAttrTokenMap[] =
     648             :         {
     649             :             { XML_NAMESPACE_CALC_EXT, XML_VALUE, XML_TOK_CONDITION_VALUE },
     650             :             { XML_NAMESPACE_CALC_EXT, XML_APPLY_STYLE_NAME, XML_TOK_CONDITION_APPLY_STYLE_NAME },
     651             :             { XML_NAMESPACE_CALC_EXT, XML_BASE_CELL_ADDRESS, XML_TOK_CONDITION_BASE_CELL_ADDRESS },
     652             :             XML_TOKEN_MAP_END
     653             :         };
     654             : 
     655          12 :         pConditionAttrMap = new SvXMLTokenMap( aConditionAttrTokenMap );
     656             :     }
     657             : 
     658         114 :     return *pConditionAttrMap;
     659             : }
     660             : 
     661          90 : const SvXMLTokenMap& ScXMLImport::GetColorScaleTokenMap()
     662             : {
     663          90 :     if( !pColorScaleTokenMap )
     664             :     {
     665             :         static const SvXMLTokenMapEntry aColorScaleElemTokenMap[] =
     666             :         {
     667             :             { XML_NAMESPACE_CALC_EXT, XML_COLOR_SCALE_ENTRY, XML_TOK_COLORSCALE_COLORSCALEENTRY },
     668             :             XML_TOKEN_MAP_END
     669             :         };
     670             : 
     671           6 :         pColorScaleTokenMap = new SvXMLTokenMap( aColorScaleElemTokenMap );
     672             :     }
     673             : 
     674          90 :     return *pColorScaleTokenMap;
     675             : }
     676             : 
     677          90 : const SvXMLTokenMap& ScXMLImport::GetColorScaleEntryAttrMap()
     678             : {
     679          90 :     if( !pColorScaleEntryAttrTokenMap )
     680             :     {
     681             :         static const SvXMLTokenMapEntry aColorScaleAttrTokenMap[] =
     682             :         {
     683             :             { XML_NAMESPACE_CALC_EXT, XML_TYPE, XML_TOK_COLORSCALEENTRY_TYPE },
     684             :             { XML_NAMESPACE_CALC_EXT, XML_VALUE, XML_TOK_COLORSCALEENTRY_VALUE },
     685             :             { XML_NAMESPACE_CALC_EXT, XML_COLOR, XML_TOK_COLORSCALEENTRY_COLOR },
     686             :             XML_TOKEN_MAP_END
     687             :         };
     688             : 
     689           6 :         pColorScaleEntryAttrTokenMap = new SvXMLTokenMap( aColorScaleAttrTokenMap );
     690             :     }
     691             : 
     692          90 :     return *pColorScaleEntryAttrTokenMap;
     693             : }
     694             : 
     695          60 : const SvXMLTokenMap& ScXMLImport::GetFormattingTokenMap()
     696             : {
     697          60 :     if( !pDataBarTokenMap )
     698             :     {
     699             :         static const SvXMLTokenMapEntry aDataBarElemTokenMap[] =
     700             :         {
     701             :             { XML_NAMESPACE_CALC_EXT, XML_DATA_BAR_ENTRY, XML_TOK_DATABAR_DATABARENTRY },
     702             :             { XML_NAMESPACE_CALC_EXT, XML_FORMATTING_ENTRY, XML_TOK_FORMATTING_ENTRY },
     703             :             XML_TOKEN_MAP_END
     704             :         };
     705             : 
     706           6 :         pDataBarTokenMap = new SvXMLTokenMap( aDataBarElemTokenMap );
     707             :     }
     708             : 
     709          60 :     return *pDataBarTokenMap;
     710             : }
     711             : 
     712          30 : const SvXMLTokenMap& ScXMLImport::GetDataBarAttrMap()
     713             : {
     714          30 :     if( !pDataBarAttrMap )
     715             :     {
     716             :         static const SvXMLTokenMapEntry aDataBarAttrTokenMap[] =
     717             :         {
     718             :             { XML_NAMESPACE_CALC_EXT, XML_POSITIVE_COLOR, XML_TOK_DATABAR_POSITIVE_COLOR },
     719             :             { XML_NAMESPACE_CALC_EXT, XML_NEGATIVE_COLOR, XML_TOK_DATABAR_NEGATIVE_COLOR },
     720             :             { XML_NAMESPACE_CALC_EXT, XML_GRADIENT, XML_TOK_DATABAR_GRADIENT },
     721             :             { XML_NAMESPACE_CALC_EXT, XML_AXIS_POSITION, XML_TOK_DATABAR_AXISPOSITION },
     722             :             { XML_NAMESPACE_CALC_EXT, XML_SHOW_VALUE, XML_TOK_DATABAR_SHOWVALUE },
     723             :             { XML_NAMESPACE_CALC_EXT, XML_AXIS_COLOR, XML_TOK_DATABAR_AXISCOLOR },
     724             :             XML_TOKEN_MAP_END
     725             :         };
     726             : 
     727           6 :         pDataBarAttrMap = new SvXMLTokenMap( aDataBarAttrTokenMap );
     728             :     }
     729             : 
     730          30 :     return *pDataBarAttrMap;
     731             : }
     732             : 
     733           0 : const SvXMLTokenMap& ScXMLImport::GetIconSetAttrMap()
     734             : {
     735           0 :     if( !pIconSetAttrMap )
     736             :     {
     737             :         static const SvXMLTokenMapEntry aIconSetAttrTokenMap[] =
     738             :         {
     739             :             { XML_NAMESPACE_CALC_EXT, XML_ICON_SET_TYPE, XML_TOK_ICONSET_TYPE },
     740             :             { XML_NAMESPACE_CALC_EXT, XML_SHOW_VALUE, XML_TOK_ICONSET_SHOWVALUE },
     741             :             XML_TOKEN_MAP_END
     742             :         };
     743             : 
     744           0 :         pIconSetAttrMap = new SvXMLTokenMap( aIconSetAttrTokenMap );
     745             :     }
     746             : 
     747           0 :     return *pIconSetAttrMap;
     748             : }
     749             : 
     750          60 : const SvXMLTokenMap& ScXMLImport::GetDataBarEntryAttrMap()
     751             : {
     752          60 :     if( !pFormattingEntryAttrMap )
     753             :     {
     754             :         static const SvXMLTokenMapEntry aDataBarAttrEntryTokenMap[] =
     755             :         {
     756             :             { XML_NAMESPACE_CALC_EXT, XML_TYPE, XML_TOK_DATABARENTRY_TYPE },
     757             :             { XML_NAMESPACE_CALC_EXT, XML_VALUE, XML_TOK_DATABARENTRY_VALUE },
     758             :             XML_TOKEN_MAP_END
     759             :         };
     760             : 
     761           6 :         pFormattingEntryAttrMap = new SvXMLTokenMap( aDataBarAttrEntryTokenMap );
     762             :     }
     763             : 
     764          60 :     return *pFormattingEntryAttrMap;
     765             : }
     766             : 
     767           0 : const SvXMLTokenMap& ScXMLImport::GetLabelRangesElemTokenMap()
     768             : {
     769           0 :     if( !pLabelRangesElemTokenMap )
     770             :     {
     771             :         static const SvXMLTokenMapEntry aLabelRangesElemTokenMap[] =
     772             :         {
     773             :             { XML_NAMESPACE_TABLE, XML_LABEL_RANGE, XML_TOK_LABEL_RANGE_ELEM    },
     774             :             XML_TOKEN_MAP_END
     775             :         };
     776             : 
     777           0 :         pLabelRangesElemTokenMap = new SvXMLTokenMap( aLabelRangesElemTokenMap );
     778             :     } // if( !pLabelRangesElemTokenMap )
     779             : 
     780           0 :     return *pLabelRangesElemTokenMap;
     781             : }
     782             : 
     783           0 : const SvXMLTokenMap& ScXMLImport::GetLabelRangeAttrTokenMap()
     784             : {
     785           0 :     if( !pLabelRangeAttrTokenMap )
     786             :     {
     787             :         static const SvXMLTokenMapEntry aLabelRangeAttrTokenMap[] =
     788             :         {
     789             :             { XML_NAMESPACE_TABLE, XML_LABEL_CELL_RANGE_ADDRESS,    XML_TOK_LABEL_RANGE_ATTR_LABEL_RANGE    },
     790             :             { XML_NAMESPACE_TABLE, XML_DATA_CELL_RANGE_ADDRESS,     XML_TOK_LABEL_RANGE_ATTR_DATA_RANGE     },
     791             :             { XML_NAMESPACE_TABLE, XML_ORIENTATION,                 XML_TOK_LABEL_RANGE_ATTR_ORIENTATION    },
     792             :             XML_TOKEN_MAP_END
     793             :         };
     794             : 
     795           0 :         pLabelRangeAttrTokenMap = new SvXMLTokenMap( aLabelRangeAttrTokenMap );
     796             :     } // if( !pLabelRangeAttrTokenMap )
     797             : 
     798           0 :     return *pLabelRangeAttrTokenMap;
     799             : }
     800             : 
     801        9032 : const SvXMLTokenMap& ScXMLImport::GetTableElemTokenMap()
     802             : {
     803        9032 :     if( !pTableElemTokenMap )
     804             :     {
     805             :         static const SvXMLTokenMapEntry aTableTokenMap[] =
     806             :         {
     807             :             { XML_NAMESPACE_TABLE,  XML_NAMED_EXPRESSIONS,    XML_TOK_TABLE_NAMED_EXPRESSIONS },
     808             :             { XML_NAMESPACE_TABLE,  XML_TABLE_COLUMN_GROUP,   XML_TOK_TABLE_COL_GROUP       },
     809             :             { XML_NAMESPACE_TABLE,  XML_TABLE_HEADER_COLUMNS, XML_TOK_TABLE_HEADER_COLS },
     810             :             { XML_NAMESPACE_TABLE,  XML_TABLE_COLUMNS,        XML_TOK_TABLE_COLS            },
     811             :             { XML_NAMESPACE_TABLE,  XML_TABLE_COLUMN,         XML_TOK_TABLE_COL         },
     812             :             { XML_NAMESPACE_TABLE,  XML_TABLE_PROTECTION,     XML_TOK_TABLE_PROTECTION    },
     813             :             { XML_NAMESPACE_LO_EXT, XML_TABLE_PROTECTION,     XML_TOK_TABLE_PROTECTION_EXT  },
     814             :             { XML_NAMESPACE_OFFICE_EXT, XML_TABLE_PROTECTION, XML_TOK_TABLE_PROTECTION_EXT  },
     815             :             { XML_NAMESPACE_TABLE,  XML_TABLE_ROW_GROUP,      XML_TOK_TABLE_ROW_GROUP       },
     816             :             { XML_NAMESPACE_TABLE,  XML_TABLE_HEADER_ROWS,    XML_TOK_TABLE_HEADER_ROWS },
     817             :             { XML_NAMESPACE_TABLE,  XML_TABLE_ROWS,           XML_TOK_TABLE_ROWS            },
     818             :             { XML_NAMESPACE_TABLE,  XML_TABLE_ROW,            XML_TOK_TABLE_ROW         },
     819             :             { XML_NAMESPACE_TABLE,  XML_TABLE_SOURCE,         XML_TOK_TABLE_SOURCE      },
     820             :             { XML_NAMESPACE_TABLE,  XML_SCENARIO,             XML_TOK_TABLE_SCENARIO        },
     821             :             { XML_NAMESPACE_TABLE,  XML_SHAPES,               XML_TOK_TABLE_SHAPES      },
     822             :             { XML_NAMESPACE_OFFICE, XML_FORMS,                XML_TOK_TABLE_FORMS           },
     823             :             { XML_NAMESPACE_OFFICE, XML_EVENT_LISTENERS,      XML_TOK_TABLE_EVENT_LISTENERS },
     824             :             { XML_NAMESPACE_OFFICE_EXT, XML_EVENT_LISTENERS,  XML_TOK_TABLE_EVENT_LISTENERS_EXT },
     825             :             { XML_NAMESPACE_CALC_EXT, XML_CONDITIONAL_FORMATS, XML_TOK_TABLE_CONDFORMATS },
     826             :             XML_TOKEN_MAP_END
     827             :         };
     828             : 
     829         322 :         pTableElemTokenMap = new SvXMLTokenMap( aTableTokenMap );
     830             :     } // if( !pTableElemTokenMap )
     831             : 
     832        9032 :     return *pTableElemTokenMap;
     833             : }
     834             : 
     835           4 : const SvXMLTokenMap& ScXMLImport::GetTableProtectionAttrTokenMap()
     836             : {
     837           4 :     if (!pTableProtectionElemTokenMap)
     838             :     {
     839             :         static const SvXMLTokenMapEntry aTableProtectionTokenMap[] =
     840             :         {
     841             :             { XML_NAMESPACE_TABLE, XML_SELECT_PROTECTED_CELLS,      XML_TOK_TABLE_SELECT_PROTECTED_CELLS    },
     842             :             { XML_NAMESPACE_TABLE, XML_SELECT_UNPROTECTED_CELLS,    XML_TOK_TABLE_SELECT_UNPROTECTED_CELLS  },
     843             :             { XML_NAMESPACE_OFFICE_EXT, XML_SELECT_PROTECTED_CELLS, XML_TOK_TABLE_SELECT_PROTECTED_CELLS_EXT    },
     844             :             { XML_NAMESPACE_LO_EXT, XML_SELECT_PROTECTED_CELLS, XML_TOK_TABLE_SELECT_PROTECTED_CELLS_EXT    },
     845             :             { XML_NAMESPACE_OFFICE_EXT, XML_SELECT_UNPROTECTED_CELLS, XML_TOK_TABLE_SELECT_UNPROTECTED_CELLS_EXT  },
     846             :             { XML_NAMESPACE_LO_EXT, XML_SELECT_UNPROTECTED_CELLS, XML_TOK_TABLE_SELECT_UNPROTECTED_CELLS_EXT  },
     847             :             XML_TOKEN_MAP_END
     848             :         };
     849           4 :         pTableProtectionElemTokenMap = new SvXMLTokenMap(aTableProtectionTokenMap);
     850             :     }
     851             : 
     852           4 :     return *pTableProtectionElemTokenMap;
     853             : }
     854             : 
     855          52 : const SvXMLTokenMap& ScXMLImport::GetTableRowsElemTokenMap()
     856             : {
     857          52 :     if( !pTableRowsElemTokenMap )
     858             :     {
     859             :         static const SvXMLTokenMapEntry aTableRowsElemTokenMap[] =
     860             :         {
     861             :             { XML_NAMESPACE_TABLE, XML_TABLE_ROW_GROUP,     XML_TOK_TABLE_ROWS_ROW_GROUP    },
     862             :             { XML_NAMESPACE_TABLE, XML_TABLE_HEADER_ROWS,   XML_TOK_TABLE_ROWS_HEADER_ROWS  },
     863             :             { XML_NAMESPACE_TABLE, XML_TABLE_ROWS,          XML_TOK_TABLE_ROWS_ROWS         },
     864             :             { XML_NAMESPACE_TABLE, XML_TABLE_ROW,           XML_TOK_TABLE_ROWS_ROW          },
     865             :             XML_TOKEN_MAP_END
     866             :         };
     867             : 
     868           6 :         pTableRowsElemTokenMap = new SvXMLTokenMap( aTableRowsElemTokenMap );
     869             :     } // if( !pTableRowsElemTokenMap )
     870             : 
     871          52 :     return *pTableRowsElemTokenMap;
     872             : }
     873             : 
     874          40 : const SvXMLTokenMap& ScXMLImport::GetTableColsElemTokenMap()
     875             : {
     876          40 :     if( !pTableColsElemTokenMap )
     877             :     {
     878             :         static const SvXMLTokenMapEntry aTableColsElemTokenMap[] =
     879             :         {
     880             :             { XML_NAMESPACE_TABLE, XML_TABLE_COLUMN_GROUP,      XML_TOK_TABLE_COLS_COL_GROUP    },
     881             :             { XML_NAMESPACE_TABLE, XML_TABLE_HEADER_COLUMNS,    XML_TOK_TABLE_COLS_HEADER_COLS  },
     882             :             { XML_NAMESPACE_TABLE, XML_TABLE_COLUMNS,           XML_TOK_TABLE_COLS_COLS         },
     883             :             { XML_NAMESPACE_TABLE, XML_TABLE_COLUMN,            XML_TOK_TABLE_COLS_COL          },
     884             :             XML_TOKEN_MAP_END
     885             :         };
     886             : 
     887           4 :         pTableColsElemTokenMap = new SvXMLTokenMap( aTableColsElemTokenMap );
     888             :     } // if( !pTableColsElemTokenMap )
     889             : 
     890          40 :     return *pTableColsElemTokenMap;
     891             : }
     892             : 
     893         582 : const SvXMLTokenMap& ScXMLImport::GetTableAttrTokenMap()
     894             : {
     895         582 :     if( !pTableAttrTokenMap )
     896             :     {
     897             :         static const SvXMLTokenMapEntry aTableAttrTokenMap[] =
     898             :         {
     899             :             { XML_NAMESPACE_TABLE,     XML_NAME,           XML_TOK_TABLE_NAME          },
     900             :             { XML_NAMESPACE_TABLE,     XML_STYLE_NAME,     XML_TOK_TABLE_STYLE_NAME    },
     901             :             { XML_NAMESPACE_TABLE, XML_PROTECTED,                   XML_TOK_TABLE_PROTECTED         },
     902             :             { XML_NAMESPACE_TABLE,     XML_PRINT_RANGES,   XML_TOK_TABLE_PRINT_RANGES  },
     903             :             { XML_NAMESPACE_TABLE,     XML_PROTECTION_KEY, XML_TOK_TABLE_PASSWORD      },
     904             :             { XML_NAMESPACE_TABLE, XML_PROTECTION_KEY_DIGEST_ALGORITHM, XML_TOK_TABLE_PASSHASH      },
     905             :             { XML_NAMESPACE_TABLE, XML_PROTECTION_KEY_DIGEST_ALGORITHM_2, XML_TOK_TABLE_PASSHASH_2  },
     906             :             { XML_NAMESPACE_TABLE,     XML_PRINT,          XML_TOK_TABLE_PRINT         },
     907             :             XML_TOKEN_MAP_END
     908             :         };
     909             : 
     910         322 :         pTableAttrTokenMap = new SvXMLTokenMap( aTableAttrTokenMap );
     911             :     } // if( !pTableAttrTokenMap )
     912             : 
     913         582 :     return *pTableAttrTokenMap;
     914             : }
     915             : 
     916           0 : const SvXMLTokenMap& ScXMLImport::GetTableScenarioAttrTokenMap()
     917             : {
     918           0 :     if( !pTableScenarioAttrTokenMap )
     919             :     {
     920             :         static const SvXMLTokenMapEntry aTableScenarioAttrTokenMap[] =
     921             :         {
     922             :             { XML_NAMESPACE_TABLE, XML_DISPLAY_BORDER,      XML_TOK_TABLE_SCENARIO_ATTR_DISPLAY_BORDER  },
     923             :             { XML_NAMESPACE_TABLE, XML_BORDER_COLOR,        XML_TOK_TABLE_SCENARIO_ATTR_BORDER_COLOR    },
     924             :             { XML_NAMESPACE_TABLE, XML_COPY_BACK,           XML_TOK_TABLE_SCENARIO_ATTR_COPY_BACK       },
     925             :             { XML_NAMESPACE_TABLE, XML_COPY_STYLES,         XML_TOK_TABLE_SCENARIO_ATTR_COPY_STYLES     },
     926             :             { XML_NAMESPACE_TABLE, XML_COPY_FORMULAS,       XML_TOK_TABLE_SCENARIO_ATTR_COPY_FORMULAS   },
     927             :             { XML_NAMESPACE_TABLE, XML_IS_ACTIVE,           XML_TOK_TABLE_SCENARIO_ATTR_IS_ACTIVE       },
     928             :             { XML_NAMESPACE_TABLE, XML_SCENARIO_RANGES,     XML_TOK_TABLE_SCENARIO_ATTR_SCENARIO_RANGES },
     929             :             { XML_NAMESPACE_TABLE, XML_COMMENT,             XML_TOK_TABLE_SCENARIO_ATTR_COMMENT         },
     930             :             { XML_NAMESPACE_TABLE, XML_PROTECTED,           XML_TOK_TABLE_SCENARIO_ATTR_PROTECTED       },
     931             :             XML_TOKEN_MAP_END
     932             :         };
     933             : 
     934           0 :         pTableScenarioAttrTokenMap = new SvXMLTokenMap( aTableScenarioAttrTokenMap );
     935             :     } // if( !pTableScenarioAttrTokenMap )
     936             : 
     937           0 :     return *pTableScenarioAttrTokenMap;
     938             : }
     939             : 
     940        2322 : const SvXMLTokenMap& ScXMLImport::GetTableColAttrTokenMap()
     941             : {
     942        2322 :     if( !pTableColAttrTokenMap )
     943             :     {
     944             :         static const SvXMLTokenMapEntry aTableColAttrTokenMap[] =
     945             :         {
     946             :             { XML_NAMESPACE_TABLE, XML_STYLE_NAME,                  XML_TOK_TABLE_COL_ATTR_STYLE_NAME       },
     947             :             { XML_NAMESPACE_TABLE, XML_NUMBER_COLUMNS_REPEATED,     XML_TOK_TABLE_COL_ATTR_REPEATED         },
     948             :             { XML_NAMESPACE_TABLE, XML_VISIBILITY,                  XML_TOK_TABLE_COL_ATTR_VISIBILITY       },
     949             :             { XML_NAMESPACE_TABLE, XML_DEFAULT_CELL_STYLE_NAME,    XML_TOK_TABLE_COL_ATTR_DEFAULT_CELL_STYLE_NAME },
     950             :             XML_TOKEN_MAP_END
     951             :         };
     952             : 
     953         322 :         pTableColAttrTokenMap = new SvXMLTokenMap( aTableColAttrTokenMap );
     954             :     } // if( !pTableColAttrTokenMap )
     955             : 
     956        2322 :     return *pTableColAttrTokenMap;
     957             : }
     958             : 
     959       21130 : const SvXMLTokenMap& ScXMLImport::GetTableRowElemTokenMap()
     960             : {
     961       21130 :     if( !pTableRowElemTokenMap )
     962             :     {
     963             :         static const SvXMLTokenMapEntry aTableRowTokenMap[] =
     964             :         {
     965             :             { XML_NAMESPACE_TABLE, XML_TABLE_CELL,      XML_TOK_TABLE_ROW_CELL              },
     966             :             { XML_NAMESPACE_TABLE, XML_COVERED_TABLE_CELL,  XML_TOK_TABLE_ROW_COVERED_CELL      },
     967             :             XML_TOKEN_MAP_END
     968             :         };
     969             : 
     970         322 :         pTableRowElemTokenMap = new SvXMLTokenMap( aTableRowTokenMap );
     971             :     } // if( !pTableRowElemTokenMap )
     972             : 
     973       21130 :     return *pTableRowElemTokenMap;
     974             : }
     975             : 
     976        6588 : const SvXMLTokenMap& ScXMLImport::GetTableRowAttrTokenMap()
     977             : {
     978        6588 :     if( !pTableRowAttrTokenMap )
     979             :     {
     980             :         static const SvXMLTokenMapEntry aTableRowAttrTokenMap[] =
     981             :         {
     982             :             { XML_NAMESPACE_TABLE, XML_STYLE_NAME,                  XML_TOK_TABLE_ROW_ATTR_STYLE_NAME           },
     983             :             { XML_NAMESPACE_TABLE, XML_VISIBILITY,                  XML_TOK_TABLE_ROW_ATTR_VISIBILITY           },
     984             :             { XML_NAMESPACE_TABLE, XML_NUMBER_ROWS_REPEATED,        XML_TOK_TABLE_ROW_ATTR_REPEATED             },
     985             :             { XML_NAMESPACE_TABLE, XML_DEFAULT_CELL_STYLE_NAME,     XML_TOK_TABLE_ROW_ATTR_DEFAULT_CELL_STYLE_NAME },
     986             :             //  { XML_NAMESPACE_TABLE, XML_USE_OPTIMAL_HEIGHT,          XML_TOK_TABLE_ROW_ATTR_USE_OPTIMAL_HEIGHT   },
     987             :             XML_TOKEN_MAP_END
     988             :         };
     989             : 
     990         322 :         pTableRowAttrTokenMap = new SvXMLTokenMap( aTableRowAttrTokenMap );
     991             :     } // if( !pTableRowAttrTokenMap )
     992             : 
     993        6588 :     return *pTableRowAttrTokenMap;
     994             : }
     995             : 
     996       12928 : const SvXMLTokenMap& ScXMLImport::GetTableRowCellElemTokenMap()
     997             : {
     998       12928 :     if( !pTableRowCellElemTokenMap )
     999             :     {
    1000             :         static const SvXMLTokenMapEntry aTableRowCellTokenMap[] =
    1001             :         {
    1002             :             { XML_NAMESPACE_TEXT,   XML_P,                  XML_TOK_TABLE_ROW_CELL_P                    },
    1003             :             { XML_NAMESPACE_TABLE,  XML_SUB_TABLE,          XML_TOK_TABLE_ROW_CELL_TABLE                },
    1004             :             { XML_NAMESPACE_OFFICE, XML_ANNOTATION,         XML_TOK_TABLE_ROW_CELL_ANNOTATION           },
    1005             :             { XML_NAMESPACE_TABLE,  XML_DETECTIVE,          XML_TOK_TABLE_ROW_CELL_DETECTIVE            },
    1006             :             { XML_NAMESPACE_TABLE,  XML_CELL_RANGE_SOURCE,  XML_TOK_TABLE_ROW_CELL_CELL_RANGE_SOURCE    },
    1007             :             XML_TOKEN_MAP_END
    1008             :         };
    1009             : 
    1010         292 :         pTableRowCellElemTokenMap = new SvXMLTokenMap( aTableRowCellTokenMap );
    1011             :     } // if( !pTableRowCellElemTokenMap )
    1012             : 
    1013       12928 :     return *pTableRowCellElemTokenMap;
    1014             : }
    1015             : 
    1016          32 : const SvXMLTokenMap& ScXMLImport::GetTableAnnotationAttrTokenMap()
    1017             : {
    1018          32 :     if( !pTableAnnotationAttrTokenMap )
    1019             :     {
    1020             :         static const SvXMLTokenMapEntry aTableAnnotationAttrTokenMap[] =
    1021             :         {
    1022             :             { XML_NAMESPACE_OFFICE, XML_AUTHOR,                 XML_TOK_TABLE_ANNOTATION_ATTR_AUTHOR                },
    1023             :             { XML_NAMESPACE_OFFICE, XML_CREATE_DATE,            XML_TOK_TABLE_ANNOTATION_ATTR_CREATE_DATE           },
    1024             :             { XML_NAMESPACE_OFFICE, XML_CREATE_DATE_STRING,     XML_TOK_TABLE_ANNOTATION_ATTR_CREATE_DATE_STRING    },
    1025             :             { XML_NAMESPACE_OFFICE, XML_DISPLAY,                XML_TOK_TABLE_ANNOTATION_ATTR_DISPLAY               },
    1026             :             { XML_NAMESPACE_SVG,    XML_X,                      XML_TOK_TABLE_ANNOTATION_ATTR_X                     },
    1027             :             { XML_NAMESPACE_SVG,    XML_Y,                      XML_TOK_TABLE_ANNOTATION_ATTR_Y                     },
    1028             :             XML_TOKEN_MAP_END
    1029             :         };
    1030             : 
    1031          26 :         pTableAnnotationAttrTokenMap = new SvXMLTokenMap( aTableAnnotationAttrTokenMap );
    1032             :     } // if( !pTableAnnotationAttrTokenMap )
    1033             : 
    1034          32 :     return *pTableAnnotationAttrTokenMap;
    1035             : }
    1036             : 
    1037           0 : const SvXMLTokenMap& ScXMLImport::GetDetectiveElemTokenMap()
    1038             : {
    1039           0 :     if( !pDetectiveElemTokenMap )
    1040             :     {
    1041             :         static const SvXMLTokenMapEntry aDetectiveElemTokenMap[]=
    1042             :         {
    1043             :             { XML_NAMESPACE_TABLE,  XML_HIGHLIGHTED_RANGE,  XML_TOK_DETECTIVE_ELEM_HIGHLIGHTED  },
    1044             :             { XML_NAMESPACE_TABLE,  XML_OPERATION,          XML_TOK_DETECTIVE_ELEM_OPERATION    },
    1045             :             XML_TOKEN_MAP_END
    1046             :         };
    1047             : 
    1048           0 :         pDetectiveElemTokenMap = new SvXMLTokenMap( aDetectiveElemTokenMap );
    1049             :     } // if( !pDetectiveElemTokenMap )
    1050             : 
    1051           0 :     return *pDetectiveElemTokenMap;
    1052             : }
    1053             : 
    1054           0 : const SvXMLTokenMap& ScXMLImport::GetDetectiveHighlightedAttrTokenMap()
    1055             : {
    1056           0 :     if( !pDetectiveHighlightedAttrTokenMap )
    1057             :     {
    1058             :         static const SvXMLTokenMapEntry aDetectiveHighlightedAttrTokenMap[]=
    1059             :         {
    1060             :             { XML_NAMESPACE_TABLE,  XML_CELL_RANGE_ADDRESS,     XML_TOK_DETECTIVE_HIGHLIGHTED_ATTR_CELL_RANGE       },
    1061             :             { XML_NAMESPACE_TABLE,  XML_DIRECTION,              XML_TOK_DETECTIVE_HIGHLIGHTED_ATTR_DIRECTION        },
    1062             :             { XML_NAMESPACE_TABLE,  XML_CONTAINS_ERROR,         XML_TOK_DETECTIVE_HIGHLIGHTED_ATTR_CONTAINS_ERROR   },
    1063             :             { XML_NAMESPACE_TABLE,  XML_MARKED_INVALID,         XML_TOK_DETECTIVE_HIGHLIGHTED_ATTR_MARKED_INVALID   },
    1064             :             XML_TOKEN_MAP_END
    1065             :         };
    1066             : 
    1067           0 :         pDetectiveHighlightedAttrTokenMap = new SvXMLTokenMap( aDetectiveHighlightedAttrTokenMap );
    1068             :     } // if( !pDetectiveHighlightedAttrTokenMap )
    1069             : 
    1070           0 :     return *pDetectiveHighlightedAttrTokenMap;
    1071             : }
    1072             : 
    1073           0 : const SvXMLTokenMap& ScXMLImport::GetDetectiveOperationAttrTokenMap()
    1074             : {
    1075           0 :     if( !pDetectiveOperationAttrTokenMap )
    1076             :     {
    1077             :         static const SvXMLTokenMapEntry aDetectiveOperationAttrTokenMap[]=
    1078             :         {
    1079             :             { XML_NAMESPACE_TABLE,  XML_NAME,   XML_TOK_DETECTIVE_OPERATION_ATTR_NAME   },
    1080             :             { XML_NAMESPACE_TABLE,  XML_INDEX,  XML_TOK_DETECTIVE_OPERATION_ATTR_INDEX  },
    1081             :             XML_TOKEN_MAP_END
    1082             :         };
    1083             : 
    1084           0 :         pDetectiveOperationAttrTokenMap = new SvXMLTokenMap( aDetectiveOperationAttrTokenMap );
    1085             :     } // if( !pDetectiveOperationAttrTokenMap )
    1086             : 
    1087           0 :     return *pDetectiveOperationAttrTokenMap;
    1088             : }
    1089             : 
    1090           0 : const SvXMLTokenMap& ScXMLImport::GetTableCellRangeSourceAttrTokenMap()
    1091             : {
    1092           0 :     if( !pTableCellRangeSourceAttrTokenMap )
    1093             :     {
    1094             :         static const SvXMLTokenMapEntry aTableCellRangeSourceAttrTokenMap[] =
    1095             :         {
    1096             :             { XML_NAMESPACE_TABLE,  XML_NAME,                   XML_TOK_TABLE_CELL_RANGE_SOURCE_ATTR_NAME           },
    1097             :             { XML_NAMESPACE_XLINK,  XML_HREF,                   XML_TOK_TABLE_CELL_RANGE_SOURCE_ATTR_HREF           },
    1098             :             { XML_NAMESPACE_TABLE,  XML_FILTER_NAME,            XML_TOK_TABLE_CELL_RANGE_SOURCE_ATTR_FILTER_NAME    },
    1099             :             { XML_NAMESPACE_TABLE,  XML_FILTER_OPTIONS,         XML_TOK_TABLE_CELL_RANGE_SOURCE_ATTR_FILTER_OPTIONS },
    1100             :             { XML_NAMESPACE_TABLE,  XML_LAST_COLUMN_SPANNED,    XML_TOK_TABLE_CELL_RANGE_SOURCE_ATTR_LAST_COLUMN    },
    1101             :             { XML_NAMESPACE_TABLE,  XML_LAST_ROW_SPANNED,       XML_TOK_TABLE_CELL_RANGE_SOURCE_ATTR_LAST_ROW       },
    1102             :             { XML_NAMESPACE_TABLE,  XML_REFRESH_DELAY,          XML_TOK_TABLE_CELL_RANGE_SOURCE_ATTR_REFRESH_DELAY  },
    1103             :             XML_TOKEN_MAP_END
    1104             :         };
    1105             : 
    1106           0 :         pTableCellRangeSourceAttrTokenMap = new SvXMLTokenMap( aTableCellRangeSourceAttrTokenMap );
    1107             :     } // if( !pTableCellRangeSourceAttrTokenMap )
    1108             : 
    1109           0 :     return *pTableCellRangeSourceAttrTokenMap;
    1110             : }
    1111             : 
    1112         124 : const SvXMLTokenMap& ScXMLImport::GetNamedExpressionsElemTokenMap()
    1113             : {
    1114         124 :     if( !pNamedExpressionsElemTokenMap )
    1115             :     {
    1116             :         static const SvXMLTokenMapEntry aNamedExpressionsTokenMap[] =
    1117             :         {
    1118             :             { XML_NAMESPACE_TABLE, XML_NAMED_RANGE,             XML_TOK_NAMED_EXPRESSIONS_NAMED_RANGE           },
    1119             :             { XML_NAMESPACE_TABLE, XML_NAMED_EXPRESSION,        XML_TOK_NAMED_EXPRESSIONS_NAMED_EXPRESSION  },
    1120             :             XML_TOKEN_MAP_END
    1121             :         };
    1122             : 
    1123          22 :         pNamedExpressionsElemTokenMap = new SvXMLTokenMap( aNamedExpressionsTokenMap );
    1124             :     } // if( !pNamedExpressionsElemTokenMap )
    1125             : 
    1126         124 :     return *pNamedExpressionsElemTokenMap;
    1127             : }
    1128             : 
    1129          74 : const SvXMLTokenMap& ScXMLImport::GetNamedRangeAttrTokenMap()
    1130             : {
    1131          74 :     if( !pNamedRangeAttrTokenMap )
    1132             :     {
    1133             :         static const SvXMLTokenMapEntry aNamedRangeAttrTokenMap[] =
    1134             :         {
    1135             :             { XML_NAMESPACE_TABLE, XML_NAME,                XML_TOK_NAMED_RANGE_ATTR_NAME               },
    1136             :             { XML_NAMESPACE_TABLE, XML_CELL_RANGE_ADDRESS,  XML_TOK_NAMED_RANGE_ATTR_CELL_RANGE_ADDRESS },
    1137             :             { XML_NAMESPACE_TABLE, XML_BASE_CELL_ADDRESS,   XML_TOK_NAMED_RANGE_ATTR_BASE_CELL_ADDRESS  },
    1138             :             { XML_NAMESPACE_TABLE, XML_RANGE_USABLE_AS,     XML_TOK_NAMED_RANGE_ATTR_RANGE_USABLE_AS    },
    1139             :             XML_TOKEN_MAP_END
    1140             :         };
    1141             : 
    1142          22 :         pNamedRangeAttrTokenMap = new SvXMLTokenMap( aNamedRangeAttrTokenMap );
    1143             :     } // if( !pNamedRangeAttrTokenMap )
    1144             : 
    1145          74 :     return *pNamedRangeAttrTokenMap;
    1146             : }
    1147             : 
    1148          50 : const SvXMLTokenMap& ScXMLImport::GetNamedExpressionAttrTokenMap()
    1149             : {
    1150          50 :     if( !pNamedExpressionAttrTokenMap )
    1151             :     {
    1152             :         static const SvXMLTokenMapEntry aNamedExpressionAttrTokenMap[] =
    1153             :         {
    1154             :             { XML_NAMESPACE_TABLE, XML_NAME,                XML_TOK_NAMED_EXPRESSION_ATTR_NAME              },
    1155             :             { XML_NAMESPACE_TABLE, XML_BASE_CELL_ADDRESS,   XML_TOK_NAMED_EXPRESSION_ATTR_BASE_CELL_ADDRESS },
    1156             :             { XML_NAMESPACE_TABLE, XML_EXPRESSION,          XML_TOK_NAMED_EXPRESSION_ATTR_EXPRESSION        },
    1157             :             XML_TOKEN_MAP_END
    1158             :         };
    1159             : 
    1160           4 :         pNamedExpressionAttrTokenMap = new SvXMLTokenMap( aNamedExpressionAttrTokenMap );
    1161             :     } // if( !pNamedExpressionAttrTokenMap )
    1162             : 
    1163          50 :     return *pNamedExpressionAttrTokenMap;
    1164             : }
    1165             : 
    1166          32 : const SvXMLTokenMap& ScXMLImport::GetDatabaseRangesElemTokenMap()
    1167             : {
    1168          32 :     if( !pDatabaseRangesElemTokenMap )
    1169             :     {
    1170             :         static const SvXMLTokenMapEntry aDatabaseRangesTokenMap[] =
    1171             :         {
    1172             :             { XML_NAMESPACE_TABLE, XML_DATABASE_RANGE,  XML_TOK_DATABASE_RANGE      },
    1173             :             XML_TOKEN_MAP_END
    1174             :         };
    1175             : 
    1176          16 :         pDatabaseRangesElemTokenMap = new SvXMLTokenMap( aDatabaseRangesTokenMap );
    1177             :     } // if( !pDatabaseRangesElemTokenMap )
    1178             : 
    1179          32 :     return *pDatabaseRangesElemTokenMap;
    1180             : }
    1181             : 
    1182          14 : const SvXMLTokenMap& ScXMLImport::GetDatabaseRangeElemTokenMap()
    1183             : {
    1184          14 :     if( !pDatabaseRangeElemTokenMap )
    1185             :     {
    1186             :         static const SvXMLTokenMapEntry aDatabaseRangeTokenMap[] =
    1187             :         {
    1188             :             { XML_NAMESPACE_TABLE, XML_DATABASE_SOURCE_SQL,     XML_TOK_DATABASE_RANGE_SOURCE_SQL       },
    1189             :             { XML_NAMESPACE_TABLE, XML_DATABASE_SOURCE_TABLE,   XML_TOK_DATABASE_RANGE_SOURCE_TABLE     },
    1190             :             { XML_NAMESPACE_TABLE, XML_DATABASE_SOURCE_QUERY,   XML_TOK_DATABASE_RANGE_SOURCE_QUERY     },
    1191             :             { XML_NAMESPACE_TABLE, XML_FILTER,                  XML_TOK_FILTER                          },
    1192             :             { XML_NAMESPACE_TABLE, XML_SORT,                    XML_TOK_SORT                            },
    1193             :             { XML_NAMESPACE_TABLE, XML_SUBTOTAL_RULES,          XML_TOK_DATABASE_RANGE_SUBTOTAL_RULES   },
    1194             :             XML_TOKEN_MAP_END
    1195             :         };
    1196             : 
    1197          10 :         pDatabaseRangeElemTokenMap = new SvXMLTokenMap( aDatabaseRangeTokenMap );
    1198             :     } // if( !pDatabaseRangeElemTokenMap )
    1199             : 
    1200          14 :     return *pDatabaseRangeElemTokenMap;
    1201             : }
    1202             : 
    1203          32 : const SvXMLTokenMap& ScXMLImport::GetDatabaseRangeAttrTokenMap()
    1204             : {
    1205          32 :     if( !pDatabaseRangeAttrTokenMap )
    1206             :     {
    1207             :         static const SvXMLTokenMapEntry aDatabaseRangeAttrTokenMap[] =
    1208             :         {
    1209             :             { XML_NAMESPACE_TABLE, XML_NAME,                    XML_TOK_DATABASE_RANGE_ATTR_NAME                    },
    1210             :             { XML_NAMESPACE_TABLE, XML_IS_SELECTION,            XML_TOK_DATABASE_RANGE_ATTR_IS_SELECTION            },
    1211             :             { XML_NAMESPACE_TABLE, XML_ON_UPDATE_KEEP_STYLES,   XML_TOK_DATABASE_RANGE_ATTR_ON_UPDATE_KEEP_STYLES   },
    1212             :             { XML_NAMESPACE_TABLE, XML_ON_UPDATE_KEEP_SIZE,     XML_TOK_DATABASE_RANGE_ATTR_ON_UPDATE_KEEP_SIZE     },
    1213             :             { XML_NAMESPACE_TABLE, XML_HAS_PERSISTENT_DATA,     XML_TOK_DATABASE_RANGE_ATTR_HAS_PERSISTENT_DATA     },
    1214             :             { XML_NAMESPACE_TABLE, XML_ORIENTATION,         XML_TOK_DATABASE_RANGE_ATTR_ORIENTATION             },
    1215             :             { XML_NAMESPACE_TABLE, XML_CONTAINS_HEADER,     XML_TOK_DATABASE_RANGE_ATTR_CONTAINS_HEADER         },
    1216             :             { XML_NAMESPACE_TABLE, XML_DISPLAY_FILTER_BUTTONS,  XML_TOK_DATABASE_RANGE_ATTR_DISPLAY_FILTER_BUTTONS  },
    1217             :             { XML_NAMESPACE_TABLE, XML_TARGET_RANGE_ADDRESS,    XML_TOK_DATABASE_RANGE_ATTR_TARGET_RANGE_ADDRESS    },
    1218             :             { XML_NAMESPACE_TABLE, XML_REFRESH_DELAY,           XML_TOK_DATABASE_RANGE_ATTR_REFRESH_DELAY           },
    1219             :             XML_TOKEN_MAP_END
    1220             :         };
    1221             : 
    1222          16 :         pDatabaseRangeAttrTokenMap = new SvXMLTokenMap( aDatabaseRangeAttrTokenMap );
    1223             :     } // if( !pDatabaseRangeAttrTokenMap )
    1224             : 
    1225          32 :     return *pDatabaseRangeAttrTokenMap;
    1226             : }
    1227             : 
    1228           0 : const SvXMLTokenMap& ScXMLImport::GetDatabaseRangeSourceSQLAttrTokenMap()
    1229             : {
    1230           0 :     if( !pDatabaseRangeSourceSQLAttrTokenMap )
    1231             :     {
    1232             :         static const SvXMLTokenMapEntry aDatabaseRangeSourceSQLAttrTokenMap[] =
    1233             :         {
    1234             :             { XML_NAMESPACE_TABLE, XML_DATABASE_NAME,           XML_TOK_SOURCE_SQL_ATTR_DATABASE_NAME       },
    1235             :             { XML_NAMESPACE_XLINK, XML_HREF,                    XML_TOK_SOURCE_SQL_ATTR_HREF                },
    1236             :             { XML_NAMESPACE_TABLE, XML_CONNECTION_RESOURCE,     XML_TOK_SOURCE_SQL_ATTR_CONNECTION_RESOURCE},
    1237             :             { XML_NAMESPACE_TABLE, XML_SQL_STATEMENT,           XML_TOK_SOURCE_SQL_ATTR_SQL_STATEMENT       },
    1238             :             { XML_NAMESPACE_TABLE, XML_PARSE_SQL_STATEMENT, XML_TOK_SOURCE_SQL_ATTR_PARSE_SQL_STATEMENT },
    1239             :             XML_TOKEN_MAP_END
    1240             :         };
    1241             : 
    1242           0 :         pDatabaseRangeSourceSQLAttrTokenMap = new SvXMLTokenMap( aDatabaseRangeSourceSQLAttrTokenMap );
    1243             :     } // if( !pDatabaseRangeSourceSQLAttrTokenMap )
    1244             : 
    1245           0 :     return *pDatabaseRangeSourceSQLAttrTokenMap;
    1246             : }
    1247             : 
    1248           2 : const SvXMLTokenMap& ScXMLImport::GetDatabaseRangeSourceTableAttrTokenMap()
    1249             : {
    1250           2 :     if( !pDatabaseRangeSourceTableAttrTokenMap )
    1251             :     {
    1252             :         static const SvXMLTokenMapEntry aDatabaseRangeSourceTableAttrTokenMap[] =
    1253             :         {
    1254             :             { XML_NAMESPACE_TABLE, XML_DATABASE_NAME,           XML_TOK_SOURCE_TABLE_ATTR_DATABASE_NAME         },
    1255             :             { XML_NAMESPACE_XLINK, XML_HREF,                    XML_TOK_SOURCE_TABLE_ATTR_HREF                  },
    1256             :             { XML_NAMESPACE_TABLE, XML_CONNECTION_RESOURCE,     XML_TOK_SOURCE_TABLE_ATTR_CONNECTION_RESOURCE  },
    1257             :             { XML_NAMESPACE_TABLE, XML_TABLE_NAME,              XML_TOK_SOURCE_TABLE_ATTR_TABLE_NAME            },
    1258             :             XML_TOKEN_MAP_END
    1259             :         };
    1260             : 
    1261           2 :         pDatabaseRangeSourceTableAttrTokenMap = new SvXMLTokenMap( aDatabaseRangeSourceTableAttrTokenMap );
    1262             :     } // if( !pDatabaseRangeSourceTableAttrTokenMap )
    1263             : 
    1264           2 :     return *pDatabaseRangeSourceTableAttrTokenMap;
    1265             : }
    1266             : 
    1267           0 : const SvXMLTokenMap& ScXMLImport::GetDatabaseRangeSourceQueryAttrTokenMap()
    1268             : {
    1269           0 :     if( !pDatabaseRangeSourceQueryAttrTokenMap )
    1270             :     {
    1271             :         static const SvXMLTokenMapEntry aDatabaseRangeSourceQueryAttrTokenMap[] =
    1272             :         {
    1273             :             { XML_NAMESPACE_TABLE, XML_DATABASE_NAME,           XML_TOK_SOURCE_QUERY_ATTR_DATABASE_NAME         },
    1274             :             { XML_NAMESPACE_XLINK, XML_HREF,                    XML_TOK_SOURCE_QUERY_ATTR_HREF                  },
    1275             :             { XML_NAMESPACE_TABLE, XML_CONNECTION_RESOURCE,     XML_TOK_SOURCE_QUERY_ATTR_CONNECTION_RESOURCE  },
    1276             :             { XML_NAMESPACE_TABLE, XML_QUERY_NAME,              XML_TOK_SOURCE_QUERY_ATTR_QUERY_NAME            },
    1277             :             XML_TOKEN_MAP_END
    1278             :         };
    1279             : 
    1280           0 :         pDatabaseRangeSourceQueryAttrTokenMap = new SvXMLTokenMap( aDatabaseRangeSourceQueryAttrTokenMap );
    1281             :     } // if( !pDatabaseRangeSourceQueryAttrTokenMap )
    1282             : 
    1283           0 :     return *pDatabaseRangeSourceQueryAttrTokenMap;
    1284             : }
    1285             : 
    1286          24 : const SvXMLTokenMap& ScXMLImport::GetFilterElemTokenMap()
    1287             : {
    1288          24 :     if( !pFilterElemTokenMap )
    1289             :     {
    1290             :         static const SvXMLTokenMapEntry aFilterTokenMap[] =
    1291             :         {
    1292             :             { XML_NAMESPACE_TABLE, XML_FILTER_AND,          XML_TOK_FILTER_AND          },
    1293             :             { XML_NAMESPACE_TABLE, XML_FILTER_OR,           XML_TOK_FILTER_OR           },
    1294             :             { XML_NAMESPACE_TABLE, XML_FILTER_CONDITION,    XML_TOK_FILTER_CONDITION    },
    1295             :             XML_TOKEN_MAP_END
    1296             :         };
    1297             : 
    1298           6 :         pFilterElemTokenMap = new SvXMLTokenMap( aFilterTokenMap );
    1299             :     } // if( !pFilterElemTokenMap )
    1300             : 
    1301          24 :     return *pFilterElemTokenMap;
    1302             : }
    1303             : 
    1304          10 : const SvXMLTokenMap& ScXMLImport::GetFilterAttrTokenMap()
    1305             : {
    1306          10 :     if( !pFilterAttrTokenMap )
    1307             :     {
    1308             :         static const SvXMLTokenMapEntry aFilterAttrTokenMap[] =
    1309             :         {
    1310             :             { XML_NAMESPACE_TABLE, XML_TARGET_RANGE_ADDRESS,            XML_TOK_FILTER_ATTR_TARGET_RANGE_ADDRESS            },
    1311             :             { XML_NAMESPACE_TABLE, XML_CONDITION_SOURCE_RANGE_ADDRESS,  XML_TOK_FILTER_ATTR_CONDITION_SOURCE_RANGE_ADDRESS  },
    1312             :             { XML_NAMESPACE_TABLE, XML_CONDITION_SOURCE,                XML_TOK_FILTER_ATTR_CONDITION_SOURCE                },
    1313             :             { XML_NAMESPACE_TABLE, XML_DISPLAY_DUPLICATES,              XML_TOK_FILTER_ATTR_DISPLAY_DUPLICATES              },
    1314             :             XML_TOKEN_MAP_END
    1315             :         };
    1316             : 
    1317           6 :         pFilterAttrTokenMap = new SvXMLTokenMap( aFilterAttrTokenMap );
    1318             :     } // if( !pFilterAttrTokenMap )
    1319             : 
    1320          10 :     return *pFilterAttrTokenMap;
    1321             : }
    1322             : 
    1323          16 : const SvXMLTokenMap& ScXMLImport::GetFilterConditionElemTokenMap()
    1324             : {
    1325          16 :     if( !pFilterConditionElemTokenMap )
    1326             :     {
    1327             :         static const SvXMLTokenMapEntry aTokenMap[] =
    1328             :         {
    1329             :             { XML_NAMESPACE_TABLE, XML_FILTER_SET_ITEM, XML_TOK_CONDITION_FILTER_SET_ITEM },
    1330             :             XML_TOKEN_MAP_END
    1331             :         };
    1332             : 
    1333           2 :         pFilterConditionElemTokenMap = new SvXMLTokenMap( aTokenMap );
    1334             :     }
    1335             : 
    1336          16 :     return *pFilterConditionElemTokenMap;
    1337             : }
    1338             : 
    1339          14 : const SvXMLTokenMap& ScXMLImport::GetFilterConditionAttrTokenMap()
    1340             : {
    1341          14 :     if( !pFilterConditionAttrTokenMap )
    1342             :     {
    1343             :         static const SvXMLTokenMapEntry aFilterConditionAttrTokenMap[] =
    1344             :         {
    1345             :             { XML_NAMESPACE_TABLE, XML_FIELD_NUMBER,    XML_TOK_CONDITION_ATTR_FIELD_NUMBER     },
    1346             :             { XML_NAMESPACE_TABLE, XML_CASE_SENSITIVE,  XML_TOK_CONDITION_ATTR_CASE_SENSITIVE   },
    1347             :             { XML_NAMESPACE_TABLE, XML_DATA_TYPE,       XML_TOK_CONDITION_ATTR_DATA_TYPE        },
    1348             :             { XML_NAMESPACE_TABLE, XML_VALUE,           XML_TOK_CONDITION_ATTR_VALUE            },
    1349             :             { XML_NAMESPACE_TABLE, XML_OPERATOR,        XML_TOK_CONDITION_ATTR_OPERATOR         },
    1350             :             XML_TOKEN_MAP_END
    1351             :         };
    1352             : 
    1353           6 :         pFilterConditionAttrTokenMap = new SvXMLTokenMap( aFilterConditionAttrTokenMap );
    1354             :     } // if( !pFilterConditionAttrTokenMap )
    1355             : 
    1356          14 :     return *pFilterConditionAttrTokenMap;
    1357             : }
    1358             : 
    1359          16 : const SvXMLTokenMap& ScXMLImport::GetFilterSetItemAttrTokenMap()
    1360             : {
    1361          16 :     if( !pFilterSetItemAttrTokenMap )
    1362             :     {
    1363             :         static const SvXMLTokenMapEntry aTokenMap[] =
    1364             :         {
    1365             :             { XML_NAMESPACE_TABLE, XML_VALUE, XML_TOK_FILTER_SET_ITEM_ATTR_VALUE },
    1366             :             XML_TOKEN_MAP_END
    1367             :         };
    1368             : 
    1369           2 :         pFilterSetItemAttrTokenMap = new SvXMLTokenMap( aTokenMap );
    1370             :     }
    1371             : 
    1372          16 :     return *pFilterSetItemAttrTokenMap;
    1373             : }
    1374             : 
    1375           4 : const SvXMLTokenMap& ScXMLImport::GetSortElemTokenMap()
    1376             : {
    1377           4 :     if( !pSortElemTokenMap )
    1378             :     {
    1379             :         static const SvXMLTokenMapEntry aSortTokenMap[] =
    1380             :         {
    1381             :             { XML_NAMESPACE_TABLE, XML_SORT_BY, XML_TOK_SORT_SORT_BY    },
    1382             :             XML_TOKEN_MAP_END
    1383             :         };
    1384             : 
    1385           4 :         pSortElemTokenMap = new SvXMLTokenMap( aSortTokenMap );
    1386             :     } // if( !pSortElemTokenMap )
    1387             : 
    1388           4 :     return *pSortElemTokenMap;
    1389             : }
    1390             : 
    1391           4 : const SvXMLTokenMap& ScXMLImport::GetSortAttrTokenMap()
    1392             : {
    1393           4 :     if( !pSortAttrTokenMap )
    1394             :     {
    1395             :         static const SvXMLTokenMapEntry aSortAttrTokenMap[] =
    1396             :         {
    1397             :             { XML_NAMESPACE_TABLE, XML_BIND_STYLES_TO_CONTENT,  XML_TOK_SORT_ATTR_BIND_STYLES_TO_CONTENT    },
    1398             :             { XML_NAMESPACE_TABLE, XML_TARGET_RANGE_ADDRESS,    XML_TOK_SORT_ATTR_TARGET_RANGE_ADDRESS      },
    1399             :             { XML_NAMESPACE_TABLE, XML_CASE_SENSITIVE,          XML_TOK_SORT_ATTR_CASE_SENSITIVE            },
    1400             :             { XML_NAMESPACE_TABLE, XML_RFC_LANGUAGE_TAG,        XML_TOK_SORT_ATTR_RFC_LANGUAGE_TAG          },
    1401             :             { XML_NAMESPACE_TABLE, XML_LANGUAGE,                XML_TOK_SORT_ATTR_LANGUAGE                  },
    1402             :             { XML_NAMESPACE_TABLE, XML_SCRIPT,                  XML_TOK_SORT_ATTR_SCRIPT                    },
    1403             :             { XML_NAMESPACE_TABLE, XML_COUNTRY,                 XML_TOK_SORT_ATTR_COUNTRY                   },
    1404             :             { XML_NAMESPACE_TABLE, XML_ALGORITHM,               XML_TOK_SORT_ATTR_ALGORITHM                 },
    1405             :             XML_TOKEN_MAP_END
    1406             :         };
    1407             : 
    1408           4 :         pSortAttrTokenMap = new SvXMLTokenMap( aSortAttrTokenMap );
    1409             :     } // if( !pSortAttrTokenMap )
    1410             : 
    1411           4 :     return *pSortAttrTokenMap;
    1412             : }
    1413             : 
    1414           4 : const SvXMLTokenMap& ScXMLImport::GetSortSortByAttrTokenMap()
    1415             : {
    1416           4 :     if( !pSortSortByAttrTokenMap )
    1417             :     {
    1418             :         static const SvXMLTokenMapEntry aSortSortByAttrTokenMap[] =
    1419             :         {
    1420             :             { XML_NAMESPACE_TABLE, XML_FIELD_NUMBER,    XML_TOK_SORT_BY_ATTR_FIELD_NUMBER   },
    1421             :             { XML_NAMESPACE_TABLE, XML_DATA_TYPE,       XML_TOK_SORT_BY_ATTR_DATA_TYPE      },
    1422             :             { XML_NAMESPACE_TABLE, XML_ORDER,           XML_TOK_SORT_BY_ATTR_ORDER          },
    1423             :             XML_TOKEN_MAP_END
    1424             :         };
    1425             : 
    1426           4 :         pSortSortByAttrTokenMap = new SvXMLTokenMap( aSortSortByAttrTokenMap );
    1427             :     } // if( !pSortSortByAttrTokenMap )
    1428             : 
    1429           4 :     return *pSortSortByAttrTokenMap;
    1430             : }
    1431             : 
    1432           0 : const SvXMLTokenMap& ScXMLImport::GetDatabaseRangeSubTotalRulesElemTokenMap()
    1433             : {
    1434           0 :     if( !pDatabaseRangeSubTotalRulesElemTokenMap )
    1435             :     {
    1436             :         static const SvXMLTokenMapEntry aDatabaseRangeSubTotalRulesTokenMap[] =
    1437             :         {
    1438             :             { XML_NAMESPACE_TABLE, XML_SORT_GROUPS,     XML_TOK_SUBTOTAL_RULES_SORT_GROUPS      },
    1439             :             { XML_NAMESPACE_TABLE, XML_SUBTOTAL_RULE,   XML_TOK_SUBTOTAL_RULES_SUBTOTAL_RULE    },
    1440             :             XML_TOKEN_MAP_END
    1441             :         };
    1442             : 
    1443           0 :         pDatabaseRangeSubTotalRulesElemTokenMap = new SvXMLTokenMap( aDatabaseRangeSubTotalRulesTokenMap );
    1444             :     } // if( !pDatabaseRangeSubTotalRulesElemTokenMap )
    1445             : 
    1446           0 :     return *pDatabaseRangeSubTotalRulesElemTokenMap;
    1447             : }
    1448             : 
    1449           0 : const SvXMLTokenMap& ScXMLImport::GetDatabaseRangeSubTotalRulesAttrTokenMap()
    1450             : {
    1451           0 :     if( !pDatabaseRangeSubTotalRulesAttrTokenMap )
    1452             :     {
    1453             :         static const SvXMLTokenMapEntry aDatabaseRangeSubTotalRulesAttrTokenMap[] =
    1454             :         {
    1455             :             { XML_NAMESPACE_TABLE, XML_BIND_STYLES_TO_CONTENT,          XML_TOK_SUBTOTAL_RULES_ATTR_BIND_STYLES_TO_CONTENT      },
    1456             :             { XML_NAMESPACE_TABLE, XML_CASE_SENSITIVE,                  XML_TOK_SUBTOTAL_RULES_ATTR_CASE_SENSITIVE              },
    1457             :             { XML_NAMESPACE_TABLE, XML_PAGE_BREAKS_ON_GROUP_CHANGE, XML_TOK_SUBTOTAL_RULES_ATTR_PAGE_BREAKS_ON_GROUP_CHANGE },
    1458             :             XML_TOKEN_MAP_END
    1459             :         };
    1460             : 
    1461           0 :         pDatabaseRangeSubTotalRulesAttrTokenMap = new SvXMLTokenMap( aDatabaseRangeSubTotalRulesAttrTokenMap );
    1462             :     } // if( !pDatabaseRangeSubTotalRulesAttrTokenMap )
    1463             : 
    1464           0 :     return *pDatabaseRangeSubTotalRulesAttrTokenMap;
    1465             : }
    1466             : 
    1467           0 : const SvXMLTokenMap& ScXMLImport::GetSubTotalRulesSortGroupsAttrTokenMap()
    1468             : {
    1469           0 :     if( !pSubTotalRulesSortGroupsAttrTokenMap )
    1470             :     {
    1471             :         static const SvXMLTokenMapEntry aSubTotalRulesSortGroupsAttrTokenMap[] =
    1472             :         {
    1473             :             { XML_NAMESPACE_TABLE, XML_DATA_TYPE,   XML_TOK_SORT_GROUPS_ATTR_DATA_TYPE  },
    1474             :             { XML_NAMESPACE_TABLE, XML_ORDER,       XML_TOK_SORT_GROUPS_ATTR_ORDER      },
    1475             :             XML_TOKEN_MAP_END
    1476             :         };
    1477             : 
    1478           0 :         pSubTotalRulesSortGroupsAttrTokenMap = new SvXMLTokenMap( aSubTotalRulesSortGroupsAttrTokenMap );
    1479             :     } // if( !pSubTotalRulesSortGroupsAttrTokenMap )
    1480             : 
    1481           0 :     return *pSubTotalRulesSortGroupsAttrTokenMap;
    1482             : }
    1483             : 
    1484           0 : const SvXMLTokenMap& ScXMLImport::GetSubTotalRulesSubTotalRuleElemTokenMap()
    1485             : {
    1486           0 :     if( !pSubTotalRulesSubTotalRuleElemTokenMap )
    1487             :     {
    1488             :         static const SvXMLTokenMapEntry aSubTotalRulesSubTotalRuleTokenMap[] =
    1489             :         {
    1490             :             { XML_NAMESPACE_TABLE, XML_SUBTOTAL_FIELD,  XML_TOK_SUBTOTAL_RULE_SUBTOTAL_FIELD    },
    1491             :             XML_TOKEN_MAP_END
    1492             :         };
    1493             : 
    1494           0 :         pSubTotalRulesSubTotalRuleElemTokenMap = new SvXMLTokenMap( aSubTotalRulesSubTotalRuleTokenMap );
    1495             :     } // if( !pSubTotalRulesSubTotalRuleElemTokenMap )
    1496             : 
    1497           0 :     return *pSubTotalRulesSubTotalRuleElemTokenMap;
    1498             : }
    1499             : 
    1500           0 : const SvXMLTokenMap& ScXMLImport::GetSubTotalRulesSubTotalRuleAttrTokenMap()
    1501             : {
    1502           0 :     if( !pSubTotalRulesSubTotalRuleAttrTokenMap )
    1503             :     {
    1504             :         static const SvXMLTokenMapEntry aSubTotalRulesSubTotalRuleAttrTokenMap[] =
    1505             :         {
    1506             :             { XML_NAMESPACE_TABLE, XML_GROUP_BY_FIELD_NUMBER,   XML_TOK_SUBTOTAL_RULE_ATTR_GROUP_BY_FIELD_NUMBER    },
    1507             :             XML_TOKEN_MAP_END
    1508             :         };
    1509             : 
    1510           0 :         pSubTotalRulesSubTotalRuleAttrTokenMap = new SvXMLTokenMap( aSubTotalRulesSubTotalRuleAttrTokenMap );
    1511             :     } // if( !pSubTotalRulesSubTotalRuleAttrTokenMap )
    1512             : 
    1513           0 :     return *pSubTotalRulesSubTotalRuleAttrTokenMap;
    1514             : }
    1515             : 
    1516           0 : const SvXMLTokenMap& ScXMLImport::GetSubTotalRuleSubTotalFieldAttrTokenMap()
    1517             : {
    1518           0 :     if( !pSubTotalRuleSubTotalFieldAttrTokenMap )
    1519             :     {
    1520             :         static const SvXMLTokenMapEntry aSubTotalRuleSubTotalFieldAttrTokenMap[] =
    1521             :         {
    1522             :             { XML_NAMESPACE_TABLE, XML_FIELD_NUMBER,    XML_TOK_SUBTOTAL_FIELD_ATTR_FIELD_NUMBER    },
    1523             :             { XML_NAMESPACE_TABLE, XML_FUNCTION,        XML_TOK_SUBTOTAL_FIELD_ATTR_FUNCTION        },
    1524             :             XML_TOKEN_MAP_END
    1525             :         };
    1526             : 
    1527           0 :         pSubTotalRuleSubTotalFieldAttrTokenMap = new SvXMLTokenMap( aSubTotalRuleSubTotalFieldAttrTokenMap );
    1528             :     } // if( !pSubTotalRuleSubTotalFieldAttrTokenMap )
    1529             : 
    1530           0 :     return *pSubTotalRuleSubTotalFieldAttrTokenMap;
    1531             : }
    1532             : 
    1533          14 : const SvXMLTokenMap& ScXMLImport::GetDataPilotTablesElemTokenMap()
    1534             : {
    1535          14 :     if( !pDataPilotTablesElemTokenMap )
    1536             :     {
    1537             :         static const SvXMLTokenMapEntry aDataPilotTablesElemTokenMap[] =
    1538             :         {
    1539             :             { XML_NAMESPACE_TABLE, XML_DATA_PILOT_TABLE,    XML_TOK_DATA_PILOT_TABLE    },
    1540             :             XML_TOKEN_MAP_END
    1541             :         };
    1542             : 
    1543          10 :         pDataPilotTablesElemTokenMap = new SvXMLTokenMap( aDataPilotTablesElemTokenMap );
    1544             :     } // if( !pDataPilotTablesElemTokenMap )
    1545             : 
    1546          14 :     return *pDataPilotTablesElemTokenMap;
    1547             : }
    1548             : 
    1549          14 : const SvXMLTokenMap& ScXMLImport::GetDataPilotTableAttrTokenMap()
    1550             : {
    1551          14 :     if( !pDataPilotTableAttrTokenMap )
    1552             :     {
    1553             :         static const SvXMLTokenMapEntry aDataPilotTableAttrTokenMap[] =
    1554             :         {
    1555             :             { XML_NAMESPACE_TABLE, XML_NAME,                    XML_TOK_DATA_PILOT_TABLE_ATTR_NAME                  },
    1556             :             { XML_NAMESPACE_TABLE, XML_APPLICATION_DATA,        XML_TOK_DATA_PILOT_TABLE_ATTR_APPLICATION_DATA      },
    1557             :             { XML_NAMESPACE_TABLE, XML_GRAND_TOTAL,             XML_TOK_DATA_PILOT_TABLE_ATTR_GRAND_TOTAL           },
    1558             :             { XML_NAMESPACE_TABLE, XML_IGNORE_EMPTY_ROWS,       XML_TOK_DATA_PILOT_TABLE_ATTR_IGNORE_EMPTY_ROWS     },
    1559             :             { XML_NAMESPACE_TABLE, XML_IDENTIFY_CATEGORIES,     XML_TOK_DATA_PILOT_TABLE_ATTR_IDENTIFY_CATEGORIES   },
    1560             :             { XML_NAMESPACE_TABLE, XML_TARGET_RANGE_ADDRESS,    XML_TOK_DATA_PILOT_TABLE_ATTR_TARGET_RANGE_ADDRESS  },
    1561             :             { XML_NAMESPACE_TABLE, XML_BUTTONS,                 XML_TOK_DATA_PILOT_TABLE_ATTR_BUTTONS               },
    1562             :             { XML_NAMESPACE_TABLE, XML_SHOW_FILTER_BUTTON,      XML_TOK_DATA_PILOT_TABLE_ATTR_SHOW_FILTER_BUTTON    },
    1563             :             { XML_NAMESPACE_TABLE, XML_DRILL_DOWN_ON_DOUBLE_CLICK, XML_TOK_DATA_PILOT_TABLE_ATTR_DRILL_DOWN         },
    1564             :     { XML_NAMESPACE_TABLE, XML_HEADER_GRID_LAYOUT,      XML_TOK_DATA_PILOT_TABLE_ATTR_HEADER_GRID_LAYOUT    },
    1565             :             XML_TOKEN_MAP_END
    1566             :         };
    1567             : 
    1568          10 :         pDataPilotTableAttrTokenMap = new SvXMLTokenMap( aDataPilotTableAttrTokenMap );
    1569             :     } // if( !pDataPilotTableAttrTokenMap )
    1570             : 
    1571          14 :     return *pDataPilotTableAttrTokenMap;
    1572             : }
    1573             : 
    1574          90 : const SvXMLTokenMap& ScXMLImport::GetDataPilotTableElemTokenMap()
    1575             : {
    1576          90 :     if( !pDataPilotTableElemTokenMap )
    1577             :     {
    1578             :         static const SvXMLTokenMapEntry aDataPilotTableElemTokenMap[] =
    1579             :         {
    1580             :             { XML_NAMESPACE_TABLE, XML_DATABASE_SOURCE_SQL, XML_TOK_DATA_PILOT_TABLE_ELEM_SOURCE_SQL        },
    1581             :             { XML_NAMESPACE_TABLE, XML_DATABASE_SOURCE_TABLE,   XML_TOK_DATA_PILOT_TABLE_ELEM_SOURCE_TABLE      },
    1582             :             { XML_NAMESPACE_TABLE, XML_DATA_PILOT_GRAND_TOTAL,  XML_TOK_DATA_PILOT_TABLE_ELEM_GRAND_TOTAL       },
    1583             :             { XML_NAMESPACE_TABLE_EXT, XML_DATA_PILOT_GRAND_TOTAL, XML_TOK_DATA_PILOT_TABLE_ELEM_GRAND_TOTAL_EXT },
    1584             :             { XML_NAMESPACE_TABLE, XML_DATABASE_SOURCE_QUERY,   XML_TOK_DATA_PILOT_TABLE_ELEM_SOURCE_QUERY      },
    1585             :             { XML_NAMESPACE_TABLE, XML_SOURCE_SERVICE,          XML_TOK_DATA_PILOT_TABLE_ELEM_SOURCE_SERVICE    },
    1586             :             { XML_NAMESPACE_TABLE, XML_SOURCE_CELL_RANGE,       XML_TOK_DATA_PILOT_TABLE_ELEM_SOURCE_CELL_RANGE },
    1587             :             { XML_NAMESPACE_TABLE, XML_DATA_PILOT_FIELD,        XML_TOK_DATA_PILOT_TABLE_ELEM_DATA_PILOT_FIELD  },
    1588             :             XML_TOKEN_MAP_END
    1589             :         };
    1590             : 
    1591          10 :         pDataPilotTableElemTokenMap = new SvXMLTokenMap( aDataPilotTableElemTokenMap );
    1592             :     } // if( !pDataPilotTableElemTokenMap )
    1593             : 
    1594          90 :     return *pDataPilotTableElemTokenMap;
    1595             : }
    1596             : 
    1597           0 : const SvXMLTokenMap& ScXMLImport::GetDataPilotTableSourceServiceAttrTokenMap()
    1598             : {
    1599           0 :     if( !pDataPilotTableSourceServiceAttrTokenMap )
    1600             :     {
    1601             :         static const SvXMLTokenMapEntry aDataPilotTableSourceServiceAttrTokenMap[] =
    1602             :         {
    1603             :             { XML_NAMESPACE_TABLE, XML_NAME,                    XML_TOK_SOURCE_SERVICE_ATTR_NAME                },
    1604             :             { XML_NAMESPACE_TABLE, XML_SOURCE_NAME,             XML_TOK_SOURCE_SERVICE_ATTR_SOURCE_NAME         },
    1605             :             { XML_NAMESPACE_TABLE, XML_OBJECT_NAME,             XML_TOK_SOURCE_SERVICE_ATTR_OBJECT_NAME         },
    1606             :             { XML_NAMESPACE_TABLE, XML_USER_NAME,               XML_TOK_SOURCE_SERVICE_ATTR_USER_NAME           },
    1607             :             { XML_NAMESPACE_TABLE, XML_PASSWORD,                XML_TOK_SOURCE_SERVICE_ATTR_PASSWORD            },
    1608             :             XML_TOKEN_MAP_END
    1609             :         };
    1610             : 
    1611           0 :         pDataPilotTableSourceServiceAttrTokenMap = new SvXMLTokenMap( aDataPilotTableSourceServiceAttrTokenMap );
    1612             :     } // if( !pDataPilotTableSourceServiceAttrTokenMap )
    1613             : 
    1614           0 :     return *pDataPilotTableSourceServiceAttrTokenMap;
    1615             : }
    1616             : 
    1617           0 : const SvXMLTokenMap& ScXMLImport::GetDataPilotGrandTotalAttrTokenMap()
    1618             : {
    1619           0 :     if (!pDataPilotGrandTotalAttrTokenMap)
    1620             :     {
    1621             :         static const SvXMLTokenMapEntry aDataPilotGrandTotalAttrTokenMap[] =
    1622             :         {
    1623             :             { XML_NAMESPACE_TABLE,     XML_DISPLAY,      XML_TOK_DATA_PILOT_GRAND_TOTAL_ATTR_DISPLAY          },
    1624             :             { XML_NAMESPACE_TABLE,     XML_ORIENTATION,  XML_TOK_DATA_PILOT_GRAND_TOTAL_ATTR_ORIENTATION      },
    1625             :             { XML_NAMESPACE_TABLE,     XML_DISPLAY_NAME, XML_TOK_DATA_PILOT_GRAND_TOTAL_ATTR_DISPLAY_NAME     },
    1626             :             { XML_NAMESPACE_TABLE_EXT, XML_DISPLAY_NAME, XML_TOK_DATA_PILOT_GRAND_TOTAL_ATTR_DISPLAY_NAME_EXT },
    1627             :             XML_TOKEN_MAP_END
    1628             :         };
    1629             : 
    1630           0 :         pDataPilotGrandTotalAttrTokenMap = new SvXMLTokenMap( aDataPilotGrandTotalAttrTokenMap );
    1631             :     }
    1632             : 
    1633           0 :     return *pDataPilotGrandTotalAttrTokenMap;
    1634             : }
    1635             : 
    1636          14 : const SvXMLTokenMap& ScXMLImport::GetDataPilotTableSourceCellRangeAttrTokenMap()
    1637             : {
    1638          14 :     if( !pDataPilotTableSourceCellRangeAttrTokenMap )
    1639             :     {
    1640             :         static const SvXMLTokenMapEntry aDataPilotTableSourceCellRangeAttrTokenMap[] =
    1641             :         {
    1642             :             { XML_NAMESPACE_TABLE, XML_CELL_RANGE_ADDRESS, XML_TOK_SOURCE_CELL_RANGE_ATTR_CELL_RANGE_ADDRESS },
    1643             :             { XML_NAMESPACE_TABLE, XML_NAME, XML_TOK_SOURCE_CELL_RANGE_ATTR_NAME },
    1644             :             XML_TOKEN_MAP_END
    1645             :         };
    1646             : 
    1647          10 :         pDataPilotTableSourceCellRangeAttrTokenMap = new SvXMLTokenMap( aDataPilotTableSourceCellRangeAttrTokenMap );
    1648             :     } // if( !pDataPilotTableSourceCellRangeAttrTokenMap )
    1649             : 
    1650          14 :     return *pDataPilotTableSourceCellRangeAttrTokenMap;
    1651             : }
    1652             : 
    1653           2 : const SvXMLTokenMap& ScXMLImport::GetDataPilotTableSourceCellRangeElemTokenMap()
    1654             : {
    1655           2 :     if( !pDataPilotTableSourceCellRangeElemTokenMap )
    1656             :     {
    1657             :         static const SvXMLTokenMapEntry aDataPilotTableSourceCellRangeElemTokenMap[] =
    1658             :         {
    1659             :             { XML_NAMESPACE_TABLE, XML_FILTER,      XML_TOK_SOURCE_CELL_RANGE_ELEM_FILTER},
    1660             :             XML_TOKEN_MAP_END
    1661             :         };
    1662             : 
    1663           2 :         pDataPilotTableSourceCellRangeElemTokenMap = new SvXMLTokenMap( aDataPilotTableSourceCellRangeElemTokenMap );
    1664             :     } // if( !pDataPilotTableSourceCellRangeElemTokenMap )
    1665             : 
    1666           2 :     return *pDataPilotTableSourceCellRangeElemTokenMap;
    1667             : }
    1668             : 
    1669          76 : const SvXMLTokenMap& ScXMLImport::GetDataPilotFieldAttrTokenMap()
    1670             : {
    1671          76 :     if( !pDataPilotFieldAttrTokenMap )
    1672             :     {
    1673             :         static const SvXMLTokenMapEntry aDataPilotFieldAttrTokenMap[] =
    1674             :         {
    1675             :             { XML_NAMESPACE_TABLE,     XML_SOURCE_FIELD_NAME,    XML_TOK_DATA_PILOT_FIELD_ATTR_SOURCE_FIELD_NAME    },
    1676             :             { XML_NAMESPACE_TABLE,     XML_DISPLAY_NAME,         XML_TOK_DATA_PILOT_FIELD_ATTR_DISPLAY_NAME         },
    1677             :             { XML_NAMESPACE_TABLE_EXT, XML_DISPLAY_NAME,         XML_TOK_DATA_PILOT_FIELD_ATTR_DISPLAY_NAME_EXT     },
    1678             :             { XML_NAMESPACE_TABLE,     XML_IS_DATA_LAYOUT_FIELD, XML_TOK_DATA_PILOT_FIELD_ATTR_IS_DATA_LAYOUT_FIELD },
    1679             :             { XML_NAMESPACE_TABLE,     XML_FUNCTION,             XML_TOK_DATA_PILOT_FIELD_ATTR_FUNCTION             },
    1680             :             { XML_NAMESPACE_TABLE,     XML_ORIENTATION,          XML_TOK_DATA_PILOT_FIELD_ATTR_ORIENTATION          },
    1681             :             { XML_NAMESPACE_TABLE,     XML_SELECTED_PAGE,        XML_TOK_DATA_PILOT_FIELD_ATTR_SELECTED_PAGE        },
    1682             :             { XML_NAMESPACE_TABLE,     XML_USED_HIERARCHY,       XML_TOK_DATA_PILOT_FIELD_ATTR_USED_HIERARCHY       },
    1683             :             XML_TOKEN_MAP_END
    1684             :         };
    1685             : 
    1686          10 :         pDataPilotFieldAttrTokenMap = new SvXMLTokenMap( aDataPilotFieldAttrTokenMap );
    1687             :     } // if( !pDataPilotFieldAttrTokenMap )
    1688             : 
    1689          76 :     return *pDataPilotFieldAttrTokenMap;
    1690             : }
    1691             : 
    1692          84 : const SvXMLTokenMap& ScXMLImport::GetDataPilotFieldElemTokenMap()
    1693             : {
    1694          84 :     if( !pDataPilotFieldElemTokenMap )
    1695             :     {
    1696             :         static const SvXMLTokenMapEntry aDataPilotFieldElemTokenMap[] =
    1697             :         {
    1698             :             { XML_NAMESPACE_TABLE, XML_DATA_PILOT_LEVEL,        XML_TOK_DATA_PILOT_FIELD_ELEM_DATA_PILOT_LEVEL      },
    1699             :             { XML_NAMESPACE_TABLE, XML_DATA_PILOT_FIELD_REFERENCE, XML_TOK_DATA_PILOT_FIELD_ELEM_DATA_PILOT_REFERENCE },
    1700             :             { XML_NAMESPACE_TABLE, XML_DATA_PILOT_GROUPS,       XML_TOK_DATA_PILOT_FIELD_ELEM_DATA_PILOT_GROUPS },
    1701             :             XML_TOKEN_MAP_END
    1702             :         };
    1703             : 
    1704          10 :         pDataPilotFieldElemTokenMap = new SvXMLTokenMap( aDataPilotFieldElemTokenMap );
    1705             :     } // if( !pDataPilotFieldElemTokenMap )
    1706             : 
    1707          84 :     return *pDataPilotFieldElemTokenMap;
    1708             : }
    1709             : 
    1710          76 : const SvXMLTokenMap& ScXMLImport::GetDataPilotLevelAttrTokenMap()
    1711             : {
    1712          76 :     if( !pDataPilotLevelAttrTokenMap )
    1713             :     {
    1714             :         static const SvXMLTokenMapEntry aDataPilotLevelAttrTokenMap[] =
    1715             :         {
    1716             :             { XML_NAMESPACE_TABLE, XML_SHOW_EMPTY,              XML_TOK_DATA_PILOT_LEVEL_ATTR_SHOW_EMPTY            },
    1717             :             XML_TOKEN_MAP_END
    1718             :         };
    1719             : 
    1720          10 :         pDataPilotLevelAttrTokenMap = new SvXMLTokenMap( aDataPilotLevelAttrTokenMap );
    1721             :     } // if( !pDataPilotLevelAttrTokenMap )
    1722             : 
    1723          76 :     return *pDataPilotLevelAttrTokenMap;
    1724             : }
    1725             : 
    1726         220 : const SvXMLTokenMap& ScXMLImport::GetDataPilotLevelElemTokenMap()
    1727             : {
    1728         220 :     if( !pDataPilotLevelElemTokenMap )
    1729             :     {
    1730             :         static const SvXMLTokenMapEntry aDataPilotLevelElemTokenMap[] =
    1731             :         {
    1732             :             { XML_NAMESPACE_TABLE, XML_DATA_PILOT_SUBTOTALS,    XML_TOK_DATA_PILOT_LEVEL_ELEM_DATA_PILOT_SUBTOTALS  },
    1733             :             { XML_NAMESPACE_TABLE, XML_DATA_PILOT_MEMBERS,      XML_TOK_DATA_PILOT_LEVEL_ELEM_DATA_PILOT_MEMBERS    },
    1734             :             { XML_NAMESPACE_TABLE, XML_DATA_PILOT_DISPLAY_INFO, XML_TOK_DATA_PILOT_FIELD_ELEM_DATA_PILOT_DISPLAY_INFO },
    1735             :             { XML_NAMESPACE_TABLE, XML_DATA_PILOT_SORT_INFO,    XML_TOK_DATA_PILOT_FIELD_ELEM_DATA_PILOT_SORT_INFO  },
    1736             :             { XML_NAMESPACE_TABLE, XML_DATA_PILOT_LAYOUT_INFO,  XML_TOK_DATA_PILOT_FIELD_ELEM_DATA_PILOT_LAYOUT_INFO },
    1737             :             XML_TOKEN_MAP_END
    1738             :         };
    1739             : 
    1740          10 :         pDataPilotLevelElemTokenMap = new SvXMLTokenMap( aDataPilotLevelElemTokenMap );
    1741             :     } // if( !pDataPilotLevelElemTokenMap )
    1742             : 
    1743         220 :     return *pDataPilotLevelElemTokenMap;
    1744             : }
    1745             : 
    1746           6 : const SvXMLTokenMap& ScXMLImport::GetDataPilotSubTotalsElemTokenMap()
    1747             : {
    1748           6 :     if( !pDataPilotSubTotalsElemTokenMap )
    1749             :     {
    1750             :         static const SvXMLTokenMapEntry aDataPilotSubTotalsElemTokenMap[] =
    1751             :         {
    1752             :             { XML_NAMESPACE_TABLE, XML_DATA_PILOT_SUBTOTAL, XML_TOK_DATA_PILOT_SUBTOTALS_ELEM_DATA_PILOT_SUBTOTAL   },
    1753             :             XML_TOKEN_MAP_END
    1754             :         };
    1755             : 
    1756           4 :         pDataPilotSubTotalsElemTokenMap = new SvXMLTokenMap( aDataPilotSubTotalsElemTokenMap );
    1757             :     } // if( !pDataPilotSubTotalsElemTokenMap )
    1758             : 
    1759           6 :     return *pDataPilotSubTotalsElemTokenMap;
    1760             : }
    1761             : 
    1762           6 : const SvXMLTokenMap& ScXMLImport::GetDataPilotSubTotalAttrTokenMap()
    1763             : {
    1764           6 :     if( !pDataPilotSubTotalAttrTokenMap )
    1765             :     {
    1766             :         static const SvXMLTokenMapEntry aDataPilotSubTotalAttrTokenMap[] =
    1767             :         {
    1768             :             { XML_NAMESPACE_TABLE,     XML_FUNCTION,     XML_TOK_DATA_PILOT_SUBTOTAL_ATTR_FUNCTION         },
    1769             :             { XML_NAMESPACE_TABLE,     XML_DISPLAY_NAME, XML_TOK_DATA_PILOT_SUBTOTAL_ATTR_DISPLAY_NAME     },
    1770             :             { XML_NAMESPACE_TABLE_EXT, XML_DISPLAY_NAME, XML_TOK_DATA_PILOT_SUBTOTAL_ATTR_DISPLAY_NAME_EXT },
    1771             :             XML_TOKEN_MAP_END
    1772             :         };
    1773             : 
    1774           4 :         pDataPilotSubTotalAttrTokenMap = new SvXMLTokenMap( aDataPilotSubTotalAttrTokenMap );
    1775             :     } // if( !pDataPilotSubTotalAttrTokenMap )
    1776             : 
    1777           6 :     return *pDataPilotSubTotalAttrTokenMap;
    1778             : }
    1779             : 
    1780        5832 : const SvXMLTokenMap& ScXMLImport::GetDataPilotMembersElemTokenMap()
    1781             : {
    1782        5832 :     if( !pDataPilotMembersElemTokenMap )
    1783             :     {
    1784             :         static const SvXMLTokenMapEntry aDataPilotMembersElemTokenMap[] =
    1785             :         {
    1786             :             { XML_NAMESPACE_TABLE, XML_DATA_PILOT_MEMBER,       XML_TOK_DATA_PILOT_MEMBERS_ELEM_DATA_PILOT_MEMBER   },
    1787             :             XML_TOKEN_MAP_END
    1788             :         };
    1789             : 
    1790           8 :         pDataPilotMembersElemTokenMap = new SvXMLTokenMap( aDataPilotMembersElemTokenMap );
    1791             :     } // if( !pDataPilotMembersElemTokenMap )
    1792             : 
    1793        5832 :     return *pDataPilotMembersElemTokenMap;
    1794             : }
    1795             : 
    1796        5832 : const SvXMLTokenMap& ScXMLImport::GetDataPilotMemberAttrTokenMap()
    1797             : {
    1798        5832 :     if( !pDataPilotMemberAttrTokenMap )
    1799             :     {
    1800             :         static const SvXMLTokenMapEntry aDataPilotMemberAttrTokenMap[] =
    1801             :         {
    1802             :             { XML_NAMESPACE_TABLE,     XML_NAME,         XML_TOK_DATA_PILOT_MEMBER_ATTR_NAME             },
    1803             :             { XML_NAMESPACE_TABLE,     XML_DISPLAY_NAME, XML_TOK_DATA_PILOT_MEMBER_ATTR_DISPLAY_NAME     },
    1804             :             { XML_NAMESPACE_TABLE_EXT, XML_DISPLAY_NAME, XML_TOK_DATA_PILOT_MEMBER_ATTR_DISPLAY_NAME_EXT },
    1805             :             { XML_NAMESPACE_TABLE,     XML_DISPLAY,      XML_TOK_DATA_PILOT_MEMBER_ATTR_DISPLAY          },
    1806             :             { XML_NAMESPACE_TABLE,     XML_SHOW_DETAILS, XML_TOK_DATA_PILOT_MEMBER_ATTR_SHOW_DETAILS     },
    1807             :             XML_TOKEN_MAP_END
    1808             :         };
    1809             : 
    1810           8 :         pDataPilotMemberAttrTokenMap = new SvXMLTokenMap( aDataPilotMemberAttrTokenMap );
    1811             :     } // if( !pDataPilotMemberAttrTokenMap )
    1812             : 
    1813        5832 :     return *pDataPilotMemberAttrTokenMap;
    1814             : }
    1815             : 
    1816           0 : const SvXMLTokenMap& ScXMLImport::GetConsolidationAttrTokenMap()
    1817             : {
    1818           0 :     if( !pConsolidationAttrTokenMap )
    1819             :     {
    1820             :         static const SvXMLTokenMapEntry aConsolidationAttrTokenMap[] =
    1821             :         {
    1822             :             { XML_NAMESPACE_TABLE,  XML_FUNCTION,                       XML_TOK_CONSOLIDATION_ATTR_FUNCTION         },
    1823             :             { XML_NAMESPACE_TABLE,  XML_SOURCE_CELL_RANGE_ADDRESSES,    XML_TOK_CONSOLIDATION_ATTR_SOURCE_RANGES    },
    1824             :             { XML_NAMESPACE_TABLE,  XML_TARGET_CELL_ADDRESS,            XML_TOK_CONSOLIDATION_ATTR_TARGET_ADDRESS   },
    1825             :             { XML_NAMESPACE_TABLE,  XML_USE_LABEL,                      XML_TOK_CONSOLIDATION_ATTR_USE_LABEL        },
    1826             :             { XML_NAMESPACE_TABLE,  XML_LINK_TO_SOURCE_DATA,            XML_TOK_CONSOLIDATION_ATTR_LINK_TO_SOURCE   },
    1827             :             XML_TOKEN_MAP_END
    1828             :         };
    1829             : 
    1830           0 :         pConsolidationAttrTokenMap = new SvXMLTokenMap( aConsolidationAttrTokenMap );
    1831             :     } // if( !pConsolidationAttrTokenMap )
    1832             : 
    1833           0 :     return *pConsolidationAttrTokenMap;
    1834             : }
    1835             : 
    1836         804 : const SvXMLTokenMap& ScXMLImport::GetCellTextParaElemTokenMap()
    1837             : {
    1838         804 :     if (!pCellTextParaElemTokenMap)
    1839             :     {
    1840             :         static const SvXMLTokenMapEntry aMap[] =
    1841             :         {
    1842             :             { XML_NAMESPACE_TEXT, XML_S, XML_TOK_CELL_TEXT_S },
    1843             :             { XML_NAMESPACE_TEXT, XML_SPAN, XML_TOK_CELL_TEXT_SPAN },
    1844             :             { XML_NAMESPACE_TEXT, XML_SHEET_NAME, XML_TOK_CELL_TEXT_SHEET_NAME },
    1845             :             { XML_NAMESPACE_TEXT, XML_DATE, XML_TOK_CELL_TEXT_DATE },
    1846             :             { XML_NAMESPACE_TEXT, XML_TITLE, XML_TOK_CELL_TEXT_TITLE },
    1847             :             { XML_NAMESPACE_TEXT, XML_A, XML_TOK_CELL_TEXT_URL },
    1848             :             XML_TOKEN_MAP_END
    1849             :         };
    1850             : 
    1851          78 :         pCellTextParaElemTokenMap = new SvXMLTokenMap(aMap);
    1852             :     }
    1853         804 :     return *pCellTextParaElemTokenMap;
    1854             : }
    1855             : 
    1856          10 : const SvXMLTokenMap& ScXMLImport::GetCellTextSpanElemTokenMap()
    1857             : {
    1858          10 :     if (!pCellTextSpanElemTokenMap)
    1859             :     {
    1860             :         static const SvXMLTokenMapEntry aMap[] =
    1861             :         {
    1862             :             { XML_NAMESPACE_TEXT, XML_SHEET_NAME, XML_TOK_CELL_TEXT_SPAN_ELEM_SHEET_NAME },
    1863             :             { XML_NAMESPACE_TEXT, XML_DATE, XML_TOK_CELL_TEXT_SPAN_ELEM_DATE },
    1864             :             { XML_NAMESPACE_TEXT, XML_TITLE, XML_TOK_CELL_TEXT_SPAN_ELEM_TITLE },
    1865             :             { XML_NAMESPACE_TEXT, XML_A, XML_TOK_CELL_TEXT_SPAN_ELEM_URL },
    1866             :             { XML_NAMESPACE_TEXT, XML_S, XML_TOK_CELL_TEXT_SPAN_ELEM_S },
    1867             :             XML_TOKEN_MAP_END
    1868             :         };
    1869             : 
    1870           2 :         pCellTextSpanElemTokenMap = new SvXMLTokenMap(aMap);
    1871             :     }
    1872          10 :     return *pCellTextSpanElemTokenMap;
    1873             : }
    1874             : 
    1875         780 : const SvXMLTokenMap& ScXMLImport::GetCellTextSpanAttrTokenMap()
    1876             : {
    1877         780 :     if (!pCellTextSpanAttrTokenMap)
    1878             :     {
    1879             :         static const SvXMLTokenMapEntry aMap[] =
    1880             :         {
    1881             :             { XML_NAMESPACE_TEXT, XML_STYLE_NAME, XML_TOK_CELL_TEXT_SPAN_ATTR_STYLE_NAME },
    1882             :             XML_TOKEN_MAP_END
    1883             :         };
    1884             : 
    1885          76 :         pCellTextSpanAttrTokenMap = new SvXMLTokenMap(aMap);
    1886             :     }
    1887         780 :     return *pCellTextSpanAttrTokenMap;
    1888             : }
    1889             : 
    1890           8 : const SvXMLTokenMap& ScXMLImport::GetCellTextURLAttrTokenMap()
    1891             : {
    1892           8 :     if (!pCellTextURLAttrTokenMap)
    1893             :     {
    1894             :         static const SvXMLTokenMapEntry aMap[] =
    1895             :         {
    1896             :             { XML_NAMESPACE_XLINK, XML_HREF, XML_TOK_CELL_TEXT_URL_ATTR_UREF },
    1897             :             { XML_NAMESPACE_XLINK, XML_TYPE, XML_TOK_CELL_TEXT_URL_ATTR_TYPE },
    1898             :             XML_TOKEN_MAP_END
    1899             :         };
    1900             : 
    1901           4 :         pCellTextURLAttrTokenMap = new SvXMLTokenMap(aMap);
    1902             :     }
    1903           8 :     return *pCellTextURLAttrTokenMap;
    1904             : }
    1905             : 
    1906          14 : const SvXMLTokenMap& ScXMLImport::GetCellTextSAttrTokenMap()
    1907             : {
    1908          14 :     if (!pCellTextSAttrTokenMap)
    1909             :     {
    1910             :         static const SvXMLTokenMapEntry aMap[] =
    1911             :         {
    1912             :             { XML_NAMESPACE_TEXT, XML_C, XML_TOK_CELL_TEXT_S_ATTR_C },
    1913             :             XML_TOKEN_MAP_END
    1914             :         };
    1915             : 
    1916           8 :         pCellTextSAttrTokenMap = new SvXMLTokenMap(aMap);
    1917             :     }
    1918          14 :     return *pCellTextSAttrTokenMap;
    1919             : }
    1920             : 
    1921           0 : const SvXMLTokenMap& ScXMLImport::GetDataStreamAttrTokenMap()
    1922             : {
    1923           0 :     if (!pDataStreamAttrTokenMap)
    1924             :     {
    1925             :         static const SvXMLTokenMapEntry aMap[] =
    1926             :         {
    1927             :             { XML_NAMESPACE_XLINK, XML_HREF, XML_TOK_DATA_STREAM_ATTR_URL },
    1928             :             { XML_NAMESPACE_TABLE, XML_TARGET_RANGE_ADDRESS, XML_TOK_DATA_STREAM_ATTR_RANGE },
    1929             :             { XML_NAMESPACE_CALC_EXT, XML_EMPTY_LINE_REFRESH, XML_TOK_DATA_STREAM_ATTR_EMPTY_LINE_REFRESH },
    1930             :             { XML_NAMESPACE_CALC_EXT, XML_INSERTION_POSITION, XML_TOK_DATA_STREAM_ATTR_INSERTION_POSITION },
    1931             :             XML_TOKEN_MAP_END
    1932             :         };
    1933           0 :         pDataStreamAttrTokenMap = new SvXMLTokenMap(aMap);
    1934             :     }
    1935           0 :     return *pDataStreamAttrTokenMap;
    1936             : }
    1937             : 
    1938         988 : void ScXMLImport::SetPostProcessData( sc::ImportPostProcessData* p )
    1939             : {
    1940         988 :     mpPostProcessData = p;
    1941         988 : }
    1942             : 
    1943          14 : sc::PivotTableSources& ScXMLImport::GetPivotTableSources()
    1944             : {
    1945          14 :     if (!mpPivotSources)
    1946          10 :         mpPivotSources.reset(new sc::PivotTableSources);
    1947             : 
    1948          14 :     return *mpPivotSources;
    1949             : }
    1950             : 
    1951        1200 : SvXMLImportContext *ScXMLImport::CreateContext( sal_uInt16 nPrefix,
    1952             :                                                const OUString& rLocalName,
    1953             :                                                const uno::Reference<xml::sax::XAttributeList>& xAttrList )
    1954             : {
    1955        1200 :     SvXMLImportContext *pContext = 0;
    1956             : 
    1957        3082 :     if( (XML_NAMESPACE_OFFICE == nPrefix) &&
    1958        1910 :         ( IsXMLToken(rLocalName, XML_DOCUMENT_STYLES) ||
    1959        1380 :         IsXMLToken(rLocalName, XML_DOCUMENT_CONTENT) ||
    1960         558 :         IsXMLToken(rLocalName, XML_DOCUMENT_SETTINGS) )) {
    1961        1588 :             pContext = new ScXMLDocContext_Impl( *this, nPrefix, rLocalName,
    1962        1588 :                 xAttrList );
    1963         700 :     } else if ( (XML_NAMESPACE_OFFICE == nPrefix) &&
    1964         294 :         ( IsXMLToken(rLocalName, XML_DOCUMENT_META)) ) {
    1965         236 :             pContext = CreateMetaContext(rLocalName);
    1966         228 :     } else if ( (XML_NAMESPACE_OFFICE == nPrefix) &&
    1967          58 :         ( IsXMLToken(rLocalName, XML_DOCUMENT)) ) {
    1968             :             uno::Reference<document::XDocumentPropertiesSupplier> xDPS(
    1969          58 :                 GetModel(), uno::UNO_QUERY_THROW);
    1970             :             // flat OpenDocument file format
    1971         174 :             pContext = new ScXMLFlatDocContext_Impl( *this, nPrefix, rLocalName,
    1972         232 :                 xAttrList, xDPS->getDocumentProperties());
    1973             :     }
    1974             :     else
    1975         112 :         pContext = SvXMLImport::CreateContext( nPrefix, rLocalName, xAttrList );
    1976             : 
    1977        1200 :     return pContext;
    1978             : }
    1979             : 
    1980        1098 : ScXMLImport::ScXMLImport(
    1981             :     const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > xContext,
    1982             :     OUString const & implementationName, sal_uInt16 nImportFlag)
    1983             : :   SvXMLImport( xContext, implementationName, nImportFlag ),
    1984             :     pDoc( NULL ),
    1985             :     pChangeTrackingImportHelper(NULL),
    1986             :     pStylesImportHelper(NULL),
    1987             :     sNumberFormat(SC_UNONAME_NUMFMT),
    1988             :     sLocale(SC_LOCALE),
    1989             :     sCellStyle(SC_UNONAME_CELLSTYL),
    1990             :     sStandardFormat(SC_STANDARDFORMAT),
    1991             :     sType(SC_UNONAME_TYPE),
    1992             :     pDocElemTokenMap( 0 ),
    1993             :     pStylesElemTokenMap( 0 ),
    1994             :     pStylesAttrTokenMap( 0 ),
    1995             :     pStyleElemTokenMap( 0 ),
    1996             :     pBodyElemTokenMap( 0 ),
    1997             :     pContentValidationsElemTokenMap( 0 ),
    1998             :     pContentValidationElemTokenMap( 0 ),
    1999             :     pContentValidationAttrTokenMap( 0 ),
    2000             :     pContentValidationMessageElemTokenMap( 0 ),
    2001             :     pContentValidationHelpMessageAttrTokenMap( 0 ),
    2002             :     pContentValidationErrorMessageAttrTokenMap( 0 ),
    2003             :     pContentValidationErrorMacroAttrTokenMap( 0 ),
    2004             :     pCondFormatsTokenMap( 0 ),
    2005             :     pCondFormatTokenMap( 0 ),
    2006             :     pCondFormatAttrMap( 0 ),
    2007             :     pCondDateAttrMap( 0 ),
    2008             :     pConditionAttrMap( 0 ),
    2009             :     pColorScaleTokenMap( 0 ),
    2010             :     pColorScaleEntryAttrTokenMap( 0 ),
    2011             :     pDataBarTokenMap( 0 ),
    2012             :     pDataBarAttrMap( 0 ),
    2013             :     pFormattingEntryAttrMap( 0 ),
    2014             :     pIconSetAttrMap( 0 ),
    2015             :     pLabelRangesElemTokenMap( 0 ),
    2016             :     pLabelRangeAttrTokenMap( 0 ),
    2017             :     pTableElemTokenMap( 0 ),
    2018             :     pTableProtectionElemTokenMap(NULL),
    2019             :     pTableRowsElemTokenMap( 0 ),
    2020             :     pTableColsElemTokenMap( 0 ),
    2021             :     pTableScenarioAttrTokenMap( 0 ),
    2022             :     pTableAttrTokenMap( 0 ),
    2023             :     pTableColAttrTokenMap( 0 ),
    2024             :     pTableRowElemTokenMap( 0 ),
    2025             :     pTableRowAttrTokenMap( 0 ),
    2026             :     pTableRowCellElemTokenMap( 0 ),
    2027             :     pTableRowCellAttrTokenMap( 0 ),
    2028             :     pTableAnnotationAttrTokenMap( 0 ),
    2029             :     pDetectiveElemTokenMap( 0 ),
    2030             :     pDetectiveHighlightedAttrTokenMap( 0 ),
    2031             :     pDetectiveOperationAttrTokenMap( 0 ),
    2032             :     pTableCellRangeSourceAttrTokenMap( 0 ),
    2033             :     pNamedExpressionsElemTokenMap( 0 ),
    2034             :     pNamedRangeAttrTokenMap( 0 ),
    2035             :     pNamedExpressionAttrTokenMap( 0 ),
    2036             :     pDatabaseRangesElemTokenMap( 0 ),
    2037             :     pDatabaseRangeElemTokenMap( 0 ),
    2038             :     pDatabaseRangeAttrTokenMap( 0 ),
    2039             :     pDatabaseRangeSourceSQLAttrTokenMap( 0 ),
    2040             :     pDatabaseRangeSourceTableAttrTokenMap( 0 ),
    2041             :     pDatabaseRangeSourceQueryAttrTokenMap( 0 ),
    2042             :     pFilterElemTokenMap( 0 ),
    2043             :     pFilterAttrTokenMap( 0 ),
    2044             :     pFilterConditionElemTokenMap( 0 ),
    2045             :     pFilterConditionAttrTokenMap( 0 ),
    2046             :     pFilterSetItemAttrTokenMap( 0 ),
    2047             :     pSortElemTokenMap( 0 ),
    2048             :     pSortAttrTokenMap( 0 ),
    2049             :     pSortSortByAttrTokenMap( 0 ),
    2050             :     pDatabaseRangeSubTotalRulesElemTokenMap( 0 ),
    2051             :     pDatabaseRangeSubTotalRulesAttrTokenMap( 0 ),
    2052             :     pSubTotalRulesSortGroupsAttrTokenMap( 0 ),
    2053             :     pSubTotalRulesSubTotalRuleElemTokenMap( 0 ),
    2054             :     pSubTotalRulesSubTotalRuleAttrTokenMap( 0 ),
    2055             :     pSubTotalRuleSubTotalFieldAttrTokenMap( 0 ),
    2056             :     pDataPilotTablesElemTokenMap( 0 ),
    2057             :     pDataPilotTableAttrTokenMap( 0 ),
    2058             :     pDataPilotTableElemTokenMap( 0 ),
    2059             :     pDataPilotTableSourceServiceAttrTokenMap( 0 ),
    2060             :     pDataPilotGrandTotalAttrTokenMap(NULL),
    2061             :     pDataPilotTableSourceCellRangeElemTokenMap( 0 ),
    2062             :     pDataPilotTableSourceCellRangeAttrTokenMap( 0 ),
    2063             :     pDataPilotFieldAttrTokenMap( 0 ),
    2064             :     pDataPilotFieldElemTokenMap( 0 ),
    2065             :     pDataPilotLevelAttrTokenMap( 0 ),
    2066             :     pDataPilotLevelElemTokenMap( 0 ),
    2067             :     pDataPilotSubTotalsElemTokenMap( 0 ),
    2068             :     pDataPilotSubTotalAttrTokenMap( 0 ),
    2069             :     pDataPilotMembersElemTokenMap( 0 ),
    2070             :     pDataPilotMemberAttrTokenMap( 0 ),
    2071             :     pConsolidationAttrTokenMap( 0 ),
    2072             :     pCellTextParaElemTokenMap(NULL),
    2073             :     pCellTextSpanElemTokenMap(NULL),
    2074             :     pCellTextSpanAttrTokenMap(NULL),
    2075             :     pCellTextURLAttrTokenMap(NULL),
    2076             :     pCellTextSAttrTokenMap(NULL),
    2077             :     pDataStreamAttrTokenMap(NULL),
    2078             :     mpPostProcessData(NULL),
    2079             :     aTables(*this),
    2080             :     pMyNamedExpressions(NULL),
    2081             :     pMyLabelRanges(NULL),
    2082             :     pValidations(NULL),
    2083             :     pDetectiveOpArray(NULL),
    2084             :     pSolarMutexGuard(NULL),
    2085             :     pNumberFormatAttributesExportHelper(NULL),
    2086             :     pStyleNumberFormats(NULL),
    2087             :     sPrevStyleName(),
    2088             :     sPrevCurrency(),
    2089             :     nSolarMutexLocked(0),
    2090             :     nProgressCount(0),
    2091             :     nStyleFamilyMask( 0 ),
    2092             :     nPrevCellType(0),
    2093             :     bLoadDoc( true ),
    2094             :     bRemoveLastChar(false),
    2095             :     bNullDateSetted(false),
    2096             :     bSelfImportingXMLSet(false),
    2097             :     mbLockSolarMutex(true),
    2098             :     mbImportStyles(true),
    2099        1098 :     mbHasNewCondFormatData(false)
    2100             : {
    2101        1098 :     pStylesImportHelper = new ScMyStylesImportHelper(*this);
    2102             : 
    2103        1098 :     xScPropHdlFactory = new XMLScPropHdlFactory;
    2104        1098 :     xCellStylesPropertySetMapper = new XMLPropertySetMapper((XMLPropertyMapEntry*)aXMLScCellStylesProperties, xScPropHdlFactory, false);
    2105        1098 :     xColumnStylesPropertySetMapper = new XMLPropertySetMapper((XMLPropertyMapEntry*)aXMLScColumnStylesProperties, xScPropHdlFactory, false);
    2106        1098 :     xRowStylesPropertySetMapper = new XMLPropertySetMapper((XMLPropertyMapEntry*)aXMLScRowStylesImportProperties, xScPropHdlFactory, false);
    2107        1098 :     xTableStylesPropertySetMapper = new XMLPropertySetMapper((XMLPropertyMapEntry*)aXMLScTableStylesImportProperties, xScPropHdlFactory, false);
    2108             : 
    2109             :     // #i66550# needed for 'presentation:event-listener' element for URLs in shapes
    2110        1098 :     GetNamespaceMap().Add(
    2111        1098 :         GetXMLToken( XML_NP_PRESENTATION ),
    2112        1098 :         GetXMLToken( XML_N_PRESENTATION ),
    2113        1098 :         XML_NAMESPACE_PRESENTATION );
    2114             : 
    2115             :     // initialize cell type map.
    2116             :     const struct { XMLTokenEnum  _token; sal_Int16 _type; } aCellTypePairs[] =
    2117             :     {
    2118             :         { XML_FLOAT,        util::NumberFormat::NUMBER },
    2119             :         { XML_STRING,       util::NumberFormat::TEXT },
    2120             :         { XML_TIME,         util::NumberFormat::TIME },
    2121             :         { XML_DATE,         util::NumberFormat::DATETIME },
    2122             :         { XML_PERCENTAGE,   util::NumberFormat::PERCENT },
    2123             :         { XML_CURRENCY,     util::NumberFormat::CURRENCY },
    2124             :         { XML_BOOLEAN,      util::NumberFormat::LOGICAL }
    2125        1098 :     };
    2126        1098 :     size_t n = sizeof(aCellTypePairs)/sizeof(aCellTypePairs[0]);
    2127        8784 :     for (size_t i = 0; i < n; ++i)
    2128             :     {
    2129             :         aCellTypeMap.insert(
    2130             :             CellTypeMap::value_type(
    2131        7686 :                 GetXMLToken(aCellTypePairs[i]._token), aCellTypePairs[i]._type));
    2132             :     }
    2133        1098 : }
    2134             : 
    2135        3294 : ScXMLImport::~ScXMLImport() throw()
    2136             : {
    2137             :     //  delete pI18NMap;
    2138        1098 :     delete pDocElemTokenMap;
    2139        1098 :     delete pStylesElemTokenMap;
    2140        1098 :     delete pStylesAttrTokenMap;
    2141        1098 :     delete pStyleElemTokenMap;
    2142        1098 :     delete pBodyElemTokenMap;
    2143        1098 :     delete pContentValidationsElemTokenMap;
    2144        1098 :     delete pContentValidationElemTokenMap;
    2145        1098 :     delete pContentValidationAttrTokenMap;
    2146        1098 :     delete pContentValidationMessageElemTokenMap;
    2147        1098 :     delete pContentValidationHelpMessageAttrTokenMap;
    2148        1098 :     delete pContentValidationErrorMessageAttrTokenMap;
    2149        1098 :     delete pContentValidationErrorMacroAttrTokenMap;
    2150        1098 :     delete pCondFormatsTokenMap;
    2151        1098 :     delete pCondFormatTokenMap;
    2152        1098 :     delete pCondFormatAttrMap;
    2153        1098 :     delete pCondDateAttrMap;
    2154        1098 :     delete pConditionAttrMap;
    2155        1098 :     delete pColorScaleTokenMap;
    2156        1098 :     delete pColorScaleEntryAttrTokenMap;
    2157        1098 :     delete pDataBarTokenMap;
    2158        1098 :     delete pDataBarAttrMap;
    2159        1098 :     delete pFormattingEntryAttrMap;
    2160        1098 :     delete pLabelRangesElemTokenMap;
    2161        1098 :     delete pLabelRangeAttrTokenMap;
    2162        1098 :     delete pTableElemTokenMap;
    2163        1098 :     delete pTableProtectionElemTokenMap;
    2164        1098 :     delete pTableRowsElemTokenMap;
    2165        1098 :     delete pTableColsElemTokenMap;
    2166        1098 :     delete pTableAttrTokenMap;
    2167        1098 :     delete pTableScenarioAttrTokenMap;
    2168        1098 :     delete pTableColAttrTokenMap;
    2169        1098 :     delete pTableRowElemTokenMap;
    2170        1098 :     delete pTableRowAttrTokenMap;
    2171        1098 :     delete pTableRowCellElemTokenMap;
    2172        1098 :     delete pTableRowCellAttrTokenMap;
    2173        1098 :     delete pTableAnnotationAttrTokenMap;
    2174        1098 :     delete pDetectiveElemTokenMap;
    2175        1098 :     delete pDetectiveHighlightedAttrTokenMap;
    2176        1098 :     delete pDetectiveOperationAttrTokenMap;
    2177        1098 :     delete pTableCellRangeSourceAttrTokenMap;
    2178        1098 :     delete pNamedExpressionsElemTokenMap;
    2179        1098 :     delete pNamedRangeAttrTokenMap;
    2180        1098 :     delete pNamedExpressionAttrTokenMap;
    2181        1098 :     delete pDatabaseRangesElemTokenMap;
    2182        1098 :     delete pDatabaseRangeElemTokenMap;
    2183        1098 :     delete pDatabaseRangeAttrTokenMap;
    2184        1098 :     delete pDatabaseRangeSourceSQLAttrTokenMap;
    2185        1098 :     delete pDatabaseRangeSourceTableAttrTokenMap;
    2186        1098 :     delete pDatabaseRangeSourceQueryAttrTokenMap;
    2187        1098 :     delete pFilterElemTokenMap;
    2188        1098 :     delete pFilterAttrTokenMap;
    2189        1098 :     delete pFilterConditionElemTokenMap;
    2190        1098 :     delete pFilterConditionAttrTokenMap;
    2191        1098 :     delete pFilterSetItemAttrTokenMap;
    2192        1098 :     delete pSortElemTokenMap;
    2193        1098 :     delete pSortAttrTokenMap;
    2194        1098 :     delete pSortSortByAttrTokenMap;
    2195        1098 :     delete pDatabaseRangeSubTotalRulesElemTokenMap;
    2196        1098 :     delete pDatabaseRangeSubTotalRulesAttrTokenMap;
    2197        1098 :     delete pSubTotalRulesSortGroupsAttrTokenMap;
    2198        1098 :     delete pSubTotalRulesSubTotalRuleElemTokenMap;
    2199        1098 :     delete pSubTotalRulesSubTotalRuleAttrTokenMap;
    2200        1098 :     delete pSubTotalRuleSubTotalFieldAttrTokenMap;
    2201        1098 :     delete pDataPilotTablesElemTokenMap;
    2202        1098 :     delete pDataPilotTableAttrTokenMap;
    2203        1098 :     delete pDataPilotTableElemTokenMap;
    2204        1098 :     delete pDataPilotTableSourceServiceAttrTokenMap;
    2205        1098 :     delete pDataPilotTableSourceCellRangeAttrTokenMap;
    2206        1098 :     delete pDataPilotTableSourceCellRangeElemTokenMap;
    2207        1098 :     delete pDataPilotFieldAttrTokenMap;
    2208        1098 :     delete pDataPilotFieldElemTokenMap;
    2209        1098 :     delete pDataPilotLevelAttrTokenMap;
    2210        1098 :     delete pDataPilotLevelElemTokenMap;
    2211        1098 :     delete pDataPilotSubTotalsElemTokenMap;
    2212        1098 :     delete pDataPilotSubTotalAttrTokenMap;
    2213        1098 :     delete pDataPilotMembersElemTokenMap;
    2214        1098 :     delete pDataPilotMemberAttrTokenMap;
    2215        1098 :     delete pConsolidationAttrTokenMap;
    2216        1098 :     delete pCellTextParaElemTokenMap;
    2217        1098 :     delete pCellTextSpanElemTokenMap;
    2218        1098 :     delete pCellTextSpanAttrTokenMap;
    2219        1098 :     delete pCellTextURLAttrTokenMap;
    2220        1098 :     delete pCellTextSAttrTokenMap;
    2221        1098 :     delete pDataStreamAttrTokenMap;
    2222             : 
    2223        1098 :     delete pChangeTrackingImportHelper;
    2224        1098 :     delete pNumberFormatAttributesExportHelper;
    2225        1098 :     delete pStyleNumberFormats;
    2226        1098 :     delete pStylesImportHelper;
    2227             : 
    2228        1098 :     delete pSolarMutexGuard;
    2229             : 
    2230        1098 :     delete pMyNamedExpressions;
    2231        1098 :     delete pMyLabelRanges;
    2232        1098 :     delete pValidations;
    2233        1098 :     delete pDetectiveOpArray;
    2234        2196 : }
    2235             : 
    2236        1042 : void ScXMLImport::initialize( const css::uno::Sequence<css::uno::Any>& aArguments )
    2237             :         throw (css::uno::Exception, css::uno::RuntimeException, std::exception)
    2238             : {
    2239        1042 :     SvXMLImport::initialize(aArguments);
    2240             : 
    2241        1042 :     uno::Reference<beans::XPropertySet> xInfoSet = getImportInfo();
    2242        1042 :     if (!xInfoSet.is())
    2243          12 :         return;
    2244             : 
    2245        2060 :     uno::Reference<beans::XPropertySetInfo> xInfoSetInfo = xInfoSet->getPropertySetInfo();
    2246        1030 :     if (!xInfoSetInfo.is())
    2247           0 :         return;
    2248             : 
    2249        1030 :     if (xInfoSetInfo->hasPropertyByName(SC_UNO_ODS_LOCK_SOLAR_MUTEX))
    2250        1028 :         xInfoSet->getPropertyValue(SC_UNO_ODS_LOCK_SOLAR_MUTEX) >>= mbLockSolarMutex;
    2251             : 
    2252        1030 :     if (xInfoSetInfo->hasPropertyByName(SC_UNO_ODS_IMPORT_STYLES))
    2253        2058 :         xInfoSet->getPropertyValue(SC_UNO_ODS_IMPORT_STYLES) >>= mbImportStyles;
    2254             : }
    2255             : 
    2256         586 : SvXMLImportContext *ScXMLImport::CreateFontDeclsContext(const sal_uInt16 nPrefix, const OUString& rLocalName,
    2257             :                                                         const uno::Reference<xml::sax::XAttributeList>& xAttrList)
    2258             : {
    2259             :     XMLFontStylesContext *pFSContext = new XMLFontStylesContext(
    2260         586 :         *this, nPrefix, rLocalName, xAttrList, osl_getThreadTextEncoding());
    2261         586 :     SetFontDecls(pFSContext);
    2262         586 :     SvXMLImportContext* pContext = pFSContext;
    2263         586 :     return pContext;
    2264             : }
    2265             : 
    2266         910 : SvXMLImportContext *ScXMLImport::CreateStylesContext(const OUString& rLocalName,
    2267             :                                                      const uno::Reference<xml::sax::XAttributeList>& xAttrList, bool bIsAutoStyle )
    2268             : {
    2269             :     SvXMLImportContext* pContext = new XMLTableStylesContext(
    2270         910 :         *this, XML_NAMESPACE_OFFICE, rLocalName, xAttrList, bIsAutoStyle);
    2271             : 
    2272         910 :     if (bIsAutoStyle)
    2273         586 :         SetAutoStyles(static_cast<SvXMLStylesContext*>(pContext));
    2274             :     else
    2275         324 :         SetStyles(static_cast<SvXMLStylesContext*>(pContext));
    2276             : 
    2277         910 :     return pContext;
    2278             : }
    2279             : 
    2280         322 : SvXMLImportContext *ScXMLImport::CreateBodyContext(const OUString& rLocalName,
    2281             :                                                    const uno::Reference<xml::sax::XAttributeList>& xAttrList)
    2282             : {
    2283         322 :     return new ScXMLBodyContext(*this, XML_NAMESPACE_OFFICE, rLocalName, xAttrList);
    2284             : }
    2285             : 
    2286         236 : SvXMLImportContext *ScXMLImport::CreateMetaContext(
    2287             :     const OUString& rLocalName )
    2288             : {
    2289         236 :     SvXMLImportContext* pContext = NULL;
    2290             : 
    2291         236 :     if (getImportFlags() & IMPORT_META)
    2292             :     {
    2293             :         uno::Reference<document::XDocumentPropertiesSupplier> xDPS(
    2294         236 :             GetModel(), uno::UNO_QUERY_THROW);
    2295             :         uno::Reference<document::XDocumentProperties> const xDocProps(
    2296         472 :             (IsStylesOnlyMode()) ? 0 : xDPS->getDocumentProperties());
    2297         472 :         pContext = new SvXMLMetaDocumentContext(*this,
    2298             :             XML_NAMESPACE_OFFICE, rLocalName,
    2299         708 :             xDocProps);
    2300             :     }
    2301             : 
    2302         236 :     if( !pContext )
    2303             :         pContext = new SvXMLImportContext( *this,
    2304           0 :         XML_NAMESPACE_OFFICE, rLocalName );
    2305             : 
    2306         236 :     return pContext;
    2307             : }
    2308             : 
    2309         266 : SvXMLImportContext *ScXMLImport::CreateScriptContext(
    2310             :     const OUString& rLocalName )
    2311             : {
    2312         266 :     SvXMLImportContext* pContext = NULL;
    2313             : 
    2314         266 :     if( !(IsStylesOnlyMode()) )
    2315             :     {
    2316             :         pContext = new XMLScriptContext( *this,
    2317             :             XML_NAMESPACE_OFFICE, rLocalName,
    2318         266 :             GetModel() );
    2319             :     }
    2320             : 
    2321         266 :     if( !pContext )
    2322             :         pContext = new SvXMLImportContext( *this, XML_NAMESPACE_OFFICE,
    2323           0 :         rLocalName );
    2324             : 
    2325         266 :     return pContext;
    2326             : }
    2327             : 
    2328         294 : void ScXMLImport::SetStatistics(
    2329             :                                 const uno::Sequence<beans::NamedValue> & i_rStats)
    2330             : {
    2331             :     static const char* s_stats[] =
    2332             :     { "TableCount", "CellCount", "ObjectCount", 0 };
    2333             : 
    2334         294 :     SvXMLImport::SetStatistics(i_rStats);
    2335             : 
    2336         294 :     sal_uInt32 nCount(0);
    2337        1008 :     for (sal_Int32 i = 0; i < i_rStats.getLength(); ++i) {
    2338        2856 :         for (const char** pStat = s_stats; *pStat != 0; ++pStat) {
    2339        2142 :             if (i_rStats[i].Name.equalsAscii(*pStat)) {
    2340         714 :                 sal_Int32 val = 0;
    2341         714 :                 if (i_rStats[i].Value >>= val) {
    2342         714 :                     nCount += val;
    2343             :                 } else {
    2344             :                     OSL_FAIL("ScXMLImport::SetStatistics: invalid entry");
    2345             :                 }
    2346             :             }
    2347             :         }
    2348             :     }
    2349             : 
    2350         294 :     if (nCount)
    2351             :     {
    2352         238 :         GetProgressBarHelper()->SetReference(nCount);
    2353         238 :         GetProgressBarHelper()->SetValue(0);
    2354             :     }
    2355         294 : }
    2356             : 
    2357       13552 : ScDocumentImport& ScXMLImport::GetDoc()
    2358             : {
    2359       13552 :     return *mpDocImport;
    2360             : }
    2361             : 
    2362       17156 : sal_Int16 ScXMLImport::GetCellType(const OUString& rStrValue) const
    2363             : {
    2364       17156 :     CellTypeMap::const_iterator itr = aCellTypeMap.find(rStrValue);
    2365       17156 :     if (itr != aCellTypeMap.end())
    2366       17156 :         return itr->second;
    2367             : 
    2368           0 :     return util::NumberFormat::UNDEFINED;
    2369             : }
    2370             : 
    2371         586 : XMLShapeImportHelper* ScXMLImport::CreateShapeImport()
    2372             : {
    2373         586 :     return new XMLTableShapeImportHelper(*this);
    2374             : }
    2375             : 
    2376          28 : bool ScXMLImport::GetValidation(const OUString& sName, ScMyImportValidation& aValidation)
    2377             : {
    2378          28 :     if (pValidations)
    2379             :     {
    2380          28 :         bool bFound(false);
    2381          28 :         ScMyImportValidations::iterator aItr(pValidations->begin());
    2382          28 :         ScMyImportValidations::iterator aEndItr(pValidations->end());
    2383         104 :         while(aItr != aEndItr && !bFound)
    2384             :         {
    2385          48 :             if (aItr->sName == sName)
    2386             :             {
    2387             :                 // source position must be set as string,
    2388             :                 // so sBaseCellAddress no longer has to be converted here
    2389             : 
    2390          28 :                 bFound = true;
    2391             :             }
    2392             :             else
    2393          20 :                 ++aItr;
    2394             :         }
    2395          28 :         if (bFound)
    2396          28 :             aValidation = *aItr;
    2397          28 :         return bFound;
    2398             :     }
    2399           0 :     return false;
    2400             : }
    2401             : 
    2402          12 : void ScXMLImport::AddNamedExpression(SCTAB nTab, ScMyNamedExpression* pNamedExp)
    2403             : {
    2404          12 :     ::std::unique_ptr<ScMyNamedExpression> p(pNamedExp);
    2405          12 :     SheetNamedExpMap::iterator itr = maSheetNamedExpressions.find(nTab);
    2406          12 :     if (itr == maSheetNamedExpressions.end())
    2407             :     {
    2408             :         // No chain exists for this sheet.  Create one.
    2409           8 :         ::std::unique_ptr<ScMyNamedExpressions> pNew(new ScMyNamedExpressions);
    2410           8 :         ::std::pair<SheetNamedExpMap::iterator, bool> r = o3tl::ptr_container::insert(maSheetNamedExpressions, nTab, std::move(pNew));
    2411           8 :         if (!r.second)
    2412             :             // insertion failed.
    2413          12 :             return;
    2414             : 
    2415           8 :         itr = r.first;
    2416             :     }
    2417          12 :     ScMyNamedExpressions& r = *itr->second;
    2418          12 :     o3tl::ptr_container::push_back(r, std::move(p));
    2419             : }
    2420             : 
    2421           0 : ScXMLChangeTrackingImportHelper* ScXMLImport::GetChangeTrackingImportHelper()
    2422             : {
    2423           0 :     if (!pChangeTrackingImportHelper)
    2424           0 :         pChangeTrackingImportHelper = new ScXMLChangeTrackingImportHelper();
    2425           0 :     return pChangeTrackingImportHelper;
    2426             : }
    2427             : 
    2428         324 : void ScXMLImport::InsertStyles()
    2429             : {
    2430         324 :     GetStyles()->CopyStylesToDoc(true);
    2431             : 
    2432             :     // if content is going to be loaded with the same import, set bLatinDefaultStyle flag now
    2433         324 :     if ( getImportFlags() & IMPORT_CONTENT )
    2434          58 :         ExamineDefaultStyle();
    2435         324 : }
    2436             : 
    2437         322 : void ScXMLImport::ExamineDefaultStyle()
    2438             : {
    2439         322 :     if (pDoc)
    2440             :     {
    2441             :         // #i62435# after inserting the styles, check if the default style has a latin-script-only
    2442             :         // number format (then, value cells can be pre-initialized with western script type)
    2443             : 
    2444         322 :         const ScPatternAttr* pDefPattern = pDoc->GetDefPattern();
    2445         322 :         if (pDefPattern && sc::NumFmtUtil::isLatinScript(*pDefPattern, *pDoc))
    2446         322 :             mpDocImport->setDefaultNumericScript(SCRIPTTYPE_LATIN);
    2447             :     }
    2448         322 : }
    2449             : 
    2450           0 : void ScXMLImport::SetChangeTrackingViewSettings(const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& rChangeProps)
    2451             : {
    2452           0 :     if (pDoc)
    2453             :     {
    2454           0 :         sal_Int32 nCount(rChangeProps.getLength());
    2455           0 :         if (nCount)
    2456             :         {
    2457           0 :             ScXMLImport::MutexGuard aGuard(*this);
    2458           0 :             sal_Int16 nTemp16(0);
    2459           0 :             boost::scoped_ptr<ScChangeViewSettings> pViewSettings(new ScChangeViewSettings());
    2460           0 :             for (sal_Int32 i = 0; i < nCount; ++i)
    2461             :             {
    2462           0 :                 OUString sName(rChangeProps[i].Name);
    2463           0 :                 if (sName.equalsAscii("ShowChanges"))
    2464           0 :                     pViewSettings->SetShowChanges(::cppu::any2bool(rChangeProps[i].Value));
    2465           0 :                 else if (sName.equalsAscii("ShowAcceptedChanges"))
    2466           0 :                     pViewSettings->SetShowAccepted(::cppu::any2bool(rChangeProps[i].Value));
    2467           0 :                 else if (sName.equalsAscii("ShowRejectedChanges"))
    2468           0 :                     pViewSettings->SetShowRejected(::cppu::any2bool(rChangeProps[i].Value));
    2469           0 :                 else if (sName.equalsAscii("ShowChangesByDatetime"))
    2470           0 :                     pViewSettings->SetHasDate(::cppu::any2bool(rChangeProps[i].Value));
    2471           0 :                 else if (sName.equalsAscii("ShowChangesByDatetimeMode"))
    2472             :                 {
    2473           0 :                     if (rChangeProps[i].Value >>= nTemp16)
    2474           0 :                         pViewSettings->SetTheDateMode(ScChgsDateMode(nTemp16));
    2475             :                 }
    2476           0 :                 else if (sName.equalsAscii("ShowChangesByDatetimeFirstDatetime"))
    2477             :                 {
    2478           0 :                     util::DateTime aDateTime;
    2479           0 :                     if (rChangeProps[i].Value >>= aDateTime)
    2480             :                     {
    2481           0 :                         DateTime aCoreDateTime( DateTime::EMPTY );
    2482           0 :                         ScXMLConverter::ConvertAPIToCoreDateTime(aDateTime, aCoreDateTime);
    2483           0 :                         pViewSettings->SetTheFirstDateTime(aCoreDateTime);
    2484             :                     }
    2485             :                 }
    2486           0 :                 else if (sName.equalsAscii("ShowChangesByDatetimeSecondDatetime"))
    2487             :                 {
    2488           0 :                     util::DateTime aDateTime;
    2489           0 :                     if (rChangeProps[i].Value >>= aDateTime)
    2490             :                     {
    2491           0 :                         DateTime aCoreDateTime( DateTime::EMPTY );
    2492           0 :                         ScXMLConverter::ConvertAPIToCoreDateTime(aDateTime, aCoreDateTime);
    2493           0 :                         pViewSettings->SetTheLastDateTime(aCoreDateTime);
    2494             :                     }
    2495             :                 }
    2496           0 :                 else if (sName.equalsAscii("ShowChangesByAuthor"))
    2497           0 :                     pViewSettings->SetHasAuthor(::cppu::any2bool(rChangeProps[i].Value));
    2498           0 :                 else if (sName.equalsAscii("ShowChangesByAuthorName"))
    2499             :                 {
    2500           0 :                     OUString sOUName;
    2501           0 :                     if (rChangeProps[i].Value >>= sOUName)
    2502             :                     {
    2503           0 :                         OUString sAuthorName(sOUName);
    2504           0 :                         pViewSettings->SetTheAuthorToShow(sAuthorName);
    2505           0 :                     }
    2506             :                 }
    2507           0 :                 else if (sName.equalsAscii("ShowChangesByComment"))
    2508           0 :                     pViewSettings->SetHasComment(::cppu::any2bool(rChangeProps[i].Value));
    2509           0 :                 else if (sName.equalsAscii("ShowChangesByCommentText"))
    2510             :                 {
    2511           0 :                     OUString sOUComment;
    2512           0 :                     if (rChangeProps[i].Value >>= sOUComment)
    2513             :                     {
    2514           0 :                         OUString sComment(sOUComment);
    2515           0 :                         pViewSettings->SetTheComment(sComment);
    2516           0 :                     }
    2517             :                 }
    2518           0 :                 else if (sName.equalsAscii("ShowChangesByRanges"))
    2519           0 :                     pViewSettings->SetHasRange(::cppu::any2bool(rChangeProps[i].Value));
    2520           0 :                 else if (sName.equalsAscii("ShowChangesByRangesList"))
    2521             :                 {
    2522           0 :                     OUString sRanges;
    2523           0 :                     if ((rChangeProps[i].Value >>= sRanges) && !sRanges.isEmpty())
    2524             :                     {
    2525           0 :                         ScRangeList aRangeList;
    2526             :                         ScRangeStringConverter::GetRangeListFromString(
    2527           0 :                             aRangeList, sRanges, GetDocument(), FormulaGrammar::CONV_OOO);
    2528           0 :                         pViewSettings->SetTheRangeList(aRangeList);
    2529           0 :                     }
    2530             :                 }
    2531           0 :             }
    2532           0 :             pDoc->SetChangeViewSettings(*pViewSettings);
    2533             :         }
    2534             :     }
    2535           0 : }
    2536             : 
    2537         266 : void ScXMLImport::SetViewSettings(const uno::Sequence<beans::PropertyValue>& aViewProps)
    2538             : {
    2539         266 :     sal_Int32 nCount(aViewProps.getLength());
    2540         266 :     sal_Int32 nHeight(0);
    2541         266 :     sal_Int32 nLeft(0);
    2542         266 :     sal_Int32 nTop(0);
    2543         266 :     sal_Int32 nWidth(0);
    2544        1592 :     for (sal_Int32 i = 0; i < nCount; ++i)
    2545             :     {
    2546        1326 :         OUString sName(aViewProps[i].Name);
    2547        1326 :         if (sName.equalsAscii("VisibleAreaHeight"))
    2548         266 :             aViewProps[i].Value >>= nHeight;
    2549        1060 :         else if (sName.equalsAscii("VisibleAreaLeft"))
    2550         266 :             aViewProps[i].Value >>= nLeft;
    2551         794 :         else if (sName.equalsAscii("VisibleAreaTop"))
    2552         266 :             aViewProps[i].Value >>= nTop;
    2553         528 :         else if (sName.equalsAscii("VisibleAreaWidth"))
    2554         266 :             aViewProps[i].Value >>= nWidth;
    2555         262 :         else if (sName.equalsAscii("TrackedChangesViewSettings"))
    2556             :         {
    2557           0 :             uno::Sequence<beans::PropertyValue> aChangeProps;
    2558           0 :             if(aViewProps[i].Value >>= aChangeProps)
    2559           0 :                 SetChangeTrackingViewSettings(aChangeProps);
    2560             :         }
    2561        1326 :     }
    2562         266 :     if (nHeight && nWidth)
    2563             :     {
    2564         266 :         if (GetModel().is())
    2565             :         {
    2566         266 :             ScModelObj* pDocObj(ScModelObj::getImplementation( GetModel() ));
    2567         266 :             if (pDocObj)
    2568             :             {
    2569         266 :                 SfxObjectShell* pEmbeddedObj = pDocObj->GetEmbeddedObject();
    2570         266 :                 if (pEmbeddedObj)
    2571             :                 {
    2572         266 :                     Rectangle aRect;
    2573         266 :                     aRect.setX( nLeft );
    2574         266 :                     aRect.setY( nTop );
    2575         266 :                     aRect.setWidth( nWidth );
    2576         266 :                     aRect.setHeight( nHeight );
    2577         266 :                     pEmbeddedObj->SetVisArea(aRect);
    2578             :                 }
    2579             :             }
    2580             :         }
    2581             :     }
    2582         266 : }
    2583             : 
    2584         266 : void ScXMLImport::SetConfigurationSettings(const uno::Sequence<beans::PropertyValue>& aConfigProps)
    2585             : {
    2586         266 :     if (GetModel().is())
    2587             :     {
    2588         266 :         uno::Reference <lang::XMultiServiceFactory> xMultiServiceFactory(GetModel(), uno::UNO_QUERY);
    2589         266 :         if (xMultiServiceFactory.is())
    2590             :         {
    2591         266 :             sal_Int32 nCount(aConfigProps.getLength());
    2592         266 :             OUString sCTName("TrackedChangesProtectionKey");
    2593         532 :             OUString sVBName("VBACompatibilityMode");
    2594         532 :             OUString sSCName("ScriptConfiguration");
    2595        7576 :             for (sal_Int32 i = nCount - 1; i >= 0; --i)
    2596             :             {
    2597        7310 :                 if (aConfigProps[i].Name == sCTName)
    2598             :                 {
    2599           0 :                     OUString sKey;
    2600           0 :                     if (aConfigProps[i].Value >>= sKey)
    2601             :                     {
    2602           0 :                         uno::Sequence<sal_Int8> aPass;
    2603           0 :                         ::sax::Converter::decodeBase64(aPass, sKey);
    2604           0 :                         if (aPass.getLength())
    2605             :                         {
    2606           0 :                             if (pDoc->GetChangeTrack())
    2607           0 :                                 pDoc->GetChangeTrack()->SetProtection(aPass);
    2608             :                             else
    2609             :                             {
    2610           0 :                                 std::set<OUString> aUsers;
    2611           0 :                                 ScChangeTrack* pTrack = new ScChangeTrack(pDoc, aUsers);
    2612           0 :                                 pTrack->SetProtection(aPass);
    2613           0 :                                 pDoc->SetChangeTrack(pTrack);
    2614             :                             }
    2615           0 :                         }
    2616           0 :                     }
    2617             :                 }
    2618             :                 // store the following items for later use (after document is loaded)
    2619        7310 :                 else if ((aConfigProps[i].Name == sVBName) || (aConfigProps[i].Name == sSCName))
    2620             :                 {
    2621           0 :                     uno::Reference< beans::XPropertySet > xImportInfo = getImportInfo();
    2622           0 :                     if (xImportInfo.is())
    2623             :                     {
    2624           0 :                         uno::Reference< beans::XPropertySetInfo > xPropertySetInfo = xImportInfo->getPropertySetInfo();
    2625           0 :                         if (xPropertySetInfo.is() && xPropertySetInfo->hasPropertyByName(aConfigProps[i].Name))
    2626           0 :                             xImportInfo->setPropertyValue( aConfigProps[i].Name, aConfigProps[i].Value );
    2627           0 :                     }
    2628             :                 }
    2629             :             }
    2630         532 :             uno::Reference <uno::XInterface> xInterface = xMultiServiceFactory->createInstance("com.sun.star.comp.SpreadsheetSettings");
    2631         532 :             uno::Reference <beans::XPropertySet> xProperties(xInterface, uno::UNO_QUERY);
    2632         266 :             if (xProperties.is())
    2633         532 :                 SvXMLUnitConverter::convertPropertySet(xProperties, aConfigProps);
    2634         266 :         }
    2635             :     }
    2636         266 : }
    2637             : 
    2638           0 : sal_Int32 ScXMLImport::SetCurrencySymbol(const sal_Int32 nKey, const OUString& rCurrency)
    2639             : {
    2640           0 :     uno::Reference <util::XNumberFormatsSupplier> xNumberFormatsSupplier(GetNumberFormatsSupplier());
    2641           0 :     if (xNumberFormatsSupplier.is())
    2642             :     {
    2643           0 :         uno::Reference <util::XNumberFormats> xLocalNumberFormats(xNumberFormatsSupplier->getNumberFormats());
    2644           0 :         if (xLocalNumberFormats.is())
    2645             :         {
    2646           0 :             OUString sFormatString;
    2647             :             try
    2648             :             {
    2649           0 :                 uno::Reference <beans::XPropertySet> xProperties(xLocalNumberFormats->getByKey(nKey));
    2650           0 :                 if (xProperties.is())
    2651             :                 {
    2652           0 :                     lang::Locale aLocale;
    2653           0 :                     if (GetDocument() && (xProperties->getPropertyValue(sLocale) >>= aLocale))
    2654             :                     {
    2655             :                         {
    2656           0 :                             ScXMLImport::MutexGuard aGuard(*this);
    2657           0 :                             LocaleDataWrapper aLocaleData( comphelper::getProcessComponentContext(), LanguageTag( aLocale) );
    2658           0 :                             OUStringBuffer aBuffer(15);
    2659           0 :                             aBuffer.appendAscii("#");
    2660           0 :                             aBuffer.append( aLocaleData.getNumThousandSep() );
    2661           0 :                             aBuffer.appendAscii("##0");
    2662           0 :                             aBuffer.append( aLocaleData.getNumDecimalSep() );
    2663           0 :                             aBuffer.appendAscii("00 [$");
    2664           0 :                             aBuffer.append(rCurrency);
    2665           0 :                             aBuffer.appendAscii("]");
    2666           0 :                             sFormatString = aBuffer.makeStringAndClear();
    2667             :                         }
    2668           0 :                         sal_Int32 nNewKey = xLocalNumberFormats->queryKey(sFormatString, aLocale, true);
    2669           0 :                         if (nNewKey == -1)
    2670           0 :                             nNewKey = xLocalNumberFormats->addNew(sFormatString, aLocale);
    2671           0 :                         return nNewKey;
    2672           0 :                     }
    2673           0 :                 }
    2674             :             }
    2675           0 :             catch ( const util::MalformedNumberFormatException& rException )
    2676             :             {
    2677           0 :                 OUString sErrorMessage("Fehler im Formatstring ");
    2678           0 :                 sErrorMessage += sFormatString;
    2679           0 :                 sErrorMessage += " an Position ";
    2680           0 :                 sErrorMessage += OUString::number(rException.CheckPos);
    2681           0 :                 uno::Sequence<OUString> aSeq(1);
    2682           0 :                 aSeq[0] = sErrorMessage;
    2683           0 :                 uno::Reference<xml::sax::XLocator> xLocator;
    2684           0 :                 SetError(XMLERROR_API | XMLERROR_FLAG_ERROR, aSeq, rException.Message, xLocator);
    2685           0 :             }
    2686           0 :         }
    2687             :     }
    2688           0 :     return nKey;
    2689             : }
    2690             : 
    2691           0 : bool ScXMLImport::IsCurrencySymbol(const sal_Int32 nNumberFormat, const OUString& sCurrentCurrency, const OUString& sBankSymbol)
    2692             : {
    2693           0 :     uno::Reference <util::XNumberFormatsSupplier> xNumberFormatsSupplier(GetNumberFormatsSupplier());
    2694           0 :     if (xNumberFormatsSupplier.is())
    2695             :     {
    2696           0 :         uno::Reference <util::XNumberFormats> xLocalNumberFormats(xNumberFormatsSupplier->getNumberFormats());
    2697           0 :         if (xLocalNumberFormats.is())
    2698             :         {
    2699             :             try
    2700             :             {
    2701           0 :                 uno::Reference <beans::XPropertySet> xNumberPropertySet(xLocalNumberFormats->getByKey(nNumberFormat));
    2702           0 :                 if (xNumberPropertySet.is())
    2703             :                 {
    2704           0 :                     OUString sTemp;
    2705           0 :                     if ( xNumberPropertySet->getPropertyValue(OUString(SC_CURRENCYSYMBOL)) >>= sTemp)
    2706             :                     {
    2707           0 :                         if (sCurrentCurrency.equals(sTemp))
    2708           0 :                             return true;
    2709             :                         // #i61657# This may be a legacy currency symbol that changed in the meantime.
    2710           0 :                         if (SvNumberFormatter::GetLegacyOnlyCurrencyEntry( sCurrentCurrency, sBankSymbol) != NULL)
    2711           0 :                             return true;
    2712             :                         // In the rare case that sCurrentCurrency is not the
    2713             :                         // currency symbol, but a matching ISO code
    2714             :                         // abbreviation instead that was obtained through
    2715             :                         // XMLNumberFormatAttributesExportHelper::GetCellType(),
    2716             :                         // check with the number format's symbol. This happens,
    2717             :                         // for example, in the es_BO locale, where a legacy
    2718             :                         // B$,BOB matched B$->BOP, which leads to
    2719             :                         // sCurrentCurrency being BOP, and the previous call
    2720             :                         // with BOP,BOB didn't find an entry, but B$,BOB will.
    2721           0 :                         return SvNumberFormatter::GetLegacyOnlyCurrencyEntry( sTemp, sBankSymbol) != NULL;
    2722           0 :                     }
    2723           0 :                 }
    2724             :             }
    2725           0 :             catch ( uno::Exception& )
    2726             :             {
    2727             :                 OSL_FAIL("Numberformat not found");
    2728             :             }
    2729           0 :         }
    2730             :     }
    2731           0 :     return false;
    2732             : }
    2733             : 
    2734        2458 : void ScXMLImport::SetType(uno::Reference <beans::XPropertySet>& rProperties,
    2735             :                           sal_Int32& rNumberFormat,
    2736             :                           const sal_Int16 nCellType,
    2737             :                           const OUString& rCurrency)
    2738             : {
    2739        2458 :     if (!mbImportStyles)
    2740        2458 :         return;
    2741             : 
    2742        2458 :     if ((nCellType != util::NumberFormat::TEXT) && (nCellType != util::NumberFormat::UNDEFINED))
    2743             :     {
    2744        1042 :         if (rNumberFormat == -1)
    2745         412 :             rProperties->getPropertyValue( sNumberFormat ) >>= rNumberFormat;
    2746             :         OSL_ENSURE(rNumberFormat != -1, "no NumberFormat");
    2747             :         bool bIsStandard;
    2748             :         // sCurrentCurrency may be the ISO code abbreviation if the currency
    2749             :         // symbol matches such, or if no match found the symbol itself!
    2750        1042 :         OUString sCurrentCurrency;
    2751             :         sal_Int32 nCurrentCellType(
    2752             :             GetNumberFormatAttributesExportHelper()->GetCellType(
    2753        1042 :                 rNumberFormat, sCurrentCurrency, bIsStandard) & ~util::NumberFormat::DEFINED);
    2754        1042 :         if ((nCellType != nCurrentCellType) && !((nCellType == util::NumberFormat::NUMBER &&
    2755          10 :             ((nCurrentCellType == util::NumberFormat::SCIENTIFIC) ||
    2756           2 :             (nCurrentCellType == util::NumberFormat::FRACTION) ||
    2757           2 :             (nCurrentCellType == util::NumberFormat::LOGICAL) ||
    2758         102 :             (nCurrentCellType == 0))) || (nCurrentCellType == util::NumberFormat::TEXT)) && !((nCellType == util::NumberFormat::DATETIME) &&
    2759          92 :             (nCurrentCellType == util::NumberFormat::DATE)))
    2760             :         {
    2761           8 :             if (!xNumberFormats.is())
    2762             :             {
    2763           2 :                 uno::Reference <util::XNumberFormatsSupplier> xNumberFormatsSupplier(GetNumberFormatsSupplier());
    2764           2 :                 if (xNumberFormatsSupplier.is())
    2765           2 :                     xNumberFormats.set(xNumberFormatsSupplier->getNumberFormats());
    2766             :             }
    2767           8 :             if (xNumberFormats.is())
    2768             :             {
    2769             :                 try
    2770             :                 {
    2771           8 :                     uno::Reference < beans::XPropertySet> xNumberFormatProperties(xNumberFormats->getByKey(rNumberFormat));
    2772           8 :                     if (xNumberFormatProperties.is())
    2773             :                     {
    2774           8 :                         if (nCellType != util::NumberFormat::CURRENCY)
    2775             :                         {
    2776           6 :                             lang::Locale aLocale;
    2777           6 :                             if ( xNumberFormatProperties->getPropertyValue(sLocale) >>= aLocale )
    2778             :                             {
    2779           6 :                                 if (!xNumberFormatTypes.is())
    2780           2 :                                     xNumberFormatTypes.set(uno::Reference <util::XNumberFormatTypes>(xNumberFormats, uno::UNO_QUERY));
    2781           6 :                                 rProperties->setPropertyValue( sNumberFormat, uno::makeAny(xNumberFormatTypes->getStandardFormat(nCellType, aLocale)) );
    2782           6 :                             }
    2783             :                         }
    2784           2 :                         else if (!rCurrency.isEmpty() && !sCurrentCurrency.isEmpty())
    2785             :                         {
    2786           0 :                             if (!sCurrentCurrency.equals(rCurrency))
    2787           0 :                                 if (!IsCurrencySymbol(rNumberFormat, sCurrentCurrency, rCurrency))
    2788           0 :                                     rProperties->setPropertyValue( sNumberFormat, uno::makeAny(SetCurrencySymbol(rNumberFormat, rCurrency)));
    2789             :                         }
    2790           8 :                     }
    2791             :                 }
    2792           0 :                 catch ( uno::Exception& )
    2793             :                 {
    2794             :                     OSL_FAIL("Numberformat not found");
    2795             :                 }
    2796           8 :             }
    2797             :         }
    2798             :         else
    2799             :         {
    2800        1092 :             if ((nCellType == util::NumberFormat::CURRENCY) && !rCurrency.isEmpty() && !sCurrentCurrency.isEmpty() &&
    2801        1048 :                 !sCurrentCurrency.equals(rCurrency) && !IsCurrencySymbol(rNumberFormat, sCurrentCurrency, rCurrency))
    2802           0 :                 rProperties->setPropertyValue( sNumberFormat, uno::makeAny(SetCurrencySymbol(rNumberFormat, rCurrency)));
    2803        1042 :         }
    2804             :     }
    2805             : }
    2806             : 
    2807        6038 : void ScXMLImport::AddStyleRange(const table::CellRangeAddress& rCellRange)
    2808             : {
    2809        6038 :     if (!mbImportStyles)
    2810        6038 :         return;
    2811             : 
    2812        6038 :     if (!xSheetCellRanges.is() && GetModel().is())
    2813             :     {
    2814         322 :         uno::Reference <lang::XMultiServiceFactory> xMultiServiceFactory(GetModel(), uno::UNO_QUERY);
    2815         322 :         if (xMultiServiceFactory.is())
    2816         322 :             xSheetCellRanges.set(uno::Reference <sheet::XSheetCellRangeContainer>(xMultiServiceFactory->createInstance("com.sun.star.sheet.SheetCellRanges"), uno::UNO_QUERY));
    2817         322 :         OSL_ENSURE(xSheetCellRanges.is(), "didn't get SheetCellRanges");
    2818             : 
    2819             :     }
    2820        6038 :     xSheetCellRanges->addRangeAddress(rCellRange, false);
    2821             : }
    2822             : 
    2823        2462 : void ScXMLImport::SetStyleToRanges()
    2824             : {
    2825        2462 :     if (!mbImportStyles)
    2826        2462 :         return;
    2827             : 
    2828        2462 :     if (!sPrevStyleName.isEmpty())
    2829             :     {
    2830        2458 :         uno::Reference <beans::XPropertySet> xProperties (xSheetCellRanges, uno::UNO_QUERY);
    2831        2458 :         if (xProperties.is())
    2832             :         {
    2833        2458 :             XMLTableStylesContext *pStyles(static_cast<XMLTableStylesContext *>(GetAutoStyles()));
    2834        2458 :             XMLTableStyleContext* pStyle = NULL;
    2835        2458 :             if ( pStyles )
    2836             :                 pStyle = const_cast<XMLTableStyleContext*>(static_cast<const XMLTableStyleContext *>(pStyles->FindStyleChildContext(
    2837        2458 :                         XML_STYLE_FAMILY_TABLE_CELL, sPrevStyleName, true)));
    2838        2458 :             if (pStyle)
    2839             :             {
    2840        1722 :                 pStyle->FillPropertySet(xProperties);
    2841             :                 // here needs to be the cond format import method
    2842        1722 :                 sal_Int32 nNumberFormat(pStyle->GetNumberFormat());
    2843        1722 :                 SetType(xProperties, nNumberFormat, nPrevCellType, sPrevCurrency);
    2844             : 
    2845             :                 // store first cell of first range for each style, once per sheet
    2846        1722 :                 uno::Sequence<table::CellRangeAddress> aAddresses(xSheetCellRanges->getRangeAddresses());
    2847        1722 :                 pStyle->ApplyCondFormat(aAddresses);
    2848        1722 :                 if ( aAddresses.getLength() > 0 )
    2849             :                 {
    2850        1722 :                     const table::CellRangeAddress& rRange = aAddresses[0];
    2851        1722 :                     if ( rRange.Sheet != pStyle->GetLastSheet() )
    2852             :                     {
    2853        1614 :                         ScSheetSaveData* pSheetData = ScModelObj::getImplementation(GetModel())->GetSheetSaveData();
    2854             :                         pSheetData->AddCellStyle( sPrevStyleName,
    2855        1614 :                             ScAddress( (SCCOL)rRange.StartColumn, (SCROW)rRange.StartRow, (SCTAB)rRange.Sheet ) );
    2856        1614 :                         pStyle->SetLastSheet(rRange.Sheet);
    2857             :                     }
    2858        1722 :                 }
    2859             :             }
    2860             :             else
    2861             :             {
    2862         736 :                 xProperties->setPropertyValue(sCellStyle, uno::makeAny(GetStyleDisplayName( XML_STYLE_FAMILY_TABLE_CELL, sPrevStyleName )));
    2863         736 :                 sal_Int32 nNumberFormat(GetStyleNumberFormats()->GetStyleNumberFormat(sPrevStyleName));
    2864         736 :                 bool bInsert(nNumberFormat == -1);
    2865         736 :                 SetType(xProperties, nNumberFormat, nPrevCellType, sPrevCurrency);
    2866         736 :                 if (bInsert)
    2867         464 :                     GetStyleNumberFormats()->AddStyleNumberFormat(sPrevStyleName, nNumberFormat);
    2868             :             }
    2869        2458 :         }
    2870             :     }
    2871        2462 :     if (GetModel().is())
    2872             :     {
    2873        2462 :         uno::Reference <lang::XMultiServiceFactory> xMultiServiceFactory(GetModel(), uno::UNO_QUERY);
    2874        2462 :         if (xMultiServiceFactory.is())
    2875             :             xSheetCellRanges.set(uno::Reference <sheet::XSheetCellRangeContainer>(
    2876        2462 :             xMultiServiceFactory->createInstance(
    2877        2462 :             OUString("com.sun.star.sheet.SheetCellRanges")),
    2878        2462 :             uno::UNO_QUERY));
    2879             :     }
    2880             :     OSL_ENSURE(xSheetCellRanges.is(), "didn't get SheetCellRanges");
    2881             : }
    2882             : 
    2883        6038 : void ScXMLImport::SetStyleToRange(const ScRange& rRange, const OUString* pStyleName,
    2884             :                                   const sal_Int16 nCellType, const OUString* pCurrency)
    2885             : {
    2886        6038 :     if (!mbImportStyles)
    2887        6038 :         return;
    2888             : 
    2889        6038 :     if (sPrevStyleName.isEmpty())
    2890             :     {
    2891         578 :         nPrevCellType = nCellType;
    2892         578 :         if (pStyleName)
    2893         578 :             sPrevStyleName = *pStyleName;
    2894         578 :         if (pCurrency)
    2895           0 :             sPrevCurrency = *pCurrency;
    2896         578 :         else if (!sPrevCurrency.isEmpty())
    2897           2 :             sPrevCurrency = sEmpty;
    2898             :     }
    2899       15440 :     else if ((nCellType != nPrevCellType) ||
    2900        4520 :         ((pStyleName && !pStyleName->equals(sPrevStyleName)) ||
    2901        7340 :         (!pStyleName && !sPrevStyleName.isEmpty())) ||
    2902           0 :         ((pCurrency && !pCurrency->equals(sPrevCurrency)) ||
    2903        3580 :         (!pCurrency && !sPrevCurrency.isEmpty())))
    2904             :     {
    2905        1880 :         SetStyleToRanges();
    2906        1880 :         nPrevCellType = nCellType;
    2907        1880 :         if (pStyleName)
    2908        1880 :             sPrevStyleName = *pStyleName;
    2909           0 :         else if(!sPrevStyleName.isEmpty())
    2910           0 :             sPrevStyleName = sEmpty;
    2911        1880 :         if (pCurrency)
    2912          46 :             sPrevCurrency = *pCurrency;
    2913        1834 :         else if(!sPrevCurrency.isEmpty())
    2914          10 :             sPrevCurrency = sEmpty;
    2915             :     }
    2916        6038 :     table::CellRangeAddress aCellRange;
    2917        6038 :     aCellRange.StartColumn = rRange.aStart.Col();
    2918        6038 :     aCellRange.StartRow = rRange.aStart.Row();
    2919        6038 :     aCellRange.Sheet = rRange.aStart.Tab();
    2920        6038 :     aCellRange.EndColumn = rRange.aEnd.Col();
    2921        6038 :     aCellRange.EndRow = rRange.aEnd.Row();
    2922        6038 :     AddStyleRange(aCellRange);
    2923             : }
    2924             : 
    2925         492 : bool ScXMLImport::SetNullDateOnUnitConverter()
    2926             : {
    2927         492 :     if (!bNullDateSetted)
    2928          60 :         bNullDateSetted = GetMM100UnitConverter().setNullDate(GetModel());
    2929             :     OSL_ENSURE(bNullDateSetted, "could not set the null date");
    2930         492 :     return bNullDateSetted;
    2931             : }
    2932             : 
    2933        1042 : XMLNumberFormatAttributesExportHelper* ScXMLImport::GetNumberFormatAttributesExportHelper()
    2934             : {
    2935        1042 :     if (!pNumberFormatAttributesExportHelper)
    2936         212 :         pNumberFormatAttributesExportHelper = new XMLNumberFormatAttributesExportHelper(GetNumberFormatsSupplier());
    2937        1042 :     return pNumberFormatAttributesExportHelper;
    2938             : }
    2939             : 
    2940        1200 : ScMyStyleNumberFormats* ScXMLImport::GetStyleNumberFormats()
    2941             : {
    2942        1200 :     if (!pStyleNumberFormats)
    2943         282 :         pStyleNumberFormats = new ScMyStyleNumberFormats();
    2944        1200 :     return pStyleNumberFormats;
    2945             : }
    2946             : 
    2947         582 : void ScXMLImport::SetStylesToRangesFinished()
    2948             : {
    2949         582 :     SetStyleToRanges();
    2950         582 :     sPrevStyleName = sEmpty;
    2951         582 : }
    2952             : 
    2953             : // XImporter
    2954        1098 : void SAL_CALL ScXMLImport::setTargetDocument( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >& xDoc )
    2955             : throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException, std::exception)
    2956             : {
    2957        1098 :     ScXMLImport::MutexGuard aGuard(*this);
    2958        1098 :     SvXMLImport::setTargetDocument( xDoc );
    2959             : 
    2960        2196 :     uno::Reference<frame::XModel> xModel(xDoc, uno::UNO_QUERY);
    2961        1098 :     pDoc = ScXMLConverter::GetScDocument( xModel );
    2962             :     OSL_ENSURE( pDoc, "ScXMLImport::setTargetDocument - no ScDocument!" );
    2963        1098 :     if (!pDoc)
    2964           0 :         throw lang::IllegalArgumentException();
    2965             : 
    2966        1098 :     mpDocImport.reset(new ScDocumentImport(*pDoc));
    2967        1098 :     mpComp.reset(new ScCompiler(pDoc, ScAddress()));
    2968        1098 :     mpComp->SetGrammar(formula::FormulaGrammar::GRAM_ODFF);
    2969             : 
    2970        2196 :     uno::Reference<document::XActionLockable> xActionLockable(xDoc, uno::UNO_QUERY);
    2971        1098 :     if (xActionLockable.is())
    2972        2196 :         xActionLockable->addActionLock();
    2973        1098 : }
    2974             : 
    2975             : // ::com::sun::star::xml::sax::XDocumentHandler
    2976        1088 : void SAL_CALL ScXMLImport::startDocument(void)
    2977             : throw( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException, std::exception )
    2978             : {
    2979        1088 :     ScXMLImport::MutexGuard aGuard(*this);
    2980        1088 :     SvXMLImport::startDocument();
    2981        1088 :     if (pDoc && !pDoc->IsImportingXML())
    2982             :     {
    2983          60 :         ScModelObj::getImplementation(GetModel())->BeforeXMLLoading();
    2984          60 :         bSelfImportingXMLSet = true;
    2985             :     }
    2986             : 
    2987             :     // if content and styles are loaded with separate imports,
    2988             :     // set bLatinDefaultStyle flag at the start of the content import
    2989        1088 :     sal_uInt16 nFlags = getImportFlags();
    2990        1088 :     if ( ( nFlags & IMPORT_CONTENT ) && !( nFlags & IMPORT_STYLES ) )
    2991         264 :         ExamineDefaultStyle();
    2992             : 
    2993        1088 :     if (getImportFlags() & IMPORT_CONTENT)
    2994             :     {
    2995         322 :         if (GetModel().is())
    2996             :         {
    2997             :             // store initial namespaces, to find the ones that were added from the file later
    2998         322 :             ScSheetSaveData* pSheetData = ScModelObj::getImplementation(GetModel())->GetSheetSaveData();
    2999         322 :             const SvXMLNamespaceMap& rNamespaces = GetNamespaceMap();
    3000         322 :             pSheetData->StoreInitialNamespaces(rNamespaces);
    3001             :         }
    3002             :     }
    3003             : 
    3004        2176 :     uno::Reference< beans::XPropertySet > const xImportInfo( getImportInfo() );
    3005             :     uno::Reference< beans::XPropertySetInfo > const xPropertySetInfo(
    3006        2176 :             xImportInfo.is() ? xImportInfo->getPropertySetInfo() : 0);
    3007        1088 :     if (xPropertySetInfo.is())
    3008             :     {
    3009             :         OUString const sOrganizerMode(
    3010        1030 :             "OrganizerMode");
    3011        1030 :         if (xPropertySetInfo->hasPropertyByName(sOrganizerMode))
    3012             :         {
    3013        1028 :             bool bStyleOnly(false);
    3014        1028 :             if (xImportInfo->getPropertyValue(sOrganizerMode) >>= bStyleOnly)
    3015             :             {
    3016           0 :                 bLoadDoc = !bStyleOnly;
    3017             :             }
    3018        1030 :         }
    3019             :     }
    3020             : 
    3021        2176 :     UnlockSolarMutex();
    3022        1088 : }
    3023             : 
    3024         124 : sal_Int32 ScXMLImport::GetRangeType(const OUString& sRangeType) const
    3025             : {
    3026         124 :     sal_Int32 nRangeType(0);
    3027         124 :     OUStringBuffer sBuffer;
    3028         124 :     sal_Int16 i = 0;
    3029         372 :     while (i <= sRangeType.getLength())
    3030             :     {
    3031         124 :         if ((i == sRangeType.getLength()) || (sRangeType[i] == ' '))
    3032             :         {
    3033         124 :             OUString sTemp = sBuffer.makeStringAndClear();
    3034         124 :             if (sTemp.equalsAscii(SC_REPEAT_COLUMN))
    3035           0 :                 nRangeType |= sheet::NamedRangeFlag::COLUMN_HEADER;
    3036         124 :             else if (sTemp.equalsAscii(SC_REPEAT_ROW))
    3037           0 :                 nRangeType |= sheet::NamedRangeFlag::ROW_HEADER;
    3038         124 :             else if (sTemp.equalsAscii(SC_FILTER))
    3039           0 :                 nRangeType |= sheet::NamedRangeFlag::FILTER_CRITERIA;
    3040         124 :             else if (sTemp.equalsAscii(SC_PRINT_RANGE))
    3041           0 :                 nRangeType |= sheet::NamedRangeFlag::PRINT_AREA;
    3042             :         }
    3043           0 :         else if (i < sRangeType.getLength())
    3044           0 :             sBuffer.append(sRangeType[i]);
    3045         124 :         ++i;
    3046             :     }
    3047         124 :     return nRangeType;
    3048             : }
    3049             : 
    3050         322 : void ScXMLImport::SetLabelRanges()
    3051             : {
    3052         322 :     ScMyLabelRanges* pLabelRanges = GetLabelRanges();
    3053         322 :     if (pLabelRanges)
    3054             :     {
    3055           0 :         uno::Reference <beans::XPropertySet> xPropertySet (GetModel(), uno::UNO_QUERY);
    3056           0 :         if (xPropertySet.is())
    3057             :         {
    3058           0 :             uno::Any aColAny = xPropertySet->getPropertyValue(OUString(SC_UNO_COLLABELRNG));
    3059           0 :             uno::Any aRowAny = xPropertySet->getPropertyValue(OUString(SC_UNO_ROWLABELRNG));
    3060             : 
    3061           0 :             uno::Reference< sheet::XLabelRanges > xColRanges;
    3062           0 :             uno::Reference< sheet::XLabelRanges > xRowRanges;
    3063             : 
    3064           0 :             if ( ( aColAny >>= xColRanges ) && ( aRowAny >>= xRowRanges ) )
    3065             :             {
    3066           0 :                 table::CellRangeAddress aLabelRange;
    3067           0 :                 table::CellRangeAddress aDataRange;
    3068             : 
    3069           0 :                 ScMyLabelRanges::iterator aItr = pLabelRanges->begin();
    3070           0 :                 while (aItr != pLabelRanges->end())
    3071             :                 {
    3072           0 :                     sal_Int32 nOffset1(0);
    3073           0 :                     sal_Int32 nOffset2(0);
    3074           0 :                     FormulaGrammar::AddressConvention eConv = FormulaGrammar::CONV_OOO;
    3075             : 
    3076           0 :                     if (ScRangeStringConverter::GetRangeFromString( aLabelRange, (*aItr)->sLabelRangeStr, GetDocument(), eConv, nOffset1 ) &&
    3077           0 :                         ScRangeStringConverter::GetRangeFromString( aDataRange, (*aItr)->sDataRangeStr, GetDocument(), eConv, nOffset2 ))
    3078             :                     {
    3079           0 :                         if ( (*aItr)->bColumnOrientation )
    3080           0 :                             xColRanges->addNew( aLabelRange, aDataRange );
    3081             :                         else
    3082           0 :                             xRowRanges->addNew( aLabelRange, aDataRange );
    3083             :                     }
    3084             : 
    3085           0 :                     delete *aItr;
    3086           0 :                     aItr = pLabelRanges->erase(aItr);
    3087             :                 }
    3088           0 :             }
    3089           0 :         }
    3090             :     }
    3091         322 : }
    3092             : 
    3093             : namespace {
    3094             : 
    3095             : class RangeNameInserter : public ::std::unary_function<ScMyNamedExpression, void>
    3096             : {
    3097             :     ScDocument* mpDoc;
    3098             :     ScRangeName& mrRangeName;
    3099             :     ScXMLImport& mrXmlImport;
    3100             : 
    3101             : public:
    3102          30 :     RangeNameInserter(ScDocument* pDoc, ScRangeName& rRangeName, ScXMLImport& rXmlImport) :
    3103          30 :         mpDoc(pDoc), mrRangeName(rRangeName), mrXmlImport(rXmlImport) {}
    3104             : 
    3105         124 :     void operator() (const ScMyNamedExpression& r) const
    3106             :     {
    3107             :         using namespace formula;
    3108             : 
    3109         124 :         const OUString& aType = r.sRangeType;
    3110         124 :         sal_uInt32 nUnoType = mrXmlImport.GetRangeType(aType);
    3111             : 
    3112         124 :         sal_uInt16 nNewType = RT_NAME;
    3113         124 :         if ( nUnoType & sheet::NamedRangeFlag::FILTER_CRITERIA )    nNewType |= RT_CRITERIA;
    3114         124 :         if ( nUnoType & sheet::NamedRangeFlag::PRINT_AREA )         nNewType |= RT_PRINTAREA;
    3115         124 :         if ( nUnoType & sheet::NamedRangeFlag::COLUMN_HEADER )      nNewType |= RT_COLHEADER;
    3116         124 :         if ( nUnoType & sheet::NamedRangeFlag::ROW_HEADER )         nNewType |= RT_ROWHEADER;
    3117             : 
    3118         124 :         if (mpDoc)
    3119             :         {
    3120             :             // Insert a new name.
    3121         124 :             ScAddress aPos;
    3122         124 :             sal_Int32 nOffset = 0;
    3123             :             bool bSuccess = ScRangeStringConverter::GetAddressFromString(
    3124         124 :                 aPos, r.sBaseCellAddress, mpDoc, FormulaGrammar::CONV_OOO, nOffset);
    3125             : 
    3126         124 :             if (bSuccess)
    3127             :             {
    3128         124 :                 OUString aContent = r.sContent;
    3129         124 :                 if (!r.bIsExpression)
    3130          74 :                     ScXMLConverter::ParseFormula(aContent, false);
    3131             : 
    3132             :                 ScRangeData* pData = new ScRangeData(
    3133         124 :                     mpDoc, r.sName, aContent, aPos, nNewType, r.eGrammar);
    3134         124 :                 mrRangeName.insert(pData);
    3135             :             }
    3136             :         }
    3137         124 :     }
    3138             : };
    3139             : 
    3140             : }
    3141             : 
    3142         322 : void ScXMLImport::SetNamedRanges()
    3143             : {
    3144         322 :     ScMyNamedExpressions* pNamedExpressions = GetNamedExpressions();
    3145         322 :     if (!pNamedExpressions)
    3146         300 :         return;
    3147             : 
    3148          22 :     if (!pDoc)
    3149           0 :         return;
    3150             : 
    3151             :     // Insert the namedRanges
    3152          22 :     ScRangeName* pRangeNames = pDoc->GetRangeName();
    3153          22 :     ::std::for_each(pNamedExpressions->begin(), pNamedExpressions->end(), RangeNameInserter(pDoc, *pRangeNames, *this));
    3154             : }
    3155             : 
    3156         322 : void ScXMLImport::SetSheetNamedRanges()
    3157             : {
    3158         322 :     if (!pDoc)
    3159         322 :         return;
    3160             : 
    3161         322 :     SheetNamedExpMap::const_iterator itr = maSheetNamedExpressions.begin(), itrEnd = maSheetNamedExpressions.end();
    3162         330 :     for (; itr != itrEnd; ++itr)
    3163             :     {
    3164           8 :         SCTAB nTab = itr->first;
    3165           8 :         ScRangeName* pRangeNames = pDoc->GetRangeName(nTab);
    3166           8 :         if (!pRangeNames)
    3167           0 :             continue;
    3168             : 
    3169           8 :         const ScMyNamedExpressions& rNames = *itr->second;
    3170           8 :         ::std::for_each(rNames.begin(), rNames.end(), RangeNameInserter(pDoc, *pRangeNames, *this));
    3171             :     }
    3172             : }
    3173             : 
    3174        1088 : void SAL_CALL ScXMLImport::endDocument()
    3175             :     throw(::com::sun::star::xml::sax::SAXException,
    3176             :           ::com::sun::star::uno::RuntimeException,
    3177             :           std::exception)
    3178             : {
    3179        1088 :     ScXMLImport::MutexGuard aGuard(*this);
    3180        1088 :     if (getImportFlags() & IMPORT_CONTENT)
    3181             :     {
    3182         322 :         if (GetModel().is())
    3183             :         {
    3184         322 :             mpDocImport->finalize();
    3185             : 
    3186         322 :             uno::Reference<document::XViewDataSupplier> xViewDataSupplier(GetModel(), uno::UNO_QUERY);
    3187         322 :             if (xViewDataSupplier.is())
    3188             :             {
    3189         322 :                 uno::Reference<container::XIndexAccess> xIndexAccess(xViewDataSupplier->getViewData());
    3190         322 :                 if (xIndexAccess.is() && xIndexAccess->getCount() > 0)
    3191             :                 {
    3192         322 :                     uno::Sequence< beans::PropertyValue > aSeq;
    3193         322 :                     if (xIndexAccess->getByIndex(0) >>= aSeq)
    3194             :                     {
    3195         322 :                         sal_Int32 nCount (aSeq.getLength());
    3196        2344 :                         for (sal_Int32 i = 0; i < nCount; ++i)
    3197             :                         {
    3198        2022 :                             OUString sName(aSeq[i].Name);
    3199        2022 :                             if (sName.equalsAscii(SC_ACTIVETABLE))
    3200             :                             {
    3201         322 :                                 OUString sValue;
    3202         322 :                                 if(aSeq[i].Value >>= sValue)
    3203             :                                 {
    3204         322 :                                     OUString sTabName(sValue);
    3205         322 :                                     SCTAB nTab(0);
    3206         322 :                                     if (pDoc->GetTable(sTabName, nTab))
    3207             :                                     {
    3208         264 :                                         pDoc->SetVisibleTab(nTab);
    3209         264 :                                         i = nCount;
    3210         322 :                                     }
    3211         322 :                                 }
    3212             :                             }
    3213        2022 :                         }
    3214         322 :                     }
    3215         322 :                 }
    3216             :             }
    3217         322 :             SetLabelRanges();
    3218         322 :             SetNamedRanges();
    3219         322 :             SetSheetNamedRanges();
    3220         322 :             if (mpPivotSources)
    3221             :                 // Process pivot table sources after the named ranges have been set.
    3222          10 :                 mpPivotSources->process();
    3223             :         }
    3224         322 :         GetProgressBarHelper()->End();  // make room for subsequent SfxProgressBars
    3225         322 :         if (pDoc)
    3226             :         {
    3227         322 :             pDoc->CompileXML();
    3228             : 
    3229             :             // After CompileXML, links must be completely changed to the new URLs.
    3230             :             // Otherwise, hasExternalFile for API wouldn't work (#i116940#),
    3231             :             // and typing a new formula would create a second link with the same "real" file name.
    3232         322 :             if (pDoc->HasExternalRefManager())
    3233         110 :                 pDoc->GetExternalRefManager()->updateAbsAfterLoad();
    3234             :         }
    3235             : 
    3236             :         // If the stream contains cells outside of the current limits, the styles can't be re-created,
    3237             :         // so stream copying is disabled then.
    3238         322 :         if (pDoc && GetModel().is() && !pDoc->HasRangeOverflow())
    3239             :         {
    3240             :             // set "valid stream" flags after loading (before UpdateRowHeights, so changed formula results
    3241             :             // in UpdateRowHeights can already clear the flags again)
    3242         322 :             ScSheetSaveData* pSheetData = ScModelObj::getImplementation(GetModel())->GetSheetSaveData();
    3243             : 
    3244         322 :             SCTAB nTabCount = pDoc->GetTableCount();
    3245         900 :             for (SCTAB nTab=0; nTab<nTabCount; ++nTab)
    3246             :             {
    3247         578 :                 pDoc->SetDrawPageSize(nTab);
    3248         578 :                 if (!pSheetData->IsSheetBlocked( nTab ))
    3249         474 :                     pDoc->SetStreamValid( nTab, true );
    3250             :             }
    3251             :         }
    3252         322 :         aTables.FixupOLEs();
    3253             :     }
    3254        1088 :     if (GetModel().is())
    3255             :     {
    3256        1088 :         uno::Reference<document::XActionLockable> xActionLockable(GetModel(), uno::UNO_QUERY);
    3257        1088 :         if (xActionLockable.is())
    3258        1088 :             xActionLockable->removeActionLock();
    3259             :     }
    3260        1088 :     SvXMLImport::endDocument();
    3261             : 
    3262        1088 :     if(pDoc && bSelfImportingXMLSet)
    3263          60 :         ScModelObj::getImplementation(GetModel())->AfterXMLLoading(true);
    3264        1088 : }
    3265             : 
    3266             : // XEventListener
    3267           4 : void ScXMLImport::DisposingModel()
    3268             : {
    3269           4 :     SvXMLImport::DisposingModel();
    3270           4 :     pDoc = NULL;
    3271           4 : }
    3272             : 
    3273       21368 : ScXMLImport::MutexGuard::MutexGuard(ScXMLImport& rImport) :
    3274       21368 :     mrImport(rImport)
    3275             : {
    3276       21368 :     mrImport.LockSolarMutex();
    3277       21368 : }
    3278             : 
    3279       21368 : ScXMLImport::MutexGuard::~MutexGuard()
    3280             : {
    3281       21368 :     mrImport.UnlockSolarMutex();
    3282       21368 : }
    3283             : 
    3284       21896 : void ScXMLImport::LockSolarMutex()
    3285             : {
    3286             :     // #i62677# When called from DocShell/Wrapper, the SolarMutex is already locked,
    3287             :     // so there's no need to allocate (and later delete) the SolarMutexGuard.
    3288       21896 :     if (!mbLockSolarMutex)
    3289             :     {
    3290             :         DBG_TESTSOLARMUTEX();
    3291       43068 :         return;
    3292             :     }
    3293             : 
    3294         724 :     if (nSolarMutexLocked == 0)
    3295             :     {
    3296             :         OSL_ENSURE(!pSolarMutexGuard, "Solar Mutex is locked");
    3297         662 :         pSolarMutexGuard = new SolarMutexGuard();
    3298             :     }
    3299         724 :     ++nSolarMutexLocked;
    3300             : }
    3301             : 
    3302       22984 : void ScXMLImport::UnlockSolarMutex()
    3303             : {
    3304       22984 :     if (nSolarMutexLocked > 0)
    3305             :     {
    3306         724 :         nSolarMutexLocked--;
    3307         724 :         if (nSolarMutexLocked == 0)
    3308             :         {
    3309             :             OSL_ENSURE(pSolarMutexGuard, "Solar Mutex is always unlocked");
    3310         662 :             delete pSolarMutexGuard;
    3311         662 :             pSolarMutexGuard = NULL;
    3312             :         }
    3313             :     }
    3314       22984 : }
    3315             : 
    3316        1074 : sal_Int32 ScXMLImport::GetByteOffset()
    3317             : {
    3318        1074 :     sal_Int32 nOffset = -1;
    3319        1074 :     uno::Reference<xml::sax::XLocator> xLocator = GetLocator();
    3320        2148 :     uno::Reference<io::XSeekable> xSeek( xLocator, uno::UNO_QUERY );        //! should use different interface
    3321        1074 :     if ( xSeek.is() )
    3322         988 :         nOffset = (sal_Int32)xSeek->getPosition();
    3323        2148 :     return nOffset;
    3324             : }
    3325             : 
    3326           0 : void ScXMLImport::SetRangeOverflowType(sal_uInt32 nType)
    3327             : {
    3328             :     //  #i31130# Overflow is stored in the document, because the ScXMLImport object
    3329             :     //  isn't available in ScXMLImportWrapper::ImportFromComponent when using the
    3330             :     //  OOo->Oasis transformation.
    3331             : 
    3332           0 :     if ( pDoc )
    3333           0 :         pDoc->SetRangeOverflowType( nType );
    3334           0 : }
    3335             : 
    3336       14180 : void ScXMLImport::ProgressBarIncrement(bool bEditCell, sal_Int32 nInc)
    3337             : {
    3338       14180 :     nProgressCount += nInc;
    3339       14180 :     if (bEditCell || nProgressCount > 100)
    3340             :     {
    3341          80 :         GetProgressBarHelper()->Increment(nProgressCount);
    3342          80 :         nProgressCount = 0;
    3343             :     }
    3344       14180 : }
    3345             : 
    3346        1896 : void ScXMLImport::ExtractFormulaNamespaceGrammar(
    3347             :         OUString& rFormula, OUString& rFormulaNmsp, FormulaGrammar::Grammar& reGrammar,
    3348             :         const OUString& rAttrValue, bool bRestrictToExternalNmsp ) const
    3349             : {
    3350             :     // parse the attribute value, extract namespace ID, literal namespace, and formula string
    3351        1896 :     rFormulaNmsp = OUString();
    3352        1896 :     sal_uInt16 nNsId = GetNamespaceMap()._GetKeyByAttrName( rAttrValue, 0, &rFormula, &rFormulaNmsp, false );
    3353             : 
    3354             :     // check if we have an ODF formula namespace
    3355        1896 :     if( !bRestrictToExternalNmsp ) switch( nNsId )
    3356             :     {
    3357             :         case XML_NAMESPACE_OOOC:
    3358           0 :             rFormulaNmsp = OUString();  // remove namespace string for built-in grammar
    3359           0 :             reGrammar = FormulaGrammar::GRAM_PODF;
    3360           0 :             return;
    3361             :         case XML_NAMESPACE_OF:
    3362        1714 :             rFormulaNmsp = OUString();  // remove namespace string for built-in grammar
    3363        1714 :             reGrammar = FormulaGrammar::GRAM_ODFF;
    3364        1714 :             return;
    3365             :     }
    3366             : 
    3367             :     /*  Find default grammar for formulas without namespace. There may be
    3368             :         documents in the wild that stored no namespace in ODF 1.0/1.1. Use
    3369             :         GRAM_PODF then (old style ODF 1.0/1.1 formulas). The default for ODF
    3370             :         1.2 and later without namespace is GRAM_ODFF (OpenFormula). */
    3371             :     FormulaGrammar::Grammar eDefaultGrammar =
    3372         182 :         (GetDocument()->GetStorageGrammar() == FormulaGrammar::GRAM_PODF) ?
    3373         182 :             FormulaGrammar::GRAM_PODF : FormulaGrammar::GRAM_ODFF;
    3374             : 
    3375             :     /*  Check if we have no namespace at all. The value XML_NAMESPACE_NONE
    3376             :         indicates that there is no colon. If the first character of the
    3377             :         attribute value is the equality sign, the value XML_NAMESPACE_UNKNOWN
    3378             :         indicates that there is a colon somewhere in the formula string. */
    3379         182 :     if( (nNsId == XML_NAMESPACE_NONE) || ((nNsId == XML_NAMESPACE_UNKNOWN) && (rAttrValue.toChar() == '=')) )
    3380             :     {
    3381         158 :         rFormula = rAttrValue;          // return entire string as formula
    3382         158 :         reGrammar = eDefaultGrammar;
    3383         158 :         return;
    3384             :     }
    3385             : 
    3386             :     /*  Check if a namespace URL could be resolved from the attribute value.
    3387             :         Use that namespace only, if the Calc document knows an associated
    3388             :         external formula parser. This prevents that the range operator in
    3389             :         conjunction with defined names is confused as namespaces prefix, e.g.
    3390             :         in the expression 'table:A1' where 'table' is a named reference. */
    3391          24 :     if( ((nNsId & XML_NAMESPACE_UNKNOWN_FLAG) != 0) && !rFormulaNmsp.isEmpty() &&
    3392           0 :         GetDocument()->GetFormulaParserPool().hasFormulaParser( rFormulaNmsp ) )
    3393             :     {
    3394           0 :         reGrammar = FormulaGrammar::GRAM_EXTERNAL;
    3395           0 :         return;
    3396             :     }
    3397             : 
    3398             :     /*  All attempts failed (e.g. no namespace and no leading equality sign, or
    3399             :         an invalid namespace prefix), continue with the entire attribute value. */
    3400          24 :     rFormula = rAttrValue;
    3401          24 :     rFormulaNmsp = OUString();  // remove any namespace string
    3402          24 :     reGrammar = eDefaultGrammar;
    3403             : }
    3404             : 
    3405          28 : bool ScXMLImport::IsFormulaErrorConstant( const OUString& rStr ) const
    3406             : {
    3407          28 :     if (!mpComp)
    3408           0 :         return false;
    3409             : 
    3410          28 :     return mpComp->GetErrorConstant(rStr) > 0;
    3411             : }
    3412             : 
    3413       20888 : ScEditEngineDefaulter* ScXMLImport::GetEditEngine()
    3414             : {
    3415       20888 :     if (!mpEditEngine)
    3416             :     {
    3417         322 :         mpEditEngine.reset(new ScEditEngineDefaulter(pDoc->GetEnginePool()));
    3418         322 :         mpEditEngine->SetRefMapMode(MAP_100TH_MM);
    3419         322 :         mpEditEngine->SetEditTextObjectPool(pDoc->GetEditPool());
    3420         322 :         mpEditEngine->SetUpdateMode(false);
    3421         322 :         mpEditEngine->EnableUndo(false);
    3422         322 :         mpEditEngine->SetControlWord(mpEditEngine->GetControlWord() & ~EE_CNTRL_ALLOWBIGOBJS);
    3423             :     }
    3424       20888 :     return mpEditEngine.get();
    3425             : }
    3426             : 
    3427         784 : const ScXMLEditAttributeMap& ScXMLImport::GetEditAttributeMap() const
    3428             : {
    3429         784 :     if (!mpEditAttrMap)
    3430          76 :         mpEditAttrMap.reset(new ScXMLEditAttributeMap);
    3431         784 :     return *mpEditAttrMap;
    3432             : }
    3433             : 
    3434           0 : void ScXMLImport::NotifyEmbeddedFontRead()
    3435             : {
    3436           0 :     if ( pDoc )
    3437           0 :         pDoc->SetIsUsingEmbededFonts( true );
    3438           0 : }
    3439             : 
    3440         322 : ScMyImpDetectiveOpArray* ScXMLImport::GetDetectiveOpArray()
    3441             : {
    3442         322 :     if (!pDetectiveOpArray)
    3443         322 :         pDetectiveOpArray = new ScMyImpDetectiveOpArray();
    3444         322 :     return pDetectiveOpArray;
    3445         228 : }
    3446             : 
    3447             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10