use pulldown_cmark::{Options, Parser};
#[doc(inline)]
pub use pulldown_cmark;
#[non_exhaustive]
pub struct MarkdownOptions {
pub smart_punctuation: bool,
pub definition_lists: bool,
pub admonitions: bool,
}
impl Default for MarkdownOptions {
fn default() -> MarkdownOptions {
MarkdownOptions {
smart_punctuation: true,
definition_lists: true,
admonitions: true,
}
}
}
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)
}