sw/qa/extras/ooxmlexport/data/rtl-gutter.docx |binary sw/qa/extras/ooxmlexport/ooxmlexport16.cxx | 18 ++++++++++++++++++ sw/source/filter/ww8/attributeoutputbase.hxx | 3 +++ sw/source/filter/ww8/docxattributeoutput.cxx | 10 ++++++++++ sw/source/filter/ww8/docxattributeoutput.hxx | 2 ++ sw/source/filter/ww8/ww8atr.cxx | 3 +++ writerfilter/source/dmapper/DomainMapper.cxx | 7 +++++++ writerfilter/source/dmapper/PropertyIds.cxx | 3 +++ writerfilter/source/dmapper/PropertyIds.hxx | 1 + 9 files changed, 47 insertions(+)
New commits: commit 3db477fd0e6cfc4ff77b3c911ca4ab14fd980932 Author: Miklos Vajna <vmik...@collabora.com> AuthorDate: Wed Mar 31 09:54:25 2021 +0200 Commit: Miklos Vajna <vmik...@collabora.com> CommitDate: Wed Mar 31 11:02:28 2021 +0200 tdf#140343 sw page rtl gutter margin: add DOCX filter Map to <w:rtlGutter> inside <w:sectPr>. Change-Id: Iaa1d9da8c1585ec31c7cbe539f49643eb972c327 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113398 Reviewed-by: Miklos Vajna <vmik...@collabora.com> Tested-by: Jenkins diff --git a/sw/qa/extras/ooxmlexport/data/rtl-gutter.docx b/sw/qa/extras/ooxmlexport/data/rtl-gutter.docx new file mode 100644 index 000000000000..d6b28e5cbce2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/rtl-gutter.docx differ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx index bda5911c1b16..afd0b94e5d0b 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx @@ -197,6 +197,24 @@ CPPUNIT_TEST_FIXTURE(Test, testEffectExtentLineWidth) verify(); } +CPPUNIT_TEST_FIXTURE(Test, testRtlGutter) +{ + // Given a document with RTL gutter: + load(mpTestDocumentPath, "rtl-gutter.docx"); + uno::Reference<beans::XPropertySet> xStandard(getStyles("PageStyles")->getByName("Standard"), + uno::UNO_QUERY); + CPPUNIT_ASSERT(getProperty<bool>(xStandard, "RtlGutter")); + + // When saving back to DOCX: + reload(mpFilter, "rtl-gutter.docx"); + + // Then make sure the section's gutter is still RTL: + xmlDocUniquePtr pXmlDoc = parseExport(); + // Without the accompanying fix in place, this test would have failed as the XML element was + // missing. + assertXPath(pXmlDoc, "/w:document/w:body/w:sectPr/w:rtlGutter", 1); +} + DECLARE_OOXMLEXPORT_EXPORTONLY_TEST(testTdf140572_docDefault_superscript, "tdf140572_docDefault_superscript.docx") { // A round-trip was crashing. diff --git a/sw/source/filter/ww8/attributeoutputbase.hxx b/sw/source/filter/ww8/attributeoutputbase.hxx index cea47b8e3c60..d85d58237d60 100644 --- a/sw/source/filter/ww8/attributeoutputbase.hxx +++ b/sw/source/filter/ww8/attributeoutputbase.hxx @@ -640,6 +640,9 @@ protected: ww8::GridColsPtr GetGridCols( ww8::WW8TableNodeInfoInner::Pointer_t const & pTableTextNodeInfoInner ); ww8::WidthsPtr GetColumnWidths( ww8::WW8TableNodeInfoInner::Pointer_t const & pTableTextNodeInfoInner ); + /// RES_RTL_GUTTER + virtual void SectionRtlGutter(const SfxBoolItem& /*rRtlGutter*/) {} + public: AttributeOutputBase(const OUString& sBaseURL) : m_sBaseURL(sBaseURL) diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index cd67d87495bd..b64be1d084b3 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -6715,6 +6715,16 @@ void DocxAttributeOutput::SectionFormProtection( bool bProtected ) m_pSerializer->singleElementNS(XML_w, XML_formProt, FSNS(XML_w, XML_val), "false"); } +void DocxAttributeOutput::SectionRtlGutter(const SfxBoolItem& rRtlGutter) +{ + if (!rRtlGutter.GetValue()) + { + return; + } + + m_pSerializer->singleElementNS(XML_w, XML_rtlGutter); +} + void DocxAttributeOutput::SectionLineNumbering( sal_uLong nRestartNo, const SwLineNumberInfo& rLnNumInfo ) { rtl::Reference<FastAttributeList> pAttr = FastSerializerHelper::createAttrList(); diff --git a/sw/source/filter/ww8/docxattributeoutput.hxx b/sw/source/filter/ww8/docxattributeoutput.hxx index 7a2826e81ea9..62ace93d55f0 100644 --- a/sw/source/filter/ww8/docxattributeoutput.hxx +++ b/sw/source/filter/ww8/docxattributeoutput.hxx @@ -681,6 +681,8 @@ protected: virtual void WriteBookmarkInActParagraph( const OUString& rName, sal_Int32 nFirstRunPos, sal_Int32 nLastRunPos ) override; + void SectionRtlGutter( const SfxBoolItem& rRtlGutter) override; + /// Reference to the export, where to get the data from DocxExport &m_rExport; diff --git a/sw/source/filter/ww8/ww8atr.cxx b/sw/source/filter/ww8/ww8atr.cxx index 985df4df45a2..2103490e9cc7 100644 --- a/sw/source/filter/ww8/ww8atr.cxx +++ b/sw/source/filter/ww8/ww8atr.cxx @@ -5503,6 +5503,9 @@ void AttributeOutputBase::OutputItem( const SfxPoolItem& rHt ) case RES_CHRATR_GRABBAG: CharGrabBag(static_cast<const SfxGrabBagItem&>(rHt)); break; + case RES_RTL_GUTTER: + SectionRtlGutter(static_cast<const SfxBoolItem&>(rHt)); + break; default: SAL_INFO("sw.ww8", "Unhandled SfxPoolItem with id " << rHt.Which() ); diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index 42b8bd3a09a8..a70c5e81d5af 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -1599,6 +1599,13 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, const PropertyMapPtr& rContext ) pSectionContext->Insert(PROP_WRITING_MODE, uno::makeAny(writingMode)); } break; + case NS_ooxml::LN_EG_SectPrContents_rtlGutter: + if (pSectionContext != nullptr) + { + bool bRtlGutter = nIntValue != 0; + pSectionContext->Insert(PROP_RTL_GUTTER, uno::makeAny(bRtlGutter)); + } + break; case NS_ooxml::LN_EG_RPrBase_highlight: { // MS Word completely ignores character highlighting in character styles. diff --git a/writerfilter/source/dmapper/PropertyIds.cxx b/writerfilter/source/dmapper/PropertyIds.cxx index 5450c0c0dfc6..0100313bdf45 100644 --- a/writerfilter/source/dmapper/PropertyIds.cxx +++ b/writerfilter/source/dmapper/PropertyIds.cxx @@ -360,6 +360,9 @@ OUString getPropertyName( PropertyIds eId ) case PROP_GUTTER_MARGIN: sName = "GutterMargin"; break; + case PROP_RTL_GUTTER: + sName = "RtlGutter"; + break; } assert(sName.getLength()>0); return sName; diff --git a/writerfilter/source/dmapper/PropertyIds.hxx b/writerfilter/source/dmapper/PropertyIds.hxx index 67e804d231cb..a6afe0c5313f 100644 --- a/writerfilter/source/dmapper/PropertyIds.hxx +++ b/writerfilter/source/dmapper/PropertyIds.hxx @@ -359,6 +359,7 @@ enum PropertyIds ,PROP_CELL_FORMULA ,PROP_CELL_FORMULA_CONVERTED ,PROP_GUTTER_MARGIN + ,PROP_RTL_GUTTER }; //Returns the UNO string equivalent to eId. _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits