use crate::args::CliArgs;
use crate::layout::build_layout;
use crate::render::{
load_input, print_font_families, print_theme_list, resolve_and_patch_theme, resolve_plain_text,
write_svg,
};
use anyhow::Result;
use termcinema_engine::render_svg_from_input as render_svg;
pub(crate) fn handle_render(args: &CliArgs) -> Result<()> {
if args.list_fonts {
print_font_families();
return Ok(());
}
if args.list_themes {
print_theme_list();
return Ok(());
}
let (raw, script_mode) = load_input(args)?;
let svg = prepare_svg(&raw, script_mode, args)?;
write_svg(svg, args)
}
pub(crate) fn prepare_svg(raw: &str, is_script: bool, args: &CliArgs) -> Result<String> {
let text = resolve_plain_text(raw.to_string(), is_script, args.no_escape);
let (style, cursor, control) = resolve_and_patch_theme(args, is_script)?;
let layout = build_layout(args);
let svg = render_svg(&text, is_script, &style, &layout, &cursor, &control);
Ok(svg)
}