diff options
| -rw-r--r-- | src/main/java/org/zwobble/mammoth/styles/parsing/StyleMapParser.java | 31 | ||||
| -rw-r--r-- | src/test/java/org/zwobble/mammoth/tests/styles/StyleMapParserTests.java | 21 |
2 files changed, 46 insertions, 6 deletions
diff --git a/src/main/java/org/zwobble/mammoth/styles/parsing/StyleMapParser.java b/src/main/java/org/zwobble/mammoth/styles/parsing/StyleMapParser.java index 618c00b..595eab1 100644 --- a/src/main/java/org/zwobble/mammoth/styles/parsing/StyleMapParser.java +++ b/src/main/java/org/zwobble/mammoth/styles/parsing/StyleMapParser.java @@ -4,14 +4,33 @@ import org.parboiled.support.Var; import org.zwobble.mammoth.styles.StyleMap; import org.zwobble.mammoth.styles.StyleMapBuilder; +import java.util.List; + +import static java.util.Arrays.asList; + public class StyleMapParser { public static StyleMap parse(String input) { - if (input.isEmpty()) { - return StyleMap.EMPTY; - } else { - Var<StyleMapBuilder> styleMap = new Var<>(StyleMap.builder()); - Parsing.parse(StyleMappingParser.class, parser -> parser.StyleMapping(styleMap), input); - return styleMap.get().build(); + List<String> lines = asList(input.split("\\r?\\n")); + + Var<StyleMapBuilder> styleMap = new Var<>(StyleMap.builder()); + for (String line : lines) { + handleLine(styleMap, line); } + return styleMap.get().build(); + } + + private static void handleLine(Var<StyleMapBuilder> styleMap, String line) { + if (line.startsWith("#")) { + return; + } + line = line.trim(); + if (line.isEmpty()) { + return; + } + Parsing.parse(StyleMappingParser.class, parser -> parser.StyleMapping(styleMap), line); + } + + private static boolean isSignificantLine(String line) { + return !line.startsWith("#") && !line.trim().isEmpty(); } } diff --git a/src/test/java/org/zwobble/mammoth/tests/styles/StyleMapParserTests.java b/src/test/java/org/zwobble/mammoth/tests/styles/StyleMapParserTests.java index 01ef547..1e6873b 100644 --- a/src/test/java/org/zwobble/mammoth/tests/styles/StyleMapParserTests.java +++ b/src/test/java/org/zwobble/mammoth/tests/styles/StyleMapParserTests.java @@ -40,4 +40,25 @@ public class StyleMapParserTests { StyleMap styleMap = StyleMapParser.parse("s => del"); assertThat(styleMap, deepEquals(StyleMap.builder().strikethrough(HtmlPath.collapsibleElement("del")).build())); } + + @Test + public void blankLinesAreIgnored() { + StyleMap styleMap = StyleMapParser.parse("\n\n \n\np =>\n\r\n"); + assertThat(styleMap, deepEquals(StyleMap.builder().mapParagraph(ParagraphMatcher.ANY, HtmlPath.EMPTY).build())); + } + + @Test + public void lineStartingWithHashIsIgnored() { + StyleMap styleMap = StyleMapParser.parse("#p => p"); + assertThat(styleMap, deepEquals(StyleMap.EMPTY)); + } + + @Test + public void canParseMultipleMappings() { + StyleMap styleMap = StyleMapParser.parse("p =>\nr =>"); + assertThat(styleMap, deepEquals(StyleMap.builder() + .mapParagraph(ParagraphMatcher.ANY, HtmlPath.EMPTY) + .mapRun(RunMatcher.ANY, HtmlPath.EMPTY) + .build())); + } } |
