splash-rs/src/lib.rs

35 lines
850 B
Rust

pub fn highlight(code: &str) -> String {
unsafe {
let mut buf = Vec::new();
buf.reserve(
2usize
.pow(1 + (code.len() as f32).log2().ceil() as u32)
.max(1024),
);
let used = highlight_swift(
code.as_ptr(),
code.len() as u64,
buf.as_mut_ptr(),
buf.capacity() as u64,
);
buf.set_len(used as usize);
String::from_utf8_unchecked(buf)
}
}
extern "C" {
fn highlight_swift(code_ptr: *const u8, code_len: u64, out_ptr: *mut u8, max_len: u64) -> u64;
}
#[cfg(test)]
mod tests {
#[test]
fn test_highlight() {
let result = super::highlight("1+1");
assert_eq!(
result,
r#"<span class="hl-num">1</span>+<span class="hl-num">1</span>"#
);
}
}