use crate::span::Span;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Profile {
Litedoc,
Md,
MdStrict,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Module {
Tables,
Footnotes,
Math,
Tasks,
Strikethrough,
Autolink,
Html,
}
#[derive(Debug, Clone, PartialEq)]
pub struct Document<'a> {
pub profile: Profile,
pub modules: Vec<Module>,
pub metadata: Option<Metadata<'a>>,
pub blocks: Vec<Block<'a>>,
pub span: Span,
}
#[derive(Debug, Clone, PartialEq)]
pub struct Metadata<'a> {
pub entries: Vec<(CowStr<'a>, AttrValue<'a>)>,
pub span: Span,
}
#[derive(Debug, Clone, PartialEq)]
pub enum AttrValue<'a> {
Str(CowStr<'a>),
Bool(bool),
Int(i64),
Float(f64),
List(Vec<AttrValue<'a>>),
}
#[derive(Debug, Clone, PartialEq)]
pub enum Block<'a> {
Heading(Heading<'a>),
Paragraph(Paragraph<'a>),
List(List<'a>),
CodeBlock(CodeBlock<'a>),
Callout(Callout<'a>),
Quote(Quote<'a>),
Figure(Figure<'a>),
Table(Table<'a>),
Footnotes(Footnotes<'a>),
Math(MathBlock<'a>),
ThematicBreak(Span),
Html(HtmlBlock<'a>),
Raw(RawBlock<'a>),
}
#[derive(Debug, Clone, PartialEq)]
pub struct Heading<'a> {
pub level: u8,
pub content: Vec<Inline<'a>>,
pub span: Span,
}
#[derive(Debug, Clone, PartialEq)]
pub struct Paragraph<'a> {
pub content: Vec<Inline<'a>>,
pub span: Span,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ListKind {
Ordered,
Unordered,
}
#[derive(Debug, Clone, PartialEq)]
pub struct List<'a> {
pub kind: ListKind,
pub start: Option<u64>,
pub items: Vec<ListItem<'a>>,
pub span: Span,
}
#[derive(Debug, Clone, PartialEq)]
pub struct ListItem<'a> {
pub blocks: Vec<Block<'a>>,
pub span: Span,
}
#[derive(Debug, Clone, PartialEq)]
pub struct CodeBlock<'a> {
pub lang: CowStr<'a>,
pub content: CowStr<'a>,
pub span: Span,
}
#[derive(Debug, Clone, PartialEq)]
pub struct Callout<'a> {
pub kind: CowStr<'a>,
pub title: Option<CowStr<'a>>,
pub blocks: Vec<Block<'a>>,
pub span: Span,
}
#[derive(Debug, Clone, PartialEq)]
pub struct Quote<'a> {
pub blocks: Vec<Block<'a>>,
pub span: Span,
}
#[derive(Debug, Clone, PartialEq)]
pub struct Figure<'a> {
pub src: CowStr<'a>,
pub alt: CowStr<'a>,
pub caption: Option<CowStr<'a>>,
pub span: Span,
}
#[derive(Debug, Clone, PartialEq)]
pub struct Table<'a> {
pub rows: Vec<TableRow<'a>>,
pub span: Span,
}
#[derive(Debug, Clone, PartialEq)]
pub struct TableRow<'a> {
pub cells: Vec<TableCell<'a>>,
pub header: bool,
pub span: Span,
}
#[derive(Debug, Clone, PartialEq)]
pub struct TableCell<'a> {
pub content: Vec<Inline<'a>>,
pub span: Span,
}
#[derive(Debug, Clone, PartialEq)]
pub struct Footnotes<'a> {
pub defs: Vec<FootnoteDef<'a>>,
pub span: Span,
}
#[derive(Debug, Clone, PartialEq)]
pub struct FootnoteDef<'a> {
pub label: CowStr<'a>,
pub blocks: Vec<Block<'a>>,
pub span: Span,
}
#[derive(Debug, Clone, PartialEq)]
pub struct MathBlock<'a> {
pub display: bool,
pub content: CowStr<'a>,
pub span: Span,
}
#[derive(Debug, Clone, PartialEq)]
pub struct HtmlBlock<'a> {
pub content: CowStr<'a>,
pub span: Span,
}
#[derive(Debug, Clone, PartialEq)]
pub struct RawBlock<'a> {
pub content: CowStr<'a>,
pub span: Span,
}
#[derive(Debug, Clone, PartialEq)]
pub enum Inline<'a> {
Text(Text<'a>),
Emphasis(Emphasis<'a>),
Strong(Strong<'a>),
CodeSpan(CodeSpan<'a>),
Link(Link<'a>),
AutoLink(AutoLink<'a>),
Strikethrough(Strikethrough<'a>),
FootnoteRef(FootnoteRef<'a>),
HardBreak(Span),
SoftBreak(Span),
}
#[derive(Debug, Clone, PartialEq)]
pub struct Text<'a> {
pub content: CowStr<'a>,
pub span: Span,
}
#[derive(Debug, Clone, PartialEq)]
pub struct Emphasis<'a> {
pub content: Vec<Inline<'a>>,
pub span: Span,
}
#[derive(Debug, Clone, PartialEq)]
pub struct Strong<'a> {
pub content: Vec<Inline<'a>>,
pub span: Span,
}
#[derive(Debug, Clone, PartialEq)]
pub struct Strikethrough<'a> {
pub content: Vec<Inline<'a>>,
pub span: Span,
}
#[derive(Debug, Clone, PartialEq)]
pub struct CodeSpan<'a> {
pub content: CowStr<'a>,
pub span: Span,
}
#[derive(Debug, Clone, PartialEq)]
pub struct Link<'a> {
pub label: Vec<Inline<'a>>,
pub url: CowStr<'a>,
pub title: Option<CowStr<'a>>,
pub span: Span,
}
#[derive(Debug, Clone, PartialEq)]
pub struct AutoLink<'a> {
pub url: CowStr<'a>,
pub span: Span,
}
#[derive(Debug, Clone, PartialEq)]
pub struct FootnoteRef<'a> {
pub label: CowStr<'a>,
pub span: Span,
}
pub type CowStr<'a> = std::borrow::Cow<'a, str>;