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(')'); 
 | 
    } 
 | 
}; 
 |