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
			| 
								 
											4 years ago
										 
									 | 
							
								"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;
							 |