cmark_syntax/languages/
toml.rs1use 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}