415 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			415 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
#! /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
 | 
						|
 | 
						|
#
 | 
						|
#
 |