| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 | var cmpChar = require('../../tokenizer').cmpChar;var cmpStr = require('../../tokenizer').cmpStr;var TYPE = require('../../tokenizer').TYPE;var IDENT = TYPE.Ident;var STRING = TYPE.String;var NUMBER = TYPE.Number;var FUNCTION = TYPE.Function;var URL = TYPE.Url;var HASH = TYPE.Hash;var DIMENSION = TYPE.Dimension;var PERCENTAGE = TYPE.Percentage;var LEFTPARENTHESIS = TYPE.LeftParenthesis;var LEFTSQUAREBRACKET = TYPE.LeftSquareBracket;var COMMA = TYPE.Comma;var DELIM = TYPE.Delim;var NUMBERSIGN = 0x0023;  // U+0023 NUMBER SIGN (#)var ASTERISK = 0x002A;    // U+002A ASTERISK (*)var PLUSSIGN = 0x002B;    // U+002B PLUS SIGN (+)var HYPHENMINUS = 0x002D; // U+002D HYPHEN-MINUS (-)var SOLIDUS = 0x002F;     // U+002F SOLIDUS (/)var U = 0x0075;           // U+0075 LATIN SMALL LETTER U (u)module.exports = function defaultRecognizer(context) {    switch (this.scanner.tokenType) {        case HASH:            return this.HexColor();        case COMMA:            context.space = null;            context.ignoreWSAfter = true;            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 DIMENSION:            return this.Dimension();        case PERCENTAGE:            return this.Percentage();        case NUMBER:            return this.Number();        case FUNCTION:            return cmpStr(this.scanner.source, this.scanner.tokenStart, this.scanner.tokenEnd, 'url(')                ? this.Url()                : this.Function(this.readSequence, context.recognizer);        case URL:            return this.Url();        case IDENT:            // 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();            }        case DELIM:            var code = this.scanner.source.charCodeAt(this.scanner.tokenStart);            if (code === SOLIDUS ||                code === ASTERISK ||                code === PLUSSIGN ||                code === HYPHENMINUS) {                return this.Operator(); // TODO: replace with Delim            }            // TODO: produce a node with Delim node type            if (code === NUMBERSIGN) {                this.error('Hex or identifier is expected', this.scanner.tokenStart + 1);            }            break;    }};
 |