#!/bin/sh
# Copyright 1991 by Norman Ramsey.  All rights reserved.
# See file COPYRIGHT for more information.
LIB=/usr/lib/noweb
markup=$LIB/markup backend=$LIB/totex
wrapper= delay= args= markopts= noweboptions= autodefs= verbose=
noquote="-noquote" docanchor= noindex="-noindex"
filtera= filterb= filterc= filterd= filtere=
pass2setcmd="set ignore"
for i do
  pass2setcmd="$pass2setcmd '$i'"
done
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" ;;
    -n)          wrapper=none ;;
    -backend)    backend="$2" ; shift ;;
    -markup)     markup="$2"  ; shift ;;
    -filter)    shift                                                               ;;
    -x)                         ;;
    -index)            noindex= ;;
    -indexfrom) shift; noindex= ;;
    -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"
                                          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 [ -z "$noweboptions" ] ; then noweboptions="$newopt"
                                 else noweboptions="$noweboptions,$newopt"
                                 fi ;;
    # -nodelay) delay= ;;
    -delay)   delay="-delay" ; wrapper=none ;;
    -t*) markopts="$markopts $1" ;;
    -v) verbose=1 ;;
    -*) echo "$0: Unrecognized option '$1'" 1>&2 ; echo "Usage: $0 [options] [files]" 1>&2
                                                   echo "Options recognized are:" 1>&2
echo "-latex            Use LaTeX headers and trailers (default)." 1>&2
echo "-tex              Use TeX headers and trailers." 1>&2
echo "-html             Use HTML headers and trailers." 1>&2
echo "-latex+html       Assume LaTeX in documentation, but use HTML in code." 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 on standard error" 1>&2; exit 1 ;;
    *)  arg="$arg $1" ;;
  esac
  shift
done
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"
                                                  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"
                                                  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"
                                                  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"
                                                  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"
                                                  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"
                                                  else
                                                    echo "$0: ran out of filters" 1>&2
                                                    exit 1
                                                  fi
        shift ;;
  esac
  shift
done
(
case $wrapper in
  none) ;;
  latex)  echo "@header $wrapper $noweboptions" ;;
  *)  echo "@header $wrapper $arg" ;;
esac
PATH="$PATH:$LIB" 
export PATH
if [ -n "$verbose" ]; then
  echo $markup $arkopts $arg '|' 1>&2
  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
fi
if   [ -z "$filtera" ]; then
  $markup $markopts $arg
elif [ -z "$filterb" ]; then
  $markup $markopts $arg | $filtera
elif [ -z "$filterc" ]; then
  $markup $markopts $arg | $filtera | $filterb
elif [ -z "$filterd" ]; then
  $markup $markopts $arg | $filtera | $filterb | $filterc
elif [ -z "$filtere" ]; then
  $markup $markopts $arg | $filtera | $filterb | $filterc | $filterd
else
  $markup $markopts $arg | $filtera | $filterb | $filterc | $filterd | $filtere
fi
if [ "$wrapper" != "none" ]; then echo "@trailer $wrapper"; fi
) |
$backend $noindex $delay
if [ -n "$verbose" ]; then echo $backend $noindex $delay 1>&2; fi
exit $?
