1use oak_core::{ElementType, Parser, 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(u8)]
8pub enum MatlabElementType {
9 Whitespace,
11 Newline,
12 Comment,
13 BlockComment,
14
15 Identifier,
17 Number,
18 String,
19 Character,
20
21 Function,
23 End,
24 If,
25 Else,
26 Elseif,
27 While,
28 For,
29 Break,
30 Continue,
31 Return,
32 Switch,
33 Case,
34 Otherwise,
35 Try,
36 Catch,
37 Global,
38 Persistent,
39 Classdef,
40 Properties,
41 Methods,
42 Events,
43
44 Plus, Minus, Times, Divide, Power, LeftDivide, DotTimes, DotDivide, DotPower, DotLeftDivide, Equal, NotEqual, Less, Greater, LessEqual, GreaterEqual, And, Or, Not, AndAnd, OrOr, Assign, LeftParen, RightParen, LeftBracket, RightBracket, LeftBrace, RightBrace, Semicolon, Comma, Dot, Colon, Question, At, Transpose, DotTranspose, Operator,
94 Delimiter,
95
96 Error,
98
99 Script,
101 FunctionDef,
102 ClassDef,
103 Block,
104 Expression,
105 Statement,
106
107 Eof,
109}
110
111impl MatlabElementType {
112 pub fn is_token(&self) -> bool {
113 (*self as u8) <= (Self::Eof as u8) && !self.is_element()
114 }
115
116 pub fn is_element(&self) -> bool {
117 matches!(self, Self::Script | Self::FunctionDef | Self::ClassDef | Self::Block | Self::Expression | Self::Statement)
118 }
119}
120
121impl ElementType for MatlabElementType {
122 type Role = UniversalElementRole;
123
124 fn role(&self) -> Self::Role {
125 match self {
126 _ => UniversalElementRole::None,
127 }
128 }
129}
130
131impl From<crate::lexer::token_type::MatlabTokenType> for MatlabElementType {
132 fn from(token: crate::lexer::token_type::MatlabTokenType) -> Self {
133 unsafe { std::mem::transmute(token) }
134 }
135}