diff --git a/src/main/java/de/plugh/compositeparse/parsers/QuotedString.java b/src/main/java/de/plugh/compositeparse/parsers/QuotedString.java index 012a9e0..48b4a05 100644 --- a/src/main/java/de/plugh/compositeparse/parsers/QuotedString.java +++ b/src/main/java/de/plugh/compositeparse/parsers/QuotedString.java @@ -3,6 +3,7 @@ package de.plugh.compositeparse.parsers; import de.plugh.compositeparse.Block; import de.plugh.compositeparse.ParseException; import de.plugh.compositeparse.Parser; +import de.plugh.compositeparse.StringInput; import java.util.List; import java.util.function.Function; @@ -31,7 +32,8 @@ public class QuotedString implements Parser { StringBuilder result = new StringBuilder(); boolean escaped = false; while (true) { - String s = block.getInput().read(1); + StringInput input = block.getInput(); + String s = input.read(1); if (s.isEmpty()) { throw new ParseException(block); @@ -39,6 +41,7 @@ public class QuotedString implements Parser { result.append(s); escaped = false; } else if (s.equals(quoteChar)) { + input.move(-1); break; } else if (s.equals("\\")) { escaped = true; @@ -47,6 +50,8 @@ public class QuotedString implements Parser { } } + Literal.literally(quoteChar).parse(block); + return result.toString(); } diff --git a/src/main/java/de/plugh/compositeparse/xml/AttributesParser.java b/src/main/java/de/plugh/compositeparse/xml/AttributesParser.java index 4033854..771897f 100644 --- a/src/main/java/de/plugh/compositeparse/xml/AttributesParser.java +++ b/src/main/java/de/plugh/compositeparse/xml/AttributesParser.java @@ -14,14 +14,12 @@ import java.util.Map; public class AttributesParser implements Parser> { - private static final String REGEX_NAME = "[:a-zA-Z_][:a-zA-Z0-9_.-]*"; - @Override public Map read(Block block) throws ParseException { List attributes = new Repeat<>(block1 -> { - Repeat.atLeast(1, Literal.literally(" ")).parse(block1); + new Expression("^\\s+").parse(block1); - String name = new Expression(REGEX_NAME).parse(block1); + String name = new Expression(NodeParser.REGEX_NAME).parse(block1); Literal.literally("=").parse(block1); String value = new QuotedString().parse(block1); diff --git a/src/main/java/de/plugh/compositeparse/xml/CommentNodeParser.java b/src/main/java/de/plugh/compositeparse/xml/CommentNodeParser.java index fbd1b12..a6f172e 100644 --- a/src/main/java/de/plugh/compositeparse/xml/CommentNodeParser.java +++ b/src/main/java/de/plugh/compositeparse/xml/CommentNodeParser.java @@ -6,8 +6,16 @@ import de.plugh.compositeparse.Parser; import de.plugh.compositeparse.parsers.Expression; import de.plugh.compositeparse.parsers.Literal; +import java.util.List; +import java.util.function.Function; + public class CommentNodeParser implements Parser { + @Override + public Function, String> getNamingScheme() { + return Block.label("xml comment"); + } + @Override public CommentNode read(Block block) throws ParseException { Literal.literally("