sw/qa/extras/ooxmlexport/data/ooo106020-1.odt |binary sw/qa/extras/ooxmlexport/ooxmlexport5.cxx | 8 ++++++++ sw/source/filter/ww8/docxattributeoutput.cxx | 10 ++++++---- 3 files changed, 14 insertions(+), 4 deletions(-)
New commits: commit 20e64b6012442749d01810869229613ea36be3a9 Author: Caolán McNamara <caol...@redhat.com> Date: Sat Jun 20 18:04:12 2015 +0100 fix assert on exporting ooo106020-1.odt to docx the dread msword column limit Change-Id: Icbf7fc396de62286d523516da815dabf62336567 diff --git a/sw/qa/extras/ooxmlexport/data/ooo106020-1.odt b/sw/qa/extras/ooxmlexport/data/ooo106020-1.odt new file mode 100644 index 0000000..9cc774b Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/ooo106020-1.odt differ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx index b655b99d..3df813e 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx @@ -858,6 +858,14 @@ DECLARE_OOXMLEXPORT_TEST(fdo60957, "fdo60957-2.docx") assertXPath(pXmlDoc, "//w:tbl", 2); } +//This has more cells than msword supports, we must balance the +//number of cell start and ends +DECLARE_OOXMLEXPORT_TEST(testOO106020, "ooo106020-1.odt") +{ + if (xmlDocPtr pXmlDoc = parseExport("word/document.xml")) + assertXPath(pXmlDoc, "//w:tbl", 1); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index 989a717..f5dd271 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -688,16 +688,18 @@ void DocxAttributeOutput::EndSdtBlock() m_pSerializer->endElementNS( XML_w, XML_sdt ); } +#define MAX_CELL_IN_WORD 62 + void DocxAttributeOutput::SyncNodelessCells(ww8::WW8TableNodeInfoInner::Pointer_t pInner, sal_Int32 nCell, sal_uInt32 nRow) { sal_Int32 nOpenCell = lastOpenCell.back(); - if (nOpenCell != -1 && nOpenCell != nCell) + if (nOpenCell != -1 && nOpenCell != nCell && nOpenCell < MAX_CELL_IN_WORD) EndTableCell(pInner, nOpenCell, nRow); sal_Int32 nClosedCell = lastClosedCell.back(); for (sal_Int32 i = nClosedCell+1; i < nCell; ++i) { - if (i >= 62) //words limit + if (i >= MAX_CELL_IN_WORD) break; if (i == 0) @@ -725,11 +727,11 @@ void DocxAttributeOutput::FinishTableRowCell( ww8::WW8TableNodeInfoInner::Pointe // so simply if there are more columns, don't close the last one msoffice will handle // and merge the contents of the remaining ones into it (since we don't close the cell // here, following ones will not be opened) - const bool limitWorkaround = (nCell >= 62 && !pInner->isEndOfLine()); + const bool limitWorkaround = (nCell >= MAX_CELL_IN_WORD && !pInner->isEndOfLine()); const bool bEndCell = pInner->isEndOfCell() && !limitWorkaround; const bool bEndRow = pInner->isEndOfLine(); - if ( bEndCell ) + if (bEndCell) { while (pInner->getDepth() < m_tableReference->m_nTableDepth) {
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits