| var TYPE = require('../tokenizer').TYPE; |
| var WHITESPACE = TYPE.WhiteSpace; |
| var COMMENT = TYPE.Comment; |
| |
| module.exports = function readSequence(recognizer) { |
| var children = this.createList(); |
| var child = null; |
| var context = { |
| recognizer: recognizer, |
| space: null, |
| ignoreWS: false, |
| ignoreWSAfter: false |
| }; |
| |
| this.scanner.skipSC(); |
| |
| while (!this.scanner.eof) { |
| switch (this.scanner.tokenType) { |
| case COMMENT: |
| this.scanner.next(); |
| continue; |
| |
| case WHITESPACE: |
| if (context.ignoreWS) { |
| this.scanner.next(); |
| } else { |
| context.space = this.WhiteSpace(); |
| } |
| continue; |
| } |
| |
| child = recognizer.getNode.call(this, context); |
| |
| if (child === undefined) { |
| break; |
| } |
| |
| if (context.space !== null) { |
| children.push(context.space); |
| context.space = null; |
| } |
| |
| children.push(child); |
| |
| if (context.ignoreWSAfter) { |
| context.ignoreWSAfter = false; |
| context.ignoreWS = true; |
| } else { |
| context.ignoreWS = false; |
| } |
| } |
| |
| return children; |
| }; |