Reference #74.
--- /dev/null
+BINDIR = /usr/bin
+DESTDIR = ..overridden in spec file..
+
+all: install
+
+install: install-xsl install-img install-extensions install-misc install-epub
+
+install-xsl:
+ mkdir -p $(DESTDIR)/{common,eclipse,fo,html,htmlhelp/doc,javahelp,lib,template,xhtml,xhtml-1_1,manpages,profiling,highlighting,roundtrip,website}
+ cp common/*.dtd $(DESTDIR)/common
+ cp common/*.ent $(DESTDIR)/common
+ cp common/*.xml $(DESTDIR)/common
+ cp common/*.xsl $(DESTDIR)/common
+ cp eclipse/*.xsl $(DESTDIR)/eclipse
+ cp fo/*.xml $(DESTDIR)/fo
+ cp fo/*.xsl $(DESTDIR)/fo
+ cp html/*.xml $(DESTDIR)/html
+ cp html/*.xsl $(DESTDIR)/html
+ cp htmlhelp/*.xsl $(DESTDIR)/htmlhelp
+ cp javahelp/*.xsl $(DESTDIR)/javahelp
+ cp lib/*.xsl $(DESTDIR)/lib
+ cp template/*.xsl $(DESTDIR)/template
+ cp xhtml/*.xsl $(DESTDIR)/xhtml
+ cp xhtml-1_1/*.xsl $(DESTDIR)/xhtml-1_1
+ cp manpages/*.xsl $(DESTDIR)/manpages
+ cp profiling/*.xsl $(DESTDIR)/profiling
+ cp highlighting/*.xml $(DESTDIR)/highlighting
+ cp highlighting/*.xsl $(DESTDIR)/highlighting
+ cp roundtrip/*.xml $(DESTDIR)/roundtrip
+ cp roundtrip/*.xsl $(DESTDIR)/roundtrip
+ cp roundtrip/*.dtd $(DESTDIR)/roundtrip
+ cp website/*.xsl $(DESTDIR)/website
+
+install-img:
+ mkdir -p $(DESTDIR)/images/callouts
+ cp images/*.gif $(DESTDIR)/images
+ cp images/*.png $(DESTDIR)/images
+ cp images/*.svg $(DESTDIR)/images
+ cp images/callouts/*.png $(DESTDIR)/images/callouts
+ cp images/callouts/*.gif $(DESTDIR)/images/callouts
+ cp images/callouts/*.svg $(DESTDIR)/images/callouts
+
+install-extensions:
+ mkdir -p $(DESTDIR)/extensions
+ cp -r extensions/* $(DESTDIR)/extensions
+
+install-epub:
+ mkdir -p $(DESTDIR)/epub
+ cp -r epub/* ${DESTDIR}/epub
+
+install-misc:
+ cp VERSION $(DESTDIR)
--- /dev/null
+###############################################################################
+# IPFire.org - An Open Source Firewall Solution #
+# Copyright (C) - IPFire Development Team <info@ipfire.org> #
+###############################################################################
+
+name = docbook-xsl
+version = 1.76.1
+release = 1
+arch = noarch
+
+groups = Applications/Text
+url = http://docbook.sourceforge.net/projects/xsl/
+license = GPLv2+
+summary = Norman Walsh's XSL stylesheets for DocBook XML.
+
+description
+ hese XSL stylesheets allow you to transform any DocBook XML document to
+ other formats, such as HTML, FO, and XHMTL. They are highly customizable.
+end
+
+source_dl = http://prdownloads.sourceforge.net/docbook/
+
+sources =\
+ %{thisapp}.tar.bz2 \
+ %{name}-doc-%{version}.tar.bz2
+
+build
+ prepare_cmds
+ cp -av %{DIR_SOURCE}/Makefile %{DIR_APP}/Makefile
+ end
+
+ build = # empty
+
+ make_install_targets +=\
+ BINDIR=%{BUILDROOT}/usr/bin \
+ DESTDIR=%{BUILDROOT}/usr/share/sgml/docbook/xsl-stylesheets-%{version}
+
+ install_cmds
+ # Remove buggy extensions.
+ rm -rfv %{BUILDROOT}/usr/share/sgml/docbook/xsl-stylesheets-%{version}/extensions/*
+
+ # Remove unneeded tool for .epub formats.
+ rm -rvf %{BUILDROOT}/usr/share/sgml/docbook/xsl-stylesheets-%{version}/epub
+ end
+end
+
+packages
+ package %{name}
+ requires
+ docbook-dtds
+ sgml-common
+ end
+
+ prerequires +=\
+ docbook-dtds \
+ libxml2 \
+ sgml-common
+
+ script postin
+ # Install catalog files.
+ /usr/bin/xmlcatalog --noout --add "rewriteSystem" \
+ "http://docbook.sourceforge.net/release/xsl/%{version}" \
+ "file:///usr/share/sgml/docbook/xsl-stylesheets-%{version}" /etc/xml/catalog
+
+ /usr/bin/xmlcatalog --noout --add "rewriteURI" \
+ "http://docbook.sourceforge.net/release/xsl/%{version}" \
+ "file:///usr/share/sgml/docbook/xsl-stylesheets-%{version}" /etc/xml/catalog
+
+ /usr/bin/xmlcatalog --noout --add "rewriteSystem" \
+ "http://docbook.sourceforge.net/release/xsl/current" \
+ "file:///usr/share/sgml/docbook/xsl-stylesheets-%{version}" /etc/xml/catalog
+
+ /usr/bin/xmlcatalog --noout --add "rewriteURI" \
+ "http://docbook.sourceforge.net/release/xsl/current" \
+ "file:///usr/share/sgml/docbook/xsl-stylesheets-%{version}" /etc/xml/catalog
+ end
+
+ script preun
+ # Uninstall catalog files.
+ /usr/bin/xmlcatalog --noout --del \
+ "file:///usr/share/sgml/docbook/xsl-stylesheets-%{version}" /etc/xml/catalog
+ end
+ end
+end
--- /dev/null
+diff -ruNp docbook-xsl-1.74.0.orig/fo/lists.xsl docbook-xsl-1.74.0/fo/lists.xsl
+--- docbook-xsl-1.74.0.orig/fo/lists.xsl 2008-08-06 13:32:46.000000000 +0200
++++ docbook-xsl-1.74.0/fo/lists.xsl 2008-08-06 13:41:27.000000000 +0200
+@@ -248,9 +248,17 @@
+ </fo:block>
+ </fo:list-item-label>
+ <fo:list-item-body start-indent="body-start()">
+- <fo:block>
+- <xsl:apply-templates/>
+- </fo:block>
++ <xsl:choose>
++ <!-- * work around broken passivetex list-item-body rendering -->
++ <xsl:when test="$passivetex.extensions = '1'">
++ <xsl:apply-templates/>
++ </xsl:when>
++ <xsl:otherwise>
++ <fo:block>
++ <xsl:apply-templates/>
++ </fo:block>
++ </xsl:otherwise>
++ </xsl:choose>
+ </fo:list-item-body>
+ </xsl:variable>
+
+@@ -446,10 +454,18 @@
+ </fo:block>
+ </fo:list-item-label>
+ <fo:list-item-body start-indent="body-start()">
+- <fo:block>
+- <xsl:apply-templates select="listitem"/>
+- </fo:block>
+- </fo:list-item-body>
++ <xsl:choose>
++ <!-- * work around broken passivetex list-item-body rendering -->
++ <xsl:when test="$passivetex.extensions = '1'">
++ <xsl:apply-templates select="listitem"/>
++ </xsl:when>
++ <xsl:otherwise>
++ <fo:block>
++ <xsl:apply-templates select="listitem"/>
++ </fo:block>
++ </xsl:otherwise>
++ </xsl:choose>
++ </fo:list-item-body>
+ </xsl:variable>
+
+ <xsl:choose>
+@@ -925,9 +941,17 @@
+ </fo:block>
+ </fo:list-item-label>
+ <fo:list-item-body start-indent="body-start()">
+- <fo:block>
+- <xsl:apply-templates/>
+- </fo:block>
++ <xsl:choose>
++ <!-- * work around broken passivetex list-item-body rendering -->
++ <xsl:when test="$passivetex.extensions = '1'">
++ <xsl:apply-templates/>
++ </xsl:when>
++ <xsl:otherwise>
++ <fo:block>
++ <xsl:apply-templates/>
++ </fo:block>
++ </xsl:otherwise>
++ </xsl:choose>
+ </fo:list-item-body>
+ </fo:list-item>
+ </xsl:template>
+@@ -951,9 +975,17 @@
+ </fo:block>
+ </fo:list-item-label>
+ <fo:list-item-body start-indent="body-start()">
+- <fo:block>
+- <xsl:apply-templates/>
+- </fo:block>
++ <xsl:choose>
++ <!-- * work around broken passivetex list-item-body rendering -->
++ <xsl:when test="$passivetex.extensions = '1'">
++ <xsl:apply-templates/>
++ </xsl:when>
++ <xsl:otherwise>
++ <fo:block>
++ <xsl:apply-templates/>
++ </fo:block>
++ </xsl:otherwise>
++ </xsl:choose>
+ </fo:list-item-body>
+ </fo:list-item>
+ </xsl:template>
+@@ -1141,9 +1173,17 @@
+ </fo:block>
+ </fo:list-item-label>
+ <fo:list-item-body start-indent="body-start()">
+- <fo:block>
+- <xsl:apply-templates/>
+- </fo:block>
++ <xsl:choose>
++ <!-- * work around broken passivetex list-item-body rendering -->
++ <xsl:when test="$passivetex.extensions = '1'">
++ <xsl:apply-templates/>
++ </xsl:when>
++ <xsl:otherwise>
++ <fo:block>
++ <xsl:apply-templates/>
++ </fo:block>
++ </xsl:otherwise>
++ </xsl:choose>
+ </fo:list-item-body>
+ </fo:list-item>
+ </xsl:template>
--- /dev/null
+diff -urNp docbook-xsl-1.76.1-orig/manpages/other.xsl docbook-xsl-1.76.1/manpages/other.xsl
+--- docbook-xsl-1.76.1-orig/manpages/other.xsl 2010-08-27 05:14:52.000000000 +0200
++++ docbook-xsl-1.76.1/manpages/other.xsl 2011-09-06 17:17:07.973737258 +0200
+@@ -595,7 +595,14 @@ manvolnum
+ <xsl:with-param name="message-prolog">Note: </xsl:with-param>
+ <xsl:with-param name="message-epilog"> (soelim stub)</xsl:with-param>
+ <xsl:with-param name="content">
+- <xsl:value-of select="'.so '"/>
++ <xsl:choose>
++ <xsl:when test="$man.output.in.separate.dir = 0">
++ <xsl:value-of select="concat('.so man', $section, '/')"/>
++ </xsl:when>
++ <xsl:otherwise>
++ <xsl:value-of select="'.so '"/> <!-- added case -->
++ </xsl:otherwise>
++ </xsl:choose>
+ <xsl:call-template name="make.adjusted.man.filename">
+ <xsl:with-param name="name" select="$first.refname"/>
+ <xsl:with-param name="section" select="$section"/>
--- /dev/null
+diff -ruNp docbook-xsl-1.74.0.orig/fo/lists.xsl docbook-xsl-1.74.0/fo/lists.xsl
+--- docbook-xsl-1.74.0.orig/fo/lists.xsl 2008-06-01 23:36:39.000000000 +0200
++++ docbook-xsl-1.74.0/fo/lists.xsl 2008-08-06 13:32:46.000000000 +0200
+@@ -324,7 +324,7 @@
+ </xsl:when>
+ <xsl:when test="@termlength">
+ <xsl:variable name="termlength.is.number">
+- <xsl:value-of select="@termlength + 0"/>
++ <xsl:value-of select="@termlength"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="string($termlength.is.number) = 'NaN'">
+@@ -333,15 +333,7 @@
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@termlength"/>
+- <xsl:choose>
+- <!-- workaround for passivetex lack of support for non-constant expressions -->
+- <xsl:when test="$passivetex.extensions != 0">
+- <xsl:text>em</xsl:text>
+- </xsl:when>
+- <xsl:otherwise>
+- <xsl:text>em * 0.60</xsl:text>
+- </xsl:otherwise>
+- </xsl:choose>
++ <xsl:text>em</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+@@ -350,15 +342,7 @@
+ <xsl:with-param name="terms" select="varlistentry/term"/>
+ <xsl:with-param name="maxlength" select="$variablelist.max.termlength"/>
+ </xsl:call-template>
+- <xsl:choose>
+- <!-- workaround for passivetex lack of support for non-constant expressions -->
+- <xsl:when test="$passivetex.extensions != 0">
+- <xsl:text>em</xsl:text>
+- </xsl:when>
+- <xsl:otherwise>
+- <xsl:text>em * 0.60</xsl:text>
+- </xsl:otherwise>
+- </xsl:choose>
++ <xsl:text>em</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+@@ -372,17 +356,7 @@
+
+ <xsl:variable name="label-separation">1em</xsl:variable>
+ <xsl:variable name="distance-between-starts">
+- <xsl:choose>
+- <!-- workaround for passivetex lack of support for non-constant expressions -->
+- <xsl:when test="$passivetex.extensions != 0">
+- <xsl:value-of select="$termlength"/>
+- </xsl:when>
+- <xsl:otherwise>
+- <xsl:value-of select="$termlength"/>
+- <xsl:text>+</xsl:text>
+- <xsl:value-of select="$label-separation"/>
+- </xsl:otherwise>
+- </xsl:choose>
++ <xsl:value-of select="$termlength"/>
+ </xsl:variable>
+
+ <xsl:if test="title">
+diff -ruNp docbook-xsl-1.74.0.orig/fo/param.xsl docbook-xsl-1.74.0/fo/param.xsl
+--- docbook-xsl-1.74.0.orig/fo/param.xsl 2008-06-02 01:06:18.000000000 +0200
++++ docbook-xsl-1.74.0/fo/param.xsl 2008-08-06 13:32:46.000000000 +0200
+@@ -133,8 +133,8 @@
+ <xsl:attribute-set name="component.title.properties">
+ <xsl:attribute name="keep-with-next.within-column">always</xsl:attribute>
+ <xsl:attribute name="space-before.optimum"><xsl:value-of select="concat($body.font.master, 'pt')"/></xsl:attribute>
+- <xsl:attribute name="space-before.minimum"><xsl:value-of select="concat($body.font.master, 'pt * 0.8')"/></xsl:attribute>
+- <xsl:attribute name="space-before.maximum"><xsl:value-of select="concat($body.font.master, 'pt * 1.2')"/></xsl:attribute>
++ <xsl:attribute name="space-before.minimum"><xsl:value-of select="concat($body.font.master*0.8, 'pt')"/></xsl:attribute>
++ <xsl:attribute name="space-before.maximum"><xsl:value-of select="concat($body.font.master*1.2, 'pt')"/></xsl:attribute>
+ <xsl:attribute name="hyphenate">false</xsl:attribute>
+ <xsl:attribute name="text-align">
+ <xsl:choose>
+diff -urNp docbook-xsl-1.75.0-orig/fo/pagesetup.xsl docbook-xsl-1.75.0/fo/pagesetup.xsl
+--- docbook-xsl-1.75.0-orig/fo/pagesetup.xsl 2009-05-11 11:40:49.000000000 +0200
++++ docbook-xsl-1.75.0/fo/pagesetup.xsl 2009-05-11 11:42:29.000000000 +0200
+@@ -30,16 +30,7 @@
+ </xsl:param>
+
+ <xsl:param name="margin.left.inner">
+- <xsl:choose>
+- <xsl:when test="$passivetex.extensions != 0">
+- <xsl:value-of select="$page.margin.inner"/>
+- </xsl:when>
+- <xsl:otherwise>
+- <xsl:value-of select="$page.margin.inner"/>
+- <xsl:text> - </xsl:text>
+- <xsl:value-of select="$title.margin.left"/>
+- </xsl:otherwise>
+- </xsl:choose>
++ <xsl:value-of select="$page.margin.inner"/>
+ </xsl:param>
+
+ <xsl:template name="setup.pagemasters">
--- /dev/null
+diff -ruNp docbook-xsl-1.74.0.orig/html/docbook.xsl docbook-xsl-1.74.0/html/docbook.xsl
+--- docbook-xsl-1.74.0.orig/html/docbook.xsl 2008-06-01 23:36:39.000000000 +0200
++++ docbook-xsl-1.74.0/html/docbook.xsl 2008-08-06 13:37:35.000000000 +0200
+@@ -26,6 +26,7 @@
+ <xsl:include href="../VERSION"/>
+ <xsl:include href="param.xsl"/>
+ <xsl:include href="../lib/lib.xsl"/>
++<xsl:include href="../lib/dumpfragment.xsl"/>
+ <xsl:include href="../common/l10n.xsl"/>
+ <xsl:include href="../common/common.xsl"/>
+ <xsl:include href="../common/utility.xsl"/>
+@@ -44,6 +45,7 @@
+ <xsl:include href="graphics.xsl"/>
+ <xsl:include href="xref.xsl"/>
+ <xsl:include href="formal.xsl"/>
++<xsl:include href="dtbl.xsl"/>
+ <xsl:include href="table.xsl"/>
+ <xsl:include href="htmltbl.xsl"/>
+ <xsl:include href="sections.xsl"/>
+diff -ruNp docbook-xsl-1.74.0.orig/html/dtbl.xsl docbook-xsl-1.74.0/html/dtbl.xsl
+--- docbook-xsl-1.74.0.orig/html/dtbl.xsl 1970-01-01 01:00:00.000000000 +0100
++++ docbook-xsl-1.74.0/html/dtbl.xsl 2008-08-06 13:37:35.000000000 +0200
+@@ -0,0 +1,293 @@
++<?xml version="1.0" encoding="US-ASCII"?>
++<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
++ xmlns:exsl="http://exslt.org/common"
++ xmlns:func="http://exslt.org/functions"
++ xmlns:dtbl="http://docbook.sourceforge.net/dtbl"
++ extension-element-prefixes="func"
++ exclude-result-prefixes="exsl func dtbl"
++ version="1.0">
++
++<func:function name="dtbl:convertLength">
++ <xsl:param name="arbitrary.length"/>
++
++ <xsl:variable name="pixels.per.inch" select="96"/>
++
++ <xsl:variable name="unscaled.length"
++ select="translate($arbitrary.length, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ', '')"/>
++
++ <xsl:variable name="units"
++ select="translate($arbitrary.length,'+-0123456789. ', '')"/>
++
++ <xsl:variable name="scaled.length">
++ <xsl:choose>
++ <xsl:when test="$units='in'">
++ <xsl:value-of select="$unscaled.length * $pixels.per.inch"/>
++ </xsl:when>
++ <xsl:when test="$units='cm'">
++ <xsl:value-of select="$unscaled.length * ($pixels.per.inch div 2.54)"/>
++ </xsl:when>
++ <xsl:when test="$units='mm'">
++ <xsl:value-of select="$unscaled.length * ($pixels.per.inch div 25.4)"/>
++ </xsl:when>
++ <xsl:when test="$units='pc'">
++ <xsl:value-of select="$unscaled.length * (($pixels.per.inch div 72) * 12)"/>
++ </xsl:when>
++ <xsl:when test="$units='pt'">
++ <xsl:value-of select="$unscaled.length * ($pixels.per.inch div 72)"/>
++ </xsl:when>
++ <xsl:when test="$units='px' or $units=''">
++ <xsl:value-of select="$unscaled.length"/>
++ </xsl:when>
++ <xsl:otherwise>
++ <xsl:message terminate="no">
++ <xsl:text>"</xsl:text>
++ <xsl:value-of select="$units"/>
++ <xsl:text>" is not a known unit. Applying scaling factor of 1 instead.</xsl:text>
++ </xsl:message>
++ <xsl:value-of select="$unscaled.length"/>
++ </xsl:otherwise>
++ </xsl:choose>
++ </xsl:variable>
++
++ <func:result select="round($scaled.length)"/>
++</func:function>
++
++<func:function name="dtbl:adjustColumnWidths">
++ <xsl:param name="colgroup"/>
++
++ <xsl:if test="$adjustColumnWidths.debug">
++ <xsl:message>
++ <xsl:text>entering adjustColumnWidths(</xsl:text>
++ <xsl:call-template name="dump-fragment">
++ <xsl:with-param name="fragment" select="$colgroup"/>
++ </xsl:call-template>
++ <xsl:text>)</xsl:text>
++ </xsl:message>
++ </xsl:if>
++
++ <xsl:variable name="expanded.colgroup">
++ <xsl:apply-templates select="exsl:node-set($colgroup)/*" mode="dtbl-split-widths"/>
++ </xsl:variable>
++
++ <xsl:variable name="absolute.widths.total">
++ <xsl:value-of select="sum(exsl:node-set($expanded.colgroup)//col/@abswidth)"/>
++ </xsl:variable>
++
++ <xsl:variable name="relative.widths.total">
++ <xsl:value-of select="sum(exsl:node-set($expanded.colgroup)//col/@relwidth)"/>
++ </xsl:variable>
++
++ <xsl:if test="$adjustColumnWidths.debug">
++ <xsl:message>
++ <xsl:text>total relative widths = (</xsl:text>
++ <xsl:value-of select="$relative.widths.total"/>
++ <xsl:text>)</xsl:text>
++ </xsl:message>
++ <xsl:message>
++ <xsl:text>total absolute widths = (</xsl:text>
++ <xsl:value-of select="$absolute.widths.total"/>
++ <xsl:text>)</xsl:text>
++ </xsl:message>
++ </xsl:if>
++
++ <xsl:variable name="adjusted.colgroup">
++ <xsl:choose>
++ <xsl:when test="$relative.widths.total = 0">
++ <xsl:if test="$adjustColumnWidths.debug">
++ <xsl:message>all widths are absolute</xsl:message>
++ </xsl:if>
++ <xsl:apply-templates select="exsl:node-set($expanded.colgroup)/*"
++ mode="dtbl-use-absolute-widths"/>
++ </xsl:when>
++ <xsl:when test="$absolute.widths.total = 0">
++ <xsl:if test="$adjustColumnWidths.debug">
++ <xsl:message>all widths are relative</xsl:message>
++ </xsl:if>
++ <xsl:apply-templates select="exsl:node-set($expanded.colgroup)/*"
++ mode="dtbl-use-relative-widths">
++ <xsl:with-param name="relative.widths.total"
++ select="$relative.widths.total"/>
++ </xsl:apply-templates>
++ </xsl:when>
++ </xsl:choose>
++ </xsl:variable>
++
++ <xsl:variable name="corrected.adjusted.colgroup">
++ <xsl:choose>
++ <xsl:when test="$relative.widths.total = 0">
++ <xsl:copy-of select="$adjusted.colgroup"/>
++ </xsl:when>
++ <xsl:otherwise>
++ <xsl:variable name="widths.total"
++ select="sum(exsl:node-set($adjusted.colgroup)//col/@width)"/>
++ <xsl:variable name="n.columns"
++ select="count(exsl:node-set($adjusted.colgroup)//col)"/>
++ <xsl:variable name="error"
++ select="100 - $widths.total"/>
++ <xsl:variable name="first.bad.column"
++ select="($n.columns - $error) + 1"/>
++ <xsl:apply-templates select="exsl:node-set($adjusted.colgroup)/*"
++ mode="dtbl-correct-rounding-error">
++ <xsl:with-param name="first.bad.column"
++ select="$first.bad.column"/>
++ </xsl:apply-templates>
++ </xsl:otherwise>
++ </xsl:choose>
++ </xsl:variable>
++
++ <xsl:if test="$adjustColumnWidths.debug">
++ <xsl:message>
++ <xsl:text>result = (</xsl:text>
++ <xsl:call-template name="dump-fragment">
++ <xsl:with-param name="fragment" select="$corrected.adjusted.colgroup"/>
++ </xsl:call-template>
++ <xsl:text>)</xsl:text>
++ </xsl:message>
++ </xsl:if>
++
++ <func:result select="$corrected.adjusted.colgroup"/>
++</func:function>
++
++<xsl:template match="colgroup" mode="dtbl-correct-rounding-error">
++ <xsl:param name="first.bad.column"/>
++
++ <xsl:if test="$adjustColumnWidths.debug">
++ <xsl:message>
++ <xsl:text>first.bad.column = (</xsl:text>
++ <xsl:value-of select="$first.bad.column"/>
++ <xsl:text>)</xsl:text>
++ </xsl:message>
++ </xsl:if>
++
++ <colgroup>
++ <xsl:for-each select="col[position() < $first.bad.column]">
++ <xsl:element name="col">
++ <xsl:attribute name="width">
++ <xsl:value-of select="concat(@width, '%')"/>
++ </xsl:attribute>
++ </xsl:element>
++ </xsl:for-each>
++ <xsl:for-each select="col[position() >= $first.bad.column]">
++ <xsl:element name="col">
++ <xsl:attribute name="width">
++ <xsl:value-of select="concat(@width + 1, '%')"/>
++ </xsl:attribute>
++ </xsl:element>
++ </xsl:for-each>
++ </colgroup>
++</xsl:template>
++
++<xsl:template match="col" mode="dtbl-correct-rounding-error">
++ <xsl:param name="relative.widths.total"/>
++ <xsl:param name="error"/>
++
++ <xsl:element name="col">
++ <xsl:attribute name="width">
++ <xsl:value-of select="concat('', round((@relwidth div $relative.widths.total) * 100))"/>
++ </xsl:attribute>
++ <xsl:apply-templates mode="dtbl-use-absolute-widths"/>
++ </xsl:element>
++</xsl:template>
++
++<xsl:template match="colgroup" mode="dtbl-use-relative-widths">
++ <xsl:param name="relative.widths.total"/>
++
++ <colgroup>
++ <xsl:apply-templates mode="dtbl-use-relative-widths">
++ <xsl:with-param name="relative.widths.total"
++ select="$relative.widths.total"/>
++ </xsl:apply-templates>
++ </colgroup>
++</xsl:template>
++
++<xsl:template match="col" mode="dtbl-use-relative-widths">
++ <xsl:param name="relative.widths.total"/>
++
++ <xsl:element name="col">
++ <xsl:attribute name="width">
++ <xsl:value-of select="round((@relwidth div $relative.widths.total) * 100)"/>
++ </xsl:attribute>
++ <xsl:apply-templates mode="dtbl-use-absolute-widths"/>
++ </xsl:element>
++</xsl:template>
++
++<xsl:template match="colgroup" mode="dtbl-use-absolute-widths">
++ <colgroup>
++ <xsl:apply-templates mode="dtbl-use-absolute-widths"/>
++ </colgroup>
++</xsl:template>
++
++<xsl:template match="col" mode="dtbl-use-absolute-widths">
++ <xsl:element name="col">
++ <xsl:attribute name="width">
++ <xsl:value-of select="@abswidth"/>
++ </xsl:attribute>
++ <xsl:apply-templates mode="dtbl-use-absolute-widths"/>
++ </xsl:element>
++</xsl:template>
++
++<xsl:template match="colgroup" mode="dtbl-split-widths">
++ <colgroup>
++ <xsl:apply-templates mode="dtbl-split-widths"/>
++ </colgroup>
++</xsl:template>
++
++<xsl:template match="col" mode="dtbl-split-widths">
++
++ <!-- width = @width ? @width : '1*' -->
++ <xsl:variable name="width">
++ <xsl:choose>
++ <xsl:when test="@width != ''">
++ <xsl:value-of select="@width"/>
++ </xsl:when>
++ <xsl:otherwise>
++ <xsl:text>1*</xsl:text>
++ </xsl:otherwise>
++ </xsl:choose>
++ </xsl:variable>
++
++ <!-- absolute.width = contains($width,'*') ? substring-after($width, '*') : $width -->
++ <xsl:variable name="absolute.width">
++ <xsl:choose>
++ <xsl:when test="contains($width, '*')">
++ <xsl:value-of select="substring-after($width, '*')"/>
++ </xsl:when>
++ <xsl:otherwise>
++ <xsl:value-of select="$width"/>
++ </xsl:otherwise>
++ </xsl:choose>
++ </xsl:variable>
++
++ <xsl:variable name="converted.absolute.width">
++ <xsl:choose>
++ <xsl:when test="$absolute.width != ''">
++ <xsl:value-of select="dtbl:convertLength($absolute.width)"/>
++ </xsl:when>
++ <xsl:otherwise>0</xsl:otherwise>
++ </xsl:choose>
++ </xsl:variable>
++
++ <xsl:variable name="relative.width">
++ <xsl:choose>
++ <xsl:when test="substring-before($width, '*') != ''">
++ <xsl:value-of select="substring-before($width, '*')"/>
++ </xsl:when>
++ <xsl:otherwise>0</xsl:otherwise>
++ </xsl:choose>
++ </xsl:variable>
++
++ <xsl:element name="col">
++ <xsl:attribute name="width">
++ <xsl:value-of select="$width"/>
++ </xsl:attribute>
++ <xsl:attribute name="relwidth">
++ <xsl:value-of select="$relative.width"/>
++ </xsl:attribute>
++ <xsl:attribute name="abswidth">
++ <xsl:value-of select="$converted.absolute.width"/>
++ </xsl:attribute>
++ <xsl:apply-templates mode="dtbl-split-widths"/>
++ </xsl:element>
++</xsl:template>
++
++</xsl:stylesheet>
+diff -ruNp docbook-xsl-1.74.0.orig/html/table.xsl docbook-xsl-1.74.0/html/table.xsl
+--- docbook-xsl-1.74.0.orig/html/table.xsl 2008-06-01 23:36:39.000000000 +0200
++++ docbook-xsl-1.74.0/html/table.xsl 2008-08-06 13:37:35.000000000 +0200
+@@ -5,7 +5,8 @@
+ xmlns:xtbl="xalan://com.nwalsh.xalan.Table"
+ xmlns:lxslt="http://xml.apache.org/xslt"
+ xmlns:ptbl="http://nwalsh.com/xslt/ext/xsltproc/python/Table"
+- exclude-result-prefixes="doc stbl xtbl lxslt ptbl"
++ xmlns:dtbl="http://docbook.sourceforge.net/dtbl"
++ exclude-result-prefixes="doc stbl xtbl lxslt ptbl dtbl"
+ version='1.0'>
+
+ <xsl:include href="../common/table.xsl"/>
+@@ -365,6 +366,9 @@
+ <xsl:when test="$use.extensions != 0
+ and $tablecolumns.extension != 0">
+ <xsl:choose>
++ <xsl:when test="function-available('dtbl:convertLength')">
++ <xsl:value-of select="dtbl:convertLength($table.width)"/>
++ </xsl:when>
+ <xsl:when test="function-available('stbl:convertLength')">
+ <xsl:value-of select="stbl:convertLength($table.width)"/>
+ </xsl:when>
+@@ -389,6 +393,9 @@
+ <xsl:when test="$use.extensions != 0
+ and $tablecolumns.extension != 0">
+ <xsl:choose>
++ <xsl:when test="function-available('dtbl:adjustColumnWidths')">
++ <xsl:copy-of select="dtbl:adjustColumnWidths($colgroup)"/>
++ </xsl:when>
+ <xsl:when test="function-available('stbl:adjustColumnWidths')">
+ <xsl:copy-of select="stbl:adjustColumnWidths($colgroup)"/>
+ </xsl:when>
+diff -ruNp docbook-xsl-1.74.0.orig/lib/dumpfragment.xsl docbook-xsl-1.74.0/lib/dumpfragment.xsl
+--- docbook-xsl-1.74.0.orig/lib/dumpfragment.xsl 1970-01-01 01:00:00.000000000 +0100
++++ docbook-xsl-1.74.0/lib/dumpfragment.xsl 2008-08-06 13:37:35.000000000 +0200
+@@ -0,0 +1,30 @@
++<?xml version="1.0" encoding="US-ASCII"?>
++<xsl:stylesheet version="1.0"
++ xmlns:exsl="http://exslt.org/common"
++ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
++ xmlns="http://www.w3.org/1999/xhtml"
++ exclude-result-prefixes="exsl">
++
++<xsl:template name="dump-fragment">
++ <xsl:param name="fragment"/>
++ <xsl:apply-templates select="exsl:node-set($fragment)/*" mode="dump-fragment"/>
++</xsl:template>
++
++<xsl:template match="@*" mode="dump-fragment">
++ <xsl:text> </xsl:text>
++ <xsl:value-of select="local-name(.)"/>
++ <xsl:text>="</xsl:text>
++ <xsl:value-of select="."/>
++ <xsl:text>"</xsl:text>
++</xsl:template>
++
++<xsl:template match="*" mode="dump-fragment">
++ <xsl:text><</xsl:text><xsl:value-of select="local-name(.)"/>
++ <xsl:apply-templates select="@*" mode="dump-fragment"/>
++ <xsl:text>></xsl:text>
++ <xsl:apply-templates mode="dump-fragment"/>
++ <xsl:text></</xsl:text><xsl:value-of select="local-name(.)"/>
++ <xsl:text>></xsl:text>
++</xsl:template>
++
++</xsl:stylesheet>
+diff -urNp docbook-xsl-1.76.0-orig/html/param.xsl docbook-xsl-1.76.0/html/param.xsl
+--- docbook-xsl-1.76.0-orig/html/param.xsl 2010-08-31 09:27:22.000000000 +0200
++++ docbook-xsl-1.76.0/html/param.xsl 2010-09-06 11:01:07.916914161 +0200
+@@ -68,6 +68,7 @@ div.annotation-close { position: absolut
+ http://docbook.sourceforge.net/release/images/annot-close.png</xsl:param>
+ <xsl:param name="annotation.graphic.open">http://docbook.sourceforge.net/release/images/annot-open.png</xsl:param>
+
++<xsl:param name="adjustColumnWidths.debug" select="false()"/>
+ <xsl:param name="annotation.js">
+ <xsl:text>http://docbook.sourceforge.net/release/script/AnchorPosition.js http://docbook.sourceforge.net/release/script/PopupWindow.js</xsl:text></xsl:param>
+
--- /dev/null
+diff -ruNp docbook-xsl-1.74.0.orig/fo/param.xsl docbook-xsl-1.74.0/fo/param.xsl
+--- docbook-xsl-1.74.0.orig/fo/param.xsl 2008-08-06 13:32:46.000000000 +0200
++++ docbook-xsl-1.74.0/fo/param.xsl 2008-08-06 13:38:36.000000000 +0200
+@@ -23,8 +23,8 @@
+ <xsl:attribute name="keep-with-next.within-column">always</xsl:attribute>
+ <xsl:attribute name="keep-with-next.within-column">always</xsl:attribute>
+ <xsl:attribute name="space-before.optimum"><xsl:value-of select="concat($body.font.master, 'pt')"/></xsl:attribute>
+- <xsl:attribute name="space-before.minimum"><xsl:value-of select="concat($body.font.master, 'pt * 0.8')"/></xsl:attribute>
+- <xsl:attribute name="space-before.maximum"><xsl:value-of select="concat($body.font.master, 'pt * 1.2')"/></xsl:attribute>
++ <xsl:attribute name="space-before.minimum"><xsl:value-of select="concat(($body.font.master * 0.8), 'pt')"/></xsl:attribute>
++ <xsl:attribute name="space-before.maximum"><xsl:value-of select="concat(($body.font.master * 1.2), 'pt')"/></xsl:attribute>
+ <xsl:attribute name="hyphenate">false</xsl:attribute>
+ <xsl:attribute name="text-align">center</xsl:attribute>
+ </xsl:attribute-set>
+@@ -334,8 +334,8 @@ set toc,title
+ <xsl:attribute name="font-weight">bold</xsl:attribute>
+ <xsl:attribute name="keep-with-next.within-column">always</xsl:attribute>
+ <xsl:attribute name="space-before.optimum"><xsl:value-of select="concat($body.font.master,'pt')"/></xsl:attribute>
+- <xsl:attribute name="space-before.minimum"><xsl:value-of select="concat($body.font.master,'pt * 0.8')"/></xsl:attribute>
+- <xsl:attribute name="space-before.maximum"><xsl:value-of select="concat($body.font.master,'pt * 1.2')"/></xsl:attribute>
++ <xsl:attribute name="space-before.minimum"><xsl:value-of select="concat(($body.font.master * 0.8),'pt')"/></xsl:attribute>
++ <xsl:attribute name="space-before.maximum"><xsl:value-of select="concat(($body.font.master * 1.2),'pt')"/></xsl:attribute>
+ <xsl:attribute name="start-indent">0pt</xsl:attribute>
+ </xsl:attribute-set>
+ <xsl:attribute-set name="index.entry.properties">
--- /dev/null
+diff -ruNp docbook-xsl-1.74.0.orig/fo/pagesetup.xsl docbook-xsl-1.74.0/fo/pagesetup.xsl
+--- docbook-xsl-1.74.0.orig/fo/pagesetup.xsl 2008-06-01 23:36:39.000000000 +0200
++++ docbook-xsl-1.74.0/fo/pagesetup.xsl 2008-08-06 13:31:11.000000000 +0200
+@@ -1697,36 +1697,81 @@
+ <xsl:with-param name="gentext-key" select="$gentext-key"/>
+ </xsl:call-template>
+
+- <fo:table-column column-number="1">
+- <xsl:attribute name="column-width">
+- <xsl:text>proportional-column-width(</xsl:text>
+- <xsl:call-template name="header.footer.width">
+- <xsl:with-param name="location">header</xsl:with-param>
+- <xsl:with-param name="position" select="$column1"/>
+- </xsl:call-template>
+- <xsl:text>)</xsl:text>
+- </xsl:attribute>
+- </fo:table-column>
+- <fo:table-column column-number="2">
+- <xsl:attribute name="column-width">
+- <xsl:text>proportional-column-width(</xsl:text>
+- <xsl:call-template name="header.footer.width">
+- <xsl:with-param name="location">header</xsl:with-param>
+- <xsl:with-param name="position" select="2"/>
+- </xsl:call-template>
+- <xsl:text>)</xsl:text>
+- </xsl:attribute>
+- </fo:table-column>
+- <fo:table-column column-number="3">
+- <xsl:attribute name="column-width">
+- <xsl:text>proportional-column-width(</xsl:text>
+- <xsl:call-template name="header.footer.width">
+- <xsl:with-param name="location">header</xsl:with-param>
+- <xsl:with-param name="position" select="$column3"/>
+- </xsl:call-template>
+- <xsl:text>)</xsl:text>
+- </xsl:attribute>
+- </fo:table-column>
++ <xsl:choose>
++ <xsl:when test="$passivetex.extensions != 0">
++ <fo:table-column column-number="1">
++ <xsl:attribute name="column-width">
++ <xsl:call-template name="header.footer.width">
++ <xsl:with-param name="location">header</xsl:with-param>
++ <xsl:with-param name="position" select="$column1"/>
++ </xsl:call-template>
++ <xsl:text>%</xsl:text>
++ </xsl:attribute>
++ </fo:table-column>
++ </xsl:when>
++ <xsl:otherwise>
++ <fo:table-column column-number="1">
++ <xsl:attribute name="column-width">
++ <xsl:text>proportional-column-width(</xsl:text>
++ <xsl:call-template name="header.footer.width">
++ <xsl:with-param name="location">header</xsl:with-param>
++ <xsl:with-param name="position" select="$column1"/>
++ </xsl:call-template>
++ <xsl:text>)</xsl:text>
++ </xsl:attribute>
++ </fo:table-column>
++ </xsl:otherwise>
++ </xsl:choose>
++ <xsl:choose>
++ <xsl:when test="$passivetex.extensions != 0">
++ <fo:table-column column-number="2">
++ <xsl:attribute name="column-width">
++ <xsl:call-template name="header.footer.width">
++ <xsl:with-param name="location">header</xsl:with-param>
++ <xsl:with-param name="position" select="2"/>
++ </xsl:call-template>
++ <xsl:text>%</xsl:text>
++ </xsl:attribute>
++ </fo:table-column>
++ </xsl:when>
++ <xsl:otherwise>
++ <fo:table-column column-number="2">
++ <xsl:attribute name="column-width">
++ <xsl:text>proportional-column-width(</xsl:text>
++ <xsl:call-template name="header.footer.width">
++ <xsl:with-param name="location">header</xsl:with-param>
++ <xsl:with-param name="position" select="2"/>
++ </xsl:call-template>
++ <xsl:text>)</xsl:text>
++ </xsl:attribute>
++ </fo:table-column>
++ </xsl:otherwise>
++ </xsl:choose>
++ <xsl:choose>
++ <xsl:when test="$passivetex.extensions != 0">
++ <fo:table-column column-number="3">
++ <xsl:attribute name="column-width">
++ <xsl:call-template name="header.footer.width">
++ <xsl:with-param name="location">header</xsl:with-param>
++ <xsl:with-param name="position" select="$column3"/>
++ </xsl:call-template>
++ <xsl:text>%</xsl:text>
++ </xsl:attribute>
++ </fo:table-column>
++ </xsl:when>
++ <xsl:otherwise>
++ <fo:table-column column-number="3">
++ <xsl:attribute name="column-width">
++ <xsl:text>proportional-column-width(</xsl:text>
++ <xsl:call-template name="header.footer.width">
++ <xsl:with-param name="location">header</xsl:with-param>
++ <xsl:with-param name="position" select="$column3"/>
++ </xsl:call-template>
++ <xsl:text>)</xsl:text>
++ </xsl:attribute>
++ </fo:table-column>
++ </xsl:otherwise>
++ </xsl:choose>
+
+ <fo:table-body>
+ <fo:table-row>
+@@ -2021,36 +2066,81 @@
+ <xsl:with-param name="sequence" select="$sequence"/>
+ <xsl:with-param name="gentext-key" select="$gentext-key"/>
+ </xsl:call-template>
+- <fo:table-column column-number="1">
+- <xsl:attribute name="column-width">
+- <xsl:text>proportional-column-width(</xsl:text>
+- <xsl:call-template name="header.footer.width">
+- <xsl:with-param name="location">footer</xsl:with-param>
+- <xsl:with-param name="position" select="$column1"/>
+- </xsl:call-template>
+- <xsl:text>)</xsl:text>
+- </xsl:attribute>
+- </fo:table-column>
+- <fo:table-column column-number="2">
+- <xsl:attribute name="column-width">
+- <xsl:text>proportional-column-width(</xsl:text>
+- <xsl:call-template name="header.footer.width">
+- <xsl:with-param name="location">footer</xsl:with-param>
+- <xsl:with-param name="position" select="2"/>
+- </xsl:call-template>
+- <xsl:text>)</xsl:text>
+- </xsl:attribute>
+- </fo:table-column>
+- <fo:table-column column-number="3">
+- <xsl:attribute name="column-width">
+- <xsl:text>proportional-column-width(</xsl:text>
+- <xsl:call-template name="header.footer.width">
+- <xsl:with-param name="location">footer</xsl:with-param>
+- <xsl:with-param name="position" select="$column3"/>
+- </xsl:call-template>
+- <xsl:text>)</xsl:text>
+- </xsl:attribute>
+- </fo:table-column>
++ <xsl:choose>
++ <xsl:when test="$passivetex.extensions != 0">
++ <fo:table-column column-number="1">
++ <xsl:attribute name="column-width">
++ <xsl:call-template name="header.footer.width">
++ <xsl:with-param name="location">footer</xsl:with-param>
++ <xsl:with-param name="position" select="$column1"/>
++ </xsl:call-template>
++ <xsl:text>%</xsl:text>
++ </xsl:attribute>
++ </fo:table-column>
++ </xsl:when>
++ <xsl:otherwise>
++ <fo:table-column column-number="1">
++ <xsl:attribute name="column-width">
++ <xsl:text>proportional-column-width(</xsl:text>
++ <xsl:call-template name="header.footer.width">
++ <xsl:with-param name="location">footer</xsl:with-param>
++ <xsl:with-param name="position" select="$column1"/>
++ </xsl:call-template>
++ <xsl:text>)</xsl:text>
++ </xsl:attribute>
++ </fo:table-column>
++ </xsl:otherwise>
++ </xsl:choose>
++ <xsl:choose>
++ <xsl:when test="$passivetex.extensions != 0">
++ <fo:table-column column-number="2">
++ <xsl:attribute name="column-width">
++ <xsl:call-template name="header.footer.width">
++ <xsl:with-param name="location">footer</xsl:with-param>
++ <xsl:with-param name="position" select="2"/>
++ </xsl:call-template>
++ <xsl:text>%</xsl:text>
++ </xsl:attribute>
++ </fo:table-column>
++ </xsl:when>
++ <xsl:otherwise>
++ <fo:table-column column-number="2">
++ <xsl:attribute name="column-width">
++ <xsl:text>proportional-column-width(</xsl:text>
++ <xsl:call-template name="header.footer.width">
++ <xsl:with-param name="location">footer</xsl:with-param>
++ <xsl:with-param name="position" select="2"/>
++ </xsl:call-template>
++ <xsl:text>)</xsl:text>
++ </xsl:attribute>
++ </fo:table-column>
++ </xsl:otherwise>
++ </xsl:choose>
++ <xsl:choose>
++ <xsl:when test="$passivetex.extensions != 0">
++ <fo:table-column column-number="3">
++ <xsl:attribute name="column-width">
++ <xsl:call-template name="header.footer.width">
++ <xsl:with-param name="location">footer</xsl:with-param>
++ <xsl:with-param name="position" select="$column3"/>
++ </xsl:call-template>
++ <xsl:text>%</xsl:text>
++ </xsl:attribute>
++ </fo:table-column>
++ </xsl:when>
++ <xsl:otherwise>
++ <fo:table-column column-number="3">
++ <xsl:attribute name="column-width">
++ <xsl:text>proportional-column-width(</xsl:text>
++ <xsl:call-template name="header.footer.width">
++ <xsl:with-param name="location">footer</xsl:with-param>
++ <xsl:with-param name="position" select="$column3"/>
++ </xsl:call-template>
++ <xsl:text>)</xsl:text>
++ </xsl:attribute>
++ </fo:table-column>
++ </xsl:otherwise>
++ </xsl:choose>
+
+ <fo:table-body>
+ <fo:table-row>