LibreOffice Module sw (master)  1
rtfexport.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_RTFEXPORT_HXX
21 #define INCLUDED_SW_SOURCE_FILTER_WW8_RTFEXPORT_HXX
22 
23 #include <memory>
24 #include "wrtww8.hxx"
25 
26 class RtfAttributeOutput;
27 class RtfExportFilter;
28 class RtfSdrExport;
29 using RtfColorTable = std::map<sal_uInt16, Color>;
30 class SwNode;
31 class SwTextNode;
32 class SwGrfNode;
33 class SwOLENode;
34 
37 {
41 
43  std::unique_ptr<RtfAttributeOutput> m_pAttrOutput;
44 
47 
48  std::unique_ptr<RtfSdrExport> m_pSdrExport;
49  bool const m_bOutOutlineOnly;
50 
51 public:
53  AttributeOutputBase& AttrOutput() const override;
54 
56  MSWordSections& Sections() const override;
57 
59  RtfSdrExport& SdrExporter() const;
60 
61  bool SupportsOneColumnBreak() const override { return false; }
62 
63  bool FieldsQuoted() const override { return true; }
64 
65  bool AddSectionBreaksForTOX() const override { return false; }
66 
67  bool PreferPageBreakBefore() const override { return true; }
68 
70  bool CollapseScriptsforWordOk(sal_uInt16 nScript, sal_uInt16 nWhich) override;
71 
72  void AppendBookmarks(const SwTextNode& rNode, sal_Int32 nCurrentPos, sal_Int32 nLen) override;
73 
74  void AppendBookmark(const OUString& rName) override;
75 
76  void AppendAnnotationMarks(const SwWW8AttrIter& rAttrs, sal_Int32 nCurrentPos,
77  sal_Int32 nLen) override;
78 
79  //For i120928,add an interface to export graphic of bullet
80  void ExportGrfBullet(const SwTextNode& rNd) override;
81 
82  void
84  Pointer_t /*pTableTextNodeInfoInner = ww8::WW8TableNodeInfoInner::Pointer_t()*/)
85  override
86  {
87  /* no-op for rtf, most probably should not even be in MSWordExportBase */
88  }
89  void WriteChar(sal_Unicode c) override;
90 
92  void WriteNumbering() override;
93 
95  void WriteRevTab();
96 
98  void WriteHeadersFooters(sal_uInt8 nHeadFootFlags, const SwFrameFormat& rFormat,
99  const SwFrameFormat& rLeftFormat,
100  const SwFrameFormat& rFirstPageFormat, sal_uInt8 nBreakCode) override;
101 
103  void OutputField(const SwField* pField, ww::eField eFieldType, const OUString& rFieldCmd,
104  FieldFlags nMode = FieldFlags::All) override;
105 
107  void WriteFormData(const ::sw::mark::IFieldmark& rFieldmark) override;
108  void WriteHyperlinkData(const ::sw::mark::IFieldmark& rFieldmark) override;
109 
110  void DoComboBox(const OUString& rName, const OUString& rHelp, const OUString& ToolTip,
111  const OUString& rSelected,
112  const css::uno::Sequence<OUString>& rListItems) override;
113 
114  void DoFormText(const SwInputField* pField) override;
115 
116  sal_uLong ReplaceCr(sal_uInt8 nChar) override;
117 
118  ExportFormat GetExportFormat() const override { return ExportFormat::RTF; }
119 
120 protected:
122  ErrCode ExportDocument_Impl() override;
123 
124  void SectionBreaksAndFrames(const SwTextNode& /*rNode*/) override {}
125 
127  void PrepareNewPageDesc(const SfxItemSet* pSet, const SwNode& rNd,
128  const SwFormatPageDesc* pNewPgDescFormat,
129  const SwPageDesc* pNewPgDesc) override;
130 
132  bool DisallowInheritingOutlineNumbering(const SwFormat& rFormat) override;
133 
135  void OutputTextNode(SwTextNode& rNode) override;
136 
138  void OutputEndNode(const SwEndNode& rEndNode) override;
139 
141  void OutputGrfNode(const SwGrfNode& rGrfNode) override;
142 
144  void OutputOLENode(const SwOLENode& rOLENode) override;
145 
146  void OutputLinkedOLE(const OUString& rLink) override;
147 
148  void AppendSection(const SwPageDesc* pPageDesc, const SwSectionFormat* pFormat,
149  sal_uLong nLnNum) override;
150 
151 public:
153  RtfExport(RtfExportFilter* pFilter, SwDoc* pDocument, std::shared_ptr<SwUnoCursor>& pCurrentPam,
154  SwPaM* pOriginalPam, Writer* pWriter, bool bOutOutlineOnly = false);
155 
156  RtfExport(const RtfExport&) = delete;
157 
158  RtfExport& operator=(const RtfExport&) = delete;
159 
161  ~RtfExport() override;
162 
163 private:
164  rtl_TextEncoding m_eDefaultEncoding;
165  rtl_TextEncoding m_eCurrentEncoding;
170 
171 public:
172  rtl_TextEncoding GetDefaultEncoding() const { return m_eDefaultEncoding; }
173  void SetCurrentEncoding(rtl_TextEncoding eCurrentEncoding)
174  {
175  m_eCurrentEncoding = eCurrentEncoding;
176  }
177  rtl_TextEncoding GetCurrentEncoding() const { return m_eCurrentEncoding; }
178  void SetRTFFlySyntax(bool bRTFFlySyntax) { m_bRTFFlySyntax = bRTFFlySyntax; }
179  bool GetRTFFlySyntax() const { return m_bRTFFlySyntax; }
181  SvStream& Strm();
183  void setStream();
185  OString getStream();
187  void resetStream();
188  SvStream& OutULong(sal_uLong nVal);
189  SvStream& OutLong(long nVal);
190  void OutUnicode(const sal_Char* pToken, const OUString& rContent, bool bUpr = false);
191  void OutDateTime(const sal_Char* pStr, const css::util::DateTime& rDT);
192  void OutPageDescription(const SwPageDesc& rPgDsc, bool bCheckForFirstPage);
193 
194  sal_uInt16 GetColor(const Color& rColor) const;
195  void InsColor(const Color& rCol);
196  void InsColorLine(const SvxBoxItem& rBox);
197  void OutColorTable();
198  sal_uInt16 GetRedline(const OUString& rAuthor);
199  const OUString* GetRedline(sal_uInt16 nId);
200 
201  void InsStyle(sal_uInt16 nId, const OString& rStyle);
202  OString* GetStyle(sal_uInt16 nId);
203 
205 
206 private:
207  void WriteFonts();
208  void WriteStyles();
209  void WriteFootnoteSettings();
210  void WriteMainText();
211  void WriteInfo();
213  void WriteUserPropType(int nType);
215  void WriteUserPropValue(const OUString& rValue);
217  void WriteUserProps();
219  void WritePageDescTable();
221  void BuildNumbering();
222  void WriteHeaderFooter(const SfxPoolItem& rItem, bool bHeader);
223  void WriteHeaderFooter(const SwFrameFormat& rFormat, bool bHeader, const sal_Char* pStr,
224  bool bTitlepg = false);
225 
227  std::map<sal_uInt16, OString> m_aStyTable;
228  std::map<OUString, sal_uInt16> m_aRedlineTable;
230  std::unique_ptr<SvMemoryStream> m_pStream;
232  const SfxItemSet* m_pFirstPageItemSet = nullptr;
233 };
234 
235 #endif // INCLUDED_SW_SOURCE_FILTER_WW8_RTFEXPORT_HXX
236 
237 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
RtfExport & operator=(const RtfExport &)=delete
std::unique_ptr< SvMemoryStream > m_pStream
If set, then Strm() returns this tream, instead of m_pWriter's stream.
Definition: rtfexport.hxx:230
SvStream & OutULong(sal_uLong nVal)
Definition: rtfexport.cxx:1091
std::unique_ptr< RtfAttributeOutput > m_pAttrOutput
Attribute output for document.
Definition: rtfexport.hxx:43
Class to collect and output the sections/headers/footers.
Definition: wrtww8.hxx:198
void WriteMainText()
Definition: rtfexport.cxx:421
OString * GetStyle(sal_uInt16 nId)
Definition: rtfexport.cxx:1323
void WriteHeaderFooter(const SfxPoolItem &rItem, bool bHeader)
Definition: rtfexport.cxx:1401
void OutputEndNode(const SwEndNode &rEndNode) override
Output SwEndNode.
Definition: rtfexport.cxx:1005
rtl_TextEncoding m_eCurrentEncoding
Definition: rtfexport.hxx:165
void SectionBreaksAndFrames(const SwTextNode &) override
Definition: rtfexport.hxx:124
Pagedescriptor Client of SwPageDesc that is "described" by the attribute.
Definition: fmtpdsc.hxx:35
MSWordSections * m_pSections
Sections/headers/footers.
Definition: rtfexport.hxx:46
void DoComboBox(const OUString &rName, const OUString &rHelp, const OUString &ToolTip, const OUString &rSelected, const css::uno::Sequence< OUString > &rListItems) override
Definition: rtfexport.cxx:331
rtl_TextEncoding GetCurrentEncoding() const
Definition: rtfexport.hxx:177
RtfColorTable m_aColTable
Definition: rtfexport.hxx:226
void OutputGrfNode(const SwGrfNode &rGrfNode) override
Output SwGrfNode.
Definition: rtfexport.cxx:1012
AttributeOutputBase & AttrOutput() const override
Access to the attribute output class.
Definition: rtfexport.cxx:78
ExportFormat GetExportFormat() const override
Definition: rtfexport.hxx:118
sal_uIntPtr sal_uLong
RtfExport(RtfExportFilter *pFilter, SwDoc *pDocument, std::shared_ptr< SwUnoCursor > &pCurrentPam, SwPaM *pOriginalPam, Writer *pWriter, bool bOutOutlineOnly=false)
Pass the pDocument, pCurrentPam and pOriginalPam to the base class.
Definition: rtfexport.cxx:1039
Base class of all fields.
Definition: fldbas.hxx:279
void WriteNumbering() override
Write the numbering table.
Definition: rtfexport.cxx:225
SvStream & Strm()
Definition: rtfexport.cxx:1069
Definition: doc.hxx:185
void DoFormText(const SwInputField *pField) override
Definition: rtfexport.cxx:338
bool GetRTFFlySyntax() const
Definition: rtfexport.hxx:179
std::map< sal_uInt16, Color > RtfColorTable
Definition: rtfexport.hxx:29
rtl_TextEncoding GetDefaultEncoding() const
Definition: rtfexport.hxx:172
rtl_TextEncoding m_eDefaultEncoding
Definition: rtfexport.hxx:164
sal_uInt16 GetRedline(const OUString &rAuthor)
Definition: rtfexport.cxx:1331
Writer * m_pWriter
Definition: rtfexport.hxx:40
void OutputField(const SwField *pField, ww::eField eFieldType, const OUString &rFieldCmd, FieldFlags nMode=FieldFlags::All) override
Write the field.
Definition: rtfexport.cxx:315
bool PreferPageBreakBefore() const override
If saving page break is preferred as a paragraph attribute (yes) or as a special character (no)...
Definition: rtfexport.hxx:67
bool FieldsQuoted() const override
Determines if the import filter already quoted fields or not.
Definition: rtfexport.hxx:63
sal_uInt16 sal_Unicode
void AppendBookmarks(const SwTextNode &rNode, sal_Int32 nCurrentPos, sal_Int32 nLen) override
Definition: rtfexport.cxx:118
FieldFlags
Definition: wrtww8.hxx:146
void InsStyle(sal_uInt16 nId, const OString &rStyle)
Definition: rtfexport.cxx:1318
The class that does all the actual RTF export-related work.
Definition: rtfexport.hxx:36
void InsColorLine(const SvxBoxItem &rBox)
Definition: rtfexport.cxx:1161
bool AddSectionBreaksForTOX() const override
Determines the Section Breaks are to be added for TOX Section.
Definition: rtfexport.hxx:65
void WriteCR(ww8::WW8TableNodeInfoInner::Pointer_t) override
Definition: rtfexport.hxx:83
void WriteUserPropType(int nType)
Writes a single user property type.
Definition: rtfexport.cxx:525
char sal_Char
The class that has handlers for various resource types when exporting as RTF.
void OutputTextNode(SwTextNode &rNode) override
Output SwTextNode is depending on outline export mode.
Definition: rtfexport.cxx:1024
const SfxItemSet * m_pFirstPageItemSet
Item set of the first page during export of a follow page format.
Definition: rtfexport.hxx:232
void OutputLinkedOLE(const OUString &rLink) override
Definition: rtfexport.cxx:1022
eField
Definition: fields.hxx:26
bool DisallowInheritingOutlineNumbering(const SwFormat &rFormat) override
Return value indicates if an inherited outline numbering is suppressed.
Definition: rtfexport.cxx:983
bool CollapseScriptsforWordOk(sal_uInt16 nScript, sal_uInt16 nWhich) override
Guess the script (asian/western).
Definition: rtfexport.cxx:84
RtfExportFilter * m_pFilter
Pointer to the filter that owns us.
Definition: rtfexport.hxx:39
Base class for various Writer styles.
Definition: format.hxx:43
void InsColor(const Color &rCol)
Definition: rtfexport.cxx:1136
PaM is Point and Mark: a selection of the document model.
Definition: pam.hxx:136
void SetCurrentEncoding(rtl_TextEncoding eCurrentEncoding)
Definition: rtfexport.hxx:173
std::map< sal_uInt16, OString > m_aStyTable
Definition: rtfexport.hxx:227
void WriteFormData(const ::sw::mark::IFieldmark &rFieldmark) override
Write the data of the form field.
Definition: rtfexport.cxx:321
bool m_bRTFFlySyntax
This is used by OutputFlyFrame_Impl() to control the written syntax.
Definition: rtfexport.hxx:167
Style of a layout element.
Definition: frmfmt.hxx:57
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: rtfexport.cxx:290
void WriteUserProps()
Writes the userprops group: user defined document properties.
Definition: rtfexport.cxx:538
void setStream()
From now on, let Strm() return a memory stream, not a real one.
Definition: rtfexport.cxx:1077
void AppendBookmark(const OUString &rName) override
Definition: rtfexport.cxx:142
void WriteRevTab()
Write the revision table.
Definition: rtfexport.cxx:257
void WriteStyles()
Definition: rtfexport.cxx:399
void OutUnicode(const sal_Char *pToken, const OUString &rContent, bool bUpr=false)
Definition: rtfexport.cxx:1095
void OutPageDescription(const SwPageDesc &rPgDsc, bool bCheckForFirstPage)
Definition: rtfexport.cxx:1350
void WriteChar(sal_Unicode c) override
Definition: rtfexport.cxx:184
MSWordSections & Sections() const override
Access to the sections/headers/footres.
Definition: rtfexport.cxx:80
Handles export of drawings using RTF markup.
SvStream & OutLong(long nVal)
Definition: rtfexport.cxx:1093
void AppendSection(const SwPageDesc *pPageDesc, const SwSectionFormat *pFormat, sal_uLong nLnNum) override
Definition: rtfexport.cxx:1032
void WriteFonts()
Definition: rtfexport.cxx:389
void WriteFootnoteSettings()
Definition: rtfexport.cxx:406
void OutDateTime(const sal_Char *pStr, const css::util::DateTime &rDT)
Definition: rtfexport.cxx:1112
SwTextNode is a paragraph in the document model.
Definition: ndtxt.hxx:79
OString getStream()
Get the contents of the memory stream as a string.
Definition: rtfexport.cxx:1079
void SetRTFFlySyntax(bool bRTFFlySyntax)
Definition: rtfexport.hxx:178
void resetStream()
Return back to the real stream.
Definition: rtfexport.cxx:1089
std::unique_ptr< RtfSdrExport > m_pSdrExport
Definition: rtfexport.hxx:48
unsigned char sal_uInt8
void BuildNumbering()
This is necessary to have the numbering table ready before the main text is being processed...
Definition: rtfexport.cxx:206
void OutputOLENode(const SwOLENode &rOLENode) override
Output SwOLENode.
Definition: rtfexport.cxx:1017
void OutColorTable()
Definition: rtfexport.cxx:1184
~RtfExport() override
Destructor.
ErrCode ExportDocument_Impl() override
Format-dependent part of the actual export.
Definition: rtfexport.cxx:683
void ExportGrfBullet(const SwTextNode &rNd) override
Definition: rtfexport.cxx:179
sal_uLong GetCurrentNodeIndex() const
Definition: rtfexport.hxx:180
bool SupportsOneColumnBreak() const override
Determines if column break with one column should be exported or not.
Definition: rtfexport.hxx:61
sal_uLong ReplaceCr(sal_uInt8 nChar) override
Definition: rtfexport.cxx:381
void AppendAnnotationMarks(const SwWW8AttrIter &rAttrs, sal_Int32 nCurrentPos, sal_Int32 nLen) override
Definition: rtfexport.cxx:153
void WriteHyperlinkData(const ::sw::mark::IFieldmark &rFieldmark) override
Definition: rtfexport.cxx:326
RtfSdrExport & SdrExporter() const
Access to the Rtf Sdr exporter.
Definition: rtfexport.cxx:82
Base class for WW8Export and DocxExport.
Definition: wrtww8.hxx:453
sal_uInt16 GetColor(const Color &rColor) const
Definition: rtfexport.cxx:1122
Ends a section of nodes in the document model.
Definition: node.hxx:333
bool const m_bOutOutlineOnly
Definition: rtfexport.hxx:49
void PrepareNewPageDesc(const SfxItemSet *pSet, const SwNode &rNd, const SwFormatPageDesc *pNewPgDescFormat, const SwPageDesc *pNewPgDesc) override
Get ready for a new section.
Definition: rtfexport.cxx:963
void WritePageDescTable()
Writes the writer-specific group.
Definition: rtfexport.cxx:637
std::map< OUString, sal_uInt16 > m_aRedlineTable
Definition: rtfexport.hxx:228
sal_uLong m_nCurrentNodeIndex
Index of the current SwTextNode, if any.
Definition: rtfexport.hxx:169
The physical access to the RTF document (for writing).
const SfxItemSet * GetFirstPageItemSet()
Definition: rtfexport.hxx:204
void WriteInfo()
Definition: rtfexport.cxx:467
void WriteUserPropValue(const OUString &rValue)
Writes a single user property value.
Definition: rtfexport.cxx:531
Base class of the Writer document model elements.
Definition: node.hxx:79