Kaydet (Commit) f63a60f5 authored tarafından László Németh's avatar László Németh

tdf#118691 DOCX import: fix table loss caused by <w:cr>

According to the OOXML standard, <w:cr> (carriage return –
Unicode character 000D) is equivalent to a break
with null type and clear attributes, so we handle it as
a <w:br/>, instead of endOfParagraph, fixing
losing table paragraphs and tables containing <w:cr/>.

Note: It seems, MSO cannot handle carriage return characters
in table cells correctly. It shows squares (unknown
characters) without line break there. Copying this text to
a non-table paragraph in MSO, we get the correct layout with
line breaks. Copying this text with carriage return characters
back to a table cell, we get squares again. With this LO fix,
it will be possible to fix the bad tables edited by MS Word
by using LO, because LibreOffice import/export converts all
<w:cr>s to <w:br>s (as before, but now without destroying
the structure of the tables).

Change-Id: Iee42f71e9a00531353582e7127c2c212ea0890d0
Reviewed-on: https://gerrit.libreoffice.org/60585
Tested-by: Jenkins
Reviewed-by: 's avatarLászló Németh <nemeth@numbertext.org>
üst 5571d3c8
......@@ -731,6 +731,18 @@ DECLARE_OOXMLEXPORT_TEST(testTrackChangesEmptyParagraphsInADeletion, "testTrackC
assertXPath(pXmlDoc, "/w:document/w:body/w:p[" + OString::number(i) + "]/w:pPr/w:rPr/w:del");
}
DECLARE_OOXMLEXPORT_TEST(testTdf118691, "tdf118691.docx")
{
uno::Reference<text::XTextTablesSupplier> xTablesSupplier(mxComponent, uno::UNO_QUERY);
uno::Reference<container::XIndexAccess> xTables(xTablesSupplier->getTextTables(),
uno::UNO_QUERY);
// Text "Before" stays in the first cell, not removed before the table because of
// bad handling of <w:cr>
uno::Reference<text::XTextTable> xTable(xTables->getByIndex(0), uno::UNO_QUERY);
uno::Reference<text::XTextRange> xCell(xTable->getCellByName("A1"), uno::UNO_QUERY);
CPPUNIT_ASSERT_EQUAL(OUString("Before\nAfter"), xCell->getString());
}
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
......@@ -17942,8 +17942,8 @@
<resource name="CT_PgNum" resource="Stream">
<action name="end" action="pgNum"/>
</resource>
<resource name="CT_Cr" resource="Stream">
<action name="end" action="endOfParagraph"/>
<resource name="CT_Cr" resource="Properties">
<action name="end" action="handleBreak"/>
</resource>
<resource name="CT_Tab" resource="Stream">
<action name="end" action="tab"/>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment