| OLD | NEW | 
|---|
| (Empty) |  | 
|  | 1 /* | 
|  | 2  * This file is part of Adblock Plus <https://adblockplus.org/>, | 
|  | 3  * Copyright (C) 2006-present eyeo GmbH | 
|  | 4  * | 
|  | 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 | 
|  | 7  * published by the Free Software Foundation. | 
|  | 8  * | 
|  | 9  * Adblock Plus is distributed in the hope that it will be useful, | 
|  | 10  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | 11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
|  | 12  * GNU General Public License for more details. | 
|  | 13  * | 
|  | 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/>. | 
|  | 16  */ | 
|  | 17 | 
|  | 18 "use strict"; | 
|  | 19 | 
|  | 20 /** | 
|  | 21  * @fileOverview INI parsing. | 
|  | 22  */ | 
|  | 23 | 
|  | 24 const {Filter} = require("./filterClasses"); | 
|  | 25 const {Subscription} = require("./subscriptionClasses"); | 
|  | 26 | 
|  | 27 /** | 
|  | 28  * Parses filter data. | 
|  | 29  */ | 
|  | 30 class INIParser | 
|  | 31 { | 
|  | 32   constructor() | 
|  | 33   { | 
|  | 34     this.fileProperties = {}; | 
|  | 35     this.subscriptions = []; | 
|  | 36     this.knownFilters = new Map(); | 
|  | 37     this.knownSubscriptions = new Map(); | 
|  | 38 | 
|  | 39     this._wantObj = true; | 
|  | 40     this._curObj = this.fileProperties; | 
|  | 41     this._curSection = null; | 
|  | 42   } | 
|  | 43 | 
|  | 44   process(val) | 
|  | 45   { | 
|  | 46     let origKnownFilters = Filter.knownFilters; | 
|  | 47     Filter.knownFilters = this.knownFilters; | 
|  | 48     let origKnownSubscriptions = Subscription.knownSubscriptions; | 
|  | 49     Subscription.knownSubscriptions = this.knownSubscriptions; | 
|  | 50     let match; | 
|  | 51     try | 
|  | 52     { | 
|  | 53       if (this._wantObj === true && (match = /^(\w+)=(.*)$/.exec(val))) | 
|  | 54         this._curObj[match[1]] = match[2]; | 
|  | 55       else if (val === null || (match = /^\s*\[(.+)\]\s*$/.exec(val))) | 
|  | 56       { | 
|  | 57         if (this._curObj) | 
|  | 58         { | 
|  | 59           // Process current object before going to next section | 
|  | 60           switch (this._curSection) | 
|  | 61           { | 
|  | 62             case "filter": | 
|  | 63               if ("text" in this._curObj) | 
|  | 64                 Filter.fromObject(this._curObj); | 
|  | 65               break; | 
|  | 66             case "subscription": { | 
|  | 67               let subscription = Subscription.fromObject(this._curObj); | 
|  | 68               if (subscription) | 
|  | 69                 this.subscriptions.push(subscription); | 
|  | 70               break; | 
|  | 71             } | 
|  | 72             case "subscription filters": | 
|  | 73               if (this.subscriptions.length) | 
|  | 74               { | 
|  | 75                 let subscription = this.subscriptions[ | 
|  | 76                   this.subscriptions.length - 1 | 
|  | 77                 ]; | 
|  | 78                 for (let text of this._curObj) | 
|  | 79                 { | 
|  | 80                   let filter = Filter.fromText(text); | 
|  | 81                   subscription.filters.push(filter); | 
|  | 82                   filter.subscriptions.add(subscription); | 
|  | 83                 } | 
|  | 84               } | 
|  | 85               break; | 
|  | 86           } | 
|  | 87         } | 
|  | 88 | 
|  | 89         if (val === null) | 
|  | 90           return; | 
|  | 91 | 
|  | 92         this._curSection = match[1].toLowerCase(); | 
|  | 93         switch (this._curSection) | 
|  | 94         { | 
|  | 95           case "filter": | 
|  | 96           case "subscription": | 
|  | 97             this._wantObj = true; | 
|  | 98             this._curObj = {}; | 
|  | 99             break; | 
|  | 100           case "subscription filters": | 
|  | 101             this._wantObj = false; | 
|  | 102             this._curObj = []; | 
|  | 103             break; | 
|  | 104           default: | 
|  | 105             this._wantObj = null; | 
|  | 106             this._curObj = null; | 
|  | 107         } | 
|  | 108       } | 
|  | 109       else if (this._wantObj === false && val) | 
|  | 110         this._curObj.push(val.replace(/\\\[/g, "[")); | 
|  | 111     } | 
|  | 112     finally | 
|  | 113     { | 
|  | 114       Filter.knownFilters = origKnownFilters; | 
|  | 115       Subscription.knownSubscriptions = origKnownSubscriptions; | 
|  | 116     } | 
|  | 117   } | 
|  | 118 } | 
|  | 119 | 
|  | 120 exports.INIParser = INIParser; | 
| OLD | NEW | 
|---|