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.
		
		
		
		
		
			
		
			
				
					
					
						
							50 lines
						
					
					
						
							1.1 KiB
						
					
					
				
			
		
		
	
	
							50 lines
						
					
					
						
							1.1 KiB
						
					
					
				var Marker = require('../tokenizer/marker'); | 
						|
 | 
						|
function split(value, separator) { | 
						|
  var openLevel = Marker.OPEN_ROUND_BRACKET; | 
						|
  var closeLevel = Marker.CLOSE_ROUND_BRACKET; | 
						|
  var level = 0; | 
						|
  var cursor = 0; | 
						|
  var lastStart = 0; | 
						|
  var lastValue; | 
						|
  var lastCharacter; | 
						|
  var len = value.length; | 
						|
  var parts = []; | 
						|
 | 
						|
  if (value.indexOf(separator) == -1) { | 
						|
    return [value]; | 
						|
  } | 
						|
 | 
						|
  if (value.indexOf(openLevel) == -1) { | 
						|
    return value.split(separator); | 
						|
  } | 
						|
 | 
						|
  while (cursor < len) { | 
						|
    if (value[cursor] == openLevel) { | 
						|
      level++; | 
						|
    } else if (value[cursor] == closeLevel) { | 
						|
      level--; | 
						|
    } | 
						|
 | 
						|
    if (level === 0 && cursor > 0 && cursor + 1 < len && value[cursor] == separator) { | 
						|
      parts.push(value.substring(lastStart, cursor)); | 
						|
      lastStart = cursor + 1; | 
						|
    } | 
						|
 | 
						|
    cursor++; | 
						|
  } | 
						|
 | 
						|
  if (lastStart < cursor + 1) { | 
						|
    lastValue = value.substring(lastStart); | 
						|
    lastCharacter = lastValue[lastValue.length - 1]; | 
						|
    if (lastCharacter == separator) { | 
						|
      lastValue = lastValue.substring(0, lastValue.length - 1); | 
						|
    } | 
						|
 | 
						|
    parts.push(lastValue); | 
						|
  } | 
						|
 | 
						|
  return parts; | 
						|
} | 
						|
 | 
						|
module.exports = split;
 | 
						|
 |