docstrings/
to_md.rs

1use pulldown_cmark::{Event, Tag};
2
3pub fn md<'a, I>(events: I) -> String where
4    I: Iterator<Item = Event<'a>>,
5{
6    let mut res = String::new();
7
8    for event in events {
9        match event {
10            Event::Text(t) => {
11                res.push_str(&t);
12            }
13            Event::SoftBreak => {
14                res.push_str("\n");
15            }
16
17            Event::Start(Tag::Code) |
18            Event::End(Tag::Code) => {
19                res.push_str("`");
20            }
21
22            Event::Start(Tag::Emphasis) |
23            Event::End(Tag::Emphasis) => {
24                res.push_str("*");
25            }
26
27            Event::Start(Tag::Strong) |
28            Event::End(Tag::Strong) => {
29                res.push_str("**");
30            }
31
32            Event::End(Tag::Paragraph) => {
33                res.push_str("\n\n");
34            }
35
36            Event::Start(Tag::Header(n)) => {
37                res.push_str("\n");
38                res.extend(::std::iter::repeat("#").take(n as usize));
39                res.push_str(" ");
40            }
41            Event::End(Tag::Header(_)) => {
42                res.push_str("\n\n");
43            }
44
45            Event::Start(Tag::Item) => {
46                res.push_str("- ");
47            }
48            Event::End(Tag::Item) |
49            Event::End(Tag::List(_)) => {
50                res.push_str("\n");
51            }
52
53            Event::Start(Tag::CodeBlock(info)) => {
54                res.push_str("```");
55                res.push_str(&info);
56                res.push_str("\n");
57            }
58            Event::End(Tag::CodeBlock(_)) => {
59                res.push_str("```\n");
60            }
61
62            _ => {}
63        }
64    }
65
66    res.trim_right().into()
67}