#![doc = include_str!("../README.md")]
#![cfg_attr(
feature = "docs",
cfg_attr(doc, doc = ::document_features::document_features!(feature_label = r#"<span class="stab portability"><code>{feature}</code></span>"#))
)]
#![cfg_attr(all(doc, CHANNEL_NIGHTLY), feature(doc_auto_cfg))]
#![warn(rust_2018_idioms)]
#![deny(missing_docs)]
mod processor;
pub mod renderer;
pub use processor::Processor;
pub use renderer::render;
pub use syntastica_core::*;
use language_set::LanguageSet;
use renderer::Renderer;
use syntastica_core::style::Style;
use theme::ResolvedTheme;
pub type Highlights<'src> = Vec<Vec<(&'src str, Option<&'static str>)>>;
pub type ThemedHighlights<'src> = Vec<Vec<(&'src str, Option<Style>)>>;
pub fn highlight<'s, S, T, E>(
code: impl AsRef<str>,
language: impl Into<S::Language>,
language_set: &'s S,
renderer: &mut impl Renderer,
theme: T,
) -> Result<String>
where
S: LanguageSet<'s>,
T: TryInto<ResolvedTheme, Error = E>,
crate::Error: From<E>,
{
Ok(render(
&Processor::process_once(code.as_ref(), language, language_set)?,
renderer,
theme.try_into()?,
))
}