69 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| var TYPE = require('../../tokenizer').TYPE;
 | |
| 
 | |
| var WHITESPACE = TYPE.WhiteSpace;
 | |
| var COMMENT = TYPE.Comment;
 | |
| var IDENT = TYPE.Ident;
 | |
| var LEFTPARENTHESIS = TYPE.LeftParenthesis;
 | |
| 
 | |
| module.exports = {
 | |
|     name: 'MediaQuery',
 | |
|     structure: {
 | |
|         children: [[
 | |
|             'Identifier',
 | |
|             'MediaFeature',
 | |
|             'WhiteSpace'
 | |
|         ]]
 | |
|     },
 | |
|     parse: function() {
 | |
|         this.scanner.skipSC();
 | |
| 
 | |
|         var children = this.createList();
 | |
|         var child = null;
 | |
|         var space = null;
 | |
| 
 | |
|         scan:
 | |
|         while (!this.scanner.eof) {
 | |
|             switch (this.scanner.tokenType) {
 | |
|                 case COMMENT:
 | |
|                     this.scanner.next();
 | |
|                     continue;
 | |
| 
 | |
|                 case WHITESPACE:
 | |
|                     space = this.WhiteSpace();
 | |
|                     continue;
 | |
| 
 | |
|                 case IDENT:
 | |
|                     child = this.Identifier();
 | |
|                     break;
 | |
| 
 | |
|                 case LEFTPARENTHESIS:
 | |
|                     child = this.MediaFeature();
 | |
|                     break;
 | |
| 
 | |
|                 default:
 | |
|                     break scan;
 | |
|             }
 | |
| 
 | |
|             if (space !== null) {
 | |
|                 children.push(space);
 | |
|                 space = null;
 | |
|             }
 | |
| 
 | |
|             children.push(child);
 | |
|         }
 | |
| 
 | |
|         if (child === null) {
 | |
|             this.error('Identifier or parenthesis is expected');
 | |
|         }
 | |
| 
 | |
|         return {
 | |
|             type: 'MediaQuery',
 | |
|             loc: this.getLocationFromList(children),
 | |
|             children: children
 | |
|         };
 | |
|     },
 | |
|     generate: function(node) {
 | |
|         this.children(node);
 | |
|     }
 | |
| };
 | 
