#! /usr/bin/gawk -f
# Last edited on 2003-06-17 22:54:05 by stolfi

BEGIN {
  abort = -1;
  usage = ( ARGV[0] " [-v title='TITLE'] INFILE.bib... > OUTFILE.html" );
  
  # Trivially turns a .bib file into an .html file, 
  # in <pre> ... </pre> format, with a <a name="TAG"> anchor
  # for each entry, where TAG is the entry's bibtex tag.

  if (title == "") { title = "BibTeX entries"; }
  
  printf "<html>\n" ;
  printf "<head>\n";
  printf "<title>%s</title>\n", title;
  printf "</head>\n";
  printf "<body bgcolor=\"#ffddbb\">\n";
  printf "<h1><tt>%s</tt></h1>\n", title;
  
  curfile = "";
}

(abort >= 0) { exit abort; }

(curfile != FILENAME) {
  if (curfile != "") { printf "</pre></tt>\n"; printf "\n"; }
  printf "<h2><tt>%s</tt></h2>\n", FILENAME; 
  printf "<tt><pre>\n"; 
  curfile = FILENAME;
}

/./ {
  gsub(/[&]/, "&amp;", $0);
  gsub(/[<]/, "&lt;", $0);
  gsub(/[>]/, "&gt;", $0);
}  

/^[ \011]*[%]/ {
  printf "<font color=\"#115500\">%s</font>\n", $0;
  next;
}

/^[ \011]*[@][a-zA-Z0-9]*[ \011]*[{][ \011]*[-a-zA-Z0-9]+[ \011]*[,][ \011]*$/ {
  gsub(/[ \011,@]*/, "", $0);
  gsub(/[{]/, " ", $0);
  if (NF != 2) { error(("prog error")); }
  kind = $1; tag = $2;
  printf "<a name=\"%s\">\n", tag;
  printf "@%s{<font color=\"#dd1100\">%s</font>,\n", kind, tag;
  next
}

/^[ \011]*[@]/ {
  error(("bad tag format"));
}

// {
  print; 
  next;
}

END {
  if (abort >= 0) { exit abort; }
  if (curfile != "") { printf "</pre></tt>\n"; }
  printf "</body>\n";
  printf "</html>\n";
}

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