61 lines
1.8 KiB
Rust
61 lines
1.8 KiB
Rust
//! Markdown processing used in mdBook.
|
|
//!
|
|
//! This crate provides functions for processing Markdown in the same way as
|
|
//! [mdBook](https://rust-lang.github.io/mdBook/). The [`pulldown_cmark`]
|
|
//! crate is used as the underlying parser. This crate re-exports
|
|
//! [`pulldown_cmark`] so that you can access its types.
|
|
|
|
use pulldown_cmark::{Options, Parser};
|
|
|
|
#[doc(inline)]
|
|
pub use pulldown_cmark;
|
|
|
|
/// Options for parsing markdown.
|
|
#[non_exhaustive]
|
|
pub struct MarkdownOptions {
|
|
/// Enables smart punctuation.
|
|
///
|
|
/// Converts quotes to curly quotes, `...` to `…`, `--` to en-dash, and
|
|
/// `---` to em-dash.
|
|
///
|
|
/// This is `true` by default.
|
|
pub smart_punctuation: bool,
|
|
/// Enables definition lists.
|
|
///
|
|
/// This is `true` by default.
|
|
pub definition_lists: bool,
|
|
/// Enables admonitions.
|
|
///
|
|
/// This is `true` by default.
|
|
pub admonitions: bool,
|
|
}
|
|
|
|
impl Default for MarkdownOptions {
|
|
fn default() -> MarkdownOptions {
|
|
MarkdownOptions {
|
|
smart_punctuation: true,
|
|
definition_lists: true,
|
|
admonitions: true,
|
|
}
|
|
}
|
|
}
|
|
|
|
/// Creates a new pulldown-cmark parser of the given text.
|
|
pub fn new_cmark_parser<'text>(text: &'text str, options: &MarkdownOptions) -> Parser<'text> {
|
|
let mut opts = Options::empty();
|
|
opts.insert(Options::ENABLE_TABLES);
|
|
opts.insert(Options::ENABLE_FOOTNOTES);
|
|
opts.insert(Options::ENABLE_STRIKETHROUGH);
|
|
opts.insert(Options::ENABLE_TASKLISTS);
|
|
opts.insert(Options::ENABLE_HEADING_ATTRIBUTES);
|
|
if options.smart_punctuation {
|
|
opts.insert(Options::ENABLE_SMART_PUNCTUATION);
|
|
}
|
|
if options.definition_lists {
|
|
opts.insert(Options::ENABLE_DEFINITION_LIST);
|
|
}
|
|
if options.admonitions {
|
|
opts.insert(Options::ENABLE_GFM);
|
|
}
|
|
Parser::new_ext(text, opts)
|
|
}
|