sw/qa/extras/ooxmlexport/data/tdf90681.odt |binary sw/qa/extras/ooxmlexport/ooxmlexport5.cxx | 9 +++++++++ sw/source/filter/ww8/docxattributeoutput.cxx | 15 ++++++++++++++- sw/source/filter/ww8/docxattributeoutput.hxx | 2 ++ 4 files changed, 25 insertions(+), 1 deletion(-)
New commits: commit 9657455d985ecce30c4e9d3d799212e7cc8aa57a Author: Caolán McNamara <caol...@redhat.com> Date: Fri Apr 17 15:31:19 2015 +0100 Resolves: tdf#90681 table model can have truly empty cells old school complex tables can create a table model where a cell exists in the table but there are no paragraphs in it. -------- | A | C | ---- | B |*D*| -------- i.e. normally for the above there are 4 nodes which get exported, even though C and D are merged. But it can be the case that there are only three nodes, and *D* is missing be conservative for now and only do this for the obviously broken no cell start but cell end case and incrementally build up the test-cases Change-Id: I5703595f61688a66b7fac7f3905ace0c207c9875 diff --git a/sw/qa/extras/ooxmlexport/data/tdf90681.odt b/sw/qa/extras/ooxmlexport/data/tdf90681.odt new file mode 100644 index 0000000..009e006 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf90681.odt differ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx index f04e8b9..bece25f 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx @@ -228,6 +228,15 @@ DECLARE_OOXMLEXPORT_TEST(testFloatingTable, "fdo77887.docx") } +DECLARE_OOXMLEXPORT_TEST(testOldComplexMerge, "tdf90681.odt") +{ + xmlDocPtr pXmlDoc = parseExport("word/document.xml"); + + if (!pXmlDoc) + return; + + assertXPath(pXmlDoc, "//w:vMerge[4]", "val", "continue"); +} DECLARE_OOXMLEXPORT_TEST(testTablePreferredWidth, "tablePreferredWidth.docx") { diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index c5404f4..e29339c 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -705,11 +705,21 @@ void DocxAttributeOutput::FinishTableRowCell( ww8::WW8TableNodeInfoInner::Pointe // and merge the contents of the remaining ones into it (since we don't close the cell // here, following ones will not be opened) bool limitWorkaround = ( pInner->getCell() >= 62 && !pInner->isEndOfLine()); + const bool bEndCell = pInner->isEndOfCell() && !limitWorkaround; + const bool bStartCell = bEndCell && !m_nCellsOpen; - if ( pInner->isEndOfCell() && !limitWorkaround ) + if ( bEndCell ) { if ( bForceEmptyParagraph ) + { + if (bStartCell) + { + const sal_uInt32 nCol = pInner->getCell(); + StartTableCell(pInner, nCol+1, nRow); + } + m_pSerializer->singleElementNS( XML_w, XML_p, FSEND ); + } EndTableCell(); } @@ -2986,6 +2996,7 @@ void DocxAttributeOutput::StartTableCell( ww8::WW8TableNodeInfoInner::Pointer_t { InitTableHelper( pTableTextNodeInfoInner ); + ++m_nCellsOpen; m_pSerializer->startElementNS( XML_w, XML_tc, FSEND ); // Write the cell properties here @@ -3007,6 +3018,7 @@ void DocxAttributeOutput::EndTableCell( ) EndParaSdtBlock(); m_pSerializer->endElementNS( XML_w, XML_tc ); + --m_nCellsOpen; m_bBtLr = false; m_tableReference->m_bTableCellOpen = false; @@ -8302,6 +8314,7 @@ DocxAttributeOutput::DocxAttributeOutput( DocxExport &rExport, FSHelperPtr pSeri , m_nRunSdtPrToken(0) , m_nStateOfFlyFrame( FLY_NOT_PROCESSED ) , m_bParagraphSdtHasId(false) + , m_nCellsOpen(0) { } diff --git a/sw/source/filter/ww8/docxattributeoutput.hxx b/sw/source/filter/ww8/docxattributeoutput.hxx index 2b253d2..ff49541 100644 --- a/sw/source/filter/ww8/docxattributeoutput.hxx +++ b/sw/source/filter/ww8/docxattributeoutput.hxx @@ -945,6 +945,8 @@ private: OUString m_aRunSdtPrAlias; /// Currently paragraph SDT has a <w:id> child element. bool m_bParagraphSdtHasId; + /// Checking for balanced table cells start/ends + sal_Int32 m_nCellsOpen; std::map<SvxBoxItemLine, css::table::BorderLine2> m_aTableStyleConf;
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits