sw/qa/extras/ww8export/ww8export4.cxx | 22 ++++++++++++++++++++ sw/qa/filter/ww8/data/dont-break-wrapped-tables.doc |binary sw/qa/filter/ww8/ww8.cxx | 15 +++++++++++++ sw/source/filter/ww8/wrtww8.cxx | 3 ++ sw/source/filter/ww8/ww8par.cxx | 6 +++++ sw/source/filter/ww8/ww8scan.cxx | 8 +++---- sw/source/filter/ww8/ww8scan.hxx | 11 +++++++++- 7 files changed, 60 insertions(+), 5 deletions(-)
New commits: commit e2927009a818a9827bef38fb17891e7671b68f61 Author: Miklos Vajna <vmik...@collabora.com> AuthorDate: Fri May 26 09:00:05 2023 +0200 Commit: Miklos Vajna <vmik...@collabora.com> CommitDate: Wed May 31 13:48:13 2023 +0200 sw floattable: handle fDontBreakWrappedTables in the DOC filter This is the binary DOC import/export for the functionality added in commit 08fa2903df1a7cf9a1647fcf967e4c8b57dad793 (sw floattable: add a DoNotBreakWrappedTables compat flag, 2023-05-24). (cherry picked from commit 63de1ea465ef72ecb8d4a7dcdaf5e92ea875eb00) Change-Id: I91c29b9049e8e9079ed16b1beeefddfa2f6e9a6a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152378 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> Reviewed-by: Miklos Vajna <vmik...@collabora.com> diff --git a/sw/qa/extras/ww8export/ww8export4.cxx b/sw/qa/extras/ww8export/ww8export4.cxx index 3b8c097149ff..313f57bf43e5 100644 --- a/sw/qa/extras/ww8export/ww8export4.cxx +++ b/sw/qa/extras/ww8export/ww8export4.cxx @@ -86,6 +86,28 @@ DECLARE_WW8EXPORT_TEST(testTdf155465_paraAdjustDistribute, "tdf155465_paraAdjust CPPUNIT_ASSERT_EQUAL(style::ParagraphAdjust_LEFT, static_cast<style::ParagraphAdjust>(nAdjust)); } +CPPUNIT_TEST_FIXTURE(Test, testDontBreakWrappedTables) +{ + // Given a document with the DO_NOT_BREAK_WRAPPED_TABLES compat mode enabled: + createSwDoc(); + { + SwDoc* pDoc = getSwDoc(); + IDocumentSettingAccess& rIDSA = pDoc->getIDocumentSettingAccess(); + rIDSA.set(DocumentSettingId::DO_NOT_BREAK_WRAPPED_TABLES, true); + } + + // When saving to doc: + reload(mpFilter, "dont-break-wrapped-tables.doc"); + + // Then make sure the compat flag is serialized: + SwDoc* pDoc = getSwDoc(); + IDocumentSettingAccess& rIDSA = pDoc->getIDocumentSettingAccess(); + bool bDontBreakWrappedTables = rIDSA.get(DocumentSettingId::DO_NOT_BREAK_WRAPPED_TABLES); + // Without the accompanying fix in place, this test would have failed, the compat flag was not + // set. + CPPUNIT_ASSERT(bDontBreakWrappedTables); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/filter/ww8/data/dont-break-wrapped-tables.doc b/sw/qa/filter/ww8/data/dont-break-wrapped-tables.doc new file mode 100644 index 000000000000..01f355227274 Binary files /dev/null and b/sw/qa/filter/ww8/data/dont-break-wrapped-tables.doc differ diff --git a/sw/qa/filter/ww8/ww8.cxx b/sw/qa/filter/ww8/ww8.cxx index fd7b07ff59bf..67d97c72ebe4 100644 --- a/sw/qa/filter/ww8/ww8.cxx +++ b/sw/qa/filter/ww8/ww8.cxx @@ -302,6 +302,21 @@ CPPUNIT_TEST_FIXTURE(Test, testDoNotBreakWrappedTables) // i.e. <w:doNotBreakWrappedTables> was not written. assertXPath(pXmlDoc, "/w:settings/w:compat/w:doNotBreakWrappedTables", 1); } + +CPPUNIT_TEST_FIXTURE(Test, testDOCfDontBreakWrappedTables) +{ + // Given a document with fDontBreakWrappedTables: + // When importing that document: + createSwDoc("dont-break-wrapped-tables.doc"); + + // Then make sure that the matching compat flag is set: + SwDoc* pDoc = getSwDoc(); + IDocumentSettingAccess& rIDSA = pDoc->getIDocumentSettingAccess(); + bool bDontBreakWrappedTables = rIDSA.get(DocumentSettingId::DO_NOT_BREAK_WRAPPED_TABLES); + // Without the accompanying fix in place, this test would have failed, the compat flag was not + // set. + CPPUNIT_ASSERT(bDontBreakWrappedTables); +} } CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sw/source/filter/ww8/wrtww8.cxx b/sw/source/filter/ww8/wrtww8.cxx index adc4461660ca..1acea700955d 100644 --- a/sw/source/filter/ww8/wrtww8.cxx +++ b/sw/source/filter/ww8/wrtww8.cxx @@ -557,6 +557,9 @@ static void WriteDop( WW8Export& rWrt ) rDop.fExpShRtn = !rWrt.m_rDoc.getIDocumentSettingAccess().get(DocumentSettingId::DO_NOT_JUSTIFY_LINES_WITH_MANUAL_BREAK); // #i56856# + IDocumentSettingAccess& rIDSA = rWrt.m_rDoc.getIDocumentSettingAccess(); + rDop.fDontBreakWrappedTables = rIDSA.get(DocumentSettingId::DO_NOT_BREAK_WRAPPED_TABLES); + rDop.Write( *rWrt.m_pTableStrm, *rWrt.m_pFib ); } diff --git a/sw/source/filter/ww8/ww8par.cxx b/sw/source/filter/ww8/ww8par.cxx index d751ec873b1e..a392b5585e4e 100644 --- a/sw/source/filter/ww8/ww8par.cxx +++ b/sw/source/filter/ww8/ww8par.cxx @@ -1892,6 +1892,12 @@ void SwWW8ImplReader::ImportDop() m_rDoc.getIDocumentSettingAccess().set(DocumentSettingId::CONTINUOUS_ENDNOTES, true); // rely on default for HYPHENATE_URLS=false + IDocumentSettingAccess& rIDSA = m_rDoc.getIDocumentSettingAccess(); + if (m_xWDop->fDontBreakWrappedTables) + { + rIDSA.set(DocumentSettingId::DO_NOT_BREAK_WRAPPED_TABLES, true); + } + // COMPATIBILITY FLAGS END // Import magic doptypography information, if it's there diff --git a/sw/source/filter/ww8/ww8scan.cxx b/sw/source/filter/ww8/ww8scan.cxx index 925548c70dc5..517a14a5f02d 100644 --- a/sw/source/filter/ww8/ww8scan.cxx +++ b/sw/source/filter/ww8/ww8scan.cxx @@ -7635,7 +7635,7 @@ WW8Dop::WW8Dop(SvStream& rSt, sal_Int16 nFib, sal_Int32 nPos, sal_uInt32 nSize): fCompatibilityOptions_Unknown2_5(false), fCompatibilityOptions_Unknown2_6(false), fCompatibilityOptions_Unknown2_7(false), fCompatibilityOptions_Unknown2_8(false), fCompatibilityOptions_Unknown2_9(false), fCompatibilityOptions_Unknown2_10(false), - fCompatibilityOptions_Unknown2_11(false), fCompatibilityOptions_Unknown2_12(false), + fDontBreakWrappedTables(false), fCompatibilityOptions_Unknown2_12(false), fCompatibilityOptions_Unknown2_13(false), fCompatibilityOptions_Unknown2_14(false), fCompatibilityOptions_Unknown2_15(false), fCompatibilityOptions_Unknown2_16(false), fCompatibilityOptions_Unknown2_17(false), fCompatibilityOptions_Unknown2_18(false), @@ -7906,7 +7906,7 @@ WW8Dop::WW8Dop(): fCompatibilityOptions_Unknown2_5(false), fCompatibilityOptions_Unknown2_6(false), fCompatibilityOptions_Unknown2_7(false), fCompatibilityOptions_Unknown2_8(false), fCompatibilityOptions_Unknown2_9(false), fCompatibilityOptions_Unknown2_10(false), - fCompatibilityOptions_Unknown2_11(false), fCompatibilityOptions_Unknown2_12(false), + fDontBreakWrappedTables(false), fCompatibilityOptions_Unknown2_12(false), fCompatibilityOptions_Unknown2_13(false), fCompatibilityOptions_Unknown2_14(false), fCompatibilityOptions_Unknown2_15(false), fCompatibilityOptions_Unknown2_16(false), fCompatibilityOptions_Unknown2_17(false), fCompatibilityOptions_Unknown2_18(false), @@ -8023,7 +8023,7 @@ void WW8Dop::SetCompatibilityOptions2(sal_uInt32 a32Bit) fCompatibilityOptions_Unknown2_8 = ( a32Bit & 0x00000080 ) >> 7 ; fCompatibilityOptions_Unknown2_9 = ( a32Bit & 0x00000100 ) >> 8 ; fCompatibilityOptions_Unknown2_10 = ( a32Bit & 0x00000200 ) >> 9 ; - fCompatibilityOptions_Unknown2_11 = ( a32Bit & 0x00000400 ) >> 10 ; + fDontBreakWrappedTables = ( a32Bit & 0x00000400 ) >> 10 ; fCompatibilityOptions_Unknown2_12 = ( a32Bit & 0x00000800 ) >> 11 ; fCompatibilityOptions_Unknown2_13 = ( a32Bit & 0x00001000 ) >> 12 ; fCompatibilityOptions_Unknown2_14 = ( a32Bit & 0x00002000 ) >> 13 ; @@ -8060,7 +8060,7 @@ sal_uInt32 WW8Dop::GetCompatibilityOptions2() const if (fCompatibilityOptions_Unknown2_8) a32Bit |= 0x00000080; if (fCompatibilityOptions_Unknown2_9) a32Bit |= 0x00000100; if (fCompatibilityOptions_Unknown2_10) a32Bit |= 0x00000200; - if (fCompatibilityOptions_Unknown2_11) a32Bit |= 0x00000400; + if (fDontBreakWrappedTables) a32Bit |= 0x00000400; if (fCompatibilityOptions_Unknown2_12) a32Bit |= 0x00000800; if (fCompatibilityOptions_Unknown2_13) a32Bit |= 0x00001000; //#i42909# set thai "line breaking rules" compatibility option diff --git a/sw/source/filter/ww8/ww8scan.hxx b/sw/source/filter/ww8/ww8scan.hxx index 9b2fd398cc71..f040415e967a 100644 --- a/sw/source/filter/ww8/ww8scan.hxx +++ b/sw/source/filter/ww8/ww8scan.hxx @@ -1780,6 +1780,7 @@ public: sal_Int16 hpsZoomFontPag = 0; sal_Int16 dywDispPag = 0; + // [MS-DOC] 2.7.11 Copts A..H bool fCompatibilityOptions_Unknown2_1 : 1 /*= false*/; // #i78591# bool fCompatibilityOptions_Unknown2_2 : 1 /*= false*/; // #i78591# bool fDontUseHTMLAutoSpacing : 1 /*= false*/; @@ -1788,13 +1789,17 @@ public: bool fCompatibilityOptions_Unknown2_6 : 1 /*= false*/; // #i78591# bool fCompatibilityOptions_Unknown2_7 : 1 /*= false*/; // #i78591# bool fCompatibilityOptions_Unknown2_8 : 1 /*= false*/; // #i78591# + + // [MS-DOC] 2.7.11 Copts I..P bool fCompatibilityOptions_Unknown2_9 : 1 /*= false*/; // #i78591# bool fCompatibilityOptions_Unknown2_10 : 1 /*= false*/; // #i78591# - bool fCompatibilityOptions_Unknown2_11 : 1 /*= false*/; // #i78591# + bool fDontBreakWrappedTables : 1 /*= false*/; // #i78591# bool fCompatibilityOptions_Unknown2_12 : 1 /*= false*/; // #i78591# bool fCompatibilityOptions_Unknown2_13 : 1 /*= false*/; // #i78591# bool fCompatibilityOptions_Unknown2_14 : 1 /*= false*/; // #i78591# bool fCompatibilityOptions_Unknown2_15 : 1 /*= false*/; // #i78591# + + // [MS-DOC] 2.7.11 Copts Q..X bool fCompatibilityOptions_Unknown2_16 : 1 /*= false*/; // #i78591# bool fCompatibilityOptions_Unknown2_17 : 1 /*= false*/; // #i78591# bool fCompatibilityOptions_Unknown2_18 : 1 /*= false*/; // #i78591# @@ -1803,6 +1808,8 @@ public: bool fCompatibilityOptions_Unknown2_21 : 1 /*= false*/; // #i78591# bool fCompatibilityOptions_Unknown2_22 : 1 /*= false*/; // #i78591# bool fCompatibilityOptions_Unknown2_23 : 1 /*= false*/; // #i78591# + + // [MS-DOC] 2.7.11 Copts Y..f bool fCompatibilityOptions_Unknown2_24 : 1 /*= false*/; // #i78591# bool fCompatibilityOptions_Unknown2_25 : 1 /*= false*/; // #i78591# bool fCompatibilityOptions_Unknown2_26 : 1 /*= false*/; // #i78591# @@ -1811,6 +1818,8 @@ public: bool fCompatibilityOptions_Unknown2_29 : 1 /*= false*/; // #i78591# bool fCompatibilityOptions_Unknown2_30 : 1 /*= false*/; // #i78591# bool fCompatibilityOptions_Unknown2_31 : 1 /*= false*/; // #i78591# + + // [MS-DOC] 2.7.11 Copts g bool fCompatibilityOptions_Unknown2_32 : 1 /*= false*/; // #i78591# sal_uInt16 fUnknown3 : 15 /*= 0*/;