#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum MacroSet {
None,
Mdoc,
Man,
}
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum NodeKind {
Root,
Block,
Head,
Body,
Tail,
Element,
Text,
Comment,
Table,
Equation,
}
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum NormalizedListKind {
Bullet,
Ordered,
Definition,
Column,
Plain,
}
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum DisplayKind {
Literal,
Filled,
}
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum TableAlignment {
Left,
Center,
Right,
}
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct TableCell {
pub text: Option<String>,
pub column_span: u16,
pub row_span: u16,
pub alignment: TableAlignment,
}
#[allow(clippy::struct_excessive_bools)]
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct NodeFlags {
pub generated: bool,
pub sentence_end: bool,
pub no_print: bool,
pub no_fill: bool,
pub deep_link_target: bool,
pub permalink: bool,
pub line_start: bool,
}
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct Node {
pub kind: NodeKind,
pub macro_name: Option<String>,
pub text: Option<String>,
pub tag: Option<String>,
pub line: u32,
pub column: u32,
pub flags: NodeFlags,
pub list_kind: Option<NormalizedListKind>,
pub display_kind: Option<DisplayKind>,
pub compact: bool,
pub offset: Option<String>,
pub width: Option<String>,
pub table_cells: Vec<TableCell>,
pub equation: Option<String>,
pub children: Vec<Self>,
}
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
#[derive(Clone, Debug, Default, Eq, PartialEq)]
pub struct Metadata {
pub title: Option<String>,
pub section: Option<String>,
pub volume: Option<String>,
pub os: Option<String>,
pub arch: Option<String>,
pub name: Option<String>,
pub date: Option<String>,
pub alias_target: Option<String>,
pub has_body: bool,
}
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct Document {
pub macro_set: MacroSet,
pub metadata: Metadata,
pub root: Node,
}