#!/bin/bash

#Translates doc format
#Copyright 2001 Junichi Uekawa
#distributed under GPL version 2.
#started 2001 Sep 16 by Junichi Uekawa <dancer@debian.org>
#$Id: translate-docformat,v 1.8 2002/05/20 06:50:19 dancer Exp $
# Depends: sgmltools-lite linuxdoc-tools debiandoc-sgml w3m|lynx tetex-bin
#          texinfo texi2html docbook-dsssl jadetex 


#targets are
#  txt = text
#  html = html file
#  mhtml = multiple html files
#  texinfo = texinfo file.
#  info = info file.
#  ps = ps file
#  pdf = pdf file
#  tex = latex2e
#  rtf = rich text format

function unsupportedformaterror () {
    echo Unsupported file format has been specified. "[$1]" >&2
    exit 1;
}

SOURCE="$1"
FORMAT="$2"
test -z "$LATEX" && LATEX="latex"
SOURCEDIR=$(dirname "$SOURCE")

if [ -z "$FORMAT" ]; then
    cat <<EOF
translate-docformat is a wrapper script to translate documentation formats from
 one to another.

Usage:
  translate-docformat source-document.name format

The formats supported are :
  txt html ps dvi pdf

Not all of them is really supported.
This program tries to build the transformed documentation on
the source directory.

EOF
fi ;

