#! /bin/bash

usage()
{
    cat <<EOF
Usage: $pname [OPTION]

Known values for OPTION are:
  --prefix=DIR        change the output directory for catalog files
                      [default $DIR]
  --show              display the output filenames and paths
  --version=x.y.z     change the DocBook version [default $VERSION]
  --debug             display script action information
  --help              display this help and exit
EOF
}

setdefault()
{
    echo Unable to update root catalog $ROOTCATALOG
    ROOTCATALOG=$HOME/xmlcatalog
    CATALOG=$HOME/dbkxmlcatalog
    DIR=$HOME
    CAT=xmlcatalog
    echo Using $ROOTCATALOG as the root catalog
    echo Remember to export XML_CATALOG_FILES=$ROOTCATALOG
    echo
    prefix=1
}

fixname()
{
#
# ROOTCATALOG contains the full pathname for the catalog.  We will
# split that into the directory name and the filename, then we will
# see if the directory exists.  If it does not, we will attempt to
# create it.
#
    if test $verbose = 1
    then
        echo Checking path $ROOTCATALOG for permissions
    fi
# First we split the filename and directory name
    CAT=`basename $ROOTCATALOG`
    DIR=`dirname $ROOTCATALOG`
    if test "$DIR" = ""
    then
        echo Unable to isolate directory name from '$ROOTCATALOG' - exiting
        exit 1
    fi
    CATALOG=${DIR}/docbook
    parent=`dirname $DIR`
    if test "$parent" == ""
    then
        parent=/
    fi
    if [ ! -d $DIR ]
    then
        if test $verbose = 1
        then
            echo Directory $DIR missing - I will try to create it
        fi
        if [ ! -w $parent ]
        then
            if test $verbose = 1
            then
                echo No write permission for directory $parent
            fi
            setdefault
        else
            newdir=1
        fi
    else
        if [ -f $ROOTCATALOG -a ! -w $ROOTCATALOG ] ||
	   [ -e $ROOTCATALOG -a ! -f $ROOTCATALOG ] ||
           [ ! -e $ROOTCATALOG  -a ! -w $DIR ]
        then
            setdefault
        fi
    fi

}
finddbx()
{
dtd421=""
s="//OASIS//DTD DocBook XML V${VERSION}//EN"
found=`find $1 -name docbookx.dtd -exec grep -l "$s" {} \;`
for dtd in $found; do
    docbookdir=`dirname $dtd`
    echo Found DocBook XML $VERSION DTD in $docbookdir
#
# The original script had a check for write permission on the file
# but I can't see why it should be necessary
#
    dtd421=$dtd
    break
done
}

#
# Preset script control params
show=0
prefix=0
newdir=0
verbose=0
#
# Isolate the script name for messages
pname=`basename $0`
VERSION=4.1.2

if test "$XML_CATALOG_FILES" != ""
then
    ROOTCATALOG=$XML_CATALOG_FILES
else
    ROOTCATALOG=/etc/xml/catalog
fi

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

    case "$1" in
    -p=* | --prefix=*)
        ROOTCATALOG=$optarg/catalog
        prefix=1
        ;;

    -s | --show)
        show=1
        ;;

    -v=* | --version=*)
        VERSION=$optarg
	;;

    -d | --debug)
        verbose=1
        ;;

    -h | --help)
        usage
	exit 0
	;;

    * )
        echo Invalid argument "$1"
	usage
        exit 1
        ;;
    esac
    shift
done
fixname
if test $prefix != 0
then
    export XML_CATALOG_FILES=$ROOTCATALOG
fi
if test $show != 0
then
    echo XML Catalog is $ROOTCATALOG
    echo Docbook Catalog is $CATALOG
    exit 0
fi
if test $newdir!=0
then
    mkdir -p $DIR
    chmod 755 $DIR
fi

echo Starting run
#
# create the catalogs root and docbook specific
#
if [ ! -r $ROOTCATALOG ] ; then
   echo creating XML Catalog root $ROOTCATALOG
   xmlcatalog --noout --create $ROOTCATALOG
fi
if [ ! -r $ROOTCATALOG ] ; then
   echo Failed creating XML Catalog root $ROOTCATALOG
   exit 1
fi
if [ ! -r $CATALOG ] ; then
   echo creating DocBook XML Catalog $CATALOG
   xmlcatalog --noout --create $CATALOG
fi
if [ ! -r $CATALOG ] ; then
   echo Failed creating DocBook XML Catalog $CATALOG
   exit 1
fi

#
# find the prefix for DocBook DTD
#
finddbx /usr/share/xml
if [ "$dtd421" = "" ] ; then
    finddbx $HOME
fi
if [ "$dtd421" = "" ] ; then
    finddbx /usr/local
fi
if [ "$dtd421" = "" ] ; then
    finddbx /usr/share/sgml
fi

