aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java11
-rw-r--r--src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java39
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")
)
);