aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java6
-rw-r--r--src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java48
2 files changed, 50 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 d5f594f..af6b70f 100644
--- a/src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java
+++ b/src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java
@@ -205,7 +205,11 @@ class StatefulBodyXmlReader {
}
private boolean isUnderline(XmlElementLike properties) {
- return readBooleanElement(properties, "w:u");
+ return properties.findChild("w:u")
+ .map(child -> child.getAttributeOrNone("w:val")
+ .map(value -> !value.equals("false") && !value.equals("0") && !value.equals("none"))
+ .orElse(true))
+ .orElse(false);
}
private boolean isStrikethrough(XmlElementLike properties) {
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 aaaf1e2..647f54f 100644
--- a/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java
+++ b/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java
@@ -506,16 +506,58 @@ public class BodyXmlTests {
assertThat(
readSuccess(bodyReader(), element),
- hasProperty("underline", equalTo(false)));
+ hasProperty("underline", equalTo(false))
+ );
}
@Test
- public void runIsUnderlinedIfUnderlineElementIsPresent() {
+ public void runIsUnderlinedIfUnderlineElementIsPresentWithoutValAttribute() {
XmlElement element = runXmlWithProperties(element("w:u"));
assertThat(
readSuccess(bodyReader(), element),
- hasProperty("underline", equalTo(true)));
+ hasProperty("underline", equalTo(true))
+ );
+ }
+
+ @Test
+ public void runIsNotUnderlinedIfUnderlineElementIsPresentAndValIsFalse() {
+ XmlElement element = runXmlWithProperties(element("w:u", map("w:val", "false")));
+
+ assertThat(
+ readSuccess(bodyReader(), element),
+ hasProperty("underline", equalTo(false))
+ );
+ }
+
+ @Test
+ public void runIsNotUnderlinedIfUnderlineElementIsPresentAndValIs0() {
+ XmlElement element = runXmlWithProperties(element("w:u", map("w:val", "0")));
+
+ assertThat(
+ readSuccess(bodyReader(), element),
+ hasProperty("underline", equalTo(false))
+ );
+ }
+
+ @Test
+ public void runIsNotUnderlinedIfUnderlineElementIsPresentAndValIsNone() {
+ XmlElement element = runXmlWithProperties(element("w:u", map("w:val", "none")));
+
+ assertThat(
+ readSuccess(bodyReader(), element),
+ hasProperty("underline", equalTo(false))
+ );
+ }
+
+ @Test
+ public void runIsUnderlinedIfUnderlineElementIsPresentAndValIsNotNoneNorFalsy() {
+ XmlElement element = runXmlWithProperties(element("w:u", map("w:val", "single")));
+
+ assertThat(
+ readSuccess(bodyReader(), element),
+ hasProperty("underline", equalTo(true))
+ );
}
@Test