#!/bin/csh -f
#  This should be recoded for /bin/sh
set pname="`basename $0`"
#  You may need to edit this for names and paths.
#
#  IMPORTANT: The sgmlspl script "xmlgart.pl" requires the enclosed
#  version of SGMLS.pm (the one file) that has been supplemented to provide
#  the method  $element->defempty .
#
# By gross default assume that this is run from a sub-sub-directory of the
#   unpacked tree root.
# Or one may set the environmental GELLMU_Dir
set emacs="emacs"
set nsgmls="onsgmls"
set sgmlspl="sgmlspl"
set latex="latex"
set pdflatex="pdflatex"

if !($?GELLMU_AdminUrl) setenv GELLMU_AdminUrl "http://www.dev.null.org/~webmaster/"
if !($?GELLMU_CommentUrl) setenv GELLMU_CommentUrl "mailto:webadmin@mail.dev.null.org"
if !($?GELLMU_MadeUrl) setenv GELLMU_MadeUrl "mailto:user@mail.dev.null.org"

set suffix=".glm"  # for GELLMU source -- 
                   # Changing this will require other changes
                   # Source file must either have this suffix or else no '.' 
setenv SP_CHARSET_FIXED "YES"
setenv SP_ENCODING "ISO-8859-1"

# Guess the value of the gellmu root directory
set dname=`dirname $0`
if($?GELLMU_Dir) then
  set gdir="$GELLMU_Dir"