case "$SOURCE" in
    *.sgml)
	# an heuristics to decide if it is a debiandoc or docbook.
	if grep "//OASIS//DTD DocBook" "$SOURCE" > /dev/null ; then
	    # docbook
	    case "$FORMAT" in
		txt)
		    sgmltools -b txt "$SOURCE"
		    ;;
		html)
		    sgmltools -b onehtml "$SOURCE"
		    ;;
		ps)
		    sgmltools -b ps "$SOURCE"
		    ;;
		dvi)
		    sgmltools -b dvi "$SOURCE"
		    ;;
		rtf)
		    sgmltools -b rtf "$SOURCE"
		    ;;
		*)
		    unsupportedformaterror "unhandled doc translation from docbook"
		    ;;
	    esac
	elif grep '<!doctype linuxdoc system' "$SOURCE" > /dev/null ; then
	    # linuxdoc
	    case "$FORMAT" in
		txt)
		    linuxdoc --backend=txt "$SOURCE"
		    ;;
		rtf)
		    linuxdoc --backend=rtf "$SOURCE"
		    ;;
		lyx)
		    linuxdoc --backend=lyx "$SOURCE"
		    ;;
		info)
		    linuxdoc --backend=info "$SOURCE"
		    ;;
		tex)
		    linuxdoc --backend=latex2e "$SOURCE"
		    ;;
		*)
		    unsupportedformaterror "unhandled doc translation from linuxdoc"
	    esac
	elif grep -i '<!doctype debiandoc system' "$SOURCE" > /dev/null || grep "//DebianDoc//DTD DebianDoc//EN" "$SOURCE" > /dev/null ; then
	    # debiandoc
	    case "$FORMAT" in
		txt)
		    debiandoc2text -- "$SOURCE"
		    ;;
		texinfo)
		    debiandoc2texinfo -- "$SOURCE"
		    ;;
		info)
		    debiandoc2info -- "$SOURCE"
		    ;;
		pdf)
		    debiandoc2latexpdf -- "$SOURCE"
		    ;;
		ps)
		    debiandoc2latexps  -- "$SOURCE"
		    ;;
		*)
		    unsupportedformaterror "Unhandled doc translation from debiandoc"
		    ;;
	    esac
	else
	    unsupportedformaterror "Not a known DTD, file a bug with your doc-header"
	fi
	;;
    *.tex)
	case "$FORMAT" in
	    dvi)
		# tip from The Debian SGML/XML HOWTO, originally from aph, I think.
		PRIOR=$(tempfile)
		PPRIOR=$(tempfile)
		cp -pf "$PRIOR" "$PPRIOR"
		cp -pf "$SOURCEDIR"/$(basename "$SOURCE".tex).aux "$PRIOR"
		RECURSION=1
		"$LATEX" "$SOURCE"
		while ! cmp "$SOURCEDIR"/$(basename "$SOURCE".tex).aux "$PRIOR" && \
		    cmp "$SOURCEDIR"/$(basename "$SOURCE".tex).aux "$PPRIOR" && \
		    test $RECURSION < 5 ; do
		  "$LATEX" "$SOURCE";
		  RECURSION=$(($RECURSION + 1))
		done
		rm -f "$PRIOR" "$PPRIOR"
		;;
	    ps)
		"$0" "$SOURCE" dvi
		"$0" "$SOURCEDIR"/$(basename "$SOURCE" .tex).dvi ps
		;;
	    pdf)
		"$0" "$SOURCE" dvi
		"$0" "$SOURCEDIR"/$(basename "$SOURCE" .tex).dvi ps
		;;
	    *)
		unsupportedformaterror "Not supported translation $FORMAT for latex"
		;;
	esac
	;;
    *.dvi)
	case "$FORMAT" in
	    ps)
		dvips "$SOURCE" -o "$SOURCEDIR"/$(basename "$SOURCE" .tex).ps
		;;
	    *)
		unsupportedformaterror "Not supported translation $FORMAT for dvi"
		;;
	esac
	;;
    *.texi)
	case "$FORMAT" in
	    dvi)
		texi2dvi "$SOURCE"
		;;
	    html)
		texi2html "$SOURCE"
		;;
	    txt)
		makeinfo  --no-headers -o  "$SOURCEDIR"/$(basename "$SOURCE" .texi).txt "$SOURCE"
		;;
	    *)
		unsupportedformaterror "Not supported translation $FORMAT for texi"
		;;
	esac
	;;
    *.xml)
	# XML file. -- assume DocBk XML
	case "$FORMAT" in
	    html)
		jade -t sgml  -V nochunks -d /usr/lib/sgml/stylesheet/dsssl/docbook/nwalsh/html/docbook.dsl \
		    /usr/lib/sgml/declaration/xml.dcl "$SOURCE" > "$SOURCEDIR"/$(basename "$SOURCE" .xml).html
		;;
	    txt)
		"$0" "$SOURCE" html
		"$0" "$SOURCEDIR"/$(basename "$SOURCE" .xml).html txt
		;;
	    jadetex)
		jade -t tex  -V tex-backend -d /usr/lib/sgml/stylesheet/dsssl/docbook/nwalsh/print/docbook.dsl \
		    /usr/lib/sgml/declaration/xml.dcl "$SOURCE" > "$SOURCEDIR"/$(basename "$SOURCE" .xml).html
		;;
	    ps)
		"$0" "$SOURCE" jadetex
		LATEX="jadetex" translate-docformat "$0" "$SOURCEDIR"/$(basename "$SOURCE" .xml).tex ps
		;;
	    *)
		unsupportedformaterror "Not supported format $FORMAT for xml"
		;;
	esac
	;;
    *.html)
	case "$FORMAT" in
	    txt)
		if [ -x /usr/bin/w3m ]; then 
		    w3m -dump -T text/html "$SOURCE" > "$SOURCEDIR"/$(basename "$SOURCE" .html).txt
		elif [ -x /usr/bin/w3mmee ]; then
		    w3mmee -dump -T text/html "$SOURCE" > "$SOURCEDIR"/$(basename "$SOURCE" .html).txt
		elif [ -x /usr/bin/lynx ]; then
		    lynx -dump -T text/html "$SOURCE" > "$SOURCEDIR"/$(basename "$SOURCE" .html).txt
		else
		    unsupportedformaterror "w3m nor lynx is available"
		    exit 1
		fi		
		;;
	    *)
		unsupportedformaterror "Not supported format $FORMAT for html"
		;;
	esac
	;;
    *)
	unsupportedformaterror "Unknown source doc format"
	;;
esac
