aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/zwobble')
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/docx/OfficeXml.java5
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java23
2 files changed, 24 insertions, 4 deletions
diff --git a/src/main/java/org/zwobble/mammoth/internal/docx/OfficeXml.java b/src/main/java/org/zwobble/mammoth/internal/docx/OfficeXml.java
index d4dc5f6..8582237 100644
--- a/src/main/java/org/zwobble/mammoth/internal/docx/OfficeXml.java
+++ b/src/main/java/org/zwobble/mammoth/internal/docx/OfficeXml.java
@@ -31,6 +31,11 @@ public class OfficeXml {
.put("mc", "http://schemas.openxmlformats.org/markup-compatibility/2006")
.put("v", "urn:schemas-microsoft-com:vml")
.put("office-word", "urn:schemas-microsoft-com:office:word")
+
+ // [MS-DOCX]: Word Extensions to the Office Open XML (.docx) File Format
+ // https://learn.microsoft.com/en-us/openspecs/office_standards/ms-docx/b839fe1f-e1ca-4fa6-8c26-5954d0abbccd
+ .put("wordml", "http://schemas.microsoft.com/office/word/2010/wordml")
+
.build();
public static XmlElement parseXml(InputStream inputStream) {
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) {