#[non_exhaustive]
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)]
pub enum Language {
C,
Cpp,
CSharp,
Css,
Go,
Html,
Java,
JavaScript,
Python,
Rust,
Sql,
Swift,
TypeScript,
}
#[derive(Clone, Copy)]
pub(crate) struct Syntax {
pub line: Option<&'static [u8]>,
pub block: Option<(&'static [u8], &'static [u8])>,
pub nests: bool,
pub double_quote: bool,
pub single_quote: bool,
pub triple_double: bool,
pub triple_single: bool,
pub js: bool,
pub go_raw: bool,
pub rust: bool,
pub swift_raw: bool,
pub cpp_raw: bool,
pub csharp_verbatim: bool,
pub python_prefix: bool,
pub sql: bool,
}
const NONE: Syntax = Syntax {
line: None,
block: None,
nests: false,
double_quote: false,
single_quote: false,
triple_double: false,
triple_single: false,
js: false,
go_raw: false,
rust: false,
swift_raw: false,
cpp_raw: false,
csharp_verbatim: false,
python_prefix: false,
sql: false,
};
const SLASHES: Option<&[u8]> = Some(b"//");
const SLASH_STAR: Option<(&[u8], &[u8])> = Some((b"/*", b"*/"));
impl Syntax {
pub(crate) fn for_language(language: Language) -> Syntax {
match language {
Language::C => Syntax {
line: SLASHES,
block: SLASH_STAR,
double_quote: true,
single_quote: true,
..NONE
},
Language::Cpp => Syntax {
line: SLASHES,
block: SLASH_STAR,
double_quote: true,
single_quote: true,
cpp_raw: true,
..NONE
},
Language::CSharp => Syntax {
line: SLASHES,
block: SLASH_STAR,
double_quote: true,
single_quote: true,
csharp_verbatim: true,
..NONE
},
Language::Css => Syntax {
block: SLASH_STAR,
double_quote: true,
single_quote: true,
..NONE
},
Language::Go => Syntax {
line: SLASHES,
block: SLASH_STAR,
double_quote: true,
single_quote: true,
go_raw: true,
..NONE
},
Language::Html => Syntax {
block: Some((b"<!--", b"-->")),
..NONE
},
Language::Java => Syntax {
line: SLASHES,
block: SLASH_STAR,
double_quote: true,
single_quote: true,
triple_double: true,
..NONE
},
Language::JavaScript | Language::TypeScript => Syntax {
line: SLASHES,
block: SLASH_STAR,
double_quote: true,
single_quote: true,
js: true,
..NONE
},
Language::Python => Syntax {
line: Some(b"#"),
double_quote: true,
single_quote: true,
triple_double: true,
triple_single: true,
python_prefix: true,
..NONE
},
Language::Rust => Syntax {
line: SLASHES,
block: SLASH_STAR,
nests: true,
double_quote: true,
single_quote: true,
rust: true,
..NONE
},
Language::Sql => Syntax {
line: Some(b"--"),
block: SLASH_STAR,
double_quote: true,
single_quote: true,
sql: true,
..NONE
},
Language::Swift => Syntax {
line: SLASHES,
block: SLASH_STAR,
nests: true,
double_quote: true,
triple_double: true,
swift_raw: true,
..NONE
},
}
}
}