9 个版本 (4 个稳定版)

3.0.0 2023年11月12日
2.0.1 2023年11月12日
2.0.0 2021年11月4日
1.0.0 2021年9月3日

#663 in 解析器实现

Download history 2/week @ 2024-06-04 4/week @ 2024-07-02 42/week @ 2024-07-23 27/week @ 2024-07-30

每月下载量 69

MIT/Apache

83KB
2K SLoC

discord-md

CI status crate version docs online MIT or Apache 2.0 Licenses

用 Rust 编写的 Discord 的 Markdown 解析器和生成器

示例

解析

use discord_md::ast::*;
use discord_md::parse;

fn main() {
  let message = "You can write *italics text*, `*inline code*`, and more!";

  let ast = MarkdownDocument::new(vec![
    MarkdownElement::Plain(Box::new(
      Plain::new("You can write ")
    )),
    MarkdownElement::ItalicsStar(Box::new(
      ItalicsStar::new(vec![
        MarkdownElement::Plain(Box::new(
          Plain::new("italics text")
        ))
      ])
    )),
    MarkdownElement::Plain(Box::new(
      Plain::new(", ")
    )),
    MarkdownElement::OneLineCode(Box::new(
      OneLineCode::new("*inline code*")
    )),
    MarkdownElement::Plain(Box::new(
      Plain::new(", and more!")
    )),
  ]);

  assert_eq!(
    parse(message),
    ast
  );
}

生成

use discord_md::ast::MarkdownDocument;
use discord_md::builder::*;

fn main() {
  let ast = MarkdownDocument::new(vec![
    plain("generating "),
    one_line_code("markdown"),
    plain(" is "),
    underline(vec![
      bold("easy"),
      plain(" and "),
      bold("fun!"),
    ]),
  ]);

  assert_eq!(
    ast.to_string(),
    "generating `markdown` is __**easy** and **fun!**__"
  );
}

功能

  • 最小依赖(仅 nomderive_more
  • 支持以下语法
    • 斜体(*italics*_italics_
    • 粗体(**bold**
    • 下划线(__underline__
    • 删除线(~~strikethrough~~
    • 隐藏内容(||spoiler||
    • 单行代码(`one line code`
    • 多行代码
      ```sh
      echo "multi line"
      echo "code"
      ```
      
    • 引用块(仅生成器支持[阅读限制说明]
      > block quote
      > some text
      

安装

将以下内容添加到您的 Cargo.toml 文件中

[dependencies]
discord-md = "3.0.0"

文档

在 docs.rs 上提供

解析器限制

解析器试图模仿官方 Discord 客户端 Markdown 解析器的行为,但并不完美。以下为已知限制列表。

  • 引用块不会被解析。 > 将被视为普通文本。
  • 嵌套强调,如 *italics **bold italics** italics*,可能不会被正确解析。
  • 单词内部强调可能不会被正确处理。解析器将 foo_bar_baz 视为强调,而 Discord 的解析器则不这么做。
  • 转义序列将被视为普通文本。

许可协议

许可协议为以下之一

由您选择。

贡献

除非您明确说明,否则根据Apache-2.0许可证定义的您有意提交以包含在作品中的任何贡献,都将按照上述方式双许可,不附加任何额外条款或条件。

依赖

~1.1–1.8MB
~36K SLoC