in dep/etpl.js [337:387]
function parseTextBlock(source, open, close, greedy, onInBlock, onOutBlock) {
var closeLen = close.length;
var texts = (source || '').split(open);
var level = 0;
var buf = [];
for (var i = 0, len = texts.length; i < len; i++) {
var text = texts[i];
if (i) {
var openBegin = 1;
level++;
/* eslint-disable no-constant-condition */
while (1) {
var closeIndex = text.indexOf(close);
if (closeIndex < 0) {
buf.push(level > 1 && openBegin ? open : '', text);
break;
}
level = greedy ? level - 1 : 0;
buf.push(
level > 0 && openBegin ? open : '',
text.slice(0, closeIndex),
level > 0 ? close : ''
);
text = text.slice(closeIndex + closeLen);
openBegin = 0;
if (level === 0) {
break;
}
}
/* eslint-enable no-constant-condition */
if (level === 0) {
onInBlock(buf.join(''));
onOutBlock(text);
buf = [];
}
}
else {
text && onOutBlock(text);
}
}
if (level > 0 && buf.length > 0) {
onOutBlock(open);
onOutBlock(buf.join(''));
}
}