capybara/ext/syntax/src/lib.rs

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