1use logos::Logos;
2
3#[derive(Logos, Debug, PartialEq)]
6pub(crate) enum Token {
7 #[regex(r"\s@([a-zA-Z_][a-zA-Z_0-9]*)?:?([a-zA-Z_][a-zA-Z_0-9]*)?")]
8 Mention,
10
11 #[regex(r"\s#([a-zA-Z_][a-zA-Z_0-9]*)")]
12 Link,
13
14 #[regex(r"\s:([a-zA-Z_][a-zA-Z_0-9]*)(\([^\)]*\))?")]
15 Command,
16
17 #[regex(r"\{[^\}]+\}")]
18 InlineBlock,
19
20 #[regex(r"//[^\n]*\n")]
21 SinglelineComment, #[error]
24 Text,
25}
26
27#[derive(Debug)]
28pub(crate) enum SemanticToken {
29 Mention(MentionToken),
30 Text(Vec<String>),
31 Link(String),
32 Command(String, String),
33 InlineBlock(String),
34}
35
36#[derive(PartialEq, Eq, Hash, Debug, Clone)]
37pub(crate) enum MentionToken {
38 Narrator,
39 Name(String),
40 State(String),
41 NameState(String, String),
42}