comment

               ╭────────────────────────────────────────╮               
               │                                        │               
      ╭────╮   │    ┌──────────────────────────────┐    │   ╭────╮      
├┼────│ /* │───╯─╭──│ anything but * followed by / │──╮─╰───│ */ │────┼┤
      ╰────╯     │  └──────────────────────────────┘  │     ╰────╯      
                 ╰────────────────────────────────────╯                 

newline

        ╭────╮        
├┼──╮───│ \n │───╭──┼┤
    │   ╰────╯   │    
    │            │    
    │  ╭──────╮  │    
    ╰──│ \r\n │──╯    
    │  ╰──────╯  │    
    │            │    
    │   ╭────╮   │    
    ╰───│ \r │───╯    
    │   ╰────╯   │    
    │            │    
    │   ╭────╮   │    
    ╰───│ \f │───╯    
        ╰────╯        

whitespace

        ╭───────╮        
├┼──╮───│ space │───╭──┼┤
    │   ╰───────╯   │    
    │               │    
    │    ╭────╮     │    
    ╰────│ \t │─────╯    
    │    ╰────╯     │    
    │               │    
    │  ┌─────────┐  │    
    ╰──│ newline │──╯    
       └─────────┘       

hex digit

      ┌────────────────┐      
├┼────│ 0-9 a-f or A-F │────┼┤
      └────────────────┘      

escape

      ╭───╮            ┌──────────────────────────┐              
├┼────│ \ │───╮────────│ not newline or hex digit │─────────╭──┼┤
      ╰───╯   │        └──────────────────────────┘         │    
              │                                             │    
              │      ┌───────────┐                          │    
              ╰───╭──│ hex digit │──╮──╮──────────────────╭─╯    
                  │  └───────────┘  │  │                  │      
                  ╰─1-6 times───────╯  │  ┌────────────┐  │      
                                       ╰──│ whitespace │──╯      
                                          └────────────┘         

<whitespace-token>

        ┌────────────┐        
├┼───╭──│ whitespace │──╮───┼┤
     │  └────────────┘  │     
     ╰──────────────────╯     

ws*

    ╭──────────────────────────────╮    
    │                              │    
    │    ┌────────────────────┐    │    
├┼──╯─╭──│ <whitespace-token> │──╮─╰──┼┤
      │  └────────────────────┘  │      
      ╰──────────────────────────╯      

<ident-token>

                                                 ╭────────────────────────────────────────────╮    
                                                 │                                            │    
                   ┌────────────────────────┐    │      ┌──────────────────────────────┐      │    
├┼──╮─────────╭─╮──│ a-z A-Z _ or non-ASCII │──╭─╯─╭─╮──│ a-z A-Z 0-9 _ - or non-ASCII │──╭─╮─╰──┼┤
    │         │ │  └────────────────────────┘  │   │ │  └──────────────────────────────┘  │ │      
    │  ╭───╮  │ │                              │   │ │                                    │ │      
    ╰──│ - │──╯ │          ┌────────┐          │   │ │             ┌────────┐             │ │      
       ╰───╯    ╰──────────│ escape │──────────╯   │ ╰─────────────│ escape │─────────────╯ │      
                           └────────┘              │               └────────┘               │      
                                                   ╰────────────────────────────────────────╯      

<function-token>

      ┌───────────────┐     ╭───╮      
