#!/bin/sh

wv_script_name="$0"

which latex >/dev/null 2>&1
if [ ${?} -ne "0" ]; then
  echo "Could not find required program 'latex'"
  exit 1
fi

which dvips >/dev/null 2>&1
if [ ${?} -ne "0" ]; then
  echo "Could not find required program 'dvips'"
  exit 1
fi

distiller="none"
which distill >/dev/null 2>&1
if [ ${?} -ne "0" ]; then
  which ps2pdf >/dev/null 2>&1
  if [ ${?} -ne "0" ]; then
    distiller="none"
  else
    distiller="ps2pdf"
  fi
else
  distiller="distill"
fi

if test "$distiller" = "none"; then
  echo "Could not find required program(s) 'distill' or 'ps2pdf'"
  exit 1
fi

prefix=/usr/pkg
exec_prefix=
datadir=
t_dir=.

wv_opts=
i_file=
o_file=
print_help=no

while test $# -gt 0; do
  case "$1" in
  -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
  *) optarg= ;;
  esac

  case $1 in
    --prefix=*)
      prefix=$optarg
      ;;
    --exec-prefix=*)
      exec_prefix=$optarg
      ;;
    --datadir=*)
      datadir=$optarg
      ;;
    --targetdir=*)
      t_dir=$optarg
      ;;
    --charset=* | --password=*)
      wv_opts="$wv_opts $1"
      ;;
    -v | --version)
      echo 1.2.9
      exit 0
      ;;
    -\? | -h | --help)
      cat << EOF
Usage: $wv_script_name [OPTIONS] <input-file> <output-file>
Options:
      --prefix=<DIR>        Set prefix (default is /usr/pkg)
      --exec-prefix=<DIR>   Set exec_prefix (default is ${prefix})
      --datadir=<DIR>       Set datadir (default is ${prefix}/share)
      --targetdir=<DIR>     Target directory (target is <DIR>/<output-file>)
      --charset=<charset>   Specify an iconv charset encoding
      --password=<password> Specify password for encrypted
  -v, --version             Print version info and exit

Authors:
  Dom Lachowicz (dominicl@seas.upenn.edu)
  Caolan McNamara (original author)
Visit http://www.wvware.com/
EOF
      exit 0
      ;;
    -?*)
      echo "Option '$1' not recognized."
      exit 1
      ;;
    *)
      if test "x$i_file" = "x"; then
        i_file=$1
      elif test "x$o_file" = "x"; then
        o_file=$1
      else
        echo "Option '$1' not recognized."
        exit 1
      fi
      ;;
  esac
  shift
done

if test "x$i_file" = "x-"; then
  echo "error: cannot specify '-' as input"
  exit 1
fi
if test -r "$i_file"; then
  okay=yes
else
  echo "error: '$i_file' unreadable"
  exit 1
fi

if test "x$o_file" = "x"; then
  echo "Usage: $1 [OPTIONS] <input-file> <output-file>"
  exit 1
fi
if test "x$i_file" = "x-"; then
  echo "error: cannot specify '-' as output"
  exit 1
fi
name=`basename "$o_file"`
if test "x$o_file" != "x$name"; then
  t_dir=`dirname "$o_file"`
  o_file=$name
fi
name=`basename "$o_file" | sed "s/ /_/g"`
name=`echo $name | sed 's/\.[^\.]*$//'`

if test "x$exec_prefix" = "x"; then
  exec_prefix=${prefix}
fi
wv_exec="$exec_prefix/bin/wvWare"
if test -x "$wv_exec"; then
  okay=yes
else
  wv_version=`wvWare -v 2>&1 | cut -f 2 -d " "`
  if test "x$wv_version" = "x1.2.9"; then
    wv_exec="wvWare"
  else
    echo "error: no executable at '$wv_exec' or in path"
    exit 1
  fi
fi

if test "x$datadir" = "x"; then
  datadir=${prefix}/share
fi
xmlcfg="$datadir/wv/wvLaTeX.xml"
if test -r "$xmlcfg"; then
  okay=yes
else
  echo "error: '$xmlcfg' unreadable"
  exit 1
fi

if test -d "$t_dir"; then
  if test -w "$t_dir"; then
    okay=yes
  else
    echo "error: '$t_dir' is not writable"
    exit 1
  fi
else
  echo "error: '$t_dir' is not a directory"
  exit 1
fi

# auto_wmf=`"$wv_exec" --auto-eps=wmf`
# auto_emf=`"$wv_exec" --auto-eps=emf`
# auto_png=`"$wv_exec" --auto-eps=png`
# auto_jpg=`"$wv_exec" --auto-eps=jpg`
# auto_pict=`"$wv_exec" --auto-eps=pict`

im_chk=`convert --help 2>&1 | grep -v ImageMagick`
if test "x$im_chk" = "x"; then
  im_chk="no"
  s_img=""
