///|
pub fn parse(text : String) -> MermaidDiagram {
  parse_mermaid(text)
}

///|
pub fn render_to_string(
  text : String,
  options? : Options = default_ascii_options(),
) -> String {
  match parse_mermaid(text) {
    Graph(g) => render_graph_ascii(g, options)
    Sequence(s) => render_sequence_ascii(s, options)
  }
}

///|
pub fn experimental_render_to_svg(
  text : String,
  options? : SvgOptions = default_render_options(),
) -> String {
  match parse_mermaid(text) {
    Graph(g) => render_graph_svg(g, options)
    Sequence(s) => render_sequence_svg(s, options)
  }
}

///|
fn svg_options_from_colors(
  colors : DiagramColors,
  font? : String = "monospace",
  transparent? : Bool = false,
) -> SvgOptions {
  {
    bg: Some(colors.bg),
    fg: Some(colors.fg),
    line: Some(colors.line),
    accent: Some(colors.accent),
    muted: Some(colors.muted),
    surface: Some(colors.surface),
    border: Some(colors.border),
    font: Some(font),
    transparent: Some(transparent),
  }
}

///|
pub fn svg_options_from_theme(
  name : String,
  font? : String = "monospace",
  transparent? : Bool = false,
) -> SvgOptions? {
  match themes.get(name) {
    Some(colors) => Some(svg_options_from_colors(colors, font~, transparent~))
    None => None
  }
}