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