oak_markdown/ast/
mod.rs

1use core::range::Range;
2use serde::{Deserialize, Serialize};
3
4/// Markdown 抽象语法树的根节点
5#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
6pub struct MarkdownRoot {
7    /// 文档中的块列表
8    pub blocks: Vec<Block>,
9}
10
11/// Markdown 中的块级元素
12#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
13pub enum Block {
14    /// 标题 (h1-h6)
15    Heading(Heading),
16    /// 段落
17    Paragraph(Paragraph),
18    /// 代码块
19    CodeBlock(CodeBlock),
20    /// 列表
21    List(List),
22    /// 引用
23    Blockquote(Blockquote),
24    /// 水平分割线
25    HorizontalRule(HorizontalRule),
26    /// 表格
27    Table(Table),
28    /// HTML 块
29    Html(Html),
30}
31
32/// 标题
33#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
34pub struct Heading {
35    /// 标题级别 (1-6)
36    pub level: u32,
37    /// 标题内容
38    pub content: String,
39    /// 源代码范围
40    #[serde(with = "oak_core::serde_range")]
41    pub span: Range<usize>,
42}
43
44/// 段落
45#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
46pub struct Paragraph {
47    /// 段落内容
48    pub content: String,
49    /// 源代码范围
50    #[serde(with = "oak_core::serde_range")]
51    pub span: Range<usize>,
52}
53
54/// 代码块
55#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
56pub struct CodeBlock {
57    /// 编程语言标识符
58    pub language: Option<String>,
59    /// 代码内容
60    pub content: String,
61    /// 源代码范围
62    #[serde(with = "oak_core::serde_range")]
63    pub span: Range<usize>,
64}
65
66/// 列表
67#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
68pub struct List {
69    /// 是否为有序列表
70    pub is_ordered: bool,
71    /// 列表项
72    pub items: Vec<ListItem>,
73    /// 源代码范围
74    #[serde(with = "oak_core::serde_range")]
75    pub span: Range<usize>,
76}
77
78/// 列表项
79#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
80pub struct ListItem {
81    /// 列表项内容
82    pub content: Vec<Block>,
83    /// 是否为任务列表项
84    pub is_task: bool,
85    /// 任务完成状态 (如果 is_task 为 true)
86    pub is_checked: Option<bool>,
87    /// 源代码范围
88    #[serde(with = "oak_core::serde_range")]
89    pub span: Range<usize>,
90}
91
92/// 引用
93#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
94pub struct Blockquote {
95    /// 引用内容
96    pub content: Vec<Block>,
97    /// 源代码范围
98    #[serde(with = "oak_core::serde_range")]
99    pub span: Range<usize>,
100}
101
102/// 水平分割线
103#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
104pub struct HorizontalRule {
105    /// 源代码范围
106    #[serde(with = "oak_core::serde_range")]
107    pub span: Range<usize>,
108}
109
110/// 表格
111#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
112pub struct Table {
113    /// 表头
114    pub header: TableRow,
115    /// 表行
116    pub rows: Vec<TableRow>,
117    /// 源代码范围
118    #[serde(with = "oak_core::serde_range")]
119    pub span: Range<usize>,
120}
121
122/// 表格行
123#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
124pub struct TableRow {
125    /// 单元格列表
126    pub cells: Vec<TableCell>,
127    /// 源代码范围
128    #[serde(with = "oak_core::serde_range")]
129    pub span: Range<usize>,
130}
131
132/// 表格单元格
133#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
134pub struct TableCell {
135    /// 单元格内容
136    pub content: String,
137    /// 源代码范围
138    #[serde(with = "oak_core::serde_range")]
139    pub span: Range<usize>,
140}
141
142/// HTML 块
143#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
144pub struct Html {
145    /// HTML 内容
146    pub content: String,
147    /// 源代码范围
148    #[serde(with = "oak_core::serde_range")]
149    pub span: Range<usize>,
150}