#![allow(clippy::tabs_in_doc_comments)]
pub mod dom;
pub mod error;
pub mod exec;
pub mod parser;
pub mod renderer;
use prelude::*;
pub(crate) type Moo<'i> = std::borrow::Cow<'i, str>;
pub(crate) type CatResult<T> = Result<T, error::TeaCatErr>;
pub fn eval_teacat_string<Rend: Renderer<Out>, Out>(
teacat_string: impl AsRef<str>,
) -> CatResult<Out> {
let str = teacat_string.as_ref();
let ast = TeaCatAst::try_from(str)?;
let mut executor = Executor::default();
let dom = executor.exec_ast(ast)?;
Ok(Rend::render(dom))
}
pub mod prelude {
pub use crate::dom::{DomNode, DomTag, TeaCatDom};
pub use crate::error::TeaCatErr;
pub use crate::eval_teacat_string;
pub use crate::exec::{Executor, ModuleName};
pub use crate::parser::{AstNode, Attributes, Tag, TeaCatAst};
pub use crate::renderer::{Renderer, html::HtmlRenderer};
}