diff options
| author | Michael Williamson <mike@zwobble.org> | 2025-09-09 09:17:22 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2025-09-09 09:17:22 +0100 |
| commit | 5ec3c49c22c3448cd0583be74512129c221cd030 (patch) | |
| tree | 5066884e2841458c63f8e811e96430db19d8a5ee | |
| parent | 033466fcb57ba2f4c0f876ed8dec705de5c68333 (diff) | |
Test reading of table rows when non-rows are present
| -rw-r--r-- | lib/docx/body-reader.js | 9 | ||||
| -rw-r--r-- | test/docx/body-reader.tests.js | 38 |
2 files changed, 46 insertions, 1 deletions
diff --git a/lib/docx/body-reader.js b/lib/docx/body-reader.js index 776cd5d..e6a70e2 100644 --- a/lib/docx/body-reader.js +++ b/lib/docx/body-reader.js @@ -521,6 +521,7 @@ function BodyReader(options) { return row.type !== documents.types.tableRow; }); if (unexpectedNonRows) { + removeVMergeProperties(rows); return elementResultWithMessages(rows, [warning( "unexpected non-row element in table, cell merging may be incorrect" )]); @@ -563,6 +564,14 @@ function BodyReader(options) { return elementResult(rows); } + function removeVMergeProperties(rows) { + rows.forEach(function(row) { + row.children.forEach(function(cell) { + delete cell._vMerge; + }); + }); + } + function readDrawingElement(element) { var blips = element .getElementsByTagName("a:graphic") diff --git a/test/docx/body-reader.tests.js b/test/docx/body-reader.tests.js index c60ef0d..f6c986f 100644 --- a/test/docx/body-reader.tests.js +++ b/test/docx/body-reader.tests.js @@ -1305,10 +1305,46 @@ test("when row is marked as deleted in row properties then row is ignored", func }); test("warning if non-row in table", function() { + // Include normal rows to ensure they're still read correctly. var tableXml = new XmlElement("w:tbl", {}, [ - new XmlElement("w:p") + xml.element("w:tr", {}, [ + xml.element("w:tc", {}, [ + xml.element("w:p", {}, [ + runOfText("Row 1") + ]) + ]) + ]), + new XmlElement("w:p"), + xml.element("w:tr", {}, [ + xml.element("w:tc", {}, [ + xml.element("w:p", {}, [ + runOfText("Row 2") + ]) + ]) + ]) ]); var result = readXmlElement(tableXml); + assert.deepEqual(result.value, new documents.Table([ + new documents.TableRow([ + new documents.TableCell([ + new documents.Paragraph([ + new documents.Run([ + new documents.Text("Row 1") + ]) + ]) + ]) + ]), + new documents.Paragraph([]), + new documents.TableRow([ + new documents.TableCell([ + new documents.Paragraph([ + new documents.Run([ + new documents.Text("Row 2") + ]) + ]) + ]) + ]) + ])); assert.deepEqual(result.messages, [warning("unexpected non-row element in table, cell merging may be incorrect")]); }); |
