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 解析器实现
每月下载量 69
83KB
2K SLoC
discord-md
用 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!**__"
);
}
功能
- 最小依赖(仅 nom 和 derive_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"
文档
解析器限制
解析器试图模仿官方 Discord 客户端 Markdown 解析器的行为,但并不完美。以下为已知限制列表。
- 引用块不会被解析。
>
将被视为普通文本。 - 嵌套强调,如
*italics **bold italics** italics*
,可能不会被正确解析。 - 单词内部强调可能不会被正确处理。解析器将
foo_bar_baz
视为强调,而 Discord 的解析器则不这么做。 - 转义序列将被视为普通文本。
许可协议
许可协议为以下之一
- Apache许可证,版本2.0(《LICENSE-APACHE》或https://apache.ac.cn/licenses/LICENSE-2.0》)
- MIT许可证(《LICENSE-MIT》或http://opensource.org/licenses/MIT》)
由您选择。
贡献
除非您明确说明,否则根据Apache-2.0许可证定义的您有意提交以包含在作品中的任何贡献,都将按照上述方式双许可,不附加任何额外条款或条件。
依赖
~1.1–1.8MB
~36K SLoC