summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-11-14 22:41:17 +0000
committerMichael Williamson <mike@zwobble.org>2016-11-14 22:41:17 +0000
commit535236357750e67b75112168fae2cca40ab795a9 (patch)
tree4a6c38c84f3b3a7b8d3a30be65977adef5edadd0 /src/main/java
parent38ecb6125b386d2092b176112ec0cc37e3f87f9f (diff)
Parse escape sequences in class names
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/styles/parsing/DocumentMatcherParser.java5
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/styles/parsing/EscapeSequences.java7
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/styles/parsing/HtmlPathParser.java5
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/styles/parsing/StyleMappingTokeniser.java2
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/styles/parsing/TokenParser.java7
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/styles/parsing/TokenType.java2
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,