generators.ET0LTreeGrammar("rectangular plaits"):
( { L, TLR, TL, TR, UD, U, U2, EU, ED  },
  { inner1:0, inner2:0, edge:0, corner:0, init:4, left:2, right:2, left-right:3, up:2, down:2,
    up-down:3, rot:1, mir:1, empty:0 },
  {
    { % horizontal extension
      %
      L -> left[UD, L],
      TLR -> left-right[U2, TL, TR],
      TL -> left[U2, TL],
      TR -> right[U2, TR]
    },
    { % vertical extension
      %
      L -> up-down[edge, EU, ED],
      EU -> up[edge, EU],
      ED -> down[edge, ED],
      TL -> up[inner2, TL],
      TR -> up[inner2, TR],
      UD -> up-down[inner1, U, rot[rot[U]]],
      U -> up[inner1, U],
      U2 -> up[inner2, U2]
    },
    { % termination
      %
      ED -> mir[corner],
      EU -> corner,
      U -> inner1,
      U2 -> rot[edge],
      TL -> rot[mir[corner]],
      TR -> rot[corner]
    }
  },
  init[TLR, TLR, L, L],
  1+ 2+ 3
  )
