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