diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-05-10 21:29:20 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-05-10 21:29:20 +0100 |
| commit | 786ed7e34f5d6fe8adf80f7f5bae7abc6a037740 (patch) | |
| tree | 7d90a6fb2753aed42f2c63510306b67366bdb730 | |
| parent | 1417c93bebe0426be97d8f334fc279a6eb10deda (diff) | |
Avoid merging in non-conforming cells
| -rw-r--r-- | lib/docx/body-reader.js | 3 | ||||
| -rw-r--r-- | tests/docx/body-reader.tests.js | 12 |
2 files changed, 14 insertions, 1 deletions
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") |
