summaryrefslogtreecommitdiff
path: root/writerfilter
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.com>2023-05-30 08:21:33 +0200
committerMiklos Vajna <vmiklos@collabora.com>2023-05-31 15:25:02 +0200
commit391cbd2b780b5fd9670f16b3cbd38ec1e3fb6339 (patch)
treeaa095c2a2b259bc72618c927edabcd40a941180e /writerfilter
parentd6f093c8b0ba4590dfea0891b2399fff9cf67bbe (diff)
sw floattable: handle \nobrkwrptbl in the RTF filter
This is the RTF import/export for the functionality added in commit 08fa2903df1a7cf9a1647fcf967e4c8b57dad793 (sw floattable: add a DoNotBreakWrappedTables compat flag, 2023-05-24). (cherry picked from commit d785d26a5599d3d546b96958b0f1c6d5ed777a0d) Change-Id: I3c458cbe1f4b0947a94651cc205f2a7660d2ec2c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152412 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com> Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Diffstat (limited to 'writerfilter')
-rw-r--r--writerfilter/qa/cppunittests/rtftok/data/do-not-break-wrapped-tables.rtf10
-rw-r--r--writerfilter/qa/cppunittests/rtftok/rtfdispatchflag.cxx17
-rw-r--r--writerfilter/source/dmapper/SettingsTable.cxx3
-rw-r--r--writerfilter/source/rtftok/rtfdispatchflag.cxx8
-rw-r--r--writerfilter/source/rtftok/rtfdispatchvalue.cxx30
-rw-r--r--writerfilter/source/rtftok/rtfdocumentimpl.hxx3
6 files changed, 31 insertions, 40 deletions
diff --git a/writerfilter/qa/cppunittests/rtftok/data/do-not-break-wrapped-tables.rtf b/writerfilter/qa/cppunittests/rtftok/data/do-not-break-wrapped-tables.rtf
new file mode 100644
index 000000000000..f6ec013cb1dc
--- /dev/null
+++ b/writerfilter/qa/cppunittests/rtftok/data/do-not-break-wrapped-tables.rtf
@@ -0,0 +1,10 @@
+{\rtf1
+\paperw12240\paperh6203\margl1440\margr1440\margt1440\margb1440
+\pard\plain First paragraph\par
+\pard\plain\intbl A1\cell
+\pard\plain\trowd\trrh1812\tpvpara\tphcol\tposy10\tposx20\tdfrmtxtLeft30\tdfrmtxtRight40\cellx3828\row
+\pard\plain\intbl A2\cell
+\pard\plain\trowd\trrh1812\tpvpara\tphcol\tposy10\tposx20\tdfrmtxtLeft30\tdfrmtxtRight40\cellx3828\row
+\pard\plain Second paragraph.
+\par
+}
diff --git a/writerfilter/qa/cppunittests/rtftok/rtfdispatchflag.cxx b/writerfilter/qa/cppunittests/rtftok/rtfdispatchflag.cxx
index 810dc750d7d7..6d6b85be61c4 100644
--- a/writerfilter/qa/cppunittests/rtftok/rtfdispatchflag.cxx
+++ b/writerfilter/qa/cppunittests/rtftok/rtfdispatchflag.cxx
@@ -65,6 +65,23 @@ CPPUNIT_TEST_FIXTURE(Test, testFloatingTable)
nExpected = o3tl::convert(40, o3tl::Length::twip, o3tl::Length::mm100);
CPPUNIT_ASSERT_EQUAL(nExpected, nRightMargin);
}
+
+CPPUNIT_TEST_FIXTURE(Test, testDoNotBreakWrappedTables)
+{
+ // Given a document without \nobrkwrptbl:
+ // When importing that document:
+ loadFromURL(u"do-not-break-wrapped-tables.rtf");
+
+ // Then make sure that the matching compat flag is set:
+ uno::Reference<lang::XMultiServiceFactory> xDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xSettings(
+ xDocument->createInstance("com.sun.star.document.Settings"), uno::UNO_QUERY);
+ bool bDoNotBreakWrappedTables{};
+ xSettings->getPropertyValue("DoNotBreakWrappedTables") >>= bDoNotBreakWrappedTables;
+ // Without the accompanying fix in place, this test would have failed, the compat flag was not
+ // set.
+ CPPUNIT_ASSERT(bDoNotBreakWrappedTables);
+}
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/SettingsTable.cxx b/writerfilter/source/dmapper/SettingsTable.cxx
index 6ebdccddbfe7..586d8b752ef9 100644
--- a/writerfilter/source/dmapper/SettingsTable.cxx
+++ b/writerfilter/source/dmapper/SettingsTable.cxx
@@ -153,6 +153,7 @@ SettingsTable::SettingsTable(const DomainMapper& rDomainMapper)
m_pImpl->m_bDoNotUseHTMLParagraphAutoSpacing = true;
// Longer space sequence is opt-in for RTF, and not in OOXML.
m_pImpl->m_bLongerSpaceSequence = true;
+ m_pImpl->m_bDoNotBreakWrappedTables = true;
}
m_pImpl->m_pDocumentProtection = std::make_shared<DocumentProtection>();
m_pImpl->m_pWriteProtection = std::make_shared<WriteProtection>();
@@ -398,7 +399,7 @@ void SettingsTable::lcl_sprm(Sprm& rSprm)
m_pImpl->m_bGutterAtTop = nIntValue != 0;
break;
case NS_ooxml::LN_CT_Compat_doNotBreakWrappedTables:
- m_pImpl->m_bDoNotBreakWrappedTables = true;
+ m_pImpl->m_bDoNotBreakWrappedTables = nIntValue != 0;
break;
default:
{
diff --git a/writerfilter/source/rtftok/rtfdispatchflag.cxx b/writerfilter/source/rtftok/rtfdispatchflag.cxx
index bc3c3037e16d..0ca4d20645f1 100644
--- a/writerfilter/source/rtftok/rtfdispatchflag.cxx
+++ b/writerfilter/source/rtftok/rtfdispatchflag.cxx
@@ -34,11 +34,6 @@ namespace writerfilter::rtftok
{
bool RTFDocumentImpl::dispatchFloatingTableFlag(RTFKeyword nKeyword)
{
- if (!m_bBreakWrappedTables)
- {
- return false;
- }
-
// Positioned Wrapped Tables
OUString aParam;
switch (nKeyword)
@@ -1337,7 +1332,8 @@ RTFError RTFDocumentImpl::dispatchFlag(RTFKeyword nKeyword)
break;
case RTFKeyword::NOBRKWRPTBL:
{
- m_bBreakWrappedTables = true;
+ m_aSettingsTableSprms.set(NS_ooxml::LN_CT_Compat_doNotBreakWrappedTables,
+ new RTFValue(0));
}
break;
default:
diff --git a/writerfilter/source/rtftok/rtfdispatchvalue.cxx b/writerfilter/source/rtftok/rtfdispatchvalue.cxx
index f580ec69c5e9..d68c9bc2f3dc 100644
--- a/writerfilter/source/rtftok/rtfdispatchvalue.cxx
+++ b/writerfilter/source/rtftok/rtfdispatchvalue.cxx
@@ -1825,66 +1825,36 @@ RTFError RTFDocumentImpl::dispatchValue(RTFKeyword nKeyword, int nParam)
break;
case RTFKeyword::TPOSY:
{
- if (!m_bBreakWrappedTables)
- {
- break;
- }
-
putNestedAttribute(m_aStates.top().getTableRowSprms(), NS_ooxml::LN_CT_TblPrBase_tblpPr,
NS_ooxml::LN_CT_TblPPr_tblpY, new RTFValue(nParam));
}
break;
case RTFKeyword::TPOSX:
{
- if (!m_bBreakWrappedTables)
- {
- break;
- }
-
putNestedAttribute(m_aStates.top().getTableRowSprms(), NS_ooxml::LN_CT_TblPrBase_tblpPr,
NS_ooxml::LN_CT_TblPPr_tblpX, new RTFValue(nParam));
}
break;
case RTFKeyword::TDFRMTXTLEFT:
{
- if (!m_bBreakWrappedTables)
- {
- break;
- }
-
putNestedAttribute(m_aStates.top().getTableRowSprms(), NS_ooxml::LN_CT_TblPrBase_tblpPr,
NS_ooxml::LN_CT_TblPPr_leftFromText, new RTFValue(nParam));
}
break;
case RTFKeyword::TDFRMTXTRIGHT:
{
- if (!m_bBreakWrappedTables)
- {
- break;
- }
-
putNestedAttribute(m_aStates.top().getTableRowSprms(), NS_ooxml::LN_CT_TblPrBase_tblpPr,
NS_ooxml::LN_CT_TblPPr_rightFromText, new RTFValue(nParam));
}
break;
case RTFKeyword::TDFRMTXTTOP:
{
- if (!m_bBreakWrappedTables)
- {
- break;
- }
-
putNestedAttribute(m_aStates.top().getTableRowSprms(), NS_ooxml::LN_CT_TblPrBase_tblpPr,
NS_ooxml::LN_CT_TblPPr_topFromText, new RTFValue(nParam));
}
break;
case RTFKeyword::TDFRMTXTBOTTOM:
{
- if (!m_bBreakWrappedTables)
- {
- break;
- }
-
putNestedAttribute(m_aStates.top().getTableRowSprms(), NS_ooxml::LN_CT_TblPrBase_tblpPr,
NS_ooxml::LN_CT_TblPPr_bottomFromText, new RTFValue(nParam));
}
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.hxx b/writerfilter/source/rtftok/rtfdocumentimpl.hxx
index bf1ff2c30611..47fedc431bfb 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.hxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.hxx
@@ -991,9 +991,6 @@ private:
/// Are we after a \cell, but before a \row?
bool m_bAfterCellBeforeRow;
-
- /// Floating tables are single-page by default.
- bool m_bBreakWrappedTables = false;
};
} // namespace writerfilter::rtftok