1use oak_core::{ElementType, Parser, UniversalElementRole};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
5#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6pub enum TwigElementType {
8 Root,
10 Document,
12 Template,
14 Block,
16 Variable,
18 Filter,
20 Function,
22 Tag,
24 Comment,
26 Text,
28 Expression,
30
31 IfStatement,
33 ForStatement,
35 MacroDefinition,
37
38 Literal,
40
41 String,
43 Number,
45 Boolean,
47 Null,
49 Array,
51 Object,
53 Identifier,
55 Operator,
57 ErrorNode,
59
60 LeftBrace,
62 RightBrace,
64 LeftBracket,
66 RightBracket,
68 DoubleLeftBrace,
70 DoubleRightBrace,
72 LeftBracePercent,
74 PercentRightBrace,
76 LeftParen,
78 RightParen,
80 Pipe,
82 Comma,
84 Dot,
86 Colon,
88 Semicolon,
90 Eq,
92 Plus,
94 Minus,
96 Star,
98 Slash,
100 Percent,
102 Bang,
104 Question,
106 Lt,
108 Gt,
110 Amp,
112 Caret,
114 Tilde,
116 Whitespace,
118 Eof,
120 Error,
122}
123
124impl oak_core::TokenType for TwigElementType {
125 type Role = oak_core::UniversalTokenRole;
126 const END_OF_STREAM: Self = TwigElementType::Eof;
127
128 fn role(&self) -> Self::Role {
129 match self {
130 Self::Whitespace => oak_core::UniversalTokenRole::Whitespace,
131 Self::Comment => oak_core::UniversalTokenRole::Comment,
132 _ => oak_core::UniversalTokenRole::None,
133 }
134 }
135}
136
137impl core::fmt::Display for TwigElementType {
138 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
139 match self {
140 TwigElementType::Root => f.write_str("Root"),
141 TwigElementType::Document => f.write_str("Document"),
142 TwigElementType::Template => f.write_str("Template"),
143 TwigElementType::Block => f.write_str("Block"),
144 TwigElementType::Variable => f.write_str("Variable"),
145 TwigElementType::Filter => f.write_str("Filter"),
146 TwigElementType::Function => f.write_str("Function"),
147 TwigElementType::Tag => f.write_str("Tag"),
148 TwigElementType::Comment => f.write_str("Comment"),
149 TwigElementType::Text => f.write_str("Text"),
150 TwigElementType::Expression => f.write_str("Expression"),
151 TwigElementType::IfStatement => f.write_str("IfStatement"),
152 TwigElementType::ForStatement => f.write_str("ForStatement"),
153 TwigElementType::MacroDefinition => f.write_str("MacroDefinition"),
154 TwigElementType::Literal => f.write_str("Literal"),
155 TwigElementType::String => f.write_str("String"),
156 TwigElementType::Number => f.write_str("Number"),
157 TwigElementType::Boolean => f.write_str("Boolean"),
158 TwigElementType::Null => f.write_str("Null"),
159 TwigElementType::Array => f.write_str("Array"),
160 TwigElementType::Object => f.write_str("Object"),
161 TwigElementType::Identifier => f.write_str("Identifier"),
162 TwigElementType::Operator => f.write_str("Operator"),
163 TwigElementType::ErrorNode => f.write_str("ErrorNode"),
164 TwigElementType::LeftBrace => f.write_str("{"),
165 TwigElementType::RightBrace => f.write_str("}"),
166 TwigElementType::LeftBracket => f.write_str("["),
167 TwigElementType::RightBracket => f.write_str("]"),
168 TwigElementType::DoubleLeftBrace => f.write_str("{{"),
169 TwigElementType::DoubleRightBrace => f.write_str("}}"),
170 TwigElementType::LeftBracePercent => f.write_str("{%"),
171 TwigElementType::PercentRightBrace => f.write_str("%}"),
172 TwigElementType::LeftParen => f.write_str("("),
173 TwigElementType::RightParen => f.write_str(")"),
174 TwigElementType::Pipe => f.write_str("|"),
175 TwigElementType::Comma => f.write_str(","),
176 TwigElementType::Dot => f.write_str("."),
177 TwigElementType::Colon => f.write_str(":"),
178 TwigElementType::Semicolon => f.write_str(";"),
179 TwigElementType::Eq => f.write_str("="),
180 TwigElementType::Plus => f.write_str("+"),
181 TwigElementType::Minus => f.write_str("-"),
182 TwigElementType::Star => f.write_str("*"),
183 TwigElementType::Slash => f.write_str("/"),
184 TwigElementType::Percent => f.write_str("%"),
185 TwigElementType::Bang => f.write_str("!"),
186 TwigElementType::Question => f.write_str("?"),
187 TwigElementType::Lt => f.write_str("<"),
188 TwigElementType::Gt => f.write_str(">"),
189 TwigElementType::Amp => f.write_str("&"),
190 TwigElementType::Caret => f.write_str("^"),
191 TwigElementType::Tilde => f.write_str("~"),
192 TwigElementType::Whitespace => f.write_str("Whitespace"),
193 TwigElementType::Eof => f.write_str("EOF"),
194 TwigElementType::Error => f.write_str("Error"),
195 }
196 }
197}
198
199impl ElementType for TwigElementType {
200 type Role = UniversalElementRole;
201
202 fn role(&self) -> Self::Role {
203 match self {
204 _ => UniversalElementRole::None,
205 }
206 }
207}
208
209impl From<crate::lexer::token_type::TwigTokenType> for TwigElementType {
210 fn from(token: crate::lexer::token_type::TwigTokenType) -> Self {
211 unsafe { std::mem::transmute(token) }
212 }
213}