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