chatty_rs/app/ui/
syntaxes.rs1use once_cell::sync::Lazy;
2use ratatui::style::Color;
3use syntect::parsing::{SyntaxReference, SyntaxSet};
4
5pub static SYNTAX_SET: Lazy<SyntaxSet> = Lazy::new(Syntaxes::load);
6
7pub struct Syntaxes;
8
9impl Syntaxes {
10 fn load() -> SyntaxSet {
11 SyntaxSet::load_defaults_newlines()
12 }
13
14 pub fn get(name: &str) -> &SyntaxReference {
15 if let Some(syntax) = SYNTAX_SET.find_syntax_by_extension(name) {
16 return syntax;
17 }
18
19 if let Some(syntax) = SYNTAX_SET.find_syntax_by_name(name) {
20 return syntax;
21 }
22
23 if let Some(syntax) = SYNTAX_SET.find_syntax_by_token(name) {
24 return syntax;
25 }
26
27 SYNTAX_SET.find_syntax_plain_text()
28 }
29
30 pub fn list() -> Vec<String> {
31 let mut list = SYNTAX_SET
32 .syntaxes()
33 .iter()
34 .map(|s| s.name.clone())
35 .collect::<Vec<String>>();
36 list.sort();
37 list
38 }
39
40 pub fn translate_colour(synntect_color: syntect::highlighting::Color) -> Option<Color> {
41 let syntect::highlighting::Color { r, g, b, .. } = synntect_color;
42 Some(Color::Rgb(r, g, b))
43 }
44}