UTF Railroad

Generate text railroad diagrams in rust.

Usage

```rust use utf_railroad::{Diagram, Terminal, NonTerminal};

fn main() { let diagram = Diagram::default() .push(Box::new(Terminal::new("Hello"))) .push(Box::new(NonTerminal::new("World!"))) .gap_size(2);

println!("{}", diagram);

} ```

Output: ╭───────╮ ┏━━━━━━━━┓ ╟──│ Hello │──┃ World! ┃──╢ ╰───────╯ ┗━━━━━━━━┛

Examples

JSON Number: ╭───╮ ╭───╮ ╭───╮ ╭───────╮ ╭───╮ ╭───╮ ╭───────╮ ╟──┬│ - │┬──┬──────────│ 0 │───────────┬──┬│ . │──┬│ digit │┬┬──┬┬│ e │┬──┬┬│ + │┬┬──┬│ digit │┬┬──╢ │╰───╯│ │ ╰───╯ │ │╰───╯ │╰───────╯││ ││╰───╯│ ││╰───╯││ │╰───────╯││ ╰─────╯ │╭───────────╮ ╭───────╮ │ │ ╰1+ times─╯│ ││╭───╮│ ││╭───╮││ ╰1+ times─╯│ ╰│ digit 1-9 │──┬│ digit │┬╯ ╰──────────────────╯ │╰│ E │╯ │╰│ - │╯│ │ ╰───────────╯ │╰───────╯│ │ ╰───╯ │ ╰───╯ │ │ ╰0+ times─╯ │ ╰───────╯ │ ╰───────────────────────────────╯

JSON String: ╭───╮ ╭──────────────────────────────────────────────────────────╮ ╭───╮ ╟──│ " │──┬┬│ Any unicode character except " or \ or control character │┬┬──│ " │──╢ ╰───╯ ││╰──────────────────────────────────────────────────────────╯││ ╰───╯ ││ ╭───╮ ╭───╮ ││ │╰──────────│ \ │──┬────────────│ " │─────────────┬───────────╯│ │ ╰───╯ │ ╰───╯ │ │ │ │ ╭───╮ │ │ │ ├────────────│ \ │─────────────┤ │ │ │ ╰───╯ │ │ │ │ ╭───╮ │ │ │ ├────────────│ / │─────────────┤ │ │ │ ╰───╯ │ │ │ │ ╭───╮ │ │ │ ├────────────│ b │─────────────┤ │ │ │ ╰───╯ │ │ │ │ ╭───╮ │ │ │ ├────────────│ f │─────────────┤ │ │ │ ╰───╯ │ │ │ │ ╭───╮ │ │ │ ├────────────│ n │─────────────┤ │ │ │ ╰───╯ │ │ │ │ ╭───╮ │ │ │ ├────────────│ r │─────────────┤ │ │ │ ╰───╯ │ │ │ │ ╭───╮ │ │ │ ├────────────│ t │─────────────┤ │ │ │ ╰───╯ │ │ │ │╭───╮ ╭───────────────────╮ │ │ │ ╰│ u │──┬│ hexadecimal digit │┬╯ │ │ ╰───╯ │╰───────────────────╯│ │ │ ╰───────4 times───────╯ │ ╰───────────────────────────0+ times───────────────────────────╯