#!/bin/sh
# Copyright 1991-1997 by Norman Ramsey.  All rights reserved.
# See file COPYRIGHT for more information.
# $Id: noweave.nw,v 1.7 2008/10/06 01:03:24 nr Exp $
LIB=|LIBDIR|
markup=$LIB/markup backend=$LIB/totex
wrapper= delay= args= markopts= noweboptions= autodefs= verbose= shortxref=
noquote="-noquote" docanchor= noindex="-noindex"
filtera= filterb= filterc= filterd= filtere= filterf= filterg=
# following supported by change in totex back end
noquote=
using_index= using_xref=
pass2setcmd="set ignore"
for i do
  pass2setcmd="$pass2setcmd '$i'"
done
arg=
while [ $# -gt 0 ]; do
  case $1 in
    -latex)      if [ "$wrapper" != "none" ]; then wrapper=latex; fi ;;
    -tex)        wrapper=tex ;;
    -html)       if [ "$wrapper" != "none" ]; then wrapper=html; fi; 
                 backend="$LIB/tohtml -localindex"
                 noquote=""; docanchor="-docanchor 10" ;;
    -latex+html) if [ "$wrapper" != "none" ]; then wrapper=latex; fi; 
                 backend="$LIB/tohtml -localindex -raw"
                 noquote=""; docanchor="-docanchor 10" ;;
    -ascii)      wrapper=none
                 backend="$LIB/toascii" ;;
    -troff)      wrapper=mm
                 backend="$LIB/toroff" ;;
    -n)          wrapper=none ;;
    -backend)    backend="$2" ; shift ;;
    -markup)     markup="$2"  ; shift ;;
    -filter)    shift                           ;;
    -x)                           using_xref=1  ;;
    -index)            noindex= ; using_index=1 ;;                 
    -indexfrom) shift; noindex= ; using_index=1 ;;
    -autodefs) newfilter="$LIB/autodefs.$2"
               if [ -r $newfilter ]; then if   [ -z "$filtera" ]; then
                                            filtera="$newfilter"
                                          elif [ -z "$filterb" ]; then
                                            filterb="$newfilter"
                                          elif [ -z "$filterc" ]; then
                                            filterc="$newfilter"
                                          elif [ -z "$filterd" ]; then
                                            filterd="$newfilter"
                                          elif [ -z "$filtere" ]; then
                                            filtere="$newfilter"
                                          elif [ -z "$filterf" ]; then
                                            filterf="$newfilter"
                                          elif [ -z "$filterg" ]; then
                                            filterg="$newfilter"
                                          else
                                            echo "$0: ran out of filters" 1>&2
                                            exit 1
                                          fi
               else echo "$0: don't know how to find definitions for '$2'" 1>&2; exit 1
               fi
               shift
               ;;
    -showautodefs) foundautodefs=
                   for i in $LIB/autodefs.*; do
                     if [ -r $i ]; then
                       echo "This `basename $0` supports -autodefs $i" | 
                                           sed "s@$LIB/autodefs\.@@" 1>&2
                       foundautodefs=$i
                     fi
                   done
                   if [ -z "$foundautodefs" ]; then
                     echo "This `basename $0` does not support -autodefs"
                   fi; exit 1 ;;
    -option) newopt="$2"; shift
             if [ "X$newopt" = "Xshortxref" ]; then shortxref="-shortxref"; fi
             if [ "X$newopt" = "Xlongxref" ];  then shortxref="-longxref";  fi
             if [ -z "$noweboptions" ] ; then noweboptions="$newopt"
             else noweboptions="$noweboptions,$newopt"
             fi ;;
    # -nodelay) delay= ;;
    -delay)   delay="-delay" ; wrapper=none ;;
    -t*) markopts="$markopts $1" ;;
    -v) echo 'RCS version name $Name:  $' 1>&2
        echo 'RCS id $Id: noweave.nw,v 1.7 2008/10/06 01:03:24 nr Exp $' 1>&2
        verbose=1 ;;
    -)  arg="$arg $1" ;;
    -*) echo "$0: Unrecognized option '$1'" 1>&2 ; echo "Usage: $0 [options] [files]" 1>&2
                                                   echo "Options recognized are:" 1>&2
                                                   echo "-latex            Emit LaTeX with headers and trailers (default)." 1>&2
                                                   echo "-tex              Emit plain TeX with headers and trailers." 1>&2
                                                   echo "-html             Emit HTML with headers and trailers." 1>&2
                                                   echo "-latex+html       Assume LaTeX in documentation, but use HTML in code." 1>&2
                                                   # echo "-ascii            Emit ASCII." 1>&2
                                                   echo "-troff            Emit troff (actually GNU groff)." 1>&2
                                                   echo " -n               Don't use any header or trailer." 1>&2
                                                   echo "-markup frontend  Parse input with frontend (e.g., numarkup)." 1>&2
                                                   echo "-x                Use the default cross-referencer (needs LaTeX or HTML)." 1>&2
                                                   echo "-index            Create index using identifiers defined in input files." 1>&2
                                                   echo "-indexfrom defs   Create index of identifers listed in file defs." 1>&2
                                                   echo "-filter cmd       Filter through 'cmd' before weaving; cmd could prettyprint" 1>&2
                                                   echo "                  or perform other functions." 1>&2
                                                   echo "-autodefs lang    Source is in language 'lang'; find definitions automatically." 1>&2
                                                   echo "-showautodefs     List languages that can be used with -autodefs" 1>&2
                                                   echo '-option opt       Add \noweboptions{opt} to header (latex only)' 1>&2
                                                   echo "-delay            Delay markup until after first documentation chunk." 1>&2
                                                   echo "-tk               Expand tab stops every k columns" 1>&2
                                                   echo "-t                Copy tabs to the output" 1>&2
                                                   echo "-v                Print pipeline and RCS info on standard error" 1>&2; exit 1 ;;
    *)  arg="$arg $1" ;;
  esac
  shift
