dlg/parser/
tokens.rs

1use logos::Logos;
2
3// ident regex: [a-zA-Z_][a-zA-Z_0-9]*
4
5#[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    // for handle @-ident: \s@(([a-zA-Z_][a-zA-Z_0-9]s*)?:?([a-zA-Z_][a-zA-Z_0-9]*)?|-([a-zA-Z_][a-zA-Z_0-9]*)?)
9    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, // TODO: multiline comments
22
23    #[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}