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

Generated by: LCOV version 1.10