| LEFT | RIGHT | 
|---|
| (no file at all) |  | 
| 1 # python-abp | 1 # python-abp | 
| 2 | 2 | 
| 3 This repository contains a library for working with Adblock Plus filter lists | 3 This repository contains a library for working with Adblock Plus filter lists | 
| 4 and the script that is used for building Adblock Plus filter lists from the | 4 and the script that is used for building Adblock Plus filter lists from the | 
| 5 form in which they are authored into the format suitable for consumption by the | 5 form in which they are authored into the format suitable for consumption by the | 
| 6 adblocking software. | 6 adblocking software. | 
| 7 | 7 | 
| 8 ## Installation | 8 ## Installation | 
| 9 | 9 | 
| 10 Prerequisites: | 10 Prerequisites: | 
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 79 If you don't know all the source names that are needed to render some list, | 79 If you don't know all the source names that are needed to render some list, | 
| 80 just run `flrender` and it will report what it's missing: | 80 just run `flrender` and it will report what it's missing: | 
| 81 | 81 | 
| 82     $ flrender easylist.txt output/easylist.txt | 82     $ flrender easylist.txt output/easylist.txt | 
| 83     Unknown source: 'easylist' when including 'easylist:easylist/easylist_gener | 83     Unknown source: 'easylist' when including 'easylist:easylist/easylist_gener | 
| 84     al_block.txt' from 'easylist.txt' | 84     al_block.txt' from 'easylist.txt' | 
| 85 | 85 | 
| 86 You can clone the necessary repositories to a local directory and add `-i` | 86 You can clone the necessary repositories to a local directory and add `-i` | 
| 87 options accordingly. | 87 options accordingly. | 
| 88 | 88 | 
|  | 89 ## Rendering diffs | 
|  | 90 | 
|  | 91 A diff allows a client running ad blocking software such as Adblock Plus to upda
     te | 
|  | 92 the filter lists incrementally, instead of downloading a new copy of a full list | 
|  | 93 during each update. This is meant to lessen the amount of resources used when up
     dating | 
|  | 94 filter lists (e.g. network data, memory usage, battery consumption, etc.), allow
     ing | 
|  | 95 clients to update their lists more frequently using less resources. | 
|  | 96 | 
|  | 97 Python-abp contains a script that produces the diff between two versions of a | 
|  | 98 filter list called `fldiff`: | 
|  | 99 | 
|  | 100     $ fldiff base.txt latest.txt output.txt | 
|  | 101 | 
|  | 102 This will produce a diff that shows how a client may get from `base.txt` to | 
|  | 103 `latest.txt`, and write the output to `output.txt`. The output argument is | 
|  | 104 optional. If ommitted, the data will be written to `stdout`. | 
|  | 105 | 
|  | 106 The script produces three types of lines, as specified in the [technical specifi
     cation][5]: | 
|  | 107 * Special comments of the form `! <name>:[ <value>]` | 
|  | 108 * Added filters of the form `+ <filter-text>` | 
|  | 109 * Removed filter of the form `- <filter-text>` | 
|  | 110 | 
| 89 ## Library API | 111 ## Library API | 
| 90 | 112 | 
| 91 Python-abp can also be used as a library for parsing filter lists. For example | 113 Python-abp can also be used as a library for parsing filter lists. For example | 
| 92 to read a filter list (we use Python 3 syntax here but the API is the same): | 114 to read a filter list (we use Python 3 syntax here but the API is the same): | 
| 93 | 115 | 
| 94     from abp.filters import parse_filterlist | 116     from abp.filters import parse_filterlist | 
| 95 | 117 | 
| 96     with open('filterlist.txt') as filterlist: | 118     with open('filterlist.txt') as filterlist: | 
| 97         for line in parse_filterlist(filterlist): | 119         for line in parse_filterlist(filterlist): | 
| 98             print(line) | 120             print(line) | 
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 175         > abp <- import("abp.filters.rpy") | 197         > abp <- import("abp.filters.rpy") | 
| 176 | 198 | 
| 177 Now you can use the functions with `abp$functionname`, e.g. | 199 Now you can use the functions with `abp$functionname`, e.g. | 
| 178 `abp.line2dict("@@||g.doubleclick.net/pagead/$subdocument,domain=hon30.org")` | 200 `abp.line2dict("@@||g.doubleclick.net/pagead/$subdocument,domain=hon30.org")` | 
| 179 | 201 | 
| 180 | 202 | 
| 181  [1]: https://adblockplus.org/filters#special-comments | 203  [1]: https://adblockplus.org/filters#special-comments | 
| 182  [2]: http://pytest.org/ | 204  [2]: http://pytest.org/ | 
| 183  [3]: https://tox.readthedocs.org/ | 205  [3]: https://tox.readthedocs.org/ | 
| 184  [4]: https://github.com/numpy/numpy/blob/master/doc/HOWTO_DOCUMENT.rst.txt | 206  [4]: https://github.com/numpy/numpy/blob/master/doc/HOWTO_DOCUMENT.rst.txt | 
|  | 207  [5]: https://docs.google.com/document/d/1SoEqaOBZRCfkh1s5Kds5A5RwUC_nqbYYlGH72s
     bsSgQ/ | 
| LEFT | RIGHT | 
|---|