1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
  | 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); 
 |      } 
 |  }; 
 |  
  |