From 5edcc79c02f0bc597f91b525107b1407eeffe288 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Thu, 13 Jun 2024 12:52:44 +0100 Subject: Support style mapping for highlights --- .../internal/conversion/DocumentToHtml.java | 5 +++ .../zwobble/mammoth/internal/styles/StyleMap.java | 5 +++ .../tests/conversion/DocumentToHtmlTests.java | 44 ++++++++++++++++++++++ .../tests/documents/DocumentElementMakers.java | 4 ++ 4 files changed, 58 insertions(+) (limited to 'src') 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 visit(Run run, Context context) { Supplier> 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 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 @@ -210,6 +210,50 @@ public class DocumentToHtmlTests { deepEquals(list(Html.element("span", list(Html.text("Hello")))))); } + @Test + public void highlightedRunsAreIgnoredByDefault() { + Run run = run(withHighlight("yellow"), withChildren(new Text("Hello"))); + + List 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 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 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( 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> withHighlight(String highlight) { + return arg(HIGHLIGHT, Optional.of(highlight)); + } + public static Argument withVerticalAlignment(VerticalAlignment verticalAlignment) { return arg(VERTICAL_ALIGNMENT, verticalAlignment); } -- cgit v1.2.3