brackets.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. "use strict";
  2. function last(array) {
  3. return array[array.length - 1];
  4. }
  5. var brackets = {
  6. /**
  7. * Parse string to nodes tree
  8. */
  9. parse: function parse(str) {
  10. var current = [''];
  11. var stack = [current];
  12. for (var i = 0; i < str.length; i++) {
  13. var sym = str[i];
  14. if (sym === '(') {
  15. current = [''];
  16. last(stack).push(current);
  17. stack.push(current);
  18. continue;
  19. }
  20. if (sym === ')') {
  21. stack.pop();
  22. current = last(stack);
  23. current.push('');
  24. continue;
  25. }
  26. current[current.length - 1] += sym;
  27. }
  28. return stack[0];
  29. },
  30. /**
  31. * Generate output string by nodes tree
  32. */
  33. stringify: function stringify(ast) {
  34. var result = '';
  35. for (var _iterator = ast, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
  36. var _ref;
  37. if (_isArray) {
  38. if (_i >= _iterator.length) break;
  39. _ref = _iterator[_i++];
  40. } else {
  41. _i = _iterator.next();
  42. if (_i.done) break;
  43. _ref = _i.value;
  44. }
  45. var i = _ref;
  46. if (typeof i === 'object') {
  47. result += "(" + brackets.stringify(i) + ")";
  48. continue;
  49. }
  50. result += i;
  51. }
  52. return result;
  53. }
  54. };
  55. module.exports = brackets;