diff options
| author | Michael Williamson <mike@zwobble.org> | 2024-12-30 10:27:22 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2024-12-30 10:27:22 +0000 |
| commit | 13bf5b5e7e2c8697a3b07d3449b35511d0661e19 (patch) | |
| tree | 99ada7041f28b2aec8bff1673e3270bc0d587d72 /src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java | |
| parent | 4289436b8210836f6025386ff4d60cf2f8705994 (diff) | |
Convert SDT checkboxes to checkbox inputs
Diffstat (limited to 'src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java')
| -rw-r--r-- | src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java | 23 |
1 files changed, 19 insertions, 4 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 cdbc96a..4962400 100644 --- a/src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java +++ b/src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java @@ -257,12 +257,16 @@ class StatefulBodyXmlReader { private boolean readBooleanElement(XmlElementLike properties, String tagName) { return properties.findChild(tagName) - .map(child -> child.getAttributeOrNone("w:val") - .map(value -> !value.equals("false") && !value.equals("0")) - .orElse(true)) + .map(child -> readBooleanAttributeValue(child.getAttributeOrNone("w:val"))) .orElse(false); } + private boolean readBooleanAttributeValue(Optional<String> valAttributeValue) { + return valAttributeValue + .map(value -> !value.equals("false") && !value.equals("0")) + .orElse(true); + } + private VerticalAlignment readVerticalAlignment(XmlElementLike properties) { String verticalAlignment = readVal(properties, "w:vertAlign").orElse(""); switch (verticalAlignment) { @@ -697,7 +701,18 @@ class StatefulBodyXmlReader { } private ReadResult readSdt(XmlElement element) { - return readElements(element.findChildOrEmpty("w:sdtContent").getChildren()); + Optional<XmlElement> checkbox = element + .findChildOrEmpty("w:sdtPr") + .findChild("wordml:checkbox"); + + if (checkbox.isPresent()) { + Optional<XmlElement> checkedElement = checkbox.get().findChild("wordml:checked"); + boolean isChecked = checkedElement.isPresent() && + readBooleanAttributeValue(checkedElement.get().getAttributeOrNone("wordml:val")); + return success(new Checkbox(isChecked)); + } else { + return readElements(element.findChildOrEmpty("w:sdtContent").getChildren()); + } } private String relationshipIdToDocxPath(String relationshipId) { |
