#! /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."\⊖">' $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 # #