summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/styles/StyleMap.java8
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/styles/StyleMapBuilder.java9
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/styles/parsing/DocumentMatcherParser.java18
-rw-r--r--src/test/java/org/zwobble/mammoth/tests/styles/parsing/DocumentMatcherParsingTests.java26
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) {