415 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
		
		
			
		
	
	
			415 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
|  | #! /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 isoamsb.ent` | ||
|  | if [ "$found" = "" ] ; then | ||
|  |     found=`find /usr/share/xml -name isoamsb.ent` | ||
|  | fi | ||
|  | if [ "$found" = "" ] ; then | ||
|  |     found=`find $HOME -name isoamsb.ent` | ||
|  | fi | ||
|  | if [ "$found" = "" ] ; then | ||
|  |     found=`find /usr/local -name isoamsb.ent` | ||
|  | fi | ||
|  | if [ "$found" = "" ] ; then | ||
|  |     found=`find /usr/share/sgml -name isoamsb.ent` | ||
|  | fi | ||
|  | if [ "$found" = "" ] ; then | ||
|  |     echo could not locate isoamsb.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/isopub.ent" $CATALOG | ||
|  | xmlcatalog --noout --add "public" \ | ||
|  |     "ISO 8879:1986//ENTITIES Greek Letters//EN" \ | ||
|  |     "file://$isodir/isogrk1.ent" $CATALOG | ||
|  | xmlcatalog --noout --add "public" \ | ||
|  |     "ISO 8879:1986//ENTITIES Box and Line Drawing//EN" \ | ||
|  |     "file://$isodir/isobox.ent" $CATALOG | ||
|  | xmlcatalog --noout --add "public" \ | ||
|  |     "ISO 8879:1986//ENTITIES Greek Symbols//EN" \ | ||
|  |     "file://$isodir/isogrk3.ent" $CATALOG | ||
|  | xmlcatalog --noout --add "public" \ | ||
|  |     "ISO 8879:1986//ENTITIES Added Math Symbols: Negated Relations//EN" \ | ||
|  |     "file://$isodir/isoamsn.ent" $CATALOG | ||
|  | xmlcatalog --noout --add "public" \ | ||
|  |     "ISO 8879:1986//ENTITIES Numeric and Special Graphic//EN" \ | ||
|  |     "file://$isodir/isonum.ent" $CATALOG | ||
|  | xmlcatalog --noout --add "public" \ | ||
|  |     "ISO 8879:1986//ENTITIES Alternative Greek Symbols//EN" \ | ||
|  |     "file://$isodir/isogrk4.ent" $CATALOG | ||
|  | xmlcatalog --noout --add "public" \ | ||
|  |     "ISO 8879:1986//ENTITIES Diacritical Marks//EN" \ | ||
|  |     "file://$isodir/isodia.ent" $CATALOG | ||
|  | xmlcatalog --noout --add "public" \ | ||
|  |     "ISO 8879:1986//ENTITIES Monotoniko Greek//EN" \ | ||
|  |     "file://$isodir/isogrk2.ent" $CATALOG | ||
|  | xmlcatalog --noout --add "public" \ | ||
|  |     "ISO 8879:1986//ENTITIES Added Math Symbols: Arrow Relations//EN" \ | ||
|  |     "file://$isodir/isoamsa.ent" $CATALOG | ||
|  | xmlcatalog --noout --add "public" \ | ||
|  |     "ISO 8879:1986//ENTITIES Added Math Symbols: Ordinary//EN" \ | ||
|  |     "file://$isodir/isoamso.ent" $CATALOG | ||
|  | xmlcatalog --noout --add "public" \ | ||
|  |     "ISO 8879:1986//ENTITIES Russian Cyrillic//EN" \ | ||
|  |     "file://$isodir/isocyr1.ent" $CATALOG | ||
|  | xmlcatalog --noout --add "public" \ | ||
|  |     "ISO 8879:1986//ENTITIES General Technical//EN" \ | ||
|  |     "file://$isodir/isotech.ent" $CATALOG | ||
|  | xmlcatalog --noout --add "public" \ | ||
|  |     "ISO 8879:1986//ENTITIES Added Math Symbols: Delimiters//EN" \ | ||
|  |     "file://$isodir/isoamsc.ent" $CATALOG | ||
|  | xmlcatalog --noout --add "public" \ | ||
|  |     "ISO 8879:1986//ENTITIES Added Latin 1//EN" \ | ||
|  |     "file://$isodir/isolat1.ent" $CATALOG | ||
|  | xmlcatalog --noout --add "public" \ | ||
|  |     "ISO 8879:1986//ENTITIES Added Math Symbols: Binary Operators//EN" \ | ||
|  |     "file://$isodir/isoamsb.ent" $CATALOG | ||
|  | xmlcatalog --noout --add "public" \ | ||
|  |     "ISO 8879:1986//ENTITIES Added Latin 2//EN" \ | ||
|  |     "file://$isodir/isolat2.ent" $CATALOG | ||
|  | xmlcatalog --noout --add "public" \ | ||
|  |     "ISO 8879:1986//ENTITIES Added Math Symbols: Relations//EN" \ | ||
|  |     "file://$isodir/isoamsr.ent" $CATALOG | ||
|  | xmlcatalog --noout --add "public" \ | ||
|  |     "ISO 8879:1986//ENTITIES Non-Russian Cyrillic//EN" \ | ||
|  |     "file://$isodir/isocyr2.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 | ||
|  | 
 | ||
|  | # | ||
|  | # |