414 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			414 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 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
 | |
| 
 | |
| #
 | |
| #
 |