if [ "$dtd421" = "" ] ; then
    echo could not locate version $VERSION of DocBook XML
    exit 1
fi

xmlcatalog --noout --add "public" \
    "-//OASIS//ELEMENTS DocBook XML Information Pool V${VERSION}//EN" \
    "file://$docbookdir/dbpoolx.mod" $CATALOG
xmlcatalog --noout --add "public" \
    "-//OASIS//DTD DocBook XML V${VERSION}//EN" \
    "file://$docbookdir/docbookx.dtd" $CATALOG
xmlcatalog --noout --add "public" \
    "-//OASIS//ENTITIES DocBook XML Character Entities V${VERSION}//EN" \
    "file://$docbookdir/dbcentx.mod" $CATALOG
xmlcatalog --noout --add "public" \
    "-//OASIS//ENTITIES DocBook XML Notations V${VERSION}//EN" \
    "file://$docbookdir/dbnotnx.mod" $CATALOG
xmlcatalog --noout --add "public" \
    "-//OASIS//ENTITIES DocBook XML Additional General Entities V${VERSION}//EN" \
    "file://$docbookdir/dbgenent.mod" $CATALOG
xmlcatalog --noout --add "public" \
    "-//OASIS//ELEMENTS DocBook XML Document Hierarchy V${VERSION}//EN" \
    "file://$docbookdir/dbhierx.mod" $CATALOG
xmlcatalog --noout --add "public" \
    "-//OASIS//DTD XML Exchange Table Model 19990315//EN" \
    "file://$docbookdir/soextblx.dtd" $CATALOG
xmlcatalog --noout --add "public" \
    "-//OASIS//DTD DocBook XML CALS Table Model V${VERSION}//EN" \
    "file://$docbookdir/calstblx.dtd" $CATALOG
xmlcatalog --noout --add "rewriteSystem" \
    "http://www.oasis-open.org/docbook/xml/${VERSION}" \
    "file://$docbookdir" $CATALOG
xmlcatalog --noout --add "rewriteURI" \
    "http://www.oasis-open.org/docbook/xml/${VERSION}" \
    "file://$docbookdir" $CATALOG

xmlcatalog --noout --add "delegatePublic" \
    "-//OASIS//ENTITIES DocBook XML" \
    "file://$CATALOG" $ROOTCATALOG
xmlcatalog --noout --add "delegatePublic" \
    "-//OASIS//DTD DocBook XML" \
    "file://$CATALOG" $ROOTCATALOG
xmlcatalog --noout --add "delegateSystem" \
    "http://www.oasis-open.org/docbook/" \
    "file://$CATALOG" $ROOTCATALOG
xmlcatalog --noout --add "delegateURI" \
    "http://www.oasis-open.org/docbook/" \
    "file://$CATALOG" $ROOTCATALOG

#
# find the prefix for ISO DocBook entities
#
top=`dirname $docbookdir`
found=`find $top -name iso-amsb.ent`
if [ "$found" = "" ] ; then
    found=`find /usr/share/xml -name iso-amsb.ent`
fi
if [ "$found" = "" ] ; then
    found=`find $HOME -name iso-amsb.ent`
fi
if [ "$found" = "" ] ; then
    found=`find /usr/local -name iso-amsb.ent`
fi
if [ "$found" = "" ] ; then
    found=`find /usr/share/sgml -name iso-amsb.ent`
fi
if [ "$found" = "" ] ; then
    echo could not locate iso-amsb.ent of ISO DocBook entities
    exit 1
fi

entxml=""
for tst in $found; do
    check=`grep '<!ENTITY ominus."\&#x2296;">' $tst`
    if [ "$check" != "" ] ; then
        entxml=$tst
        break
    fi
done

if [ "$entxml" = "" ] ; then
    echo could not locate ISO DocBook entities
    exit 1
fi
isodir=`dirname $entxml`
echo Found ISO DocBook entities in $isodir

xmlcatalog --noout --add "public" \
    "ISO 8879:1986//ENTITIES Publishing//EN" \
    "file://$isodir/iso-pub.ent" $CATALOG
xmlcatalog --noout --add "public" \
    "ISO 8879:1986//ENTITIES Greek Letters//EN" \
    "file://$isodir/iso-grk1.ent" $CATALOG
xmlcatalog --noout --add "public" \
    "ISO 8879:1986//ENTITIES Box and Line Drawing//EN" \
    "file://$isodir/iso-box.ent" $CATALOG
xmlcatalog --noout --add "public" \
    "ISO 8879:1986//ENTITIES Greek Symbols//EN" \
    "file://$isodir/iso-grk3.ent" $CATALOG
xmlcatalog --noout --add "public" \
    "ISO 8879:1986//ENTITIES Added Math Symbols: Negated Relations//EN" \
    "file://$isodir/iso-amsn.ent" $CATALOG
