diff options
Diffstat (limited to 'contrib/groffer/shell/roff2.sh')
-rwxr-xr-x | contrib/groffer/shell/roff2.sh | 339 |
1 files changed, 339 insertions, 0 deletions
diff --git a/contrib/groffer/shell/roff2.sh b/contrib/groffer/shell/roff2.sh new file mode 100755 index 00000000..03db4896 --- /dev/null +++ b/contrib/groffer/shell/roff2.sh @@ -0,0 +1,339 @@ +#! /bin/sh + +# roff2* - transform roff files into other formats + +# Source file position: <groff-source>/contrib/groffer/shell/roff2.sh +# Installed position: <prefix>/bin/roff2* + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. +# Written by Bernd Warken <groff-bernd.warken-72@web.de>. + +# Last update: 5 Jan 2009 + +# This file is part of `groffer', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +######################################################################## + + +############## +# echo1 (<text>*) +# +# Output to stdout with final line break. +# +# Arguments : arbitrary text including `-'. +# +echo1() +{ + cat <<EOF +$@ +EOF +} # echo1() + + +############## +# echo2 (<text>*) +# +# Output to stderr with final line break. +# +# Arguments : arbitrary text including `-'. +# +echo2() +{ + cat >&2 <<EOF +$@ +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 +roff2[a-z]*) + mode="$(echo1 "$name" | sed 's/^roff2//')"; + ;; +*) + echo2 "wrong program name: $name"; + exit 1; + ;; +esac; + +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'; + ;; + 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; + grog="$(grog $groff_options "$@")"; + eval $grog; + exit $?; +fi; # not has_groffer |