45 lines
1.1 KiB
Rust
45 lines
1.1 KiB
Rust
|
use comrak::{
|
||
|
plugins::syntect::{SyntectAdapter, SyntectAdapterBuilder},
|
||
|
Plugins,
|
||
|
};
|
||
|
use std::rc::Rc;
|
||
|
use syntect::highlighting::{Color, ThemeSet};
|
||
|
|
||
|
pub struct Highlighter {
|
||
|
adapter: Rc<SyntectAdapter>,
|
||
|
}
|
||
|
|
||
|
impl Highlighter {
|
||
|
pub fn get() -> Self {
|
||
|
Self {
|
||
|
adapter: SYNTECT_ADAPTER.with(Rc::clone),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
pub fn as_plugins(&self) -> Plugins<'_> {
|
||
|
let mut plugins = Plugins::default();
|
||
|
plugins.render.codefence_syntax_highlighter = Some(&*self.adapter);
|
||
|
plugins
|
||
|
}
|
||
|
}
|
||
|
|
||
|
thread_local! {
|
||
|
static SYNTECT_ADAPTER: Rc<SyntectAdapter> = Rc::new({
|
||
|
SyntectAdapterBuilder::new()
|
||
|
.theme_set({
|
||
|
let mut ts = ThemeSet::load_defaults();
|
||
|
let mut theme = ts.themes["InspiredGitHub"].clone();
|
||
|
theme.settings.background = Some(Color {
|
||
|
r: 0xff,
|
||
|
g: 0xee,
|
||
|
b: 0xff,
|
||
|
a: 0xff,
|
||
|
});
|
||
|
ts.themes.insert("InspiredGitHub2".to_string(), theme);
|
||
|
ts
|
||
|
})
|
||
|
.theme("InspiredGitHub2")
|
||
|
.build()
|
||
|
});
|
||
|
}
|