MCPcopy Create free account
hub / github.com/TruthHun/BookStack / parseFilters

Function parseFilters

static/vuejs/vue.esm.js:5345–5425  ·  view source on GitHub ↗
(exp)

Source from the content-addressed store, hash-verified

5343var validDivisionCharRE = /[\w).+\-_$\]]/;
5344
5345function parseFilters (exp) {
5346 var inSingle = false;
5347 var inDouble = false;
5348 var inTemplateString = false;
5349 var inRegex = false;
5350 var curly = 0;
5351 var square = 0;
5352 var paren = 0;
5353 var lastFilterIndex = 0;
5354 var c, prev, i, expression, filters;
5355
5356 for (i = 0; i < exp.length; i++) {
5357 prev = c;
5358 c = exp.charCodeAt(i);
5359 if (inSingle) {
5360 if (c === 0x27 && prev !== 0x5C) { inSingle = false; }
5361 } else if (inDouble) {
5362 if (c === 0x22 && prev !== 0x5C) { inDouble = false; }
5363 } else if (inTemplateString) {
5364 if (c === 0x60 && prev !== 0x5C) { inTemplateString = false; }
5365 } else if (inRegex) {
5366 if (c === 0x2f && prev !== 0x5C) { inRegex = false; }
5367 } else if (
5368 c === 0x7C && // pipe
5369 exp.charCodeAt(i + 1) !== 0x7C &&
5370 exp.charCodeAt(i - 1) !== 0x7C &&
5371 !curly && !square && !paren
5372 ) {
5373 if (expression === undefined) {
5374 // first filter, end of expression
5375 lastFilterIndex = i + 1;
5376 expression = exp.slice(0, i).trim();
5377 } else {
5378 pushFilter();
5379 }
5380 } else {
5381 switch (c) {
5382 case 0x22: inDouble = true; break // "
5383 case 0x27: inSingle = true; break // '
5384 case 0x60: inTemplateString = true; break // `
5385 case 0x28: paren++; break // (
5386 case 0x29: paren--; break // )
5387 case 0x5B: square++; break // [
5388 case 0x5D: square--; break // ]
5389 case 0x7B: curly++; break // {
5390 case 0x7D: curly--; break // }
5391 }
5392 if (c === 0x2f) { // /
5393 var j = i - 1;
5394 var p = (void 0);
5395 // find first non-whitespace prev char
5396 for (; j >= 0; j--) {
5397 p = exp.charAt(j);
5398 if (p !== ' ') { break }
5399 }
5400 if (!p || !validDivisionCharRE.test(p)) {
5401 inRegex = true;
5402 }

Callers 3

getBindingAttrFunction · 0.70
parseTextFunction · 0.70
processAttrsFunction · 0.70

Calls 2

pushFilterFunction · 0.70
wrapFilterFunction · 0.70

Tested by

no test coverage detected