var TYPE = require('../../tokenizer').TYPE; var IDENT = TYPE.Ident; var NUMBER = TYPE.Number; var DIMENSION = TYPE.Dimension; var LEFTPARENTHESIS = TYPE.LeftParenthesis; var RIGHTPARENTHESIS = TYPE.RightParenthesis; var COLON = TYPE.Colon; var DELIM = TYPE.Delim; module.exports = { name: 'MediaFeature', structure: { name: String, value: ['Identifier', 'Number', 'Dimension', 'Ratio', null] }, parse: function() { var start = this.scanner.tokenStart; var name; var value = null; this.eat(LEFTPARENTHESIS); this.scanner.skipSC(); name = this.consume(IDENT); this.scanner.skipSC(); if (this.scanner.tokenType !== RIGHTPARENTHESIS) { this.eat(COLON); this.scanner.skipSC(); switch (this.scanner.tokenType) { case NUMBER: if (this.lookupNonWSType(1) === DELIM) { value = this.Ratio(); } else { value = this.Number(); } break; case DIMENSION: value = this.Dimension(); break; case IDENT: value = this.Identifier(); break; default: this.error('Number, dimension, ratio or identifier is expected'); } this.scanner.skipSC(); } this.eat(RIGHTPARENTHESIS); return { type: 'MediaFeature', loc: this.getLocation(start, this.scanner.tokenStart), name: name, value: value }; }, generate: function(node) { this.chunk('('); this.chunk(node.name); if (node.value !== null) { this.chunk(':'); this.node(node.value); } this.chunk(')'); } };