summaryrefslogtreecommitdiff
path: root/contrib/groffer/shell
diff options
context:
space:
mode:
authorbwarken <bwarken>2006-11-11 22:18:56 +0000
committerbwarken <bwarken>2006-11-11 22:18:56 +0000
commita59efa49a42977a8d4d9203fe4feda70040c1d01 (patch)
treec578197b8faec095444476a9905dc36c4d2c5e28 /contrib/groffer/shell
parent222eef6b94e991fcdb4cf4e1d5e6798c6f5a8282 (diff)
downloadgroff-a59efa49a42977a8d4d9203fe4feda70040c1d01.tar.gz
Update groffer-1.1.1
Diffstat (limited to 'contrib/groffer/shell')
-rwxr-xr-xcontrib/groffer/shell/roff2.sh287
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