├┼────│ <ident-token> │─────│ ( │────┼┤
      └───────────────┘     ╰───╯      

<at-keyword-token>

      ╭───╮     ┌───────────────┐      
├┼────│ @ │─────│ <ident-token> │────┼┤
      ╰───╯     └───────────────┘      

<hash-token>

      ╭───╮         ┌──────────────────────────────┐          
├┼────│ # │────╭─╮──│ a-z A-Z 0-9 _ - or non-ASCII │──╭─╮───┼┤
      ╰───╯    │ │  └──────────────────────────────┘  │ │     
               │ │                                    │ │     
               │ │             ┌────────┐             │ │     
               │ ╰─────────────│ escape │─────────────╯ │     
               │               └────────┘               │     
               ╰────────────────────────────────────────╯     

<string-token>

                 ╭────────────────────────────────────╮                
                 │                                    │                
         ╭───╮   │       ┌────────────────────┐       │   ╭───╮        
├┼──╮────│ " │───╯─╭─╮───│ not " \ or newline │───╭─╮─╰───│ " │───╭──┼┤
    │    ╰───╯     │ │   └────────────────────┘   │ │     ╰───╯   │    
    │              │ │                            │ │             │    
    │              │ │         ┌────────┐         │ │             │    
    │              │ ╰─────────│ escape │─────────╯ │             │    
    │              │ │         └────────┘         │ │             │    
    │              │ │                            │ │             │    
    │              │ │    ╭───╮     ┌─────────┐   │ │             │    
    │              │ ╰────│ \ │─────│ newline │───╯ │             │    
    │              │      ╰───╯     └─────────┘     │             │    
    │              ╰────────────────────────────────╯             │    
    │                                                             │    
    │            ╭────────────────────────────────────╮           │    
    │            │                                    │           │    
    │    ╭───╮   │       ┌────────────────────┐       │   ╭───╮   │    
    ╰────│ ' │───╯─╭─╮───│ not ' \ or newline │───╭─╮─╰───│ ' │───╯    
         ╰───╯     │ │   └────────────────────┘   │ │     ╰───╯        
                   │ │                            │ │                  
                   │ │         ┌────────┐         │ │                  
                   │ ╰─────────│ escape │─────────╯ │                  
                   │ │         └────────┘         │ │                  
                   │ │                            │ │                  
                   │ │    ╭───╮     ┌─────────┐   │ │                  
                   │ ╰────│ \ │─────│ newline │───╯ │                  
                   │      ╰───╯     └─────────┘     │                  
                   ╰────────────────────────────────╯                  

<url-token>

                                                      ╭─────────────────────────────────────╮              
                                                      │                                     │              
      ┌─────────────────────┐     ╭───╮     ┌─────┐   │     ┌──────────────┐      ┌─────┐   │   ╭───╮      
├┼────│ <ident-token "url"> │─────│ ( │─────│ ws* │───╯──╮──│ url-unquoted │──╭───│ ws* │───╰───│ ) │────┼┤
      └─────────────────────┘     ╰───╯     └─────┘      │  └──────────────┘  │   └─────┘       ╰───╯      
                                                         │                    │                            
                                                         │     ┌────────┐     │                            
                                                         ╰─────│ STRING │─────╯                            
                                                               └────────┘                                  

url-unquoted

          ┌───────────────────────────────────────────┐          
├┼───╭─╮──│ not " ' ( ) \ whitespace or non-printable │──╭─╮───┼┤
     │ │  └───────────────────────────────────────────┘  │ │     
     │ │                                                 │ │     
     │ │                   ┌────────┐                    │ │     
     │ ╰───────────────────│ escape │────────────────────╯ │     
     │                     └────────┘                      │     
     ╰─────────────────────────────────────────────────────╯     

<number-token>

       ╭───╮                                                                                                         
    ╭──│ + │──╮                                                                                                      
    │  ╰───╯  │                                                                                                      
    │         │        ┌───────┐       ╭───╮       ┌───────┐                                                         
├┼──┼─────────┼─╮───╭──│ digit │──╮────│ . │────╭──│ digit │──╮──╭─╮────────────────────────────────────────────╭──┼┤
    │         │ │   │  └───────┘  │    ╰───╯    │  └───────┘  │  │ │                                            │    
    │  ╭───╮  │ │   ╰─────────────╯             ╰─────────────╯  │ │                 ╭───╮                      │    
    ╰──│ - │──╯ │                                                │ │              ╭──│ + │──╮                   │    
       ╰───╯    │                   ┌───────┐                    │ │              │  ╰───╯  │                   │    
                ╰────────────────╭──│ digit │──╮─────────────────╯ │     ╭───╮    │         │     ┌───────┐     │    
                │                │  └───────┘  │                 │ ╰──╮──│ e │──╭─┼─────────┼──╭──│ digit │──╮──╯    
                │                ╰─────────────╯                 │    │  ╰───╯  │ │         │  │  └───────┘  │       
                │                                                │    │         │ │  ╭───╮  │  ╰─────────────╯       
                │             ╭───╮       ┌───────┐              │    │  ╭───╮  │ ╰──│ - │──╯                        
                ╰─────────────│ . │────╭──│ digit │──╮───────────╯    ╰──│ E │──╯    ╰───╯                           
                              ╰───╯    │  └───────┘  │                   ╰───╯                                       
                                       ╰─────────────╯                                                               

<dimension-token>

      ┌────────────────┐     ┌───────────────┐      
├┼────│ <number-token> │─────│ <ident-token> │────┼┤
      └────────────────┘     └───────────────┘      

<percentage-token>

      ┌────────────────┐     ╭───╮      
├┼────│ <number-token> │─────│ % │────┼┤
      └────────────────┘     ╰───╯      

<unicode-range-token>

       ╭───╮      ╭───╮                          ┌───────────┐                          
├┼──╮──│ U │──╭───│ + │───╮───────────────────╭──│ hex digit │──╮──────────────────╭──┼┤
    │  ╰───╯  │   ╰───╯   │                   │  └───────────┘  │                  │    
    │         │           │                   ╰─1-6 times───────╯                  │    
    │  ╭───╮  │           │                                                        │    
    ╰──│ u │──╯           │  ╭─────────────────────╮                               │    
       ╰───╯              │  │                     │                               │    
                          │  │    ┌───────────┐    │     ╭───╮                     │    
                          ╰──╯─╭──│ hex digit │──╮─╰──╭──│ ? │──────────────────╮──╯    
                          │    │  └───────────┘  │    │  ╰───╯                  │  │    
                          │    ╰─1-5 times───────╯    ╰─1 to (6 - digits) times─╯  │    
                          │                                                        │    
                          │      ┌───────────┐       ╭───╮       ┌───────────┐     │    
                          ╰───╭──│ hex digit │──╮────│ - │────╭──│ hex digit │──╮──╯    
                              │  └───────────┘  │    ╰───╯    │  └───────────┘  │       
                              ╰─1-6 times───────╯             ╰─1-6 times───────╯       

Stylesheet

    ╭──────────────────────────────────╮    
    │                                  │    
    │         ┌─────────────┐          │    
    │   ╭─────│ <CDO-token> │──────╮   │    
    │   │     └─────────────┘      │   │    
    │   │                          │   │    
    │   │     ┌─────────────┐      │   │    
    │   ╭─────│ <CDC-token> │──────╮   │    
    │   │     └─────────────┘      │   │    
    │   │                          │   │    
    │   │  ┌────────────────────┐  │   │    
    │   ╭──│ <whitespace-token> │──╮   │    
    │   │  └────────────────────┘  │   │    
    │   │                          │   │    
    │   │    ┌────────────────┐    │   │    
├┼──╯─╭─┼────│ Qualified rule │────┼─╮─╰──┼┤
      │ │    └────────────────┘    │ │      
      │ │                          │ │      
      │ │       ┌─────────┐        │ │      
      │ ╰───────│ At-rule │────────╯ │      
      │         └─────────┘          │      
      ╰──────────────────────────────╯      

Rule list

    ╭──────────────────────────────────╮    
    │                                  │    
    │      ┌────────────────────┐      │    
    │   ╭──│ <whitespace-token> │──╮   │    
    │   │  └────────────────────┘  │   │    
    │   │                          │   │    
    │   │    ┌────────────────┐    │   │    
├┼──╯─╭─┼────│ Qualified rule │────┼─╮─╰──┼┤
      │ │    └────────────────┘    │ │      
      │ │                          │ │      
      │ │       ┌─────────┐        │ │      
      │ ╰───────│ At-rule │────────╯ │      
      │         └─────────┘          │      
      ╰──────────────────────────────╯      

At-rule

                               ╭───────────────────────────╮                       
                               │                           │                       
      ┌────────────────────┐   │    ┌─────────────────┐    │    ┌──────────┐       
├┼────│ <at-keyword-token> │───╯─╭──│ Component value │──╮─╰─╮──│ {} block │──╭──┼┤
      └────────────────────┘     │  └─────────────────┘  │   │  └──────────┘  │    
                                 ╰───────────────────────╯   │                │    
                                                             │     ╭───╮      │    
                                                             ╰─────│ ; │──────╯    
                                                                   ╰───╯           

Qualified rule

    ╭───────────────────────────╮                     
    │                           │                     
    │    ┌─────────────────┐    │   ┌──────────┐      
├┼──╯─╭──│ Component value │──╮─╰───│ {} block │────┼┤
      │  └─────────────────┘  │     └──────────┘      
      ╰───────────────────────╯                       

Declaration list

                   ╭───────────────────╮ ╭─────────────────────────────────────╮      
                   │                   │ │                                     │      
      ┌─────┐      │  ┌─────────────┐  │ │    ╭───╮     ┌──────────────────┐   │      
├┼────│ ws* │───╮──╯──│ Declaration │──╰─╯────│ ; │─────│ Declaration list │───╰─╭──┼┤
      └─────┘   │     └─────────────┘         ╰───╯     └──────────────────┘     │    
                │                                                                │    
                │              ┌─────────┐     ┌──────────────────┐              │    
                ╰──────────────│ At-rule │─────│ Declaration list │──────────────╯    
                               └─────────┘     └──────────────────┘                   

Declaration

                                                ╭───────────────────────────╮ ╭──────────────────╮    
                                                │                           │ │                  │    
      ┌───────────────┐     ┌─────┐     ╭───╮   │    ┌─────────────────┐    │ │  ┌────────────┐  │    
├┼────│ <ident-token> │─────│ ws* │─────│ : │───╯─╭──│ Component value │──╮─╰─╯──│ !important │──╰──┼┤
      └───────────────┘     └─────┘     ╰───╯     │  └─────────────────┘  │      └────────────┘       
                                                  ╰───────────────────────╯                           

!important

      ╭───╮     ┌─────┐     ┌───────────────────────────┐     ┌─────┐      
├┼────│ ! │─────│ ws* │─────│ <ident-token "important"> │─────│ ws* │────┼┤
      ╰───╯     └─────┘     └───────────────────────────┘     └─────┘      

Component value

       ┌─────────────────┐       
├┼──╮──│ Preserved token │──╭──┼┤
    │  └─────────────────┘  │    
    │                       │    
    │     ┌──────────┐      │    
    ╰─────│ {} block │──────╯    
    │     └──────────┘      │    
    │                       │    
    │     ┌──────────┐      │    
    ╰─────│ () block │──────╯    
    │     └──────────┘      │    
    │                       │    
    │     ┌──────────┐      │    
    ╰─────│ [] block │──────╯    
    │     └──────────┘      │    
    │                       │    
    │  ┌────────────────┐   │    
    ╰──│ Function block │───╯    
       └────────────────┘        

{} block

              ╭───────────────────────────╮              
              │                           │              
      ╭───╮   │    ┌─────────────────┐    │   ╭───╮      
├┼────│ { │───╯─╭──│ Component value │──╮─╰───│ } │────┼┤
      ╰───╯     │  └─────────────────┘  │     ╰───╯      
                ╰───────────────────────╯                

() block

              ╭───────────────────────────╮              
              │                           │              
      ╭───╮   │    ┌─────────────────┐    │   ╭───╮      
├┼────│ ( │───╯─╭──│ Component value │──╮─╰───│ ) │────┼┤
      ╰───╯     │  └─────────────────┘  │     ╰───╯      
                ╰───────────────────────╯                

[] block

              ╭───────────────────────────╮              
              │                           │              
      ╭───╮   │    ┌─────────────────┐    │   ╭───╮      
├┼────│ [ │───╯─╭──│ Component value │──╮─╰───│ ] │────┼┤
      ╰───╯     │  └─────────────────┘  │     ╰───╯      
                ╰───────────────────────╯                

Function block

                             ╭───────────────────────────╮              
                             │                           │              
      ┌──────────────────┐   │    ┌─────────────────┐    │   ╭───╮      
├┼────│ <function-token> │───╯─╭──│ Component value │──╮─╰───│ ) │────┼┤
      └──────────────────┘     │  └─────────────────┘  │     ╰───╯      
                               ╰───────────────────────╯                

