Generate text railroad diagrams in 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! ┃──╢
╰───────╯ ┗━━━━━━━━┛
JSON Number:
╭───╮ ╭───╮ ╭───╮ ╭───────╮ ╭───╮ ╭───╮ ╭───────╮
╟──┬│ - │┬──┬──────────│ 0 │───────────┬──┬│ . │──┬│ digit │┬┬──┬┬│ e │┬──┬┬│ + │┬┬──┬│ digit │┬┬──╢
│╰───╯│ │ ╰───╯ │ │╰───╯ │╰───────╯││ ││╰───╯│ ││╰───╯││ │╰───────╯││
╰─────╯ │╭───────────╮ ╭───────╮ │ │ ╰1+ times─╯│ ││╭───╮│ ││╭───╮││ ╰1+ times─╯│
╰│ digit 1-9 │──┬│ digit │┬╯ ╰──────────────────╯ │╰│ E │╯ │╰│ - │╯│ │
╰───────────╯ │╰───────╯│ │ ╰───╯ │ ╰───╯ │ │
╰0+ times─╯ │ ╰───────╯ │
╰───────────────────────────────╯
Stacked diagrams:
╭────────╮ ╭─────────╮ ╭───────╮ ╭────╮ ╭─────╮ ╭────────╮
╟───│ CREATE │──│ VIRTUAL │──│ TABLE │──┬│ IF │──│ NOT │──│ EXISTS │┬┐┌──╢
╰────────╯ ╰─────────╯ ╰───────╯ │╰────╯ ╰─────╯ ╰────────╯│││
╰───────────────────────────╯││
┌─────────────────────────────────────────────────────────────────┘│
│ ┏━━━━━━━━━━━━━┓ ╭───╮ ┏━━━━━━━━━━━━┓ │
└┬┃ schema-name ┃──│ . │┬──┃ table-name ┃─────────────────────────┐│
│┗━━━━━━━━━━━━━┛ ╰───╯│ ┗━━━━━━━━━━━━┛ ││
╰──────────────────────╯ ││
┌─────────────────────────────────────────────────────────────────┘│
│╭───────╮ ┏━━━━━━━━━━━━━┓ ╭───╮ ┏━━━━━━━━━━━━━━━━━┓ ╭───╮ │
└│ USING │──┃ module-name ┃──┬│ ( │──┬┃ module-argument ┃┬──│ ) │┬─┘
╰───────╯ ┗━━━━━━━━━━━━━┛ │╰───╯ │┗━━━━━━━━━━━━━━━━━┛│ ╰───╯│
│ ╰─────0+ times──────╯ │
╰───────────────────────────────────╯
JSON String:
╭───╮ ╭──────────────────────────────────────────────────────────╮ ╭───╮
╟──│ " │──┬┬│ Any unicode character except " or \ or control character │┬┬──│ " │──╢
╰───╯ ││╰──────────────────────────────────────────────────────────╯││ ╰───╯
││ ╭───╮ ╭───╮ ││
│╰──────────│ \ │──┬────────────│ " │─────────────┬───────────╯│
│ ╰───╯ │ ╰───╯ │ │
│ │ ╭───╮ │ │
│ ├────────────│ \ │─────────────┤ │
│ │ ╰───╯ │ │
│ │ ╭───╮ │ │
│ ├────────────│ / │─────────────┤ │
│ │ ╰───╯ │ │
│ │ ╭───╮ │ │
│ ├────────────│ b │─────────────┤ │
│ │ ╰───╯ │ │
│ │ ╭───╮ │ │
│ ├────────────│ f │─────────────┤ │
│ │ ╰───╯ │ │
│ │ ╭───╮ │ │
│ ├────────────│ n │─────────────┤ │
│ │ ╰───╯ │ │
│ │ ╭───╮ │ │
│ ├────────────│ r │─────────────┤ │
│ │ ╰───╯ │ │
│ │ ╭───╮ │ │
│ ├────────────│ t │─────────────┤ │
│ │ ╰───╯ │ │
│ │╭───╮ ╭───────────────────╮ │ │
│ ╰│ u │──┬│ hexadecimal digit │┬╯ │
│ ╰───╯ │╰───────────────────╯│ │
│ ╰───────4 times───────╯ │
╰───────────────────────────0+ times───────────────────────────╯