diff options
author | Mike Kaganski <mike.kaganski@collabora.com> | 2017-03-27 17:35:45 +0300 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2017-03-27 20:58:35 +0200 |
commit | 334b06f5a44f9a5a4e08a8c9c8929a75c363fd96 (patch) | |
tree | 38339759a185f332a8cd9ee99b5aef6a1fbe0279 | |
parent | ffa13328287f57c25204adddee3a0d12c25ff959 (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.doc | bin | 0 -> 11264 bytes | |||
-rw-r--r-- | sw/qa/extras/ww8import/ww8import.cxx | 15 | ||||
-rw-r--r-- | sw/source/filter/ww8/ww8par.cxx | 4 |
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 Binary files differnew file mode 100644 index 000000000000..0637e8cce692 --- /dev/null +++ b/sw/qa/extras/ww8import/data/tdf106799.doc 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; |