Index: packages/csslib/lib/src/tokenizer.dart |
diff --git a/packages/csslib/lib/src/tokenizer.dart b/packages/csslib/lib/src/tokenizer.dart |
index d423104bae92eb05e5a278fb249e603021de8486..d7677f9f211501f1c1564d1de483debc016f9ef7 100644 |
--- a/packages/csslib/lib/src/tokenizer.dart |
+++ b/packages/csslib/lib/src/tokenizer.dart |
@@ -97,7 +97,7 @@ class Tokenizer extends TokenizerBase { |
case TokenChar.HASH: |
return _finishToken(TokenKind.HASH); |
case TokenChar.PLUS: |
- if (maybeEatDigit()) return finishNumber(); |
+ if (_nextCharsAreNumber(ch)) return finishNumber(); |
return _finishToken(TokenKind.PLUS); |
case TokenChar.MINUS: |
if (inSelectorExpression || unicodeRange) { |
@@ -105,7 +105,7 @@ class Tokenizer extends TokenizerBase { |
// not part of identifier e.g., interval value range (e.g. U+400-4ff) |
// or minus operator in selector expression. |
return _finishToken(TokenKind.MINUS); |
- } else if (maybeEatDigit()) { |
+ } else if (_nextCharsAreNumber(ch)) { |
return finishNumber(); |
} else if (TokenizerHelpers.isIdentifierStart(ch)) { |
return finishIdentifier(); |
@@ -202,8 +202,13 @@ class Tokenizer extends TokenizerBase { |
} else { |
return _errorToken(); |
} |
- } else if ((ch == UNICODE_U || ch == UNICODE_LOWER_U) && |
+ } else if (_inString && |
+ (ch == UNICODE_U || ch == UNICODE_LOWER_U) && |
(_peekChar() == UNICODE_PLUS)) { |
+ // `_inString` is misleading. We actually DON'T want to enter this |
+ // block while tokenizing a string, but the parser sets this value to |
+ // false while it IS consuming tokens within a string. |
+ // |
// Unicode range: U+uNumber[-U+uNumber] |
// uNumber = 0..10FFFF |
_nextChar(); // Skip + |
@@ -260,7 +265,7 @@ class Tokenizer extends TokenizerBase { |
Token finishIdentifier() { |
// If we encounter an escape sequence, remember it so we can post-process |
// to unescape. |
- var chars = []; |
+ var chars = <int>[]; |
// backup so we can start with the first character |
int validateFrom = _index; |
@@ -414,7 +419,6 @@ class Tokenizer extends TokenizerBase { |
} |
} |
} |
- return _errorToken(); |
} |
} |
@@ -446,7 +450,9 @@ class TokenizerHelpers { |
// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier |
// http://www.w3.org/TR/CSS21/syndata.html#characters |
// Also, escaped character should be allowed. |
- c == 95 /*_*/ || c >= 0xA0 || c == 92 /*\*/); |
+ c == 95 /*_*/ || |
+ c >= 0xA0 || |
+ c == 92 /*\*/); |
} |
/** Pseudo function expressions identifiers can't have a minus sign. */ |