1#! /bin/bash
2
3usage()
4{
5    cat <<EOF
6Usage: $pname [OPTION]
7
8Known values for OPTION are:
9  --prefix=DIR        change the output directory for catalog files
10                      [default $DIR]
11  --show              display the output filenames and paths
12  --version=x.y.z     change the DocBook version [default $VERSION]
13  --debug             display script action information
14  --help              display this help and exit
15EOF
16}
17
18setdefault()
19{
20    echo Unable to update root catalog $ROOTCATALOG
21    ROOTCATALOG=$HOME/xmlcatalog
22    CATALOG=$HOME/dbkxmlcatalog
23    DIR=$HOME
24    CAT=xmlcatalog
25    echo Using $ROOTCATALOG as the root catalog
26    echo Remember to export XML_CATALOG_FILES=$ROOTCATALOG
27    echo
28    prefix=1
29}
30
31fixname()
32{
33#
34# ROOTCATALOG contains the full pathname for the catalog.  We will
35# split that into the directory name and the filename, then we will
36# see if the directory exists.  If it does not, we will attempt to
37# create it.
38#
39    if test $verbose = 1
40    then
41        echo Checking path $ROOTCATALOG for permissions
42    fi
43# First we split the filename and directory name
44    CAT=`basename $ROOTCATALOG`
45    DIR=`dirname $ROOTCATALOG`
46    if test "$DIR" = ""
47    then
48        echo Unable to isolate directory name from '$ROOTCATALOG' - exiting
49        exit 1
50    fi
51    CATALOG=${DIR}/docbook
52    parent=`dirname $DIR`
53    if test "$parent" == ""
54    then
55        parent=/
56    fi
57    if [ ! -d $DIR ]
58    then
59        if test $verbose = 1
60        then
61            echo Directory $DIR missing - I will try to create it
62        fi
63        if [ ! -w $parent ]
64        then
65            if test $verbose = 1
66            then
67                echo No write permission for directory $parent
68            fi
69            setdefault
70        else
71            newdir=1
72        fi
73    else
74        if [ -f $ROOTCATALOG -a ! -w $ROOTCATALOG ] ||
75	   [ -e $ROOTCATALOG -a ! -f $ROOTCATALOG ] ||
76           [ ! -e $ROOTCATALOG  -a ! -w $DIR ]
77        then
78            setdefault
79        fi
80    fi
81
82}
83finddbx()
84{
85dtd421=""
86s="//OASIS//DTD DocBook XML V${VERSION}//EN"
87found=`find $1 -name docbookx.dtd -exec grep -l "$s" {} \;`
88for dtd in $found; do
89    docbookdir=`dirname $dtd`
90    echo Found DocBook XML $VERSION DTD in $docbookdir
91#
92# The original script had a check for write permission on the file
93# but I can't see why it should be necessary
94#
95    dtd421=$dtd
96    break
97done
98}
99
100#
101# Preset script control params
102show=0
103prefix=0
104newdir=0
105verbose=0
106#
107# Isolate the script name for messages
108pname=`basename $0`
109VERSION=4.1.2
110
111if test "$XML_CATALOG_FILES" != ""
112then
113    ROOTCATALOG=$XML_CATALOG_FILES
114else
115    ROOTCATALOG=/etc/xml/catalog
116fi
117
118#
119# Interpret script parameters
120while test $# -gt 0; do
121    case "$1" in
122    -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
123    *) optarg= ;;
124    esac
125
126    case "$1" in
127    -p=* | --prefix=*)
128        ROOTCATALOG=$optarg/catalog
129        prefix=1
130        ;;
131
132    -s | --show)
133        show=1
134        ;;
135
136    -v=* | --version=*)
137        VERSION=$optarg
138	;;
139
140    -d | --debug)
141        verbose=1
142        ;;
143
144    -h | --help)
145        usage
146	exit 0
147	;;
148
149    * )
150        echo Invalid argument "$1"
151	usage
152        exit 1
153        ;;
154    esac
155    shift
156done
157fixname
158if test $prefix != 0
159then
160    export XML_CATALOG_FILES=$ROOTCATALOG
161fi
162if test $show != 0
163then
164    echo XML Catalog is $ROOTCATALOG
165    echo Docbook Catalog is $CATALOG
166    exit 0
167fi
168if test $newdir!=0
169then
170    mkdir -p $DIR
171    chmod 755 $DIR
172fi
173
174echo Starting run
175#
176# create the catalogs root and docbook specific
177#
178if [ ! -r $ROOTCATALOG ] ; then
179   echo creating XML Catalog root $ROOTCATALOG
180   xmlcatalog --noout --create $ROOTCATALOG
181fi
182if [ ! -r $ROOTCATALOG ] ; then
183   echo Failed creating XML Catalog root $ROOTCATALOG
184   exit 1
185fi
186if [ ! -r $CATALOG ] ; then
187   echo creating DocBook XML Catalog $CATALOG
188   xmlcatalog --noout --create $CATALOG
189fi
190if [ ! -r $CATALOG ] ; then
191   echo Failed creating DocBook XML Catalog $CATALOG
192   exit 1
193fi
194
195#
196# find the prefix for DocBook DTD
197#
198finddbx /usr/share/xml
199if [ "$dtd421" = "" ] ; then
200    finddbx $HOME
201fi
202if [ "$dtd421" = "" ] ; then
203    finddbx /usr/local
204fi
205if [ "$dtd421" = "" ] ; then
206    finddbx /usr/share/sgml
207fi
208
209if [ "$dtd421" = "" ] ; then
210    echo could not locate version $VERSION of DocBook XML
211    exit 1
212fi
213
214xmlcatalog --noout --add "public" \
215    "-//OASIS//ELEMENTS DocBook XML Information Pool V${VERSION}//EN" \
216    "file://$docbookdir/dbpoolx.mod" $CATALOG
217xmlcatalog --noout --add "public" \
218    "-//OASIS//DTD DocBook XML V${VERSION}//EN" \
219    "file://$docbookdir/docbookx.dtd" $CATALOG
220xmlcatalog --noout --add "public" \
221    "-//OASIS//ENTITIES DocBook XML Character Entities V${VERSION}//EN" \
222    "file://$docbookdir/dbcentx.mod" $CATALOG
223xmlcatalog --noout --add "public" \
224    "-//OASIS//ENTITIES DocBook XML Notations V${VERSION}//EN" \
225    "file://$docbookdir/dbnotnx.mod" $CATALOG
226xmlcatalog --noout --add "public" \
227    "-//OASIS//ENTITIES DocBook XML Additional General Entities V${VERSION}//EN" \
228    "file://$docbookdir/dbgenent.mod" $CATALOG
229xmlcatalog --noout --add "public" \
230    "-//OASIS//ELEMENTS DocBook XML Document Hierarchy V${VERSION}//EN" \
231    "file://$docbookdir/dbhierx.mod" $CATALOG
232xmlcatalog --noout --add "public" \
233    "-//OASIS//DTD XML Exchange Table Model 19990315//EN" \
234    "file://$docbookdir/soextblx.dtd" $CATALOG
235xmlcatalog --noout --add "public" \
236    "-//OASIS//DTD DocBook XML CALS Table Model V${VERSION}//EN" \
237    "file://$docbookdir/calstblx.dtd" $CATALOG
238xmlcatalog --noout --add "rewriteSystem" \
239    "http://www.oasis-open.org/docbook/xml/${VERSION}" \
240    "file://$docbookdir" $CATALOG
241xmlcatalog --noout --add "rewriteURI" \
242    "http://www.oasis-open.org/docbook/xml/${VERSION}" \
243    "file://$docbookdir" $CATALOG
244
245xmlcatalog --noout --add "delegatePublic" \
246    "-//OASIS//ENTITIES DocBook XML" \
247    "file://$CATALOG" $ROOTCATALOG
248xmlcatalog --noout --add "delegatePublic" \
249    "-//OASIS//DTD DocBook XML" \
250    "file://$CATALOG" $ROOTCATALOG
251xmlcatalog --noout --add "delegateSystem" \
252    "http://www.oasis-open.org/docbook/" \
253    "file://$CATALOG" $ROOTCATALOG
254xmlcatalog --noout --add "delegateURI" \
255    "http://www.oasis-open.org/docbook/" \
256    "file://$CATALOG" $ROOTCATALOG
257
258#
259# find the prefix for ISO DocBook entities
260#
261top=`dirname $docbookdir`
262found=`find $top -name iso-amsb.ent`
263if [ "$found" = "" ] ; then
264    found=`find /usr/share/xml -name iso-amsb.ent`
265fi
266if [ "$found" = "" ] ; then
267    found=`find $HOME -name iso-amsb.ent`
268fi
269if [ "$found" = "" ] ; then
270    found=`find /usr/local -name iso-amsb.ent`
271fi
272if [ "$found" = "" ] ; then
273    found=`find /usr/share/sgml -name iso-amsb.ent`
274fi
275if [ "$found" = "" ] ; then
276    echo could not locate iso-amsb.ent of ISO DocBook entities
277    exit 1
278fi
279
280entxml=""
281for tst in $found; do
282    check=`grep '<!ENTITY ominus."\&#x2296;">' $tst`
283    if [ "$check" != "" ] ; then
284        entxml=$tst
285        break
286    fi
287done
288
289if [ "$entxml" = "" ] ; then
290    echo could not locate ISO DocBook entities
291    exit 1
292fi
293isodir=`dirname $entxml`
294echo Found ISO DocBook entities in $isodir
295
296xmlcatalog --noout --add "public" \
297    "ISO 8879:1986//ENTITIES Publishing//EN" \
298    "file://$isodir/iso-pub.ent" $CATALOG
299xmlcatalog --noout --add "public" \
300    "ISO 8879:1986//ENTITIES Greek Letters//EN" \
301    "file://$isodir/iso-grk1.ent" $CATALOG
302xmlcatalog --noout --add "public" \
303    "ISO 8879:1986//ENTITIES Box and Line Drawing//EN" \
304    "file://$isodir/iso-box.ent" $CATALOG
305xmlcatalog --noout --add "public" \
306    "ISO 8879:1986//ENTITIES Greek Symbols//EN" \
307    "file://$isodir/iso-grk3.ent" $CATALOG
308xmlcatalog --noout --add "public" \
309    "ISO 8879:1986//ENTITIES Added Math Symbols: Negated Relations//EN" \
310    "file://$isodir/iso-amsn.ent" $CATALOG
311xmlcatalog --noout --add "public" \
312    "ISO 8879:1986//ENTITIES Numeric and Special Graphic//EN" \
313    "file://$isodir/iso-num.ent" $CATALOG
314xmlcatalog --noout --add "public" \
315    "ISO 8879:1986//ENTITIES Alternative Greek Symbols//EN" \
316    "file://$isodir/iso-grk4.ent" $CATALOG
317xmlcatalog --noout --add "public" \
318    "ISO 8879:1986//ENTITIES Diacritical Marks//EN" \
319    "file://$isodir/iso-dia.ent" $CATALOG
320xmlcatalog --noout --add "public" \
321    "ISO 8879:1986//ENTITIES Monotoniko Greek//EN" \
322    "file://$isodir/iso-grk2.ent" $CATALOG
323xmlcatalog --noout --add "public" \
324    "ISO 8879:1986//ENTITIES Added Math Symbols: Arrow Relations//EN" \
325    "file://$isodir/iso-amsa.ent" $CATALOG
326xmlcatalog --noout --add "public" \
327    "ISO 8879:1986//ENTITIES Added Math Symbols: Ordinary//EN" \
328    "file://$isodir/iso-amso.ent" $CATALOG
329xmlcatalog --noout --add "public" \
330    "ISO 8879:1986//ENTITIES Russian Cyrillic//EN" \
331    "file://$isodir/iso-cyr1.ent" $CATALOG
332xmlcatalog --noout --add "public" \
333    "ISO 8879:1986//ENTITIES General Technical//EN" \
334    "file://$isodir/iso-tech.ent" $CATALOG
335xmlcatalog --noout --add "public" \
336    "ISO 8879:1986//ENTITIES Added Math Symbols: Delimiters//EN" \
337    "file://$isodir/iso-amsc.ent" $CATALOG
338xmlcatalog --noout --add "public" \
339    "ISO 8879:1986//ENTITIES Added Latin 1//EN" \
340    "file://$isodir/iso-lat1.ent" $CATALOG
341xmlcatalog --noout --add "public" \
342    "ISO 8879:1986//ENTITIES Added Math Symbols: Binary Operators//EN" \
343    "file://$isodir/iso-amsb.ent" $CATALOG
344xmlcatalog --noout --add "public" \
345    "ISO 8879:1986//ENTITIES Added Latin 2//EN" \
346    "file://$isodir/iso-lat2.ent" $CATALOG
347xmlcatalog --noout --add "public" \
348    "ISO 8879:1986//ENTITIES Added Math Symbols: Relations//EN" \
349    "file://$isodir/iso-amsr.ent" $CATALOG
350xmlcatalog --noout --add "public" \
351    "ISO 8879:1986//ENTITIES Non-Russian Cyrillic//EN" \
352    "file://$isodir/iso-cyr2.ent" $CATALOG
353
354xmlcatalog --noout --add "delegatePublic" \
355    "ISO 8879:1986" \
356    "file://$CATALOG" $ROOTCATALOG
357
358#
359# find the prefix for XSLT stylesheets
360#
361top=`dirname $docbookdir`
362found=`find $top -name chunk.xsl`
363if [ "$found" = "" ] ; then
364    found=`find /usr/share/xml -name chunk.xsl`
365fi
366if [ "$found" = "" ] ; then
367    found=`find $HOME -name chunk.xsl`
368fi
369if [ "$found" = "" ] ; then
370    found=`find /usr/local -name chunk.xsl`
371fi
372if [ "$found" = "" ] ; then
373    found=`find /usr/share/sgml -name chunk.xsl`
374fi
375if [ "$found" = "" ] ; then
376    echo could not locate chunk-common.xsl of DocBook XSLT stylesheets
377    exit 1
378fi
379
380xsldir=""
381for tst in $found; do
382    dir=`dirname $tst`
383    dir=`dirname $dir`
384    if [ -r $dir/html/docbook.xsl -a -r $dir/common/l10n.xml ]; then
385        xsldir=$dir
386        break
387    fi
388done
389
390if [ "$xsldir" = "" ] ; then
391    echo could not locate DocBook XSLT stylesheets
392    exit 1
393fi
394echo Found DocBook XSLT stylesheets in $xsldir
395for version in current 1.39 1.40 1.41 1.42 1.43 1.44 1.45 1.46 1.47 \
396               1.48 1.49 1.50
397do
398    xmlcatalog --noout --add "rewriteSystem" \
399	"http://docbook.sourceforge.net/release/xsl/$version" \
400	"file://$xsldir" $CATALOG
401    xmlcatalog --noout --add "rewriteURI" \
402	"http://docbook.sourceforge.net/release/xsl/$version" \
403	"file://$xsldir" $CATALOG
404done
405
406xmlcatalog --noout --add "delegateSystem" \
407    "http://docbook.sourceforge.net/release/xsl/" \
408    "file://$CATALOG" $ROOTCATALOG
409xmlcatalog --noout --add "delegateURI" \
410    "http://docbook.sourceforge.net/release/xsl/" \
411    "file://$CATALOG" $ROOTCATALOG
412
413#
414#
415