You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
414 lines
11 KiB
414 lines
11 KiB
#! /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 |
|
|
|
# |
|
#
|
|
|