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