#!/usr/local/plan9/bin/rc . 9.rc . $PLAN9/man/fonts # # formatters # fn roff { preproc=() x=`{doctype $2} if (~ $1 t) { if(~ $x *grap*) preproc=($preproc grap) if(~ $x *pic*) preproc=($preproc pic) Nflag=-Tutf } if not { Nflag=-N } if(~ $x *eqn*) preproc=($preproc eqn) if(~ $x *tbl*) preproc=($preproc tbl) switch($#preproc) { case 0 {echo -n $FONTS; cat $2< /dev/null} | troff $Nflag -$MAN case 1 {echo -n $FONTS; cat $2< /dev/null} | $preproc | troff $Nflag -$MAN case 2 {echo -n $FONTS; cat $2< /dev/null} | $preproc(1) | $preproc(2) | troff $Nflag -$MAN case 3 {echo -n $FONTS; cat $2< /dev/null} | $preproc(1) | $preproc(2) | $preproc(3) | | troff $Nflag -$MAN case * {echo -n $FONTS; cat $2< /dev/null} | $preproc(1) | $preproc(2) | $preproc(3) | | $preproc(4) | troff $Nflag -$MAN } } fn doecho { echo $1 } fn dotroff { roff t $1 } fn doproof { roff t $1 | proof } fn dopage { roff t $1 | tr2post | page } fn donroff { roff n $1 | sed ' ${ /^$/p } //N /^\n$/D ' } seq=0 fn dohtml { MAN=manhtml b=`{echo $1 | sed 's/\.[0-9].*//'} if(test -f $b.html) web $b.html if not{ roff t $1 | troff2html >/tmp/man.$pid.$seq.html web /tmp/man.$pid.$seq.html seq=`{echo 1+$seq | hoc} } } # # parse flags and sections # fn usage { echo 'Usage: man [-hnpPtw] [-s sec] [0-9] [0-9] ... [--] name1 name2 ...' >[1=2] } cmd=donroff sec=() S=$PLAN9/man d=0 while(~ $d 0) { if(~ $#* 0) { usage exit 1 } if(test -d $S/man$1){ sec=($sec $1) shift } if not switch($1) { case -t ; cmd=dotroff ; shift case -n ; cmd=donroff ; shift case -p ; cmd=doproof ; shift case -P ; cmd=dopage ; shift case -w ; cmd=doecho ; shift case -h ; cmd=dohtml ; shift case -- ; d=1 ; shift case -* ; usage ; exit 1 case * ; d=1 } } if(~ $#sec 0) { sec=`{ls -pd $S/man[0-9]* | sed 's/man//'} } # # search index # allfiles=() missing=no for(word){ files=() regexp='^'^$word^' ' for(i in $S/man$sec){ if(test -f $i/INDEX){ try=`{grep $regexp $i/INDEX | sed 's/^[^ ]* //'} if(! ~ $#try 0) files=($files $i/$try) } } if(~ $#files 0){ for(i in $S/man$sec){ if(test -f $i/$word.[0-9]*) files=($files $i/$word.[0-9]*) } } if(~ $#files 0){ echo 'man: no manual page' $word >[1=2] missing=yes } allfiles=($allfiles $files) } if(~ $#allfiles 0) exit 'no man' # complicated sort order: want 9p.3, 9p-cmdbuf.3, 9pclient.3 allfiles=`{ls $allfiles | sed 's/[.\-]/ &/g;s/\./ &/g' | sort -u | tr -d ' '} files=() for(i in $allfiles){ if(test -f $i) files=($files $i) if not echo need $i >[1=2] } # # format pages # for(i in $files) $cmd $i