# mdBook `webinclude` Preprocessor [![Crates.io (latest)](https://img.shields.io/crates/dv/mdbook-webinclude)](https://crates.io/crates/mdbook-webinclude) The `webinclude` preprocessor works similar to the built-in [`include`](https://rust-lang.github.io/mdBook/format/mdbook.html#including-files) link which inserts (portions of) local files in a section within the book. The same can be achieved with `webinclude` however instead of specifying a path to the file a URL can be used. The source of that URL is obtained an further processed like with `include`. ## Installation & Setup This preprocessor can be installed with Cargo: ```console cargo install mdbook-webinclude ``` Add the following line to your `book.toml` file: ```toml [preprocessor.webinclude] ``` Now you can use the `webinclude` links in your book as described below. ## Usage ### Include Markdown Because the text is inserted before the book is rendered, Markdown from other sources can be included. This is especially useful when for instance your book lays in a different repository than the actual program. ```hbs {{#webinclude https://example.org/document.md}} ```
Keep in mind that header levels remain the same and are not adapted to the current chapter's header level.
### Include Text Text can be inserted as is as well which is less practical unless used within a code block. You can for example include source code from a different repository and wrap it in an appropiate code block. ````hbs ``` {{#webinclude https://example.org/main.rs}} ``` ```` ### Including portions of a file Often you only need a specific part of the file, e.g. relevant lines for an example. Four different modes are supported for partial includes. ```hbs {{#webinclude https://example.org/document.md 2}} {{#webinclude https://example.org/document.md :10}} {{#webinclude https://example.org/document.md 2:}} {{#webinclude https://example.org/document.md 2:10}} ``` The first command only includes the second line from file. The second command includes all lines up to line 10, i.e. the lines from 11 till the end of the file are omitted. The third command includes all lines from line 2, i.e. the first line is omitted. The last command includes the excerpt of `document.md` consisting of lines 2 to 10. To avoid breaking your book when modifying included files, you can also include a specific section using anchors instead of line numbers. An anchor is a pair of matching lines. The line beginning an anchor must match the regex `ANCHOR:\s*[\w_-]+` and similarly the ending line must match the regex `ANCHOR_END:\s*[\w_-]+`. This allows you to put anchors in any kind of commented line. Consider the following file to include: ```rust /* ANCHOR: all */ // ANCHOR: component struct Paddle { hello: f32, } // ANCHOR_END: component ////////// ANCHOR: system impl System for MySystem { ... } ////////// ANCHOR_END: system /* ANCHOR_END: all */ ``` Then in the book, all you have to do is: ````hbs Here is a component: ```rust,no_run,noplayground {{#webinclude file.rs:component}} ``` Here is a system: ```rust,no_run,noplayground {{#webinclude file.rs:system}} ``` This is the full file. ```rust,no_run,noplayground {{#webinclude file.rs:all}} ``` ```` ### Escaping For the really uncommon case where you want to literally include `{{#webinclude ...}}` simply prefix it with a backslash (`\`). ### Setting HTTP Headers HTTP headers can be configured in the `book.toml` file. Change this line in your `book.toml` file: ```diff - [preprocessor.webinclude] + [preprocessor.webinclude.headers] ``` You can then set the headers as described below. ```toml [preprocessor.webinclude.headers] user-agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0" accept = "text/plain" ```