cmark_syntax/languages/
toml.rs

1use crate::{Highlight, Kind};
2use logos::Logos;
3
4#[derive(Logos, PartialEq, Eq, Clone, Copy, Debug)]
5pub enum Toml {
6    #[regex("[a-zA-Z0-9_-]*")]
7    Identifier,
8
9    #[regex(r#""([^"\n]|\\"])*""#)]
10    #[regex(r#""""([^"]|\\"]|"[^"]|""[^"])*""""#)]
11    #[regex(r#"'[^'\n]*'"#)]
12    #[regex(r#"'''([^']|'[^']|''[^'])*'''"#)]
13    #[regex("[+-]?[0-9_]+(.[0-9]+)?")]
14    #[regex("[+-]?0[xX][0-9a-fA-F_]+", priority = 7)]
15    #[regex("[+-]?0[oO][0-7_]+")]
16    #[regex("[+-]?0[bB][01_]+")]
17    #[regex("[+-]?[0-9](.[0-9]+)?[eE][+-]?[0-9]+")]
18    #[regex("[+-]?(inf|nan)")]
19    #[regex("(true|false)")]
20    #[regex("[0-9]+-[0-9]+-[0-9]+")]
21    #[regex("[0-9]+:[0-9]+:[0-9]+(.[0-9]+)?([Zz]|([+-][0-9]+:[0-9]+))?")]
22    #[regex("[0-9]+-[0-9]+-[0-9]+[Tt ]?[0-9]+:[0-9]+:[0-9]+(.[0-9]+)?([Zz]|([+-][0-9]+:[0-9]+))?")]
23    Literal,
24
25    #[regex("\\{|\\}|\\]")]
26    Glyph,
27
28    #[regex("\\[")]
29    GlyphCtx,
30
31    #[regex("#[^\n]*")]
32    Comment,
33
34    None,
35}
36
37impl Highlight for Toml {
38    const LANG: &'static str = "toml";
39    const START: Self = Self::None;
40
41    fn kind(tokens: &[Self; 2]) -> Kind {
42        use Toml::*;
43
44        match tokens {
45            [GlyphCtx, Identifier] => Kind::StrongIdentifier,
46            [Identifier, Identifier] => Kind::SpecialIdentifier,
47            [_, Identifier] => Kind::Identifier,
48            [_, Literal] => Kind::Literal,
49            [_, GlyphCtx] => Kind::Glyph,
50            [_, Glyph] => Kind::Glyph,
51            [_, Comment] => Kind::Comment,
52            _ => Kind::None,
53        }
54    }
55}