OLD | NEW |
1 /* | 1 /* |
2 * This file is part of Adblock Plus <https://adblockplus.org/>, | 2 * This file is part of Adblock Plus <https://adblockplus.org/>, |
3 * Copyright (C) 2006-2017 eyeo GmbH | 3 * Copyright (C) 2006-2017 eyeo GmbH |
4 * | 4 * |
5 * Adblock Plus is free software: you can redistribute it and/or modify | 5 * Adblock Plus is free software: you can redistribute it and/or modify |
6 * it under the terms of the GNU General Public License version 3 as | 6 * it under the terms of the GNU General Public License version 3 as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
8 * | 8 * |
9 * Adblock Plus is distributed in the hope that it will be useful, | 9 * Adblock Plus is distributed in the hope that it will be useful, |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
(...skipping 30 matching lines...) Expand all Loading... |
41 // process anchor at expression start | 41 // process anchor at expression start |
42 .replace(/^\\\|/, "^") | 42 .replace(/^\\\|/, "^") |
43 // process anchor at expression end | 43 // process anchor at expression end |
44 .replace(/\\\|$/, "$") | 44 .replace(/\\\|$/, "$") |
45 // remove leading wildcards | 45 // remove leading wildcards |
46 .replace(/^(\.\*)/, "") | 46 .replace(/^(\.\*)/, "") |
47 // remove trailing wildcards | 47 // remove trailing wildcards |
48 .replace(/(\.\*)$/, ""); | 48 .replace(/(\.\*)$/, ""); |
49 } | 49 } |
50 | 50 |
51 if (typeof exports != "undefined") | 51 exports.filterToRegExp = filterToRegExp; |
52 exports.filterToRegExp = filterToRegExp; | 52 |
| 53 function splitSelector(selector) |
| 54 { |
| 55 if (selector.indexOf(",") == -1) |
| 56 return [selector]; |
| 57 |
| 58 let selectors = []; |
| 59 let start = 0; |
| 60 let level = 0; |
| 61 let sep = ""; |
| 62 |
| 63 for (let i = 0; i < selector.length; i++) |
| 64 { |
| 65 let chr = selector[i]; |
| 66 |
| 67 if (chr == "\\") // ignore escaped characters |
| 68 i++; |
| 69 else if (chr == sep) // don't split within quoted text |
| 70 sep = ""; // e.g. [attr=","] |
| 71 else if (sep == "") |
| 72 { |
| 73 if (chr == '"' || chr == "'") |
| 74 sep = chr; |
| 75 else if (chr == "(") // don't split between parentheses |
| 76 level++; // e.g. :matches(div,span) |
| 77 else if (chr == ")") |
| 78 level = Math.max(0, level - 1); |
| 79 else if (chr == "," && level == 0) |
| 80 { |
| 81 selectors.push(selector.substring(start, i)); |
| 82 start = i + 1; |
| 83 } |
| 84 } |
| 85 } |
| 86 |
| 87 selectors.push(selector.substring(start)); |
| 88 return selectors; |
| 89 } |
| 90 |
| 91 exports.splitSelector = splitSelector; |
OLD | NEW |