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