markdown-ppp 2.9.2

Feature-rich Markdown Parsing and Pretty-Printing library
Documentation
use crate::ast::*;
use crate::plaintext_printer::ToDoc;
use pretty::{Arena, DocAllocator, DocBuilder};

impl<'a> ToDoc<'a> for Vec<Inline> {
    fn to_doc(
        &self,
        state: &'a crate::plaintext_printer::State<'a>,
    ) -> DocBuilder<'a, Arena<'a>, ()> {
        state
            .arena
            .concat(self.iter().map(|inline| inline.to_doc(state)))
    }
}

impl<'a> ToDoc<'a> for Inline {
    fn to_doc(
        &self,
        state: &'a crate::plaintext_printer::State<'a>,
    ) -> DocBuilder<'a, Arena<'a>, ()> {
        match self {
            Inline::Text(t) => state.arena.text(t.clone()),
            Inline::LineBreak => state.arena.hardline(),
            Inline::Code(code) => state.arena.text(code.clone()),
            Inline::Html(_) => state.arena.nil(),
            Inline::Emphasis(children) => children.to_doc(state),
            Inline::Strong(children) => children.to_doc(state),
            Inline::Strikethrough(children) => children.to_doc(state),
            Inline::Link(Link { children, .. }) => children.to_doc(state),
            Inline::Image(Image { alt, .. }) => state.arena.text(alt.clone()),
            Inline::Autolink(link) => state.arena.text(link.clone()),
            Inline::FootnoteReference(label) => {
                let index = match state.get_footnote_index(label) {
                    Some(v) => v,
                    None => return state.arena.nil(),
                };
                state.arena.text(format!("[{index}]"))
            }
            Inline::LinkReference(v) => v.text.to_doc(state),
            Inline::Empty => state.arena.nil(),
        }
    }
}