#!/bin/bash
## ----------------------------------------------------------------------

## ----------------------------------------------------------------------
## exit on erroneous subcommand
set -e

## ----------------------------------------------------------------------
## get script name
script=$(basename ${0})

## ----------------------------------------------------------------------
## print help message
function usage_message
{
    cat >&2 <<'END'
debiandoc2ps version 1.1

Copyright (C) 1998-2004 Ardo van Rangelrooij
Copyright (C) 1996 Ian Jackson

This is free software; see the GNU General Public Licence
version 2 or later for copying conditions.  There is NO warranty.

usage: debiandoc2ps [options] <filename>.sgml
options: -h               print this help message
         -O               send output to stdout instead of <filename>.ps
         -b <basename>    basename to be used
         -c               use content-negotiation
         -d <declaration> SGML declaration to be used
         -e <extension>   extension to be used
         -k               keep intermediate files
         -l <locale>      locale to be used
         -n <options>     nsgmls options to be passed on
         -p <papersize>   paper size to be used
         -v               be verbose
         -1               1 page per page
END
    exit 0;
}

## ----------------------------------------------------------------------
## print error message
function usage_error
{
    echo >&2 "${script}: ${@}";
    exit 2;
}

## ----------------------------------------------------------------------
## set default values
basename=''
content=''
declaration=''
extension=''
keep=false
keepopt=''
locale=''
nsgmls=''
paper=''
single=true
stdout=false
verbose=false
verboseopt=''

## ----------------------------------------------------------------------
## get command line options
options=':'
options="${options}h"
options="${options}O"
options="${options}b:"
options="${options}c"
options="${options}d:"
options="${options}e:"
options="${options}k"
options="${options}l:"
options="${options}n:"
options="${options}p:"
options="${options}v"
options="${options}1"
while getopts ${options} opt
do
    case ${opt}
    in
	h  ) usage_message
	     ;;
	O  ) stdout=true;
	     ;;
	b  ) basename="-${opt} ${OPTARG}"
	     ;;
	c  ) content="-${opt}"
	     ;;
	d  ) declaration="-${opt} ${OPTARG}"
	     ;;
	e  ) extension="-${opt} ${OPTARG}"
	     ;;
	k  ) keep=true
	     keepopt="-${opt}"
	     ;;
	l  ) locale="-${opt} ${OPTARG}"
	     ;;
	n  ) nsgmls="-${opt} ${OPTARG} ${nsgmls}"
	     ;;
	p  ) paper="-${opt} ${OPTARG}"
	     ;;
	v  ) verbose=true
	     verboseopt="-${opt}"
	     ;;
	1  ) single=true
	     ;;
	\? ) usage_error "unknown option \`${OPTARG}'"
	     ;;
    esac
done
shift $((${OPTIND} - 1))

## ----------------------------------------------------------------------
## check remaining command line options
if [ ${#} -ne 1 ]
then
    usage_error "need exactly one input filename"
fi

## ----------------------------------------------------------------------
## get basename
if [ -n "${basename}" ]
then
    bsn="$(echo ${basename} | cut -d' ' -f2- | cut -d'/' -f-1)"
else
    bsn="$(basename ${1} .sgml)"
fi
case "${bsn}"
in
    -* ) bsn="./${bsn}"
	 ;;
esac

## ----------------------------------------------------------------------
## get content-negotiation
cnt=''
if [ -n "${content}" ]
then
    if [ -n "${locale}" ]
    then
	cnt="$(echo ${locale} | cut -d' ' -f2-)"
    else
	cnt='en'
    fi
    cnt=".${cnt}"
fi

## ----------------------------------------------------------------------
## get extension
if [ -n "${extension}" ]
then
    ext="$(echo ${extension} | cut -d' ' -f2-)"
else
    ext='ps'
fi
ext=".${ext}"

## ----------------------------------------------------------------------
## what needs to be passed on to the backend
passing_on=''
passing_on="${passing_on} ${basename}"
passing_on="${passing_on} ${declaration}"
passing_on="${passing_on} ${keepopt}"
passing_on="${passing_on} ${locale}"
passing_on="${passing_on} ${nsgmls}"
passing_on="${passing_on} ${paper}"
passing_on="${passing_on} ${verboseopt}"

## ----------------------------------------------------------------------
## do the actual work
if ! ( ${verbose} || exec >/dev/null 2>&1;
       debiandoc2latexps ${passing_on} ${1} )
then
    echo -n >&2 "${script}: ERROR: "
    if ${stdout}
    then
	echo -n >&2 "output"
    else
	echo -n >&2 "${bsn}${cnt}${ext}"
    fi
    echo >&2 " could not be generated properly"
    if ! ${verbose}
    then
	echo >&2 "${script}: rerun with the -v option to found out why"
    fi
    exit 1
fi
if ${stdout}
then
    cat ${bsn}.ps
    if ! ${keep}
    then
	rm -f ${bsn}.ps
    fi
else
    if [ -n "${content}" ] || [ -n "${extension}" ]
    then
    	mv -f ${bsn}.ps ${bsn}${cnt}${ext}
    fi
fi

## ----------------------------------------------------------------------
exit 0

## ----------------------------------------------------------------------