glob pattern

        ┌───────┐        
     ╭──│ ident │──╮     
     │  └───────┘  │     
    ╭╰─────╮ ╭─────╯╮    
├┼──┤       ╳       ├──┼┤
    ╰╭─────╯ ╰─────╮╯    
     │    ╭───╮    │     
     ╰────│ * │────╯     
          ╰───╯          

SQL

                                                                                                                                             ╭──────────────────────────────────╮       
                                                                                                                                             │                                  │       
          ╭────────╮                                                   ╭───╮                                ╭──────╮       ┌───────────┐     │    ╭───────╮     ┌───────────┐   │       
├┼────────│ SELECT │───╮────────────────╭─╮────────────────────────────│ * │────────────────────────────╭───│ FROM │────╭──│ from_item │──╮──╯────│ WHERE │─────│ condition │───╰─┐     
          ╰────────╯   │                │ │                            ╰───╯                            │   ╰──────╯    │  └───────────┘  │       ╰───────╯     └───────────┘     │     
                       │  ╭──────────╮  │ │                                                             │               │  ╭───╮          │                                       │     
                       ╰──│ DISTINCT │──╯ │                       ╭─────────────────────────────────╮   │               ╰──│ , │──────────╯                                       │     
                          ╰──────────╯    │                       │                                 │   │                  ╰───╯                                                  │     
                                          │      ┌────────────┐   │    ╭────╮     ┌─────────────┐   │   │                                                                         │     
                                          ╰─╭────│ expression │───╯────│ AS │─────│ output_name │───╰─╮─╯                                                                         │     
                                            │    └────────────┘        ╰────╯     └─────────────┘     │                                                                           │     
                                            │  ╭───╮                                                  │                                                                           │     
                                            ╰──│ , │──────────────────────────────────────────────────╯                                                                           │     
                                               ╰───╯                                                                                                                              │     
     ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘     
     │                                                                                                   ╭───────────────────────────────────────────────────╮                          
     │                                                                                                   │                                                   │                          
     │                    ╭──────────────────────────────────────╮ ╭───────────────────────────────────╮ │                      ╭───────────╮                │                          
     │                    │                                      │ │                                   │ │                      │           │                │                          
     │                    │    ╭──────────╮     ┌────────────┐   │ │    ╭────────╮     ┌───────────┐   │ │       ╭───────╮      │  ╭─────╮  │   ┌────────┐   │                          
     └────────────────────╯────│ GROUP BY │─────│ expression │───╰─╯────│ HAVING │─────│ condition │───╰─╯──╮────│ UNION │────╭─╯──│ ALL │──╰───│ select │───╰────────────────────┐     
                               ╰──────────╯     └────────────┘          ╰────────╯     └───────────┘        │    ╰───────╯    │    ╰─────╯      └────────┘                        │     
                                                                                                            │                 │                                                   │     
                                                                                                            │  ╭───────────╮  │                                                   │     
                                                                                                            ╰──│ INTERSECT │──╯                                                   │     
                                                                                                            │  ╰───────────╯  │                                                   │     
                                                                                                            │                 │                                                   │     
                                                                                                            │   ╭────────╮    │                                                   │     
                                                                                                            ╰───│ EXCEPT │────╯                                                   │     
                                                                                                                ╰────────╯                                                        │     
     ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘     
     │                                                                                                               ╭──────────────────────────────────────────────╮                   
     │                                                                                                               │                                              │                   
     │             ╭────────────────────────────────────────────────────────────╮ ╭────────────────────────────────╮ │                               ╭────────────╮ │                   
     │             │                                                            │ │                                │ │                               │            │ │                   
     │             │    ╭──────────╮         ┌────────────┐                     │ │    ╭───────╮      ┌───────┐    │ │    ╭────────╮     ┌───────┐   │  ╭──────╮  │ │                   
     └─────────────╯────│ ORDER BY │────╭────│ expression │───╮────────────╭─╮──╰─╯────│ LIMIT │───╮──│ count │──╭─╰─╯────│ OFFSET │─────│ start │───╯──│ ROWS │──╰─╰─────────────────┼┤
                        ╰──────────╯    │    └────────────┘   │            │ │         ╰───────╯   │  └───────┘  │        ╰────────╯     └───────┘      ╰──────╯                        
                                        │                     │  ╭─────╮   │ │                     │             │                                                                      
                                        │                     ╰──│ ASC │───╯ │                     │   ╭─────╮   │                                                                      
                                        │                     │  ╰─────╯   │ │                     ╰───│ ALL │───╯                                                                      
                                        │                     │            │ │                         ╰─────╯                                                                          
                                        │                     │  ╭──────╮  │ │                                                                                                          
                                        │                     ╰──│ DESC │──╯ │                                                                                                          
                                        │                        ╰──────╯    │                                                                                                          
                                        │  ╭───╮                             │                                                                                                          
                                        ╰──│ , │─────────────────────────────╯                                                                                                          
                                           ╰───╯                                                                                                                                        

