2 stable releases

1.1.0 Jul 3, 2022
1.0.0 Jul 3, 2022

#325 in Visualization

MIT license

26KB
514 lines

UTF Railroad

Generate text railroad diagrams in rust.

Usage

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─╯                         │         ╰───────╯             │   
                                                                ╰───────────────────────────────╯   

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───────────────────────────╯  

No runtime deps