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