sw/qa/extras/ooxmlexport/data/UnderlineTrailingSpace.docx |binary
 sw/qa/extras/ooxmlexport/ooxmlexport21.cxx                |   26 ++++++++++++++
 sw/source/filter/ww8/docxexport.cxx                       |    2 +
 writerfilter/source/dmapper/DomainMapper_Impl.cxx         |    2 +
 writerfilter/source/dmapper/SettingsTable.cxx             |    9 ++++
 writerfilter/source/dmapper/SettingsTable.hxx             |    1 
 6 files changed, 40 insertions(+)

New commits:
commit 047188ccb3c795d7fb94c2f4b110e85c19cba199
Author:     Mike Kaganski <mike.kagan...@collabora.com>
AuthorDate: Tue Feb 25 21:12:02 2025 +0500
Commit:     Miklos Vajna <vmik...@collabora.com>
CommitDate: Thu Feb 27 15:09:34 2025 +0100

    tdf#164487: "Show underline" compatibility option OOXML import/export
    
    Change-Id: I8db0b3da1cdadbf4a5c279231abc96699a8761f1
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/182189
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/182215
    Tested-by: Mike Kaganski <mike.kagan...@collabora.com>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/182271
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Miklos Vajna <vmik...@collabora.com>

diff --git a/sw/qa/extras/ooxmlexport/data/UnderlineTrailingSpace.docx 
b/sw/qa/extras/ooxmlexport/data/UnderlineTrailingSpace.docx
new file mode 100644
index 000000000000..f32e9fa880a4
Binary files /dev/null and 
b/sw/qa/extras/ooxmlexport/data/UnderlineTrailingSpace.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport21.cxx 
b/sw/qa/extras/ooxmlexport/ooxmlexport21.cxx
index 0f76824e135b..4c697df716bc 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport21.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport21.cxx
@@ -468,6 +468,32 @@ CPPUNIT_TEST_FIXTURE(Test, 
testCommentWithChildrenTdf163092)
     CPPUNIT_ASSERT_EQUAL(parents[sComment3Id], sComment2Id);
 }
 
+CPPUNIT_TEST_FIXTURE(Test, testMsWordUlTrailSpace)
+{
+    createSwDoc("UnderlineTrailingSpace.docx");
+    {
+        uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, 
uno::UNO_QUERY_THROW);
+        uno::Reference<beans::XPropertySet> xSettings(
+            xFactory->createInstance(u"com.sun.star.document.Settings"_ustr), 
uno::UNO_QUERY_THROW);
+        CPPUNIT_ASSERT_EQUAL(uno::Any(true),
+                             
xSettings->getPropertyValue(u"MsWordUlTrailSpace"_ustr));
+    }
+
+    // Test also after save-and-reload:
+    saveAndReload(u"Office Open XML Text"_ustr);
+    {
+        uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, 
uno::UNO_QUERY_THROW);
+        uno::Reference<beans::XPropertySet> xSettings(
+            xFactory->createInstance(u"com.sun.star.document.Settings"_ustr), 
uno::UNO_QUERY_THROW);
+        CPPUNIT_ASSERT_EQUAL(uno::Any(true),
+                             
xSettings->getPropertyValue(u"MsWordUlTrailSpace"_ustr));
+    }
+
+    // Check that the compat setting is exported in OOXML
+    xmlDocUniquePtr pXmlSettings = parseExport("word/settings.xml");
+    assertXPath(pXmlSettings, "/w:settings/w:compat/w:ulTrailSpace"_ostr);
+}
+
 } // end of anonymous namespace
 CPPUNIT_PLUGIN_IMPLEMENT();
 
diff --git a/sw/source/filter/ww8/docxexport.cxx 
b/sw/source/filter/ww8/docxexport.cxx
index d6cd3522b6df..7abd0d5ebd7c 100644
--- a/sw/source/filter/ww8/docxexport.cxx
+++ b/sw/source/filter/ww8/docxexport.cxx
@@ -1032,6 +1032,8 @@ WriteCompat(SwDoc const& rDoc, 
::sax_fastparser::FSHelperPtr const& rpFS,
         // Map the DoNotBreakWrappedTables compat flag to 
<w:doNotBreakWrappedTables>.
         rpFS->singleElementNS(XML_w, XML_doNotBreakWrappedTables);
     }
+    if (rIDSA.get(DocumentSettingId::MS_WORD_UL_TRAIL_SPACE))
+        rpFS->singleElementNS(XML_w, XML_ulTrailSpace);
 }
 
 void DocxExport::WriteSettings()
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx 
b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 0057799f99a2..08a5facc27f8 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -9692,6 +9692,8 @@ void DomainMapper_Impl::ApplySettingsTable()
                 = m_pSettingsTable->GetWriteProtectionSettings();
         if (aWriteProtection.hasElements())
                 xSettings->setPropertyValue("ModifyPasswordInfo", 
uno::Any(aWriteProtection));
+        if (m_pSettingsTable->GetMsWordUlTrailSpace())
+            xSettings->setPropertyValue(u"MsWordUlTrailSpace"_ustr, 
uno::Any(true));
     }
     catch(const uno::Exception&)
     {
diff --git a/writerfilter/source/dmapper/SettingsTable.cxx 
b/writerfilter/source/dmapper/SettingsTable.cxx
index 604858a871f2..f80e9aff8a05 100644
--- a/writerfilter/source/dmapper/SettingsTable.cxx
+++ b/writerfilter/source/dmapper/SettingsTable.cxx
@@ -89,6 +89,7 @@ struct SettingsTable_Impl
     bool                m_bNoColumnBalance;
     bool                m_bAutoHyphenation;
     bool                m_bNoHyphenateCaps;
+    bool                m_bMsWordUlTrailSpace = false;
     sal_Int16           m_nHyphenationZone;
     bool                m_bWidowControl;
     bool                m_bLongerSpaceSequence;
@@ -427,6 +428,9 @@ void SettingsTable::lcl_sprm(Sprm& rSprm)
             m_pImpl->m_bEndnoteIsCollectAtSectionEnd = true;
         }
         break;
+    case NS_ooxml::LN_CT_Compat_ulTrailSpace:
+        m_pImpl->m_bMsWordUlTrailSpace = true;
+        break;
     default:
     {
 #ifdef DBG_UTIL
@@ -532,6 +536,11 @@ bool SettingsTable::GetNoHyphenateCaps() const
     return m_pImpl->m_bNoHyphenateCaps;
 }
 
+bool SettingsTable::GetMsWordUlTrailSpace() const
+{
+    return m_pImpl->m_bMsWordUlTrailSpace;
+}
+
 sal_Int16 SettingsTable::GetHyphenationZone() const
 {
     return m_pImpl->m_nHyphenationZone;
diff --git a/writerfilter/source/dmapper/SettingsTable.hxx 
b/writerfilter/source/dmapper/SettingsTable.hxx
index 83de3a62bba5..32dab9b9ac53 100644
--- a/writerfilter/source/dmapper/SettingsTable.hxx
+++ b/writerfilter/source/dmapper/SettingsTable.hxx
@@ -76,6 +76,7 @@ public:
     bool GetLongerSpaceSequence() const;
     bool GetNoLeading() const;
     bool GetNoHyphenateCaps() const;
+    bool GetMsWordUlTrailSpace() const;
     sal_Int16 GetHyphenationZone() const;
 
     const OUString& GetDecimalSymbol() const;

Reply via email to