diff options
5 files changed, 38 insertions, 0 deletions
@@ -1,3 +1,7 @@ +# 1.8.0 + +* Support parsing of run highlights. + # 1.7.1 * Switch the precedence of numbering properties in paragraph properties and the diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/Run.java b/src/main/java/org/zwobble/mammoth/internal/documents/Run.java index 27631bd..cb8bf1f 100644 --- a/src/main/java/org/zwobble/mammoth/internal/documents/Run.java +++ b/src/main/java/org/zwobble/mammoth/internal/documents/Run.java @@ -4,6 +4,7 @@ import java.util.List; import java.util.Optional; public class Run implements DocumentElement, HasChildren { + private final Optional<String> highlight; private final boolean isBold; private final boolean isItalic; private final boolean isUnderline; @@ -15,6 +16,7 @@ public class Run implements DocumentElement, HasChildren { private final List<DocumentElement> children; public Run( + Optional<String> highlight, boolean isBold, boolean isItalic, boolean isUnderline, @@ -25,6 +27,7 @@ public class Run implements DocumentElement, HasChildren { Optional<Style> style, List<DocumentElement> children ) { + this.highlight = highlight; this.isBold = isBold; this.isItalic = isItalic; this.isUnderline = isUnderline; @@ -36,6 +39,10 @@ public class Run implements DocumentElement, HasChildren { this.children = children; } + public Optional<String> getHighlight() { + return highlight; + } + public boolean isBold() { return isBold; } 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 eaaa36c..6fc0c67 100644 --- a/src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java +++ b/src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java @@ -183,6 +183,7 @@ class StatefulBodyXmlReader { } return new Run( + readHighlight(properties), isBold(properties), isItalic(properties), isUnderline(properties), @@ -201,6 +202,10 @@ class StatefulBodyXmlReader { return tryGetLast(lazyFilter(this.complexFieldStack, HyperlinkComplexField.class)); } + private Optional<String> readHighlight(XmlElementLike properties) { + return readVal(properties, "w:highlight"); + } + private boolean isBold(XmlElementLike properties) { return readBooleanElement(properties, "w:b"); } diff --git a/src/test/java/org/zwobble/mammoth/tests/documents/DocumentElementMakers.java b/src/test/java/org/zwobble/mammoth/tests/documents/DocumentElementMakers.java index 510e776..e5bb12b 100644 --- a/src/test/java/org/zwobble/mammoth/tests/documents/DocumentElementMakers.java +++ b/src/test/java/org/zwobble/mammoth/tests/documents/DocumentElementMakers.java @@ -15,6 +15,7 @@ import static org.zwobble.mammoth.tests.Argument.arg; public class DocumentElementMakers { private static final ArgumentKey<Optional<Style>> STYLE = new ArgumentKey<>("style"); private static final ArgumentKey<Optional<NumberingLevel>> NUMBERING = new ArgumentKey<>("numbering"); + private static final ArgumentKey<Optional<String>> HIGHLIGHT = new ArgumentKey<>("highlight"); private static final ArgumentKey<Boolean> BOLD = new ArgumentKey<>("bold"); private static final ArgumentKey<Boolean> ITALIC = new ArgumentKey<>("italic"); private static final ArgumentKey<Boolean> UNDERLINE = new ArgumentKey<>("underline"); @@ -118,6 +119,7 @@ public class DocumentElementMakers { public static Run run(Object... args) { Arguments arguments = new Arguments(args); return new Run( + arguments.get(HIGHLIGHT, Optional.empty()), arguments.get(BOLD, false), arguments.get(ITALIC, false), arguments.get(UNDERLINE, false), 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 47d4d16..a5cb989 100644 --- a/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java +++ b/src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java @@ -860,6 +860,26 @@ public class BodyXmlTests { } @Test + public void runHasNoHighlightByDefault() { + XmlElement element = runXmlWithProperties(); + + DocumentElement result = readSuccess(bodyReader(), element); + + assertThat(result, hasProperty("highlight", equalTo(Optional.empty()))); + } + + @Test + public void runHasHighlightReadFromProperties() { + XmlElement element = runXmlWithProperties( + element("w:highlight", map("w:val", "yellow")) + ); + + DocumentElement result = readSuccess(bodyReader(), element); + + assertThat(result, hasProperty("highlight", equalTo(Optional.of("yellow")))); + } + + @Test public void canReadTabElement() { XmlElement element = element("w:tab"); |
