(exp)
| 6820 | var validDivisionCharRE = /[\w).+\-_$\]]/; |
| 6821 | |
| 6822 | function parseFilters (exp) { |
| 6823 | var inSingle = false; |
| 6824 | var inDouble = false; |
| 6825 | var inTemplateString = false; |
| 6826 | var inRegex = false; |
| 6827 | var curly = 0; |
| 6828 | var square = 0; |
| 6829 | var paren = 0; |
| 6830 | var lastFilterIndex = 0; |
| 6831 | var c, prev, i, expression, filters; |
| 6832 | |
| 6833 | for (i = 0; i < exp.length; i++) { |
| 6834 | prev = c; |
| 6835 | c = exp.charCodeAt(i); |
| 6836 | if (inSingle) { |
| 6837 | if (c === 0x27 && prev !== 0x5C) { inSingle = false; } |
| 6838 | } else if (inDouble) { |
| 6839 | if (c === 0x22 && prev !== 0x5C) { inDouble = false; } |
| 6840 | } else if (inTemplateString) { |
| 6841 | if (c === 0x60 && prev !== 0x5C) { inTemplateString = false; } |
| 6842 | } else if (inRegex) { |
| 6843 | if (c === 0x2f && prev !== 0x5C) { inRegex = false; } |
| 6844 | } else if ( |
| 6845 | c === 0x7C && // pipe |
| 6846 | exp.charCodeAt(i + 1) !== 0x7C && |
| 6847 | exp.charCodeAt(i - 1) !== 0x7C && |
| 6848 | !curly && !square && !paren |
| 6849 | ) { |
| 6850 | if (expression === undefined) { |
| 6851 | // first filter, end of expression |
| 6852 | lastFilterIndex = i + 1; |
| 6853 | expression = exp.slice(0, i).trim(); |
| 6854 | } else { |
| 6855 | pushFilter(); |
| 6856 | } |
| 6857 | } else { |
| 6858 | switch (c) { |
| 6859 | case 0x22: inDouble = true; break // " |
| 6860 | case 0x27: inSingle = true; break // ' |
| 6861 | case 0x60: inTemplateString = true; break // ` |
| 6862 | case 0x28: paren++; break // ( |
| 6863 | case 0x29: paren--; break // ) |
| 6864 | case 0x5B: square++; break // [ |
| 6865 | case 0x5D: square--; break // ] |
| 6866 | case 0x7B: curly++; break // { |
| 6867 | case 0x7D: curly--; break // } |
| 6868 | } |
| 6869 | if (c === 0x2f) { // / |
| 6870 | var j = i - 1; |
| 6871 | var p = (void 0); |
| 6872 | // find first non-whitespace prev char |
| 6873 | for (; j >= 0; j--) { |
| 6874 | p = exp.charAt(j); |
| 6875 | if (p !== ' ') { break } |
| 6876 | } |
| 6877 | if (!p || !validDivisionCharRE.test(p)) { |
| 6878 | inRegex = true; |
| 6879 | } |
no test coverage detected