diff options
| author | Michael Williamson <mike@zwobble.org> | 2025-09-09 09:56:57 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2025-09-09 09:57:13 +0100 |
| commit | 7d96c9aee67b7de9f8acd5139f34bfdb9f01f798 (patch) | |
| tree | a913d9ecdff125f01c1cf4131fafffbe13d2b9fe /src | |
| parent | 900b7d9f2bcd8c1f898f45b2eef3180dc4a88cde (diff) | |
Test reading of table rows when non-rows are present
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java | 11 | ||||
| -rw-r--r-- | src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java | 39 |
2 files changed, 47 insertions, 3 deletions
diff --git a/src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java b/src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java index 436d5d9..649a47b 100644 --- a/src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java +++ b/src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java @@ -500,6 +500,7 @@ class StatefulBodyXmlReader { private ReadResult calculateRowspans(List<DocumentElement> rows) { Optional<String> error = checkTableRows(rows); if (error.isPresent()) { + rows = removeUnmergedTableCells(rows); return ReadResult.withWarning(rows, error.get()); } @@ -561,6 +562,16 @@ class StatefulBodyXmlReader { return Optional.empty(); } + private List<DocumentElement> removeUnmergedTableCells(List<DocumentElement> rows) { + return Lists.eagerMap( + rows, + transformElementsOfType( + UnmergedTableCell.class, + cell -> new TableCell(1, cell.colspan, cell.children) + ) + ); + } + private ReadResult readTableRow(XmlElement element) { XmlElementLike properties = element.findChildOrEmpty("w:trPr"); diff --git a/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java b/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java index 2c8c96c..74a4e71 100644 --- a/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java +++ b/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java @@ -1531,14 +1531,47 @@ public class BodyXmlTests { @Test public void warningIfNonRowInTable() { + // Include normal rows to ensure they're still read correctly. XmlElement element = element("w:tbl", list( - element("w:p") + element("w:tr", list( + element("w:tc", list( + element("w:p", list( + runXml("Row 1") + )) + )) + )), + element("w:p"), + element("w:tr", list( + element("w:tc", list( + element("w:p", list( + runXml("Row 2") + )) + )) + )) )); + InternalResult<DocumentElement> result = read(bodyReader(), element); + assertThat( - read(bodyReader(), element), + result, isInternalResult( - deepEquals(table(list(paragraph()))), + deepEquals(table(list( + tableRow(list( + tableCell(withChildren( + paragraph(withChildren( + runWithText("Row 1") + )) + )) + )), + paragraph(), + tableRow(list( + tableCell(withChildren( + paragraph(withChildren( + runWithText("Row 2") + )) + )) + )) + ))), list("unexpected non-row element in table, cell merging may be incorrect") ) ); |