Group example

                ╭─────────────────────────╮                
                │                         │                
                │                         │                
                │          label          │                
                │    ╭┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄╮    │                
      ╭─────╮   │    ┆    ╭─────╮    ┆    │                
├┼────│ foo │───╯─╭──┼────│ foo │──┐ ┆    │                
      ╰─────╯     │  ┆    ╰─────╯  │ ┆    │                
                  │  ┆ ┌───────────┘ ┆    │                
                  │  ┆ │  ╭─────╮    ┆    │   ╭─────╮      
                  │  ┆ └──│ bar │────┼──╮─╰───│ bar │────┼┤
                  │  ┆    ╰─────╯    ┆  │     ╰─────╯      
                  │  ╰┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄╯  │                  
                  ╰─────────────────────╯                  

Class example

      ╭─────╮     ╭──────╮     ┌──────┐             
├┼────│ foo │─────│ blue │─────│ blue │────blue───┼┤
      ╰─────╯     ╰──────╯     └──────┘             

rr-alternatingsequence

        ╭─────╮        
     ╭──│ foo │──╮     
     │  ╰─────╯  │     
    ╭╰────╮ ╭────╯╮    
├┼──┤      ╳      ├──┼┤
    ╰╭────╯ ╰────╮╯    
     │  ╭─────╮  │     
     ╰──│ bar │──╯     
        ╰─────╯        

