1#! /bin/sh 2# grog -- guess options for groff command 3# Like doctype in Kernighan & Pike, Unix Programming Environment, pp 306-8. 4 5soelim=@g@soelim 6 7opts= 8sp="([ ]|$)" 9 10for arg 11do 12 case "$arg" in 13 --) 14 shift; break;; 15 -) 16 break;; 17 -C) 18 sp=; opts="$opts -C"; shift; break;; 19 -v | --version) 20 echo "GNU grog (groff) version @VERSION@" 21 exit 0;; 22 --help) 23 echo "usage: grog [ option ...] [files...]" 24 exit 0;; 25 -*) 26 opts="$opts $arg"; shift;; 27 *) 28 break;; 29 esac 30done 31 32egrep -h "^\.(\[|\])|((P|PS|[PLI]P|[pnil]p|sh|Dd|Tp|Dp|De|Cx|Cl|Oo|.* Oo|Oc|.* Oc|TS|EQ|TH|SH|so|\[|R1|GS|G1|PH|SA)$sp)" $* \ 33| sed -e '/^\.so/s/^.*$/.SO_START\ 34&\ 35.SO_END/' \ 36| $soelim \ 37| egrep '^\.(P|PS|[PLI]P|[pnil]p|sh|Dd|Tp|Dp|De|Cx|Cl|Oo|.* Oo|Oc|.* Oc|TS|EQ|TH|SH|\[|\]|R1|GS|G1|PH|SA|SO_START|SO_END)' \ 38| awk ' 39/^\.SO_START$/ { so = 1 } 40/^\.SO_END$/ { so = 0 } 41/^\.TS/ { tbl++; if (so > 0) soelim++ } 42/^\.PS([ 0-9.<].*)?$/ { pic++; if (so > 0) soelim++ } 43/^\.EQ/ { eqn++; if (so > 0) soelim++ } 44/^\.R1/ { refer++; if (so > 0) soelim++ } 45/^\.\[/ {refer_start++; if (so > 0) soelim++ } 46/^\.\]/ {refer_end++; if (so > 0) soelim++ } 47/^\.GS/ { grn++; if (so > 0) soelim++ } 48/^\.G1/ { grap++; pic++; if (so > 0) soelim++ } 49/^\.TH/ { TH++ } 50/^\.[PLI]P/ { PP++ } 51/^\.P$/ { P++ } 52/^\.SH/ { SH++ } 53/^\.(PH|SA)/ { mm++ } 54/^\.([pnil]p|sh)/ { me++ } 55/^\.Dd/ { mdoc++ } 56/^\.(Tp|Dp|De|Cx|Cl)/ { mdoc_old++ } 57/^\.(O[oc]|.* O[oc]( |$))/ { 58 sub(/\\\".*/, "") 59 gsub(/\"[^\"]*\"/, "") 60 sub(/\".*/, "") 61 sub(/^\.Oo/, " Oo ") 62 sub(/^\.Oc/, " Oc ") 63 sub(/ Oo$/, " Oo ") 64 sub(/ Oc$/, " Oc ") 65 while (/ Oo /) { 66 sub(/ Oo /, " ") 67 Oo++ 68 } 69 while (/ Oc /) { 70 sub(/ Oc /, " ") 71 Oo-- 72 } 73} 74/^\.(PRINTSTYLE|START)/ { mom++ } 75 76END { 77 if (files ~ /^-/) 78 files = "-- " files 79 printf "groff" 80 refer = refer || (refer_start && refer_end) 81 if (pic > 0 || tbl > 0 || grn > 0 || grap > 0 || eqn > 0 || refer > 0) { 82 printf " -" 83 if (soelim > 0) printf "s" 84 if (refer > 0) printf "R" 85 if (grn > 0) printf "g" 86 if (grap > 0) printf "G" 87 if (pic > 0) printf "p" 88 if (tbl > 0) printf "t" 89 if (eqn > 0) printf "e" 90 } 91 if (me > 0) 92 printf " -me" 93 else if (SH > 0 && TH > 0) 94 printf " -man" 95 else if (mom > 0) 96 printf " -mom" 97 else if (PP > 0) 98 printf " -ms" 99 else if (P > 0 || mm > 0) 100 printf " -mm" 101 else if (mdoc > 0) { 102 if (mdoc_old > 0 || Oo > 0) 103 printf " -mdoc-old" 104 else 105 printf " -mdoc" 106 } 107 if (opts != "") 108 printf "%s", opts 109 if (files != "") 110 printf " %s", files 111 print "" 112}' "opts=$opts" "files=$*" - 113