1use oak_core::{Token, TokenType, UniversalTokenRole};
2use std::fmt;
3
4pub type WolframToken = Token<WolframTokenType>;
6
7impl fmt::Display for WolframTokenType {
8 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
9 write!(f, "{:?}", self)
10 }
11}
12
13impl TokenType for WolframTokenType {
14 type Role = UniversalTokenRole;
15 const END_OF_STREAM: Self = Self::Eof;
16
17 fn is_ignored(&self) -> bool {
18 false
19 }
20
21 fn role(&self) -> Self::Role {
22 self.role()
23 }
24}
25
26#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
28#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
29pub enum WolframTokenType {
30 Root,
32
33 Whitespace,
36 Newline,
38
39 Identifier,
42 Integer,
44 Real,
46 String,
48
49 If,
52 Then,
54 Else,
56 While,
58 For,
60 Do,
62 Function,
64 Module,
66 Block,
68 With,
70 Table,
72 Map,
74 Apply,
76 Select,
78 Cases,
80 Rule,
82 RuleDelayed,
84 Set,
86 SetDelayed,
88 Unset,
90 Clear,
92 ClearAll,
94 Return,
96 Break,
98 Continue,
100 True,
102 False,
104 Null,
106 Export,
108 Import,
110
111 Plus,
114 Minus,
116 Times,
118 Divide,
120 Power,
122 Equal,
124 NotEqual,
126 Less,
128 Greater,
130 LessEqual,
132 GreaterEqual,
134 And,
136 Or,
138 Not,
140
141 At,
144 SlashSlash,
146 MapOperator,
148 ApplyOperator,
150 ApplyLevelOperator,
152 MapAllOperator,
154 Ampersand,
156 AtStar,
158 StarSlash,
160 StringJoin,
162 RuleDelayedOp,
164
165 Assign,
168 AddTo,
170 SubtractFrom,
172 TimesBy,
174 DivideBy,
176
177 LeftParen,
180 RightParen,
182 LeftBracket,
184 RightBracket,
186 LeftBrace,
188 RightBrace,
190 Comma,
192 Semicolon,
194 Colon,
196 Dot,
198
199 Arrow,
202 DoubleArrow,
204 Question,
206 Underscore,
208 DoubleUnderscore,
210 TripleUnderscore,
212 Slot,
214 SlotSequence,
216 Factorial,
218
219 Comment,
222
223 Text,
226
227 Error,
229 Eof,
231}
232
233impl WolframTokenType {
234 pub fn role(&self) -> UniversalTokenRole {
236 match self {
237 Self::Whitespace | Self::Newline => UniversalTokenRole::Whitespace,
238 Self::Comment => UniversalTokenRole::Comment,
239 Self::Identifier => UniversalTokenRole::Name,
240 Self::Integer | Self::Real => UniversalTokenRole::Literal,
241 Self::String => UniversalTokenRole::Literal,
242 Self::LeftParen | Self::LeftBracket | Self::LeftBrace => UniversalTokenRole::Punctuation,
243 Self::RightParen | Self::RightBracket | Self::RightBrace => UniversalTokenRole::Punctuation,
244 Self::Comma | Self::Semicolon | Self::Colon | Self::Dot => UniversalTokenRole::Punctuation,
245 Self::Plus
246 | Self::Minus
247 | Self::Times
248 | Self::Divide
249 | Self::Power
250 | Self::Equal
251 | Self::NotEqual
252 | Self::Less
253 | Self::Greater
254 | Self::LessEqual
255 | Self::GreaterEqual
256 | Self::And
257 | Self::Or
258 | Self::Not
259 | Self::At
260 | Self::SlashSlash
261 | Self::MapOperator
262 | Self::ApplyOperator
263 | Self::ApplyLevelOperator
264 | Self::MapAllOperator
265 | Self::Ampersand
266 | Self::AtStar
267 | Self::StarSlash
268 | Self::StringJoin
269 | Self::RuleDelayedOp
270 | Self::Assign
271 | Self::AddTo
272 | Self::SubtractFrom
273 | Self::TimesBy
274 | Self::DivideBy
275 | Self::Arrow
276 | Self::DoubleArrow
277 | Self::Question
278 | Self::Underscore
279 | Self::DoubleUnderscore
280 | Self::TripleUnderscore
281 | Self::Slot
282 | Self::SlotSequence
283 | Self::Factorial => UniversalTokenRole::Operator,
284 Self::If
285 | Self::Then
286 | Self::Else
287 | Self::While
288 | Self::For
289 | Self::Do
290 | Self::Function
291 | Self::Module
292 | Self::Block
293 | Self::With
294 | Self::Table
295 | Self::Map
296 | Self::Apply
297 | Self::Select
298 | Self::Cases
299 | Self::Rule
300 | Self::RuleDelayed
301 | Self::Set
302 | Self::SetDelayed
303 | Self::Unset
304 | Self::Clear
305 | Self::ClearAll
306 | Self::Return
307 | Self::Break
308 | Self::Continue
309 | Self::True
310 | Self::False
311 | Self::Null
312 | Self::Export
313 | Self::Import => UniversalTokenRole::Keyword,
314 Self::Eof => UniversalTokenRole::Eof,
315 Self::Error => UniversalTokenRole::Error,
316 _ => UniversalTokenRole::None,
317 }
318 }
319}