generators.tdTransducer("rotate"):
( { a:0, b:0, c:1, h:2, v:2, S:0 },
  { a:0, b:0, c:1, h:2, v:2, "...":0 },
  { abv, cp, rot },
  { abv[c[x1]] -> c[abv[x1]],
    abv[c[x1]] -> c[rot[x1]],
    abv[h[x1,x2]] -> h[abv[x1],abv[x2]],
    abv[h[x1,x2]] -> h[cp[x1],abv[x2]],
    abv[h[x1,x2]] -> h[abv[x1],cp[x2]],
    abv[v[x1,x2]] -> v[abv[x1],abv[x2]],
    abv[v[x1,x2]] -> v[cp[x1],abv[x2]],
    abv[v[x1,x2]] -> v[abv[x1],cp[x2]],
    
    cp[a] -> a,
    cp[b] -> b,
    cp[h[x1,x2]] -> h[cp[x1],cp[x2]],
    cp[v[x1,x2]] -> v[cp[x1],cp[x2]],
    
    rot[a] -> a,
    rot[b] -> b,
    rot[h[x1,x2]] -> v[rot[x1],rot[x2]],
    rot[v[x1,x2]] -> h[rot[x2],rot[x1]],
    
    % extension for convenience
    cp[S]  -> "...",
    rot[S] -> "..."
  },
  abv )
