diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-11-14 22:41:17 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-11-14 22:41:17 +0000 |
| commit | 535236357750e67b75112168fae2cca40ab795a9 (patch) | |
| tree | 4a6c38c84f3b3a7b8d3a30be65977adef5edadd0 /src/main/java/org | |
| parent | 38ecb6125b386d2092b176112ec0cc37e3f87f9f (diff) | |
Parse escape sequences in class names
Diffstat (limited to 'src/main/java/org')
6 files changed, 20 insertions, 8 deletions
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 e019cff..3951d5e 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 @@ -49,9 +49,8 @@ public class DocumentMatcherParser { } private static Optional<String> parseStyleId(TokenIterator<TokenType> tokens) { - if (tokens.peekTokenType() == TokenType.DOT) { - tokens.skip(); - return Optional.of(tokens.nextValue(TokenType.IDENTIFIER)); + if (tokens.peekTokenType() == TokenType.CLASS_NAME) { + return Optional.of(TokenParser.parseClassName(tokens)); } else { return Optional.empty(); } diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/EscapeSequences.java b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/EscapeSequences.java new file mode 100644 index 0000000..2633232 --- /dev/null +++ b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/EscapeSequences.java @@ -0,0 +1,7 @@ +package org.zwobble.mammoth.internal.styles.parsing; + +public class EscapeSequences { + public static String decode(String value) { + return value.replaceAll("\\\\(.)", "$1"); + } +} diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/HtmlPathParser.java b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/HtmlPathParser.java index 2db2553..0d5c70b 100644 --- a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/HtmlPathParser.java +++ b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/HtmlPathParser.java @@ -59,9 +59,8 @@ public class HtmlPathParser { private static List<String> parseClassNames(TokenIterator<TokenType> tokens) { List<String> classNames = new ArrayList<>(); - while (tokens.peekTokenType() == TokenType.DOT) { - tokens.skip(); - classNames.add(tokens.nextValue(TokenType.IDENTIFIER)); + while (tokens.peekTokenType() == TokenType.CLASS_NAME) { + classNames.add(TokenParser.parseClassName(tokens)); } return classNames; } diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/StyleMappingTokeniser.java b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/StyleMappingTokeniser.java index bfef347..1b7c881 100644 --- a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/StyleMappingTokeniser.java +++ b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/StyleMappingTokeniser.java @@ -11,7 +11,7 @@ public class StyleMappingTokeniser { RegexTokeniser<TokenType> tokeniser = new RegexTokeniser<>( list( RegexTokeniser.rule(TokenType.IDENTIFIER, "([a-zA-Z][a-zA-Z0-9\\-]*)"), - RegexTokeniser.rule(TokenType.DOT, "\\."), + RegexTokeniser.rule(TokenType.CLASS_NAME, "(\\.(?:[a-zA-Z0-9\\-]|\\\\.)+)"), RegexTokeniser.rule(TokenType.COLON, ":"), RegexTokeniser.rule(TokenType.GREATER_THAN, ">"), RegexTokeniser.rule(TokenType.WHITESPACE, "\\s+"), diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/TokenParser.java b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/TokenParser.java new file mode 100644 index 0000000..843d13e --- /dev/null +++ b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/TokenParser.java @@ -0,0 +1,7 @@ +package org.zwobble.mammoth.internal.styles.parsing; + +public class TokenParser { + public static String parseClassName(TokenIterator<TokenType> tokens) { + return EscapeSequences.decode(tokens.nextValue(TokenType.CLASS_NAME).substring(1)); + } +} diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/TokenType.java b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/TokenType.java index a0b16de..f17b85e 100644 --- a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/TokenType.java +++ b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/TokenType.java @@ -3,7 +3,7 @@ package org.zwobble.mammoth.internal.styles.parsing; public enum TokenType { WHITESPACE, IDENTIFIER, - DOT, + CLASS_NAME, COLON, GREATER_THAN, ARROW, |