rr-choice

       ╭───╮       
    ╭──│ 1 │──╮    
    │  ╰───╯  │    
    │         │    
    │  ╭───╮  │    
├┼──┼──│ 2 │──┼──┼┤
    │  ╰───╯  │    
    │         │    
    │  ╭───╮  │    
    ╰──│ 3 │──╯    
       ╰───╯       

rr-group

                  ╭┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄╮                  
      ╭─────╮     ┆    ┌──────────┐    ┆     ╭─────╮      
├┼────│ foo │─────┼─╮──│ option 1 │──╭─┼─────│ bar │────┼┤
      ╰─────╯     ┆ │  └──────────┘  │ ┆     ╰─────╯      
                  ┆ │                │ ┆                  
                  ┆ │   ┌────────┐   │ ┆                  
                  ┆ ╰───│ or two │───╯ ┆                  
                  ┆     └────────┘     ┆                  
                  ╰┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄╯                  

rr-horizontalchoice

    ╭──────────────╮──────────────╮                  
    │    ╭───╮     │    ╭───╮     │    ╭───╮         
    │ ╭──│ 0 │──╮  │ ╭──│ 5 │──╮  │ ╭──│ a │──╮      
    │ │  ╰───╯  │  │ │  ╰───╯  │  │ │  ╰───╯  │      
    │ │         │  │ │         │  │ │         │      
    │ │  ╭───╮  │  │ │  ╭───╮  │  │ │  ╭───╮  │      
    │ ╭──│ 1 │──╮  │ ╭──│ 6 │──╮  │ ╭──│ b │──╮      
    │ │  ╰───╯  │  │ │  ╰───╯  │  │ │  ╰───╯  │      
    │ │         │  │ │         │  │ │         │      
    │ │  ╭───╮  │  │ │  ╭───╮  │  │ │  ╭───╮  │      
├┼──╯─┼──│ 2 │──┼─╮╰─┼──│ 7 │──┼─╮╰─┼──│ c │──┼─╭──┼┤
      │  ╰───╯  │ │  │  ╰───╯  │ │  │  ╰───╯  │ │    
      │         │ │  │         │ │  │         │ │    
      │  ╭───╮  │ │  │  ╭───╮  │ │  │  ╭───╮  │ │    
      ╰──│ 3 │──╯ │  ╰──│ 8 │──╯ │  ╰──│ d │──╯ │    
      │  ╰───╯  │ │  │  ╰───╯  │ │  │  ╰───╯  │ │    
      │         │ │  │         │ │  │         │ │    
      │  ╭───╮  │ │  │  ╭───╮  │ │  │  ╭───╮  │ │    
      ╰──│ 4 │──╯ │  ╰──│ 9 │──╯ │  ╰──│ e │──╯ │    
         ╰───╯    │     ╰───╯    │     ╰───╯    │    
                  ╰──────────────╰──────────────╯    

