#! /bin/sh

## Customized version of db2html to make it easier to use alternate
## stylesheets.  Some versions of db2html support a '-d' option to
## specify this, but not all.  We'll explicitly specify that here.
##
## John R. Sheets <jsheets@codeweavers.com>

## The DocBook installations behave differently for the various Linux
## distributions.  Try to make some sense out of it all....
##
## $LINUXDIST holds the name of the distribution
## $JADETAG adds "/#html" to the stylesheet-specification in the Jade
##          command line (see comments below), if necessary for that dist.

LINUXDIST="Generic"
JADEPROG="jade"
JADETAG=

if [ -f /etc/debian_version ]; then
  LINUXDIST="Debian"
  JADEPROG="jade"
  JADETAG=\#html
fi

if [ -f /etc/redhat_release ]; then
  LINUXDIST="Redhat"
  JADEPROG="jade"
  JADETAG=
fi

if [ -f /usr/bin/crux ]; then
	LINUXDIST="Crux"
	JADEPROG="openjade"
	JADETAG=
fi

## FIXME: Add more distributions here...

if [ -n "$LINUXDIST" ]; then
  echo "Using db2html parameters for a $LINUXDIST Linux distribution..."
fi

## Use included default.dsl DSSSL stylesheet unless explicitly overridden with
## the $WINEDOC_STYLESHEET envar.
##
## NOTE: The invoked DSSSL stylesheet *MUST* have an HTML-specific section
## in it; otherwise, jade will spew everything to stdout and fail to use
## the stated stylesheet.  Something like this:
##
##   <style-specification id="html" use="docbook">
if [ -z "$WINEDOC_STYLESHEET" ]; then
  DB_STYLESHEET=../default.dsl
else
  DB_STYLESHEET=$WINEDOC_STYLESHEET
fi

output=db2html-dir
TMPDIR=DBTOHTML_OUTPUT_DIR$$

echo TMPDIR is $TMPDIR

echo "Using stylesheet: \"${DB_STYLESHEET}\""

if [ $# -gt 2 ]
then
  echo "Usage: `basename $0` [filename.sgml]" >&2
  exit 1
fi

if [ $# -eq 1 ]
then
  if [ ! -r $1 ]
  then
    echo Cannot read \"$1\".  Exiting. >&2
    exit 1
  fi
  if echo $1 | egrep -i '\.sgml$|\.sgm$' >/dev/null 2>&1
  then
    # now make sure that the output directory is always a subdirectory
    # of the current directory
    input_file=`basename $1`
    output="`echo $input_file | sed 's,\.sgml$,,;s,\.sgm$,,'`"
    echo "input file was called $input_file -- output will be in $output"
    echo
  fi
fi

mkdir $TMPDIR
SAVE_PWD=`pwd`
if [ $1 = `basename $1` ]; then
  EXTRA_PATH=../
else
  EXTRA_PATH=
fi

JADE_CMD="$JADEPROG -t sgml -ihtml -d ${DB_STYLESHEET}${JADETAG} ${EXTRA_PATH}$1"
echo "Invoking command '$JADE_CMD'"
echo

echo "working on ${EXTRA_PATH}$1"
(cd $TMPDIR; $JADE_CMD; cd $SAVE_PWD)

if [ $# -eq 1 ]
then
  if [ -d "${output}.junk" ]
  then
    /bin/rm -rf "${output}.junk"
  fi
  if [ -d "${output}" ]
  then
    mv "$output" "${output}.junk"
  fi
  echo "about to rename temporary directory to $output"
  mv "${TMPDIR}" "$output"
else
  cat "$TMPDIR"/*
fi

rm -rf "$TMPDIR"

exit 0
