use crate::{
Error, HighlightConfig, Highlighted, backend::Backend, document::Document, highlight,
language::Registry,
};
pub use crate::language::Queries;
pub struct Highlighter<B: Backend> {
backend: B,
registry: Registry<B>,
}
impl<B: Backend> Highlighter<B> {
pub fn new(backend: B) -> Self {
Self {
backend,
registry: Registry::new(),
}
}
pub fn load(
&mut self,
id: &str,
aliases: &[&str],
language: B::Language,
queries: Queries<'_>,
) -> Result<(), Error> {
self.registry
.load(&mut self.backend, id, aliases, language, queries)
}
pub fn load_lazy(
&mut self,
id: &str,
aliases: &[&str],
language: B::Language,
queries: Queries<'static>,
) -> Result<(), Error> {
self.registry.load_lazy(id, aliases, language, queries)
}
pub fn contains(&self, name: &str) -> bool {
self.registry.get(name).is_some()
}
pub fn highlight<'a>(
&'a mut self,
source: &'a str,
name: &str,
config: &HighlightConfig,
) -> Result<Highlighted<'a>, Error> {
highlight::source(&mut self.backend, &self.registry, source, name, config)
}
pub fn create_document(
&self,
name: &str,
source: &str,
backend: B,
) -> Result<Document<B>, Error> {
Document::new(self.registry.clone(), backend, name, source)
}
}