#[derive(Debug, Clone, PartialEq)]
pub enum Block {
Heading { level: u8, text: Vec<Inline> },
Paragraph(Vec<Inline>),
CodeBlock { lang: Option<String>, code: String },
LiveComponent { source: String },
Diagram { kind: DiagramKind, source: String },
List {
ordered: bool,
items: Vec<Vec<Inline>>,
},
Blockquote(Vec<Block>),
Table {
headers: Vec<Vec<Inline>>,
rows: Vec<Vec<Vec<Inline>>>,
},
ThematicBreak,
Html(String),
Center(Vec<Block>),
Div { attrs: String, children: Vec<Block> },
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum DiagramKind {
Mermaid,
Math,
}
impl DiagramKind {
pub fn attr(self) -> &'static str {
match self {
DiagramKind::Mermaid => "mermaid",
DiagramKind::Math => "math",
}
}
pub fn source_lang(self) -> &'static str {
match self {
DiagramKind::Mermaid => "mermaid",
DiagramKind::Math => "latex",
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub enum Inline {
Text(String),
Strong(Vec<Inline>),
Emphasis(Vec<Inline>),
Code(String),
Link { text: Vec<Inline>, url: String },
Image { alt: String, url: String },
InlineHtml(String),
}