#!/bin/sh LONGOPTS=changes,new,pdftocfront,tex: SHRTOPTS=cnpt: CHANGES=false NEW=false PDFTOCFRONT=false TEX=tex getopt -T >/dev/null if [ $? -eq 4 ] # Check for Linux-getopt with extensions then OPTS=$(getopt -n downloadable-programs -o $SHRTOPTS -l $LONGOPTS -- "$@") else OPTS=$(getopt $SHRTOPTS $*) fi if [ $? -eq 0 ] # Check return code from getopt then eval set -- "$OPTS" else echo "Failed to parse options." >&2; exit 1 fi while true do case "$1" in -c | --changes ) CHANGES=true; shift ;; -n | --new ) NEW=true; export TEXINPUTS=".:/opt/github/web//:" shift ;; -p | --pdftocfront ) PDFTOCFRONT=true; shift ;; -t | --tex ) TEX="$2"; shift 2 ;; -- ) shift; break ;; * ) break ;; esac done KNUTHWHERE=$(locate /bibtex.web) KNUTHWARE=$(dirname $KNUTHWHERE) for f in \ $KNUTHWARE/*.web \ $KNUTHWARE/pdftexdir/pdftex.web \ $KNUTHWARE/xetexdir/xetex.web do if $CHANGES then c=$(basename $f .web).ch case $c in "pdftex.ch"|"xetex.ch" ) c=$KNUTHWARE/$c c=$(echo $c | sed -e 's?\(texk/\)?Work/\1?') ;; * ) c=$KNUTHWARE/$c ;; esac weave $f $c sed -i -e "s/\(\\\\let\\\\maybe=\)\\\\iftrue/\1\\\\iffalse/" \ $(basename $f .web).tex else weave $f fi f=$(basename $f .web) # use extended macros for TeX Live PDF documentation if $NEW then sed -i -e "1 s/\\\\input webmac/\\\\input pwebmac/" $f.tex fi # replace former convention to indicate "not a title page" # to include page headers for table-of-contents sed -i -e "s/\\\\def\\\\titlepage{F}/\\\\titlefalse/" $f.tex # special treatment for individual WEB programs case $f in # purge conflict between bibtex.web and webmac.tex # 'E' no longer free to be active character # fix table-of-contents page for bibtex "bibtex") sed -i -e "s/titlefalse/titletrue/" \ -e "70,77d" $f.tex ;; # make room for new material in weave.web "tangle" ) sed -i -e "s/number{123}/number{125}/" $f.tex ;; # amend '\N' redefinition for PDF outlines in mf.tex and # tex.tex (also pdftex.web and xetex.web); depends on the # extended 'pwebmac.tex' macros "mf"|"tex"|"pdftex"|"xetex" ) if [ "xetex" = $f ] then # purge obsolete macros from XeTeX sed -i -e "/\\\\input xewebmac/d" $f.tex # only XeTeX can process XeTeX TEX=xetex fi if $NEW then if [ "pdftex" = $f ] then # pdfTeX has a looong table-of-contents cat > pdftex.patch << FI \advance\vsize by 4\baselineskip \ifacro\advance\pdfpageheight by 4\baselineskip\fi FI sed -i -e "/\\\\def\\\\topofcontents.*/ { r pdftex.patch }" $f.tex fi cat > texmf-pdf.patch << FI \ifacro{\toksF={}\makeoutlinetoks{[#2] #3}\outlinedone\outlinedone}\fi FI sed -i -e "/\\\\outer\\\\def\\\\N.*/ { r texmf-pdf.patch }" $f.tex cat > texmf-pdf.patch << FI \ifpdf\special{pdf: outline 0 << /Title (\the\toksE) /Dest [ @thispage /FitH @ypos ] >>}\fi FI sed -i -e "/ \\\\edef\\\\next.*/ { r texmf-pdf.patch }" $f.tex rm texmf-pdf.patch fi ;; esac if $PDFTOCFRONT then # shift table-of-contents pages to the front in PDF export TEXINPUTS=".:/opt/github/cwebbin//:"$TEXINPUTS sed -i -e "1 s/\(webmac\)/\1\n\\\\input pdfwebtocfront/" $f.tex $TEX $f.tex # run TeX twice fi $TEX $f done if $PDFTOCFRONT then # create tarballs for publication pax vftovp.pdf vptovf.pdf -wvzf etc.tar.gz -s ,^,etc/, pax mf.pdf -wvzf mf.tar.gz -s ,^,mf/, pax gftodvi.pdf gftopk.pdf gftype.pdf mft.pdf \ -wvzf mfware.tar.gz -s ,^,mfware/, pax tex.pdf -wvzf tex.tar.gz -s ,^,tex/, pax dvitype.pdf pltotf.pdf pooltype.pdf tftopl.pdf \ -wvzf texware.tar.gz -s ,^,texware/, pax tangle.pdf weave.pdf -wvzf web.tar.gz -s ,^,web/, pax bibtex.pdf -wvzf bibtex.tar.gz -s ,^,bibtex/, pax dvicopy.pdf patgen.pdf pktogf.pdf pktype.pdf \ -wvzf other.tar.gz -s ,^,other/, pax pdftex.pdf -wvzf pdftex.tar.gz -s ,^,pdftex/, pax xetex.pdf -wvzf xetex.tar.gz -s ,^,xetex/, fi