1use syntect::parsing::SyntaxSet;
2use syntect::highlighting::ThemeSet;
3use syntect::html::highlighted_html_for_string;
4
5#[derive(Default)]
6pub struct Highlighter {
7 ss: SyntaxSet,
8 ts: ThemeSet,
9}
10
11const THEME: &str = "base16-eighties.dark";
12
13impl Highlighter {
14 pub fn new() -> Self {
15 let ss = SyntaxSet::load_defaults_newlines();
16 let ts = ThemeSet::load_defaults();
17 Self { ss, ts }
18 }
19
20 pub fn apply(&self, blk: String, ext: &str) -> String {
21 let syn = self.ss.find_syntax_by_extension(ext);
22 if syn.is_none() {
23 return blk;
24 }
25 highlighted_html_for_string(
26 &blk,
27 &self.ss,
28 &syn.unwrap(),
29 &self.ts.themes[THEME],
30 )
31 }
32}