groff/nroff

148 lines
3.2 KiB
Plaintext
Raw Normal View History

#!/bin/bash
# Emulate nroff with groff.
prog="$0"
charset_in=iso-8859-1
charset_out=`locale charmap 2>/dev/null`
2007-08-16 14:11:35 +00:00
opts="-mtty-char -Tutf8"
# Default device.
# First try the "locale charmap" command, because it's most reliable.
# On systems where it doesn't exist, look at the environment variables.
case "`locale charmap 2>/dev/null`" in
UTF-8)
T=-Tutf8 ;;
ISO-8859-1)
T=-Tlatin1 ;;
IBM-1047)
T=-Tcp1047 ;;
EUC-JP)
T=-Tnippon ;;
EUC-KR)
T=-Tkorean ;;
*)
case "${LC_ALL-${LC_CTYPE-${LANG}}}" in
*.UTF-8)
T=-Tutf8 ;;
iso_8859_1 | *.ISO-8859-1)
T=-Tlatin1 ;;
*.IBM-1047)
T=-Tcp1047 ;;
ja_JP.ujis | ja_JP.eucJP)
T=-Tnippon ;;
ko_KR.eucKR)
T=-Tkorean ;;
*)
case "$LESSCHARSET" in
utf-8)
T=-Tutf8 ;;
latin1)
T=-Tlatin1 ;;
cp1047)
T=-Tcp1047 ;;
japanese)
T=-Tnippon ;;
ko)
T=-Tkorean ;;
*)
T=-Tascii8 ;;
esac ;;
esac ;;
esac
2007-08-16 14:11:35 +00:00
for i
do
case $1 in
-c)
opts="$opts -P-c" ;;
-h)
opts="$opts -P-h" ;;
-[eq] | -s*)
# ignore these options
;;
-[mrnoT])
echo $"option $1 requires an argument" >&2
exit 1 ;;
-[iptSUC] | -[mrno]*)
opts="$opts $1" ;;
-Tascii | -Tlatin1 | -Tutf8 | -Tcp1047 | -Tascii8 | -Tnippon | -Tkorean)
2007-08-16 14:11:35 +00:00
opts=
T=$1 ;;
-T*)
# ignore other devices
;;
-v | --version)
echo $"GNU nroff (groff) with Red Hat i18n/l10n support"
exit 0 ;;
--legacy)
shift
charset_in=$1 ;;
--help)
echo $"usage: $prog [-cChipt] [-mNAME] [-nNUM] [--legacy CHARSET] [-oLIST] [-rCN] [FILE...]"
exit 0 ;;
--)
shift
break ;;
-)
break ;;
-*)
echo $"$prog: invalid option $1" >&2
exit 1 ;;
*)
break ;;
esac
shift
done
2007-07-03 09:53:23 +00:00
if TMPFILE=$(mktemp /tmp/man.XXXXXX 2>/dev/null); then
trap "rm -f $TMPFILE" 0 1 2 3 15
cat ${1+"$@"} >| $TMPFILE
else
buf=$(cat ${1+"$@"})
TMPFILE=buf
fi
2007-07-03 09:53:23 +00:00
if [ $TMPFILE = buf ]; then
echo -n "$buf" | iconv -f utf-8 -t utf-8 &>/dev/null && charset_in=utf-8
else
2007-07-03 09:53:23 +00:00
iconv -f utf-8 -t utf-8 $TMPFILE &>/dev/null && charset_in=utf-8
fi
if [ $charset_in != utf-8 ]; then
echo XXX
echo XXX $"WARNING: old character encoding and/or character set"
echo XXX
fi
# en_US is chosen arbitrarily; any UTF-8 locale should work
export LC_ALL=en_US.UTF-8
# This shell script is intended for use with man, so warnings are
# probably not wanted. Also load nroff-style character definitions.
2007-07-03 09:53:23 +00:00
if [ $charset_in = utf-8 -a $charset_out = UTF-8 ]; then
if [ $TMPFILE = buf ]; then
echo -n "$buf" | /usr/bin/groff $opts 2>/dev/null
else
exec < $TMPFILE
rm -f $TMPFILE
exec /usr/bin/groff $opts 2>/dev/null
fi
else
if [ $TMPFILE = buf ]; then
echo -n "$buf" | \
/usr/bin/iconv -f $charset_in -t utf-8 | \
/usr/bin/groff $opts 2>/dev/null | \
/usr/bin/iconv -f utf-8 -t ${charset_out}//translit
else
/usr/bin/iconv -f $charset_in -t utf-8 $TMPFILE | \
/usr/bin/groff $opts 2>/dev/null | \
/usr/bin/iconv -f utf-8 -t ${charset_out}//translit
2007-07-03 09:53:23 +00:00
rm -f $TMPFILE
fi
fi
# eof