Hi,
I have submitted a patch for review:
https://gerrit.libreoffice.org/2044
To pull it, you can do:
git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/44/2044/1
fdo#59953 RTF import: fix unreadable graphic and nested cell contents
There were two issues here:
1) c3b0f13546b30e5db3aecd311c7178e4e0933208 added a mechanism to work
around broken documents, but that didn't deal with nested tables.
Additionally, the check compared the max row width with the width of the
last cell, not the last row.
2) d276d3f3ae112a11c8cb5768650d147cbb94275e cleaned up implicit
horizontal merge detection, but didn't deal with valid documents, where
each row definition is available twice.
(cherry picked from commit e15f9ceafdf6e8b21cd315936ab44edfa91dd8b2)
Conflicts:
sw/qa/extras/rtfimport/rtfimport.cxx
Change-Id: I1a32ec2fcb0d1a8fca7a7bd26501d3daf17880c9
---
A sw/qa/extras/rtfimport/data/fdo59953.rtf
M sw/qa/extras/rtfimport/rtfimport.cxx
M writerfilter/source/dmapper/DomainMapperTableManager.cxx
M writerfilter/source/rtftok/rtfdocumentimpl.cxx
4 files changed, 34 insertions(+), 3 deletions(-)
diff --git a/sw/qa/extras/rtfimport/data/fdo59953.rtf b/sw/qa/extras/rtfimport/data/fdo59953.rtf
new file mode 100644
index 0000000..66432e3
--- /dev/null
+++ b/sw/qa/extras/rtfimport/data/fdo59953.rtf
@@ -0,0 +1,16 @@
+{\rtf1\ansi\deff0
+\trowd\cellx7384\cellx9652
+\pard\intbl\sl0
+A1
+\cell
+\pard\intbl\sl0\lin10
+B1
+\cell
+\trowd\cellx7384\cellx9652\row
+\trowd\cellx7384\cellx9652
+\pard\intbl A2\cell
+\pard\intbl B2\cell
+\trowd\cellx7384\cellx9652
+\row
+\pard\itap0\sl0\lin14\rin8 \par
+}
diff --git a/sw/qa/extras/rtfimport/rtfimport.cxx b/sw/qa/extras/rtfimport/rtfimport.cxx
index 3e15f55..18ae927 100644
--- a/sw/qa/extras/rtfimport/rtfimport.cxx
+++ b/sw/qa/extras/rtfimport/rtfimport.cxx
@@ -138,6 +138,7 @@
void testFdo58933();
void testFdo44053();
void testFdo58646line();
+ void testFdo59953();
CPPUNIT_TEST_SUITE(Test);
#if !defined(MACOSX) && !defined(WNT)
@@ -226,6 +227,7 @@
{"fdo58933.rtf", &Test::testFdo58933},
{"fdo44053.rtf", &Test::testFdo44053},
{"fdo58646line.rtf", &Test::testFdo58646line},
+ {"fdo59953.rtf", &Test::testFdo59953},
};
for (unsigned int i = 0; i < SAL_N_ELEMENTS(aMethods); ++i)
{
@@ -1073,6 +1075,16 @@
getParagraph(1, "foo\nbar");
}
+void Test::testFdo59953()
+{
+ uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xTables(xTextTablesSupplier->getTextTables(),
uno::UNO_QUERY);
+ uno::Reference<text::XTextTable> xTable(xTables->getByIndex(0), uno::UNO_QUERY);
+ // Cell width of A1 was 4998 (e.g. not set / not wide enough, ~50% of total width)
+ uno::Reference<table::XTableRows> xTableRows(xTable->getRows(), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sal_Int16(7650), getProperty< uno::Sequence<text::TableColumnSeparator>
(xTableRows->getByIndex(0), "TableColumnSeparators")[0].Position);
+}
+
CPPUNIT_TEST_SUITE_REGISTRATION(Test);
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/writerfilter/source/dmapper/DomainMapperTableManager.cxx
b/writerfilter/source/dmapper/DomainMapperTableManager.cxx
index 448d6e1..52fbd0c 100644
--- a/writerfilter/source/dmapper/DomainMapperTableManager.cxx
+++ b/writerfilter/source/dmapper/DomainMapperTableManager.cxx
@@ -222,7 +222,10 @@
break;
case NS_ooxml::LN_CT_TblGridBase_gridCol:
{
- getCurrentGrid()->push_back( ConversionHelper::convertTwipToMM100( nIntValue ) );
+ if (nIntValue == -1)
+ getCurrentGrid()->clear();
+ else
+ getCurrentGrid()->push_back( ConversionHelper::convertTwipToMM100( nIntValue )
);
}
break;
case NS_ooxml::LN_CT_TcPrBase_vMerge : //vertical merge
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index a58e139..366959e 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -1718,8 +1718,7 @@
case RTF_NESTROW:
{
// If the right edge of the last cell (row width) is smaller than the width of
some other row, mimic the WW8 import: add a fake cell.
- RTFValue::Pointer_t pLastCellx =
m_aStates.top().aTableRowSprms.find(NS_ooxml::LN_CT_TblGridBase_gridCol, false);
- if (pLastCellx.get() && pLastCellx->getInt() < m_nCellxMax)
+ if (nKeyword == RTF_ROW && m_aStates.top().nCellX < m_nCellxMax)
dispatchValue(RTF_CELLX, m_nCellxMax);
if (m_aStates.top().nCells)
@@ -2139,6 +2138,7 @@
break;
case RTF_TROWD:
m_aStates.top().aTableRowSprms = m_aDefaultState.aTableRowSprms;
+ m_aStates.top().aTableRowSprms.set(NS_ooxml::LN_CT_TblGridBase_gridCol,
RTFValue::Pointer_t(new RTFValue(-1)), false);
m_aStates.top().aTableRowAttributes = m_aDefaultState.aTableRowAttributes;
m_aStates.top().nCellX = 0;
// In case the table definition is in the middle of the row
--
To view, visit https://gerrit.libreoffice.org/2044
To unsubscribe, visit https://gerrit.libreoffice.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I1a32ec2fcb0d1a8fca7a7bd26501d3daf17880c9
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: libreoffice-4-0
Gerrit-Owner: Miklos Vajna <vmiklos@suse.cz>
Context
- [PATCH libreoffice-4-0] fdo#59953 RTF import: fix unreadable graphic and nested cell... · Miklos Vajna (via Code Review)
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.