diff options
| author | Michael Williamson <mike@zwobble.org> | 2020-09-09 11:28:05 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2020-09-09 11:28:05 +0100 |
| commit | 999fbc8dc29b87a0f9c4497ec680915ac7ecae26 (patch) | |
| tree | 83adfcd13d5565bfa660d0f288591fcaca673139 | |
| parent | ad794b686b4bdb06151f7e112c7ef7dcfebdd2fa (diff) | |
Handle underline elements where w:val is "none"
| -rw-r--r-- | NEWS | 2 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java | 6 | ||||
| -rw-r--r-- | src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java | 48 |
3 files changed, 52 insertions, 4 deletions
@@ -2,6 +2,8 @@ * Support soft hyphens. +* Handle underline elements where w:val is "none". + # 1.4.1 * Read the children of v:rect elements. 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 |
