diff options
| author | Michael Williamson <mike@zwobble.org> | 2024-06-13 12:40:05 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2024-06-13 12:40:05 +0100 |
| commit | a26168d0c52aeec2dfbe6fffc1531219b4dcd199 (patch) | |
| tree | 7c05f0aa545ded685c08361f147573c5ac2616cd /src | |
| parent | d3a259e3e2d9ff17f2152eeae55e32d7cea09fed (diff) | |
Parse highlight matchers
Diffstat (limited to 'src')
4 files changed, 58 insertions, 3 deletions
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 1b094fd..4304f7f 100644 --- a/src/main/java/org/zwobble/mammoth/internal/styles/StyleMap.java +++ b/src/main/java/org/zwobble/mammoth/internal/styles/StyleMap.java @@ -30,7 +30,8 @@ public class StyleMap { Lists.eagerConcat(high.paragraphStyles, low.paragraphStyles), Lists.eagerConcat(high.runStyles, low.runStyles), Lists.eagerConcat(high.tableStyles, low.tableStyles), - Lists.eagerConcat(high.breakStyles, low.breakStyles) + Lists.eagerConcat(high.breakStyles, low.breakStyles), + Lists.eagerConcat(high.highlightStyles, low.highlightStyles) ); } @@ -47,6 +48,7 @@ public class StyleMap { private final List<StyleMapping<Run>> runStyles; private final List<StyleMapping<Table>> tableStyles; private final List<StyleMapping<Break>> breakStyles; + private final List<StyleMapping<String>> highlightStyles; public StyleMap( Optional<HtmlPath> bold, @@ -59,7 +61,8 @@ public class StyleMap { List<StyleMapping<Paragraph>> paragraphStyles, List<StyleMapping<Run>> runStyles, List<StyleMapping<Table>> tableStyles, - List<StyleMapping<Break>> breakStyles + List<StyleMapping<Break>> breakStyles, + List<StyleMapping<String>> highlightStyles ) { this.bold = bold; @@ -73,6 +76,7 @@ public class StyleMap { this.runStyles = runStyles; this.tableStyles = tableStyles; this.breakStyles = breakStyles; + this.highlightStyles = highlightStyles; } public StyleMap update(StyleMap styleMap) { diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/StyleMapBuilder.java b/src/main/java/org/zwobble/mammoth/internal/styles/StyleMapBuilder.java index 2d90219..fd38f32 100644 --- a/src/main/java/org/zwobble/mammoth/internal/styles/StyleMapBuilder.java +++ b/src/main/java/org/zwobble/mammoth/internal/styles/StyleMapBuilder.java @@ -21,6 +21,7 @@ public class StyleMapBuilder { private final List<StyleMapping<Run>> runStyles = new ArrayList<>(); private final List<StyleMapping<Table>> tableStyles = new ArrayList<>(); private final List<StyleMapping<Break>> breakStyles = new ArrayList<>(); + private final List<StyleMapping<String>> highlightStyles = new ArrayList<>(); public StyleMapBuilder() { this.bold = Optional.empty(); @@ -62,6 +63,11 @@ public class StyleMapBuilder { return this; } + public StyleMapBuilder mapHighlight(HighlightMatcher matcher, HtmlPath path) { + this.highlightStyles.add(new StyleMapping<>(matcher, path)); + return this; + } + public StyleMapBuilder commentReference(HtmlPath path) { this.commentReference = Optional.of(path); return this; @@ -99,7 +105,8 @@ public class StyleMapBuilder { paragraphStyles, runStyles, tableStyles, - breakStyles + breakStyles, + highlightStyles ); } } diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/DocumentMatcherParser.java b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/DocumentMatcherParser.java index fdd2797..c40176a 100644 --- a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/DocumentMatcherParser.java +++ b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/DocumentMatcherParser.java @@ -34,6 +34,9 @@ public class DocumentMatcherParser { return StyleMapBuilder::allCaps; case "small-caps": return StyleMapBuilder::smallCaps; + case "highlight": + HighlightMatcher highlight = parseHighlightMatcher(tokens); + return (builder, path) -> builder.mapHighlight(highlight, path); case "comment-reference": return StyleMapBuilder::commentReference; case "br": @@ -112,6 +115,21 @@ public class DocumentMatcherParser { } } + private static HighlightMatcher parseHighlightMatcher(TokenIterator<TokenType> tokens) { + Optional<String> color; + + if (tokens.trySkip(TokenType.SYMBOL, "[")) { + tokens.skip(TokenType.IDENTIFIER, "color"); + tokens.skip(TokenType.SYMBOL, "="); + color = Optional.of(TokenParser.parseString(tokens)); + tokens.skip(TokenType.SYMBOL, "]"); + } else { + color = Optional.empty(); + } + + return new HighlightMatcher(color); + } + private static BreakMatcher parseBreakMatcher(TokenIterator<TokenType> tokens) { tokens.skip(TokenType.SYMBOL, "["); tokens.skip(TokenType.IDENTIFIER, "type"); diff --git a/src/test/java/org/zwobble/mammoth/tests/styles/parsing/DocumentMatcherParsingTests.java b/src/test/java/org/zwobble/mammoth/tests/styles/parsing/DocumentMatcherParsingTests.java index 1af4a86..7c39e78 100644 --- a/src/test/java/org/zwobble/mammoth/tests/styles/parsing/DocumentMatcherParsingTests.java +++ b/src/test/java/org/zwobble/mammoth/tests/styles/parsing/DocumentMatcherParsingTests.java @@ -8,6 +8,8 @@ import org.zwobble.mammoth.internal.styles.parsing.StyleMappingTokeniser; import org.zwobble.mammoth.internal.styles.parsing.TokenIterator; import org.zwobble.mammoth.internal.styles.parsing.TokenType; +import java.util.Optional; + import static org.hamcrest.MatcherAssert.assertThat; import static org.zwobble.mammoth.tests.DeepReflectionMatcher.deepEquals; @@ -147,6 +149,30 @@ public class DocumentMatcherParsingTests { ); } + @Test + public void readsHighlightWithoutColor() { + assertThat( + parseDocumentMatcher("highlight"), + deepEquals( + new StyleMapBuilder() + .mapHighlight(new HighlightMatcher(Optional.empty()), HTML_PATH) + .build() + ) + ); + } + + @Test + public void readsHighlightWithColor() { + assertThat( + parseDocumentMatcher("highlight[color='yellow']"), + deepEquals( + new StyleMapBuilder() + .mapHighlight(new HighlightMatcher(Optional.of("yellow")), HTML_PATH) + .build() + ) + ); + } + private static final HtmlPath HTML_PATH = HtmlPath.element("placeholder"); private StyleMap parseDocumentMatcher(String input) { |
