1pub mod ast;
2pub mod lexer;
3pub mod parser;
4pub mod validator;
5pub mod layout;
6pub mod svg;
7pub mod themes;
8pub mod fmt;
9pub mod mcp;
10
11pub fn render(source: &str, theme_name: Option<&str>) -> RenderOutput {
13 let parse_result = parser::parse(source);
14 let (validation, resolved) = validator::validate(&parse_result.document, &parse_result.diagnostics);
15 let layout_result = layout::compute_layout(&resolved);
16 let theme = themes::get_theme(theme_name.unwrap_or(resolved.theme_name()));
17 let svg_output = svg::render_svg(&layout_result, &theme);
18
19 RenderOutput {
20 svg: svg_output,
21 width: layout_result.width,
22 height: layout_result.height,
23 diagnostics: validation.errors,
24 valid: validation.valid,
25 }
26}
27
28pub struct RenderOutput {
29 pub svg: String,
30 pub width: f64,
31 pub height: f64,
32 pub diagnostics: Vec<ast::Diagnostic>,
33 pub valid: bool,
34}