rr-multchoice

                 ╭───╮               
              ╭──│ 1 │──╮            
              │  ╰───╯  │            
              │         │            
      ┌─────┐ │  ╭───╮  │ ┌───┐      
├┼────│ all │─┼──│ 2 │──┼─│ ↺ │────┼┤
      └─────┘ │  ╰───╯  │ └───┘      
              │         │            
              │  ╭───╮  │            
              ╰──│ 3 │──╯            
                 ╰───╯               

rr-oneormore

        ╭─────╮        
├┼───╭──│ foo │──╮───┼┤
     │  ╰─────╯  │     
     │  ╭─────╮  │     
     ╰──│ bar │──╯     
        ╰─────╯        

rr-optional

    ╭───────────╮                  
    │           │                  
    │  ╭─────╮  │                  
├┼──╯──│ foo │──╰─╮───────────╭──┼┤
       ╰─────╯    │           │    
                  │  ╭─────╮  │    
                  ╰──│ bar │──╯    
                     ╰─────╯       

rr-optionalsequence

    ╭───────────╮─────────────╮              
    │  ╭───╮    │  ╭───╮      │  ╭───╮       
├┼──╯──│ 1 │──╮─╰──│ 2 │──╭─╮─╰──│ 3 │──╭──┼┤
       ╰───╯  │    ╰───╯  │ │    ╰───╯  │    
              ╰───────────╯ ╰───────────╯    

rr-sequence

        ╭───╮     ╭───╮     ╭───╮       
├┼──────│ 1 │─────│ 2 │─────│ 3 │─────┼┤
        ╰───╯     ╰───╯     ╰───╯       

rr-stack

        ╭───╮        
├┼──────│ 1 │──┐     
        ╰───╯  │     
     ┌─────────┘     
     │  ╭───╮        
     └──│ 2 │──┐     
        ╰───╯  │     
     ┌─────────┘     
     │  ╭───╮        
     └──│ 3 │──────┼┤
        ╰───╯        

rr-title

        ╭──────────╮                                      
├┼──────│ Generate │──┐                                   
        ╰──────────╯  │                                   
     ┌────────────────┘                                   
     │    ╭──────╮           ┌───────────────────┐        
     └────│ some │────────╭──│ railroad diagrams │──╮───┼┤
          ╰──────╯        │  └───────────────────┘  │     
                          ╰─and more────────────────╯     

rr-zeroormore-1

    ╭───────────────╮    
    │               │    
    │    ╭─────╮    │    
├┼──╯─╭──│ foo │──╮─╰──┼┤
      │  ╰─────╯  │      
      ╰─bar───────╯      

rr-zeroormore-2

    ╭───────────────╮                      
    │               │                      
    │    ╭─────╮    │                      
├┼──╯─╭──│ foo │──╮─╰─╮───────────────╭──┼┤
      │  ╰─────╯  │   │               │    
      ╰─bar───────╯   │    ╭─────╮    │    
                      ╰─╭──│ foo │──╮─╯    
                        │  ╰─────╯  │      
                        ╰─bar───────╯      

complicated-horizontalchoice-1

    ╭──────────────╮──────────────╮──────────────╮──────────────╮                                                                          
    │              │    ╭───╮     │              │              │                                                                          
    │              │ ╭──│ 1 │──╮  │              │              │                                                                          
    │              │ │  ╰───╯  │  │              │              │                                                                          
    │              │ │         │  │              │              │                                                                          
    │              │ │  ╭───╮  │  │              │    ╭───╮     │                                                                          
    │              │ ╭──│ 2 │──╮  │              │ ╭──│ 1 │──╮  │                                                                          
    │              │ │  ╰───╯  │  │              │ │  ╰───╯  │  │                                                                          
    │              │ │         │  │              │ │         │  │                                                                          
    │              │ │  ╭───╮  │  │    ╭───╮     │ │  ╭───╮  │  │                                                                          
    │              │ ╭──│ 3 │──╮  │ ╭──│ 1 │──╮  │ ╭──│ 2 │──╮  │                                                                          
    │              │ │  ╰───╯  │  │ │  ╰───╯  │  │ │  ╰───╯  │  │                                                                          
    │              │ │         │  │ │         │  │ │         │  │                                                                          
    │              │ │  ╭───╮  │  │ │  ╭───╮  │  │ │  ╭───╮  │  │    ╭───╮                                                                 
    │              │ ╭──│ 4 │──╮  │ ╭──│ 2 │──╮  │ ╭──│ 3 │──╮  │ ╭──│ 1 │──╮                                                              
    │              │ │  ╰───╯  │  │ │  ╰───╯  │  │ │  ╰───╯  │  │ │  ╰───╯  │                                                              
    │              │ │         │  │ │         │  │ │         │  │ │         │   ╭──────────╮──────────╮──────────╮──────────╮              
    │    ╭───╮     │ │  ╭───╮  │  │ │  ╭───╮  │  │ │  ╭───╮  │  │ │  ╭───╮  │   │  ╭───╮   │  ╭───╮   │  ╭───╮   │  ╭───╮   │  ╭───╮       
