30 lines
1.2 KiB
Rust
30 lines
1.2 KiB
Rust
use std::result::Result;
|
|
|
|
use syntect::html::{ClassedHTMLGenerator, ClassStyle, css_for_theme_with_class_style};
|
|
use syntect::parsing::SyntaxSet;
|
|
use syntect::highlighting::ThemeSet;
|
|
use syntect::util::LinesWithEndings;
|
|
|
|
pub fn highlight(syntax_name: &str, source: &str) -> Result<String, String> {
|
|
let syntax_set = SyntaxSet::load_defaults_newlines();
|
|
let syntax = syntax_set.find_syntax_by_token(syntax_name)
|
|
.ok_or(format!("couldn't find syntax {}", syntax_name))?;
|
|
let mut html_generator =
|
|
ClassedHTMLGenerator::new_with_class_style(&syntax, &syntax_set, ClassStyle::Spaced);
|
|
for line in LinesWithEndings::from(source) {
|
|
html_generator.parse_html_for_line_which_includes_newline(&line);
|
|
}
|
|
|
|
let result = html_generator.finalize();
|
|
Ok(format!("<pre class=\"code\">{}</pre>", result))
|
|
}
|
|
|
|
// const ONEDARK_THEME: &'static str = include_str!("../assets/One_Dark.tmTheme");
|
|
|
|
pub fn get_css() -> String {
|
|
// let mut reader = std::io::Cursor::new(ONEDARK_THEME);
|
|
// let theme = ThemeSet::load_from_reader(&mut reader).unwrap();
|
|
let theme = &ThemeSet::load_defaults().themes["base16-ocean.dark"];
|
|
css_for_theme_with_class_style(&theme, ClassStyle::Spaced)
|
|
}
|