Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(663)

Unified Diff: utils/css/tokenizer.dart

Issue 9695048: Template parser (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Siggi's comments Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « utils/css/token.dart ('k') | utils/css/tokenizer_base.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: utils/css/tokenizer.dart
diff --git a/utils/css/tokenizer.dart b/utils/css/tokenizer.dart
index a02363673aaad4633225abf94d96a3e2d27e4c0c..40fd362b7298a95d7a8ef36b5ce666baacda4921 100644
--- a/utils/css/tokenizer.dart
+++ b/utils/css/tokenizer.dart
@@ -2,17 +2,19 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-class Tokenizer extends lang.TokenizerBase {
+class Tokenizer extends CSSTokenizerBase {
TokenKind cssTokens;
bool _selectorParsing;
- Tokenizer(lang.SourceFile source, bool skipWhitespace, [int index = 0])
+ Tokenizer(SourceFile source, bool skipWhitespace, [int index = 0])
: super(source, skipWhitespace, index), _selectorParsing = false {
cssTokens = new TokenKind();
}
- lang.Token next() {
+ int get startIndex() => _startIndex;
+
+ Token next() {
// keep track of our starting position
_startIndex = _index;
@@ -47,8 +49,8 @@ class Tokenizer extends lang.TokenizerBase {
int start = _startIndex; // Start where the dot started.
if (maybeEatDigit()) {
// looks like a number dot followed by digit(s).
- lang.Token num = finishNumber();
- if (num.kind == TokenKind.INTEGER) {
+ Token number = finishNumber();
+ if (number.kind == TokenKind.INTEGER) {
// It's a number but it's preceeded by a dot, so make it a double.
_startIndex = start;
return _finishToken(TokenKind.DOUBLE);
@@ -84,7 +86,7 @@ class Tokenizer extends lang.TokenizerBase {
if (maybeEatDigit()) {
return finishNumber();
} else if (TokenizerHelpers.isIdentifierStart(ch)) {
- return this.finishIdentifier();
+ return this.finishIdentifier(ch);
} else {
return _finishToken(TokenKind.MINUS);
}
@@ -151,11 +153,11 @@ class Tokenizer extends lang.TokenizerBase {
return _finishToken(TokenKind.DOLLAR);
}
case cssTokens.tokens[TokenKind.BANG]:
- lang.Token tok = finishIdentifier();
+ Token tok = finishIdentifier(ch);
return (tok == null) ? _finishToken(TokenKind.BANG) : tok;
default:
if (TokenizerHelpers.isIdentifierStart(ch)) {
- return this.finishIdentifier();
+ return this.finishIdentifier(ch);
} else if (isDigit(ch)) {
return this.finishNumber();
} else {
@@ -166,7 +168,7 @@ class Tokenizer extends lang.TokenizerBase {
// TODO(jmesserly): we need a way to emit human readable error messages from
// the tokenizer.
- lang.Token _errorToken() {
+ Token _errorToken([String message = null]) {
return _finishToken(TokenKind.ERROR);
}
@@ -186,7 +188,7 @@ class Tokenizer extends lang.TokenizerBase {
}
// Need to override so CSS version of isIdentifierPart is used.
- lang.Token finishIdentifier() {
+ Token finishIdentifier(int ch) {
while (_index < _text.length) {
// if (!TokenizerHelpers.isIdentifierPart(_text.charCodeAt(_index++))) {
if (!TokenizerHelpers.isIdentifierPart(_text.charCodeAt(_index))) {
@@ -207,11 +209,11 @@ class Tokenizer extends lang.TokenizerBase {
}
}
- lang.Token finishImportant() {
+ Token finishImportant() {
}
- lang.Token finishNumber() {
+ Token finishNumber() {
eatDigits();
if (_peekChar() == 46/*.*/) {
@@ -254,7 +256,7 @@ class Tokenizer extends lang.TokenizerBase {
return false;
}
- lang.Token finishMultiLineComment() {
+ Token finishMultiLineComment() {
while (true) {
int ch = _nextChar();
if (ch == 0) {
@@ -286,17 +288,32 @@ class Tokenizer extends lang.TokenizerBase {
}
/** Static helper methods. */
+/** Static helper methods. */
class TokenizerHelpers {
- static bool isIdentifierStart(int c) =>
- lang.TokenizerHelpers.isIdentifierStart(c) || c == 95 /*_*/ ||
- c == 45; /*-*/
+
+ static bool isIdentifierStart(int c) {
+ return ((c >= 97/*a*/ && c <= 122/*z*/) || (c >= 65/*A*/ && c <= 90/*Z*/) ||
+ c == 95/*_*/ || c == 45 /*-*/);
+ }
+
+ static bool isDigit(int c) {
+ return (c >= 48/*0*/ && c <= 57/*9*/);
+ }
- static bool isDigit(int c) => lang.TokenizerHelpers.isDigit(c);
+ static bool isHexDigit(int c) {
+ return (isDigit(c) || (c >= 97/*a*/ && c <= 102/*f*/) || (c >= 65/*A*/ && c <= 70/*F*/));
+ }
- static bool isHexDigit(int c) => lang.TokenizerHelpers.isHexDigit(c);
+ static bool isWhitespace(int c) {
+ return (c == 32/*' '*/ || c == 9/*'\t'*/ || c == 10/*'\n'*/ || c == 13/*'\r'*/);
+ }
- static bool isWhitespace(int c) => lang.TokenizerHelpers.isWhitespace(c);
+ static bool isIdentifierPart(int c) {
+ return (isIdentifierStart(c) || isDigit(c) || c == 45 /*-*/);
+ }
- static bool isIdentifierPart(int c) =>
- lang.TokenizerHelpers.isIdentifierPart(c) || c == 45 /*-*/;
+ static bool isInterpIdentifierPart(int c) {
+ return (isIdentifierStart(c) || isDigit(c));
+ }
}
+
« no previous file with comments | « utils/css/token.dart ('k') | utils/css/tokenizer_base.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698