added mandoc macro support;

each name now generates a separate whatis data base entry
This commit is contained in:
Andrew Moore 1993-07-21 21:08:32 +00:00
parent 2aaed01e05
commit 4a5e9a2017
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=178

View File

@ -21,7 +21,6 @@ then
echo "usage: makewhatis directory [...]" echo "usage: makewhatis directory [...]"
exit 1 exit 1
fi fi
for dir in $* for dir in $*
do do
cd $dir cd $dir
@ -29,50 +28,83 @@ do
do do
if [ -d $subdir ] if [ -d $subdir ]
then then
for f in `find . -name '*' -print` for f in `find $subdir -name '*' -print`
do do
sed -n '/^\.TH.*$/p sed -n '/^\.TH.*$/p
/^\.SH[ ]*NAME/,/^\.SH/p' $f |\ /^\.Dt.*$/p
/^\.S[hH][ ]*NAME/,/^\.S[hH]/p' $f |\
sed -e 's/\\[ ]*\-/-/ sed -e 's/\\[ ]*\-/-/
s/^.PP.*$// s/^.P[Pp].*$//
s/\\(em// s/\\(em//
s/\\fI// s/\\fI//
s/\\fR//' |\ s/\\fR//' |\
awk 'BEGIN {insh = 0} { awk 'BEGIN {insh = 0; inSh = 0; Nd = 0} {
if ($1 == ".TH") if ($1 == ".TH" || $1 == ".Dt")
sect = $3 sect = $3
else if ($1 == ".SH" && insh == 1) { else if (($1 == ".br" && insh == 1) || ($1 == ".SH" && insh == 1) || ($1 == ".Sh" && inSh == 1)) {
if (i > 0 && name != NULL) { if (i > 0 && nc > 0) {
namesect = sprintf("%s (%s)", name, sect) for (k= 1; k <= nc; k++) {
printf("%-20.20s", namesect) namesect = sprintf("%s (%s)", name[k], sect)
printf(" - ") printf("%s", namesect)
for (j = 0; j < i-1; j++) printf(" - ")
printf("%s ", desc[j]) for (j = 0; j < i-1; j++)
printf("%s\n", desc[i-1]) printf("%s ", desc[j])
printf("%s\n", desc[i-1])
}
} }
count = 0
i = 0
nc = 0
} else if ($1 == ".SH" && insh == 0) { } else if ($1 == ".SH" && insh == 0) {
insh = 1 insh = 1
count = 0 count = 0
i = 0 i = 0
nc = 0
} else if ($1 == ".Sh" && inSh == 0) {
inSh = 1
i = 0
nc = 0
} else if (insh == 1) { } else if (insh == 1) {
count++ count++
if (count == 1 && NF > 2) { if (count == 1 && NF > 2) {
start = 2 start = 2
if ($2 == "-") start = 3 for (k = 1; k <= NF; k++)
if (NF > start + 1) if ($k == "-") {
start = k + 1
break
} else {
sub(",","",$k)
if ($k != "")
name[++nc] = $k
}
if (NF >= start)
for (j = start; j <= NF; j++) for (j = start; j <= NF; j++)
desc[i++] = $j desc[i++] = $j
name = $1
} else { } else {
for (j = 1; j <= NF; j++) for (j = 1; j <= NF; j++)
desc[i++] = $j desc[i++] = $j
} }
} } else if ($1 == ".Nm" && inSh == 1 && Nd == 0) {
for (k = 2; k <= NF; k++) {
sub(",","",$k)
if ($k != "")
name[++nc] = $k
}
} else if ($1 == ".Nd" && inSh == 1) {
Nd = 1
for (j = 2; j <= NF; j++)
desc[i++] = $j
} else if (Nd == 1) {
start = 1
if ($1 ~ /\..*/)
start = 2
for (j = start; j <= NF; j++)
desc[i++] = $j
}
}' }'
done done
cd ..
fi fi
done | sort | colrm 80 > $dir/whatis.db.tmp done | sort | colrm 80 | uniq > $dir/whatis.db.tmp
mv $dir/whatis.db.tmp $dir/whatis mv $dir/whatis.db.tmp $dir/whatis
done done