aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-02-23 21:11:52 +0000
committerMichael Williamson <mike@zwobble.org>2016-02-23 21:11:52 +0000
commit059a69620a83e13718ff9388b345ed13a9d19157 (patch)
tree27135b52d345d054185e8b9e7e5c20bc7e4467a2 /src
parent8a19db72c5def22edb0d2ab97765fc0ebd256b5c (diff)
Parse style map
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/mammoth/styles/parsing/StyleMapParser.java31
-rw-r--r--src/test/java/org/zwobble/mammoth/tests/styles/StyleMapParserTests.java21
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()));
+ }
}