├┼──╯─╮──│ 1 │──╭─╮╰─╯──│ 5 │──╰─╮╰─┼──│ 3 │──┼─╮╰─┼──│ 4 │──┼─╮╰─┼──│ 2 │──┼─╭─╯──│ 1 │──╮╰──│ 2 │──╮╰──│ 3 │──╮╰──│ 4 │──╮╰──│ 5 │──╭──┼┤
      │  ╰───╯  │ │     ╰───╯    │  │  ╰───╯  │ │  │  ╰───╯  │ │  │  ╰───╯  │ │    ╰───╯  │   ╰───╯  │   ╰───╯  │   ╰───╯  │   ╰───╯  │    
      │         │ │              │  │         │ │  │         │ │  │         │ │           ╰──────────╰──────────╰──────────╰──────────╯    
      │  ╭───╮  │ │              │  │  ╭───╮  │ │  │  ╭───╮  │ │  │  ╭───╮  │ │                                                            
      ╰──│ 2 │──╯ │              │  ╰──│ 4 │──╯ │  ╰──│ 5 │──╯ │  ╰──│ 3 │──╯ │                                                            
      │  ╰───╯  │ │              │  │  ╰───╯  │ │     ╰───╯    │  │  ╰───╯  │ │                                                            
      │         │ │              │  │         │ │              │  │         │ │                                                            
      │  ╭───╮  │ │              │  │  ╭───╮  │ │              │  │  ╭───╮  │ │                                                            
      ╰──│ 3 │──╯ │              │  ╰──│ 5 │──╯ │              │  ╰──│ 4 │──╯ │                                                            
      │  ╰───╯  │ │              │     ╰───╯    │              │  │  ╰───╯  │ │                                                            
      │         │ │              │              │              │  │         │ │                                                            
      │  ╭───╮  │ │              │              │              │  │  ╭───╮  │ │                                                            
      ╰──│ 4 │──╯ │              │              │              │  ╰──│ 5 │──╯ │                                                            
      │  ╰───╯  │ │              │              │              │     ╰───╯    │                                                            
      │         │ ╰──────────────╰──────────────╰──────────────╰──────────────╯                                                            
      │  ╭───╮  │                                                                                                                          
      ╰──│ 5 │──╯                                                                                                                          
         ╰───╯                                                                                                                             

complicated-horizontalchoice-2

                                                 
                                   ╭───╮         
                                ╭──│ 1 │──╮      
                                │  ╰───╯  │      
                                │         │      
                                │  ╭───╮  │      
                                ╭──│ 2 │──╮      
                                │  ╰───╯  │      
                                │         │      
                                │  ╭───╮  │      
                                ╭──│ 3 │──╮      
                                │  ╰───╯  │      
    ╭──────────────╮──────────╮ │         │      
    │    ╭───╮     │  ╭───╮   │ │  ╭───╮  │      
├┼──╯─╮──│ 1 │──╭─╮╰──│ 4 │──╮╰─╯──│ 4 │──╰─╭──┼┤
      │  ╰───╯  │ │   ╰───╯  │     ╰───╯    │    
      │         │ ╰──────────╰──────────────╯    
      │  ╭───╮  │                                
      ╰──│ 2 │──╯                                
      │  ╰───╯  │                                
      │         │                                
      │  ╭───╮  │                                
      ╰──│ 3 │──╯                                
      │  ╰───╯  │                                
      │         │                                
      │  ╭───╮  │                                
      ╰──│ 4 │──╯                                
         ╰───╯                                   

complicated-horizontalchoice-3

                                                     
                                       ╭───╮         
                                    ╭──│ 1 │──╮      
                                    │  ╰───╯  │      
                                    │         │      
                                    │  ╭───╮  │      
                                    ╭──│ 2 │──╮      
                                    │  ╰───╯  │      
                                    │         │      
                                    │  ╭───╮  │      
                                    ╭──│ 3 │──╮      
                                    │  ╰───╯  │      
    ╭──────────────╮──────────────╮ │         │      
    │    ╭───╮     │    ╭───╮     │ │  ╭───╮  │      
├┼──╯─╮──│ 1 │──╭─╮╰────│ 1 │──┐  ╰─╯──│ 4 │──╰─╭──┼┤
      │  ╰───╯  │ │     ╰───╯  │       ╰───╯    │    
      │         │ │  ┌─────────┘                │    
      │  ╭───╮  │ │  │  ╭───╮                   │    
      ╰──│ 2 │──╯ │  └──│ 2 │──┐                │    
      │  ╰───╯  │ │     ╰───╯  │                │    
      │         │ │  ┌─────────┘                │    
      │  ╭───╮  │ │  │  ╭───╮                   │    
      ╰──│ 3 │──╯ │  └──│ 3 │────╮              │    
      │  ╰───╯  │ │     ╰───╯    │              │    
      │         │ ╰──────────────╰──────────────╯    
      │  ╭───╮  │                                    
      ╰──│ 4 │──╯                                    
         ╰───╯                                       

