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;
|
|
|