blob: 41193baf6ae228397f3e49ac97699aeeb5056fde [file] [log] [blame]
var cmpChar = require('../../tokenizer').cmpChar;
var TYPE = require('../../tokenizer').TYPE;
var IDENTIFIER = TYPE.Identifier;
var STRING = TYPE.String;
var NUMBER = TYPE.Number;
var FUNCTION = TYPE.Function;
var URL = TYPE.Url;
var NUMBERSIGN = TYPE.NumberSign;
var LEFTPARENTHESIS = TYPE.LeftParenthesis;
var LEFTSQUAREBRACKET = TYPE.LeftSquareBracket;
var PLUSSIGN = TYPE.PlusSign;
var HYPHENMINUS = TYPE.HyphenMinus;
var COMMA = TYPE.Comma;
var SOLIDUS = TYPE.Solidus;
var ASTERISK = TYPE.Asterisk;
var PERCENTSIGN = TYPE.PercentSign;
var BACKSLASH = TYPE.Backslash;
var U = 117; // 'u'.charCodeAt(0)
module.exports = function defaultRecognizer(context) {
switch (this.scanner.tokenType) {
case NUMBERSIGN:
return this.HexColor();
case COMMA:
context.space = null;
context.ignoreWSAfter = true;
return this.Operator();
case SOLIDUS:
case ASTERISK:
case PLUSSIGN:
case HYPHENMINUS:
return this.Operator();
case LEFTPARENTHESIS:
return this.Parentheses(this.readSequence, context.recognizer);
case LEFTSQUAREBRACKET:
return this.Brackets(this.readSequence, context.recognizer);
case STRING:
return this.String();
case NUMBER:
switch (this.scanner.lookupType(1)) {
case PERCENTSIGN:
return this.Percentage();
case IDENTIFIER:
// edge case: number with folowing \0 and \9 hack shouldn't to be a Dimension
if (cmpChar(this.scanner.source, this.scanner.tokenEnd, BACKSLASH)) {
return this.Number();
} else {
return this.Dimension();
}
default:
return this.Number();
}
case FUNCTION:
return this.Function(this.readSequence, context.recognizer);
case URL:
return this.Url();
case IDENTIFIER:
// check for unicode range, it should start with u+ or U+
if (cmpChar(this.scanner.source, this.scanner.tokenStart, U) &&
cmpChar(this.scanner.source, this.scanner.tokenStart + 1, PLUSSIGN)) {
return this.UnicodeRange();
} else {
return this.Identifier();
}
}
};