markdown_ppp/printer/
mod.rs

1mod block;
2mod blockquote;
3pub mod config;
4mod github_alert;
5mod heading;
6mod inline;
7mod list;
8mod table;
9mod tests;
10
11use crate::ast::*;
12use pretty::{Arena, DocBuilder};
13use std::rc::Rc;
14
15/// Render Markdown AST to Markdown document.
16pub fn render_markdown(ast: &Document, config: crate::printer::config::Config) -> String {
17    let config = Rc::new(config);
18    let arena = Arena::new();
19    let doc = ast.to_doc(config.clone(), &arena);
20
21    let mut buf = Vec::new();
22    doc.render(config.width, &mut buf).unwrap();
23    String::from_utf8(buf).unwrap()
24}
25
26trait ToDoc<'a> {
27    fn to_doc(
28        &self,
29        config: Rc<crate::printer::config::Config>,
30        arena: &'a Arena<'a>,
31    ) -> DocBuilder<'a, Arena<'a>, ()>;
32}
33
34impl<'a> ToDoc<'a> for Document {
35    fn to_doc(
36        &self,
37        config: Rc<crate::printer::config::Config>,
38        arena: &'a Arena<'a>,
39    ) -> DocBuilder<'a, Arena<'a>, ()> {
40        self.blocks.to_doc(config, arena)
41    }
42}