#!/bin/bash
# Emulate nroff with groff.

prog="$0"
charset_in=iso-8859-1
charset_out=`locale charmap 2>/dev/null`
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


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)
      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

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

if [ $TMPFILE = buf ]; then
  echo -n "$buf" | iconv -f utf-8 -t utf-8 &>/dev/null && charset_in=utf-8
else
  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.

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

    rm -f $TMPFILE
  fi
fi
 
# eof