complicated-horizontalchoice-4

    ╭──────────────╮──────────────╮                  
    │              │    ╭───╮     │                  
    │              │ ╭──│ 1 │──╮  │                  
    │              │ │  ╰───╯  │  │                  
    │              │ │         │  │                  
    │              │ │  ╭───╮  │  │                  
    │              │ ╭──│ 2 │──╮  │                  
    │              │ │  ╰───╯  │  │                  
    │              │ │         │  │                  
    │              │ │  ╭───╮  │  │                  
    │              │ ╭──│ 3 │──╮  │                  
    │              │ │  ╰───╯  │  │                  
    │              │ │         │  │                  
    │    ╭───╮     │ │  ╭───╮  │  │    ╭───╮         
├┼──╯─╮──│ 1 │──╭─╮╰─╯──│ 4 │──╰─╮╰────│ 1 │──┐ ╭──┼┤
      │  ╰───╯  │ │     ╰───╯    │     ╰───╯  │ │    
      │         │ │              │  ┌─────────┘ │    
      │  ╭───╮  │ │              │  │  ╭───╮    │    
      ╰──│ 2 │──╯ │              │  └──│ 2 │──┐ │    
      │  ╰───╯  │ │              │     ╰───╯  │ │    
      │         │ │              │  ┌─────────┘ │    
      │  ╭───╮  │ │              │  │  ╭───╮    │    
      ╰──│ 3 │──╯ │              │  └──│ 3 │────╯    
      │  ╰───╯  │ │              │     ╰───╯    │    
      │         │ ╰──────────────╰──────────────╯    
      │  ╭───╮  │                                    
      ╰──│ 4 │──╯                                    
         ╰───╯                                       

complicated-horizontalchoice-5

                                                     
                                       ╭───╮         
                                    ╭──│ 1 │──╮      
                                    │  ╰───╯  │      
                                    │         │      
                                    │  ╭───╮  │      
                                    ╭──│ 2 │──╮      
                                    │  ╰───╯  │      
                                    │         │      
                                    │  ╭───╮  │      
                                    ╭──│ 3 │──╮      
                                    │  ╰───╯  │      
    ╭──────────────╮──────────────╮ │         │      
    │    ╭───╮     │    ╭───╮     │ │  ╭───╮  │      
├┼──╯────│ 1 │──┐  ╰─╮──│ 1 │──╭─╮╰─╯──│ 4 │──╰─╭──┼┤
         ╰───╯  │    │  ╰───╯  │ │     ╰───╯    │    
      ┌─────────┘    │         │ │              │    
      │  ╭───╮       │  ╭───╮  │ │              │    
      └──│ 2 │──┐    ╰──│ 2 │──╯ │              │    
         ╰───╯  │    │  ╰───╯  │ │              │    
      ┌─────────┘    │         │ │              │    
      │  ╭───╮       │  ╭───╮  │ │              │    
      └──│ 3 │────╮  ╰──│ 3 │──╯ │              │    
         ╰───╯    │  │  ╰───╯  │ │              │    
                  │  │         │ │              │    
                  │  │  ╭───╮  │ │              │    
                  │  ╰──│ 4 │──╯ │              │    
                  │     ╰───╯    │              │    
                  ╰──────────────╰──────────────╯    

single-stack

        ╭───╮        
├┼──────│ 1 │──────┼┤
        ╰───╯        

complicated-optionalsequence-1

    ╭───────────╮─────────────────╮──────────────────╮               
    │           │    ╭───╮        │                  │               
    │           │ ╭──│ 2 │──╮     │                  │               
    │           │ │  ╰───╯  │     │                  │               
    │           │ │         │     │                  │               
    │           │ │  ╭───╮  │     │                  │               
    │           │ ╭──│ 3 │──╮     │                  │               
    │           │ │  ╰───╯  │     │                  │               
    │           │ │         │     │                  │               
    │  ╭───╮    │ │  ╭───╮  │     │    ╭───╮         │               
├┼──╯──│ 1 │──╮─╰─┼──│ 4 │──┼─╭─╮─╰────│ 6 │───┐     │               
       ╰───╯  │   │  ╰───╯  │ │ │      ╰───╯   │     │               
              │   │         │ │ │   ┌──────────┘     │               
              │   │  ╭───╮  │ │ │   │  ╭───╮         │               
              │   ╰──│ 5 │──╯ │ │   └──│ 7 │───┐     │               
              │      ╰───╯    │ │      ╰───╯   │     │               
              ╰───────────────╯ │   ┌──────────┘     │               
                                │   │  ╭───╮         │               
                                │   └──│ 8 │───┐     │               
                                │      ╰───╯   │     │               
                                │   ┌──────────┘     │               
                                │   │  ╭───╮         │               
                                │   └──│ 9 │───┐     │               
                                │      ╰───╯   │     │               
                                │   ┌──────────┘     │               
                                │   │  ╭────╮        │  ╭────╮       
                                │   └──│ 10 │────╭─╮─╰──│ 11 │──╭──┼┤
                                │      ╰────╯    │ │    ╰────╯  │    
                                ╰────────────────╯ ╰────────────╯