Path: utzoo!attcan!uunet!aplcen!haven!adm!smoke!gwyn From: gwyn@smoke.BRL.MIL (Doug Gwyn) Newsgroups: comp.unix.questions Subject: Re: nroff/troff question... Message-ID: <14147@smoke.BRL.MIL> Date: 14 Oct 90 03:55:43 GMT References: <3164@unisoft.UUCP> Organization: U.S. Army Ballistic Research Laboratory, APG, MD. Lines: 79 In article <3164@unisoft.UUCP> rembo@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