diff options
| author | Michael Williamson <mike@zwobble.org> | 2025-06-08 14:18:25 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2025-06-08 14:18:25 +0100 |
| commit | 0e76641e1f84622e3441b1aadd954f7707b0f16f (patch) | |
| tree | a632e4b18647e3519db749d875087be5501305c6 /src | |
| parent | 7fa2cbcfafd1acf12d288a578ee52dc893d2b874 (diff) | |
Ignore deleted table rows
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java | 7 | ||||
| -rw-r--r-- | src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java | 41 |
2 files changed, 48 insertions, 0 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 30579ff..76d01b9 100644 --- a/src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java +++ b/src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java @@ -562,6 +562,13 @@ class StatefulBodyXmlReader { private ReadResult readTableRow(XmlElement element) { XmlElementLike properties = element.findChildOrEmpty("w:trPr"); + + // See 17.13.5.12 del (Deleted Table Row) of ECMA-376 4th edition Part 1 + boolean deleted = properties.hasChild("w:del"); + if (deleted) { + return ReadResult.EMPTY_SUCCESS; + } + boolean isHeader = properties.hasChild("w:tblHeader"); return readElements(element.getChildren()) .map(children -> list(new TableRow(children, isHeader))); 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 a4b3bdd..2c8c96c 100644 --- a/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java +++ b/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java @@ -1489,6 +1489,47 @@ public class BodyXmlTests { } @Test + public void whenRowIsMarkedAsDeletedInRowPropertiesThenRowIsIgnored() { + XmlElement element = element("w:tbl", list( + element("w:tr", list( + element("w:tc", list( + element("w:p", list( + runXml("Row 1") + )) + )) + )), + + element("w:tr", list( + element("w:trPr", list( + element("w:del") + )), + element("w:tc", list( + element("w:p", list( + runXml("Row 2") + )) + )) + )) + )); + + DocumentElement result = readSuccess(bodyReader(), element); + + assertThat( + result, + deepEquals(table(list( + tableRow(list( + tableCell( + withChildren( + paragraph(withChildren( + runWithText("Row 1") + )) + ) + ) + )) + ))) + ); + } + + @Test public void warningIfNonRowInTable() { XmlElement element = element("w:tbl", list( element("w:p") |
