Edit

kc3-lang/libxml2/doc/buildDocBookCatalog

Branch :

  • Show log

    Commit

  • Author : William M. Brack
    Date : 2004-07-31 18:01:53
    Hash : 6ca9ec82
    Message : enhanced per bug 119876. Further info posted to the mailing list. * doc/buildDocBookCatalog: enhanced per bug 119876. Further info posted to the mailing list.

  • doc/buildDocBookCatalog
  • #! /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
    
    #
    #