use pulldown_cmark::{Parser, Tag, html, OPTION_ENABLE_TABLES, OPTION_DISABLE_HTML}; use pulldown_cmark::Event::{Text, End}; pub fn render_markdown(src: &str) -> String { let opts = OPTION_ENABLE_TABLES | OPTION_DISABLE_HTML; let p = Parser::new_ext(src, opts); let mut buf = String::new(); html::push_html(&mut buf, p); buf } fn is_html_special(c: char) -> bool { c == '&' || c == '<' || c == '>' } pub fn render_markdown_for_fts(src: &str) -> String { let opts = OPTION_ENABLE_TABLES | OPTION_DISABLE_HTML; let p = Parser::new_ext(src, opts); let mut buf = String::new(); for event in p { match event { Text(text) => buf.push_str(&text.replace(is_html_special, " ")), End(Tag::Link(uri, _title)) => { buf.push_str(" ("); buf.push_str(&uri.replace(is_html_special, " ")); buf.push_str(") "); } _ => buf.push_str(" "), } } buf }