#mdbook #boilerplate #proprocessor

mdbook-preprocessor-boilerplate

mdbook 预处理器样板代码

3 个版本

0.1.2 2023年4月20日
0.1.1 2021年12月2日
0.1.0 2021年12月2日

#877 in 文本处理

Download history 1812/week @ 2024-03-14 1462/week @ 2024-03-21 1396/week @ 2024-03-28 1138/week @ 2024-04-04 1154/week @ 2024-04-11 1068/week @ 2024-04-18 1543/week @ 2024-04-25 1857/week @ 2024-05-02 845/week @ 2024-05-09 1568/week @ 2024-05-16 1000/week @ 2024-05-23 1581/week @ 2024-05-30 3479/week @ 2024-06-06 2381/week @ 2024-06-13 2530/week @ 2024-06-20 1444/week @ 2024-06-27

10,052 每月下载量
用于 3 crates

GPL-3.0 许可证

15KB
55 代码行

mdbook-preprocessor-boilerplate

mdbook 预处理器的样板代码。

处理 CLI,检查渲染器是否受支持,检查 mdbook 版本,并运行您的预处理器。您需要实现的是 mdbook::preprocess::Preprocessor 特性。

此样板代码有几个重型依赖项(如 serde_json 和 mdbook)。如果您想创建一个小的可执行文件,您将不得不自己实现此功能。

示例

以下功能上与 mdbook 提供的 No-Op Preprocessor 示例 相同。

use mdbook::book::Book;
use mdbook::preprocess::{CmdPreprocessor, Preprocessor, PreprocessorContext};
use anyhow::{bail, Result};

fn main() {
    mdbook_preprocessor_boilerplate::run(
        NoOpPreprocessor,
        "An mdbook preprocessor that does nothing" // CLI description
    );
}

struct NoOpPreprocessor;

impl Preprocessor for NoOpPreprocessor {
    fn name(&self) -> &str {
        "nop-preprocessor"
    }

    fn run(&self, ctx: &PreprocessorContext, book: Book) -> Result<Book> {
        // In testing we want to tell the preprocessor to blow up by setting a
        // particular config value
        if let Some(nop_cfg) = ctx.config.get_preprocessor(self.name()) {
            if nop_cfg.contains_key("blow-up") {
                anyhow::bail!("Boom!!1!");
            }
        }

        // we *are* a no-op preprocessor after all
        Ok(book)
    }

    fn supports_renderer(&self, renderer: &str) -> bool {
        renderer != "not-supported"
    }
}

许可证:GPL-3.0

依赖关系

~12–23MB
~324K SLoC