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.
		
		
		
		
		
			
		
			
				
					
					
						
							69 lines
						
					
					
						
							1.3 KiB
						
					
					
				
			
		
		
	
	
							69 lines
						
					
					
						
							1.3 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 i = 0; i < str.length; i++) { | 
						|
      var sym = str[i]; | 
						|
 | 
						|
      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 _iterator = ast, _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 i = _ref; | 
						|
 | 
						|
      if (typeof i === 'object') { | 
						|
        result += "(" + brackets.stringify(i) + ")"; | 
						|
        continue; | 
						|
      } | 
						|
 | 
						|
      result += i; | 
						|
    } | 
						|
 | 
						|
    return result; | 
						|
  } | 
						|
}; | 
						|
module.exports = brackets; |