diff options
Diffstat (limited to 'src')
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); } |
