From c36b72bf0a6ba24ef5f1151f3fed71bcb44654d4 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 21 Feb 2016 21:21:08 +0000 Subject: Parse choice of tag names in HTML paths --- .../java/org/zwobble/mammoth/styles/HtmlPath.java | 10 +++++++++- .../org/zwobble/mammoth/styles/StyleMapParser.java | 19 +++++++++++++------ .../java/org/zwobble/mammoth/util/MammothLists.java | 4 ++++ 3 files changed, 26 insertions(+), 7 deletions(-) (limited to 'src/main/java/org/zwobble') diff --git a/src/main/java/org/zwobble/mammoth/styles/HtmlPath.java b/src/main/java/org/zwobble/mammoth/styles/HtmlPath.java index ee78237..93fd0fa 100644 --- a/src/main/java/org/zwobble/mammoth/styles/HtmlPath.java +++ b/src/main/java/org/zwobble/mammoth/styles/HtmlPath.java @@ -24,8 +24,16 @@ public class HtmlPath { return collapsibleElement(tagName, map()); } + public static HtmlPath collapsibleElement(List tagNames) { + return collapsibleElement(tagNames, map()); + } + public static HtmlPath collapsibleElement(String tagName, Map attributes) { - return new HtmlPath(list(new HtmlPathElement(list(tagName), attributes, true))); + return collapsibleElement(list(tagName), attributes); + } + + public static HtmlPath collapsibleElement(List tagNames, Map attributes) { + return new HtmlPath(list(new HtmlPathElement(tagNames, attributes, true))); } private final List elements; diff --git a/src/main/java/org/zwobble/mammoth/styles/StyleMapParser.java b/src/main/java/org/zwobble/mammoth/styles/StyleMapParser.java index 4e18948..43f9b4c 100644 --- a/src/main/java/org/zwobble/mammoth/styles/StyleMapParser.java +++ b/src/main/java/org/zwobble/mammoth/styles/StyleMapParser.java @@ -42,21 +42,24 @@ public class StyleMapParser extends BaseParser { } Rule HtmlPathElement(Var element) { - Var tagName = new Var<>(); + ListVar tagNames = new ListVar<>(); ListVar classNames = new ListVar<>(); Var fresh = new Var<>(); return Sequence( - TagNames(tagName), + TagNames(tagNames), ClassNames(classNames), Fresh(fresh), element.set(new HtmlPathElement( - list(tagName.get()), + tagNames.build(), classNames.isEmpty() ? map() : map("class", String.join(" ", classNames.build())), !fresh.get()))); } - Rule TagNames(Var tagName) { - return Sequence(Identifier(), tagName.set(match())); + Rule TagNames(ListVar tagNames) { + return Sequence( + Identifier(), + tagNames.append(match()), + ZeroOrMore(Sequence("|", Identifier(), tagNames.append(match())))); } Rule ClassNames(ListVar classNames) { @@ -84,10 +87,14 @@ public class StyleMapParser extends BaseParser { class ListVar extends Var> { boolean append(Var element) { + return append(element.get()); + } + + boolean append(T element) { if (get() == null) { set(ImmutableList.builder()); } - return set(get().add(element.get())); + return set(get().add(element)); } public List build() { diff --git a/src/main/java/org/zwobble/mammoth/util/MammothLists.java b/src/main/java/org/zwobble/mammoth/util/MammothLists.java index 497d1b3..bbdaa7b 100644 --- a/src/main/java/org/zwobble/mammoth/util/MammothLists.java +++ b/src/main/java/org/zwobble/mammoth/util/MammothLists.java @@ -20,6 +20,10 @@ public class MammothLists { return ImmutableList.of(value1, value2); } + public static List list(T value1, T value2, T value3) { + return ImmutableList.of(value1, value2, value3); + } + public static List cons(T head, Iterable tail) { return concat(list(head), tail); } -- cgit v1.2.3