applications.collages.collageAlgebra("nonterminals with arrows"):
  {  
    angle = const(70),
    
    tile = { polygon( (0,0),
                      (1,0),
                      (1 - cos(#angle), sin(#angle)),
                      (1, 2 * sin(#angle)),
                      (0, 2 * sin(#angle)),
                      (cos(#angle), sin(#angle))
                      )},
    dark = { filledPolygon( (0,0),
                      (1,0),
                      (1 - cos(#angle), sin(#angle)),
                      (1, 2 * sin(#angle)),
                      (0, 2 * sin(#angle)),
                      (cos(#angle), sin(#angle))
                      )[0,.7,1]}
                      + #tile,
    
    light = { filledPolygon( (0,0),
                      (1,0),
                      (1 - cos(#angle), sin(#angle)),
                      (1, 2 * sin(#angle)),
                      (0, 2 * sin(#angle)),
                      (cos(#angle), sin(#angle))
                      )[1,.9,.3]}
                      + #tile,
                      
    rot = translate(-1,0) . rotate(-#angle). translate(1,0),
    C = #dark + #light transformed by rot,
                      
    t1Trans = similarity(
      (0,0) -> (0, 0),
      (1,0) -> (2 + cos(180 - 2 * #angle) - cos(#angle), sin(180 - 2 * #angle) - sin(#angle))),
    t1 = { polyline((0,0),(.8,0)), filledPolygon((.8,.075),(1,0),(.8,-.075)) } transformed by t1Trans,
                      
    t2Trans = similarity(
      (0,0) -> (0, 0),
      (1,0) -> (1 - cos(#angle), sin(#angle))),
    t2 = { polyline((0,0),(.6,0)), filledPolygon((.6,.15),(1,0),(.6,-.15)) } transformed by t2Trans,
    
    t12 = #t1 + #t2,
    
    arrowcorrection = translate (1/2,sin(#angle)),
                      
    down = translate(cos(#angle) - 1, sin(#angle) - 2 * sin(#angle)),
    down = <#C, down>,
    down2 = <#t12, down>,
    
    up = translate(1 - cos(#angle), sin(#angle)),
    up = <#C, up>,
    up2 = <#t12, up>,
    
    left = translate(cos(#angle) - (cos(180 - 2 * #angle) + 2), sin(#angle) - sin(180 - 2 * #angle)),
    left = <#C, left>,
    left2 = <#t12, left>,
    
    right = translate(2 + cos(180 - 2 * #angle) - cos(#angle), sin(180 - 2 * #angle) - sin(#angle)),
    right = <#C, right>,
    right2 = <#t12, right>,
    
    udlr = <#C, left, right, up, down >,
    udlr2 = <#t12, left, right, up, down >,
    
    ulr = <#C, left, right, up >,
    ulr2 = <#t12, left, right, up >,
    
    dlr = <#C, left, right, down >,
    dlr2 = <#t12, left, right, down>,
    
    rot180 = rotate(180),
    NTrans = translate (cos(#angle),sin(#angle)),
    outline = #tile + #tile transformed by rot,
    
    Uarrows = #t12 + #t1 transformed by rot180,
    U = #outline + #Uarrows transformed by NTrans,
    
    Darrows = #t12 transformed by rot180 + #t1,
    D = #outline + #Darrows transformed by NTrans,
    
    Larrow = #t1 transformed by rot180,
    L = #outline + #Larrow transformed by NTrans,
    
    R = #outline + #t1 transformed by NTrans
        
  }
