| 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 |