Rule.cjs 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. 'use strict';
  2. const types = require('../../tokenizer/types.cjs');
  3. function consumeRaw() {
  4. return this.Raw(this.consumeUntilLeftCurlyBracket, true);
  5. }
  6. function consumePrelude() {
  7. const prelude = this.SelectorList();
  8. if (prelude.type !== 'Raw' &&
  9. this.eof === false &&
  10. this.tokenType !== types.LeftCurlyBracket) {
  11. this.error();
  12. }
  13. return prelude;
  14. }
  15. const name = 'Rule';
  16. const walkContext = 'rule';
  17. const structure = {
  18. prelude: ['SelectorList', 'Raw'],
  19. block: ['Block']
  20. };
  21. function parse() {
  22. const startToken = this.tokenIndex;
  23. const startOffset = this.tokenStart;
  24. let prelude;
  25. let block;
  26. if (this.parseRulePrelude) {
  27. prelude = this.parseWithFallback(consumePrelude, consumeRaw);
  28. } else {
  29. prelude = consumeRaw.call(this, startToken);
  30. }
  31. block = this.Block(true);
  32. return {
  33. type: 'Rule',
  34. loc: this.getLocation(startOffset, this.tokenStart),
  35. prelude,
  36. block
  37. };
  38. }
  39. function generate(node) {
  40. this.node(node.prelude);
  41. this.node(node.block);
  42. }
  43. exports.generate = generate;
  44. exports.name = name;
  45. exports.parse = parse;
  46. exports.structure = structure;
  47. exports.walkContext = walkContext;