UNPKG

1.11 kBJavaScriptView Raw
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;