else
  im_chk="yes"
# if we have ImageMagick's convert, then use that to convert PNG, JPEG & PICT
# to EPS. Therefore, need to suppress wvWare's desire to convert these:
  s_img="png,jpg,pict"
fi

"$wv_exec" $wv_opts -x "$xmlcfg" -d "$t_dir" -b "$name" "$i_file" -s "$s_img" > "$t_dir"/"$name".tex

cd "$t_dir"

echo
echo 'Current directory: '`pwd`

# First, convert any images

i_okay=yes

for i_name in "$name"*.wmf; do
  if test -r "$i_name"; then
    e_name=`echo "$i_name" | sed 's/wmf$/eps/'`
    if test -r "$e_name"; then
      echo '"'$e_name'"' exists - skipping...
    else
      if test "$im_chk" = "yes"; then
        convert "$i_name" "$e_name"
        if test -r "$e_name"; then
          echo created '"'$e_name'"'
        else
          echo '"'$i_name'"': conversion failed
          i_okay=no
        fi
      else
        echo unable to convert '"'$i_name'"' '(no converter)'
        i_okay=no
      fi
    fi
  fi
done

for i_name in "$name"*.emf; do
  if test -r "$i_name"; then
    e_name=`echo "$i_name" | sed 's/emf$/eps/'`
    if test -r "$e_name"; then
      echo '"'$e_name'"' exists - skipping...
    else
      echo unable to convert '"'$i_name'"' '(no converter)'
      i_okay=no
    fi
  fi
done

for i_name in "$name"*.png; do
  if test -r "$i_name"; then
    e_name=`echo "$i_name" | sed 's/png$/eps/'`
    if test -r "$e_name"; then
      echo '"'$e_name'"' exists - skipping...
    else
      if test "$im_chk" = "yes"; then
        convert "$i_name" "$e_name"
        if test -r "$e_name"; then
          echo created '"'$e_name'"'
        else
          echo '"'$i_name'"': conversion failed
          i_okay=no
        fi
      else
        echo unable to convert '"'$i_name'"' '(no converter)'
        i_okay=no
      fi
    fi
  fi
done

for i_name in "$name"*.jpg; do
  if test -r "$i_name"; then
    e_name=`echo "$i_name" | sed 's/jpg$/eps/'`
    if test -r "$e_name"; then
      echo '"'$e_name'"' exists - skipping...
    else
      if test "$im_chk" = "yes"; then
        convert "$i_name" "$e_name"
        if test -r "$e_name"; then
          echo created '"'$e_name'"'
        else
          echo '"'$i_name'"': conversion failed
          i_okay=no
        fi
      else
        echo unable to convert '"'$i_name'"' '(no converter)'
        i_okay=no
      fi
    fi
  fi
done

for i_name in "$name"*.pict; do
  if test -r "$i_name"; then
    e_name=`echo "$i_name" | sed 's/pict$/eps/'`
    if test -r "$e_name"; then
      echo '"'$e_name'"' exists - skipping...
    else
      if test "$im_chk" = "yes"; then
        convert "$i_name" "$e_name"
        if test -r "$e_name"; then
          echo created '"'$e_name'"'
        else
          echo '"'$i_name'"': conversion failed
          i_okay=no
        fi
      else
        echo unable to convert '"'$i_name'"' '(no converter)'
        i_okay=no
      fi
    fi
  fi
done

if test "$i_okay" = "no"; then
  echo 'WARNING: Failed to convert one or more images to EPS'
fi

# "$name".tex is the LaTeX file
# use latex to convert this to DVI

latex --interaction=batchmode "$name".tex >/dev/null 2>&1

# check latex exit status and comment or clean up
if [ ${?} -ne "0" ]; then
	echo "Some problem running latex."
	echo "Check for Errors in $name.log"
	echo "Continuing..."
else
	rm -f "$name".aux "$name".log "$name".tex
fi

# latex replaces the "tex" extension with a "dvi" extension
if [ ! -f "$name".dvi ]; then
	echo "Conversion into dvi failed"
	exit 1
fi

dvips -o "$name".ps "$name".dvi >/dev/null 2>&1
if [ ${?} -ne "0" ]; then
	echo "Could not convert into Postscript"
	exit 1
fi

#clean up
rm -f "$name".dvi

if test "$distiller" = "distill"; then
  distill "$name".ps >/dev/null 2>&1
else
  ps2pdf "$name".ps "$name".ps.pdf >/dev/null 2>&1
fi
if [ ${?} -ne "0" ]; then
	echo "Could not convert into PDF"
	exit 1
fi

cp -f "$name".ps.pdf "$o_file"

#clean up
rm -f "$name".ps "$name".ps.log "$name".ps.pdf
