#! /usr/bin/gawk -f 
# Last edited on 2004-02-07 05:43:59 by stolfi

BEGIN {
  abort = -1;
  chnum = 0;
}

(abort >= 0) { exit abort; }

/^[\#]/ { next; }

/^ *$/ { print; next; }

/THE FOLLOWING TEXT/ { 
  next;
}

/^[@]/ {
  lin = $0;
  folio = $1; lin = substr(lin, i+length(folio)+1); 
  gsub(/^[@]*/, "", folio);
  lin = fix_acip_bugs(lin);
  printf "\n# Folio %s\n\n", folio;
  printf "  %s\n", lin;
  next;
}

// { 
  lin = $0;
  lin = fix_acip_bugs(lin);
  printf "  %s\n", lin;
  next;
}

function fix_acip_bugs(lin)
{
  gsub(/^[\011 ]+/, "", lin);
  gsub(/[\011 ]+$/, "", lin);
  gsub(/[\011 ][\011 ]+/, " ", lin);
  lin = (" " lin " ");
  # replace bogus "7" letter by caret: 
  lin = gensub(/[ ][7]([A-Za-z\047])/, " ^\\1", "g", lin);
  gsub(/^[1 ]+/, "", lin);
  gsub(/[ ]+$/, "", lin);
  # replace triple scroll mark "#" by "~~~": 
  lin = gensub(/[\#]/, "~~~", "g", lin);
  # replace double scroll mark "*" by "~~": 
  lin = gensub(/[*]/, "~~", "g", lin);
  # replace double comma ",," by paragraph break: 
  lin = gensub(/ *[,][,] */, "\n  =\n\n  ", "g", lin);
  return lin;
}

function data_error(msg){
  printf "%d: error: %s\n", FNR, msg > "/dev/stderr";
  abort = 1;
  exit abort;
}