35 lines
850 B
Rust
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>"#
|
|
);
|
|
}
|
|
}
|