1#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
9#[derive(Clone, Copy, Debug, Eq, PartialEq)]
10pub enum MacroSet {
11 None,
12 Mdoc,
13 Man,
14}
15
16#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
18#[derive(Clone, Copy, Debug, Eq, PartialEq)]
19pub enum NodeKind {
20 Root,
21 Block,
22 Head,
23 Body,
24 Tail,
25 Element,
26 Text,
27 Comment,
28 Table,
29 Equation,
30}
31
32#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
34#[derive(Clone, Copy, Debug, Eq, PartialEq)]
35pub enum NormalizedListKind {
36 Bullet,
37 Ordered,
38 Definition,
39 Column,
40 Plain,
41}
42
43#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
45#[derive(Clone, Copy, Debug, Eq, PartialEq)]
46pub enum DisplayKind {
47 Literal,
48 Filled,
49}
50
51#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
53#[derive(Clone, Copy, Debug, Eq, PartialEq)]
54pub enum TableAlignment {
55 Left,
56 Center,
57 Right,
58}
59
60#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
62#[derive(Clone, Debug, Eq, PartialEq)]
63pub struct TableCell {
64 pub text: Option<String>,
65 pub column_span: u16,
66 pub row_span: u16,
67 pub alignment: TableAlignment,
68}
69
70#[allow(clippy::struct_excessive_bools)]
72#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
73#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
74pub struct NodeFlags {
75 pub generated: bool,
76 pub sentence_end: bool,
77 pub no_print: bool,
78 pub no_fill: bool,
79 pub deep_link_target: bool,
81 pub permalink: bool,
83 pub line_start: bool,
88}
89
90#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
92#[derive(Clone, Debug, Eq, PartialEq)]
93pub struct Node {
94 pub kind: NodeKind,
95 pub macro_name: Option<String>,
96 pub text: Option<String>,
97 pub tag: Option<String>,
99 pub line: u32,
100 pub column: u32,
101 pub flags: NodeFlags,
102 pub list_kind: Option<NormalizedListKind>,
103 pub display_kind: Option<DisplayKind>,
104 pub compact: bool,
105 pub offset: Option<String>,
106 pub width: Option<String>,
108 pub table_cells: Vec<TableCell>,
109 pub equation: Option<String>,
110 pub children: Vec<Self>,
111}
112
113#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
115#[derive(Clone, Debug, Default, Eq, PartialEq)]
116pub struct Metadata {
117 pub title: Option<String>,
118 pub section: Option<String>,
119 pub volume: Option<String>,
120 pub os: Option<String>,
121 pub arch: Option<String>,
122 pub name: Option<String>,
123 pub date: Option<String>,
124 pub alias_target: Option<String>,
125 pub has_body: bool,
126}
127
128#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
130#[derive(Clone, Debug, Eq, PartialEq)]
131pub struct Document {
132 pub macro_set: MacroSet,
133 pub metadata: Metadata,
134 pub root: Node,
135}