use oak_core::{ElementType, UniversalElementRole};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u8)]
pub enum MatlabElementType {
Whitespace,
Newline,
Comment,
BlockComment,
Identifier,
Number,
String,
Character,
Function,
End,
If,
Else,
Elseif,
While,
For,
Break,
Continue,
Return,
Switch,
Case,
Otherwise,
Try,
Catch,
Global,
Persistent,
Classdef,
Properties,
Methods,
Events,
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,
Delimiter,
Error,
Script,
FunctionDef,
ClassDef,
Block,
Expression,
Statement,
Eof,
}
impl MatlabElementType {
pub fn is_token(&self) -> bool {
(*self as u8) <= (Self::Eof as u8) && !self.is_element()
}
pub fn is_element(&self) -> bool {
matches!(self, Self::Script | Self::FunctionDef | Self::ClassDef | Self::Block | Self::Expression | Self::Statement)
}
}
impl ElementType for MatlabElementType {
type Role = UniversalElementRole;
fn role(&self) -> Self::Role {
match self {
_ => UniversalElementRole::None,
}
}
}
impl From<crate::lexer::token_type::MatlabTokenType> for MatlabElementType {
fn from(token: crate::lexer::token_type::MatlabTokenType) -> Self {
unsafe { std::mem::transmute(token) }
}
}