1use oak_core::{ElementType, UniversalElementRole};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
5#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6#[repr(u16)]
7pub enum MarkdownElementType {
8 Root,
10 Paragraph,
12 Table,
14 Heading1,
16 Heading2,
18 Heading3,
20 Heading4,
22 Heading5,
24 Heading6,
26 Blockquote,
28 CodeBlock,
30 List,
32 ListItem,
34 HorizontalRule,
36 MathBlock,
38 FrontMatter,
40 FootnoteDefinition,
42 Text,
44 Whitespace,
46 Newline,
48 HeadingText,
50 Emphasis,
52 Strong,
54 Strikethrough,
56 InlineCode,
58 CodeFence,
60 CodeLanguage,
62 Link,
64 LinkText,
66 LinkUrl,
68 LinkTitle,
70 Image,
72 ImageAlt,
74 ImageUrl,
76 ImageTitle,
78 UnorderedList,
80 OrderedList,
82 ListMarker,
84 TaskList,
86 TaskMarker,
88 BlockquoteMarker,
90 TableRow,
92 TableCell,
94 TableHeader,
96 TableSeparator,
98 TableAlignment,
100 MathInline,
102 FootnoteReference,
104 DefinitionList,
106 DefinitionTerm,
108 DefinitionDescription,
110 Superscript,
112 Subscript,
114 Abbreviation,
116 HtmlTag,
118 HtmlComment,
120 XmlTag,
122 XmlComment,
124 AutoLink,
126 Error,
128}
129
130impl ElementType for MarkdownElementType {
131 type Role = UniversalElementRole;
132
133 fn role(&self) -> Self::Role {
134 match self {
135 _ => UniversalElementRole::None,
136 }
137 }
138}
139
140impl From<crate::lexer::token_type::MarkdownTokenType> for MarkdownElementType {
141 fn from(token: crate::lexer::token_type::MarkdownTokenType) -> Self {
142 match token {
143 crate::lexer::token_type::MarkdownTokenType::Text => MarkdownElementType::Text,
144 crate::lexer::token_type::MarkdownTokenType::Whitespace => MarkdownElementType::Whitespace,
145 crate::lexer::token_type::MarkdownTokenType::Newline => MarkdownElementType::Newline,
146 crate::lexer::token_type::MarkdownTokenType::Heading1 => MarkdownElementType::Heading1,
147 crate::lexer::token_type::MarkdownTokenType::Heading2 => MarkdownElementType::Heading2,
148 crate::lexer::token_type::MarkdownTokenType::Heading3 => MarkdownElementType::Heading3,
149 crate::lexer::token_type::MarkdownTokenType::Heading4 => MarkdownElementType::Heading4,
150 crate::lexer::token_type::MarkdownTokenType::Heading5 => MarkdownElementType::Heading5,
151 crate::lexer::token_type::MarkdownTokenType::Heading6 => MarkdownElementType::Heading6,
152 crate::lexer::token_type::MarkdownTokenType::HeadingText => MarkdownElementType::HeadingText,
153 crate::lexer::token_type::MarkdownTokenType::Emphasis => MarkdownElementType::Emphasis,
154 crate::lexer::token_type::MarkdownTokenType::Strong => MarkdownElementType::Strong,
155 crate::lexer::token_type::MarkdownTokenType::Strikethrough => MarkdownElementType::Strikethrough,
156 crate::lexer::token_type::MarkdownTokenType::InlineCode => MarkdownElementType::InlineCode,
157 crate::lexer::token_type::MarkdownTokenType::CodeBlock => MarkdownElementType::CodeBlock,
158 crate::lexer::token_type::MarkdownTokenType::CodeFence => MarkdownElementType::CodeFence,
159 crate::lexer::token_type::MarkdownTokenType::CodeLanguage => MarkdownElementType::CodeLanguage,
160 crate::lexer::token_type::MarkdownTokenType::Link => MarkdownElementType::Link,
161 crate::lexer::token_type::MarkdownTokenType::LinkText => MarkdownElementType::LinkText,
162 crate::lexer::token_type::MarkdownTokenType::LinkUrl => MarkdownElementType::LinkUrl,
163 crate::lexer::token_type::MarkdownTokenType::LinkTitle => MarkdownElementType::LinkTitle,
164 crate::lexer::token_type::MarkdownTokenType::Image => MarkdownElementType::Image,
165 crate::lexer::token_type::MarkdownTokenType::ImageAlt => MarkdownElementType::ImageAlt,
166 crate::lexer::token_type::MarkdownTokenType::ImageUrl => MarkdownElementType::ImageUrl,
167 crate::lexer::token_type::MarkdownTokenType::ImageTitle => MarkdownElementType::ImageTitle,
168 crate::lexer::token_type::MarkdownTokenType::UnorderedList => MarkdownElementType::UnorderedList,
169 crate::lexer::token_type::MarkdownTokenType::OrderedList => MarkdownElementType::OrderedList,
170 crate::lexer::token_type::MarkdownTokenType::ListItem => MarkdownElementType::ListItem,
171 crate::lexer::token_type::MarkdownTokenType::ListMarker => MarkdownElementType::ListMarker,
172 crate::lexer::token_type::MarkdownTokenType::TaskList => MarkdownElementType::TaskList,
173 crate::lexer::token_type::MarkdownTokenType::TaskMarker => MarkdownElementType::TaskMarker,
174 crate::lexer::token_type::MarkdownTokenType::Blockquote => MarkdownElementType::Blockquote,
175 crate::lexer::token_type::MarkdownTokenType::BlockquoteMarker => MarkdownElementType::BlockquoteMarker,
176 crate::lexer::token_type::MarkdownTokenType::HorizontalRule => MarkdownElementType::HorizontalRule,
177 crate::lexer::token_type::MarkdownTokenType::Table => MarkdownElementType::Table,
178 crate::lexer::token_type::MarkdownTokenType::TableRow => MarkdownElementType::TableRow,
179 crate::lexer::token_type::MarkdownTokenType::TableCell => MarkdownElementType::TableCell,
180 crate::lexer::token_type::MarkdownTokenType::TableHeader => MarkdownElementType::TableHeader,
181 crate::lexer::token_type::MarkdownTokenType::TableSeparator => MarkdownElementType::TableSeparator,
182 crate::lexer::token_type::MarkdownTokenType::TableAlignment => MarkdownElementType::TableAlignment,
183 crate::lexer::token_type::MarkdownTokenType::MathInline => MarkdownElementType::MathInline,
184 crate::lexer::token_type::MarkdownTokenType::MathBlock => MarkdownElementType::MathBlock,
185 crate::lexer::token_type::MarkdownTokenType::FootnoteDefinition => MarkdownElementType::FootnoteDefinition,
186 crate::lexer::token_type::MarkdownTokenType::FootnoteReference => MarkdownElementType::FootnoteReference,
187 crate::lexer::token_type::MarkdownTokenType::FrontMatter => MarkdownElementType::FrontMatter,
188 crate::lexer::token_type::MarkdownTokenType::DefinitionList => MarkdownElementType::DefinitionList,
189 crate::lexer::token_type::MarkdownTokenType::DefinitionTerm => MarkdownElementType::DefinitionTerm,
190 crate::lexer::token_type::MarkdownTokenType::DefinitionDescription => MarkdownElementType::DefinitionDescription,
191 crate::lexer::token_type::MarkdownTokenType::Superscript => MarkdownElementType::Superscript,
192 crate::lexer::token_type::MarkdownTokenType::Subscript => MarkdownElementType::Subscript,
193 crate::lexer::token_type::MarkdownTokenType::Abbreviation => MarkdownElementType::Abbreviation,
194 crate::lexer::token_type::MarkdownTokenType::HtmlTag => MarkdownElementType::HtmlTag,
195 crate::lexer::token_type::MarkdownTokenType::HtmlComment => MarkdownElementType::HtmlComment,
196 crate::lexer::token_type::MarkdownTokenType::XmlTag => MarkdownElementType::XmlTag,
197 crate::lexer::token_type::MarkdownTokenType::XmlComment => MarkdownElementType::XmlComment,
198 crate::lexer::token_type::MarkdownTokenType::AutoLink => MarkdownElementType::AutoLink,
199 crate::lexer::token_type::MarkdownTokenType::Error => MarkdownElementType::Error,
200 _ => MarkdownElementType::Error,
201 }
202 }
203}