summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-05-10 21:29:20 +0100
committerMichael Williamson <mike@zwobble.org>2016-05-10 21:29:20 +0100
commit786ed7e34f5d6fe8adf80f7f5bae7abc6a037740 (patch)
tree7d90a6fb2753aed42f2c63510306b67366bdb730
parent1417c93bebe0426be97d8f334fc279a6eb10deda (diff)
Avoid merging in non-conforming cells
-rw-r--r--lib/docx/body-reader.js3
-rw-r--r--tests/docx/body-reader.tests.js12
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")