#!/usr/local/plan9/bin/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 | 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}
	}
}


#
# setup 
# 
if(! ~ $path(1) $PLAN9/bin)
	path=($PLAN9/bin $path)
cmd=donroff
sec=()
S=$PLAN9/man

#
# parse flags and sections
#
d=0
while(~ $d 0) {
	if(~ $#* 0) {
		echo 'Usage: man [-ntp] [-s sec] [0-9] [0-9] ... name1 name2 ...' >[1=2]
		exit
	}
	if(test -d $S/man$1){
		sec=($sec $1)
		shift
	}
	if not switch($1) {
		case -t ; fmt=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 * ; 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'
allfiles=`{ls $allfiles | sort -u >[2]/dev/null}

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

