You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
1.6 KiB
80 lines
1.6 KiB
"use strict"; |
|
|
|
function last(array) { |
|
return array[array.length - 1]; |
|
} |
|
|
|
var brackets = { |
|
/** |
|
* Parse string to nodes tree |
|
*/ |
|
parse: function parse(str) { |
|
var current = ['']; |
|
var stack = [current]; |
|
|
|
for (var _iterator = str, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { |
|
var _ref; |
|
|
|
if (_isArray) { |
|
if (_i >= _iterator.length) break; |
|
_ref = _iterator[_i++]; |
|
} else { |
|
_i = _iterator.next(); |
|
if (_i.done) break; |
|
_ref = _i.value; |
|
} |
|
|
|
var sym = _ref; |
|
|
|
if (sym === '(') { |
|
current = ['']; |
|
last(stack).push(current); |
|
stack.push(current); |
|
continue; |
|
} |
|
|
|
if (sym === ')') { |
|
stack.pop(); |
|
current = last(stack); |
|
current.push(''); |
|
continue; |
|
} |
|
|
|
current[current.length - 1] += sym; |
|
} |
|
|
|
return stack[0]; |
|
}, |
|
|
|
/** |
|
* Generate output string by nodes tree |
|
*/ |
|
stringify: function stringify(ast) { |
|
var result = ''; |
|
|
|
for (var _iterator2 = ast, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) { |
|
var _ref2; |
|
|
|
if (_isArray2) { |
|
if (_i2 >= _iterator2.length) break; |
|
_ref2 = _iterator2[_i2++]; |
|
} else { |
|
_i2 = _iterator2.next(); |
|
if (_i2.done) break; |
|
_ref2 = _i2.value; |
|
} |
|
|
|
var i = _ref2; |
|
|
|
if (typeof i === 'object') { |
|
result += "(" + brackets.stringify(i) + ")"; |
|
continue; |
|
} |
|
|
|
result += i; |
|
} |
|
|
|
return result; |
|
} |
|
}; |
|
module.exports = brackets; |