[Libreoffice-commits] core.git: include/svtools sw/qa sw/source writerfilter/source

Miklos Vajna (via logerrit) logerrit at kemper.freedesktop.org
Thu Apr 1 08:08:00 UTC 2021


 include/svtools/rtfkeywd.hxx                   |    1 +
 sw/qa/extras/rtfexport/data/rtl-gutter.rtf     |    4 ++++
 sw/qa/extras/rtfexport/rtfexport3.cxx          |   17 +++++++++++++++++
 sw/source/filter/ww8/attributeoutputbase.hxx   |    2 +-
 sw/source/filter/ww8/rtfattributeoutput.cxx    |   10 ++++++++++
 sw/source/filter/ww8/rtfattributeoutput.hxx    |    2 ++
 writerfilter/source/rtftok/rtfdispatchflag.cxx |    6 ++++++
 7 files changed, 41 insertions(+), 1 deletion(-)

New commits:
commit f15c6c5d2947a61e6521471b6b7541812953efc3
Author:     Miklos Vajna <vmiklos at collabora.com>
AuthorDate: Thu Apr 1 09:21:39 2021 +0200
Commit:     Miklos Vajna <vmiklos at collabora.com>
CommitDate: Thu Apr 1 10:07:21 2021 +0200

    tdf#140343 sw page rtl gutter margin: add RTF filter
    
    Map to the \rtlgutter section flag. This means that now rtl gutter is
    handled for all Word formats.
    
    Change-Id: I4c2c12b7df2ce2109d4d638df71e6b7f322afe52
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113439
    Reviewed-by: Miklos Vajna <vmiklos at collabora.com>
    Tested-by: Jenkins

diff --git a/include/svtools/rtfkeywd.hxx b/include/svtools/rtfkeywd.hxx
index b02395e45a5d..113faa14389e 100644
--- a/include/svtools/rtfkeywd.hxx
+++ b/include/svtools/rtfkeywd.hxx
@@ -1224,5 +1224,6 @@
 #define LO_STRING_SVTOOLS_RTF_SAAUTO "\\saauto"
 #define LO_STRING_SVTOOLS_RTF_HTMAUTSP "\\htmautsp"
 #define LO_STRING_SVTOOLS_RTF_GUTTERPRL "\\gutterprl"
+#define LO_STRING_SVTOOLS_RTF_RTLGUTTER "\\rtlgutter"
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/extras/rtfexport/data/rtl-gutter.rtf b/sw/qa/extras/rtfexport/data/rtl-gutter.rtf
new file mode 100644
index 000000000000..45c7c86b4500
--- /dev/null
+++ b/sw/qa/extras/rtfexport/data/rtl-gutter.rtf
@@ -0,0 +1,4 @@
+{\rtf1
+\paperw8395\paperh5947\margl360\margr360\margt720\margb1440\gutter1080\rtlgutter
+\pard\plain hello\par
+}
diff --git a/sw/qa/extras/rtfexport/rtfexport3.cxx b/sw/qa/extras/rtfexport/rtfexport3.cxx
index a3b5f6b2779c..6f801bc3f8cc 100644
--- a/sw/qa/extras/rtfexport/rtfexport3.cxx
+++ b/sw/qa/extras/rtfexport/rtfexport3.cxx
@@ -404,6 +404,23 @@ DECLARE_RTFEXPORT_TEST(testTdf128428_dntblnsbdb, "tdf128428_dntblnsbdb.rtf")
     CPPUNIT_ASSERT_EQUAL(1, getPages());
 }
 
