askama_markdown_cmark/
lib.rs1pub mod filters {
2 use std::fmt;
3
4 use pulldown_cmark;
5
6 pub fn markdown_cmark<T: fmt::Display>(
8 s: T,
9 _: &dyn askama::Values,
10 ) -> ::askama::Result<String> {
11 let text = &s.to_string();
12 let parser = pulldown_cmark::Parser::new_ext(text, pulldown_cmark::Options::all());
13
14 let mut buf = String::new();
15 pulldown_cmark::html::push_html(&mut buf, parser);
16
17 Ok(buf)
18 }
19}
20
21#[cfg(test)]
22mod tests {
23 use super::filters;
24 use askama::Template;
25
26 #[derive(Template)]
27 #[template(source = "{{ s | markdown_cmark }}", ext = "md")]
28 struct ExampleCmark<'a> {
29 s: &'a str,
30 }
31
32 #[test]
33 fn markdown() {
34 let t = ExampleCmark {
35 s: "*Simple* ipsum",
36 };
37
38 assert_eq!(t.render().unwrap(), "<p><em>Simple</em> ipsum</p>\n");
39 }
40}