aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2020-09-09 11:28:05 +0100
committerMichael Williamson <mike@zwobble.org>2020-09-09 11:28:05 +0100
commit999fbc8dc29b87a0f9c4497ec680915ac7ecae26 (patch)
tree83adfcd13d5565bfa660d0f288591fcaca673139 /src
parentad794b686b4bdb06151f7e112c7ef7dcfebdd2fa (diff)
Handle underline elements where w:val is "none"
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