| 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(); |
| } |
| } |
| }; |