| #!/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 |
| |