Skip to main content

katana_markdown_engine/document/
types.rs

1use crate::{SourceSpan, TextFingerprint};
2use serde::{Deserialize, Serialize};
3use std::path::PathBuf;
4
5#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
6pub struct KmeNodeId(pub String);
7
8#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
9pub struct KmeDocument {
10    pub path: PathBuf,
11    pub fingerprint: TextFingerprint,
12    pub nodes: Vec<KmeNode>,
13}
14
15#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
16pub struct KmeNode {
17    pub id: KmeNodeId,
18    pub kind: KmeNodeKind,
19    pub source: SourceSpan,
20    pub children: Vec<KmeNode>,
21}
22
23#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
24pub enum KmeNodeKind {
25    Heading(HeadingNode),
26    Paragraph,
27    Emoji(EmojiNode),
28    HtmlBlock(HtmlBlockRole),
29    List(ListNode),
30    CodeBlock(CodeBlockRole),
31    Table(TableNode),
32    BlockQuote,
33    Alert { label: String },
34    DescriptionList { items: Vec<DescriptionItem> },
35    ThematicBreak,
36    RawBlock { reason: String },
37}
38
39#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
40pub struct HeadingNode {
41    pub level: u8,
42    pub text: String,
43}
44
45#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
46pub struct EmojiNode {
47    pub value: String,
48    pub shortcode: Option<String>,
49}
50
51#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
52pub enum HtmlBlockRole {
53    Generic,
54    Centered,
55    BadgeRow,
56}
57
58#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
59pub struct ListNode {
60    pub ordered: bool,
61    pub task_markers: Vec<String>,
62}
63
64#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
65pub enum CodeBlockRole {
66    Plain { language: Option<String> },
67    Diagram { kind: DiagramKind },
68    Math,
69}
70
71#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
72pub enum DiagramKind {
73    Mermaid,
74    DrawIo,
75    PlantUml,
76}
77
78#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
79pub struct TableNode {
80    pub alignments: Vec<TableAlignment>,
81    pub rows: Vec<TableRow>,
82}
83
84#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
85pub enum TableAlignment {
86    Left,
87    Center,
88    Right,
89    Unspecified,
90}
91
92#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
93pub struct TableRow {
94    pub cells: Vec<TableCell>,
95}
96
97#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
98pub struct TableCell {
99    pub text: String,
100    pub source: SourceSpan,
101}
102
103#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
104pub struct DescriptionItem {
105    pub term: String,
106    pub description: String,
107}