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 { 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!("
{}
", 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) }