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_xmloff.hxx" 26 27 #include <tools/string.hxx> 28 29 #include <xmloff/xmlscripti.hxx> 30 #include "sdxmlimp_impl.hxx" 31 #include "ximpbody.hxx" 32 33 #include <xmloff/xmlmetai.hxx> 34 #include "ximpstyl.hxx" 35 #include "xmloff/xmlnmspe.hxx" 36 #include <xmloff/xmltoken.hxx> 37 #include <xmloff/xmluconv.hxx> 38 #include <xmloff/DocumentSettingsContext.hxx> 39 #include <com/sun/star/form/XFormsSupplier.hpp> 40 #include <com/sun/star/task/XStatusIndicatorSupplier.hpp> 41 #include <com/sun/star/style/XStyleFamiliesSupplier.hpp> 42 #include <com/sun/star/drawing/XMasterPagesSupplier.hpp> 43 #include <com/sun/star/drawing/XDrawPagesSupplier.hpp> 44 #include "sdpropls.hxx" 45 #include <xmloff/xmlexppr.hxx> 46 #include "xmloff/xmlerror.hxx" 47 #include <tools/debug.hxx> 48 #include <com/sun/star/style/XStyle.hpp> 49 50 #include <xmloff/XMLFontStylesContext.hxx> 51 52 #include <com/sun/star/document/XDocumentProperties.hpp> 53 #include <com/sun/star/document/XDocumentPropertiesSupplier.hpp> 54 55 using ::rtl::OUString; 56 using ::rtl::OUStringBuffer; 57 58 using namespace ::com::sun::star; 59 using namespace ::xmloff::token; 60 61 ////////////////////////////////////////////////////////////////////////////// 62 63 64 65 66 67 68 69 70 71 72 73 ////////////////////////////////////////////////////////////////////////////// 74 75 class SdXMLBodyContext_Impl : public SvXMLImportContext 76 { 77 const SdXMLImport& GetSdImport() const 78 { return (const SdXMLImport&)GetImport(); } 79 SdXMLImport& GetSdImport() { return (SdXMLImport&)GetImport(); } 80 81 public: 82 83 SdXMLBodyContext_Impl( SdXMLImport& rImport, sal_uInt16 nPrfx, 84 const OUString& rLName, 85 const uno::Reference< xml::sax::XAttributeList > & xAttrList ); 86 virtual ~SdXMLBodyContext_Impl(); 87 88 virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix, 89 const OUString& rLocalName, 90 const uno::Reference< xml::sax::XAttributeList > & xAttrList ); 91 }; 92 93 SdXMLBodyContext_Impl::SdXMLBodyContext_Impl( SdXMLImport& rImport, 94 sal_uInt16 nPrfx, const OUString& rLName, 95 const uno::Reference< xml::sax::XAttributeList > & ) : 96 SvXMLImportContext( rImport, nPrfx, rLName ) 97 { 98 } 99 100 SdXMLBodyContext_Impl::~SdXMLBodyContext_Impl() 101 { 102 } 103 104 SvXMLImportContext *SdXMLBodyContext_Impl::CreateChildContext( 105 sal_uInt16 /*nPrefix*/, 106 const OUString& rLocalName, 107 const uno::Reference< xml::sax::XAttributeList > & xAttrList ) 108 { 109 return GetSdImport().CreateBodyContext(rLocalName, xAttrList); 110 } 111 112 ////////////////////////////////////////////////////////////////////////////// 113 114 // NB: virtually inherit so we can multiply inherit properly 115 // in SdXMLFlatDocContext_Impl 116 class SdXMLDocContext_Impl : public virtual SvXMLImportContext 117 { 118 protected: 119 const SdXMLImport& GetSdImport() const { return (const SdXMLImport&)GetImport(); } 120 SdXMLImport& GetSdImport() { return (SdXMLImport&)GetImport(); } 121 122 public: 123 SdXMLDocContext_Impl( 124 SdXMLImport& rImport, 125 sal_uInt16 nPrfx, 126 const OUString& rLName, 127 const uno::Reference<xml::sax::XAttributeList>& xAttrList); 128 virtual ~SdXMLDocContext_Impl(); 129 130 TYPEINFO(); 131 132 virtual SvXMLImportContext *CreateChildContext(sal_uInt16 nPrefix, 133 const OUString& rLocalName, 134 const uno::Reference<xml::sax::XAttributeList>& xAttrList); 135 }; 136 137 ////////////////////////////////////////////////////////////////////////////// 138 139 SdXMLDocContext_Impl::SdXMLDocContext_Impl( 140 SdXMLImport& rImport, 141 sal_uInt16 nPrfx, 142 const OUString& rLName, 143 const uno::Reference<xml::sax::XAttributeList>&) 144 : SvXMLImportContext(rImport, nPrfx, rLName) 145 { 146 } 147 148 ////////////////////////////////////////////////////////////////////////////// 149 150 SdXMLDocContext_Impl::~SdXMLDocContext_Impl() 151 { 152 } 153 154 TYPEINIT1( SdXMLDocContext_Impl, SvXMLImportContext ); 155 156 ////////////////////////////////////////////////////////////////////////////// 157 158 SvXMLImportContext *SdXMLDocContext_Impl::CreateChildContext( 159 sal_uInt16 nPrefix, 160 const OUString& rLocalName, 161 const uno::Reference<xml::sax::XAttributeList>& xAttrList) 162 { 163 SvXMLImportContext* pContext = 0L; 164 165 const SvXMLTokenMap& rTokenMap = GetSdImport().GetDocElemTokenMap(); 166 switch(rTokenMap.Get(nPrefix, rLocalName)) 167 { 168 case XML_TOK_DOC_FONTDECLS: 169 { 170 pContext = GetSdImport().CreateFontDeclsContext( rLocalName, xAttrList ); 171 break; 172 } 173 case XML_TOK_DOC_SETTINGS: 174 { 175 if( GetImport().getImportFlags() & IMPORT_SETTINGS ) 176 { 177 pContext = new XMLDocumentSettingsContext(GetImport(), nPrefix, rLocalName, xAttrList ); 178 } 179 break; 180 } 181 case XML_TOK_DOC_STYLES: 182 { 183 if( GetImport().getImportFlags() & IMPORT_STYLES ) 184 { 185 // office:styles inside office:document 186 pContext = GetSdImport().CreateStylesContext(rLocalName, xAttrList); 187 } 188 break; 189 } 190 case XML_TOK_DOC_AUTOSTYLES: 191 { 192 if( GetImport().getImportFlags() & IMPORT_AUTOSTYLES ) 193 { 194 // office:automatic-styles inside office:document 195 pContext = GetSdImport().CreateAutoStylesContext(rLocalName, xAttrList); 196 } 197 break; 198 } 199 case XML_TOK_DOC_MASTERSTYLES: 200 { 201 if( GetImport().getImportFlags() & IMPORT_MASTERSTYLES ) 202 { 203 // office:master-styles inside office:document 204 pContext = GetSdImport().CreateMasterStylesContext(rLocalName, xAttrList); 205 } 206 break; 207 } 208 case XML_TOK_DOC_META: 209 { 210 DBG_WARNING("XML_TOK_DOC_META: should not have come here, maybe document is invalid?"); 211 break; 212 } 213 case XML_TOK_DOC_SCRIPT: 214 { 215 if( GetImport().getImportFlags() & IMPORT_SCRIPTS ) 216 { 217 // office:script inside office:document 218 pContext = GetSdImport().CreateScriptContext( rLocalName ); 219 } 220 break; 221 } 222 case XML_TOK_DOC_BODY: 223 { 224 if( GetImport().getImportFlags() & IMPORT_CONTENT ) 225 { 226 // office:body inside office:document 227 pContext = new SdXMLBodyContext_Impl(GetSdImport(),nPrefix, 228 rLocalName, xAttrList); 229 } 230 break; 231 } 232 } 233 234 // call parent when no own context was created 235 if(!pContext) 236 pContext = SvXMLImportContext::CreateChildContext(nPrefix, rLocalName, xAttrList); 237 238 return pContext; 239 } 240 241 ////////////////////////////////////////////////////////////////////////////// 242 243 // context for flat file xml format 244 class SdXMLFlatDocContext_Impl 245 : public SdXMLDocContext_Impl, public SvXMLMetaDocumentContext 246 { 247 public: 248 SdXMLFlatDocContext_Impl( SdXMLImport& i_rImport, 249 sal_uInt16 i_nPrefix, const OUString & i_rLName, 250 const uno::Reference<xml::sax::XAttributeList>& i_xAttrList, 251 const uno::Reference<document::XDocumentProperties>& i_xDocProps, 252 const uno::Reference<xml::sax::XDocumentHandler>& i_xDocBuilder); 253 254 virtual ~SdXMLFlatDocContext_Impl(); 255 256 virtual SvXMLImportContext *CreateChildContext( 257 sal_uInt16 i_nPrefix, const OUString& i_rLocalName, 258 const uno::Reference<xml::sax::XAttributeList>& i_xAttrList); 259 }; 260 261 SdXMLFlatDocContext_Impl::SdXMLFlatDocContext_Impl( SdXMLImport& i_rImport, 262 sal_uInt16 i_nPrefix, const OUString & i_rLName, 263 const uno::Reference<xml::sax::XAttributeList>& i_xAttrList, 264 const uno::Reference<document::XDocumentProperties>& i_xDocProps, 265 const uno::Reference<xml::sax::XDocumentHandler>& i_xDocBuilder) : 266 SvXMLImportContext(i_rImport, i_nPrefix, i_rLName), 267 SdXMLDocContext_Impl(i_rImport, i_nPrefix, i_rLName, i_xAttrList), 268 SvXMLMetaDocumentContext(i_rImport, i_nPrefix, i_rLName, 269 i_xDocProps, i_xDocBuilder) 270 { 271 } 272 273 SdXMLFlatDocContext_Impl::~SdXMLFlatDocContext_Impl() { } 274 275 SvXMLImportContext *SdXMLFlatDocContext_Impl::CreateChildContext( 276 sal_uInt16 i_nPrefix, const OUString& i_rLocalName, 277 const uno::Reference<xml::sax::XAttributeList>& i_xAttrList) 278 { 279 // behave like meta base class iff we encounter office:meta 280 const SvXMLTokenMap& rTokenMap = GetSdImport().GetDocElemTokenMap(); 281 if ( XML_TOK_DOC_META == rTokenMap.Get( i_nPrefix, i_rLocalName ) ) { 282 return SvXMLMetaDocumentContext::CreateChildContext( 283 i_nPrefix, i_rLocalName, i_xAttrList ); 284 } else { 285 return SdXMLDocContext_Impl::CreateChildContext( 286 i_nPrefix, i_rLocalName, i_xAttrList ); 287 } 288 } 289 290 ////////////////////////////////////////////////////////////////////////////// 291 292 #define SERVICE(classname,servicename,implementationname,draw,flags)\ 293 uno::Sequence< OUString > SAL_CALL classname##_getSupportedServiceNames() throw()\ 294 {\ 295 const OUString aServiceName( RTL_CONSTASCII_USTRINGPARAM( servicename ) );\ 296 const uno::Sequence< OUString > aSeq( &aServiceName, 1 );\ 297 return aSeq;\ 298 }\ 299 OUString SAL_CALL classname##_getImplementationName() throw()\ 300 {\ 301 return OUString( RTL_CONSTASCII_USTRINGPARAM( implementationname ) );\ 302 }\ 303 uno::Reference< uno::XInterface > SAL_CALL classname##_createInstance(const uno::Reference< lang::XMultiServiceFactory > & rSMgr) throw( uno::Exception )\ 304 {\ 305 return (cppu::OWeakObject*)new SdXMLImport( rSMgr, draw, flags );\ 306 } 307 308 SERVICE( XMLImpressImportOasis, "com.sun.star.comp.Impress.XMLOasisImporter", "XMLImpressImportOasis", sal_False, IMPORT_ALL ) 309 SERVICE( XMLDrawImportOasis, "com.sun.star.comp.Draw.XMLOasisImporter", "XMLDrawImportOasis", sal_True, IMPORT_ALL ) 310 311 SERVICE( XMLImpressStylesImportOasis, "com.sun.star.comp.Impress.XMLOasisStylesImporter", "XMLImpressStylesImportOasis", sal_False, IMPORT_STYLES|IMPORT_AUTOSTYLES|IMPORT_MASTERSTYLES ) 312 SERVICE( XMLDrawStylesImportOasis, "com.sun.star.comp.Draw.XMLOasisStylesImporter", "XMLImpressStylesImportOasis", sal_True, IMPORT_STYLES|IMPORT_AUTOSTYLES|IMPORT_MASTERSTYLES ) 313 314 SERVICE( XMLImpressContentImportOasis, "com.sun.star.comp.Impress.XMLOasisContentImporter", "XMLImpressContentImportOasis", sal_False, IMPORT_AUTOSTYLES|IMPORT_CONTENT|IMPORT_SCRIPTS|IMPORT_FONTDECLS ) 315 SERVICE( XMLDrawContentImportOasis, "com.sun.star.comp.Draw.XMLOasisContentImporter", "XMLImpressContentImportOasis", sal_True, IMPORT_AUTOSTYLES|IMPORT_CONTENT|IMPORT_SCRIPTS|IMPORT_FONTDECLS ) 316 317 SERVICE( XMLImpressMetaImportOasis, "com.sun.star.comp.Impress.XMLOasisMetaImporter", "XMLImpressMetaImportOasis", sal_False, IMPORT_META ) 318 SERVICE( XMLDrawMetaImportOasis, "com.sun.star.comp.Draw.XMLOasisMetaImporter", "XMLImpressMetaImportOasis", sal_True, IMPORT_META ) 319 320 SERVICE( XMLImpressSettingsImportOasis, "com.sun.star.comp.Impress.XMLOasisSettingsImporter", "XMLImpressSettingsImportOasis", sal_False, IMPORT_SETTINGS ) 321 SERVICE( XMLDrawSettingsImportOasis, "com.sun.star.comp.Draw.XMLOasisSettingsImporter", "XMLImpressSettingsImportOasis", sal_True, IMPORT_SETTINGS ) 322 323 ////////////////////////////////////////////////////////////////////////////// 324 325 // #110680# 326 SdXMLImport::SdXMLImport( 327 const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory, 328 sal_Bool bIsDraw, sal_uInt16 nImportFlags ) 329 : SvXMLImport( xServiceFactory, nImportFlags ), 330 mpMasterStylesContext(0L), 331 mpDocElemTokenMap(0L), 332 mpBodyElemTokenMap(0L), 333 mpStylesElemTokenMap(0L), 334 mpMasterPageElemTokenMap(0L), 335 mpMasterPageAttrTokenMap(0L), 336 mpPageMasterAttrTokenMap(0L), 337 mpPageMasterStyleAttrTokenMap(0L), 338 mpDrawPageAttrTokenMap(0L), 339 mpDrawPageElemTokenMap(0L), 340 mpPresentationPlaceholderAttrTokenMap(0L), 341 mnStyleFamilyMask(0), 342 mnNewPageCount(0L), 343 mnNewMasterPageCount(0L), 344 mbIsDraw(bIsDraw), 345 mbLoadDoc(sal_True), 346 mbPreview(sal_False), 347 msPageLayouts( RTL_CONSTASCII_USTRINGPARAM( "PageLayouts" ) ), 348 msPreview( RTL_CONSTASCII_USTRINGPARAM( "Preview" ) ) 349 { 350 // add namespaces 351 GetNamespaceMap().Add( 352 GetXMLToken(XML_NP_PRESENTATION), 353 GetXMLToken(XML_N_PRESENTATION), 354 XML_NAMESPACE_PRESENTATION); 355 356 GetNamespaceMap().Add( 357 GetXMLToken(XML_NP_SMIL), 358 GetXMLToken(XML_N_SMIL_COMPAT), 359 XML_NAMESPACE_SMIL); 360 361 GetNamespaceMap().Add( 362 GetXMLToken(XML_NP_ANIMATION), 363 GetXMLToken(XML_N_ANIMATION), 364 XML_NAMESPACE_ANIMATION); 365 } 366 367 // XImporter 368 void SAL_CALL SdXMLImport::setTargetDocument( const uno::Reference< lang::XComponent >& xDoc ) 369 throw(lang::IllegalArgumentException, uno::RuntimeException) 370 { 371 SvXMLImport::setTargetDocument( xDoc ); 372 373 uno::Reference< lang::XServiceInfo > xDocServices( GetModel(), uno::UNO_QUERY ); 374 if( !xDocServices.is() ) 375 throw lang::IllegalArgumentException(); 376 377 mbIsDraw = !xDocServices->supportsService( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.presentation.PresentationDocument" ) ) ); 378 379 // prepare access to styles 380 uno::Reference< style::XStyleFamiliesSupplier > xFamSup( GetModel(), uno::UNO_QUERY ); 381 if(xFamSup.is()) 382 mxDocStyleFamilies = xFamSup->getStyleFamilies(); 383 384 // prepare access to master pages 385 uno::Reference < drawing::XMasterPagesSupplier > xMasterPagesSupplier(GetModel(), uno::UNO_QUERY); 386 if(xMasterPagesSupplier.is()) 387 mxDocMasterPages = mxDocMasterPages.query( xMasterPagesSupplier->getMasterPages() ); 388 389 // prepare access to draw pages 390 uno::Reference <drawing::XDrawPagesSupplier> xDrawPagesSupplier(GetModel(), uno::UNO_QUERY); 391 if(!xDrawPagesSupplier.is()) 392 throw lang::IllegalArgumentException(); 393 394 mxDocDrawPages = mxDocDrawPages.query( xDrawPagesSupplier->getDrawPages() ); 395 if(!mxDocDrawPages.is()) 396 throw lang::IllegalArgumentException(); 397 398 if( mxDocDrawPages.is() && mxDocDrawPages->getCount() > 0 ) 399 { 400 uno::Reference< form::XFormsSupplier > xFormsSupp; 401 mxDocDrawPages->getByIndex(0) >>= xFormsSupp; 402 mbIsFormsSupported = xFormsSupp.is(); 403 } 404 405 // #88546# enable progress bar increments, SdXMLImport is only used for 406 // draw/impress import 407 GetShapeImport()->enableHandleProgressBar(); 408 409 uno::Reference< lang::XMultiServiceFactory > xFac( GetModel(), uno::UNO_QUERY ); 410 if( xFac.is() ) 411 { 412 uno::Sequence< OUString > sSNS( xFac->getAvailableServiceNames() ); 413 sal_Int32 n = sSNS.getLength(); 414 const OUString* pSNS( sSNS.getConstArray() ); 415 while( --n > 0 ) 416 { 417 if( (*pSNS++).equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.TableShape") ) ) 418 { 419 mbIsTableShapeSupported = true; 420 break; 421 } 422 } 423 } 424 } 425 426 // XInitialization 427 void SAL_CALL SdXMLImport::initialize( const uno::Sequence< uno::Any >& aArguments ) 428 throw( uno::Exception, uno::RuntimeException) 429 { 430 SvXMLImport::initialize( aArguments ); 431 432 uno::Reference< beans::XPropertySet > xInfoSet( getImportInfo() ); 433 if( xInfoSet.is() ) 434 { 435 uno::Reference< beans::XPropertySetInfo > xInfoSetInfo( xInfoSet->getPropertySetInfo() ); 436 437 if( xInfoSetInfo->hasPropertyByName( msPageLayouts ) ) 438 xInfoSet->getPropertyValue( msPageLayouts ) >>= mxPageLayouts; 439 440 if( xInfoSetInfo->hasPropertyByName( msPreview ) ) 441 xInfoSet->getPropertyValue( msPreview ) >>= mbPreview; 442 443 ::rtl::OUString const sOrganizerMode( 444 RTL_CONSTASCII_USTRINGPARAM("OrganizerMode")); 445 if (xInfoSetInfo->hasPropertyByName(sOrganizerMode)) 446 { 447 sal_Bool bStyleOnly(sal_False); 448 if (xInfoSet->getPropertyValue(sOrganizerMode) >>= bStyleOnly) 449 { 450 mbLoadDoc = !bStyleOnly; 451 } 452 } 453 } 454 } 455 456 ////////////////////////////////////////////////////////////////////////////// 457 458 SdXMLImport::~SdXMLImport() throw () 459 { 460 // #80365# removed ending of progress bar here, this was an old implementation 461 // and maybe removed on demand 462 // // stop progress view 463 // if(mxStatusIndicator.is()) 464 // { 465 // mxStatusIndicator->end(); 466 // mxStatusIndicator->reset(); 467 // } 468 469 // Styles or AutoStyles context? 470 if(mpMasterStylesContext) 471 mpMasterStylesContext->ReleaseRef(); 472 473 // delete all token maps 474 if(mpDocElemTokenMap) 475 delete mpDocElemTokenMap; 476 if(mpBodyElemTokenMap) 477 delete mpBodyElemTokenMap; 478 if(mpStylesElemTokenMap) 479 delete mpStylesElemTokenMap; 480 if(mpMasterPageElemTokenMap) 481 delete mpMasterPageElemTokenMap; 482 if(mpMasterPageAttrTokenMap) 483 delete mpMasterPageAttrTokenMap; 484 if(mpPageMasterAttrTokenMap) 485 delete mpPageMasterAttrTokenMap; 486 if(mpPageMasterStyleAttrTokenMap) 487 delete mpPageMasterStyleAttrTokenMap; 488 if(mpDrawPageAttrTokenMap) 489 delete mpDrawPageAttrTokenMap; 490 if(mpDrawPageElemTokenMap) 491 delete mpDrawPageElemTokenMap; 492 if(mpPresentationPlaceholderAttrTokenMap) 493 delete mpPresentationPlaceholderAttrTokenMap; 494 } 495 496 ////////////////////////////////////////////////////////////////////////////// 497 498 void SdXMLImport::SetProgress(sal_Int32 nProg) 499 { 500 // set progress view 501 if(mxStatusIndicator.is()) 502 mxStatusIndicator->setValue(nProg); 503 } 504 505 ////////////////////////////////////////////////////////////////////////////// 506 507 const SvXMLTokenMap& SdXMLImport::GetDocElemTokenMap() 508 { 509 if(!mpDocElemTokenMap) 510 { 511 static __FAR_DATA SvXMLTokenMapEntry aDocElemTokenMap[] = 512 { 513 { XML_NAMESPACE_OFFICE, XML_FONT_FACE_DECLS, XML_TOK_DOC_FONTDECLS }, 514 { XML_NAMESPACE_OFFICE, XML_STYLES, XML_TOK_DOC_STYLES }, 515 { XML_NAMESPACE_OFFICE, XML_AUTOMATIC_STYLES, XML_TOK_DOC_AUTOSTYLES }, 516 { XML_NAMESPACE_OFFICE, XML_MASTER_STYLES, XML_TOK_DOC_MASTERSTYLES }, 517 { XML_NAMESPACE_OFFICE, XML_META, XML_TOK_DOC_META }, 518 { XML_NAMESPACE_OFFICE, XML_SCRIPTS, XML_TOK_DOC_SCRIPT }, 519 { XML_NAMESPACE_OFFICE, XML_BODY, XML_TOK_DOC_BODY }, 520 { XML_NAMESPACE_OFFICE, XML_SETTINGS, XML_TOK_DOC_SETTINGS }, 521 XML_TOKEN_MAP_END 522 }; 523 524 mpDocElemTokenMap = new SvXMLTokenMap(aDocElemTokenMap); 525 } // if(!mpDocElemTokenMap) 526 527 return *mpDocElemTokenMap; 528 } 529 530 ////////////////////////////////////////////////////////////////////////////// 531 532 const SvXMLTokenMap& SdXMLImport::GetBodyElemTokenMap() 533 { 534 if(!mpBodyElemTokenMap) 535 { 536 static __FAR_DATA SvXMLTokenMapEntry aBodyElemTokenMap[] = 537 { 538 { XML_NAMESPACE_DRAW, XML_PAGE, XML_TOK_BODY_PAGE }, 539 { XML_NAMESPACE_PRESENTATION, XML_SETTINGS, XML_TOK_BODY_SETTINGS }, 540 { XML_NAMESPACE_PRESENTATION, XML_HEADER_DECL, XML_TOK_BODY_HEADER_DECL }, 541 { XML_NAMESPACE_PRESENTATION, XML_FOOTER_DECL, XML_TOK_BODY_FOOTER_DECL }, 542 { XML_NAMESPACE_PRESENTATION, XML_DATE_TIME_DECL,XML_TOK_BODY_DATE_TIME_DECL }, 543 544 XML_TOKEN_MAP_END 545 }; 546 547 mpBodyElemTokenMap = new SvXMLTokenMap(aBodyElemTokenMap); 548 } // if(!mpBodyElemTokenMap) 549 550 return *mpBodyElemTokenMap; 551 } 552 553 ////////////////////////////////////////////////////////////////////////////// 554 555 const SvXMLTokenMap& SdXMLImport::GetStylesElemTokenMap() 556 { 557 if(!mpStylesElemTokenMap) 558 { 559 static __FAR_DATA SvXMLTokenMapEntry aStylesElemTokenMap[] = 560 { 561 { XML_NAMESPACE_STYLE, XML_PAGE_LAYOUT, XML_TOK_STYLES_PAGE_MASTER }, 562 { XML_NAMESPACE_STYLE, XML_PRESENTATION_PAGE_LAYOUT, XML_TOK_STYLES_PRESENTATION_PAGE_LAYOUT }, 563 { XML_NAMESPACE_STYLE, XML_STYLE, XML_TOK_STYLES_STYLE }, 564 XML_TOKEN_MAP_END 565 }; 566 567 mpStylesElemTokenMap = new SvXMLTokenMap(aStylesElemTokenMap); 568 } // if(!mpStylesElemTokenMap) 569 570 return *mpStylesElemTokenMap; 571 } 572 573 ////////////////////////////////////////////////////////////////////////////// 574 575 const SvXMLTokenMap& SdXMLImport::GetMasterPageElemTokenMap() 576 { 577 if(!mpMasterPageElemTokenMap) 578 { 579 static __FAR_DATA SvXMLTokenMapEntry aMasterPageElemTokenMap[] = 580 { 581 { XML_NAMESPACE_STYLE, XML_STYLE, XML_TOK_MASTERPAGE_STYLE }, 582 { XML_NAMESPACE_PRESENTATION, XML_NOTES, XML_TOK_MASTERPAGE_NOTES }, 583 XML_TOKEN_MAP_END 584 }; 585 586 mpMasterPageElemTokenMap = new SvXMLTokenMap(aMasterPageElemTokenMap); 587 } // if(!mpMasterPageElemTokenMap) 588 589 return *mpMasterPageElemTokenMap; 590 } 591 592 ////////////////////////////////////////////////////////////////////////////// 593 594 const SvXMLTokenMap& SdXMLImport::GetMasterPageAttrTokenMap() 595 { 596 if(!mpMasterPageAttrTokenMap) 597 { 598 static __FAR_DATA SvXMLTokenMapEntry aMasterPageAttrTokenMap[] = 599 { 600 { XML_NAMESPACE_STYLE, XML_NAME, XML_TOK_MASTERPAGE_NAME }, 601 { XML_NAMESPACE_STYLE, XML_DISPLAY_NAME, XML_TOK_MASTERPAGE_DISPLAY_NAME }, 602 { XML_NAMESPACE_STYLE, XML_PAGE_LAYOUT_NAME, XML_TOK_MASTERPAGE_PAGE_MASTER_NAME }, 603 { XML_NAMESPACE_DRAW, XML_STYLE_NAME, XML_TOK_MASTERPAGE_STYLE_NAME }, 604 { XML_NAMESPACE_PRESENTATION, XML_PRESENTATION_PAGE_LAYOUT_NAME, XML_TOK_MASTERPAGE_PAGE_LAYOUT_NAME }, 605 { XML_NAMESPACE_PRESENTATION, XML_USE_HEADER_NAME, XML_TOK_MASTERPAGE_USE_HEADER_NAME }, 606 { XML_NAMESPACE_PRESENTATION, XML_USE_FOOTER_NAME, XML_TOK_MASTERPAGE_USE_FOOTER_NAME }, 607 { XML_NAMESPACE_PRESENTATION, XML_USE_DATE_TIME_NAME, XML_TOK_MASTERPAGE_USE_DATE_TIME_NAME }, 608 XML_TOKEN_MAP_END 609 }; 610 611 mpMasterPageAttrTokenMap = new SvXMLTokenMap(aMasterPageAttrTokenMap); 612 } // if(!mpMasterPageAttrTokenMap) 613 614 return *mpMasterPageAttrTokenMap; 615 } 616 617 ////////////////////////////////////////////////////////////////////////////// 618 619 const SvXMLTokenMap& SdXMLImport::GetPageMasterAttrTokenMap() 620 { 621 if(!mpPageMasterAttrTokenMap) 622 { 623 static __FAR_DATA SvXMLTokenMapEntry aPageMasterAttrTokenMap[] = 624 { 625 { XML_NAMESPACE_STYLE, XML_NAME, XML_TOK_PAGEMASTER_NAME }, 626 XML_TOKEN_MAP_END 627 }; 628 629 mpPageMasterAttrTokenMap = new SvXMLTokenMap(aPageMasterAttrTokenMap); 630 } // if(!mpPageMasterAttrTokenMap) 631 632 return *mpPageMasterAttrTokenMap; 633 } 634 635 ////////////////////////////////////////////////////////////////////////////// 636 637 const SvXMLTokenMap& SdXMLImport::GetPageMasterStyleAttrTokenMap() 638 { 639 if(!mpPageMasterStyleAttrTokenMap) 640 { 641 static __FAR_DATA SvXMLTokenMapEntry aPageMasterStyleAttrTokenMap[] = 642 { 643 { XML_NAMESPACE_FO, XML_MARGIN_TOP, XML_TOK_PAGEMASTERSTYLE_MARGIN_TOP }, 644 { XML_NAMESPACE_FO, XML_MARGIN_BOTTOM, XML_TOK_PAGEMASTERSTYLE_MARGIN_BOTTOM }, 645 { XML_NAMESPACE_FO, XML_MARGIN_LEFT, XML_TOK_PAGEMASTERSTYLE_MARGIN_LEFT }, 646 { XML_NAMESPACE_FO, XML_MARGIN_RIGHT, XML_TOK_PAGEMASTERSTYLE_MARGIN_RIGHT }, 647 { XML_NAMESPACE_FO, XML_PAGE_WIDTH, XML_TOK_PAGEMASTERSTYLE_PAGE_WIDTH }, 648 { XML_NAMESPACE_FO, XML_PAGE_HEIGHT, XML_TOK_PAGEMASTERSTYLE_PAGE_HEIGHT }, 649 { XML_NAMESPACE_STYLE, XML_PRINT_ORIENTATION, XML_TOK_PAGEMASTERSTYLE_PAGE_ORIENTATION }, 650 XML_TOKEN_MAP_END 651 }; 652 653 mpPageMasterStyleAttrTokenMap = new SvXMLTokenMap(aPageMasterStyleAttrTokenMap); 654 } // if(!mpPageMasterStyleAttrTokenMap) 655 656 return *mpPageMasterStyleAttrTokenMap; 657 } 658 659 ////////////////////////////////////////////////////////////////////////////// 660 661 const SvXMLTokenMap& SdXMLImport::GetDrawPageAttrTokenMap() 662 { 663 if(!mpDrawPageAttrTokenMap) 664 { 665 static __FAR_DATA SvXMLTokenMapEntry aDrawPageAttrTokenMap[] = 666 { 667 { XML_NAMESPACE_DRAW, XML_NAME, XML_TOK_DRAWPAGE_NAME }, 668 { XML_NAMESPACE_DRAW, XML_STYLE_NAME, XML_TOK_DRAWPAGE_STYLE_NAME }, 669 { XML_NAMESPACE_DRAW, XML_MASTER_PAGE_NAME, XML_TOK_DRAWPAGE_MASTER_PAGE_NAME }, 670 { XML_NAMESPACE_PRESENTATION, XML_PRESENTATION_PAGE_LAYOUT_NAME, XML_TOK_DRAWPAGE_PAGE_LAYOUT_NAME }, 671 { XML_NAMESPACE_DRAW, XML_ID, XML_TOK_DRAWPAGE_DRAWID }, 672 { XML_NAMESPACE_XML, XML_ID, XML_TOK_DRAWPAGE_XMLID }, 673 { XML_NAMESPACE_XLINK, XML_HREF, XML_TOK_DRAWPAGE_HREF }, 674 { XML_NAMESPACE_PRESENTATION, XML_USE_HEADER_NAME, XML_TOK_DRAWPAGE_USE_HEADER_NAME }, 675 { XML_NAMESPACE_PRESENTATION, XML_USE_FOOTER_NAME, XML_TOK_DRAWPAGE_USE_FOOTER_NAME }, 676 { XML_NAMESPACE_PRESENTATION, XML_USE_DATE_TIME_NAME, XML_TOK_DRAWPAGE_USE_DATE_TIME_NAME }, 677 678 XML_TOKEN_MAP_END 679 }; 680 681 mpDrawPageAttrTokenMap = new SvXMLTokenMap(aDrawPageAttrTokenMap); 682 } // if(!mpDrawPageAttrTokenMap) 683 684 return *mpDrawPageAttrTokenMap; 685 } 686 687 ////////////////////////////////////////////////////////////////////////////// 688 689 const SvXMLTokenMap& SdXMLImport::GetDrawPageElemTokenMap() 690 { 691 if(!mpDrawPageElemTokenMap) 692 { 693 static __FAR_DATA SvXMLTokenMapEntry aDrawPageElemTokenMap[] = 694 { 695 { XML_NAMESPACE_PRESENTATION, XML_NOTES, XML_TOK_DRAWPAGE_NOTES }, 696 { XML_NAMESPACE_ANIMATION, XML_PAR, XML_TOK_DRAWPAGE_PAR }, 697 { XML_NAMESPACE_ANIMATION, XML_SEQ, XML_TOK_DRAWPAGE_SEQ }, 698 XML_TOKEN_MAP_END 699 }; 700 701 mpDrawPageElemTokenMap = new SvXMLTokenMap(aDrawPageElemTokenMap); 702 } // if(!mpDrawPageElemTokenMap) 703 704 return *mpDrawPageElemTokenMap; 705 } 706 707 ////////////////////////////////////////////////////////////////////////////// 708 709 const SvXMLTokenMap& SdXMLImport::GetPresentationPlaceholderAttrTokenMap() 710 { 711 if(!mpPresentationPlaceholderAttrTokenMap) 712 { 713 static __FAR_DATA SvXMLTokenMapEntry aPresentationPlaceholderAttrTokenMap[] = 714 { 715 { XML_NAMESPACE_PRESENTATION, XML_OBJECT, XML_TOK_PRESENTATIONPLACEHOLDER_OBJECTNAME }, 716 { XML_NAMESPACE_SVG, XML_X, XML_TOK_PRESENTATIONPLACEHOLDER_X }, 717 { XML_NAMESPACE_SVG, XML_Y, XML_TOK_PRESENTATIONPLACEHOLDER_Y }, 718 { XML_NAMESPACE_SVG, XML_WIDTH, XML_TOK_PRESENTATIONPLACEHOLDER_WIDTH }, 719 { XML_NAMESPACE_SVG, XML_HEIGHT, XML_TOK_PRESENTATIONPLACEHOLDER_HEIGHT }, 720 XML_TOKEN_MAP_END 721 }; 722 723 mpPresentationPlaceholderAttrTokenMap = new SvXMLTokenMap(aPresentationPlaceholderAttrTokenMap); 724 } // if(!mpPresentationPlaceholderAttrTokenMap) 725 726 return *mpPresentationPlaceholderAttrTokenMap; 727 } 728 729 ////////////////////////////////////////////////////////////////////////////// 730 731 SvXMLImportContext *SdXMLImport::CreateContext(sal_uInt16 nPrefix, 732 const OUString& rLocalName, 733 const uno::Reference<xml::sax::XAttributeList>& xAttrList) 734 { 735 SvXMLImportContext* pContext = 0; 736 737 if(XML_NAMESPACE_OFFICE == nPrefix && 738 ( IsXMLToken( rLocalName, XML_DOCUMENT_STYLES ) || 739 IsXMLToken( rLocalName, XML_DOCUMENT_CONTENT ) || 740 IsXMLToken( rLocalName, XML_DOCUMENT_SETTINGS ) )) 741 { 742 pContext = new SdXMLDocContext_Impl(*this, nPrefix, rLocalName, xAttrList); 743 } else if ( (XML_NAMESPACE_OFFICE == nPrefix) && 744 ( IsXMLToken(rLocalName, XML_DOCUMENT_META)) ) { 745 pContext = CreateMetaContext(rLocalName, xAttrList); 746 } else if ( (XML_NAMESPACE_OFFICE == nPrefix) && 747 ( IsXMLToken(rLocalName, XML_DOCUMENT)) ) { 748 uno::Reference<xml::sax::XDocumentHandler> xDocBuilder( 749 mxServiceFactory->createInstance(::rtl::OUString::createFromAscii( 750 "com.sun.star.xml.dom.SAXDocumentBuilder")), 751 uno::UNO_QUERY_THROW); 752 uno::Reference<document::XDocumentPropertiesSupplier> xDPS( 753 GetModel(), uno::UNO_QUERY_THROW); 754 // flat OpenDocument file format 755 pContext = new SdXMLFlatDocContext_Impl( *this, nPrefix, rLocalName, 756 xAttrList, xDPS->getDocumentProperties(), xDocBuilder); 757 } else { 758 pContext = SvXMLImport::CreateContext(nPrefix, rLocalName, xAttrList); 759 } 760 761 return pContext; 762 } 763 764 ////////////////////////////////////////////////////////////////////////////// 765 766 SvXMLImportContext *SdXMLImport::CreateMetaContext(const OUString& rLocalName, 767 const uno::Reference<xml::sax::XAttributeList>&) 768 { 769 SvXMLImportContext* pContext = 0L; 770 771 if (getImportFlags() & IMPORT_META) 772 { 773 uno::Reference<xml::sax::XDocumentHandler> xDocBuilder( 774 mxServiceFactory->createInstance(::rtl::OUString::createFromAscii( 775 "com.sun.star.xml.dom.SAXDocumentBuilder")), 776 uno::UNO_QUERY_THROW); 777 uno::Reference<document::XDocumentPropertiesSupplier> xDPS( 778 GetModel(), uno::UNO_QUERY_THROW); 779 uno::Reference<document::XDocumentProperties> const xDocProps( 780 (IsStylesOnlyMode()) ? 0 : xDPS->getDocumentProperties()); 781 pContext = new SvXMLMetaDocumentContext(*this, 782 XML_NAMESPACE_OFFICE, rLocalName, 783 xDocProps, xDocBuilder); 784 } 785 786 if(!pContext) 787 { 788 pContext = new SvXMLImportContext(*this, XML_NAMESPACE_OFFICE, rLocalName); 789 } 790 791 return pContext; 792 } 793 794 ////////////////////////////////////////////////////////////////////////////// 795 796 SvXMLImportContext *SdXMLImport::CreateBodyContext(const OUString& rLocalName, 797 const uno::Reference<xml::sax::XAttributeList>&) 798 { 799 SvXMLImportContext *pContext = 0; 800 pContext = new SdXMLBodyContext(*this, XML_NAMESPACE_OFFICE, rLocalName); 801 return pContext; 802 } 803 804 ////////////////////////////////////////////////////////////////////////////// 805 806 SvXMLStylesContext *SdXMLImport::CreateStylesContext(const OUString& rLocalName, 807 const uno::Reference<xml::sax::XAttributeList>& xAttrList) 808 { 809 if(GetShapeImport()->GetStylesContext()) 810 return GetShapeImport()->GetStylesContext(); 811 812 GetShapeImport()->SetStylesContext(new SdXMLStylesContext( 813 *this, XML_NAMESPACE_OFFICE, rLocalName, xAttrList, sal_False)); 814 815 return GetShapeImport()->GetStylesContext(); 816 } 817 818 ////////////////////////////////////////////////////////////////////////////// 819 820 SvXMLStylesContext *SdXMLImport::CreateAutoStylesContext(const OUString& rLocalName, 821 const uno::Reference<xml::sax::XAttributeList>& xAttrList) 822 { 823 if(GetShapeImport()->GetAutoStylesContext()) 824 return GetShapeImport()->GetAutoStylesContext(); 825 826 GetShapeImport()->SetAutoStylesContext(new SdXMLStylesContext( 827 *this, XML_NAMESPACE_OFFICE, rLocalName, xAttrList, sal_True)); 828 829 return GetShapeImport()->GetAutoStylesContext(); 830 } 831 832 ////////////////////////////////////////////////////////////////////////////// 833 834 SvXMLImportContext* SdXMLImport::CreateMasterStylesContext(const OUString& rLocalName, 835 const uno::Reference<xml::sax::XAttributeList>&) 836 { 837 if(mpMasterStylesContext) 838 return mpMasterStylesContext; 839 840 mpMasterStylesContext = new SdXMLMasterStylesContext( 841 *this, XML_NAMESPACE_OFFICE, rLocalName); 842 mpMasterStylesContext->AddRef(); 843 844 return mpMasterStylesContext; 845 } 846 847 ////////////////////////////////////////////////////////////////////////////// 848 849 SvXMLImportContext *SdXMLImport::CreateFontDeclsContext(const OUString& rLocalName, 850 const uno::Reference< xml::sax::XAttributeList > & xAttrList ) 851 { 852 XMLFontStylesContext *pFSContext = 853 new XMLFontStylesContext( *this, XML_NAMESPACE_OFFICE, 854 rLocalName, xAttrList, 855 gsl_getSystemTextEncoding() ); 856 SetFontDecls( pFSContext ); 857 return pFSContext; 858 } 859 860 ////////////////////////////////////////////////////////////////////////////// 861 // import pool defaults. Parameter contains pool defaults read 862 // from input data. These data needs to be set at the model. 863 // 864 void SdXMLImport::ImportPoolDefaults(const XMLPropStyleContext*) 865 { 866 } 867 868 ////////////////////////////////////////////////////////////////////////////// 869 870 SvXMLImportContext *SdXMLImport::CreateScriptContext( 871 const OUString& rLocalName ) 872 { 873 SvXMLImportContext *pContext = 0; 874 875 pContext = new XMLScriptContext( *this, 876 XML_NAMESPACE_OFFICE, rLocalName, 877 GetModel() ); 878 return pContext; 879 } 880 881 ////////////////////////////////////////////////////////////////////////////// 882 883 void SdXMLImport::SetViewSettings(const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& aViewProps) 884 { 885 uno::Reference< beans::XPropertySet > xPropSet( GetModel(), uno::UNO_QUERY ); 886 if( !xPropSet.is() ) 887 return; 888 889 awt::Rectangle aVisArea( 0,0, 28000, 21000 ); 890 sal_Int32 nCount = aViewProps.getLength(); 891 892 const beans::PropertyValue* pValues = aViewProps.getConstArray(); 893 894 while( nCount-- ) 895 { 896 const OUString& rName = pValues->Name; 897 const uno::Any rValue = pValues->Value; 898 899 if( rName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("VisibleAreaTop") ) ) 900 { 901 rValue >>= aVisArea.Y; 902 } 903 else if( rName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("VisibleAreaLeft") ) ) 904 { 905 rValue >>= aVisArea.X; 906 } 907 else if( rName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("VisibleAreaWidth") ) ) 908 { 909 rValue >>= aVisArea.Width; 910 } 911 else if( rName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("VisibleAreaHeight") ) ) 912 { 913 rValue >>= aVisArea.Height; 914 } 915 916 pValues++; 917 } 918 919 try 920 { 921 xPropSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "VisibleArea" ) ), uno::makeAny( aVisArea ) ); 922 } 923 catch( com::sun::star::uno::Exception /*e*/ ) 924 { 925 /* #i79978# since old documents may contain invalid view settings, this is nothing to worry the user about. 926 uno::Sequence<OUString> aSeq(0); 927 SetError( XMLERROR_FLAG_WARNING | XMLERROR_API, aSeq, e.Message, NULL ); 928 */ 929 } 930 } 931 932 void SdXMLImport::SetConfigurationSettings(const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& aConfigProps) 933 { 934 uno::Reference< lang::XMultiServiceFactory > xFac( GetModel(), uno::UNO_QUERY ); 935 if( !xFac.is() ) 936 return; 937 938 uno::Reference< beans::XPropertySet > xProps( xFac->createInstance( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.document.Settings" ) ) ), uno::UNO_QUERY ); 939 if( !xProps.is() ) 940 return; 941 942 uno::Reference< beans::XPropertySetInfo > xInfo( xProps->getPropertySetInfo() ); 943 if( !xInfo.is() ) 944 return; 945 946 sal_Int32 nCount = aConfigProps.getLength(); 947 const beans::PropertyValue* pValues = aConfigProps.getConstArray(); 948 949 while( nCount-- ) 950 { 951 try 952 { 953 const OUString& rProperty = pValues->Name; 954 if( xInfo->hasPropertyByName( rProperty ) ) 955 xProps->setPropertyValue( rProperty, pValues->Value ); 956 } 957 catch( uno::Exception& e ) 958 { 959 (void)e; 960 OSL_TRACE( "#SdXMLImport::SetConfigurationSettings: Exception!" ); 961 } 962 963 pValues++; 964 } 965 } 966 967 // #80365# overload this method to read and use the hint value from the 968 // written meta information. If no info is found, guess 10 draw objects 969 //void SdXMLImport::SetStatisticAttributes(const uno::Reference<xml::sax::XAttributeList>& xAttrList) 970 void SdXMLImport::SetStatistics( 971 const uno::Sequence<beans::NamedValue> & i_rStats) 972 { 973 static const char* s_stats[] = 974 { "ObjectCount", 0 }; 975 976 SvXMLImport::SetStatistics(i_rStats); 977 978 sal_uInt32 nCount(10); 979 for (sal_Int32 i = 0; i < i_rStats.getLength(); ++i) { 980 for (const char** pStat = s_stats; *pStat != 0; ++pStat) { 981 if (i_rStats[i].Name.equalsAscii(*pStat)) { 982 sal_Int32 val = 0; 983 if (i_rStats[i].Value >>= val) { 984 nCount = val; 985 } else { 986 DBG_ERROR("SdXMLImport::SetStatistics: invalid entry"); 987 } 988 } 989 } 990 } 991 992 if(nCount) 993 { 994 GetProgressBarHelper()->SetReference(nCount); 995 GetProgressBarHelper()->SetValue(0); 996 } 997 } 998 999 1000 // XServiceInfo 1001 OUString SAL_CALL SdXMLImport::getImplementationName() throw( uno::RuntimeException ) 1002 { 1003 if( IsDraw()) 1004 { 1005 // Draw 1006 1007 switch( getImportFlags()) 1008 { 1009 case IMPORT_ALL: 1010 return XMLDrawImportOasis_getImplementationName(); 1011 case (IMPORT_STYLES|IMPORT_AUTOSTYLES|IMPORT_MASTERSTYLES): 1012 return XMLDrawStylesImportOasis_getImplementationName(); 1013 case (IMPORT_AUTOSTYLES|IMPORT_CONTENT|IMPORT_SCRIPTS|IMPORT_FONTDECLS): 1014 return XMLDrawContentImportOasis_getImplementationName(); 1015 case IMPORT_META: 1016 return XMLDrawMetaImportOasis_getImplementationName(); 1017 case IMPORT_SETTINGS: 1018 return XMLDrawSettingsImportOasis_getImplementationName(); 1019 default: 1020 return XMLDrawImportOasis_getImplementationName(); 1021 } 1022 } 1023 else 1024 { 1025 // Impress 1026 1027 switch( getImportFlags()) 1028 { 1029 case IMPORT_ALL: 1030 return XMLImpressImportOasis_getImplementationName(); 1031 case (IMPORT_STYLES|IMPORT_AUTOSTYLES|IMPORT_MASTERSTYLES): 1032 return XMLImpressStylesImportOasis_getImplementationName(); 1033 case (IMPORT_AUTOSTYLES|IMPORT_CONTENT|IMPORT_SCRIPTS|IMPORT_FONTDECLS): 1034 return XMLImpressContentImportOasis_getImplementationName(); 1035 case IMPORT_META: 1036 return XMLImpressMetaImportOasis_getImplementationName(); 1037 case IMPORT_SETTINGS: 1038 return XMLImpressSettingsImportOasis_getImplementationName(); 1039 default: 1040 return XMLImpressImportOasis_getImplementationName(); 1041 } 1042 } 1043 } 1044 1045 HeaderFooterDeclMap maHeaderDeclsMap; 1046 HeaderFooterDeclMap maFooterDeclsMap; 1047 DateTimeDeclMap maDateTimeDeclsMap; 1048 1049 void SdXMLImport::AddHeaderDecl( const ::rtl::OUString& rName, const ::rtl::OUString& rText ) 1050 { 1051 if( rName.getLength() && rText.getLength() ) 1052 maHeaderDeclsMap[rName] = rText; 1053 } 1054 1055 void SdXMLImport::AddFooterDecl( const ::rtl::OUString& rName, const ::rtl::OUString& rText ) 1056 { 1057 if( rName.getLength() && rText.getLength() ) 1058 maFooterDeclsMap[rName] = rText; 1059 } 1060 1061 void SdXMLImport::AddDateTimeDecl( const ::rtl::OUString& rName, const ::rtl::OUString& rText, sal_Bool bFixed, const ::rtl::OUString& rDateTimeFormat ) 1062 { 1063 if( rName.getLength() && (rText.getLength() || !bFixed) ) 1064 { 1065 DateTimeDeclContextImpl aDecl; 1066 aDecl.maStrText = rText; 1067 aDecl.mbFixed = bFixed; 1068 aDecl.maStrDateTimeFormat = rDateTimeFormat; 1069 maDateTimeDeclsMap[rName] = aDecl; 1070 } 1071 } 1072 1073 ::rtl::OUString SdXMLImport::GetHeaderDecl( const ::rtl::OUString& rName ) const 1074 { 1075 ::rtl::OUString aRet; 1076 HeaderFooterDeclMap::const_iterator aIter( maHeaderDeclsMap.find( rName ) ); 1077 if( aIter != maHeaderDeclsMap.end() ) 1078 aRet = (*aIter).second; 1079 1080 return aRet; 1081 } 1082 1083 ::rtl::OUString SdXMLImport::GetFooterDecl( const ::rtl::OUString& rName ) const 1084 { 1085 ::rtl::OUString aRet; 1086 HeaderFooterDeclMap::const_iterator aIter( maFooterDeclsMap.find( rName ) ); 1087 if( aIter != maFooterDeclsMap.end() ) 1088 aRet = (*aIter).second; 1089 1090 return aRet; 1091 } 1092 1093 ::rtl::OUString SdXMLImport::GetDateTimeDecl( const ::rtl::OUString& rName, sal_Bool& rbFixed, ::rtl::OUString& rDateTimeFormat ) 1094 { 1095 DateTimeDeclContextImpl aDecl; 1096 1097 DateTimeDeclMap::const_iterator aIter( maDateTimeDeclsMap.find( rName ) ); 1098 if( aIter != maDateTimeDeclsMap.end() ) 1099 aDecl = (*aIter).second; 1100 1101 rbFixed = aDecl.mbFixed; 1102 rDateTimeFormat = aDecl.maStrDateTimeFormat; 1103 return aDecl.maStrText; 1104 } 1105 1106 // eof 1107