summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-06-13 12:52:44 +0100
committerMichael Williamson <mike@zwobble.org>2024-06-13 12:52:44 +0100
commit5edcc79c02f0bc597f91b525107b1407eeffe288 (patch)
tree421b1c96793ebfef10d436bcf0020efd1be3f022 /src
parent43f5e189cb5cc4aa98932726b17319147c0ae742 (diff)
Support style mapping for highlights
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java5
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/styles/StyleMap.java5
-rw-r--r--src/test/java/org/zwobble/mammoth/tests/conversion/DocumentToHtmlTests.java44
-rw-r--r--src/test/java/org/zwobble/mammoth/tests/documents/DocumentElementMakers.java4
4 files changed, 58 insertions, 0 deletions
diff --git a/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java b/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java
index 3da9b7b..80f807e 100644
--- a/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java
+++ b/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java
@@ -159,6 +159,11 @@ public class DocumentToHtml {
@Override
public List<HtmlNode> visit(Run run, Context context) {
Supplier<List<HtmlNode>> nodes = () -> convertChildrenToHtml(run, context);
+ if (run.getHighlight().isPresent()) {
+ nodes = styleMap.getHighlightHtmlPath(run.getHighlight().get())
+ .orElse(HtmlPath.EMPTY)
+ .wrap(nodes);
+ }
if (run.isSmallCaps()) {
nodes = styleMap.getSmallCaps().orElse(HtmlPath.EMPTY).wrap(nodes);
}
diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/StyleMap.java b/src/main/java/org/zwobble/mammoth/internal/styles/StyleMap.java
index 4304f7f..ff93cb3 100644
--- a/src/main/java/org/zwobble/mammoth/internal/styles/StyleMap.java
+++ b/src/main/java/org/zwobble/mammoth/internal/styles/StyleMap.java
@@ -131,4 +131,9 @@ public class StyleMap {
return tryFind(breakStyles, styleMapping -> styleMapping.matches(breakElement))
.map(StyleMapping::getHtmlPath);
}
+
+ public Optional<HtmlPath> getHighlightHtmlPath(String color) {
+ return tryFind(highlightStyles, styleMapping -> styleMapping.matches(color))
+ .map(StyleMapping::getHtmlPath);
+ }
}
diff --git a/src/test/java/org/zwobble/mammoth/tests/conversion/DocumentToHtmlTests.java b/src/test/java/org/zwobble/mammoth/tests/conversion/DocumentToHtmlTests.java
index 03e5a52..3cea235 100644
--- a/src/test/java/org/zwobble/mammoth/tests/conversion/DocumentToHtmlTests.java
+++ b/src/test/java/org/zwobble/mammoth/tests/conversion/DocumentToHtmlTests.java
@@ -211,6 +211,50 @@ public class DocumentToHtmlTests {
}
@Test
+ public void highlightedRunsAreIgnoredByDefault() {
+ Run run = run(withHighlight("yellow"), withChildren(new Text("Hello")));
+
+ List<HtmlNode> result = convertToHtml(run);
+
+ assertThat(result, deepEquals(list(Html.text("Hello"))));
+ }
+
+ @Test
+ public void highlightedRunsCanBeConfiguredWithStyleMappingForAllHighlights() {
+ Run run = run(withHighlight("yellow"), withChildren(new Text("Hello")));
+ StyleMap styleMap = StyleMap.builder()
+ .mapHighlight(new HighlightMatcher(Optional.empty()), HtmlPath.element("mark"))
+ .build();
+
+ List<HtmlNode> result = convertToHtml(run, styleMap);
+
+ assertThat(result, deepEquals(list(
+ Html.element("mark", list(Html.text("Hello")))
+ )));
+ }
+
+ @Test
+ public void highlightedRunsCanBeConfiguredWithStyleMappingForSpecificHighlightColor() {
+ Paragraph paragraph = paragraph(withChildren(
+ run(withHighlight("yellow"), withChildren(new Text("Yellow"))),
+ run(withHighlight("red"), withChildren(new Text("Red")))
+ ));
+ StyleMap styleMap = StyleMap.builder()
+ .mapHighlight(new HighlightMatcher(Optional.of("yellow")), HtmlPath.element("mark", map("class", "yellow")))
+ .mapHighlight(new HighlightMatcher(Optional.empty()), HtmlPath.element("mark"))
+ .build();
+
+ List<HtmlNode> result = convertToHtml(paragraph, styleMap);
+
+ assertThat(result, deepEquals(list(
+ Html.element("p", list(
+ Html.element("mark", map("class", "yellow"), list(Html.text("Yellow"))),
+ Html.element("mark", list(Html.text("Red")))
+ ))
+ )));
+ }
+
+ @Test
public void superscriptRunsAreWrappedInSuperscriptTags() {
assertThat(
convertToHtml(run(withVerticalAlignment(SUPERSCRIPT), withChildren(new Text("Hello")))),
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 e5bb12b..d807e57 100644
--- a/src/test/java/org/zwobble/mammoth/tests/documents/DocumentElementMakers.java
+++ b/src/test/java/org/zwobble/mammoth/tests/documents/DocumentElementMakers.java
@@ -64,6 +64,10 @@ public class DocumentElementMakers {
return arg(SMALL_CAPS, smallCaps);
}
+ public static Argument<Optional<String>> withHighlight(String highlight) {
+ return arg(HIGHLIGHT, Optional.of(highlight));
+ }
+
public static Argument<VerticalAlignment> withVerticalAlignment(VerticalAlignment verticalAlignment) {
return arg(VERTICAL_ALIGNMENT, verticalAlignment);
}