aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-11-16 22:39:00 +0000
committerMichael Williamson <mike@zwobble.org>2016-11-16 22:43:31 +0000
commitca8f1ddf605f447cdb416c46d254480afdc68ccc (patch)
tree9e40a9fb0f442476baeb2b69c7efb826029aa173
parent9118a7ff1db7c740bad4f196d094c41f5a3a3629 (diff)
Remove class names as a special case
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/styles/parsing/DocumentMatcherParser.java6
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/styles/parsing/HtmlPathParser.java6
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/styles/parsing/StyleMappingTokeniser.java6
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/styles/parsing/TokenParser.java10
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/styles/parsing/TokenType.java1
-rw-r--r--src/test/java/org/zwobble/mammoth/tests/styles/parsing/StyleMappingTokeniserTests.java9
-rw-r--r--src/test/java/org/zwobble/mammoth/tests/styles/parsing/TokenParserTests.java11
7 files changed, 30 insertions, 19 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 ab9ff8d..94004f0 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,11 +49,7 @@ public class DocumentMatcherParser {
}
private static Optional<String> parseStyleId(TokenIterator<TokenType> tokens) {
- if (tokens.peekTokenType() == TokenType.CLASS_NAME) {
- return Optional.of(TokenParser.parseClassName(tokens));
- } else {
- return Optional.empty();
- }
+ return TokenParser.parseClassName(tokens);
}
private static Optional<String> parseStyleName(TokenIterator<TokenType> tokens) {
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 b384ef7..c9609d3 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
@@ -8,6 +8,7 @@ import org.zwobble.mammoth.internal.styles.HtmlPathElements;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
import static org.zwobble.mammoth.internal.util.Maps.map;
@@ -59,8 +60,9 @@ public class HtmlPathParser {
private static List<String> parseClassNames(TokenIterator<TokenType> tokens) {
List<String> classNames = new ArrayList<>();
- while (tokens.peekTokenType() == TokenType.CLASS_NAME) {
- classNames.add(TokenParser.parseClassName(tokens));
+ Optional<String> className;
+ while ((className = TokenParser.parseClassName(tokens)).isPresent()) {
+ classNames.add(className.get());
}
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 704ba86..50fcffe 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
@@ -7,13 +7,13 @@ import static org.zwobble.mammoth.internal.util.Lists.list;
public class StyleMappingTokeniser {
public static List<Token<TokenType>> tokenise(String line) {
String stringPrefix = "'((?:\\.|[^'])*)";
+ String identifierCharacter = "(?:[a-zA-Z\\-_]|\\\\.)";
RegexTokeniser<TokenType> tokeniser = new RegexTokeniser<>(
TokenType.UNKNOWN,
list(
- RegexTokeniser.rule(TokenType.IDENTIFIER, "([a-zA-Z][a-zA-Z0-9\\-]*)"),
- RegexTokeniser.rule(TokenType.CLASS_NAME, "(\\.(?:[a-zA-Z0-9\\-]|\\\\.)+)"),
- RegexTokeniser.rule(TokenType.SYMBOL, ":|>|=>|=|\\(|\\)|\\[|\\]|\\||!"),
+ RegexTokeniser.rule(TokenType.IDENTIFIER, identifierCharacter + "(?:" + identifierCharacter + "|[0-9])*"),
+ RegexTokeniser.rule(TokenType.SYMBOL, ":|>|=>|=|\\(|\\)|\\[|\\]|\\||!|\\."),
RegexTokeniser.rule(TokenType.WHITESPACE, "\\s+"),
RegexTokeniser.rule(TokenType.STRING, stringPrefix + "'"),
RegexTokeniser.rule(TokenType.UNTERMINATED_STRING, stringPrefix),
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
index 3760d64..01a1b21 100644
--- a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/TokenParser.java
+++ b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/TokenParser.java
@@ -1,8 +1,14 @@
package org.zwobble.mammoth.internal.styles.parsing;
+import java.util.Optional;
+
public class TokenParser {
- public static String parseClassName(TokenIterator<TokenType> tokens) {
- return EscapeSequences.decode(tokens.nextValue(TokenType.CLASS_NAME).substring(1));
+ public static Optional<String> parseClassName(TokenIterator<TokenType> tokens) {
+ if (tokens.trySkip(TokenType.SYMBOL, ".")) {
+ return Optional.of(EscapeSequences.decode(tokens.nextValue(TokenType.IDENTIFIER)));
+ } else {
+ return Optional.empty();
+ }
}
public static String parseString(TokenIterator<TokenType> tokens) {
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 17442b5..ba17de3 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,6 @@ package org.zwobble.mammoth.internal.styles.parsing;
public enum TokenType {
WHITESPACE,
IDENTIFIER,
- CLASS_NAME,
SYMBOL,
STRING,
UNTERMINATED_STRING,
diff --git a/src/test/java/org/zwobble/mammoth/tests/styles/parsing/StyleMappingTokeniserTests.java b/src/test/java/org/zwobble/mammoth/tests/styles/parsing/StyleMappingTokeniserTests.java
index 0e0c920..7c11ef0 100644
--- a/src/test/java/org/zwobble/mammoth/tests/styles/parsing/StyleMappingTokeniserTests.java
+++ b/src/test/java/org/zwobble/mammoth/tests/styles/parsing/StyleMappingTokeniserTests.java
@@ -36,6 +36,11 @@ public class StyleMappingTokeniserTests {
}
@Test
+ public void escapeSequencesInIdentifiersAreTokenised() {
+ assertTokens("\\:", isToken(TokenType.IDENTIFIER, "\\:"));
+ }
+
+ @Test
public void integersAreTokenised() {
assertTokens("123", isToken(TokenType.INTEGER, "123"));
}
@@ -56,8 +61,8 @@ public class StyleMappingTokeniserTests {
}
@Test
- public void classesAreTokenised() {
- assertTokens(".overture", isToken(TokenType.CLASS_NAME, ".overture"));
+ public void dotsAreTokenised() {
+ assertTokens(".", isToken(TokenType.SYMBOL, "."));
}
@Test
diff --git a/src/test/java/org/zwobble/mammoth/tests/styles/parsing/TokenParserTests.java b/src/test/java/org/zwobble/mammoth/tests/styles/parsing/TokenParserTests.java
index dabe2cd..ba0de10 100644
--- a/src/test/java/org/zwobble/mammoth/tests/styles/parsing/TokenParserTests.java
+++ b/src/test/java/org/zwobble/mammoth/tests/styles/parsing/TokenParserTests.java
@@ -6,16 +6,19 @@ import org.zwobble.mammoth.internal.styles.parsing.TokenIterator;
import org.zwobble.mammoth.internal.styles.parsing.TokenParser;
import org.zwobble.mammoth.internal.styles.parsing.TokenType;
+import java.util.Optional;
+
import static org.junit.Assert.assertEquals;
import static org.zwobble.mammoth.internal.util.Lists.list;
public class TokenParserTests {
@Test
- public void escapeSequencesInClassNameAreDecoded() {
- String value = TokenParser.parseClassName(new TokenIterator<>(list(
- new Token<>(0, TokenType.CLASS_NAME, "\\:")
+ public void escapeSequencesInIdentifiersAreDecoded() {
+ Optional<String> value = TokenParser.parseClassName(new TokenIterator<>(list(
+ new Token<>(0, TokenType.SYMBOL, "."),
+ new Token<>(1, TokenType.IDENTIFIER, "\\:")
)));
- assertEquals(":", value);
+ assertEquals(Optional.of(":"), value);
}
@Test