2 # $Header: /var/cvsroot/gentoo-src/build-docbook-catalog/build-docbook-catalog,v 1.2 2004/07/22 22:35:18 agriffis Exp $
4 # build-docbook-catalog: populate /etc/xml/docbook based in
5 # installed docbook-xml-dtd versions.
7 # Copyright 2004 Gentoo Foundation
8 # Distributed under the terms of the GNU General Public License v2
9 # written by Aron Griffis
12 ROOTCATALOG
=/etc
/xml
/catalog
13 CATALOG
=/etc
/xml
/docbook
14 DOCBOOKDIR
=/usr
/share
/sgml
/docbook
15 DTDS
=/usr
/share
/sgml
/docbook
/xml-dtd-4.4
16 LATEST_DTD
=/usr
/share
/sgml
/docbook
/xml-dtd-4.4
18 xsldir
=/usr
/share
/xml
/docbook
/html
23 # main (called from bottom)
28 opts
=$
(getopt
-o v
--long verbose
-n "$ZERO" -- "$@") ||
exit 1
32 -v|
--verbose) VERBOSE
=true
; shift ;;
34 *) echo "Options parsing failed on $1!" >&2 ; exit 1 ;;
38 create_catalogs
# will exit on error
41 # Clean out old dtds from catalog
42 verb
"Cleaning out old DocBook XML versions from ${CATALOG} and ${ROOTCATALOG}"
43 clean_catalog
"${DOCBOOKDIR}/xml-dtd-[^/\"']*/[^/\"']*" ${CATALOG}
44 clean_catalog
"${DOCBOOKDIR}/xml-dtd-[^/\"']*/[^/\"']*" ${ROOTCATALOG}
57 # verbose echo -- only echo if called with --verbose
64 # fill in the DTDS variable based on installed versions
67 DTDS
=$
(find ${DOCBOOKDIR} -path '*/xml-dtd-*/docbookx.dtd')
68 if [[ -z ${DTDS} ]]; then
69 echo "No installed DocBook XML DTDs found"
77 # create the catalogs root and docbook specific
80 if [[ ! -r ${ROOTCATALOG} ]] ; then
81 echo "Creating XML Catalog root ${ROOTCATALOG}"
82 /usr
/bin
/xmlcatalog
--noout --create ${ROOTCATALOG}
83 if [[ ! -r ${ROOTCATALOG} ]] ; then
84 echo "Failed creating ${ROOTCATALOG}, aborting" >&2
88 verb
"Found XML Catalog root ${ROOTCATALOG}"
89 # clean out existing entries
90 verb
" Cleaning existing ${CATALOG} delegates from ${ROOTCATALOG}"
91 clean_catalog
"file://${CATALOG}" ${ROOTCATALOG}
94 if [[ ! -r ${CATALOG} ]] ; then
95 echo "Creating DocBook XML Catalog ${CATALOG}"
96 /usr
/bin
/xmlcatalog
--noout --create ${CATALOG}
97 if [[ ! -r ${CATALOG} ]] ; then
98 echo "Failed creating ${CATALOG}, aborting" >&2
102 verb
"Found DocBook XML Catalog ${CATALOG}"
106 verb
" Populating ${ROOTCATALOG} with DTD delegates to ${CATALOG}"
107 xmlcatalog
--noout --add "delegatePublic" "-//OASIS//ENTITIES DocBook XML" "file://${CATALOG}" ${ROOTCATALOG}
108 xmlcatalog
--noout --add "delegatePublic" "-//OASIS//DTD DocBook XML" "file://${CATALOG}" ${ROOTCATALOG}
109 xmlcatalog
--noout --add "delegateSystem" "http://www.oasis-open.org/docbook/" "file://${CATALOG}" ${ROOTCATALOG}
110 xmlcatalog
--noout --add "delegateURI" "http://www.oasis-open.org/docbook/" "file://${CATALOG}" ${ROOTCATALOG}
111 xmlcatalog
--noout --add "delegateSystem" "http://docbook.sourceforge.net/release/xsl/" "file://${CATALOG}" ${ROOTCATALOG}
112 xmlcatalog
--noout --add "delegateURI" "http://docbook.sourceforge.net/release/xsl/" "file://${CATALOG}" ${ROOTCATALOG}
115 verb
" Populating ${ROOTCATALOG} with ISO entities delegate to ${CATALOG}"
116 xmlcatalog
--noout --add "delegatePublic" "ISO 8879:1986" "file://${CATALOG}" ${ROOTCATALOG}
121 # $1 == regex to clean
125 typeset list f regex
=$1 catalog
=$2
127 list
=$
(egrep --only-matching "${regex}" "${catalog}" |
sort -u)
129 xmlcatalog
--noout --del "${f}" ${catalog}
134 # populate a specific dtd version into the docbook catalog
135 # $1 == /path/to/docbookx.dtd
138 typeset dtd
=$1 docbookdir
=${1%/*} dtd_date
139 typeset v
=${docbookdir##*-}
142 if [[ ${dtd} != */xml-dtd-
*/* ]]; then
143 echo "Warning: I don't understand \"${dtd}\"" >&2
146 echo "Found DocBook XML ${v} in ${docbookdir}"
148 # Populate the docbook catalog with this version
149 verb
" Populating ${CATALOG} based on ${docbookdir}"
150 xmlcatalog
--noout --add "public" "-//OASIS//ELEMENTS DocBook XML Information Pool V${v}//EN" "file://${docbookdir}/dbpoolx.mod" ${CATALOG}
151 xmlcatalog --noout --add "public
" "-//OASIS
//DTD DocBook XML V
${v}//EN" "file://${docbookdir}/docbookx.dtd" ${CATALOG}
152 xmlcatalog
--noout --add "public" "-//OASIS//ENTITIES DocBook XML Character Entities V${v}//EN" "file://${docbookdir}/dbcentx.mod" ${CATALOG}
153 xmlcatalog --noout --add "public
" "-//OASIS
//ENTITIES DocBook XML Notations V
${v}//EN" "file://${docbookdir}/dbnotnx.mod" ${CATALOG}
154 xmlcatalog
--noout --add "public" "-//OASIS//ENTITIES DocBook XML Additional General Entities V${v}//EN" "file://${docbookdir}/dbgenent.mod" ${CATALOG}
155 xmlcatalog --noout --add "public
" "-//OASIS
//ELEMENTS DocBook XML Document Hierarchy V
${v}//EN" "file://${docbookdir}/dbhierx.mod" ${CATALOG}
156 xmlcatalog
--noout --add "public" "-//OASIS//DTD XML Exchange Table Model 19990315//EN" "file://${docbookdir}/soextblx.dtd" ${CATALOG}
157 xmlcatalog
--noout --add "public" "-//OASIS//DTD DocBook XML CALS Table Model V${v}//EN" "file://${docbookdir}/calstblx.dtd" ${CATALOG}
158 xmlcatalog --noout --add "rewriteSystem
" "http
://www.oasis-open.org
/docbook
/xml
/${v}" "file://${docbookdir}" ${CATALOG}
159 xmlcatalog
--noout --add "rewriteURI" "http://www.oasis-open.org/docbook/xml/${v}" "file://${docbookdir}" ${CATALOG}
161 # grab the RCS date from docbookx.dtd for comparison purposes
162 if [[ ! -f ${docbookdir}/ent/iso-lat1.ent ]]; then
163 verb " No entities available
for ${dtd}"
166 dtd_date=$(egrep --only-matching --max-count=1 \
167 '[0-9]{4}/[0-9]{2}/[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}' "${dtd}")
168 if [[ -z ${dtd_date} ]]; then
169 verb " Couldn
't find RCS date in ${dtd}, ignoring entities"
172 verb " RCS datestamp in ${dtd} is ${dtd_date}"
173 dtd_date=$(date -d "$dtd_date" +%s)
174 if [[ -z $LATEST_DTD || $dtd_date -gt $LATEST_DATE ]]; then
175 LATEST_DATE=${dtd_date}
181 # populate ISO DocBook entities from the most recent DTD
183 populate_entities() {
184 typeset isodir=/usr/share/sgml/docbook/xml-dtd-4.4/ent
185 typeset -a entities avail
188 if [[ -z ${LATEST_DTD} || ! -d ${isodir} ]]; then
189 echo "No ISO DocBook entities available for catalog"
192 echo "Using ISO DocBook entities from ${isodir}"
194 # here are the entities we know about;
195 # note these must remain sorted!
197 "iso-amsa.ent" "ISO 8879:1986//ENTITIES Added Math Symbols: Arrow Relations//EN"
198 "iso-amsb.ent" "ISO 8879:1986//ENTITIES Added Math Symbols: Binary Operators//EN"
199 "iso-amsc.ent" "ISO 8879:1986//ENTITIES Added Math Symbols: Delimiters//EN"
200 "iso-amsn.ent" "ISO 8879:1986//ENTITIES Added Math Symbols: Negated Relations//EN"
201 "iso-amso.ent" "ISO 8879:1986//ENTITIES Added Math Symbols: Ordinary//EN"
202 "iso-amsr.ent" "ISO 8879:1986//ENTITIES Added Math Symbols: Relations//EN"
203 "iso-box.ent" "ISO 8879:1986//ENTITIES Box and Line Drawing//EN"
204 "iso-cyr1.ent" "ISO 8879:1986//ENTITIES Russian Cyrillic//EN"
205 "iso-cyr2.ent" "ISO 8879:1986//ENTITIES Non-Russian Cyrillic//EN"
206 "iso-dia.ent" "ISO 8879:1986//ENTITIES Diacritical Marks//EN"
207 "iso-grk1.ent" "ISO 8879:1986//ENTITIES Greek Letters//EN"
208 "iso-grk2.ent" "ISO 8879:1986//ENTITIES Monotoniko Greek//EN"
209 "iso-grk3.ent" "ISO 8879:1986//ENTITIES Greek Symbols//EN"
210 "iso-grk4.ent" "ISO 8879:1986//ENTITIES Alternative Greek Symbols//EN"
211 "iso-lat1.ent" "ISO 8879:1986//ENTITIES Added Latin 1//EN"
212 "iso-lat2.ent" "ISO 8879:1986//ENTITIES Added Latin 2//EN"
213 "iso-num.ent" "ISO 8879:1986//ENTITIES Numeric and Special Graphic//EN"
214 "iso-pub.ent" "ISO 8879:1986//ENTITIES Publishing//EN"
215 "iso-tech.ent" "ISO 8879:1986//ENTITIES General Technical//EN"
218 # here are the entities available; assume no spaces in filenames...
219 avail=($(ls ${isodir} | sort))
221 # double-check the lists
222 verb " Populating ${CATALOG} with ISO DocBook entities"
224 while [[ ${i} -lt ${#entities[@]} || ${j} -lt ${#avail[@]} ]]; do
225 if [[ ${i} -ge ${#entities[@]} ]]; then
226 echo "Warning: Extra ISO entities file: ${avail[j]}"
228 elif [[ ${j} -ge ${#avail[@]} ]]; then
229 echo "Warning: Entities file not found: ${entities[i]}"
231 elif [[ ${avail[j]} < ${entities[i]} ]]; then
232 echo "Warning: Extra ISO entities file: ${avail[j]}"
234 elif [[ ${entities[i]} < ${avail[j]} ]]; then
235 echo "Warning: Entities file not found: ${entities[i]}"
237 elif [[ ${entities[i]} == ${avail[j]} ]]; then
238 xmlcatalog --noout --add "public" "${entities[i+1]}" \
239 "file://${isodir}/${entities[i]}" ${CATALOG}
243 echo "${0}: Whoah, shouldn't be here
, aborting
" >&2
250 # populate XSL stylesheets
253 typeset listed avail f
255 # Delete current entries from the catalog
256 clean_catalog "${DOCBOOKDIR}/xsl-stylesheets-
[0-9\.
]+" $CATALOG
257 clean_catalog "${DOCBOOKDIR}/xsl-stylesheets-
[0-9\.
]+" $ROOTCATALOG
259 # Find the available XSL stylesheets. In theory there should only
260 # be one match since these aren't slotted, but restrict to the
261 # first match anyway...
264 if [[ ! -e ${xsldir}/html/docbook.xsl || ! -e ${xsldir}/common/l10n.xml ]]; then
265 echo "DocBook XSLT stylesheets are missing files from
${xsldir}" >&2
269 # Populate catalog with XSL entries
270 echo "Found DocBook XSL stylesheets
in ${xsldir}"
271 verb " Populating
${CATALOG} with XSL stylesheets
"
272 for version in current 1.39 1.40 1.41 1.42 1.43 1.44 1.45 1.46 1.47 \
273 1.48 1.49 1.50 ${xsldir##*-}
275 xmlcatalog --noout --add "rewriteSystem
" "http
://docbook.sourceforge.net
/release
/xsl
/${version}" "file://${xsldir}" ${CATALOG}
276 xmlcatalog
--noout --add "rewriteURI" "http://docbook.sourceforge.net/release/xsl/${version}" "file://${xsldir}" ${CATALOG}
280 # Call the main routine