nib/
highlighter.rs

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}