1use oak_core::{ElementType, UniversalElementRole};
2#[cfg(feature = "serde")]
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
6#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
7#[repr(u16)]
8pub enum MarkdownElementType {
9 Root,
10 Paragraph,
11 Table,
12 Heading1,
13 Heading2,
14 Heading3,
15 Heading4,
16 Heading5,
17 Heading6,
18 Blockquote,
19 CodeBlock,
20 List,
21 ListItem,
22 HorizontalRule,
23 MathBlock,
24 FrontMatter,
25 FootnoteDefinition,
26 Text,
28 Whitespace,
29 Newline,
30 HeadingText,
31 Emphasis,
32 Strong,
33 Strikethrough,
34 InlineCode,
35 CodeFence,
36 CodeLanguage,
37 Link,
38 LinkText,
39 LinkUrl,
40 LinkTitle,
41 Image,
42 ImageAlt,
43 ImageUrl,
44 ImageTitle,
45 UnorderedList,
46 OrderedList,
47 ListMarker,
48 TaskList,
49 TaskMarker,
50 BlockquoteMarker,
51 TableRow,
52 TableCell,
53 TableHeader,
54 TableSeparator,
55 TableAlignment,
56 MathInline,
57 FootnoteReference,
58 DefinitionList,
59 DefinitionTerm,
60 DefinitionDescription,
61 Superscript,
62 Subscript,
63 Abbreviation,
64 HtmlTag,
65 HtmlComment,
66 XmlTag,
67 XmlComment,
68 Error,
69}
70
71impl ElementType for MarkdownElementType {
72 type Role = UniversalElementRole;
73
74 fn role(&self) -> Self::Role {
75 match self {
76 _ => UniversalElementRole::None,
77 }
78 }
79}
80
81impl From<crate::lexer::token_type::MarkdownTokenType> for MarkdownElementType {
82 fn from(token: crate::lexer::token_type::MarkdownTokenType) -> Self {
83 match token {
84 crate::lexer::token_type::MarkdownTokenType::Text => MarkdownElementType::Text,
85 crate::lexer::token_type::MarkdownTokenType::Whitespace => MarkdownElementType::Whitespace,
86 crate::lexer::token_type::MarkdownTokenType::Newline => MarkdownElementType::Newline,
87 crate::lexer::token_type::MarkdownTokenType::Heading1 => MarkdownElementType::Heading1,
88 crate::lexer::token_type::MarkdownTokenType::Heading2 => MarkdownElementType::Heading2,
89 crate::lexer::token_type::MarkdownTokenType::Heading3 => MarkdownElementType::Heading3,
90 crate::lexer::token_type::MarkdownTokenType::Heading4 => MarkdownElementType::Heading4,
91 crate::lexer::token_type::MarkdownTokenType::Heading5 => MarkdownElementType::Heading5,
92 crate::lexer::token_type::MarkdownTokenType::Heading6 => MarkdownElementType::Heading6,
93 crate::lexer::token_type::MarkdownTokenType::HeadingText => MarkdownElementType::HeadingText,
94 crate::lexer::token_type::MarkdownTokenType::Emphasis => MarkdownElementType::Emphasis,
95 crate::lexer::token_type::MarkdownTokenType::Strong => MarkdownElementType::Strong,
96 crate::lexer::token_type::MarkdownTokenType::Strikethrough => MarkdownElementType::Strikethrough,
97 crate::lexer::token_type::MarkdownTokenType::InlineCode => MarkdownElementType::InlineCode,
98 crate::lexer::token_type::MarkdownTokenType::CodeBlock => MarkdownElementType::CodeBlock,
99 crate::lexer::token_type::MarkdownTokenType::CodeFence => MarkdownElementType::CodeFence,
100 crate::lexer::token_type::MarkdownTokenType::CodeLanguage => MarkdownElementType::CodeLanguage,
101 crate::lexer::token_type::MarkdownTokenType::Link => MarkdownElementType::Link,
102 crate::lexer::token_type::MarkdownTokenType::LinkText => MarkdownElementType::LinkText,
103 crate::lexer::token_type::MarkdownTokenType::LinkUrl => MarkdownElementType::LinkUrl,
104 crate::lexer::token_type::MarkdownTokenType::LinkTitle => MarkdownElementType::LinkTitle,
105 crate::lexer::token_type::MarkdownTokenType::Image => MarkdownElementType::Image,
106 crate::lexer::token_type::MarkdownTokenType::ImageAlt => MarkdownElementType::ImageAlt,
107 crate::lexer::token_type::MarkdownTokenType::ImageUrl => MarkdownElementType::ImageUrl,
108 crate::lexer::token_type::MarkdownTokenType::ImageTitle => MarkdownElementType::ImageTitle,
109 crate::lexer::token_type::MarkdownTokenType::UnorderedList => MarkdownElementType::UnorderedList,
110 crate::lexer::token_type::MarkdownTokenType::OrderedList => MarkdownElementType::OrderedList,
111 crate::lexer::token_type::MarkdownTokenType::ListItem => MarkdownElementType::ListItem,
112 crate::lexer::token_type::MarkdownTokenType::ListMarker => MarkdownElementType::ListMarker,
113 crate::lexer::token_type::MarkdownTokenType::TaskList => MarkdownElementType::TaskList,
114 crate::lexer::token_type::MarkdownTokenType::TaskMarker => MarkdownElementType::TaskMarker,
115 crate::lexer::token_type::MarkdownTokenType::Blockquote => MarkdownElementType::Blockquote,
116 crate::lexer::token_type::MarkdownTokenType::BlockquoteMarker => MarkdownElementType::BlockquoteMarker,
117 crate::lexer::token_type::MarkdownTokenType::HorizontalRule => MarkdownElementType::HorizontalRule,
118 crate::lexer::token_type::MarkdownTokenType::Table => MarkdownElementType::Table,
119 crate::lexer::token_type::MarkdownTokenType::TableRow => MarkdownElementType::TableRow,
120 crate::lexer::token_type::MarkdownTokenType::TableCell => MarkdownElementType::TableCell,
121 crate::lexer::token_type::MarkdownTokenType::TableHeader => MarkdownElementType::TableHeader,
122 crate::lexer::token_type::MarkdownTokenType::TableSeparator => MarkdownElementType::TableSeparator,
123 crate::lexer::token_type::MarkdownTokenType::TableAlignment => MarkdownElementType::TableAlignment,
124 crate::lexer::token_type::MarkdownTokenType::MathInline => MarkdownElementType::MathInline,
125 crate::lexer::token_type::MarkdownTokenType::MathBlock => MarkdownElementType::MathBlock,
126 crate::lexer::token_type::MarkdownTokenType::FootnoteDefinition => MarkdownElementType::FootnoteDefinition,
127 crate::lexer::token_type::MarkdownTokenType::FootnoteReference => MarkdownElementType::FootnoteReference,
128 crate::lexer::token_type::MarkdownTokenType::FrontMatter => MarkdownElementType::FrontMatter,
129 crate::lexer::token_type::MarkdownTokenType::DefinitionList => MarkdownElementType::DefinitionList,
130 crate::lexer::token_type::MarkdownTokenType::DefinitionTerm => MarkdownElementType::DefinitionTerm,
131 crate::lexer::token_type::MarkdownTokenType::DefinitionDescription => MarkdownElementType::DefinitionDescription,
132 crate::lexer::token_type::MarkdownTokenType::Superscript => MarkdownElementType::Superscript,
133 crate::lexer::token_type::MarkdownTokenType::Subscript => MarkdownElementType::Subscript,
134 crate::lexer::token_type::MarkdownTokenType::Abbreviation => MarkdownElementType::Abbreviation,
135 crate::lexer::token_type::MarkdownTokenType::HtmlTag => MarkdownElementType::HtmlTag,
136 crate::lexer::token_type::MarkdownTokenType::HtmlComment => MarkdownElementType::HtmlComment,
137 crate::lexer::token_type::MarkdownTokenType::XmlTag => MarkdownElementType::XmlTag,
138 crate::lexer::token_type::MarkdownTokenType::XmlComment => MarkdownElementType::XmlComment,
139 crate::lexer::token_type::MarkdownTokenType::Error => MarkdownElementType::Error,
140 _ => MarkdownElementType::Error,
141 }
142 }
143}