9 releases (4 stable)
3.0.0 | Nov 12, 2023 |
---|---|
2.0.1 | Nov 12, 2023 |
2.0.0 | Nov 4, 2021 |
1.0.0 | Sep 3, 2021 |
#880 in Parser implementations
29 downloads per month
83KB
2K
SLoC
discord-md
Parser and generator for Discord's markdown, written in Rust
Example
Parsing
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
);
}
Generating
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!**__"
);
}
Features
- Minimal dependencies (only nom and derive_more)
- Supports the following syntax:
- Italics (
*italics*
,_italics_
) - Bold (
**bold**
) - Underline (
__underline__
) - Strikethrough (
~~strikethrough~~
) - Spoiler (
||spoiler||
) - One line code (
`one line code`
) - Multi line code
```sh echo "multi line" echo "code" ```
- Block Quote (generator only)
> block quote > some text
- Italics (
Installation
Add the following to your Cargo.toml
file:
[dependencies]
discord-md = "3.0.0"
Documentation
Parser limitations
The parser tries to mimic the behavior of the official Discord client's markdown parser, but it's not perfect. The following is the list of known limitations.
- Block quotes are not parsed.
>
will be treated as plain text. - Nested emphasis, like
*italics **bold italics** italics*
, may not be parsed properly. - Intraword emphasis may not be handled properly. The parser treats
foo_bar_baz
as emphasis, while Discord's parser does not. - Escaping sequence will be treated as plain text.
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Dependencies
~1.1–1.8MB
~36K SLoC