Index: pkg/csslib/lib/parser.dart |
diff --git a/pkg/csslib/lib/parser.dart b/pkg/csslib/lib/parser.dart |
index 92f16524e751c5f935ff140dd38a23798393be39..840b9f23998e72395f335368ebe735b73bdf2656 100644 |
--- a/pkg/csslib/lib/parser.dart |
+++ b/pkg/csslib/lib/parser.dart |
@@ -30,7 +30,7 @@ class ParserState extends TokenizerState { |
: super(tokenizer); |
} |
-void _createMessages({List errors, List options}) { |
+void _createMessages({List<Message> errors, List<String> options}) { |
if (errors == null) errors = []; |
if (options == null) { |
@@ -45,8 +45,11 @@ bool get isChecked => messages.options.checked; |
// TODO(terry): Remove nested name parameter. |
/** Parse and analyze the CSS file. */ |
-StyleSheet compile(var input, {List errors, List options, bool nested: true, |
- bool polyfill: false, List<StyleSheet> includes: null}) { |
+StyleSheet compile(var input, {List<Message> errors, List<String> options, |
+ bool nested: true, |
+ bool polyfill: false, |
+ List<StyleSheet> includes: null}) { |
+ |
if (includes == null) { |
includes = []; |
} |
@@ -70,7 +73,9 @@ StyleSheet compile(var input, {List errors, List options, bool nested: true, |
} |
/** Analyze the CSS file. */ |
-void analyze(List<StyleSheet> styleSheets, {List errors, List options}) { |
+void analyze(List<StyleSheet> styleSheets, |
+ {List<Message> errors, List<String> options}) { |
+ |
_createMessages(errors: errors, options: options); |
new Analyzer(styleSheets, messages).run(); |
} |
@@ -80,7 +85,7 @@ void analyze(List<StyleSheet> styleSheets, {List errors, List options}) { |
* or [List<int>] of bytes and returns a [StyleSheet] AST. The optional |
* [errors] list will contain each error/warning as a [Message]. |
*/ |
-StyleSheet parse(var input, {List errors, List options}) { |
+StyleSheet parse(var input, {List<Message> errors, List<String> options}) { |
var source = _inputAsString(input); |
_createMessages(errors: errors, options: options); |
@@ -95,7 +100,7 @@ StyleSheet parse(var input, {List errors, List options}) { |
* or [List<int>] of bytes and returns a [StyleSheet] AST. The optional |
* [errors] list will contain each error/warning as a [Message]. |
*/ |
-StyleSheet selector(var input, {List errors}) { |
+StyleSheet selector(var input, {List<Message> errors}) { |
var source = _inputAsString(input); |
_createMessages(errors: errors); |
@@ -150,7 +155,7 @@ class Parser { |
/** A simple recursive descent parser for CSS. */ |
class _Parser { |
- Tokenizer tokenizer; |
+ final Tokenizer tokenizer; |
/** Base url of CSS file. */ |
final String _baseUrl; |
@@ -1184,9 +1189,9 @@ class _Parser { |
/** |
* Return list of selectors |
*/ |
- processSelector() { |
- List<SimpleSelectorSequence> simpleSequences = []; |
- int start = _peekToken.start; |
+ Selector processSelector() { |
+ var simpleSequences = <SimpleSelectorSequence>[]; |
+ var start = _peekToken.start; |
while (true) { |
// First item is never descendant make sure it's COMBINATOR_NONE. |
var selectorItem = simpleSelectorSequence(simpleSequences.length == 0); |
@@ -1344,12 +1349,12 @@ class _Parser { |
*/ |
simpleSelectorTail() { |
// Check for HASH | class | attrib | pseudo | negation |
- int start = _peekToken.start; |
+ var start = _peekToken.start; |
switch (_peek()) { |
case TokenKind.HASH: |
_eat(TokenKind.HASH); |
- bool hasWhiteSpace = false; |
+ var hasWhiteSpace = false; |
if (_anyWhiteSpaceBeforePeekToken(TokenKind.HASH)) { |
_warning("Not a valid ID selector expected #id", _makeSpan(start)); |
hasWhiteSpace = true; |
@@ -1395,7 +1400,7 @@ class _Parser { |
// :pseudo-class ::pseudo-element |
// TODO(terry): '::' should be token. |
_eat(TokenKind.COLON); |
- bool pseudoElement = _maybeEat(TokenKind.COLON); |
+ var pseudoElement = _maybeEat(TokenKind.COLON); |
// TODO(terry): If no identifier specified consider optimizing out the |
// : or :: and making this a normal selector. For now, |
@@ -1456,7 +1461,7 @@ class _Parser { |
* NUMBER {num} |
*/ |
processSelectorExpression() { |
- int start = _peekToken.start; |
+ var start = _peekToken.start; |
var expression = new SelectorExpression(_makeSpan(start)); |
@@ -1467,7 +1472,7 @@ class _Parser { |
// operator not identifier. |
tokenizer.selectorExpression = true; |
- bool keepParsing = true; |
+ var keepParsing = true; |
while (keepParsing) { |
switch (_peek()) { |
case TokenKind.PLUS: |
@@ -1539,8 +1544,8 @@ class _Parser { |
// SUBSTRMATCH: '*=' |
// |
// |
- processAttribute() { |
- int start = _peekToken.start; |
+ AttributeSelector processAttribute() { |
+ var start = _peekToken.start; |
if (_maybeEat(TokenKind.LBRACK)) { |
var attrName = identifier(); |
@@ -1593,7 +1598,7 @@ class _Parser { |
// *IDENT - IE7 or below |
// _IDENT - IE6 property (automatically a valid ident) |
// |
- processDeclaration(List dartStyles) { |
+ Declaration processDeclaration(List dartStyles) { |
Declaration decl; |
int start = _peekToken.start; |
@@ -1637,7 +1642,7 @@ class _Parser { |
var include = processInclude(span, eatSemiColon: false); |
decl = new IncludeMixinAtDeclaration(include, span); |
} else if (_peekToken.kind == TokenKind.DIRECTIVE_EXTEND) { |
- List<SimpleSelectorSequence> simpleSequences = []; |
+ var simpleSequences = <TreeNode>[]; |
_next(); |
var span = _makeSpan(start); |
@@ -1730,14 +1735,11 @@ class _Parser { |
'normal' : FontWeight.normal |
}; |
- static _findStyle(String styleName) { |
- if (_stylesToDart.containsKey(styleName)) { |
- return _stylesToDart[styleName]; |
- } |
- } |
+ static int _findStyle(String styleName) => _stylesToDart[styleName]; |
- _styleForDart(Identifier property, Expressions exprs, List dartStyles) { |
- int styleType = _findStyle(property.name.toLowerCase()); |
+ DartStyleExpression _styleForDart(Identifier property, Expressions exprs, |
+ List dartStyles) { |
+ var styleType = _findStyle(property.name.toLowerCase()); |
if (styleType != null) { |
return buildDartStyleNode(styleType, exprs, dartStyles); |
} |
@@ -1754,7 +1756,9 @@ class _Parser { |
return fontExpr; |
} |
- buildDartStyleNode(int styleType, Expressions exprs, List dartStyles) { |
+ DartStyleExpression buildDartStyleNode(int styleType, Expressions exprs, |
+ List dartStyles) { |
+ |
switch (styleType) { |
/* |
* Properties in order: |
@@ -1897,7 +1901,7 @@ class _Parser { |
// TODO(terry): Look at handling width of thin, thick, etc. any none numbers |
// to convert to a number. |
- processOneNumber(Expressions exprs, int part) { |
+ DartStyleExpression processOneNumber(Expressions exprs, int part) { |
var value = marginValue(exprs.expressions[0]); |
if (value != null) { |
switch (part) { |
@@ -1947,7 +1951,7 @@ class _Parser { |
* |
* The values of the margins can be a unit or unitless or auto. |
*/ |
- processFourNums(Expressions exprs) { |
+ BoxEdge processFourNums(Expressions exprs) { |
num top; |
num right; |
num bottom; |
@@ -2000,16 +2004,16 @@ class _Parser { |
// operator: '/' | ',' |
// term: (see processTerm) |
// |
- processExpr([bool ieFilter = false]) { |
- int start = _peekToken.start; |
- Expressions expressions = new Expressions(_makeSpan(start)); |
+ Expressions processExpr([bool ieFilter = false]) { |
+ var start = _peekToken.start; |
+ var expressions = new Expressions(_makeSpan(start)); |
- bool keepGoing = true; |
+ var keepGoing = true; |
var expr; |
while (keepGoing && (expr = processTerm(ieFilter)) != null) { |
var op; |
- int opStart = _peekToken.start; |
+ var opStart = _peekToken.start; |
switch (_peek()) { |
case TokenKind.SLASH: |
@@ -2061,7 +2065,7 @@ class _Parser { |
return expressions; |
} |
- static int MAX_UNICODE = int.parse('0x10FFFF'); |
+ static final int MAX_UNICODE = int.parse('0x10FFFF'); |
// Term grammar: |
// |
@@ -2085,7 +2089,7 @@ class _Parser { |
// function: IDENT '(' expr ')' |
// |
processTerm([bool ieFilter = false]) { |
- int start = _peekToken.start; |
+ var start = _peekToken.start; |
Token t; // token for term's value |
var value; // value of term (numeric values) |
@@ -2193,8 +2197,8 @@ class _Parser { |
} |
// Yes, process the color as an RGB value. |
- String rgbColor = TokenKind.decimalToHex( |
- TokenKind.colorValue(colorEntry), 6); |
+ var rgbColor = |
+ TokenKind.decimalToHex(TokenKind.colorValue(colorEntry), 6); |
return _parseHex(rgbColor, _makeSpan(start)); |
case TokenKind.UNICODE_RANGE: |
var first; |
@@ -2248,8 +2252,8 @@ class _Parser { |
} |
/** Process all dimension units. */ |
- processDimension(Token t, var value, Span span) { |
- var term; |
+ LiteralTerm processDimension(Token t, var value, Span span) { |
+ LiteralTerm term; |
var unitType = this._peek(); |
switch (unitType) { |
@@ -2328,11 +2332,11 @@ class _Parser { |
return term; |
} |
- processQuotedString([bool urlString = false]) { |
- int start = _peekToken.start; |
+ String processQuotedString([bool urlString = false]) { |
+ var start = _peekToken.start; |
// URI term sucks up everything inside of quotes(' or ") or between parens |
- int stopToken = urlString ? TokenKind.RPAREN : -1; |
+ var stopToken = urlString ? TokenKind.RPAREN : -1; |
switch (_peek()) { |
case TokenKind.SINGLE_QUOTE: |
stopToken = TokenKind.SINGLE_QUOTE; |
@@ -2358,13 +2362,13 @@ class _Parser { |
} |
// Gobble up everything until we hit our stop token. |
- int runningStart = _peekToken.start; |
+ var runningStart = _peekToken.start; |
while (_peek() != stopToken && _peek() != TokenKind.END_OF_FILE) { |
var tok = _next(); |
} |
// All characters between quotes is the string. |
- int end = _peekToken.end; |
+ var end = _peekToken.end; |
var stringValue = (_peekToken.span as FileSpan).file.getText(start, |
end - 1); |
@@ -2386,7 +2390,7 @@ class _Parser { |
* then parse to the right paren ignoring everything in between. |
*/ |
processIEFilter(int startAfterProgidColon) { |
- int parens = 0; |
+ var parens = 0; |
while (_peek() != TokenKind.END_OF_FILE) { |
switch (_peek()) { |
@@ -2413,14 +2417,14 @@ class _Parser { |
// function: IDENT '(' expr ')' |
// |
processFunction(Identifier func) { |
- int start = _peekToken.start; |
+ var start = _peekToken.start; |
- String name = func.name; |
+ var name = func.name; |
switch (name) { |
case 'url': |
// URI term sucks up everything inside of quotes(' or ") or between parens |
- String urlParam = processQuotedString(true); |
+ var urlParam = processQuotedString(true); |
// TODO(terry): Better error messge and checking for mismatched quotes. |
if (_peek() == TokenKind.END_OF_FILE) { |
@@ -2470,7 +2474,7 @@ class _Parser { |
return null; |
} |
- identifier() { |
+ Identifier identifier() { |
var tok = _next(); |
if (!TokenKind.isIdentifier(tok.kind) && |
@@ -2486,7 +2490,7 @@ class _Parser { |
// TODO(terry): Move this to base <= 36 and into shared code. |
static int _hexDigit(int c) { |
- if(c >= 48/*0*/ && c <= 57/*9*/) { |
+ if (c >= 48/*0*/ && c <= 57/*9*/) { |
return c - 48; |
} else if (c >= 97/*a*/ && c <= 102/*f*/) { |
return c - 87; |
@@ -2498,9 +2502,9 @@ class _Parser { |
} |
HexColorTerm _parseHex(String hexText, Span span) { |
- int hexValue = 0; |
+ var hexValue = 0; |
- for (int i = 0; i < hexText.length; i++) { |
+ for (var i = 0; i < hexText.length; i++) { |
var digit = _hexDigit(hexText.codeUnitAt(i)); |
if (digit < 0) { |
_warning('Bad hex number', span); |
@@ -2535,7 +2539,7 @@ class ExpressionsProcessor { |
ExpressionsProcessor(this._exprs); |
// TODO(terry): Only handles ##px unit. |
- processFontSize() { |
+ FontExpression processFontSize() { |
/* font-size[/line-height] |
* |
* Possible size values: |
@@ -2553,7 +2557,7 @@ class ExpressionsProcessor { |
*/ |
LengthTerm size; |
LineHeight lineHt; |
- bool nextIsLineHeight = false; |
+ var nextIsLineHeight = false; |
for (; _index < _exprs.expressions.length; _index++) { |
var expr = _exprs.expressions[_index]; |
if (size == null && expr is LengthTerm) { |
@@ -2580,14 +2584,14 @@ class ExpressionsProcessor { |
return new FontExpression(_exprs.span, size: size, lineHeight: lineHt); |
} |
- processFontFamily() { |
- final List<String> family = <String>[]; |
+ FontExpression processFontFamily() { |
+ var family = <String>[]; |
/* Possible family values: |
* font-family: arial, Times new roman ,Lucida Sans Unicode,Courier; |
* font-family: "Times New Roman", arial, Lucida Sans Unicode, Courier; |
*/ |
- bool moreFamilies = false; |
+ var moreFamilies = false; |
for (; _index < _exprs.expressions.length; _index++) { |
Expression expr = _exprs.expressions[_index]; |
@@ -2609,8 +2613,8 @@ class ExpressionsProcessor { |
return new FontExpression(_exprs.span, family: family); |
} |
- processFont() { |
- var family; |
+ FontExpression processFont() { |
+ List<String> family; |
// Process all parts of the font expression. |
FontExpression fontSize; |
@@ -2645,8 +2649,8 @@ String _escapeString(String text, {bool single: false}) { |
StringBuffer result = null; |
for (int i = 0; i < text.length; i++) { |
- int code = text.codeUnitAt(i); |
- var replace = null; |
+ var code = text.codeUnitAt(i); |
+ String replace = null; |
switch (code) { |
case 34/*'"'*/: if (!single) replace = r'\"'; break; |
case 39/*"'"*/: if (single) replace = r"\'"; break; |