| var TYPE = require('../../tokenizer').TYPE; | 
|   | 
| var WHITESPACE = TYPE.WhiteSpace; | 
| var COMMENT = TYPE.Comment; | 
| var IDENT = TYPE.Ident; | 
| var FUNCTION = TYPE.Function; | 
| var COLON = TYPE.Colon; | 
| var LEFTPARENTHESIS = TYPE.LeftParenthesis; | 
|   | 
| function consumeRaw() { | 
|     return this.createSingleNodeList( | 
|         this.Raw(this.scanner.tokenIndex, null, false) | 
|     ); | 
| } | 
|   | 
| function parentheses() { | 
|     this.scanner.skipSC(); | 
|   | 
|     if (this.scanner.tokenType === IDENT && | 
|         this.lookupNonWSType(1) === COLON) { | 
|         return this.createSingleNodeList( | 
|             this.Declaration() | 
|         ); | 
|     } | 
|   | 
|     return readSequence.call(this); | 
| } | 
|   | 
| function readSequence() { | 
|     var children = this.createList(); | 
|     var space = null; | 
|     var child; | 
|   | 
|     this.scanner.skipSC(); | 
|   | 
|     scan: | 
|     while (!this.scanner.eof) { | 
|         switch (this.scanner.tokenType) { | 
|             case WHITESPACE: | 
|                 space = this.WhiteSpace(); | 
|                 continue; | 
|   | 
|             case COMMENT: | 
|                 this.scanner.next(); | 
|                 continue; | 
|   | 
|             case FUNCTION: | 
|                 child = this.Function(consumeRaw, this.scope.AtrulePrelude); | 
|                 break; | 
|   | 
|             case IDENT: | 
|                 child = this.Identifier(); | 
|                 break; | 
|   | 
|             case LEFTPARENTHESIS: | 
|                 child = this.Parentheses(parentheses, this.scope.AtrulePrelude); | 
|                 break; | 
|   | 
|             default: | 
|                 break scan; | 
|         } | 
|   | 
|         if (space !== null) { | 
|             children.push(space); | 
|             space = null; | 
|         } | 
|   | 
|         children.push(child); | 
|     } | 
|   | 
|     return children; | 
| } | 
|   | 
| module.exports = { | 
|     parse: { | 
|         prelude: function() { | 
|             var children = readSequence.call(this); | 
|   | 
|             if (this.getFirstListNode(children) === null) { | 
|                 this.error('Condition is expected'); | 
|             } | 
|   | 
|             return children; | 
|         }, | 
|         block: function() { | 
|             return this.Block(false); | 
|         } | 
|     } | 
| }; |