Parser and generator for Discord's markdown, written in Rust
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!**__"
);
}- 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 (
Add the following to your Cargo.toml file:
[dependencies]
discord-md = "3.0.0"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_bazas emphasis, while Discord's parser does not. - Escaping sequence will be treated as plain text.
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.
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.