aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-06-13 11:21:17 +0100
committerMichael Williamson <mike@zwobble.org>2024-06-13 11:21:17 +0100
commit9b1601ce190df41684d67e49a7a3620d44dcc951 (patch)
treeefd847354437510d02209941d8b91b0d05eb0c30
parentc63abd50bfb43f3d9a6121e2c7634496b19bc957 (diff)
Parse run highlights
-rw-r--r--NEWS4
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/documents/Run.java7
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java5
-rw-r--r--src/test/java/org/zwobble/mammoth/tests/documents/DocumentElementMakers.java2
-rw-r--r--src/test/java/org/zwobble/mammoth/tests/docx/BodyXmlTests.java20
5 files changed, 38 insertions, 0 deletions
diff --git a/NEWS b/NEWS
index 96af28e..498eda0 100644
--- a/NEWS
+++ b/NEWS
@@ -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");