xmlcatalog --noout --add "public" \
    "ISO 8879:1986//ENTITIES Numeric and Special Graphic//EN" \
    "file://$isodir/iso-num.ent" $CATALOG
xmlcatalog --noout --add "public" \
    "ISO 8879:1986//ENTITIES Alternative Greek Symbols//EN" \
    "file://$isodir/iso-grk4.ent" $CATALOG
xmlcatalog --noout --add "public" \
    "ISO 8879:1986//ENTITIES Diacritical Marks//EN" \
    "file://$isodir/iso-dia.ent" $CATALOG
xmlcatalog --noout --add "public" \
    "ISO 8879:1986//ENTITIES Monotoniko Greek//EN" \
    "file://$isodir/iso-grk2.ent" $CATALOG
xmlcatalog --noout --add "public" \
    "ISO 8879:1986//ENTITIES Added Math Symbols: Arrow Relations//EN" \
    "file://$isodir/iso-amsa.ent" $CATALOG
xmlcatalog --noout --add "public" \
    "ISO 8879:1986//ENTITIES Added Math Symbols: Ordinary//EN" \
    "file://$isodir/iso-amso.ent" $CATALOG
xmlcatalog --noout --add "public" \
    "ISO 8879:1986//ENTITIES Russian Cyrillic//EN" \
    "file://$isodir/iso-cyr1.ent" $CATALOG
xmlcatalog --noout --add "public" \
    "ISO 8879:1986//ENTITIES General Technical//EN" \
    "file://$isodir/iso-tech.ent" $CATALOG
xmlcatalog --noout --add "public" \
    "ISO 8879:1986//ENTITIES Added Math Symbols: Delimiters//EN" \
    "file://$isodir/iso-amsc.ent" $CATALOG
xmlcatalog --noout --add "public" \
    "ISO 8879:1986//ENTITIES Added Latin 1//EN" \
    "file://$isodir/iso-lat1.ent" $CATALOG
xmlcatalog --noout --add "public" \
    "ISO 8879:1986//ENTITIES Added Math Symbols: Binary Operators//EN" \
    "file://$isodir/iso-amsb.ent" $CATALOG
xmlcatalog --noout --add "public" \
    "ISO 8879:1986//ENTITIES Added Latin 2//EN" \
    "file://$isodir/iso-lat2.ent" $CATALOG
xmlcatalog --noout --add "public" \
    "ISO 8879:1986//ENTITIES Added Math Symbols: Relations//EN" \
    "file://$isodir/iso-amsr.ent" $CATALOG
xmlcatalog --noout --add "public" \
    "ISO 8879:1986//ENTITIES Non-Russian Cyrillic//EN" \
    "file://$isodir/iso-cyr2.ent" $CATALOG

xmlcatalog --noout --add "delegatePublic" \
    "ISO 8879:1986" \
    "file://$CATALOG" $ROOTCATALOG

#
# find the prefix for XSLT stylesheets
#
top=`dirname $docbookdir`
found=`find $top -name chunk.xsl`
if [ "$found" = "" ] ; then
    found=`find /usr/share/xml -name chunk.xsl`
fi
if [ "$found" = "" ] ; then
    found=`find $HOME -name chunk.xsl`
fi
if [ "$found" = "" ] ; then
    found=`find /usr/local -name chunk.xsl`
fi
if [ "$found" = "" ] ; then
    found=`find /usr/share/sgml -name chunk.xsl`
fi
if [ "$found" = "" ] ; then
    echo could not locate chunk-common.xsl of DocBook XSLT stylesheets
    exit 1
fi

xsldir=""
for tst in $found; do
    dir=`dirname $tst`
    dir=`dirname $dir`
    if [ -r $dir/html/docbook.xsl -a -r $dir/common/l10n.xml ]; then
        xsldir=$dir
        break
    fi
done

if [ "$xsldir" = "" ] ; then
    echo could not locate DocBook XSLT stylesheets
    exit 1
fi
echo Found DocBook XSLT stylesheets in $xsldir
for version in current 1.39 1.40 1.41 1.42 1.43 1.44 1.45 1.46 1.47 \
               1.48 1.49 1.50
do
    xmlcatalog --noout --add "rewriteSystem" \
	"http://docbook.sourceforge.net/release/xsl/$version" \
	"file://$xsldir" $CATALOG
    xmlcatalog --noout --add "rewriteURI" \
	"http://docbook.sourceforge.net/release/xsl/$version" \
	"file://$xsldir" $CATALOG
done

xmlcatalog --noout --add "delegateSystem" \
    "http://docbook.sourceforge.net/release/xsl/" \
    "file://$CATALOG" $ROOTCATALOG
xmlcatalog --noout --add "delegateURI" \
    "http://docbook.sourceforge.net/release/xsl/" \
    "file://$CATALOG" $ROOTCATALOG

#
#
