maud/docs/src/highlight.rs

45 lines
1.1 KiB
Rust
Raw Normal View History

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()
});
}