summaryrefslogtreecommitdiffstats
path: root/sw/source/filter/ww8/rtfattributeoutput.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/filter/ww8/rtfattributeoutput.hxx')
-rw-r--r--sw/source/filter/ww8/rtfattributeoutput.hxx685
1 files changed, 685 insertions, 0 deletions
diff --git a/sw/source/filter/ww8/rtfattributeoutput.hxx b/sw/source/filter/ww8/rtfattributeoutput.hxx
new file mode 100644
index 000000000..17de105ed
--- /dev/null
+++ b/sw/source/filter/ww8/rtfattributeoutput.hxx
@@ -0,0 +1,685 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SW_SOURCE_FILTER_WW8_RTFATTRIBUTEOUTPUT_HXX
+#define INCLUDED_SW_SOURCE_FILTER_WW8_RTFATTRIBUTEOUTPUT_HXX
+
+#include <memory>
+#include <com/sun/star/drawing/FillStyle.hpp>
+
+#include "attributeoutputbase.hxx"
+#include "rtfstringbuffer.hxx"
+
+#include <wrtswtbl.hxx>
+
+#include <rtl/strbuf.hxx>
+#include <editeng/boxitem.hxx>
+
+#include <optional>
+
+class SwGrfNode;
+class SwOLENode;
+class SwFlyFrameFormat;
+class RtfExport;
+
+/// The class that has handlers for various resource types when exporting as RTF
+class RtfAttributeOutput : public AttributeOutputBase
+{
+ friend class RtfStringBufferValue;
+ friend class SaveRunState;
+
+public:
+ /// Export the state of RTL/CJK.
+ void RTLAndCJKState(bool bIsRTL, sal_uInt16 nScript) override;
+
+ /// Start of the paragraph.
+ sal_Int32 StartParagraph(ww8::WW8TableNodeInfo::Pointer_t pTextNodeInfo,
+ bool bGenerateParaId) override;
+
+ /// End of the paragraph.
+ void EndParagraph(ww8::WW8TableNodeInfoInner::Pointer_t pTextNodeInfoInner) override;
+
+ /// Empty paragraph.
+ void EmptyParagraph() override;
+
+ /// Called in order to output section breaks.
+ void SectionBreaks(const SwNode& rNode) override;
+
+ /// Called before we start outputting the attributes.
+ void StartParagraphProperties() override;
+
+ /// Called after we end outputting the attributes.
+ void EndParagraphProperties(const SfxItemSet& rParagraphMarkerProperties,
+ const SwRedlineData* pRedlineData,
+ const SwRedlineData* pRedlineParagraphMarkerDeleted,
+ const SwRedlineData* pRedlineParagraphMarkerInserted) override;
+
+ /// Start of the text run.
+ void StartRun(const SwRedlineData* pRedlineData, sal_Int32 nPos,
+ bool bSingleEmptyRun = false) override;
+
+ /// End of the text run.
+ void EndRun(const SwTextNode* pNode, sal_Int32 nPos, bool bLastRun = false) override;
+
+ /// Called before we start outputting the attributes.
+ void StartRunProperties() override;
+
+ /// Called after we end outputting the attributes.
+ void EndRunProperties(const SwRedlineData* pRedlineData) override;
+
+ /// Output text (inside a run).
+ void RunText(const OUString& rText, rtl_TextEncoding eCharSet = RTL_TEXTENCODING_UTF8) override;
+
+ // Access to (anyway) private buffers, used by the sdr exporter
+ OStringBuffer& RunText();
+ OString MoveCharacterProperties(bool aAutoWriteRtlLtr = false);
+
+ /// Output text (without markup).
+ void RawText(const OUString& rText, rtl_TextEncoding eCharSet) override;
+
+ /// Output ruby start.
+ void StartRuby(const SwTextNode& rNode, sal_Int32 nPos, const SwFormatRuby& rRuby) override;
+
+ /// Output ruby end.
+ void EndRuby(const SwTextNode& rNode, sal_Int32 nPos) override;
+
+ /// Output URL start.
+ bool StartURL(const OUString& rUrl, const OUString& rTarget) override;
+
+ /// Output URL end.
+ bool EndURL(bool isAtEndOfParagraph) override;
+
+ void FieldVanish(const OUString& rText, ww::eField eType,
+ OUString const* pBookmarkName) override;
+
+ /// Output redlining.
+ ///
+ /// The common attribute that can be among the run properties.
+ void Redline(const SwRedlineData* pRedline) override;
+
+ void FormatDrop(const SwTextNode& rNode, const SwFormatDrop& rSwFormatDrop, sal_uInt16 nStyle,
+ ww8::WW8TableNodeInfo::Pointer_t pTextNodeInfo,
+ ww8::WW8TableNodeInfoInner::Pointer_t pTextNodeInfoInner) override;
+
+ /// Output style.
+ void ParagraphStyle(sal_uInt16 nStyle) override;
+
+ void TableInfoCell(ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner) override;
+ void TableInfoRow(ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner) override;
+ void TableDefinition(ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner) override;
+ void
+ TableDefaultBorders(ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner) override;
+ void TableBackgrounds(ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner) override;
+ void TableRowRedline(ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner) override;
+ void TableCellRedline(ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner) override;
+ void TableHeight(ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner) override;
+ void TableCanSplit(ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner) override;
+ void TableBidi(ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner) override;
+ void TableVerticalCell(ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner) override;
+ void TableNodeInfoInner(ww8::WW8TableNodeInfoInner::Pointer_t pNodeInfoInner) override;
+ void TableOrientation(ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner) override;
+ void TableSpacing(ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner) override;
+ void TableRowEnd(sal_uInt32 nDepth) override;
+
+ /// Start of the styles table.
+ void StartStyles() override;
+
+ /// End of the styles table.
+ void EndStyles(sal_uInt16 nNumberOfStyles) override;
+
+ /// Write default style.
+ void DefaultStyle() override;
+
+ /// Start of a style in the styles table.
+ void StartStyle(const OUString& rName, StyleType eType, sal_uInt16 nBase, sal_uInt16 nNext,
+ sal_uInt16 nLink, sal_uInt16 nWwId, sal_uInt16 nId, bool bAutoUpdate) override;
+
+ /// End of a style in the styles table.
+ void EndStyle() override;
+
+ /// Start of (paragraph or run) properties of a style.
+ void StartStyleProperties(bool bParProp, sal_uInt16 nStyle) override;
+
+ /// End of (paragraph or run) properties of a style.
+ void EndStyleProperties(bool bParProp) override;
+
+ /// Numbering rule and Id.
+ void OutlineNumbering(sal_uInt8 nLvl) override;
+
+ /// Page break
+ /// As a paragraph property - the paragraph should be on the next page.
+ void PageBreakBefore(bool bBreak) override;
+
+ /// Write a section break
+ /// msword::ColumnBreak or msword::PageBreak
+ void SectionBreak(sal_uInt8 nC, bool bBreakAfter, const WW8_SepInfo* pSectionInfo = nullptr,
+ bool bExtraPageBreak = false) override;
+
+ /// Start of the section properties.
+ void StartSection() override;
+
+ /// End of the section properties.
+ void EndSection() override;
+
+ /// Protection of forms.
+ void SectionFormProtection(bool bProtected) override;
+
+ /// Numbering of the lines in the document.
+ void SectionLineNumbering(sal_uLong nRestartNo, const SwLineNumberInfo& rLnNumInfo) override;
+
+ /// Has different headers/footers for the title page.
+ void SectionTitlePage() override;
+
+ /// Description of the page borders.
+ void SectionPageBorders(const SwFrameFormat* pFormat,
+ const SwFrameFormat* pFirstPageFormat) override;
+
+ /// Columns populated from right/numbers on the right side?
+ void SectionBiDi(bool bBiDi) override;
+
+ /// The style of the page numbers.
+ ///
+ void SectionPageNumbering(sal_uInt16 nNumType,
+ const ::std::optional<sal_uInt16>& oPageRestartNumber) override;
+
+ /// The type of breaking.
+ void SectionType(sal_uInt8 nBreakCode) override;
+
+ void SectFootnoteEndnotePr() override;
+
+ void WriteFootnoteEndnotePr(bool bFootnote, const SwEndNoteInfo& rInfo);
+
+ /// Definition of a numbering instance.
+ void NumberingDefinition(sal_uInt16 nId, const SwNumRule& rRule) override;
+
+ /// Start of the abstract numbering definition instance.
+ void StartAbstractNumbering(sal_uInt16 nId) override;
+
+ /// End of the abstract numbering definition instance.
+ void EndAbstractNumbering() override;
+
+ /// All the numbering level information.
+ void
+ NumberingLevel(sal_uInt8 nLevel, sal_uInt16 nStart, sal_uInt16 nNumberingType,
+ SvxAdjust eAdjust, const sal_uInt8* pNumLvlPos, sal_uInt8 nFollow,
+ const wwFont* pFont, const SfxItemSet* pOutSet, sal_Int16 nIndentAt,
+ sal_Int16 nFirstLineIndex, sal_Int16 nListTabPos,
+ const OUString& rNumberingString,
+ const SvxBrushItem* pBrush) override; //For i120928,to export graphic of bullet
+
+ void WriteField_Impl(const SwField* pField, ww::eField eType, const OUString& rFieldCmd,
+ FieldFlags nMode);
+ void WriteBookmarks_Impl(std::vector<OUString>& rStarts, std::vector<OUString>& rEnds);
+ void WriteAnnotationMarks_Impl(std::vector<OUString>& rStarts, std::vector<OUString>& rEnds);
+ void WriteHeaderFooter_Impl(const SwFrameFormat& rFormat, bool bHeader, const char* pStr,
+ bool bTitlepg);
+ void WriteBookmarkInActParagraph(const OUString& /*rName*/, sal_Int32 /*nFirstRunPos*/,
+ sal_Int32 /*nLastRunPos*/) override{};
+
+protected:
+ /// Output frames - the implementation.
+ void OutputFlyFrame_Impl(const ww8::Frame& rFrame, const Point& rNdTopLeft) override;
+
+ /// Sfx item Sfx item RES_CHRATR_CASEMAP
+ void CharCaseMap(const SvxCaseMapItem& rCaseMap) override;
+
+ /// Sfx item Sfx item RES_CHRATR_COLOR
+ void CharColor(const SvxColorItem& rColor) override;
+
+ /// Sfx item Sfx item RES_CHRATR_CONTOUR
+ void CharContour(const SvxContourItem& rContour) override;
+
+ /// Sfx item RES_CHRATR_CROSSEDOUT
+ void CharCrossedOut(const SvxCrossedOutItem& rCrossedOut) override;
+
+ /// Sfx item RES_CHRATR_ESCAPEMENT
+ void CharEscapement(const SvxEscapementItem& rEscapement) override;
+
+ /// Sfx item RES_CHRATR_FONT
+ void CharFont(const SvxFontItem& rFont) override;
+
+ /// Sfx item RES_CHRATR_FONTSIZE
+ void CharFontSize(const SvxFontHeightItem& rFontSize) override;
+
+ /// Sfx item RES_CHRATR_KERNING
+ void CharKerning(const SvxKerningItem& rKerning) override;
+
+ /// Sfx item RES_CHRATR_LANGUAGE
+ void CharLanguage(const SvxLanguageItem& rLanguage) override;
+
+ /// Sfx item RES_CHRATR_POSTURE
+ void CharPosture(const SvxPostureItem& rPosture) override;
+
+ /// Sfx item RES_CHRATR_SHADOWED
+ void CharShadow(const SvxShadowedItem& rShadow) override;
+
+ /// Sfx item RES_CHRATR_UNDERLINE
+ void CharUnderline(const SvxUnderlineItem& rUnderline) override;
+
+ /// Sfx item RES_CHRATR_WEIGHT
+ void CharWeight(const SvxWeightItem& rWeight) override;
+
+ /// Sfx item RES_CHRATR_AUTOKERN
+ void CharAutoKern(const SvxAutoKernItem& rAutoKern) override;
+
+ /// Sfx item RES_CHRATR_BLINK
+ void CharAnimatedText(const SvxBlinkItem& rBlink) override;
+
+ /// Sfx item RES_CHRATR_BACKGROUND
+ void CharBackground(const SvxBrushItem& rBrush) override;
+
+ /// Sfx item RES_CHRATR_CJK_FONT
+ void CharFontCJK(const SvxFontItem& rFont) override;
+
+ /// Sfx item RES_CHRATR_CJK_FONTSIZE
+ void CharFontSizeCJK(const SvxFontHeightItem& rFontSize) override;
+
+ /// Sfx item RES_CHRATR_CJK_LANGUAGE
+ void CharLanguageCJK(const SvxLanguageItem& rLanguageItem) override;
+
+ /// Sfx item RES_CHRATR_CJK_POSTURE
+ void CharPostureCJK(const SvxPostureItem& rPosture) override;
+
+ /// Sfx item RES_CHRATR_CJK_WEIGHT
+ void CharWeightCJK(const SvxWeightItem& rWeight) override;
+
+ /// Sfx item RES_CHRATR_CTL_FONT
+ void CharFontCTL(const SvxFontItem& rFont) override;
+
+ /// Sfx item RES_CHRATR_CTL_FONTSIZE
+ void CharFontSizeCTL(const SvxFontHeightItem& rFontSize) override;
+
+ /// Sfx item RES_CHRATR_CTL_LANGUAGE
+ void CharLanguageCTL(const SvxLanguageItem& rLanguageItem) override;
+
+ /// Sfx item RES_CHRATR_CTL_POSTURE
+ void CharPostureCTL(const SvxPostureItem& rPosture) override;
+
+ /// Sfx item RES_CHRATR_CTL_WEIGHT
+ void CharWeightCTL(const SvxWeightItem& rWeight) override;
+
+ /// Sfx item RES_CHRATR_BidiRTL
+ void CharBidiRTL(const SfxPoolItem& rItem) override;
+
+ /// Sfx item RES_CHRATR_IdctHint
+ void CharIdctHint(const SfxPoolItem& rItem) override;
+
+ /// Sfx item RES_CHRATR_ROTATE
+ void CharRotate(const SvxCharRotateItem& rRotate) override;
+
+ /// Sfx item RES_CHRATR_EMPHASIS_MARK
+ void CharEmphasisMark(const SvxEmphasisMarkItem& rEmphasisMark) override;
+
+ /// Sfx item RES_CHRATR_TWO_LINES
+ void CharTwoLines(const SvxTwoLinesItem& rTwoLines) override;
+
+ /// Sfx item RES_CHRATR_SCALEW
+ void CharScaleWidth(const SvxCharScaleWidthItem& rScaleWidth) override;
+
+ /// Sfx item RES_CHRATR_RELIEF
+ void CharRelief(const SvxCharReliefItem& rRelief) override;
+
+ /// Sfx item RES_CHRATR_HIDDEN
+ void CharHidden(const SvxCharHiddenItem& rHidden) override;
+
+ /// Sfx item RES_CHRATR_BOX
+ void CharBorder(const ::editeng::SvxBorderLine* pAllBorder, sal_uInt16 nDist,
+ bool bShadow) override;
+
+ /// Sfx item RES_CHRATR_HIGHLIGHT
+ void CharHighlight(const SvxBrushItem& rBrush) override;
+
+ /// Sfx item RES_TXTATR_INETFMT
+ void TextINetFormat(const SwFormatINetFormat& rURL) override;
+
+ /// Sfx item RES_TXTATR_CHARFMT
+ void TextCharFormat(const SwFormatCharFormat& rCharFormat) override;
+
+ /// Sfx item RES_TXTATR_FTN
+ void TextFootnote_Impl(const SwFormatFootnote& rFootnote) override;
+
+ /// Sfx item RES_PARATR_LINESPACING
+ void ParaLineSpacing_Impl(short nSpace, short nMulti) override;
+
+ /// Sfx item RES_PARATR_ADJUST
+ void ParaAdjust(const SvxAdjustItem& rAdjust) override;
+
+ /// Sfx item RES_PARATR_SPLIT
+ void ParaSplit(const SvxFormatSplitItem& rSplit) override;
+
+ /// Sfx item RES_PARATR_WIDOWS
+ void ParaWidows(const SvxWidowsItem& rWidows) override;
+
+ /// Sfx item RES_PARATR_TABSTOP
+ void ParaTabStop(const SvxTabStopItem& rTabStop) override;
+
+ /// Sfx item RES_PARATR_HYPHENZONE
+ void ParaHyphenZone(const SvxHyphenZoneItem& rHyphenZone) override;
+
+ /// Sfx item RES_PARATR_NUMRULE
+ void ParaNumRule_Impl(const SwTextNode* pTextNd, sal_Int32 nLvl, sal_Int32 nNumId) override;
+
+ /// Sfx item RES_PARATR_SCRIPTSPACE
+ void ParaScriptSpace(const SfxBoolItem& rScriptSpace) override;
+
+ /// Sfx item RES_PARATR_HANGINGPUNCTUATION
+ void ParaHangingPunctuation(const SfxBoolItem& rItem) override;
+
+ /// Sfx item RES_PARATR_FORBIDDEN_RULES
+ void ParaForbiddenRules(const SfxBoolItem& rItem) override;
+
+ /// Sfx item RES_PARATR_VERTALIGN
+ void ParaVerticalAlign(const SvxParaVertAlignItem& rAlign) override;
+
+ /// Sfx item RES_PARATR_SNAPTOGRID
+ void ParaSnapToGrid(const SvxParaGridItem& rItem) override;
+
+ /// Sfx item RES_FRM_SIZE
+ void FormatFrameSize(const SwFormatFrameSize& rSize) override;
+
+ /// Sfx item RES_PAPER_BIN
+ void FormatPaperBin(const SvxPaperBinItem& rItem) override;
+
+ /// Sfx item RES_LR_SPACE
+ void FormatLRSpace(const SvxLRSpaceItem& rLRSpace) override;
+
+ /// Sfx item RES_UL_SPACE
+ void FormatULSpace(const SvxULSpaceItem& rULSpace) override;
+
+ /// Sfx item RES_SURROUND
+ void FormatSurround(const SwFormatSurround& rSurround) override;
+
+ /// Sfx item RES_VERT_ORIENT
+ void FormatVertOrientation(const SwFormatVertOrient& rFlyVert) override;
+
+ /// Sfx item RES_HORI_ORIENT
+ void FormatHorizOrientation(const SwFormatHoriOrient& rFlyHori) override;
+
+ /// Sfx item RES_ANCHOR
+ void FormatAnchor(const SwFormatAnchor& rAnchor) override;
+
+ /// Sfx item RES_BACKGROUND
+ void FormatBackground(const SvxBrushItem& rBrush) override;
+
+ /// Sfx item RES_FILL_STYLE
+ void FormatFillStyle(const XFillStyleItem& rFillStyle) override;
+
+ /// Sfx item RES_FILL_GRADIENT
+ void FormatFillGradient(const XFillGradientItem& rFillGradient) override;
+
+ /// Sfx item RES_BOX
+ void FormatBox(const SvxBoxItem& rBox) override;
+
+ /// Sfx item RES_COL
+ void FormatColumns_Impl(sal_uInt16 nCols, const SwFormatCol& rCol, bool bEven,
+ SwTwips nPageSize) override;
+
+ /// Sfx item RES_KEEP
+ void FormatKeep(const SvxFormatKeepItem& rItem) override;
+
+ /// Sfx item RES_TEXTGRID
+ void FormatTextGrid(const SwTextGridItem& rItem) override;
+
+ /// Sfx item RES_LINENUMBER
+ void FormatLineNumbering(const SwFormatLineNumber& rNumbering) override;
+
+ /// Sfx item RES_FRAMEDIR
+ void FormatFrameDirection(const SvxFrameDirectionItem& rDirection) override;
+
+ /// Sfx item RES_PARATR_GRABBAG
+ void ParaGrabBag(const SfxGrabBagItem& rItem) override;
+
+ /// Sfx item RES_CHRATR_GRABBAG
+ void CharGrabBag(const SfxGrabBagItem& rItem) override;
+
+ /// Sfx item RES_PARATR_OUTLINELEVEL
+ void ParaOutlineLevel(const SfxUInt16Item& rItem) override;
+
+ /// Write the expanded field
+ void WriteExpand(const SwField* pField) override;
+
+ void RefField(const SwField& rField, const OUString& rRef) override;
+ void HiddenField(const SwField& rField) override;
+ void SetField(const SwField& rField, ww::eField eType, const OUString& rCmd) override;
+ void PostitField(const SwField* pField) override;
+ bool DropdownField(const SwField* pField) override;
+ bool PlaceholderField(const SwField* pField) override;
+
+ void SectionRtlGutter(const SfxBoolItem& rRtlGutter) override;
+
+ void TextLineBreak(const SwFormatLineBreak& rLineBreak) override;
+
+private:
+ /// Reference to the export, where to get the data from
+ RtfExport& m_rExport;
+
+ OStringBuffer m_aTabStop;
+
+ /// Access to the page style of the previous paragraph.
+ const SwPageDesc* m_pPrevPageDesc;
+
+ /// Output graphic fly frames.
+ void FlyFrameGraphic(const SwFlyFrameFormat* pFlyFrameFormat, const SwGrfNode* pGrfNode);
+ void FlyFrameOLE(const SwFlyFrameFormat* pFlyFrameFormat, SwOLENode& rOLENode,
+ const Size& rSize);
+ void FlyFrameOLEReplacement(const SwFlyFrameFormat* pFlyFrameFormat, SwOLENode& rOLENode,
+ const Size& rSize);
+ /// Math export.
+ bool FlyFrameOLEMath(const SwFlyFrameFormat* pFlyFrameFormat, SwOLENode& rOLENode,
+ const Size& rSize);
+
+ /*
+ * Table methods.
+ */
+ void InitTableHelper(const ww8::WW8TableNodeInfoInner::Pointer_t& pTableTextNodeInfoInner);
+ void StartTable();
+ void StartTableRow(const ww8::WW8TableNodeInfoInner::Pointer_t& pTableTextNodeInfoInner);
+ void StartTableCell();
+ void TableCellProperties(const ww8::WW8TableNodeInfoInner::Pointer_t& pTableTextNodeInfoInner);
+ void EndTableCell();
+ void EndTableRow();
+ void EndTable();
+
+ /// End cell, row, and even the entire table if necessary.
+ void FinishTableRowCell(const ww8::WW8TableNodeInfoInner::Pointer_t& pInner);
+
+ void WriteTextFootnoteNumStr(const SwFormatFootnote& rFootnote);
+
+ /*
+ * Current style name and its ID.
+ */
+ OUString m_rStyleName;
+ sal_uInt16 m_nStyleId;
+ /*
+ * Current list ID.
+ */
+ sal_uInt16 m_nListId;
+ /*
+ * This is needed because the call order is: run text, run properties, paragraph properties.
+ * What we need is the opposite.
+ */
+ RtfStringBuffer m_aRun;
+ RtfStringBuffer m_aRunText;
+ /*
+ * This is written after runs.
+ */
+ OStringBuffer m_aAfterRuns;
+ /*
+ * Same for colors and stylesheets: first we just want to output colors,
+ * need to buffer the stylesheet table to output it after the color one.
+ */
+ OStringBuffer m_aStylesheet;
+ /*
+ * This one just holds the style commands in the current style.
+ */
+ OStringBuffer m_aStyles;
+ /*
+ * This is the same as m_aStyles but the contents of it is Assoc.
+ */
+ OStringBuffer m_aStylesAssocHich;
+ OStringBuffer m_aStylesAssocDbch;
+ OStringBuffer m_aStylesAssocRtlch;
+ OStringBuffer m_aStylesAssocLtrch;
+
+ bool m_bIsRTL;
+ sal_uInt16 m_nScript;
+ bool m_bControlLtrRtl;
+
+ sal_Int32 m_nNextAnnotationMarkId;
+ sal_Int32 m_nCurrentAnnotationMarkId;
+ /// Maps annotation mark names to ID's.
+ std::map<OString, sal_Int32> m_rOpenedAnnotationMarksIds;
+
+ /*
+ * The current table helper.
+ */
+ std::unique_ptr<SwWriteTable> m_pTableWrt;
+
+ /*
+ * Remember if we are in an open cell, or not.
+ */
+ bool m_bTableCellOpen;
+
+ /*
+ * Remember the current table depth.
+ */
+ sal_uInt32 m_nTableDepth;
+
+ /*
+ * Remember if we wrote a \cell or not.
+ */
+ bool m_bTableAfterCell;
+
+ /*
+ * For late output of row definitions.
+ */
+ OStringBuffer m_aRowDefs;
+
+ /*
+ * Is a column break needed after the next \par?
+ */
+ bool m_nColBreakNeeded;
+
+ /*
+ * If section breaks should be buffered to m_aSectionBreaks
+ */
+ bool m_bBufferSectionBreaks;
+ OStringBuffer m_aSectionBreaks;
+
+ /*
+ * If section headers (and footers) should be buffered to
+ * m_aSectionHeaders.
+ */
+ bool m_bBufferSectionHeaders;
+ OStringBuffer m_aSectionHeaders;
+
+ /*
+ * Support for starting multiple tables at the same cell.
+ * If the current table is the last started one.
+ */
+ bool m_bLastTable;
+ /*
+ * List of already started but not yet defined tables (need to be defined
+ * after the nested tables).
+ */
+ std::vector<OString> m_aTables;
+ /*
+ * If cell info is already output.
+ */
+ bool m_bWroteCellInfo;
+
+ /// If we ended a table row without starting a new one.
+ bool m_bTableRowEnded;
+
+ /// Number of cells from the table definition, by depth.
+ std::map<sal_uInt32, sal_uInt32> m_aCells;
+
+ bool m_bIsBeforeFirstParagraph;
+
+ /// If we're in a paragraph that has a single empty run only.
+ bool m_bSingleEmptyRun;
+
+ bool m_bInRun;
+
+ bool m_bInRuby;
+
+ /// Maps ID's to postit fields, used in atrfstart/end and atnref.
+ std::map<sal_uInt16, const SwPostItField*> m_aPostitFields;
+
+ /// When exporting fly frames, this holds the real size of the frame.
+ const Size* m_pFlyFrameSize;
+
+ std::vector<std::pair<OString, OString>> m_aFlyProperties;
+
+ std::optional<css::drawing::FillStyle> m_oFillStyle;
+
+ /// If we're in the process of exporting a hyperlink, then its URL.
+ std::stack<OUString> m_aURLs;
+
+ /// If original file had \sbauto.
+ bool m_bParaBeforeAutoSpacing;
+ /// If m_bParaBeforeAutoSpacing is set, value of \sb.
+ sal_Int32 m_nParaBeforeSpacing;
+ /// If original file had \saauto.
+ bool m_bParaAfterAutoSpacing;
+ /// If m_bParaBeforeAutoSpacing is set, value of \sa.
+ sal_Int32 m_nParaAfterSpacing;
+
+ editeng::WordPageMargins m_aPageMargins;
+
+public:
+ explicit RtfAttributeOutput(RtfExport& rExport);
+
+ ~RtfAttributeOutput() override;
+
+ /// Return the right export class.
+ MSWordExportBase& GetExport() override;
+
+ // These are used by wwFont::WriteRtf()
+ /// Start the font.
+ void StartFont(const OUString& rFamilyName) const;
+
+ /// End the font.
+ void EndFont() const;
+
+ /// Alternate name for the font.
+ void FontAlternateName(const OUString& rName) const;
+
+ /// Font charset.
+ void FontCharset(sal_uInt8 nCharSet) const;
+
+ /// Font family.
+ void FontFamilyType(FontFamily eFamily, const wwFont& rFont) const;
+
+ /// Font pitch.
+ void FontPitchType(FontPitch ePitch) const;
+
+ void BulletDefinition(int nId, const Graphic& rGraphic, Size aSize) override;
+
+ /// Handles just the {\shptxt ...} part of a shape export.
+ void writeTextFrame(const ww8::Frame& rFrame, bool bTextBox = false);
+
+ OStringBuffer& GetTabStop() { return m_aTabStop; }
+
+ const SwPageDesc* GetPrevPageDesc() const { return m_pPrevPageDesc; }
+};
+
+#endif // INCLUDED_SW_SOURCE_FILTER_WW8_RTFATTRIBUTEOUTPUT_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */