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