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-present eyeo GmbH | 3 * Copyright (C) 2006-present 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 |
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
12 * GNU General Public License for more details. | 12 * GNU General Public License for more details. |
13 * | 13 * |
14 * You should have received a copy of the GNU General Public License | 14 * You should have received a copy of the GNU General Public License |
15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. | 15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
16 */ | 16 */ |
17 | 17 |
18 "use strict"; | 18 "use strict"; |
19 | 19 |
20 /** | 20 /** |
21 * @fileOverview Matcher class implementing matching addresses against | 21 * @fileOverview Matcher class implementing matching addresses against |
22 * a list of filters. | 22 * a list of filters. |
23 */ | 23 */ |
24 | 24 |
25 const {Filter, WhitelistFilter} = require("./filterClasses"); | 25 const {WhitelistFilter} = require("./filterClasses"); |
26 | 26 |
27 /** | 27 /** |
28 * Blacklist/whitelist filter matching | 28 * Blacklist/whitelist filter matching |
29 * @constructor | 29 * @constructor |
30 */ | 30 */ |
31 function Matcher() | 31 function Matcher() |
32 { | 32 { |
33 this.clear(); | 33 this.clear(); |
34 } | 34 } |
35 exports.Matcher = Matcher; | 35 exports.Matcher = Matcher; |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
105 }, | 105 }, |
106 | 106 |
107 /** | 107 /** |
108 * Chooses a keyword to be associated with the filter | 108 * Chooses a keyword to be associated with the filter |
109 * @param {Filter} filter | 109 * @param {Filter} filter |
110 * @return {string} keyword or an empty string if no keyword could be found | 110 * @return {string} keyword or an empty string if no keyword could be found |
111 */ | 111 */ |
112 findKeyword(filter) | 112 findKeyword(filter) |
113 { | 113 { |
114 let result = ""; | 114 let result = ""; |
115 let {text} = filter; | 115 let {pattern} = filter; |
116 if (Filter.regexpRegExp.test(text)) | 116 if (pattern == null) |
117 return result; | 117 return result; |
118 | 118 |
119 // Remove options | 119 let candidates = pattern.toLowerCase().match( |
120 let match = Filter.optionsRegExp.exec(text); | |
121 if (match) | |
122 text = match.input.substr(0, match.index); | |
123 | |
124 // Remove whitelist marker | |
125 if (text[0] == "@" && text[1] == "@") | |
126 text = text.substr(2); | |
127 | |
128 let candidates = text.toLowerCase().match( | |
129 /[^a-z0-9%*][a-z0-9%]{3,}(?=[^a-z0-9%*])/g | 120 /[^a-z0-9%*][a-z0-9%]{3,}(?=[^a-z0-9%*])/g |
130 ); | 121 ); |
131 if (!candidates) | 122 if (!candidates) |
132 return result; | 123 return result; |
133 | 124 |
134 let hash = this.filterByKeyword; | 125 let hash = this.filterByKeyword; |
135 let resultCount = 0xFFFFFF; | 126 let resultCount = 0xFFFFFF; |
136 let resultLength = 0; | 127 let resultLength = 0; |
137 for (let i = 0, l = candidates.length; i < l; i++) | 128 for (let i = 0, l = candidates.length; i < l; i++) |
138 { | 129 { |
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
425 | 416 |
426 return result; | 417 return result; |
427 } | 418 } |
428 }; | 419 }; |
429 | 420 |
430 /** | 421 /** |
431 * Shared CombinedMatcher instance that should usually be used. | 422 * Shared CombinedMatcher instance that should usually be used. |
432 * @type {CombinedMatcher} | 423 * @type {CombinedMatcher} |
433 */ | 424 */ |
434 exports.defaultMatcher = new CombinedMatcher(); | 425 exports.defaultMatcher = new CombinedMatcher(); |
OLD | NEW |