1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20 #ifndef INCLUDED_XMLOFF_XMLEXP_HXX
21 #define INCLUDED_XMLOFF_XMLEXP_HXX
22
23 #include <sal/config.h>
24 #include <xmloff/dllapi.h>
25 #include <sal/types.h>
26
27 #include <com/sun/star/lang/XUnoTunnel.hpp>
28 #include <rtl/ustring.hxx>
29 #include <xmloff/attrlist.hxx>
30 #include <xmloff/txtparae.hxx>
31 #include <xmloff/formlayerexport.hxx>
32 #include <xmloff/xmlnumfe.hxx>
33 #include <xmloff/xmlaustp.hxx>
34 #include <xmloff/shapeexport.hxx>
35 #include <xmloff/xmltoken.hxx>
36 #include <xmloff/SchXMLExportHelper.hxx>
37 #include <xmloff/XMLFontAutoStylePool.hxx>
38 #include <xmloff/xmluconv.hxx>
39 #include <com/sun/star/document/XFilter.hpp>
40 #include <com/sun/star/lang/XServiceInfo.hpp>
41 #include <com/sun/star/document/XExporter.hpp>
42 #include <com/sun/star/lang/XInitialization.hpp>
43 #include <com/sun/star/container/XNamed.hpp>
44
45 #include <unotools/saveopt.hxx>
46
47 #include <xmloff/XMLPageExport.hxx>
48 #include <comphelper/servicehelper.hxx>
49 #include <cppuhelper/implbase.hxx>
50 #include <tools/fldunit.hxx>
51 #include <vcl/errcode.hxx>
52
53 #include <vector>
54 #include <memory>
55 #include <o3tl/typed_flags_set.hxx>
56
57 namespace com { namespace sun { namespace star { namespace beans { class XPropertySet; } } } }
58 namespace com { namespace sun { namespace star { namespace document { class XEmbeddedObjectResolver; } } } }
59 namespace com { namespace sun { namespace star { namespace document { class XGraphicStorageHandler; } } } }
60 namespace com { namespace sun { namespace star { namespace embed { class XStorage; } } } }
61 namespace com { namespace sun { namespace star { namespace graphic { class XGraphic; } } } }
62 namespace com { namespace sun { namespace star { namespace lang { class XEventListener; } } } }
63 namespace com { namespace sun { namespace star { namespace task { class XStatusIndicator; } } } }
64 namespace com { namespace sun { namespace star { namespace uno { class XComponentContext; } } } }
65 namespace com { namespace sun { namespace star { namespace util { class XNumberFormatsSupplier; } } } }
66 namespace com { namespace sun { namespace star { namespace xml { namespace sax { class XAttributeList; } } } } }
67 namespace com { namespace sun { namespace star { namespace xml { namespace sax { class XDocumentHandler; } } } } }
68 namespace com { namespace sun { namespace star { namespace xml { namespace sax { class XExtendedDocumentHandler; } } } } }
69 namespace com { namespace sun { namespace star { namespace xml { namespace sax { class XLocator; } } } } }
70
71 class SvXMLNamespaceMap;
72 class SvXMLExport_Impl;
73 class ProgressBarHelper;
74 class XMLEventExport;
75 class XMLImageMapExport;
76 class XMLErrors;
77 class LanguageTag;
78 enum class SvXMLErrorFlags;
79
80 // Shapes in Writer cannot be named via context menu (#i51726#)
81 #include <unotools/moduleoptions.hxx>
82
83 namespace com { namespace sun { namespace star {
84 namespace frame { class XModel; }
85 namespace lang { struct Locale; }
86 } } }
87 namespace comphelper { class UnoInterfaceToUniqueIdentifierMapper; }
88
89 enum class SvXMLExportFlags {
90 NONE = 0,
91 META = 0x0001,
92 STYLES = 0x0002,
93 MASTERSTYLES = 0x0004,
94 AUTOSTYLES = 0x0008,
95 CONTENT = 0x0010,
96 SCRIPTS = 0x0020,
97 SETTINGS = 0x0040,
98 FONTDECLS = 0x0080,
99 EMBEDDED = 0x0100,
100 PRETTY = 0x0400,
101 SAVEBACKWARDCOMPATIBLE = 0x0800,
102 OASIS = 0x8000,
103 ALL = 0x0dff
104 };
105 namespace o3tl
106 {
107 template<> struct typed_flags<SvXMLExportFlags> : is_typed_flags<SvXMLExportFlags, 0x8dff> {};
108 }
109
110 class XMLOFF_DLLPUBLIC SvXMLExport : public cppu::WeakImplHelper<
111 css::document::XFilter,
112 css::lang::XServiceInfo,
113 css::document::XExporter,
114 css::lang::XInitialization,
115 css::container::XNamed,
116 css::lang::XUnoTunnel>
117 {
118 std::unique_ptr<SvXMLExport_Impl> mpImpl; // dummy
119
120 css::uno::Reference< css::uno::XComponentContext > m_xContext;
121 OUString const m_implementationName;
122
123 css::uno::Reference< css::frame::XModel > mxModel;
124 css::uno::Reference< css::xml::sax::XDocumentHandler > mxHandler; // the handlers
125 css::uno::Reference< css::xml::sax::XExtendedDocumentHandler > mxExtHandler;
126 css::uno::Reference< css::util::XNumberFormatsSupplier > mxNumberFormatsSupplier;
127 css::uno::Reference< css::document::XGraphicStorageHandler > mxGraphicStorageHandler;
128 css::uno::Reference< css::document::XEmbeddedObjectResolver > mxEmbeddedResolver;
129 css::uno::Reference< css::task::XStatusIndicator > mxStatusIndicator;
130 css::uno::Reference< css::beans::XPropertySet > mxExportInfo;
131 css::uno::Reference< css::lang::XEventListener > mxEventListener;
132
133 rtl::Reference<SvXMLAttributeList> mxAttrList; // a common attribute list
134
135 OUString msOrigFileName; // the original URL
136 OUString msFilterName;
137 OUString msImgFilterName;
138 std::unique_ptr<SvXMLNamespaceMap> mpNamespaceMap; // the namepspace map
139 SvXMLUnitConverter maUnitConv; // the unit converter
140 std::unique_ptr<SvXMLNumFmtExport> mpNumExport;
141 std::unique_ptr<ProgressBarHelper> mpProgressBarHelper;
142
143 rtl::Reference< XMLTextParagraphExport > mxTextParagraphExport;
144 rtl::Reference< XMLShapeExport > mxShapeExport;
145 rtl::Reference< SvXMLAutoStylePoolP > mxAutoStylePool;
146 rtl::Reference< SchXMLExportHelper > mxChartExport;
147 rtl::Reference< XMLPageExport > mxPageExport;
148 rtl::Reference< XMLFontAutoStylePool > mxFontAutoStylePool;
149 rtl::Reference< xmloff::OFormLayerXMLExport > mxFormExport;
150 std::unique_ptr<XMLEventExport> mpEventExport;
151 std::unique_ptr<XMLImageMapExport> mpImageMapExport;
152 std::unique_ptr<XMLErrors> mpXMLErrors;
153
154 const enum ::xmloff::token::XMLTokenEnum meClass;
155 SAL_DLLPRIVATE void InitCtor_();
156
157 SvXMLExportFlags mnExportFlags;
158 SvXMLErrorFlags mnErrorFlags;
159
160 const OUString msWS; // " "
161
162 // Shapes in Writer cannot be named via context menu (#i51726#)
163 SvtModuleOptions::EFactory meModelType;
164 SAL_DLLPRIVATE void DetermineModelType_();
165
166 SAL_DLLPRIVATE void ImplExportMeta(); // <office:meta>
167 SAL_DLLPRIVATE void ImplExportSettings(); // <office:settings>
168 SAL_DLLPRIVATE void ImplExportStyles(); // <office:styles>
169 SAL_DLLPRIVATE void ImplExportAutoStyles();
170 // <office:automatic-styles>
171 SAL_DLLPRIVATE void ImplExportMasterStyles();
172 // <office:master-styles>
173 SAL_DLLPRIVATE void ImplExportContent(); // <office:body>
174 virtual void SetBodyAttributes();
175 void GetViewSettingsAndViews(css::uno::Sequence<css::beans::PropertyValue>& rProps);
176
177 protected:
setExportFlags(SvXMLExportFlags nExportFlags)178 void setExportFlags( SvXMLExportFlags nExportFlags ) { mnExportFlags = nExportFlags; }
179
180 // Get (modifiable) namespace map
GetNamespaceMap_()181 SvXMLNamespaceMap& GetNamespaceMap_() { return *mpNamespaceMap; }
182
183 // get a new namespave map (used in starmath to have a default namespace)
184 void ResetNamespaceMap();
185
186 /// Override this method to export the content of <office:meta>.
187 /// There is a default implementation.
188 virtual void ExportMeta_();
189
190 /// Override this method to export the content of <office:scripts>.
191 /// There is a default implementation.
192 virtual void ExportScripts_();
193
194 /// Override this method to export the font declarations
195 /// The default implementation will export the contents of the
196 /// XMLFontAutoStylePool if it has been created.
197 virtual void ExportFontDecls_();
198
199 /// Override this method to export the content of <style:styles>.
200 /// If bUsed is set, used styles should be exported only.
201 /// Overriding Methods must call this method !
202 virtual void ExportStyles_( bool bUsed );
203
204 /// Override this method to export the contents of <style:auto-styles>.
205 virtual void ExportAutoStyles_() = 0;
206
207 /// Override this method to export the contents of <style:master-styles>.
208 virtual void ExportMasterStyles_() = 0;
209
210 /// Override this method to export the content of <office:body>.
211 virtual void ExportContent_() = 0;
212
213 OUString const & GetSourceShellID() const;
214 OUString const & GetDestinationShellID() const;
215
216 // save linked sections? (may be false in global documents)
217 bool mbSaveLinkedSections;
218
219 virtual XMLTextParagraphExport* CreateTextParagraphExport();
220 virtual XMLShapeExport* CreateShapeExport();
221 virtual SvXMLAutoStylePoolP* CreateAutoStylePool();
222 SchXMLExportHelper* CreateChartExport();
223 virtual XMLPageExport* CreatePageExport();
224 virtual XMLFontAutoStylePool* CreateFontAutoStylePool();
225 xmloff::OFormLayerXMLExport* CreateFormExport();
226 virtual void GetViewSettings(css::uno::Sequence<css::beans::PropertyValue>& aProps);
227 virtual void GetConfigurationSettings(css::uno::Sequence<css::beans::PropertyValue>& aProps);
228
229 struct SettingsGroup
230 {
231 ::xmloff::token::XMLTokenEnum const eGroupName;
232 css::uno::Sequence< css::beans::PropertyValue > const aSettings;
233
SettingsGroupSvXMLExport::SettingsGroup234 SettingsGroup(
235 const ::xmloff::token::XMLTokenEnum _eGroupName,
236 const css::uno::Sequence< css::beans::PropertyValue >& _rSettings )
237 :eGroupName( _eGroupName )
238 ,aSettings( _rSettings )
239 {
240 }
241 };
242 /** returns the current document settings
243
244 The default implementation will obtain the view settings by calling GetViewSettingsAndViews, and the
245 configuration settings by calling GetConfigurationSettings, and return them together with the proper XML token.
246
247 @return
248 the accumulated count of all settings in all groups
249 */
250 virtual sal_Int32 GetDocumentSpecificSettings( ::std::vector< SettingsGroup >& _out_rSettings );
251
GetEmbeddedResolver() const252 const css::uno::Reference< css::document::XEmbeddedObjectResolver >& GetEmbeddedResolver() const { return mxEmbeddedResolver; }
253 inline void SetEmbeddedResolver( css::uno::Reference< css::document::XEmbeddedObjectResolver > const & _xEmbeddedResolver );
254
GetGraphicStorageHandler() const255 const css::uno::Reference<css::document::XGraphicStorageHandler> & GetGraphicStorageHandler() const
256 {
257 return mxGraphicStorageHandler;
258 }
259 void SetGraphicStorageHandler(css::uno::Reference<css::document::XGraphicStorageHandler> const & rxGraphicStorageHandler);
260
261 void SetDocHandler( const css::uno::Reference< css::xml::sax::XDocumentHandler > &rHandler );
262
263 bool mbAutoStylesCollected;
264 public:
265
266 SvXMLExport(
267 sal_Int16 const eDefaultMeasureUnit /*css::util::MeasureUnit*/,
268 const css::uno::Reference< css::uno::XComponentContext >& xContext,
269 OUString const & implementationName,
270 const enum ::xmloff::token::XMLTokenEnum eClass,
271 SvXMLExportFlags nExportFlag );
272
273 SvXMLExport(
274 const css::uno::Reference< css::uno::XComponentContext >& xContext,
275 OUString const & implementationName,
276 const OUString& rFileName,
277 sal_Int16 const eDefaultMeasureUnit /*css::util::MeasureUnit*/,
278 const css::uno::Reference< css::xml::sax::XDocumentHandler > & rHandler);
279
280 SvXMLExport(
281 const css::uno::Reference< css::uno::XComponentContext >& xContext,
282 OUString const & implementationName,
283 const OUString& rFileName,
284 const css::uno::Reference< css::xml::sax::XDocumentHandler > & rHandler,
285 const css::uno::Reference< css::frame::XModel > &,
286 FieldUnit const eDefaultFieldUnit,
287 SvXMLExportFlags nExportFlag );
288
289 virtual ~SvXMLExport() override;
290
291 virtual void collectAutoStyles();
292
293 // XExporter
294 virtual void SAL_CALL setSourceDocument( const css::uno::Reference< css::lang::XComponent >& xDoc ) override;
295
296 // XFilter
297 virtual sal_Bool SAL_CALL filter( const css::uno::Sequence< css::beans::PropertyValue >& aDescriptor ) override;
298 virtual void SAL_CALL cancel() override;
299
300 // XInitialization
301 virtual void SAL_CALL initialize( const css::uno::Sequence< css::uno::Any >& aArguments ) override;
302
303 // XNamed
304 virtual OUString SAL_CALL getName( ) override;
305 virtual void SAL_CALL setName( const OUString& aName ) override;
306
307 // XServiceInfo
308 virtual OUString SAL_CALL getImplementationName( ) final override;
309 virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) final override;
310 virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames( ) final override;
311
312 // XUnoTunnel
313 UNO3_GETIMPLEMENTATION_DECL(SvXMLExport)
314
315 /** ensures that the given namespace is in scope at the next started
316 element.
317
318 <p>If the namespace is not yet declared, the necessary attribute will
319 be added, as well.</p>
320
321 @param i_rNamespace the namespace to be declared
322
323 @returns the actual prefix that the namespace is associated with
324 */
325 OUString EnsureNamespace(OUString const & i_rNamespace );
326
327 // Check if common attribute list is empty.
328 #ifndef DBG_UTIL
CheckAttrList()329 void CheckAttrList() { (void) this; /* avoid loplugin:staticmethods */ }
330 #else
331 void CheckAttrList();
332 #endif
333
334 // Clear common attribute list.
335 void ClearAttrList();
336
337 // Add an attribute to the common attribute list.
338 void AddAttributeASCII( sal_uInt16 nPrefix, const sal_Char *pName,
339 const sal_Char *pValue );
340 void AddAttribute( sal_uInt16 nPrefix, const sal_Char *pName,
341 const OUString& rValue );
342 void AddAttribute( sal_uInt16 nPrefix, const OUString& rName,
343 const OUString& rValue );
344 void AddAttribute( sal_uInt16 nPrefix,
345 enum ::xmloff::token::XMLTokenEnum eName,
346 const OUString& rValue );
347 void AddAttribute( sal_uInt16 nPrefix,
348 enum ::xmloff::token::XMLTokenEnum eName,
349 enum ::xmloff::token::XMLTokenEnum eValue );
350 void AddAttribute( const OUString& rQName,
351 const OUString& rValue );
352 void AddAttribute( const OUString& rQName,
353 enum ::xmloff::token::XMLTokenEnum eValue );
354
355 /** Add language tag attributes, deciding which are necessary.
356
357 @param nPrefix
358 Namespace prefix for *:language, *:script and *:country
359
360 @param nPrefixRfc
361 Namespace prefix for *:rfc-language-tag
362
363 @param bWriteEmpty
364 Whether to write empty *:language and *:country attribute
365 values in case of an empty locale (denoting system).
366 */
367 void AddLanguageTagAttributes( sal_uInt16 nPrefix, sal_uInt16 nPrefixRfc,
368 const css::lang::Locale& rLocale, bool bWriteEmpty);
369
370 /** Same as AddLanguageTagAttributes() but with LanguageTag parameter
371 instead of Locale.
372 */
373 void AddLanguageTagAttributes( sal_uInt16 nPrefix, sal_uInt16 nPrefixRfc,
374 const LanguageTag& rLanguageTag, bool bWriteEmpty );
375
376 // add several attributes to the common attribute list
377 void AddAttributeList( const css::uno::Reference<
378 css::xml::sax::XAttributeList >& xAttrList );
379
380 // Get common attribute list as implementation or interface.
GetAttrList()381 SvXMLAttributeList &GetAttrList() { return *mxAttrList; }
GetXAttrList()382 css::uno::Reference< css::xml::sax::XAttributeList > GetXAttrList() { return mxAttrList.get(); }
383
384 // Get document handler. This methods are not const, because the
385 // reference allows modifications through the handler.
GetDocHandler() const386 const css::uno::Reference< css::xml::sax::XDocumentHandler > & GetDocHandler() const { return mxHandler; }
387
388 // Get original URL.
GetOrigFileName() const389 const OUString& GetOrigFileName() const { return msOrigFileName; }
390
391 // Get (const) namespace map.
GetNamespaceMap() const392 const SvXMLNamespaceMap& GetNamespaceMap() const { return *mpNamespaceMap; }
393
394 // Get unit converter
GetMM100UnitConverter() const395 const SvXMLUnitConverter& GetMM100UnitConverter() const { return maUnitConv; }
396
GetMM100UnitConverter()397 SvXMLUnitConverter& GetMM100UnitConverter() { return maUnitConv; }
398
399 void addChaffWhenEncryptedStorage();
400
401 // Export the document.
402 virtual ErrCode exportDoc( enum ::xmloff::token::XMLTokenEnum eClass = ::xmloff::token::XML_TOKEN_INVALID );
403
404 void collectDataStyles(bool bFromUsedStyles);
405 virtual void addDataStyle(const sal_Int32 nNumberFormat, bool bTimeFormat = false );
406 virtual void exportDataStyles();
407 virtual void exportAutoDataStyles();
408 virtual OUString getDataStyleName(const sal_Int32 nNumberFormat, bool bTimeFormat = false ) const;
409 sal_Int32 dataStyleForceSystemLanguage(sal_Int32 nFormat) const;
410
411 virtual void exportAnnotationMeta( const css::uno::Reference < css::drawing::XShape >& xShape);
412
413 // Get XModel
414 const css::uno::Reference< css::frame::XModel > &
GetModel() const415 GetModel() const { return mxModel; }
416 // Get XNumberFormatsSupplier
GetNumberFormatsSupplier()417 css::uno::Reference< css::util::XNumberFormatsSupplier > & GetNumberFormatsSupplier() { return mxNumberFormatsSupplier; }
SetNumberFormatsSupplier(const css::uno::Reference<css::util::XNumberFormatsSupplier> & _xNumberFormatSupplier)418 void SetNumberFormatsSupplier(const css::uno::Reference< css::util::XNumberFormatsSupplier >& _xNumberFormatSupplier)
419 {
420 mxNumberFormatsSupplier = _xNumberFormatSupplier;
421 if ( mxNumberFormatsSupplier.is() && mxHandler.is() )
422 mpNumExport.reset( new SvXMLNumFmtExport(*this, mxNumberFormatsSupplier) );
423 }
424
425 // get export helper for text
426 inline rtl::Reference< XMLTextParagraphExport > const & GetTextParagraphExport();
427
428 // get export helper for shapes
429 inline rtl::Reference< XMLShapeExport > const & GetShapeExport();
430
431 // get auto style pool
432 inline rtl::Reference< SvXMLAutoStylePoolP > const & GetAutoStylePool();
433
434 // get Page Export
435 inline rtl::Reference< XMLPageExport > const & GetPageExport();
436
437 // get chart export helper
438 inline rtl::Reference< SchXMLExportHelper > const & GetChartExport();
439
440 // get font auto style pool
441 inline rtl::Reference< XMLFontAutoStylePool > const & GetFontAutoStylePool();
442
443 ProgressBarHelper* GetProgressBarHelper();
444
445 // get Formlayer Export
446 inline rtl::Reference< xmloff::OFormLayerXMLExport > const & GetFormExport();
447 inline bool HasFormExport() const;
448
449 // get XPropertySet with export information
getExportInfo() const450 const css::uno::Reference< css::beans::XPropertySet >& getExportInfo() const { return mxExportInfo; }
451
GetStatusIndicator() const452 const css::uno::Reference< css::task::XStatusIndicator >& GetStatusIndicator() const { return mxStatusIndicator; }
453
454 /// get Event export, with handlers for script types "None" and
455 /// "StarBasic" already registered; other handlers may be registered, too.
456 XMLEventExport& GetEventExport();
457
458 /// get the export for image maps
459 XMLImageMapExport& GetImageMapExport();
460
461 OUString AddEmbeddedXGraphic(css::uno::Reference<css::graphic::XGraphic> const & rxGraphic, OUString & rOutMimeType, OUString const & rRequestedName = OUString());
462 bool AddEmbeddedXGraphicAsBase64(css::uno::Reference<css::graphic::XGraphic> const & rxGraphic);
463 bool GetGraphicMimeTypeFromStream(css::uno::Reference<css::graphic::XGraphic> const & rxGraphic, OUString & rOutMimeType);
464
465 OUString AddEmbeddedObject(
466 const OUString& rEmbeddedObjectURL );
467 bool AddEmbeddedObjectAsBase64(
468 const OUString& rEmbeddedObjectURL );
469
470 OUString EncodeStyleName( const OUString& rName,
471 bool *pEncoded=nullptr ) const;
472
473 // save linked sections?
IsSaveLinkedSections() const474 bool IsSaveLinkedSections() const { return mbSaveLinkedSections; }
475
476 // get export flags
getExportFlags() const477 SvXMLExportFlags getExportFlags() const { return mnExportFlags; }
478
479 void ExportEmbeddedOwnObject(
480 css::uno::Reference<css::lang::XComponent > const & rComp );
481
482 OUString GetRelativeReference(const OUString& rValue);
483
484 // methods for accessing the document handler and handling SAX errors
485 void StartElement(sal_uInt16 nPrefix,
486 enum ::xmloff::token::XMLTokenEnum eName,
487 bool bIgnWSOutside );
488 void StartElement(const OUString& rName,
489 bool bIgnWSOutside );
490 void Characters(const OUString& rChars);
491 void EndElement(sal_uInt16 nPrefix,
492 enum ::xmloff::token::XMLTokenEnum eName,
493 bool bIgnWSInside );
494 void EndElement(const OUString& rName,
495 bool bIgnWSInside );
496 void IgnorableWhitespace();
497
498 /**
499 * Record an error condition that occurred during export. The
500 * behavior of SetError can be modified using the error flag
501 * constants.
502 */
503 void SetError(
504 /// error ID, may contain an error flag
505 sal_Int32 nId,
506 /// string parameters for the error message
507 const css::uno::Sequence< OUString> & rMsgParams,
508 /// original exception message (if applicable)
509 const OUString& rExceptionMessage,
510 /// error location (if applicable)
511 const css::uno::Reference<css::xml::sax::XLocator> & rLocator );
512
513 void SetError(
514 sal_Int32 nId,
515 const css::uno::Sequence< OUString> & rMsgParams);
516
517 virtual void DisposingModel();
518
519 ::comphelper::UnoInterfaceToUniqueIdentifierMapper& getInterfaceToIdentifierMapper();
520
getComponentContext() const521 const css::uno::Reference< css::uno::XComponentContext >& getComponentContext() const { return m_xContext;}
522
523 // Shapes in Writer cannot be named via context menu (#i51726#)
GetModelType() const524 SvtModuleOptions::EFactory GetModelType() const
525 {
526 return meModelType;
527 }
528
529 // Written OpenDocument file format doesn't fit to the created text document (#i69627#)
530 bool writeOutlineStyleAsNormalListStyle() const;
531
532 css::uno::Reference< css::embed::XStorage > const & GetTargetStorage() const;
533
534 /// returns the currently configured default version for odf export
535 SvtSaveOptions::ODFDefaultVersion getDefaultVersion() const;
536
537 /// returns the deterministic version for odf export
538 SvtSaveOptions::ODFSaneDefaultVersion getSaneDefaultVersion() const;
539
540 // FIXME: this is only for legacy stuff that has not yet been adapted
541 // to implement XMetadatable; this can write duplicate IDs!
542 /// add xml:id and legacy namespace id
543 void SAL_DLLPRIVATE AddAttributeIdLegacy(
544 sal_uInt16 const nLegacyPrefix, OUString const& rValue);
545
546 /// add xml:id attribute (for RDF metadata)
547 void AddAttributeXmlId(css::uno::Reference<css::uno::XInterface> const & i_xIfc);
548
549 /// add RDFa attributes for a metadatable text content
550 void AddAttributesRDFa( css::uno::Reference<css::text::XTextContent> const & i_xTextContent);
551
552 bool exportTextNumberElement() const;
553
554 /// set null date from model to unit converter, if not already done
555 bool SetNullDateOnUnitConverter();
556
557 /// Get clamped mimetype for image export (empty if none)
558 OUString const & GetImageFilterName() const;
559 };
560
GetTextParagraphExport()561 inline rtl::Reference< XMLTextParagraphExport > const & SvXMLExport::GetTextParagraphExport()
562 {
563 if( !mxTextParagraphExport.is() )
564 mxTextParagraphExport = CreateTextParagraphExport();
565
566 return mxTextParagraphExport;
567 }
568
GetShapeExport()569 inline rtl::Reference< XMLShapeExport > const & SvXMLExport::GetShapeExport()
570 {
571 if( !mxShapeExport.is() )
572 mxShapeExport = CreateShapeExport();
573
574 return mxShapeExport;
575 }
576
GetAutoStylePool()577 inline rtl::Reference< SvXMLAutoStylePoolP > const & SvXMLExport::GetAutoStylePool()
578 {
579 if( !mxAutoStylePool.is() )
580 mxAutoStylePool = CreateAutoStylePool();
581
582 return mxAutoStylePool;
583 }
584
GetChartExport()585 inline rtl::Reference< SchXMLExportHelper > const & SvXMLExport::GetChartExport()
586 {
587 if( !mxChartExport.is() )
588 mxChartExport = CreateChartExport();
589
590 return mxChartExport;
591 }
592
GetPageExport()593 inline rtl::Reference< XMLPageExport > const & SvXMLExport::GetPageExport()
594 {
595 if( !mxPageExport.is() )
596 mxPageExport = CreatePageExport();
597
598 return mxPageExport;
599 }
600
GetFontAutoStylePool()601 inline rtl::Reference< XMLFontAutoStylePool > const & SvXMLExport::GetFontAutoStylePool()
602 {
603 if( !mxFontAutoStylePool.is() )
604 mxFontAutoStylePool = CreateFontAutoStylePool();
605
606 return mxFontAutoStylePool;
607 }
608
GetFormExport()609 inline rtl::Reference< xmloff::OFormLayerXMLExport > const & SvXMLExport::GetFormExport()
610 {
611 if( !mxFormExport.is() )
612 mxFormExport = CreateFormExport();
613
614 return mxFormExport;
615 }
616
HasFormExport() const617 inline bool SvXMLExport::HasFormExport() const
618 {
619 return mxFormExport.is();
620 }
621
SetEmbeddedResolver(css::uno::Reference<css::document::XEmbeddedObjectResolver> const & _xEmbeddedResolver)622 inline void SvXMLExport::SetEmbeddedResolver(
623 css::uno::Reference< css::document::XEmbeddedObjectResolver > const & _xEmbeddedResolver )
624 {
625 mxEmbeddedResolver = _xEmbeddedResolver;
626 }
627
SetGraphicStorageHandler(css::uno::Reference<css::document::XGraphicStorageHandler> const & rxGraphicStorageHandler)628 inline void SvXMLExport::SetGraphicStorageHandler(
629 css::uno::Reference<css::document::XGraphicStorageHandler> const & rxGraphicStorageHandler)
630 {
631 mxGraphicStorageHandler = rxGraphicStorageHandler;
632 }
633
634 // Helper class to export an element.
635 class XMLOFF_DLLPUBLIC SvXMLElementExport
636 {
637 SvXMLExport& mrExport;
638 OUString maElementName;
639 const bool mbIgnoreWhitespaceInside :1;
640 const bool mbDoSomething :1;
641
642 SAL_DLLPRIVATE
643 void StartElement(
644 const sal_uInt16 nPrefix,
645 const OUString& rName,
646 const bool bIgnoreWhitespaceOutside );
647
648 public:
649
650 // The constructor prints a start tag that has the common attributes
651 // of the XMLExport instance attached.
652 SvXMLElementExport( SvXMLExport& rExp, sal_uInt16 nPrefix,
653 const sal_Char *pName,
654 bool bIgnWSOutside, bool bIgnWSInside );
655 SvXMLElementExport( SvXMLExport& rExp, sal_uInt16 nPrefix,
656 const OUString& rName,
657 bool bIgnWSOutside, bool bIgnWSInside );
658 SvXMLElementExport( SvXMLExport& rExp, sal_uInt16 nPrefix,
659 enum ::xmloff::token::XMLTokenEnum eName,
660 bool bIgnWSOutside, bool bIgnWSInside );
661 SvXMLElementExport( SvXMLExport& rExp, const OUString& rQName,
662 bool bIgnWSOutside, bool bIgnWSInside );
663
664 // These constructors do nothing if bDoSomething is not set
665 SvXMLElementExport( SvXMLExport& rExp, bool bDoSomething,
666 sal_uInt16 nPrefix,
667 enum ::xmloff::token::XMLTokenEnum eName,
668 bool bIgnWSOutside, bool bIgnWSInside );
669
670 // The destructor prints an end tag.
671 ~SvXMLElementExport();
672 };
673
674 #endif // _XMLOFF_SVXMLEXP_HXX
675
676 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
677