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;