Skip to main content

oak_markdown/parser/
element_type.rs

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    // Add other variants as needed by the parser
27    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}