#markdown-parser #pest-parser #transformer

mdtrans

使用 pest.rs 的 Markdown 解析器和转换器,注重满足项目的需求灵活性

5 个版本

0.1.5 2024年3月25日
0.1.4 2024年2月7日
0.1.3 2024年1月23日

文本处理 中排名 435

每月下载量 30

GPL-3.0-only

42KB
962 行代码(不含注释)

Mdtrans

使用 Rust 和 Pest 实现的 Markdown 解析器和转换器

这不是最快的解析器/转换器,但它旨在提供最大的灵活性以满足您的需求。

使用方法

#[derive(Default)]
pub struct MyOwnTransformer {
   image_count: usize,
   image_trans: usize,
}

impl MarkdownTransformer for MyOwnTransformer {
    fn peek_image(&mut self, alt: String, url: String, add_tags: HashMap<String, String>) {
        self.image_count_total += 1;
    }
    fn tranform_image(&mut self, alt: String, url: String, add_tags: HashMap<String, String>) -> String {
        self.image_trans += 1;
        format!("Image {}/{} <img alt=\"{alt}\" href=\"{url}\">", self.image_trans, self.image_count)
    }
}

fn main() {
    let trans = MyOwnTransformer::default();
    let input = " ... ".to_string();
    let output = transform_markdown_string(input, &mut trans).unwrap();
    println!("{output}");
}

transform_markdown_string 函数内部,转换器将执行所有之前的 peek 函数。
这意味着在这个代码中,我们首先计算图像的总数,然后转换每一个。
结果将类似于

Image 1/2 <img alt="toto" href="url">
Image 2/2 <img alt="tutu" href="url">

有关 Markdown 到 HTML 实现的示例,请参阅 此文件
有关特质的定义,请参阅 此文件

贡献

这是一个爱好性质的侧项目,但如果您愿意,也可以做出贡献!

  • 我非常感激对 Pest 语法文件 的贡献,因为我并不是这个领域的专家
  • 如果您发现某些 Markdown 输入不被此引擎支持(或支持不理想),或者导致错误,您可以打开一个 issue。

依赖关系

约 2–2.8MB
约 56K SLoC