home *** CD-ROM | disk | FTP | other *** search
/ Aminet 10 / aminetcdnumber101996.iso / Aminet / util / gnu / groff_src.lha / groff-1.10src / grog / grog.sh < prev    next >
Linux/UNIX/POSIX Shell Script  |  1995-10-01  |  2KB  |  79 lines

  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=gsoelim
  6.  
  7. opts=
  8.  
  9. for arg
  10. do
  11.     case "$arg" in
  12.     --)
  13.         shift; break;;
  14.     -)
  15.         break;;
  16.     -*)
  17.         opts="$opts $arg"; shift;;
  18.     *)
  19.         break;;
  20.     esac
  21. done
  22.  
  23. egrep -h '^\.(P|[LI]P|[pnil]p|sh|Dd|Tp|Dp|De|Cx|Cl|Oo|Oc|TS|EQ|TH|SH|so|\[|R1|PH|SA)' $* \
  24. | sed -e '/^\.so/s/^.*$/.SO_START\
  25. &\
  26. .SO_END/' \
  27. | $soelim \
  28. | egrep '^\.(P|[LI]P|[pnil]p|sh|Dd|Tp|Dp|De|Cx|Cl|Oo|Oc|TS|EQ|TH|SH|\[|R1|PH|SA|SO_START|SO_END)' \
  29. | awk '
  30. /^\.SO_START$/ { so = 1 }
  31. /^\.SO_END$/ { so = 0 }
  32. /^\.TS/ { tbl++; if (so > 0) soelim++ }
  33. /^\.PS([ 0-9.<].*)?$/ { pic++; if (so > 0) soelim++ }
  34. /^\.EQ/ { eqn++; if (so > 0) soelim++ }
  35. /^\.(R1|\[)/ { refer++; if (so > 0) soelim++ }
  36. /^\.TH/ { TH++ }
  37. /^\.[PLI]P/ { PP++ }
  38. /^\.P$/ { P++ }
  39. /^\.SH/ { SH++ }
  40. /^\.(PH|SA)/ { mm++ }
  41. /^\.([pnil]p|sh)/ { me++ }
  42. /^\.Dd/ { mdoc++ }
  43. /^\.(Tp|Dp|De|Cx|Cl)/ { mdoc_old++ }
  44. /^\.Oo/ { Oo++ }
  45. /^\.Oc/ { Oo-- }
  46.  
  47. END {
  48.     if (files ~ /^-/)
  49.         files = "-- " files
  50.     printf "groff"
  51.     if (pic > 0 || tbl > 0 || eqn > 0 || refer > 0) {
  52.         printf " -"
  53.         if (soelim > 0) printf "s"
  54.         if (refer > 0) printf "R"
  55.         if (pic > 0) printf "p"
  56.         if (tbl > 0) printf "t"
  57.         if (eqn > 0) printf "e"
  58.     }
  59.     if (me > 0)
  60.         printf " -me"
  61.     else if (SH > 0 && TH > 0)
  62.         printf " -man"
  63.     else if (PP > 0)
  64.         printf " -ms"
  65.     else if (P > 0 || mm > 0)
  66.         printf " -mm"
  67.     else if (mdoc > 0) {
  68.         if (mdoc_old > 0 || Oo > 0)
  69.             printf " -mdoc.old"
  70.         else
  71.             printf " -mdoc"
  72.     }
  73.     if (opts != "")
  74.         printf "%s", opts
  75.     if (files != "")
  76.         printf " %s", files
  77.     print ""
  78. }' "opts=$opts" "files=$*" -
  79.