done
if [ -n "$using_xref" -a -n "$using_index" ]; then
  echo "$0: you may not use -x with -index or -indexfrom (drop the -x)" 1>&2
  exit 1
fi
if [ -z "$wrapper" ]; then wrapper=latex; fi
eval $pass2setcmd
shift
while [ $# -gt 0 ]; do
  case $1 in
    -filter) 
        newfilter="$2" ; shift ;                  if   [ -z "$filtera" ]; then
                                                    filtera="$newfilter"
                                                  elif [ -z "$filterb" ]; then
                                                    filterb="$newfilter"
                                                  elif [ -z "$filterc" ]; then
                                                    filterc="$newfilter"
                                                  elif [ -z "$filterd" ]; then
                                                    filterd="$newfilter"
                                                  elif [ -z "$filtere" ]; then
                                                    filtere="$newfilter"
                                                  elif [ -z "$filterf" ]; then
                                                    filterf="$newfilter"
                                                  elif [ -z "$filterg" ]; then
                                                    filterg="$newfilter"
                                                  else
                                                    echo "$0: ran out of filters" 1>&2
                                                    exit 1
                                                  fi ;;
    -x) newfilter="$LIB/noidx $docanchor $delay"; if   [ -z "$filtera" ]; then
                                                    filtera="$newfilter"
                                                  elif [ -z "$filterb" ]; then
                                                    filterb="$newfilter"
                                                  elif [ -z "$filterc" ]; then
                                                    filterc="$newfilter"
                                                  elif [ -z "$filterd" ]; then
                                                    filterd="$newfilter"
                                                  elif [ -z "$filtere" ]; then
                                                    filtere="$newfilter"
                                                  elif [ -z "$filterf" ]; then
                                                    filterf="$newfilter"
                                                  elif [ -z "$filterg" ]; then
                                                    filterg="$newfilter"
                                                  else
                                                    echo "$0: ran out of filters" 1>&2
                                                    exit 1
                                                  fi ;;
    -index)  
        newfilter="$LIB/finduses $noquote" ;      if   [ -z "$filtera" ]; then
                                                    filtera="$newfilter"
                                                  elif [ -z "$filterb" ]; then
                                                    filterb="$newfilter"
                                                  elif [ -z "$filterc" ]; then
                                                    filterc="$newfilter"
                                                  elif [ -z "$filterd" ]; then
                                                    filterd="$newfilter"
                                                  elif [ -z "$filtere" ]; then
                                                    filtere="$newfilter"
                                                  elif [ -z "$filterf" ]; then
                                                    filterf="$newfilter"
                                                  elif [ -z "$filterg" ]; then
                                                    filterg="$newfilter"
                                                  else
                                                    echo "$0: ran out of filters" 1>&2
                                                    exit 1
                                                  fi
        newfilter="$LIB/noidx $docanchor $delay"; if   [ -z "$filtera" ]; then
                                                    filtera="$newfilter"
                                                  elif [ -z "$filterb" ]; then
                                                    filterb="$newfilter"
                                                  elif [ -z "$filterc" ]; then
                                                    filterc="$newfilter"
                                                  elif [ -z "$filterd" ]; then
                                                    filterd="$newfilter"
                                                  elif [ -z "$filtere" ]; then
                                                    filtere="$newfilter"
                                                  elif [ -z "$filterf" ]; then
                                                    filterf="$newfilter"
                                                  elif [ -z "$filterg" ]; then
                                                    filterg="$newfilter"
                                                  else
                                                    echo "$0: ran out of filters" 1>&2
                                                    exit 1
                                                  fi ;;
    -indexfrom)
        newfilter="$LIB/finduses $noquote $2";    if   [ -z "$filtera" ]; then
                                                    filtera="$newfilter"
                                                  elif [ -z "$filterb" ]; then
                                                    filterb="$newfilter"
                                                  elif [ -z "$filterc" ]; then
                                                    filterc="$newfilter"
                                                  elif [ -z "$filterd" ]; then
                                                    filterd="$newfilter"
                                                  elif [ -z "$filtere" ]; then
                                                    filtere="$newfilter"
                                                  elif [ -z "$filterf" ]; then
                                                    filterf="$newfilter"
                                                  elif [ -z "$filterg" ]; then
                                                    filterg="$newfilter"
                                                  else
                                                    echo "$0: ran out of filters" 1>&2
                                                    exit 1
                                                  fi
        newfilter="$LIB/noidx $docanchor $delay"; if   [ -z "$filtera" ]; then
                                                    filtera="$newfilter"
                                                  elif [ -z "$filterb" ]; then
                                                    filterb="$newfilter"
                                                  elif [ -z "$filterc" ]; then
                                                    filterc="$newfilter"
                                                  elif [ -z "$filterd" ]; then
                                                    filterd="$newfilter"
                                                  elif [ -z "$filtere" ]; then
                                                    filtere="$newfilter"
                                                  elif [ -z "$filterf" ]; then
                                                    filterf="$newfilter"
                                                  elif [ -z "$filterg" ]; then
                                                    filterg="$newfilter"
                                                  else
                                                    echo "$0: ran out of filters" 1>&2
                                                    exit 1
                                                  fi
        shift ;;
  esac
  shift
