1var Marker = require('../tokenizer/marker'); 2 3function split(value, separator) { 4 var openLevel = Marker.OPEN_ROUND_BRACKET; 5 var closeLevel = Marker.CLOSE_ROUND_BRACKET; 6 var level = 0; 7 var cursor = 0; 8 var lastStart = 0; 9 var lastValue; 10 var lastCharacter; 11 var len = value.length; 12 var parts = []; 13 14 if (value.indexOf(separator) == -1) { 15 return [value]; 16 } 17 18 if (value.indexOf(openLevel) == -1) { 19 return value.split(separator); 20 } 21 22 while (cursor < len) { 23 if (value[cursor] == openLevel) { 24 level++; 25 } else if (value[cursor] == closeLevel) { 26 level--; 27 } 28 29 if (level === 0 && cursor > 0 && cursor + 1 < len && value[cursor] == separator) { 30 parts.push(value.substring(lastStart, cursor)); 31 lastStart = cursor + 1; 32 } 33 34 cursor++; 35 } 36 37 if (lastStart < cursor + 1) { 38 lastValue = value.substring(lastStart); 39 lastCharacter = lastValue[lastValue.length - 1]; 40 if (lastCharacter == separator) { 41 lastValue = lastValue.substring(0, lastValue.length - 1); 42 } 43 44 parts.push(lastValue); 45 } 46 47 return parts; 48} 49 50module.exports = split; 51