#!/bin/sh
#
# noroff -- run troff using tags file trick

ROFF="psroff -t"        # produce postscript on stdout
AWK=nawk

if [ $# -ne 1 ]; then
  echo "Usage: noroff file" 1>&2
  exit 1
fi
base="`basename $1 | sed '/\./s/\.[^.]*$//'`"
tagsfile="$base.nwt"
(if [ -r "$tagsfile" ]; then 
   $AWK '{
	     if      (sub(/^###TAG### /       , "")) tags[$1] = $2
	     else if (sub(/^###BEGINCHUNKS###/, "")) printf ".de CLIST\n.CLISTBEGIN\n"
	     else if (sub(/^###CHUNKBEGIN### /, "")) { name = convquote($0)
	                                               chunkuse = chunkdefn = "" }
	     else if (sub(/^###CHUNKUSE### /  , "")) chunkuse = chunkuse " " tag($0)
	     else if (sub(/^###CHUNKDEFN### / , "")) chunkdefn = chunkdefn " " tag($0)
	     else if (sub(/^###CHUNKEND###/   , ""))
	        printf ".CITEM \"%s\" \"%s\" \"%s\"\n", name, chunkdefn, chunkuse
	     else if (sub(/^###ENDCHUNKS###/  , "")) printf ".CLISTEND\n..\n"
	     else if (sub(/^###BEGININDEX###/ , "")) printf ".de ILIST\n.ILISTBEGIN\n"
	     else if (sub(/^###ENTRYBEGIN### /, "")) { name = convquote($0)
	                                               entryuse = entrydefn = "" }
	     else if (sub(/^###ENTRYUSE### /  , "")) entryuse = entryuse " " tag($0)
	     else if (sub(/^###ENTRYDEFN### / , "")) entrydefn = entrydefn " " tag($0)
	     else if (sub(/^###ENTRYEND###/   , "")) {
	         for (i = 1; i <= split(entrydefn, entryarray); i++)
	             sub(entryarray[i], "\\*[BEGINDEFN]&\\*[ENDDEFN]", entryuse)
	         printf ".IITEM \"%s\" \"%s\"\n", name, entryuse }
	     else if (sub(/^###ENDINDEX###/   , "")) printf ".ILISTEND\n..\n" 
	 }
         function convquote(s) {
	     gsub(/\[\[/, "\\*[BEGINCONVQUOTE]", s)
	     gsub(/\]\]/, "\\*[ENDCONVQUOTE]", s); return s }
	 function tag(s) { if (s in tags) return tags[s]; else return "???" }' $tagsfile
 fi
 cat $1) |
($ROFF -Tps 2>$tagsfile)
sed '/^###[A-Z][A-Z]*###/d' $tagsfile >&2