done
(
header=
case $wrapper in
  none) ;;
  latex)  header="@header $wrapper $noweboptions" 
          trailer="@trailer $wrapper" ;;
  *)  header="@header $wrapper$arg" 
      trailer="@trailer $wrapper" ;;
esac
if [ -n "$header" ]; then echo "$header"; fi
PATH="$PATH:$LIB" 
export PATH
if [ -n "$verbose" ]; then
  if [ -n "$header" -o -n "$trailer" ]; then
    parenpfx="("
    if [ -n "$header" ]; then echo "(echo $header" 1>&2; parenpfx=" "; fi
    echo "$parenpfx$markup" $markopts $arg 1>&2
    if [ -n "$trailer" ]; then echo " echo $trailer" 1>&2; fi
    echo ") |" 1>&2
  else
    echo $markup $markopts $arg '|' 1>&2
  fi
  if   [ -n "$filtera" ]; then echo $filtera '|' 1>&2; fi
  if   [ -n "$filterb" ]; then echo $filterb '|' 1>&2; fi
  if   [ -n "$filterc" ]; then echo $filterc '|' 1>&2; fi
  if   [ -n "$filterd" ]; then echo $filterd '|' 1>&2; fi
  if   [ -n "$filtere" ]; then echo $filtere '|' 1>&2; fi
  if   [ -n "$filterf" ]; then echo $filterf '|' 1>&2; fi
  if   [ -n "$filterg" ]; then echo $filterg '|' 1>&2; fi
fi
if [ -n "$verbose" ]; then echo $backend $noindex $delay $shortxref 1>&2; fi
if   [ -z "$filtera" ]; then
  $markup $markopts $arg
elif [ -z "$filterb" ]; then
  $markup $markopts $arg | eval $filtera
elif [ -z "$filterc" ]; then
  $markup $markopts $arg | eval $filtera | eval $filterb
elif [ -z "$filterd" ]; then
  $markup $markopts $arg | eval $filtera | eval $filterb | eval $filterc
elif [ -z "$filtere" ]; then
  $markup $markopts $arg | eval $filtera | eval $filterb | eval $filterc |
                           eval $filterd
elif [ -z "$filterf" ]; then
  $markup $markopts $arg | eval $filtera | eval $filterb | eval $filterc |
                           eval $filterd | eval $filtere
elif [ -z "$filterg" ]; then
  $markup $markopts $arg | eval $filtera | eval $filterb | eval $filterc |
                           eval $filterd | eval $filtere | eval $filterf
else
  $markup $markopts $arg | eval $filtera | eval $filterb | eval $filterc |
                           eval $filterd | eval $filtere | eval $filterf |
                           eval $filterg
fi
if [ -n "$trailer" ]; then echo $trailer; fi
) |
                                $backend $noindex $delay $shortxref
exit $?
