hecto/src/filetype.rs

153 lines
4.7 KiB
Rust

pub struct FileType {
name: String,
hl_opts: HighlightingOptions,
}
#[derive(Default)]
pub struct HighlightingOptions {
numbers: bool,
strings: bool,
characters: bool,
comments: bool,
multiline_comments: bool,
primary_keywords: Vec<String>,
secondary_keywords: Vec<String>,
}
impl Default for FileType {
fn default() -> Self {
Self {
name: String::from("No filetype"),
hl_opts: HighlightingOptions::default(),
}
}
}
impl FileType {
pub fn name(&self) -> String {
self.name.clone()
}
pub fn highlighting_options(&self) -> &HighlightingOptions {
&self.hl_opts
}
pub fn from(file_name: &str) -> Self {
if file_name.ends_with(".rs") {
return Self {
name: String::from("Rust"),
hl_opts: HighlightingOptions {
numbers: true,
strings: true,
characters: true,
comments: true,
multiline_comments: true,
primary_keywords: vec![
"as".to_string(),
"break".to_string(),
"const".to_string(),
"continue".to_string(),
"crate".to_string(),
"else".to_string(),
"enum".to_string(),
"extern".to_string(),
"false".to_string(),
"fn".to_string(),
"For".to_string(),
"if".to_string(),
"impl".to_string(),
"in".to_string(),
"let".to_string(),
"loop".to_string(),
"match".to_string(),
"mod".to_string(),
"move".to_string(),
"mut".to_string(),
"pub".to_string(),
"ref".to_string(),
"return".to_string(),
"self".to_string(),
"Self".to_string(),
"static".to_string(),
"struct".to_string(),
"super".to_string(),
"trait".to_string(),
"true".to_string(),
"type".to_string(),
"unsafe".to_string(),
"use".to_string(),
"where".to_string(),
"while".to_string(),
"dyn".to_string(),
"abstract".to_string(),
"become".to_string(),
"box".to_string(),
"do".to_string(),
"final".to_string(),
"macro".to_string(),
"overrid".to_string(),
"priv".to_string(),
"typeof".to_string(),
"unsized".to_string(),
"virtual".to_string(),
"yield".to_string(),
"async".to_string(),
"await".to_string(),
"try".to_string(),
],
secondary_keywords: vec![
"bool".to_string(),
"char".to_string(),
"i8".to_string(),
"i16".to_string(),
"i32".to_string(),
"i64".to_string(),
"i128".to_string(),
"isize".to_string(),
"u8".to_string(),
"u16".to_string(),
"u32".to_string(),
"u64".to_string(),
"u128".to_string(),
"usize".to_string(),
"f32".to_string(),
"f64".to_string(),
],
},
};
}
Self::default()
}
}
impl HighlightingOptions {
pub fn numbers(&self) -> bool {
self.numbers
}
pub fn strings(&self) -> bool {
self.strings
}
pub fn characters(&self) -> bool {
self.characters
}
pub fn comments(&self) -> bool {
self.comments
}
pub fn primary_keywords(&self) -> &Vec<String> {
&self.primary_keywords
}
pub fn secondary_keywords(&self) -> &Vec<String> {
&self.secondary_keywords
}
pub fn multiline_comments(&self) -> bool {
self.multiline_comments
}
}