mod chars;
mod decoration;
mod finder;
mod grid;
mod path;
mod svg;
pub use svg::RenderOptions;
use decoration::DecorationSet;
use finder::{find_decorations, find_paths};
use grid::Grid;
use path::PathSet;
use svg::generate_svg;
pub fn render(input: &str) -> String {
render_with_options(input, &RenderOptions::default())
}
pub fn render_with_options(input: &str, options: &RenderOptions) -> String {
let mut grid = Grid::new(input);
let mut paths = PathSet::new();
let mut decorations = DecorationSet::new();
find_paths(&mut grid, &mut paths);
find_decorations(&mut grid, &paths, &mut decorations);
generate_svg(&mut grid, &paths, &decorations, options)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_simple_box() {
let svg = render("+--+\n| |\n+--+");
assert!(svg.starts_with("<svg"));
assert!(svg.ends_with("</svg>"));
assert!(svg.contains("path"));
}
#[test]
fn test_arrow() {
let svg = render("-->");
assert!(svg.contains("polygon"));
}
#[test]
fn test_css_variables() {
let svg = render("-");
assert!(svg.contains("--aasvg-stroke"));
assert!(svg.contains("--aasvg-fill"));
assert!(svg.contains("--aasvg-bg"));
assert!(svg.contains("--aasvg-text"));
}
#[test]
fn test_dark_mode_support() {
let svg = render("-");
assert!(svg.contains("prefers-color-scheme: dark"));
}
#[test]
fn test_with_backdrop() {
let options = RenderOptions::new().with_backdrop(true);
let svg = render_with_options("-", &options);
assert!(svg.contains(r#"fill="var(--aasvg-bg)"#));
}
#[test]
fn test_text_rendering() {
let svg = render("Hello");
assert!(svg.contains("<text"));
assert!(svg.contains("Hello"));
}
#[test]
fn test_disable_text() {
let options = RenderOptions::new().with_disable_text(true);
let svg = render_with_options("Hello", &options);
assert!(!svg.contains("Hello"));
}
}