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.
61 lines
1.6 KiB
61 lines
1.6 KiB
var TYPE = require('../../tokenizer').TYPE; |
|
|
|
var IDENT = TYPE.Ident; |
|
var FUNCTION = TYPE.Function; |
|
var COLON = TYPE.Colon; |
|
var RIGHTPARENTHESIS = TYPE.RightParenthesis; |
|
|
|
// : [ <ident> | <function-token> <any-value>? ) ] |
|
module.exports = { |
|
name: 'PseudoClassSelector', |
|
structure: { |
|
name: String, |
|
children: [['Raw'], null] |
|
}, |
|
parse: function() { |
|
var start = this.scanner.tokenStart; |
|
var children = null; |
|
var name; |
|
var nameLowerCase; |
|
|
|
this.eat(COLON); |
|
|
|
if (this.scanner.tokenType === FUNCTION) { |
|
name = this.consumeFunctionName(); |
|
nameLowerCase = name.toLowerCase(); |
|
|
|
if (this.pseudo.hasOwnProperty(nameLowerCase)) { |
|
this.scanner.skipSC(); |
|
children = this.pseudo[nameLowerCase].call(this); |
|
this.scanner.skipSC(); |
|
} else { |
|
children = this.createList(); |
|
children.push( |
|
this.Raw(this.scanner.tokenIndex, null, false) |
|
); |
|
} |
|
|
|
this.eat(RIGHTPARENTHESIS); |
|
} else { |
|
name = this.consume(IDENT); |
|
} |
|
|
|
return { |
|
type: 'PseudoClassSelector', |
|
loc: this.getLocation(start, this.scanner.tokenStart), |
|
name: name, |
|
children: children |
|
}; |
|
}, |
|
generate: function(node) { |
|
this.chunk(':'); |
|
this.chunk(node.name); |
|
|
|
if (node.children !== null) { |
|
this.chunk('('); |
|
this.children(node); |
|
this.chunk(')'); |
|
} |
|
}, |
|
walkContext: 'function' |
|
};
|
|
|