ast-to-tokens.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. module.exports = {
  2. decorator: function(handlers) {
  3. var curNode = null;
  4. var prev = null;
  5. var tokens = [];
  6. return {
  7. children: handlers.children,
  8. node: function(node) {
  9. var tmp = curNode;
  10. curNode = node;
  11. handlers.node.call(this, node);
  12. curNode = tmp;
  13. },
  14. chunk: function(chunk) {
  15. if (tokens.length > 0) {
  16. switch (curNode.type) {
  17. case 'Dimension':
  18. case 'HexColor':
  19. case 'IdSelector':
  20. case 'Percentage':
  21. if (prev.node === curNode) {
  22. prev.value += chunk;
  23. return;
  24. }
  25. break;
  26. case 'Function':
  27. case 'PseudoClassSelector':
  28. case 'PseudoElementSelector':
  29. case 'Url':
  30. if (chunk === '(') {
  31. prev.value += chunk;
  32. return;
  33. }
  34. break;
  35. case 'Atrule':
  36. if (prev.node === curNode && prev.value === '@') {
  37. prev.value += chunk;
  38. return;
  39. }
  40. break;
  41. }
  42. }
  43. tokens.push(prev = {
  44. value: chunk,
  45. node: curNode
  46. });
  47. },
  48. result: function() {
  49. return tokens;
  50. }
  51. };
  52. }
  53. };