+CPPUNIT_TEST_FIXTURE(Test, testRtlGutter)
+{
+    auto verify = [this]() {
+        uno::Reference<beans::XPropertySet> xStandard(
+            getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY);
+        CPPUNIT_ASSERT(getProperty<bool>(xStandard, "RtlGutter"));
+    };
+
+    // Given a document with RTL gutter, when loading it:
+    load(mpTestDocumentPath, "rtl-gutter.rtf");
+    // Then make sure the section's gutter is still RTL:
+    // Without the accompanying fix in place, this test would have failed as \rtlgutter was missing.
+    verify();
+    reload(mpFilter, "rtl-gutter.rtf");
+    verify();
+}
+
 CPPUNIT_PLUGIN_IMPLEMENT();
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/filter/ww8/attributeoutputbase.hxx b/sw/source/filter/ww8/attributeoutputbase.hxx
index d85d58237d60..eceeb4f51c5f 100644
--- a/sw/source/filter/ww8/attributeoutputbase.hxx
+++ b/sw/source/filter/ww8/attributeoutputbase.hxx
@@ -641,7 +641,7 @@ protected:
     ww8::WidthsPtr   GetColumnWidths( ww8::WW8TableNodeInfoInner::Pointer_t const & pTableTextNodeInfoInner );
 
     /// RES_RTL_GUTTER
-    virtual void SectionRtlGutter(const SfxBoolItem& /*rRtlGutter*/) {}
+    virtual void SectionRtlGutter(const SfxBoolItem& rRtlGutter) = 0;
 
 public:
     AttributeOutputBase(const OUString& sBaseURL)
diff --git a/sw/source/filter/ww8/rtfattributeoutput.cxx b/sw/source/filter/ww8/rtfattributeoutput.cxx
index 91a0362aa686..6c37ce00be0d 100644
--- a/sw/source/filter/ww8/rtfattributeoutput.cxx
+++ b/sw/source/filter/ww8/rtfattributeoutput.cxx
@@ -4368,4 +4368,14 @@ void RtfAttributeOutput::BulletDefinition(int /*nId*/, const Graphic& rGraphic,
     m_rExport.Strm().WriteCharPtr("}}"); // pict, shppict
 }
 
+void RtfAttributeOutput::SectionRtlGutter(const SfxBoolItem& rRtlGutter)
+{
+    if (!rRtlGutter.GetValue())
+    {
+        return;
+    }
+
+    m_rExport.Strm().WriteCharPtr(LO_STRING_SVTOOLS_RTF_RTLGUTTER);
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/filter/ww8/rtfattributeoutput.hxx b/sw/source/filter/ww8/rtfattributeoutput.hxx
index 17cf107d1cf4..94bb37af9686 100644
--- a/sw/source/filter/ww8/rtfattributeoutput.hxx
+++ b/sw/source/filter/ww8/rtfattributeoutput.hxx
@@ -458,6 +458,8 @@ protected:
     bool DropdownField(const SwField* pField) override;
     bool PlaceholderField(const SwField* pField) override;
 
+    void SectionRtlGutter(const SfxBoolItem& rRtlGutter) override;
+
 private:
     /// Reference to the export, where to get the data from
     RtfExport& m_rExport;
diff --git a/writerfilter/source/rtftok/rtfdispatchflag.cxx b/writerfilter/source/rtftok/rtfdispatchflag.cxx
index 7b12ec41075c..c56124106eb2 100644
--- a/writerfilter/source/rtftok/rtfdispatchflag.cxx
+++ b/writerfilter/source/rtftok/rtfdispatchflag.cxx
@@ -1228,6 +1228,12 @@ RTFError RTFDocumentImpl::dispatchFlag(RTFKeyword nKeyword)
         case RTFKeyword::GUTTERPRL:
             m_aSettingsTableSprms.set(NS_ooxml::LN_CT_Settings_gutterAtTop, new RTFValue(1));
             break;
+        case RTFKeyword::RTLGUTTER:
+        {
+            m_aStates.top().getSectionSprms().set(NS_ooxml::LN_EG_SectPrContents_rtlGutter,
+                                                  new RTFValue(1));
+        }
+        break;
         default:
         {
             SAL_INFO("writerfilter", "TODO handle flag '" << keywordToString(nKeyword) << "'");


More information about the Libreoffice-commits mailing list