You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.3 KiB
80 lines
2.3 KiB
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 |
|
};
|
|
|