From 786ed7e34f5d6fe8adf80f7f5bae7abc6a037740 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Tue, 10 May 2016 21:29:20 +0100 Subject: Avoid merging in non-conforming cells --- lib/docx/body-reader.js | 3 ++- tests/docx/body-reader.tests.js | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/docx/body-reader.js b/lib/docx/body-reader.js index 70d5402..0849aa1 100644 --- a/lib/docx/body-reader.js +++ b/lib/docx/body-reader.js @@ -273,6 +273,7 @@ function BodyReader(options) { row.children.forEach(function(cell) { if (cell._vMerge === "continue" && columns[cellIndex]) { columns[cellIndex].rowSpan++; + cell._delete = true; } else { columns[cellIndex] = cell; } @@ -282,7 +283,7 @@ function BodyReader(options) { rows.forEach(function(row, rowIndex) { row.children = row.children.filter(function(cell) { - return cell._vMerge !== "continue"; + return !cell._delete; }); row.children.forEach(function(cell) { delete cell._vMerge; diff --git a/tests/docx/body-reader.tests.js b/tests/docx/body-reader.tests.js index 51d46fe..10554ed 100644 --- a/tests/docx/body-reader.tests.js +++ b/tests/docx/body-reader.tests.js @@ -328,6 +328,18 @@ describe("readXmlElement: ", function() { ])); }); + test("no merging if merged cells do not line up", function() { + var tableXml = new XmlElement("w:tbl", {}, [ + row(emptyCell(gridSpan("2"), vMerge("restart"))), + row(emptyCell(), emptyCell(vMerge("continue"))) + ]); + var result = readXmlElement(tableXml); + assert.deepEqual(result.value, new documents.Table([ + docRow([docEmptyCell({colSpan: 2})]), + docRow([docEmptyCell(), docEmptyCell()]), + ])); + }); + test("warning if non-row in table", function() { var tableXml = new XmlElement("w:tbl", {}, [ new XmlElement("w:p") -- cgit v1.2.3