Skip to main content

oak_rst/parser/
element_type.rs

1use oak_core::{ElementType, UniversalElementRole};
2
3/// Element types for the reStructuredText language.
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
5#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6#[repr(u16)]
7pub enum RstElementType {
8    /// The root of the document.
9    Root,
10    /// A paragraph of text.
11    Paragraph,
12    /// A heading level 1.
13    Heading1,
14    /// A heading level 2.
15    Heading2,
16    /// A heading level 3.
17    Heading3,
18    /// A heading level 4.
19    Heading4,
20    /// A heading level 5.
21    Heading5,
22    /// A heading level 6.
23    Heading6,
24    /// A comment.
25    Comment,
26    /// A directive.
27    Directive,
28    /// A substitution reference.
29    SubstitutionReference,
30    /// A role.
31    Role,
32    /// A footnote reference.
33    FootnoteReference,
34    /// A footnote definition.
35    FootnoteDefinition,
36    /// A citation reference.
37    CitationReference,
38    /// A citation definition.
39    CitationDefinition,
40    /// A bullet list.
41    BulletList,
42    /// An enumerated list.
43    EnumeratedList,
44    /// A list item.
45    ListItem,
46    /// A definition list.
47    DefinitionList,
48    /// A definition list term.
49    DefinitionTerm,
50    /// A definition list definition.
51    DefinitionDefinition,
52    /// A blockquote.
53    Blockquote,
54    /// A code block.
55    CodeBlock,
56    /// A horizontal rule.
57    HorizontalRule,
58    /// A table.
59    Table,
60    /// A table row.
61    TableRow,
62    /// A table cell.
63    TableCell,
64    /// Emphasized text.
65    Emphasis,
66    /// Strong text.
67    Strong,
68    /// Literal text.
69    Literal,
70    /// A link.
71    Link,
72    /// A reference name.
73    ReferenceName,
74    /// A reference target.
75    ReferenceTarget,
76    /// An admonition.
77    Admonition,
78    /// Plain text.
79    Text,
80    /// Whitespace.
81    Whitespace,
82    /// A newline.
83    Newline,
84    /// An error element.
85    Error,
86}
87
88impl ElementType for RstElementType {
89    type Role = UniversalElementRole;
90
91    fn role(&self) -> <Self as ElementType>::Role {
92        match self {
93            _ => UniversalElementRole::None,
94        }
95    }
96}
97
98impl From<crate::lexer::token_type::RstTokenType> for RstElementType {
99    fn from(token: crate::lexer::token_type::RstTokenType) -> Self {
100        match token {
101            crate::lexer::token_type::RstTokenType::Text => RstElementType::Text,
102            crate::lexer::token_type::RstTokenType::Whitespace => RstElementType::Whitespace,
103            crate::lexer::token_type::RstTokenType::Newline => RstElementType::Newline,
104            crate::lexer::token_type::RstTokenType::Comment => RstElementType::Comment,
105            crate::lexer::token_type::RstTokenType::Directive => RstElementType::Directive,
106            crate::lexer::token_type::RstTokenType::SubstitutionReference => RstElementType::SubstitutionReference,
107            crate::lexer::token_type::RstTokenType::Role => RstElementType::Role,
108            crate::lexer::token_type::RstTokenType::FootnoteReference => RstElementType::FootnoteReference,
109            crate::lexer::token_type::RstTokenType::FootnoteDefinition => RstElementType::FootnoteDefinition,
110            crate::lexer::token_type::RstTokenType::CitationReference => RstElementType::CitationReference,
111            crate::lexer::token_type::RstTokenType::CitationDefinition => RstElementType::CitationDefinition,
112            crate::lexer::token_type::RstTokenType::BulletListMarker => RstElementType::ListItem,
113            crate::lexer::token_type::RstTokenType::EnumeratedListMarker => RstElementType::ListItem,
114            crate::lexer::token_type::RstTokenType::DefinitionTerm => RstElementType::DefinitionTerm,
115            crate::lexer::token_type::RstTokenType::DefinitionDefinition => RstElementType::DefinitionDefinition,
116            crate::lexer::token_type::RstTokenType::BlockquoteMarker => RstElementType::Blockquote,
117            crate::lexer::token_type::RstTokenType::CodeBlock => RstElementType::CodeBlock,
118            crate::lexer::token_type::RstTokenType::Heading1 => RstElementType::Heading1,
119            crate::lexer::token_type::RstTokenType::Heading2 => RstElementType::Heading2,
120            crate::lexer::token_type::RstTokenType::Heading3 => RstElementType::Heading3,
121            crate::lexer::token_type::RstTokenType::Heading4 => RstElementType::Heading4,
122            crate::lexer::token_type::RstTokenType::Heading5 => RstElementType::Heading5,
123            crate::lexer::token_type::RstTokenType::Heading6 => RstElementType::Heading6,
124            crate::lexer::token_type::RstTokenType::HorizontalRule => RstElementType::HorizontalRule,
125            crate::lexer::token_type::RstTokenType::Table => RstElementType::Table,
126            crate::lexer::token_type::RstTokenType::TableCell => RstElementType::TableCell,
127            crate::lexer::token_type::RstTokenType::Emphasis => RstElementType::Emphasis,
128            crate::lexer::token_type::RstTokenType::Strong => RstElementType::Strong,
129            crate::lexer::token_type::RstTokenType::Literal => RstElementType::Literal,
130            crate::lexer::token_type::RstTokenType::Link => RstElementType::Link,
131            crate::lexer::token_type::RstTokenType::ReferenceName => RstElementType::ReferenceName,
132            crate::lexer::token_type::RstTokenType::ReferenceTarget => RstElementType::ReferenceTarget,
133            _ => RstElementType::Error,
134        }
135    }
136}