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

Function parseFilters

static/vuejs/vue.js:5341–5421  ·  view source on GitHub ↗
(exp)

Source from the content-addressed store, hash-verified

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

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