parseInlineStyle method
Implementation
Map<String, InlineStyleEntry> parseInlineStyle() {
Map<String, InlineStyleEntry> style = {};
do {
if (TokenKind.isIdentifier(_peekToken.kind)) {
var propertyIdent = camelize(identifier().name);
var resetProperty = false;
var keepGoing = true;
while (keepGoing) {
switch (_peek()) {
case TokenKind.COLON:
_eat(TokenKind.COLON);
keepGoing = false;
break;
case TokenKind.SEMICOLON:
case TokenKind.NEWLINE:
resetProperty = true;
_next();
break;
case TokenKind.IDENTIFIER:
if (resetProperty) {
propertyIdent = identifier().name;
}
break;
default:
keepGoing = false;
}
}
var expr = processExpr();
if (expr != null) {
final bool importantPriority = _maybeEat(TokenKind.IMPORTANT);
final int trailingToken = _peek();
final bool hasUnexpectedTrailingToken = trailingToken != TokenKind.SEMICOLON &&
trailingToken != TokenKind.RBRACE &&
trailingToken != TokenKind.END_OF_FILE;
if ((importantPriority && trailingToken == TokenKind.IMPORTANT) || hasUnexpectedTrailingToken) {
_skipToDeclarationEnd();
} else {
style[propertyIdent] = InlineStyleEntry(expr, important: importantPriority);
}
}
} else if (_peekToken.kind == TokenKind.VAR_DEFINITION) {
_next();
} else if (_peekToken.kind == TokenKind.DIRECTIVE_INCLUDE) {
// TODO @include mixinName in the declaration area.
} else if (_peekToken.kind == TokenKind.DIRECTIVE_EXTEND) {
_next();
}
} while (_maybeEat(TokenKind.SEMICOLON));
return style;
}