diff options
author | bwarken <bwarken> | 2006-11-11 22:18:56 +0000 |
---|---|---|
committer | bwarken <bwarken> | 2006-11-11 22:18:56 +0000 |
commit | a59efa49a42977a8d4d9203fe4feda70040c1d01 (patch) | |
tree | c578197b8faec095444476a9905dc36c4d2c5e28 /contrib/groffer/shell | |
parent | 222eef6b94e991fcdb4cf4e1d5e6798c6f5a8282 (diff) | |
download | groff-a59efa49a42977a8d4d9203fe4feda70040c1d01.tar.gz |
Update groffer-1.1.1
Diffstat (limited to 'contrib/groffer/shell')
-rwxr-xr-x | contrib/groffer/shell/roff2.sh | 287 |
1 files changed, 265 insertions, 22 deletions
diff --git a/contrib/groffer/shell/roff2.sh b/contrib/groffer/shell/roff2.sh index 9ba340f6..47197c3b 100755 --- a/contrib/groffer/shell/roff2.sh +++ b/contrib/groffer/shell/roff2.sh @@ -8,7 +8,7 @@ # Copyright (C) 2006 Free Software Foundation, Inc. # Written by Bernd Warken -# Last update: 7 Nov 2006 +# Last update: 11 Nov 2006 # This file is part of `groffer', which is part of `groff'. @@ -61,6 +61,83 @@ EOF } # echo2() +error_no_groffer='no'; +error_no_groffer() { + if test _"$error_no_groffer" = _yes + then + return; + fi; + error_no_groffer='yes'; + echo2 "$name: groffer is not available."; +} + + +error_no_options='no'; +error_no_options() { + if test _"$error_no_options" = _yes + then + return; + fi; + error_no_groffer='yes'; + echo2 "$name: groffer options are not allowed."; +} + + +usage_with_groffer() { + cat <<EOF +usage: $Name [option]... [--] [filespec]... + +-h | --help print usage information +-v | --version print version information + +All other options are arbitrary options of "groffer"; the options +override the behavior of this program. + +"filespec"s are the same as in "groffer": either the names of +existing, readable files or "-" for standard input or a search pattern +for man pages. No "filespec" assumes standard input automatically. +EOF +} + +usage_without_groffer() { + cat <<EOF +usage: $Name [option]... [--] [filespec]... + +-h | --help print usage information +-v | --version print version information + +No other options are allowed because "groffer" is not available. + +The only "filespec"s allowed are the names of existing, readable files +or "-" for standard input. No "filespec" assumes standard input +automatically. +EOF +} + + +where_is_prog() { + for p in `echo $PATH|sed "s/:/ /g"` + do + f="${p}/$1"; + if test -f "$f" && test -x "$f" + then + echo1 "$f"; + return; + fi; + done; +} + + +######################################################################## + +export NULL_DEV; +if test -c /dev/null +then + NULL_DEV='/dev/null'; +else + NULL_DEV='NUL'; +fi; + name="$(echo1 "$0" | sed 's|^.*//*\([^/]*\)$|\1|')"; case "$name" in @@ -73,27 +150,193 @@ roff2[a-z]*) ;; esac; -for i -do - case $i in - -v|--v|--ve|--ver|--vers|--versi|--versio|--version) - cat <<EOF -$name in `groffer --version` -EOF - exit 0; +groff_version="$(groff --version 2>$NULL_DEV)"; +if test $? -gt 0 +then + echo2 "$name error: groff does not work."; + exit 1; +fi; +groffer_version="$(groffer --version 2>$NULL_DEV)"; +if test $? -gt 0 +then + has_groffer='no'; +else + has_groffer='yes'; +fi; + +if test _"${has_groffer}" = _yes +then + for i + do + case $i in + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo1 "$name in $groffer_version"; + exit 0; + ;; + -h|--h|--he|--hel|--help) + usage_with_groffer; + exit 0; + ;; + esac; + done; + groffer --to-stdout --$mode "$@"; +else # not has_groffer + reset=no; + double_minus=no; + for i + do + if test _"${reset}" = _no + then + set --; + reset=yes; + fi; + if test _"${double_minus}" = _yes + then + set -- "$@" "$i"; + continue; + fi; + case "$i" in + --) + double_minus=yes; + continue; + ;; + -) + set -- "$@" '-'; + continue; + ;; + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo1 "$name in $groff_version"; + exit 0; + ;; + -h|--h|--he|--hel|--help) + usage_without_groffer; + exit 0; + ;; + -*) + error_no_groffer; + error_no_options; + ;; + *) + if test -f "$i" && test -r "$i" + then + set -- "$@" "$i"; + else + error_no_groffer; + echo2 "$i is not an existing, readable file."; + fi; + continue; + ;; + esac; + done; # for i + + if test $# -eq 0 + then + set -- '-'; + fi; + has_stdin=no; + for i + do + case "$i" in + -) + has_stdin=yes; + break; + ;; + esac; + done; + + if test _$has_stdin = _yes + then + umask 0077; + tempdir=''; + for d in "${GROFF_TMPDIR}" "${TMPDIR}" "${TMP}" "${TEMP}" \ + "${TEMPDIR}" "${HOME}"'/tmp' '/tmp' "${HOME}" '.' + do + if test _"$d" = _ || ! test -d "$d" || ! test -w "$d" + then + continue; + fi; + case "$d" in + */) + tempdir="$d"; + ;; + *) + tempdir="$d"'/'; + ;; + esac; + done; + if test _$tempdir = _ + then + echo2 "${name}: could not find a temporary directory." + exit 1; + fi; + stdin=${tempdir}${name}_$$; + if test -e "$stdin" + then + rm -f "$stdin"; + n=0; + f="${stdin}_$n"; + while test -e "$f" + do + rm -f "$f"; + if ! test -e "$f" + then + break; + fi; + n="$(expr $n + 1)"; + f="${stdin}_$n"; + done; + stdin="$f"; + fi; + reset=no; + for i + do + if test _"${reset}" = _no + then + set --; + reset=yes; + fi; + case "$i" in + -) + set -- "$@" "$stdin"; + ;; + *) + set -- "$@" "$i"; + ;; + esac; + done; + cat>"$stdin"; + fi; # if has_stdin + + case "$mode" in + x) + groff_options='-TX75-12 -Z'; ;; - -h|--h|--he|--hel|--help) - cat <<EOF -usage: $name [option]... [--] [filespec]... - -where the optional "filespec"s are either the names of existing, -readable files or "-" for standard input or a search pattern for man -pages. The optional "option"s are arbitrary options of "groffer"; the -options override the behavior of this program. -EOF - exit 0; + text) + groff_options='-Tlatin1'; + ;; + pdf) + ps2pdf="$(where_is_prog ps2pdf)"; + if test _"$ps2pdf" = _ + then + ps2pdf="$(where_is_prog gs)"; + if test _"$ps2pdf" = _ + then + echo2 "$name: cannot transform to pdf format."; + exit 1; + fi; + ps2pdf="$ps2pdf -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite '-sOutputFile=- -c save pop -f -"; + else + ps2pdf="$ps2pdf -"; + fi; + grog="$(grog -Tps "$@")"; + eval $grog | ${ps2pdf}; + exit $?; + ;; + *) + groff_options="-T$mode"; ;; esac; -done - -groffer --to-stdout --$mode "$@";
\ No newline at end of file + grog="$(grog $groff_options "$@")"; + eval $grog; + exit $?; +fi; # not has_groffer |