use giallo::{HighlightOptions, HtmlRenderer, Registry, RenderOptions, ThemeVariant};
mod bindings {
//! Generated code derived from the Giallo-JS `world.wit` definition.
wit_bindgen::generate!({
path: "wit/world.wit",
});
use super::GialloJsComponent;
export!(GialloJsComponent);
}
struct GialloJsComponent;
impl bindings::exports::docs::giallo_js::syntax_highlighter::Guest for GialloJsComponent {
/// Rudimentary Wasm adapter around the basic
/// [Giallo usage example](https://github.com/getzola/giallo/blob/a86755836dc4387056432f63f0b37b2c04b52711/examples/basic.rs).
fn render_highlighted(
code: String,
language: String,
theme_light: String,
theme_dark: String,
) -> Result {
let mut registry = Registry::builtin().map_err(|err| err.to_string())?;
registry.link_grammars();
let options = HighlightOptions::new(
language,
ThemeVariant::Dual {
light: &theme_light,
dark: &theme_dark,
},
);
let highlighted = registry
.highlight(&code, &options)
.map_err(|err| err.to_string())?;
Ok(HtmlRenderer::default().render(&highlighted, &RenderOptions::default()))
}
}