nroff/troff question...
Doug Gwyn
gwyn at smoke.BRL.MIL
Sun Oct 14 13:55:43 AEST 1990
In article <3164 at unisoft.UUCP> rembo at unisoft.UUCP (Tony Rems) writes:
>Is there a way to tell what macro package a troff/nroff file is using?
Of course not. Users can provide their own macro packages.
However, assuming one of the standard ones is involved, you might
be able to tell by seeing what macros it appears to be using. The
following "doctype" script demonstrates this, as well as finding
other useful information of the same general nature.
#!/usr/5bin/sh
# doctype -- synthesize proper command line for troff
# adapted from Kernighan & Pike
# last edit: 90/07/30 D A Gwyn
# SCCS ID: @(#)doctype.sh 1.12
PATH=/usr/5bin:/bin:/usr/bin
if pdp11
then MACDIR=/usr/lib/tmac
else MACDIR=/usr/5lib/tmac # BRL System V emulation
fi
eopt=
macs=
opts=
topt=
for i
do case "$i" in
-e) eopt="$i"; shift;;
-m*) macs="$macs $i"; shift;;
-T*) topt=" $i"; shift;;
--) shift; break;;
-) break;;
-*) opts="$opts $i"; shift;;
*) break;;
esac
done
if [ $# -gt 0 ]
then s="cat $* | "
else s=
fi
t=`cat $* |
egrep '^\.(EQ|TS|\[|P|LP|G1|IS|SH|begin)' |
sort -u |
awk '
/^\.SH *(NAME|SYNOPSIS|DESCRIPTION)/ { man++ }
/^\.P$/ { mm++ }
/^\.[LP]P/ { ms++ }
/^\.EQ/ { eqn++ }
/^\.TS/ { tbl++ }
/^\.P[FS]/ { pic++ }
/^\.G1/ { grap++ }
/^\.IS/ { ideal++ }
/^\.\[/ { refer++ }
/^\.begin[ ]*stills/ { stills++ }
END {
if (refer > 0) printf "refer | "
if (grap > 0) printf "grap | "
if (grap > 0 || pic > 0) printf "_PIC_ | "
if (ideal > 0) printf "ideal | "
if (stills > 0) printf "stills | "
if (tbl > 0) printf "tbl | "
if (eqn > 0) printf "_EQN_ | "
printf "_TROFF_"
if (grap > 0 || pic > 0) printf " -mpic"
if (man > 0) printf " -man"
if (mm > 0 && man == 0) printf " -mm"
if (ms > 0 && mm == 0 && man == 0) printf " -ms"
printf " -\n"
} ' | sed -e s/_PIC_/"pic$topt"/ -e s/_EQN_/"eqn$topt"/ \
-e s/_TROFF_/"troff$topt$opts$macs"/ -e s%' -m'%" $MACDIR/tmac."%g`
if [ -n "$eopt" ]
then eval "$s$t"
else echo $s$t
fi
More information about the Comp.unix.questions
mailing list