Update to groff 1.19.2.
[dragonfly.git] / contrib / groff-1.19 / src / roff / grog / grog.sh
1 #! /bin/sh
2 # grog -- guess options for groff command
3 # Like doctype in Kernighan & Pike, Unix Programming Environment, pp 306-8.
4
5 soelim=@g@soelim
6
7 opts=
8 sp="([   ]|$)"
9
10 for arg
11 do
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
30 done
31
32 egrep -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
76 END {
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=$*" -