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 #ifndef _SDXMLIMP_IMPL_HXX 29 #define _SDXMLIMP_IMPL_HXX 30 31 #include <com/sun/star/drawing/XDrawPage.hpp> 32 #include <com/sun/star/frame/XModel.hpp> 33 #include <com/sun/star/task/XStatusIndicator.hpp> 34 #include <xmloff/xmltkmap.hxx> 35 #include <com/sun/star/container/XNameAccess.hpp> 36 37 #ifndef __SGI_STL_VECTOR 38 #include <vector> 39 #endif 40 #include <xmloff/xmlimp.hxx> 41 42 ////////////////////////////////////////////////////////////////////////////// 43 44 enum SdXMLDocElemTokenMap 45 { 46 XML_TOK_DOC_FONTDECLS, 47 XML_TOK_DOC_STYLES, 48 XML_TOK_DOC_AUTOSTYLES, 49 XML_TOK_DOC_MASTERSTYLES, 50 XML_TOK_DOC_META, 51 XML_TOK_DOC_BODY, 52 XML_TOK_DOC_SCRIPT, 53 XML_TOK_DOC_SETTINGS, 54 XML_TOK_OFFICE_END = XML_TOK_UNKNOWN 55 }; 56 57 enum SdXMLBodyElemTokenMap 58 { 59 XML_TOK_BODY_PAGE, 60 XML_TOK_BODY_SETTINGS, 61 XML_TOK_BODY_HEADER_DECL, 62 XML_TOK_BODY_FOOTER_DECL, 63 XML_TOK_BODY_DATE_TIME_DECL 64 }; 65 66 enum SdXMLStylesElemTokenMap 67 { 68 XML_TOK_STYLES_MASTER_PAGE, 69 XML_TOK_STYLES_STYLE, 70 XML_TOK_STYLES_PAGE_MASTER, 71 XML_TOK_STYLES_PRESENTATION_PAGE_LAYOUT 72 }; 73 74 enum SdXMLAutoStylesElemTokenMap 75 { 76 XML_TOK_AUTOSTYLES_STYLE 77 }; 78 79 enum SdXMLMasterPageElemTokenMap 80 { 81 XML_TOK_MASTERPAGE_STYLE, 82 XML_TOK_MASTERPAGE_NOTES 83 }; 84 85 enum SdXMLMasterPageAttrTokenMap 86 { 87 XML_TOK_MASTERPAGE_NAME, 88 XML_TOK_MASTERPAGE_DISPLAY_NAME, 89 XML_TOK_MASTERPAGE_PAGE_MASTER_NAME, 90 XML_TOK_MASTERPAGE_STYLE_NAME, 91 XML_TOK_MASTERPAGE_PAGE_LAYOUT_NAME, 92 XML_TOK_MASTERPAGE_USE_HEADER_NAME, 93 XML_TOK_MASTERPAGE_USE_FOOTER_NAME, 94 XML_TOK_MASTERPAGE_USE_DATE_TIME_NAME 95 }; 96 97 enum SdXMLPageMasterAttrTokenMap 98 { 99 XML_TOK_PAGEMASTER_NAME 100 }; 101 102 enum SdXMLPageMasterStyleAttrTokenMap 103 { 104 XML_TOK_PAGEMASTERSTYLE_MARGIN_TOP, 105 XML_TOK_PAGEMASTERSTYLE_MARGIN_BOTTOM, 106 XML_TOK_PAGEMASTERSTYLE_MARGIN_LEFT, 107 XML_TOK_PAGEMASTERSTYLE_MARGIN_RIGHT, 108 XML_TOK_PAGEMASTERSTYLE_PAGE_WIDTH, 109 XML_TOK_PAGEMASTERSTYLE_PAGE_HEIGHT, 110 XML_TOK_PAGEMASTERSTYLE_PAGE_ORIENTATION 111 }; 112 113 enum SdXMLDocStyleAttrTokenMap 114 { 115 XML_TOK_DOCSTYLE_NAME, 116 XML_TOK_DOCSTYLE_FAMILY, 117 XML_TOK_DOCSTYLE_PARENT_STYLE_NAME, 118 XML_TOK_DOCSTYLE_AUTOMATIC 119 }; 120 121 enum SdXMLDocStyleElemTokenMap 122 { 123 XML_TOK_DOCSTYLE_PROPERTIES, 124 XML_TOK_DOCSTYLE_PRESENTATION_PLACEHOLDER 125 }; 126 127 enum SdXMLDrawPageAttrTokenMap 128 { 129 XML_TOK_DRAWPAGE_NAME, 130 XML_TOK_DRAWPAGE_STYLE_NAME, 131 XML_TOK_DRAWPAGE_MASTER_PAGE_NAME, 132 XML_TOK_DRAWPAGE_PAGE_LAYOUT_NAME, 133 XML_TOK_DRAWPAGE_DRAWID, 134 XML_TOK_DRAWPAGE_XMLID, 135 XML_TOK_DRAWPAGE_HREF, 136 XML_TOK_DRAWPAGE_USE_HEADER_NAME, 137 XML_TOK_DRAWPAGE_USE_FOOTER_NAME, 138 XML_TOK_DRAWPAGE_USE_DATE_TIME_NAME 139 }; 140 141 enum SdXMLDrawPageElemTokenMap 142 { 143 XML_TOK_DRAWPAGE_NOTES, 144 XML_TOK_DRAWPAGE_PAR, 145 XML_TOK_DRAWPAGE_SEQ 146 }; 147 148 enum SdXMLPresentationPlaceholderAttrTokenMap 149 { 150 XML_TOK_PRESENTATIONPLACEHOLDER_OBJECTNAME, 151 XML_TOK_PRESENTATIONPLACEHOLDER_X, 152 XML_TOK_PRESENTATIONPLACEHOLDER_Y, 153 XML_TOK_PRESENTATIONPLACEHOLDER_WIDTH, 154 XML_TOK_PRESENTATIONPLACEHOLDER_HEIGHT 155 }; 156 157 ////////////////////////////////////////////////////////////////////////////// 158 159 struct SdXMLltXDrawPageId 160 { 161 bool operator()(sal_Int32 nId1, sal_Int32 nId2 ) const 162 { 163 return nId1 < nId2; 164 } 165 }; 166 167 typedef std::map< sal_Int32, com::sun::star::uno::Reference< com::sun::star::drawing::XDrawPage >, SdXMLltXDrawPageId > DrawPageIdMap; 168 169 ////////////////////////////////////////////////////////////////////////////// 170 171 class SvXMLUnitConverter; 172 class SvXMLTokenMap; 173 class XMLSdPropHdlFactory; 174 class XMLPropertySetMapper; 175 class XMLPropStyleContext; 176 class SdXMLStylesContext; 177 class SdXMLMasterStylesContext; 178 179 ////////////////////////////////////////////////////////////////////////////// 180 181 struct DateTimeDeclContextImpl 182 { 183 rtl::OUString maStrText; 184 sal_Bool mbFixed; 185 rtl::OUString maStrDateTimeFormat; 186 187 DateTimeDeclContextImpl() : mbFixed(sal_True) {} 188 }; 189 190 DECLARE_STL_USTRINGACCESS_MAP( ::rtl::OUString, HeaderFooterDeclMap ); 191 DECLARE_STL_USTRINGACCESS_MAP( DateTimeDeclContextImpl, DateTimeDeclMap ); 192 193 ////////////////////////////////////////////////////////////////////////////// 194 195 class SdXMLImport: public SvXMLImport 196 { 197 com::sun::star::uno::Reference< com::sun::star::container::XNameAccess > mxDocStyleFamilies; 198 com::sun::star::uno::Reference< com::sun::star::container::XIndexAccess > mxDocMasterPages; 199 com::sun::star::uno::Reference< com::sun::star::container::XIndexAccess > mxDocDrawPages; 200 com::sun::star::uno::Reference< com::sun::star::container::XNameAccess > mxPageLayouts; 201 202 // contexts for Style and AutoStyle import 203 SdXMLMasterStylesContext* mpMasterStylesContext; 204 205 // token map lists 206 SvXMLTokenMap* mpDocElemTokenMap; 207 SvXMLTokenMap* mpBodyElemTokenMap; 208 SvXMLTokenMap* mpStylesElemTokenMap; 209 SvXMLTokenMap* mpAutoStylesElemTokenMap; 210 SvXMLTokenMap* mpMasterPageElemTokenMap; 211 SvXMLTokenMap* mpMasterPageAttrTokenMap; 212 SvXMLTokenMap* mpPageMasterAttrTokenMap; 213 SvXMLTokenMap* mpPageMasterStyleAttrTokenMap; 214 SvXMLTokenMap* mpDocStyleAttrTokenMap; 215 SvXMLTokenMap* mpDocStyleElemTokenMap; 216 SvXMLTokenMap* mpDrawPageAttrTokenMap; 217 SvXMLTokenMap* mpDrawPageElemTokenMap; 218 SvXMLTokenMap* mpPresentationPlaceholderAttrTokenMap; 219 220 sal_uInt16 mnStyleFamilyMask; 221 222 sal_Int32 mnNewPageCount; 223 sal_Int32 mnNewMasterPageCount; 224 225 sal_Bool mbIsDraw; 226 sal_Bool mbLoadDoc; 227 sal_Bool mbPreview; 228 229 DrawPageIdMap maDrawPageIds; 230 231 ::rtl::OUString msPageLayouts; 232 ::rtl::OUString msPreview; 233 234 HeaderFooterDeclMap maHeaderDeclsMap; 235 HeaderFooterDeclMap maFooterDeclsMap; 236 DateTimeDeclMap maDateTimeDeclsMap; 237 238 protected: 239 // This method is called after the namespace map has been updated, but 240 // before a context for the current element has been pushed. 241 virtual SvXMLImportContext *CreateContext(sal_uInt16 nPrefix, 242 const rtl::OUString& rLocalName, 243 const com::sun::star::uno::Reference< 244 com::sun::star::xml::sax::XAttributeList>& xAttrList); 245 246 public: 247 // #110680# 248 SdXMLImport( 249 const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory, 250 sal_Bool bIsDraw, sal_uInt16 nImportFlags = IMPORT_ALL ); 251 ~SdXMLImport() throw (); 252 253 // XImporter 254 virtual void SAL_CALL setTargetDocument( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >& xDoc ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); 255 256 // XInitialization 257 virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments ) throw(::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException); 258 259 void SetProgress(sal_Int32 nProg); 260 261 virtual void SetViewSettings(const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& aViewProps); 262 virtual void SetConfigurationSettings(const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& aConfigProps); 263 264 // namespace office 265 // NB: in contrast to other CreateFooContexts, this particular one handles 266 // the root element (i.e. office:document-meta) 267 SvXMLImportContext* CreateMetaContext(const rtl::OUString& rLocalName, 268 const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList >& xAttrList); 269 SvXMLImportContext* CreateScriptContext( const ::rtl::OUString& rLocalName ); 270 SvXMLImportContext* CreateBodyContext(const rtl::OUString& rLocalName, 271 const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList >& xAttrList); 272 SvXMLStylesContext* CreateStylesContext(const rtl::OUString& rLocalName, 273 const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList >& xAttrList); 274 SvXMLStylesContext* CreateAutoStylesContext(const rtl::OUString& rLocalName, 275 const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList >& xAttrList); 276 SvXMLImportContext* CreateMasterStylesContext(const rtl::OUString& rLocalName, 277 const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList >& xAttrList); 278 SvXMLImportContext *CreateFontDeclsContext(const ::rtl::OUString& rLocalName, 279 const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > & xAttrList ); 280 281 // Styles and AutoStyles contexts 282 const SdXMLMasterStylesContext* GetMasterStylesContext() const { return mpMasterStylesContext; } 283 284 sal_uInt16 GetStyleFamilyMask() const { return mnStyleFamilyMask; } 285 sal_Bool IsStylesOnlyMode() const { return !mbLoadDoc; } 286 287 const SvXMLTokenMap& GetDocElemTokenMap(); 288 const SvXMLTokenMap& GetBodyElemTokenMap(); 289 const SvXMLTokenMap& GetStylesElemTokenMap(); 290 const SvXMLTokenMap& GetMasterPageElemTokenMap(); 291 const SvXMLTokenMap& GetMasterPageAttrTokenMap(); 292 const SvXMLTokenMap& GetPageMasterAttrTokenMap(); 293 const SvXMLTokenMap& GetPageMasterStyleAttrTokenMap(); 294 const SvXMLTokenMap& GetDrawPageAttrTokenMap(); 295 const SvXMLTokenMap& GetDrawPageElemTokenMap(); 296 const SvXMLTokenMap& GetPresentationPlaceholderAttrTokenMap(); 297 298 // export local parameters concerning page access and similar 299 const com::sun::star::uno::Reference< 300 com::sun::star::container::XNameAccess >& GetLocalDocStyleFamilies() const { return mxDocStyleFamilies; } 301 const com::sun::star::uno::Reference< 302 com::sun::star::container::XIndexAccess >& GetLocalMasterPages() const { return mxDocMasterPages; } 303 const com::sun::star::uno::Reference< 304 com::sun::star::container::XIndexAccess >& GetLocalDrawPages() const { return mxDocDrawPages; } 305 306 sal_Int32 GetNewPageCount() const { return mnNewPageCount; } 307 void IncrementNewPageCount() { mnNewPageCount++; } 308 sal_Int32 GetNewMasterPageCount() const { return mnNewMasterPageCount; } 309 void IncrementNewMasterPageCount() { mnNewMasterPageCount++; } 310 311 com::sun::star::uno::Reference< com::sun::star::container::XNameAccess > getPageLayouts() const { return mxPageLayouts; } 312 313 sal_Bool IsDraw() const { return mbIsDraw; } 314 sal_Bool IsImpress() const { return !mbIsDraw; } 315 316 // import pool defaults. Parameter contains pool defaults read 317 // from input data. These data needs to be set at the model. 318 void ImportPoolDefaults(const XMLPropStyleContext* pPool); 319 320 // #80365# 321 virtual void SetStatistics( 322 const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue> & i_rStats); 323 324 sal_Bool IsPreview() const { return mbPreview; } 325 326 // XServiceInfo ( : SvXMLExport ) 327 virtual ::rtl::OUString SAL_CALL getImplementationName() throw( ::com::sun::star::uno::RuntimeException ); 328 329 void AddHeaderDecl( const ::rtl::OUString& rName, const ::rtl::OUString& rText ); 330 void AddFooterDecl( const ::rtl::OUString& rName, const ::rtl::OUString& rText ); 331 void AddDateTimeDecl( const ::rtl::OUString& rName, const ::rtl::OUString& rText, sal_Bool bFixed, const ::rtl::OUString& rDateTimeFormat ); 332 333 ::rtl::OUString GetHeaderDecl( const ::rtl::OUString& rName ) const; 334 ::rtl::OUString GetFooterDecl( const ::rtl::OUString& rName ) const; 335 ::rtl::OUString GetDateTimeDecl( const ::rtl::OUString& rName, sal_Bool& rbFixed, ::rtl::OUString& rDateTimeFormat ); 336 337 }; 338 339 #endif // _SDXMLIMP_HXX 340