var TYPE = require('../../tokenizer').TYPE; var DELIM = TYPE.Delim; var IDENT = TYPE.Ident; var DIMENSION = TYPE.Dimension; var PERCENTAGE = TYPE.Percentage; var NUMBER = TYPE.Number; var HASH = TYPE.Hash; var COLON = TYPE.Colon; var LEFTSQUAREBRACKET = TYPE.LeftSquareBracket; var NUMBERSIGN = 0x0023; // U+0023 NUMBER SIGN (#) var ASTERISK = 0x002A; // U+002A ASTERISK (*) var PLUSSIGN = 0x002B; // U+002B PLUS SIGN (+) var SOLIDUS = 0x002F; // U+002F SOLIDUS (/) var FULLSTOP = 0x002E; // U+002E FULL STOP (.) var GREATERTHANSIGN = 0x003E; // U+003E GREATER-THAN SIGN (>) var VERTICALLINE = 0x007C; // U+007C VERTICAL LINE (|) var TILDE = 0x007E; // U+007E TILDE (~) function getNode(context) { switch (this.scanner.tokenType) { case LEFTSQUAREBRACKET: return this.AttributeSelector(); case HASH: return this.IdSelector(); case COLON: if (this.scanner.lookupType(1) === COLON) { return this.PseudoElementSelector(); } else { return this.PseudoClassSelector(); } case IDENT: return this.TypeSelector(); case NUMBER: case PERCENTAGE: return this.Percentage(); case DIMENSION: // throws when .123ident if (this.scanner.source.charCodeAt(this.scanner.tokenStart) === FULLSTOP) { this.error('Identifier is expected', this.scanner.tokenStart + 1); } break; case DELIM: var code = this.scanner.source.charCodeAt(this.scanner.tokenStart); switch (code) { case PLUSSIGN: case GREATERTHANSIGN: case TILDE: context.space = null; context.ignoreWSAfter = true; return this.Combinator(); case SOLIDUS: // /deep/ return this.Combinator(); case FULLSTOP: return this.ClassSelector(); case ASTERISK: case VERTICALLINE: return this.TypeSelector(); case NUMBERSIGN: return this.IdSelector(); } break; } }; module.exports = { getNode: getNode };