summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Kaganski <mike.kaganski@collabora.com>2017-03-27 17:35:45 +0300
committerAndras Timar <andras.timar@collabora.com>2017-03-27 20:58:35 +0200
commit334b06f5a44f9a5a4e08a8c9c8929a75c363fd96 (patch)
tree38339759a185f332a8cd9ee99b5aef6a1fbe0279
parentffa13328287f57c25204adddee3a0d12c25ff959 (diff)
tdf#106799 WW8: Accept TTP Mark without Cell Mark
Paragraph mark of inner table (0x0D) sometimes has sprmPFInnerTtp, but no sprmPFInnerTableCell. This still counts as cell end (at least, MS Word treats it that way). Unit test included. Reviewed-on: https://gerrit.libreoffice.org/35763 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com> (cherry picked from commit 59af9cbbccee600408c89e872d548d153523ab1f) Change-Id: I5589cdd486c03ca4567d61882826cc7c245a40c9
-rw-r--r--sw/qa/extras/ww8import/data/tdf106799.docbin0 -> 11264 bytes
-rw-r--r--sw/qa/extras/ww8import/ww8import.cxx15
-rw-r--r--sw/source/filter/ww8/ww8par.cxx4
3 files changed, 18 insertions, 1 deletions
diff --git a/sw/qa/extras/ww8import/data/tdf106799.doc b/sw/qa/extras/ww8import/data/tdf106799.doc
new file mode 100644
index 000000000000..0637e8cce692
--- /dev/null
+++ b/sw/qa/extras/ww8import/data/tdf106799.doc
Binary files differ
diff --git a/sw/qa/extras/ww8import/ww8import.cxx b/sw/qa/extras/ww8import/ww8import.cxx
index 3220a523740a..a3c809cd2dac 100644
--- a/sw/qa/extras/ww8import/ww8import.cxx
+++ b/sw/qa/extras/ww8import/ww8import.cxx
@@ -562,6 +562,21 @@ DECLARE_WW8IMPORT_TEST(testTdf106291, "tdf106291.doc")
CPPUNIT_ASSERT(cellHeight.toInt32() > 200); // height might depend on font size
}
+DECLARE_WW8IMPORT_TEST(testTdf106799, "tdf106799.doc")
+{
+ sal_Int32 nCellWidths[3][4] = { { 9530, 0, 0, 0 },{ 2382, 2382, 2382, 2384 },{ 2382, 2382, 2382, 2384 } };
+ sal_Int32 nCellTxtLns[3][4] = { { 1, 0, 0, 0 },{ 1, 0, 0, 0},{ 1, 1, 1, 1 } };
+ // Table was distorted because of missing sprmPFInnerTableCell at paragraph marks (0x0D) with sprmPFInnerTtp
+ for (sal_Int32 nRow : { 0, 1, 2 })
+ for (sal_Int32 nCell : { 0, 1, 2, 3 })
+ {
+ OString cellXPath("/root/page/body/tab/row/cell/tab/row[" + OString::number(nRow+1) + "]/cell[" + OString::number(nCell+1) + "]/");
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(cellXPath.getStr(), nCellWidths[nRow][nCell], parseDump(cellXPath + "infos/bounds", "width").toInt32());
+ if (nCellTxtLns[nRow][nCell] != 0)
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(cellXPath.getStr(), nCellTxtLns[nRow][nCell], parseDump(cellXPath + "txt/Text", "nLength").toInt32());
+ }
+}
+
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/filter/ww8/ww8par.cxx b/sw/source/filter/ww8/ww8par.cxx
index 71e1acabd799..4ffe803ea3bf 100644
--- a/sw/source/filter/ww8/ww8par.cxx
+++ b/sw/source/filter/ww8/ww8par.cxx
@@ -3679,7 +3679,9 @@ bool SwWW8ImplReader::ReadChar(long nPosCp, long nCpOfs)
bParaMark = false;
}
}
- else if (m_bWasTabCellEnd)
+ // tdf#106799: We expect TTP marks to be also cell marks,
+ // but sometimes sprmPFInnerTtp comes without sprmPFInnerTableCell
+ else if (m_bWasTabCellEnd || m_bWasTabRowEnd)
{
TabCellEnd();
bParaMark = false;