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

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

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

## ----------------------------------------------------------------------
## print help message
function usage_message
{
    cat >&2 <<'END'
debiandoc2@@@format@@@ 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: debiandoc2@@@format@@@ [options] <filename>.sgml
options: -h               print this help message
@@@links@@@
         -L               add <link> tags
@@@endlinks@@@
@@@stdout@@@
         -O               send output to stdout instead of <filename>.@@@ext@@@
@@@endstdout@@@
         -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
@@@comment@@@
	 -m               put comments in output
@@@endcomment@@@
         -n <options>     nsgmls options to be passed on
@@@topname@@@
         -t <topname>     topname to be used
@@@endtopname@@@
@@@single@@@
         -1               generate one page
@@@endsingle@@@
END
    exit 0;
}

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

## ----------------------------------------------------------------------
## set default values
basename=''
@@@comment@@@
comment=''
@@@endcomment@@@
content=''
declaration=''
extension=''
keep=false
@@@links@@@
links=''
@@@endlinks@@@
locale=''
nsgmls=''
stdout=false
@@@topname@@@
topname=''
@@@endtopname@@@
@@@single@@@
single=''
@@@endsingle@@@

## ----------------------------------------------------------------------
## get command line options
options=':'
options="${options}h"
@@@links@@@
options="${options}L"
@@@endlinks@@@
@@@stdout@@@
options="${options}O"
@@@endstdout@@@
options="${options}b:"
options="${options}c"
options="${options}d:"
options="${options}e:"
options="${options}k"
options="${options}l:"
@@@comment@@@
options="${options}m"
@@@endcomment@@@
options="${options}n:"
@@@topname@@@
options="${options}t:"
@@@endtopname@@@
@@@single@@@
options="${options}1"
@@@endsingle@@@
while getopts ${options} opt
do
    case ${opt}
    in
	h  ) usage_message
	     ;;
@@@links@@@
	L  ) links="-${opt}"
	     ;;
@@@endlinks@@@
@@@stdout@@@
	O  ) stdout=true
	     ;;
@@@endstdout@@@
	b  ) basename="-${opt} ${OPTARG}"
	     ;;
	c  ) content="-${opt}"
	     ;;
	d  ) declaration="-${opt} ${OPTARG}"
	     ;;
	e  ) extension="-${opt} ${OPTARG}"
	     ;;
	k  ) keep=true
	     ;;
	l  ) locale="-${opt} ${OPTARG}"
	     ;;
@@@comment@@@
	m  ) comment="-${opt}"
	     ;;
@@@endcomment@@@
	n  ) nsgmls="${nsgmls} ${OPTARG}"
	     ;;
@@@topname@@@
	t  ) topname="-${opt} ${OPTARG}"
	     ;;
@@@endtopname@@@
@@@single@@@
	1  ) single="-${opt}"
	     ;;
@@@endsingle@@@
	\? ) 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 input file name
case "${1}"
in
    -   ) nsgmlsi="-"
	  if ${keep}
	  then
	      usage_error "-k not possible with input from stdin"
	  fi
@@@stdout@@@
	  stdout=true
@@@endstdout@@@
	  if ! ${stdout}
	  then
	      usage_error "stdin not allowed with debiandoc2@@@format@@@"
	  fi
	  ;;
    -?* ) nsgmlsi="./${1}"
	  ;;
    *   ) nsgmlsi="${1}"
	  ;;
esac

## ----------------------------------------------------------------------
## get basename
if [ -n "${basename}" ]
then
    bsn="$(echo ${basename} | cut -d' ' -f2- | cut -d'/' -f-1)"
else
    if [ "${nsgmlsi}" != "-" ]
    then
	bsn="$(basename ${1} .sgml)"
	basename="-b ${bsn}"
    fi
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='@@@ext@@@'
    extension="-e ${ext}"
fi
ext=".${ext}"

## ----------------------------------------------------------------------
## get declaration
if [ -n "${declaration}" ]
then
    declaration="$(echo ${declaration} | cut -d' ' -f2-)"
    if [ "$(basename ${declaration})" = "${declaration}" ]
    then
	declaration="declaration/${declaration}"
    fi
fi

## ----------------------------------------------------------------------
## construct temporary file names
tf1="${bsn}.sasp"
tf2="${bsn}.sasp-@@@format@@@"

## ----------------------------------------------------------------------
## what needs to be passed on to the backend
passing_on=''
passing_on="${passing_on} ${basename}"
@@@comment@@@
passing_on="${passing_on} ${comment}"
@@@endcomment@@@
passing_on="${passing_on} ${content}"
passing_on="${passing_on} ${extension}"
@@@links@@@
passing_on="${passing_on} ${links}"
@@@endlinks@@@
passing_on="${passing_on} ${locale}"
@@@topname@@@
passing_on="${passing_on} ${topname}"
@@@endtopname@@@
@@@single@@@
passing_on="${passing_on} ${single}"
@@@endsingle@@@

## ----------------------------------------------------------------------
## set environment
export PATH=@@@helperdir@@@:${PATH}

## ----------------------------------------------------------------------
## do the actual work
nsgmls -oline ${nsgmls} ${declaration} ${nsgmlsi} >${tf1}
saspconvert <${tf1} >${tf2}
@@@stdout@@@
if ! ${stdout}
then
    exec >${bsn}${cnt}${ext}
fi
@@@endstdout@@@
sgmlspl @@@perldir@@@/Driver.pm -f @@@format@@@ ${passing_on} <${tf2}

## ----------------------------------------------------------------------
## remove temporary files
if ! ${keep}
then
    rm -f ${tf1} ${tf2}
fi

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

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