1
0
Fork 0
website/src/hilighting.rs

26 lines
889 B
Rust
Raw Normal View History

2023-06-18 11:34:08 +02:00
use syntect::{highlighting::ThemeSet, parsing::SyntaxSet};
2023-11-10 23:09:00 +01:00
use tracing::{error, instrument};
2023-06-18 11:34:08 +02:00
2023-11-10 23:09:00 +01:00
#[instrument(skip(content, lang, theme))]
2024-04-17 19:12:59 +02:00
pub fn hilight(content: &str, lang: &str, theme: Option<&str>) -> anyhow::Result<String> {
2023-06-18 11:34:08 +02:00
let ss = SyntaxSet::load_defaults_newlines();
2023-07-29 11:51:04 +02:00
let s = ss
.find_syntax_by_extension(lang)
.or_else(|| ss.find_syntax_by_name(lang))
.unwrap_or_else(|| {
error!("Syntax not found for language: {}", lang);
ss.find_syntax_plain_text()
});
2023-06-18 11:34:08 +02:00
let ts = ThemeSet::load_defaults();
2023-07-29 11:51:04 +02:00
let theme = if let Some(t) = theme {
ts.themes
.get(t)
.unwrap_or_else(|| ts.themes.first_key_value().unwrap().1)
} else {
ts.themes.first_key_value().unwrap().1
}; // TODO
2023-06-18 11:34:08 +02:00
let res = syntect::html::highlighted_html_for_string(content, &ss, s, theme)?;
Ok(res)
}