feat(pastes): use rustler for highlight NIF

Signed-off-by: SphericalKat <amolele@gmail.com>
This commit is contained in:
sphericalkat committed 2021-08-17 02:05:58 +05:30
1 parent ed731994d7
commit 425fb2b571
7 files changed
+604 -5

No files matched your search

+21 -1
View File
@@ -1,6 +1,26 @@
use syntect::{html::{ClassStyle, ClassedHTMLGenerator}, parsing::SyntaxSet, util::LinesWithEndings};
#[rustler::nif]
fn add(a: i64, b: i64) -> i64 {
a + b
}
rustler::init!("Elixir.Ketbin.Utils.Syntax", [add]);
#[rustler::nif]
pub fn highlight_text(text: String, lang: String) -> String {
let syntax_set = SyntaxSet::load_defaults_newlines();
let syntax = syntax_set
.find_syntax_by_extension(&lang)
.unwrap_or(syntax_set.find_syntax_plain_text());
let mut rs_html_generator =
ClassedHTMLGenerator::new_with_class_style(syntax, &syntax_set, ClassStyle::Spaced);
for line in LinesWithEndings::from(&text) {
rs_html_generator.parse_html_for_line_which_includes_newline(&line)
}
rs_html_generator.finalize()
}
rustler::init!("Elixir.Ketbin.Utils.Syntax", [add, highlight_text]);