LibreOffice Module sw (master)  1
docxexport.hxx
Go to the documentation of this file.
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_SW_SOURCE_FILTER_WW8_DOCXEXPORT_HXX
21 #define INCLUDED_SW_SOURCE_FILTER_WW8_DOCXEXPORT_HXX
22 
23 #include "wrtww8.hxx"
24 
25 #include <sal/log.hxx>
26 #include <sax/fshelper.hxx>
27 #include <rtl/ustring.hxx>
28 
29 #include <cstdio>
30 #include <memory>
31 #include <ndole.hxx>
32 
34 class DocxExportFilter;
35 class SwNode;
36 class SwEndNode;
37 class SwTableNode;
38 class SwTextNode;
39 class SwGrfNode;
40 class SwOLENode;
41 class DocxSdrExport;
42 
43 namespace oox {
44  namespace drawingml { class DrawingML; }
45  namespace vml { class VMLExport; }
46 }
47 
48 namespace com::sun::star {
49  namespace frame { class XModel; }
50  namespace drawing { class XShape; }
51  namespace awt { class XControlModel; }
52 }
53 
56 {
58  bool hasData() const;
61  bool revisionView; // don't show tracked changes
62  bool trackRevisions; // Should 'Track Revisions' be set
63 };
64 
67 {
70 
73 
76 
78  std::unique_ptr<oox::drawingml::DrawingML> m_pDrawingML;
79 
81  std::unique_ptr<DocxAttributeOutput> m_pAttrOutput;
82 
84  std::unique_ptr<MSWordSections> m_pSections;
85 
87  sal_Int32 m_nHeaders;
88 
90  sal_Int32 m_nFooters;
91 
93  sal_Int32 m_nOLEObjects;
94 
96  sal_Int32 m_nActiveXControls;
97 
100 
102  std::unique_ptr<oox::vml::VMLExport> m_pVMLExport;
103 
105  std::unique_ptr<DocxSdrExport> m_pSdrExport;
106 
108  bool m_bDocm;
109 
111  bool const m_bTemplate;
112 
114 
117 
118 public:
119 
121  const DocxExportFilter& GetFilter() const { return *m_pFilter; };
122 
124 
126  virtual AttributeOutputBase& AttrOutput() const override;
127 
130 
132  virtual MSWordSections& Sections() const override;
133 
134  virtual bool FieldsQuoted() const override { return true; }
135 
136  virtual bool AddSectionBreaksForTOX() const override { return true; }
137 
138  virtual bool ignoreAttributeForStyleDefaults( sal_uInt16 nWhich ) const override;
139 
140  virtual bool PreferPageBreakBefore() const override { return false; }
141 
143  virtual bool CollapseScriptsforWordOk( sal_uInt16 nScript, sal_uInt16 nWhich ) override;
144 
145  virtual void AppendBookmarks( const SwTextNode& rNode, sal_Int32 nCurrentPos, sal_Int32 nLen ) override;
146 
147  virtual void AppendBookmark( const OUString& rName ) override;
148 
149  virtual void AppendAnnotationMarks( const SwWW8AttrIter& rAttrs, sal_Int32 nCurrentPos, sal_Int32 nLen ) override;
150 
151  virtual void ExportGrfBullet(const SwTextNode&) override;
152 
154  OString AddRelation( const OUString& rType, const OUString& rTarget );
155 
156  virtual void WriteCR( ww8::WW8TableNodeInfoInner::Pointer_t /*pTableTextNodeInfoInner = ww8::WW8TableNodeInfoInner::Pointer_t()*/ ) override { /* FIXME no-op for docx, most probably should not even be in MSWordExportBase */ }
157  virtual void WriteChar( sal_Unicode ) override { SAL_WARN("sw.ww8", "FIXME: WriteChar() has nothing to do for docx."); }
158 
160  virtual bool DisallowInheritingOutlineNumbering( const SwFormat &rFormat ) override;
161 
163  virtual void WriteHeadersFooters( sal_uInt8 nHeadFootFlags,
164  const SwFrameFormat& rFormat, const SwFrameFormat& rLeftFormat, const SwFrameFormat& rFirstPageFormat, sal_uInt8 nBreakCode ) override;
165 
167  virtual void OutputField( const SwField* pField, ww::eField eFieldType,
168  const OUString& rFieldCmd, FieldFlags nMode = FieldFlags::All ) override;
169 
171  virtual void WriteFormData( const ::sw::mark::IFieldmark& rFieldmark ) override;
172  virtual void WriteHyperlinkData( const ::sw::mark::IFieldmark& rFieldmark ) override;
173 
174  virtual void DoComboBox(const OUString &rName,
175  const OUString &rHelp,
176  const OUString &ToolTip,
177  const OUString &rSelected,
178  const css::uno::Sequence<OUString> &rListItems) override;
179 
180  virtual void DoFormText(const SwInputField * pField) override;
181 
182  virtual sal_uLong ReplaceCr( sal_uInt8 nChar ) override;
183 
185  OString OutputChart( css::uno::Reference< css::frame::XModel > const & xModel, sal_Int32 nCount, ::sax_fastparser::FSHelperPtr const & m_pSerializer );
186  OString WriteOLEObject(SwOLEObj& rObject, OUString & io_rProgID);
187  std::pair<OString,OString> WriteActiveXObject(const uno::Reference<css::drawing::XShape>& rxShape,
188  const uno::Reference<awt::XControlModel>& rxControlModel);
189 
191  void OutputDML( css::uno::Reference< css::drawing::XShape > const & xShape );
192 
193  void WriteOutliner(const OutlinerParaObject& rOutliner, sal_uInt8 nTyp);
194 
195  virtual ExportFormat GetExportFormat() const override { return ExportFormat::DOCX; }
196 
197 protected:
199  virtual ErrCode ExportDocument_Impl() override;
200 
202  virtual void OutputEndNode( const SwEndNode& ) override;
203 
205  virtual void OutputGrfNode( const SwGrfNode& ) override;
206 
208  virtual void OutputOLENode( const SwOLENode& ) override;
209 
210  virtual void OutputLinkedOLE( const OUString& ) override;
211 
212  virtual void AppendSection( const SwPageDesc *pPageDesc, const SwSectionFormat* pFormat, sal_uLong nLnNum ) override;
213 
214  virtual void SectionBreaksAndFrames( const SwTextNode& /*rNode*/ ) override {}
215 
217  virtual void PrepareNewPageDesc( const SfxItemSet* pSet,
218  const SwNode& rNd,
219  const SwFormatPageDesc* pNewPgDescFormat,
220  const SwPageDesc* pNewPgDesc ) override;
221 
222 private:
224  void InitStyles();
225 
227  void WriteFootnotesEndnotes();
228 
230  void WritePostitFields();
231 
233  virtual void WriteNumbering() override;
234 
236  void WriteHeaderFooter( const SwFormat* pFormat, bool bHeader, const char* pType );
237 
239  void WriteFonts();
240 
242  void WriteProperties();
243 
245  void WriteSettings();
246 
248  void WriteDocVars(const sax_fastparser::FSHelperPtr& pFS);
249 
251  void WriteTheme();
252 
253  void WriteGlossary();
254 
256  void WriteCustomXml();
257 
259  void WriteEmbeddings();
260 
262  void WriteVBA();
263 
265  bool isMirroredMargin();
266 
267 public:
270 
273  void WriteMainText();
274 
276  DocxExport( DocxExportFilter *pFilter, SwDoc *pDocument,
277  std::shared_ptr<SwUnoCursor> & pCurrentPam, SwPaM* pOriginalPam,
278  bool bDocm, bool bTemplate);
279 
281  virtual ~DocxExport() override;
282 
285 
288 
290  void setDefaultTabStop( int stop ) { m_aSettings.defaultTabStop = stop; }
291 
292  const ::sax_fastparser::FSHelperPtr& GetFS() const { return mpFS; }
293 
294  void SetFS(::sax_fastparser::FSHelperPtr const & mpFS);
295 
296  void SetFloatingTableFrame(const ww8::Frame* pF) { m_pFloatingTableFrame = pF; }
297 
298 private:
299  DocxExport( const DocxExport& ) = delete;
300 
301  DocxExport& operator=( const DocxExport& ) = delete;
302 };
303 
304 #endif // INCLUDED_SW_SOURCE_FILTER_WW8_DOCXEXPORT_HXX
305 
306 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
const DocxExportFilter & GetFilter() const
Definition: docxexport.hxx:121
void WriteFootnotesEndnotes()
Write footnotes.xml and endnotes.xml.
Definition: docxexport.cxx:659
std::unique_ptr< MSWordSections > m_pSections
Sections/headers/footers.
Definition: docxexport.hxx:84
void InitStyles()
Setup pStyles and write styles.xml.
Definition: docxexport.cxx:636
virtual void DoFormText(const SwInputField *pField) override
Definition: docxexport.cxx:367
virtual void OutputLinkedOLE(const OUString &) override
Definition: docxexport.cxx:600
std::unique_ptr< oox::vml::VMLExport > m_pVMLExport
Exporter of the VML shapes.
Definition: docxexport.hxx:102
bool hasData() const
sal_Int32 m_nHeadersFootersInSection
Footer and Header counter in Section properties.
Definition: docxexport.hxx:99
Class to collect and output the sections/headers/footers.
Definition: wrtww8.hxx:190
DocxAttributeOutput & DocxAttrOutput() const
Access to the derived attribute output class.
Definition: docxexport.cxx:102
bool m_bDocm
If the result will be a .docm file or not.
Definition: docxexport.hxx:108
The class that has handlers for various resource types when exporting as DOCX.
Handles DOCX export of drawings.
Pagedescriptor Client of SwPageDesc that is "described" by the attribute.
Definition: fmtpdsc.hxx:35
sal_Int32 m_nOLEObjects
OLE objects counter.
Definition: docxexport.hxx:93
virtual bool DisallowInheritingOutlineNumbering(const SwFormat &rFormat) override
Return value indicates if an inherited outline numbering is suppressed.
Definition: docxexport.cxx:225
virtual void AppendBookmarks(const SwTextNode &rNode, sal_Int32 nCurrentPos, sal_Int32 nLen) override
Definition: docxexport.cxx:146
css::uno::Reference< css::xml::sax::XFastAttributeList > XFastAttributeListRef
std::pair< OString, OString > WriteActiveXObject(const uno::Reference< css::drawing::XShape > &rxShape, const uno::Reference< awt::XControlModel > &rxControlModel)
Definition: docxexport.cxx:438
virtual bool PreferPageBreakBefore() const override
If saving page break is preferred as a paragraph attribute (yes) or as a special character (no)...
Definition: docxexport.hxx:140
virtual ExportFormat GetExportFormat() const override
Definition: docxexport.hxx:195
sal_uIntPtr sal_uLong
virtual void WriteHyperlinkData(const ::sw::mark::IFieldmark &rFieldmark) override
Definition: docxexport.cxx:320
Base class of all fields.
Definition: fldbas.hxx:293
Definition: doc.hxx:184
exports com.sun.star. awt
void WriteSettings()
Write word/settings.xml.
Definition: docxexport.cxx:964
DocxExport & operator=(const DocxExport &)=delete
void WriteGlossary()
void WriteFonts()
Write word/fontTable.xml.
Definition: docxexport.cxx:850
virtual void WriteHeadersFooters(sal_uInt8 nHeadFootFlags, const SwFrameFormat &rFormat, const SwFrameFormat &rLeftFormat, const SwFrameFormat &rFirstPageFormat, sal_uInt8 nBreakCode) override
Output the actual headers and footers.
Definition: docxexport.cxx:247
virtual void OutputGrfNode(const SwGrfNode &) override
Output SwGrfNode.
Definition: docxexport.cxx:590
void WriteCustomXml()
Write customXml/item[n].xml and customXml/itemProps[n].xml.
bool isMirroredMargin()
return true if Page Layout is set as Mirrored
sax_fastparser::XFastAttributeListRef MainXmlNamespaces()
All xml namespaces to be used at the top of any text .xml file (main doc, headers, footers,...)
The class that does all the actual DOCX export-related work.
Definition: docxexport.hxx:66
virtual void SectionBreaksAndFrames(const SwTextNode &) override
Definition: docxexport.hxx:214
sal_uInt16 sal_Unicode
FieldFlags
Definition: wrtww8.hxx:138
std::unique_ptr< DocxAttributeOutput > m_pAttrOutput
Attribute output for document.
Definition: docxexport.hxx:81
const ww8::Frame * GetFloatingTableFrame() const
Definition: docxexport.hxx:123
bool const m_bTemplate
Export is done into template (.dotx)
Definition: docxexport.hxx:111
exports com.sun.star. frame
virtual bool ignoreAttributeForStyleDefaults(sal_uInt16 nWhich) const override
Used to filter out attributes that can be e.g. written to .doc but not to .docx.
virtual AttributeOutputBase & AttrOutput() const override
Access to the attribute output class.
Definition: docxexport.cxx:97
OString OutputChart(css::uno::Reference< css::frame::XModel > const &xModel, sal_Int32 nCount,::sax_fastparser::FSHelperPtr const &m_pSerializer)
Returns the relationd id.
Definition: docxexport.cxx:374
sal_Int32 m_nFooters
Footer counter.
Definition: docxexport.hxx:90
void WritePostitFields()
Write comments.xml.
Definition: docxexport.cxx:716
sal_Int32 m_nHeaders
Header counter.
Definition: docxexport.hxx:87
const ww8::Frame * m_pFloatingTableFrame
Pointer to the Frame of a floating table it is nested in.
Definition: docxexport.hxx:116
exports com.sun.star. drawing
OString WriteOLEObject(SwOLEObj &rObject, OUString &io_rProgID)
Definition: docxexport.cxx:390
void WriteOutliner(const OutlinerParaObject &rOutliner, sal_uInt8 nTyp)
virtual void AppendSection(const SwPageDesc *pPageDesc, const SwSectionFormat *pFormat, sal_uLong nLnNum) override
Definition: docxexport.cxx:541
void WriteHeaderFooter(const SwFormat *pFormat, bool bHeader, const char *pType)
Write reference to a header/footer + the actual xml containing the text.
Definition: docxexport.cxx:774
OString AddRelation(const OUString &rType, const OUString &rTarget)
Returns the relationd id.
Definition: docxexport.cxx:217
virtual MSWordSections & Sections() const override
Access to the sections/headers/footres.
Definition: docxexport.cxx:107
virtual void AppendAnnotationMarks(const SwWW8AttrIter &rAttrs, sal_Int32 nCurrentPos, sal_Int32 nLen) override
Definition: docxexport.cxx:187
Base class for various Writer styles.
Definition: format.hxx:43
virtual void WriteCR(ww8::WW8TableNodeInfoInner::Pointer_t) override
Definition: docxexport.hxx:156
void WriteEmbeddings()
Write word/embeddings/Worksheet[n].xlsx.
PaM is Point and Mark: a selection of the document model.
Definition: pam.hxx:136
const ::sax_fastparser::FSHelperPtr & GetFS() const
Definition: docxexport.hxx:292
void WriteProperties()
Write docProps/core.xml.
Definition: docxexport.cxx:876
Style of a layout element.
Definition: frmfmt.hxx:57
virtual bool CollapseScriptsforWordOk(sal_uInt16 nScript, sal_uInt16 nWhich) override
Guess the script (asian/western).
Definition: docxexport.cxx:112
virtual void WriteChar(sal_Unicode) override
Definition: docxexport.hxx:157
void OutputDML(css::uno::Reference< css::drawing::XShape > const &xShape)
Writes the shape using drawingML syntax.
Definition: docxexport.cxx:486
std::unique_ptr< oox::drawingml::DrawingML > m_pDrawingML
Access to the DrawingML writer.
Definition: docxexport.hxx:78
virtual void DoComboBox(const OUString &rName, const OUString &rHelp, const OUString &ToolTip, const OUString &rSelected, const css::uno::Sequence< OUString > &rListItems) override
Definition: docxexport.cxx:327
virtual void OutputOLENode(const SwOLENode &) override
Output SwOLENode.
Definition: docxexport.cxx:595
DocxExport(DocxExportFilter *pFilter, SwDoc *pDocument, std::shared_ptr< SwUnoCursor > &pCurrentPam, SwPaM *pOriginalPam, bool bDocm, bool bTemplate)
Pass the pDocument, pCurrentPam and pOriginalPam to the base class.
void SetFS(::sax_fastparser::FSHelperPtr const &mpFS)
std::shared_ptr< FastSerializerHelper > FSHelperPtr
DocxSettingsData m_aSettings
Definition: docxexport.hxx:113
virtual void OutputEndNode(const SwEndNode &) override
Output SwEndNode.
Definition: docxexport.cxx:547
void setDefaultTabStop(int stop)
Set the document default tab stop.
Definition: docxexport.hxx:290
DocxExportFilter & GetFilter()
Definition: docxexport.hxx:120
std::unique_ptr< DocxSdrExport > m_pSdrExport
Exporter of drawings.
Definition: docxexport.hxx:105
virtual void WriteNumbering() override
Write the numbering table.
Definition: docxexport.cxx:736
SwTextNode is a paragraph in the document model.
Definition: ndtxt.hxx:80
virtual sal_uLong ReplaceCr(sal_uInt8 nChar) override
Definition: docxexport.cxx:605
virtual void PrepareNewPageDesc(const SfxItemSet *pSet, const SwNode &rNd, const SwFormatPageDesc *pNewPgDescFormat, const SwPageDesc *pNewPgDesc) override
Get ready for a new section.
Definition: docxexport.cxx:612
::sax_fastparser::FSHelperPtr m_pDocumentFS
Fast serializer for the document output.
Definition: docxexport.hxx:72
oox::vml::VMLExport & VMLExporter()
Reference to the VMLExport instance for the main document.
Definition: docxexport.hxx:284
virtual bool FieldsQuoted() const override
Determines if the import filter already quoted fields or not.
Definition: docxexport.hxx:134
void WriteVBA()
Writes word/vbaProject.bin.
DocxExportFilter * m_pFilter
Pointer to the filter that owns us.
Definition: docxexport.hxx:69
unsigned char sal_uInt8
Make exporting a Writer Frame easy.
DocxSdrExport & SdrExporter()
Reference to the DocxSdrExport instance for the main document.
Definition: docxexport.hxx:287
virtual ErrCode ExportDocument_Impl() override
Format-dependent part of the actual export.
Definition: docxexport.cxx:498
void WriteTheme()
Write word/theme/theme1.xml.
virtual void WriteFormData(const ::sw::mark::IFieldmark &rFieldmark) override
Write the data of the form field.
Definition: docxexport.cxx:315
void WriteDocVars(const sax_fastparser::FSHelperPtr &pFS)
Writes the part of settings.xml.
Definition: docxexport.cxx:893
sal_Int32 m_nActiveXControls
ActiveX controls counter.
Definition: docxexport.hxx:96
The physical access to the DOCX document (for writing).
std::shared_ptr< WW8TableNodeInfoInner > Pointer_t
virtual void OutputField(const SwField *pField, ww::eField eFieldType, const OUString &rFieldCmd, FieldFlags nMode=FieldFlags::All) override
Write the field.
Definition: docxexport.cxx:310
::sax_fastparser::FSHelperPtr mpFS
Fast serializer to output the data.
Definition: docxexport.hxx:75
bool evenAndOddHeaders
returns true if there are any non-default settings (i.e. something to write)
Definition: docxexport.hxx:59
virtual void AppendBookmark(const OUString &rName) override
Definition: docxexport.cxx:176
#define SAL_WARN(area, stream)
Base class for WW8Export and DocxExport.
Definition: wrtww8.hxx:445
virtual ~DocxExport() override
Destructor.
Ends a section of nodes in the document model.
Definition: node.hxx:333
void SetFloatingTableFrame(const ww8::Frame *pF)
Definition: docxexport.hxx:296
Data to be written in the document settings part of the document.
Definition: docxexport.hxx:55
virtual bool AddSectionBreaksForTOX() const override
Determines the Section Breaks are to be added for TOX Section.
Definition: docxexport.hxx:136
virtual void ExportGrfBullet(const SwTextNode &) override
Definition: docxexport.cxx:211
Base class of the Writer document model elements.
Definition: node.hxx:79
void WriteMainText()
FIXME this is temporary, remotely reminding the method of the same name in WW8Export.