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