1use pulldown_cmark::{Options, Parser};
9
10#[doc(inline)]
11pub use pulldown_cmark;
12
13#[non_exhaustive]
15pub struct MarkdownOptions {
16 pub smart_punctuation: bool,
23 pub definition_lists: bool,
27 pub admonitions: bool,
31}
32
33impl Default for MarkdownOptions {
34 fn default() -> MarkdownOptions {
35 MarkdownOptions {
36 smart_punctuation: true,
37 definition_lists: true,
38 admonitions: true,
39 }
40 }
41}
42
43pub fn new_cmark_parser<'text>(text: &'text str, options: &MarkdownOptions) -> Parser<'text> {
45 let mut opts = Options::empty();
46 opts.insert(Options::ENABLE_TABLES);
47 opts.insert(Options::ENABLE_FOOTNOTES);
48 opts.insert(Options::ENABLE_STRIKETHROUGH);
49 opts.insert(Options::ENABLE_TASKLISTS);
50 opts.insert(Options::ENABLE_HEADING_ATTRIBUTES);
51 if options.smart_punctuation {
52 opts.insert(Options::ENABLE_SMART_PUNCTUATION);
53 }
54 if options.definition_lists {
55 opts.insert(Options::ENABLE_DEFINITION_LIST);
56 }
57 if options.admonitions {
58 opts.insert(Options::ENABLE_GFM);
59 }
60 Parser::new_ext(text, opts)
61}