diff options
author | Vasily Melenchuk <vasily.melenchuk@cib.de> | 2022-03-30 13:09:19 +0300 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2022-04-01 08:38:32 +0200 |
commit | 4ef50c9ac03960c694c50e5a7488693422503357 (patch) | |
tree | ff3b8b3f05e9d75f602a65f5731a5acd30e22a93 /sw/qa | |
parent | 2143fa31b9035c7c2cf302ccd3907d0853132e8f (diff) |
tdf#116358: rtf import: "keep with next" also affects table rows
Like in DOCX for RTF there is exactly same behavior for paragraphs
inside cells. They do affect table breaking over the pages.
So:
1) Enable "TableRowKeep" doc setting for RTF documents.
2) Do not ignore \keepn token for paragraphs in tables.
Change-Id: I11e45ca9114c792b8cdbeb77dd51359717129651
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132305
Tested-by: Jenkins
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Signed-off-by: Xisco Fauli <xiscofauli@libreoffice.org>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132355
Diffstat (limited to 'sw/qa')
-rw-r--r-- | sw/qa/extras/rtfexport/data/tdf116358.rtf | 116 | ||||
-rw-r--r-- | sw/qa/extras/rtfexport/rtfexport4.cxx | 30 |
2 files changed, 146 insertions, 0 deletions
diff --git a/sw/qa/extras/rtfexport/data/tdf116358.rtf b/sw/qa/extras/rtfexport/data/tdf116358.rtf new file mode 100644 index 000000000000..09a9b3f8ead8 --- /dev/null +++ b/sw/qa/extras/rtfexport/data/tdf116358.rtf @@ -0,0 +1,116 @@ +{\rtf1\ansi\deff3\adeflang1025
+{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}{\f1\froman\fprq2\fcharset2 Symbol;}{\f2\fswiss\fprq2\fcharset0 Arial;}{\f3\froman\fprq2\fcharset204 Liberation Serif{\*\falt Times New Roman};}{\f4\froman\fprq2\fcharset204 Times New Roman;}{\f5\froman\fprq2\fcharset204 Liberation Sans{\*\falt Arial};}{\f6\fnil\fprq2\fcharset204 Microsoft YaHei;}{\f7\fnil\fprq2\fcharset204 0;}{\f8\fnil\fprq2\fcharset204 Times New Roman;}{\f9\fnil\fprq2\fcharset204 Lucida Sans;}}
+{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}
+{\stylesheet{\s0\snext0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052 Normal;}
+{\s15\sbasedon0\snext16\rtlch\af9\afs28\alang1081 \ltrch\lang2057\langfe2052\hich\af5\loch\ql\widctlpar\hyphpar0\sb240\sa120\keepn\ltrpar\cf0\f5\fs28\lang2057\kerning1\dbch\af6\langfe2052 Heading;}
+{\s16\sbasedon0\snext16\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\sl276\slmult1\ql\widctlpar\hyphpar0\sb0\sa140\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052 Text Body;}
+{\s17\sbasedon16\snext17\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\sl276\slmult1\ql\widctlpar\hyphpar0\sb0\sa140\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052 List;}
+{\s18\sbasedon0\snext18\rtlch\af9\afs24\alang1081\ai \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\sb120\sa120\ltrpar\cf0\f3\fs24\lang2057\i\kerning1\dbch\af7\langfe2052 Caption;}
+{\s19\sbasedon0\snext19\rtlch\af9\afs24\alang255 \ltrch\lang255\langfe255\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang255\kerning1\dbch\af7\langfe255 Index;}
+{\s20\sbasedon0\snext20\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\nowidctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052 Table Contents;}
+}{\*\generator LibreOfficeDev/7.4.0.0.alpha0$Windows_X86_64 LibreOffice_project/1e1cab9d5a0728c13209aeed95b6802175799a0a}{\info{\creatim\yr2022\mo3\dy30\hr9\min3}{\revtim\yr2022\mo3\dy30\hr9\min11}{\printim\yr0\mo0\dy0\hr0\min0}}{\*\userprops}\deftab709
+\hyphauto1\viewscale100
+{\*\pgdsctbl
+{\pgdsc0\pgdscuse451\pgwsxn11906\pghsxn16838\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\pgdscnxt0 Default Page Style;}}
+\formshade\paperh16838\paperw11906\margl1134\margr1134\margt1134\margb1134\sectd\sbknone\pgndec\sftnnar\saftnnrlc\sectunlocked1\pgwsxn11906\pghsxn16838\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\ftnbj\ftnstart1\ftnrstcont\ftnnar\aenddoc\aftnrstcont\aftnstart1\aftnnrlc
+{\*\ftnsep\chftnsep}\pgndec\pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052{\loch
+A}
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch
+
+\par \trowd\trql\trleft-15\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clbrdrt\brdrs\brdrw10\brdrcf1\clpadfl3\clpadl55\clbrdrl\brdrs\brdrw10\brdrcf1\clpadft3\clpadt55\clbrdrb\brdrs\brdrw10\brdrcf1\clpadfb3\clpadb55\clbrdrr\brdrs\brdrw10\brdrcf1\clpadfr3\clpadr55\cellx9623\pard\plain \s20\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\nowidctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch\keepn\intbl\nowidctlpar\rtlch\af8\afs24 \ltrch\hich\af4\loch\cf1\fs24\f4\dbch\af8\loch
+\cell\row\pard\trowd\trql\trleft-15\ltrrow\trpaddft3\trpaddt0\trpaddfl3\trpaddl0\trpaddfb3\trpaddb0\trpaddfr3\trpaddr0\clpadfl3\clpadl55\clbrdrl\brdrs\brdrw10\brdrcf1\clpadft3\clpadt55\clbrdrb\brdrs\brdrw10\brdrcf1\clpadfb3\clpadb55\clbrdrr\brdrs\brdrw10\brdrcf1\clpadfr3\clpadr55\cellx9623\pard\plain \s20\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\nowidctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch\keepn\intbl\nowidctlpar\rtlch\af8\afs24 \ltrch\hich\af4\loch\cf1\fs24\f4\dbch\af8\loch
+\cell\row\pard\pard\plain \s0\rtlch\af9\afs24\alang1081 \ltrch\lang2057\langfe2052\hich\af3\loch\ql\widctlpar\hyphpar0\ltrpar\cf0\f3\fs24\lang2057\kerning1\dbch\af7\langfe2052\loch\nowidctlpar{\loch
+b}
+\par }
\ No newline at end of file diff --git a/sw/qa/extras/rtfexport/rtfexport4.cxx b/sw/qa/extras/rtfexport/rtfexport4.cxx index 55ae121a695b..32f1a5f88cad 100644 --- a/sw/qa/extras/rtfexport/rtfexport4.cxx +++ b/sw/qa/extras/rtfexport/rtfexport4.cxx @@ -25,6 +25,7 @@ #include <pam.hxx> #include <fmtanchr.hxx> #include <frameformats.hxx> +#include <wrtsh.hxx> using namespace css; @@ -402,6 +403,35 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf126309) static_cast<style::ParagraphAdjust>(getProperty<sal_Int16>(getParagraph(1), "ParaAdjust"))); } +DECLARE_RTFEXPORT_TEST(testTdf116358, "tdf116358.rtf") +{ + SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwWrtShell* pWrtShell = pTextDoc->GetDocShell()->GetWrtShell(); + CPPUNIT_ASSERT(pWrtShell); + + // Insert a paragraph break + pWrtShell->SplitNode(false); + + // Entire table should go to page 2, no remains on first page + xmlDocUniquePtr pDump = parseLayoutDump(); + { + xmlXPathObjectPtr pXmlObj = getXPathNode(pDump, "/root/page[1]/body/tab"); + xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval; + sal_Int32 tablesOnPage = xmlXPathNodeSetGetLength(pXmlNodes); + xmlXPathFreeObject(pXmlObj); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0), tablesOnPage); + } + + { + xmlXPathObjectPtr pXmlObj = getXPathNode(pDump, "/root/page[2]/body/tab"); + xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval; + sal_Int32 tablesOnPage = xmlXPathNodeSetGetLength(pXmlNodes); + xmlXPathFreeObject(pXmlObj); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), tablesOnPage); + } +} + CPPUNIT_TEST_FIXTURE(Test, testGutterLeft) { load(mpTestDocumentPath, "gutter-left.rtf"); |