else if($0 =~ *gellmu/bin/*${pname}) then
  set gdir=`echo "$dname" | sed -e 's/\/bin.*//'`
else if((-d /usr/local/xml/gellmu) && (-x /usr/local/xml/gellmu)) then
  set gdir=/usr/local/xml/gellmu
else if((-d /usr/local/gellmu) && (-x /usr/local/gellmu)) then
  set gdir="/usr/local/gellmu"
else if((-d /usr/local/lib/gellmu) && (-x /usr/local/lib/gellmu)) then
  set gdir="/usr/local/lib/gellmu"
else if((-d /usr/local/share/xml/gellmu) && (-x /usr/local/share/xml/gellmu))\
  then
  set gdir="/usr/local/share/xml/gellmu"
else if((-d /usr/local/share/gellmu) && (-x /usr/local/share/gellmu)) then
  set gdir="/usr/local/share/gellmu"
else if((-d /usr/share/local/xml/gellmu) && (-x /usr/share/local/xml/gellmu))\
  then
  set gdir="/usr/share/local/xml/gellmu"
else if( (-d /usr/share/local/gellmu) && (-x /usr/share/local/gellmu)) then
  set gdir="/usr/share/local/gellmu"
else
  set gdir=".."
endif
set utfEight=0
if ($#argv == 0) then
  echo "Usage:  $pname  <stem-name>"
  echo "  to build a GELLMU source file named  <stem-name>$suffix"
  exit
endif
# Check for command line switches -d or -u
while ($#argv > 1)
  if ("$1" =~ -*) then
    switch ("$1")
      case -d:
        shift
        set gdir="$1"
        shift
        breaksw
      case -u:
        shift
        set utfEight=1
        breaksw
      default:
        echo "${pname} -- Unknown command line switch: $1"
        exit 1
        breaksw
    endsw
  else
     break
  endif
end
echo "Using as GELLMU directory: $gdir"
if !(-f "$gdir/gellmu.el") then
  echo "${pname}: Cannot find root of GELLMU tree."
  echo "  ($gdir/gellmu.el  is not available)."
  echo "  Either edit this script or set GELLMU_Dir in the environment."
  exit
endif
setenv PERL5LIB "$gdir/perllib"
set xgdir="$gdir/xml"
set scatname="catalog"
set xcatname="xml/catalog"
set elib="$gdir"

if !("$pname" =~ *2*) then
# Quietest location for GELLMU LaTeX package is in a texmf tree such as
#    $HOME/texmf/tex/latex/misc   OR    $TEXMFLOCAL/tex/latex/misc
which kpsewhich >& /dev/null
if ($status == 0) then
  set kpsewhich="kpsewhich"
else
  set kpsewhich=""
  echo 'The TeX installation appears to lack "kpsewhich"'
endif
if ("$kpsewhich" == "") then
  set Gsty=""
else
  set Gsty="`${kpsewhich} gellmu.sty`"
endif
if ("$Gsty" == "") then
  echo "*** Consider installing gellmu.sty in your local texmf tree"
  setenv GELLMU_LaTeXStyle "${gdir}/style/gellmu"
else
  setenv GELLMU_HaveStyle 1
endif
endif

which validhtml >& /dev/null
if ($status == 0) then
  set vhtml="validhtml"
else if (-x "/usr/local/xml/bin/validhtml") then
  set vhtml="/usr/local/xml/bin/validhtml"
else if (-x "/usr/local/bin/validhtml") then
  set vhtml="/usr/local/bin/validhtml"
else
  set vhtml=""
endif

which xmlwf >& /dev/null
if ($status == 0) then
  set xmlwf="xmlwf"
else
  set xmlwf=""
endif
#
# Edits should not be required below here unless you want to
# add new things
#

if (!((-d "$gdir/xml") && (-x "$gdir/xml"))) then
  echo "${pname}: No subdirectory 'xml' in $gdir"
  exit 1
endif
set tname="/tmp/${pname}$$"
if (($#argv == 0) || ($#argv > 2)) then
  echo "Usage:  $pname  <stem-name>"
  echo "  to build a GELLMU source file named  <stem-name>$suffix"
  exit
endif

# set fncall="gellmu-trans"
switch ($pname)
case lg2h:
  set fncall="gellmu-html"
  breaksw
case g2h:
  set fncall="gellmu-html"
  breaksw
case lg2s:
  set fncall="gellmu-trans"
  breaksw
case g2s:
  set fncall="gellmu-trans"
  breaksw
case lg2x:
  set fncall="gellmu-xml"
  breaksw
case g2x:
  set fncall="gellmu-xml"
  breaksw
case umkg:
  set utfEight=1
  setenv GELLMU_LaTeXUTF8 "1"
  breaksw
default:
  set fncall="gellmu-trans"
  breaksw
endsw
if ($utfEight == 1) then
  set fncall="gellmu-trans"
  setenv GELLMU_UTF8 "1"
  set scatname="ucatalog"
  set xcatname="xml/ocatalog"
  setenv SP_ENCODING "UTF-8"
  echo "*** UTF-8 support enabled ***"
endif
set nsgmlsc="$nsgmls -l -oempty -c ${gdir}/${scatname}"
set xnsgmlsc="$nsgmls -l -oempty -wxml -c ${gdir}/${xcatname}"
set isok=1

set filearg="$1"
if ("$filearg" =~ *${suffix}) then
  set stem=`echo "$filearg" | sed -e "s/${suffix}//"`
else
  set stem="$filearg"
endif
set fname="${stem}$suffix"
if !((-r "$fname") && (-f "$fname")) then
  echo "${pname}: No $fname"
  if !((-r "${stem}") && (-f "${stem}")) then
    echo "${pname}: Cannot locate either ${stem} or $fname"
    exit
  else
    echo "${pname}: Found ${stem}"
    set fname="${stem}"
    set stem=`echo "$fname" | sed -e 's/\.glm$//'`
    echo "Using stem name: ${stem}"
  endif
endif

if($#argv == 2) then
  set fncall="$2"
else
  set firstline="`head -1 ${fname}`"
  echo "$firstline" | grep -q '^%\!'
  if($status == 0) then
    set fncall=`echo "$firstline" | sed -e 's/^..//' -e 's/[ %].*$//'`
  endif
endif
echo "${pname}: Using gellmu.el function $fncall"
if !("$fncall" =~ gellmu-*) then
  set fncall="gellmu-${fncall}"
endif

if !(-f "$elib/gellmu.elc") then
  $emacs -batch --no-site-file -f batch-byte-compile "$elib/gellmu.el"
endif

if($isok == 1) echo "Calling syntactic translator"
if ($utfEight == 1) then
 $emacs -batch --no-site-file -l "$elib/gellmu.elc" \
  --eval '(progn (setq coding-system-for-read (quote utf-8)) \
  (setq coding-system-for-write (quote utf-8)))' -f "$fncall" "$fname"
else
 $emacs -batch --no-site-file -l "$elib/gellmu.elc" \
         -f "$fncall" "$fname"
endif
if !($status == 0) then
  echo "${pname}:  GELLMU Syntactic Translator did not finish."
  exit 1
endif
switch ($pname)
case lg2h:
  chmod 644 "${stem}.html"
  echo "Validating HTML . . ."
  $vhtml "${stem}.html"
  exit
  breaksw
case g2h:
  chmod 644 "${stem}.html"
  echo "Validating HTML . . ."
  $vhtml "${stem}.html"
  exit
  breaksw
case lg2s:
  chmod 644 "${stem}.sgml"
  exit
  breaksw
case g2s:
  chmod 644 "${stem}.sgml"
  exit
  breaksw
case lg2x:
  chmod 644 "${stem}.xml"
  if("$xmlwf" != "") then
    echo "XML conformance check"
    xmlwf "${stem}.xml"
  endif
  exit
  breaksw
case g2x:
  chmod 644 "${stem}.xml"
  if("$xmlwf" != "") then
    echo "XML conformance check"
    xmlwf "${stem}.xml"
  endif
  exit
  breaksw
default:
  chmod 644 "${stem}.sgml"
  breaksw
endsw
chmod 644 "$fname"
echo "Making XML from ${stem}.sgml"
rm -f "${stem}.xml~"
if(-r "${stem}.xml") mv "${stem}.xml" "${stem}.xml~"
$nsgmlsc "${stem}.sgml" | perl ${gdir}/perllib/sgmlspl.pl "${gdir}/xmlgart.pl" > "${stem}.xml"
if ($status != 0) then
  echo "${pname}: Perl script sgmlspl with ${gdir}/xmlgart.pl may have failed"
  echo "    on ${stem}.sgml -- possibly a parsing error.  Trying to continue."
endif
chmod 644 "${stem}.xml" "${stem}.xcn" "${stem}.xet" "${stem}.xlb"
echo "Validating parse of XML"
$xnsgmlsc "${stem}.xml" > "$tname"
if ($status != 0) then
  echo "${pname}: validating parse of ${stem}.xml failed"
  exit 2
endif
echo "Making HTML"
rm -f "${stem}.html~"
if(-r "${stem}.html") mv "${stem}.html" "${stem}.html~"
perl ${gdir}/perllib/sgmlspl.pl < "$tname" ${gdir}/htmlgart.pl > "${stem}.html"
chmod 644 "${stem}.html"
if !("$vhtml" == "") then
  echo "Validating HTML"
  $vhtml "${stem}.html"
else
  echo "Note: Not set up for validation of HTML."
endif
if !($status == 0) set isok=0
echo "Making LaTeX"
rm -f "${stem}.ltx~"
if(-r "${stem}.ltx") mv "${stem}.ltx" "${stem}.ltx~"
perl ${gdir}/perllib/sgmlspl.pl < "$tname" ${gdir}/ltxgart.pl > "${stem}.ltx"
chmod 644 "${stem}.ltx"
if ($status == 0) rm "$tname"
$latex "${stem}.ltx"
if !($status == 0) then
  set isok=0
  echo "${pname}: latex failed on ${stem}.ltx"
  exit 2
endif
grep -q ' Rerun to get ' "${stem}.log"

if ($status == 0) then
  $latex "${stem}.ltx"
  if !($status == 0) then
    set isok=0
    echo "${pname}: latex re-run failed on ${stem}.ltx"
    exit 3
  endif
  grep -q ' Rerun to get ' "${stem}.log"
  if ($status == 0) then
    $latex "${stem}.ltx"
    if !($status == 0) then
      set isok=0
      echo "${pname}: second latex re-run failed on ${stem}.ltx."
      exit 4
    endif
    grep -q ' Rerun to get ' "${stem}.log"
    if ($status == 0) then
      echo "${pname}: Unresolved references after 3 runs of latex"
      set isok=0
    endif
  endif
endif

chmod 644 "${stem}.dvi"
if !($status == 0) then
  set isok=0
  echo "${pname}: Could not set permissions on ${stem}.dvi"
endif
$pdflatex "${stem}.ltx"
if !($status == 0) then
  set isok=0
  echo "${pname}: pdflatex failed on ${stem}.ltx"
  exit 5
endif
chmod 644 "${stem}.pdf"
if !($status == 0) then
  set isok=0
  echo "${pname}: Could not set permissions on ${stem}.pdf"
endif
if($isok == 1) echo "${pname} done"
