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/main | |
| parent | d3a259e3e2d9ff17f2152eeae55e32d7cea09fed (diff) | |
Parse highlight matchers
Diffstat (limited to 'src/main')
3 files changed, 32 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"); |
