#! /usr/bin/gawk -f
# Last edited on 1999-07-21 06:33:37 by stolfi

# Converts a folio permutation string to a nested parenthesis sequence.

BEGIN {
  abort = -1;
  up = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  dn = "abcdefghijklmnopqrstuvwxyz";
  split("", flip); # "flip[c]" flips the case of letter "c"
  for (i=1; i<=26; i++)
    { a = substr(up,i,1); b = substr(dn,i,1);
      flip[a] = b; flip[b] = a;
    }
}  

(abort >= 0) { exit abort; }

/^ *$/{print; next;}

/^[#]/{print; next;}

/./ {
  print;
  for(k=1; k<=NF; k++)
    { if (k > 1) { printf " "; }
      printf "%s", paren_from_perm($(k));
    }
  printf "\n";
}

function paren_from_perm(p,  paren,seen,n,i,pi,res)
{
  split("", paren);  # "paren[c]" is the parenthesis associated to "c"
  split("", seen);
  res = "";
  n = length(p);
  for (i=1; i<=n; i++)
    { pi = substr(p,i,1);
      if (pi in seen) { error("not permutation"); }
      if (! (pi in flip)) { error("bad letter"); }
      if (! (pi in paren))
        { paren[pi] = "("; 
          paren[flip[pi]] = ")";
        } 
      res = (res paren[pi]);
      seen[pi] = 1;
    }
  return res;
}
  
function error(msg)
{ 
  printf "line %d: %s\n", NR, msg > "/dev/stderr";
  abort = 1;
  exit 1;
}