Combinator.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. var TYPE = require('../../tokenizer').TYPE;
  2. var PLUSSIGN = TYPE.PlusSign;
  3. var SOLIDUS = TYPE.Solidus;
  4. var GREATERTHANSIGN = TYPE.GreaterThanSign;
  5. var TILDE = TYPE.Tilde;
  6. // + | > | ~ | /deep/
  7. module.exports = {
  8. name: 'Combinator',
  9. structure: {
  10. name: String
  11. },
  12. parse: function() {
  13. var start = this.scanner.tokenStart;
  14. switch (this.scanner.tokenType) {
  15. case GREATERTHANSIGN:
  16. case PLUSSIGN:
  17. case TILDE:
  18. this.scanner.next();
  19. break;
  20. case SOLIDUS:
  21. this.scanner.next();
  22. this.scanner.expectIdentifier('deep');
  23. this.scanner.eat(SOLIDUS);
  24. break;
  25. default:
  26. this.scanner.error('Combinator is expected');
  27. }
  28. return {
  29. type: 'Combinator',
  30. loc: this.getLocation(start, this.scanner.tokenStart),
  31. name: this.scanner.substrToCursor(start)
  32. };
  33. },
  34. generate: function(node) {
  35. this.chunk(node.name);
  36. }
  37. };