| var TYPE = require('../../tokenizer').TYPE; | 
|   | 
| var IDENT = TYPE.Ident; | 
| var PLUSSIGN = 0x002B;        // U+002B PLUS SIGN (+) | 
| var SOLIDUS = 0x002F;         // U+002F SOLIDUS (/) | 
| var GREATERTHANSIGN = 0x003E; // U+003E GREATER-THAN SIGN (>) | 
| var TILDE = 0x007E;           // U+007E TILDE (~) | 
|   | 
| // + | > | ~ | /deep/ | 
| module.exports = { | 
|     name: 'Combinator', | 
|     structure: { | 
|         name: String | 
|     }, | 
|     parse: function() { | 
|         var start = this.scanner.tokenStart; | 
|         var code = this.scanner.source.charCodeAt(this.scanner.tokenStart); | 
|   | 
|         switch (code) { | 
|             case GREATERTHANSIGN: | 
|             case PLUSSIGN: | 
|             case TILDE: | 
|                 this.scanner.next(); | 
|                 break; | 
|   | 
|             case SOLIDUS: | 
|                 this.scanner.next(); | 
|   | 
|                 if (this.scanner.tokenType !== IDENT || this.scanner.lookupValue(0, 'deep') === false) { | 
|                     this.error('Identifier `deep` is expected'); | 
|                 } | 
|   | 
|                 this.scanner.next(); | 
|   | 
|                 if (!this.scanner.isDelim(SOLIDUS)) { | 
|                     this.error('Solidus is expected'); | 
|                 } | 
|   | 
|                 this.scanner.next(); | 
|                 break; | 
|   | 
|             default: | 
|                 this.error('Combinator is expected'); | 
|         } | 
|   | 
|         return { | 
|             type: 'Combinator', | 
|             loc: this.getLocation(start, this.scanner.tokenStart), | 
|             name: this.scanner.substrToCursor(start) | 
|         }; | 
|     }, | 
|     generate: function(node) { | 
|         this.chunk(node.name); | 
|     } | 
| }; |