| Index: README.md |
| =================================================================== |
| --- a/README.md |
| +++ b/README.md |
| @@ -44,6 +44,140 @@ |
| `msbuild` command line tool, e.g. run `msbuild /m build\ia32\libadblockplus.sln` |
| from the Visual Studio Developer Command Prompt to create a 32 bit debug build. |
| +Usage |
| +----- |
| + |
| +You can use libadblockplus to build an ad blocker. Or, strictly speaking, a web |
| +content filter. Just like Adblock Plus, it can detect resources that should be |
| +blocked based on their URL and context information, and generate CSS selectors |
| +to hide DOM elements. |
| + |
| +The basic usage is explained below, see the |
| +[API documentation](https://adblockplus.org/docs/libadblockplus) for more |
| +information. See the [filter documentation](https://adblockplus.org/en/filters) |
| +to learn more about Adblock Plus filters. |
| + |
| +### Initialising the engine |
| + |
| +All the types and functions in libadblockplus are in the `AdblockPlus` |
| +namespace. For brevity's sake, we'll assume the following `using` declaration: |
| + |
| + using namespace AdblockPlus; |
| + |
| +Most of the functionality of libadblockplus is available via the |
| +[`FilterEngine`](https://adblockplus.org/docs/libadblockplus/class_adblock_plus_1_1_filter_engine.html) |
| +class. Since libadblockplus uses the Adblock Plus core code under the hood, you |
| +first need to create a |
| +[`JsEngine`](https://adblockplus.org/docs/libadblockplus/class_adblock_plus_1_1_js_engine.html) |
| +instance and pass some information about your |
| +application to it. |
| + |
| + AppInfo appInfo; |
| + appInfo.name = "awesomewebfilter"; |
| + appInfo.version = "0.1"; |
| + appInfo.locale = "en-US"; |
| + JsEngine jsEngine(appInfo); |
| + |
| +`JsEngine` needs to store files, make web requests and write log messages. This |
| +normally works out of the box because it is using |
| +[`DefaultFileSystem`](https://adblockplus.org/docs/libadblockplus/class_adblock_plus_1_1_default_file_system.html), |
| +[`DefaultWebRequest`](https://adblockplus.org/docs/libadblockplus/class_adblock_plus_1_1_default_web_request.html) |
| +and |
| +[`DefaultLogSystem`](https://adblockplus.org/docs/libadblockplus/class_adblock_plus_1_1_default_log_system.html) |
| +by default. |
| + |
| +Depending on your application and platform, you might want to supply your own |
| +implementations for these - see |
| +[`FilterEngine::SetFileSystem`](https://adblockplus.org/docs/libadblockplus/class_adblock_plus_1_1_js_engine.html#a979e9bde78499dab9f5e3aacc5155f40), |
| +[`FilterEngine::SetWebRequest`](https://adblockplus.org/docs/libadblockplus/class_adblock_plus_1_1_js_engine.html#a290a03b86137a56d7b2f457f03c77504) |
| +and |
| +[`FilterEngine::SetLogSystem`](https://adblockplus.org/docs/libadblockplus/class_adblock_plus_1_1_js_engine.html#ab60b10be1d4500bce4b17c1e9dbaf4c8) |
| +respectively. |
| + |
| +With the `JsEngine` instance created, you can create a `FilterEngine` instance: |
| + |
| + FilterEngine filterEngine(jsEngine); |
| + |
| +When initialised, `FilterEngine` will automatically select a suitable ad |
| +blocking subscription based on `AppInfo::locale` and download the filters for |
| +it. |
| + |
| +### Managing subscriptions |
| + |
| +libadblockplus takes care of storing and updating subscriptions. |
| + |
| +You can add more: |
| + |
| + SubscriptionPtr subscription = |
| + filterEngine.GetSubscription("https://example.org/filters.txt"); |
| + subscription->AddToList(); |
| + |
| +Retrieving an existing subscription works the same way, use |
| +[`Subscription::IsListed`](https://adblockplus.org/docs/libadblockplus/class_adblock_plus_1_1_subscription.html#a42da64bdc0cb7ee65a27a001db0307c8) |
| +to check if the subscription has been added or not. |
| + |
| + SubscriptionPtr subscription = |
| + filterEngine.GetSubscription("https://example.org/filters.txt"); |
| + if (subscription->IsListed()) |
| + .... |
| + |
| +Removing a subscription is not rocket science either: |
| + |
| + subscription->RemoveFromList(); |
| + |
| +You can also get a list of all subscriptions that were added: |
| + |
| + std::vector<SubscriptionPtr> subscriptions = |
| + filterEngine.GetListedSubscriptions(); |
| + |
| +### Managing custom filters |
| + |
| +Working with custom filters is very similar to working with subscriptions: |
| + |
| + FilterPtr filter = filterEngine.GetFilter("||example.com/ad.png"); |
| + filter->AddToList(); |
| + filter->RemoveFromList(); |
| + |
| +Note that applications should only do this to manage a user's custom filters. In |
| +general, filter lists should be hosted somewhere and added as a subscription. |
| + |
| +### Matching blocking filters |
| + |
| +As mentioned above, one of the two main tasks of libadblockplus is to check if |
| +a URL matches any of the active blocking filters. |
| + |
| +To demonstrate this, we'll add a custom filter: |
| + |
| + FilterPtr filter = filterEngine.GetFilter("||example.com/ad.png"); |
| + filter->AddToList(); |
| + |
| +Now we'll call matches on an URL that should be blocked: |
| + |
| + FilterPtr match = |
| + filterEngine.Matches("http://example.com/ad.png", "DOCUMENT", ""); |
| + |
| +Since we've added a matching filter, `match` will point to the same filter |
| +object as `filter`. |
| + |
| +Note that we've ignored the third parameter of |
| +[`FilterEngine::Matches`](https://adblockplus.org/docs/libadblockplus/class_adblock_plus_1_1_filter_engine.html#a184211d324bfb6e23c5e09fae2d12f91) |
| +here to keep things simple. Real applications should pass the frame structure |
| +in here - this is necessary because many filters and exception rules are domain |
| +specific. |
| + |
| +### Generating CSS from element hiding filters |
| + |
| +Aside from blocking requests, ad blockers typically also hide elements. This is |
| +done via a second type of filter that is completely ignored when matching URLs: |
| +[element hiding rules](https://adblockplus.org/en/filters#elemhide). |
| + |
| +You can retrieve a list of all CSS selectors for elements that should be hidden |
| +using |
| +[`FilterEngine::GetElementHidingSelectors`](https://adblockplus.org/docs/libadblockplus/class_adblock_plus_1_1_filter_engine.html#a91c44dac13c7655230be49440f45a168). |
| + |
| +What libadblockplus clients typically do with this is to generate a CSS style |
| +sheet that is injected into each page. |
| + |
| Shell |
| ----- |