diff options
Diffstat (limited to 'kdoctools/docbook/xsl/common/labels.xsl')
-rw-r--r-- | kdoctools/docbook/xsl/common/labels.xsl | 686 |
1 files changed, 686 insertions, 0 deletions
diff --git a/kdoctools/docbook/xsl/common/labels.xsl b/kdoctools/docbook/xsl/common/labels.xsl new file mode 100644 index 000000000..bc18bf021 --- /dev/null +++ b/kdoctools/docbook/xsl/common/labels.xsl @@ -0,0 +1,686 @@ +<?xml version='1.0'?> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:doc="http://nwalsh.com/xsl/documentation/1.0" + exclude-result-prefixes="doc" + version='1.0'> + +<!-- ******************************************************************** + $Id$ + ******************************************************************** + + This file is part of the XSL DocBook Stylesheet distribution. + See ../README or http://nwalsh.com/docbook/xsl/ for copyright + and other information. + + ******************************************************************** --> + +<!-- ==================================================================== --> + +<!-- label markup --> + +<doc:mode mode="label.markup" xmlns=""> +<refpurpose>Provides access to element labels</refpurpose> +<refdescription> +<para>Processing an element in the +<literal role="mode">label.markup</literal> mode produces the +element label.</para> +<para>Trailing punctuation is not added to the label. +</para> +</refdescription> +</doc:mode> + +<xsl:template match="*" mode="intralabel.punctuation"> + <xsl:text>.</xsl:text> +</xsl:template> + +<xsl:template match="*" mode="label.markup"> + <xsl:param name="verbose" select="1"/> + <xsl:if test="$verbose"> + <xsl:message> + <xsl:text>Request for label of unexpected element: </xsl:text> + <xsl:value-of select="name(.)"/> + </xsl:message> + </xsl:if> +</xsl:template> + +<xsl:template match="set|book" mode="label.markup"> + <xsl:if test="@label"> + <xsl:value-of select="@label"/> + </xsl:if> +</xsl:template> + +<xsl:template match="part" mode="label.markup"> + <xsl:choose> + <xsl:when test="@label"> + <xsl:value-of select="@label"/> + </xsl:when> + <xsl:when test="$part.autolabel != 0"> + <xsl:number from="book" count="part" format="I"/> + </xsl:when> + </xsl:choose> +</xsl:template> + +<xsl:template match="partintro" mode="label.markup"> + <!-- no label --> +</xsl:template> + +<xsl:template match="preface" mode="label.markup"> + <xsl:choose> + <xsl:when test="@label"> + <xsl:value-of select="@label"/> + </xsl:when> + <xsl:when test="$preface.autolabel != 0"> + <xsl:if test="$component.label.includes.part.label != 0 and + ancestor::part"> + <xsl:variable name="part.label"> + <xsl:apply-templates select="ancestor::part" + mode="label.markup"/> + </xsl:variable> + <xsl:if test="$part.label != ''"> + <xsl:value-of select="$part.label"/> + <xsl:apply-templates select="ancestor::part" + mode="intralabel.punctuation"/> + </xsl:if> + </xsl:if> + <xsl:choose> + <xsl:when test="$label.from.part != 0 and ancestor::part"> + <xsl:number from="part" count="preface" format="1" level="any"/> + </xsl:when> + <xsl:otherwise> + <xsl:number from="book" count="preface" format="1" level="any"/> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + </xsl:choose> +</xsl:template> + +<xsl:template match="chapter" mode="label.markup"> + <xsl:choose> + <xsl:when test="@label"> + <xsl:value-of select="@label"/> + </xsl:when> + <xsl:when test="$chapter.autolabel != 0"> + <xsl:if test="$component.label.includes.part.label != 0 and + ancestor::part"> + <xsl:variable name="part.label"> + <xsl:apply-templates select="ancestor::part" + mode="label.markup"/> + </xsl:variable> + <xsl:if test="$part.label != ''"> + <xsl:value-of select="$part.label"/> + <xsl:apply-templates select="ancestor::part" + mode="intralabel.punctuation"/> + </xsl:if> + </xsl:if> + <xsl:choose> + <xsl:when test="$label.from.part != 0 and ancestor::part"> + <xsl:number from="part" count="chapter" format="1" level="any"/> + </xsl:when> + <xsl:otherwise> + <xsl:number from="book" count="chapter" format="1" level="any"/> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + </xsl:choose> +</xsl:template> + +<xsl:template match="appendix" mode="label.markup"> + <xsl:choose> + <xsl:when test="@label"> + <xsl:value-of select="@label"/> + </xsl:when> + <xsl:when test="$appendix.autolabel != 0"> + <xsl:if test="$component.label.includes.part.label != 0 and + ancestor::part"> + <xsl:variable name="part.label"> + <xsl:apply-templates select="ancestor::part" + mode="label.markup"/> + </xsl:variable> + <xsl:if test="$part.label != ''"> + <xsl:value-of select="$part.label"/> + <xsl:apply-templates select="ancestor::part" + mode="intralabel.punctuation"/> + </xsl:if> + </xsl:if> + <xsl:choose> + <xsl:when test="$label.from.part != 0 and ancestor::part"> + <xsl:number from="part" count="appendix" format="A" level="any"/> + </xsl:when> + <xsl:otherwise> + <xsl:number from="book|article" + count="appendix" format="A" level="any"/> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + </xsl:choose> +</xsl:template> + +<xsl:template match="article" mode="label.markup"> + <xsl:if test="@label"> + <xsl:value-of select="@label"/> + </xsl:if> +</xsl:template> + +<xsl:template match="dedication|colophon" mode="label.markup"> + <xsl:if test="@label"> + <xsl:value-of select="@label"/> + </xsl:if> +</xsl:template> + +<xsl:template match="reference" mode="label.markup"> + <xsl:choose> + <xsl:when test="@label"> + <xsl:value-of select="@label"/> + </xsl:when> + <xsl:when test="$part.autolabel != 0"> + <xsl:number from="book" count="reference" format="I" level="any"/> + </xsl:when> + </xsl:choose> +</xsl:template> + +<xsl:template match="refentry" mode="label.markup"> + <xsl:if test="@label"> + <xsl:value-of select="@label"/> + </xsl:if> +</xsl:template> + +<xsl:template match="section" mode="label.markup"> + <!-- if this is a nested section, label the parent --> + <xsl:if test="local-name(..) = 'section'"> + <xsl:variable name="parent.section.label"> + <xsl:call-template name="label.this.section"> + <xsl:with-param name="section" select=".."/> + </xsl:call-template> + </xsl:variable> + <xsl:if test="$parent.section.label != '0'"> + <xsl:apply-templates select=".." mode="label.markup"/> + <xsl:apply-templates select=".." mode="intralabel.punctuation"/> + </xsl:if> + </xsl:if> + + <!-- if the parent is a component, maybe label that too --> + <xsl:variable name="parent.is.component"> + <xsl:call-template name="is.component"> + <xsl:with-param name="node" select=".."/> + </xsl:call-template> + </xsl:variable> + + <!-- does this section get labelled? --> + <xsl:variable name="label"> + <xsl:call-template name="label.this.section"> + <xsl:with-param name="section" select="."/> + </xsl:call-template> + </xsl:variable> + + <xsl:if test="$section.label.includes.component.label != 0 + and $parent.is.component != 0"> + <xsl:variable name="parent.label"> + <xsl:apply-templates select=".." mode="label.markup"/> + </xsl:variable> + <xsl:if test="$parent.label != ''"> + <xsl:apply-templates select=".." mode="label.markup"/> + <xsl:apply-templates select=".." mode="intralabel.punctuation"/> + </xsl:if> + </xsl:if> + +<!-- + <xsl:message> + test: <xsl:value-of select="$label"/>, <xsl:number count="section"/> + </xsl:message> +--> + + <xsl:choose> + <xsl:when test="@label"> + <xsl:value-of select="@label"/> + </xsl:when> + <xsl:when test="$label != 0"> + <xsl:number count="section"/> + </xsl:when> + </xsl:choose> +</xsl:template> + +<xsl:template match="sect1" mode="label.markup"> + <!-- if the parent is a component, maybe label that too --> + <xsl:variable name="parent.is.component"> + <xsl:call-template name="is.component"> + <xsl:with-param name="node" select=".."/> + </xsl:call-template> + </xsl:variable> + + <xsl:if test="$section.label.includes.component.label != 0 + and $parent.is.component != 0"> + <xsl:variable name="parent.label"> + <xsl:apply-templates select=".." mode="label.markup"/> + </xsl:variable> + <xsl:if test="$parent.label != ''"> + <xsl:apply-templates select=".." mode="label.markup"/> + <xsl:apply-templates select=".." mode="intralabel.punctuation"/> + </xsl:if> + </xsl:if> + + <xsl:variable name="is.numbered"> + <xsl:call-template name="label.this.section"/> + </xsl:variable> + + <xsl:choose> + <xsl:when test="@label"> + <xsl:value-of select="@label"/> + </xsl:when> + <xsl:when test="$is.numbered != 0"> + <xsl:number count="sect1"/> + </xsl:when> + </xsl:choose> +</xsl:template> + +<xsl:template match="sect2|sect3|sect4|sect5" mode="label.markup"> + <!-- label the parent --> + <xsl:variable name="parent.section.label"> + <xsl:call-template name="label.this.section"> + <xsl:with-param name="section" select=".."/> + </xsl:call-template> + </xsl:variable> + <xsl:if test="$parent.section.label != '0'"> + <xsl:apply-templates select=".." mode="label.markup"/> + <xsl:apply-templates select=".." mode="intralabel.punctuation"/> + </xsl:if> + + <xsl:variable name="is.numbered"> + <xsl:call-template name="label.this.section"/> + </xsl:variable> + + <xsl:choose> + <xsl:when test="@label"> + <xsl:value-of select="@label"/> + </xsl:when> + <xsl:when test="$is.numbered != 0"> + <xsl:choose> + <xsl:when test="local-name(.) = 'sect2'"> + <xsl:number count="sect2"/> + </xsl:when> + <xsl:when test="local-name(.) = 'sect3'"> + <xsl:number count="sect3"/> + </xsl:when> + <xsl:when test="local-name(.) = 'sect4'"> + <xsl:number count="sect4"/> + </xsl:when> + <xsl:when test="local-name(.) = 'sect5'"> + <xsl:number count="sect5"/> + </xsl:when> + <xsl:otherwise> + <xsl:message>label.markup: this can't happen!</xsl:message> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + </xsl:choose> +</xsl:template> + +<xsl:template match="bridgehead" mode="label.markup"> + <!-- FIXME: could we do a better job here? --> + <xsl:variable name="contsec" + select="(ancestor::section + |ancestor::simplesect + |ancestor::sect1 + |ancestor::sect2 + |ancestor::sect3 + |ancestor::sect4 + |ancestor::sect5 + |ancestor::refsect1 + |ancestor::refsect2 + |ancestor::refsect3 + |ancestor::chapter + |ancestor::appendix + |ancestor::preface)[last()]"/> + + <xsl:apply-templates select="$contsec" mode="label.markup"/> +</xsl:template> + +<xsl:template match="refsect1" mode="label.markup"> + <xsl:choose> + <xsl:when test="@label"> + <xsl:value-of select="@label"/> + </xsl:when> + <xsl:when test="$section.autolabel != 0"> + <xsl:number count="refsect1"/> + </xsl:when> + </xsl:choose> +</xsl:template> + +<xsl:template match="refsect2|refsect3" mode="label.markup"> + <!-- label the parent --> + <xsl:variable name="parent.label"> + <xsl:apply-templates select=".." mode="label.markup"/> + </xsl:variable> + <xsl:if test="$parent.label != ''"> + <xsl:apply-templates select=".." mode="label.markup"/> + <xsl:apply-templates select=".." mode="intralabel.punctuation"/> + </xsl:if> + + <xsl:choose> + <xsl:when test="@label"> + <xsl:value-of select="@label"/> + </xsl:when> + <xsl:when test="$section.autolabel != 0"> + <xsl:choose> + <xsl:when test="local-name(.) = 'refsect2'"> + <xsl:number count="refsect2"/> + </xsl:when> + <xsl:otherwise> + <xsl:number count="refsect3"/> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + </xsl:choose> +</xsl:template> + +<xsl:template match="simplesect" mode="label.markup"> + <!-- if this is a nested section, label the parent --> + <xsl:if test="local-name(..) = 'section' + or local-name(..) = 'sect1' + or local-name(..) = 'sect2' + or local-name(..) = 'sect3' + or local-name(..) = 'sect4' + or local-name(..) = 'sect5'"> + <xsl:variable name="parent.section.label"> + <xsl:apply-templates select=".." mode="label.markup"/> + </xsl:variable> + <xsl:if test="$parent.section.label != ''"> + <xsl:apply-templates select=".." mode="label.markup"/> + <xsl:apply-templates select=".." mode="intralabel.punctuation"/> + </xsl:if> + </xsl:if> + + <!-- if the parent is a component, maybe label that too --> + <xsl:variable name="parent.is.component"> + <xsl:call-template name="is.component"> + <xsl:with-param name="node" select=".."/> + </xsl:call-template> + </xsl:variable> + + <!-- does this section get labelled? --> + <xsl:variable name="label"> + <xsl:call-template name="label.this.section"> + <xsl:with-param name="section" select="."/> + </xsl:call-template> + </xsl:variable> + + <xsl:if test="$section.label.includes.component.label != 0 + and $parent.is.component != 0"> + <xsl:variable name="parent.label"> + <xsl:apply-templates select=".." mode="label.markup"/> + </xsl:variable> + <xsl:if test="$parent.label != ''"> + <xsl:apply-templates select=".." mode="label.markup"/> + <xsl:apply-templates select=".." mode="intralabel.punctuation"/> + </xsl:if> + </xsl:if> + + <xsl:choose> + <xsl:when test="@label"> + <xsl:value-of select="@label"/> + </xsl:when> + <xsl:when test="$label != 0"> + <xsl:number count="simplesect"/> + </xsl:when> + </xsl:choose> +</xsl:template> + +<xsl:template match="qandadiv" mode="label.markup"> + <xsl:variable name="lparent" select="(ancestor::set + |ancestor::book + |ancestor::chapter + |ancestor::appendix + |ancestor::preface + |ancestor::section + |ancestor::simplesect + |ancestor::sect1 + |ancestor::sect2 + |ancestor::sect3 + |ancestor::sect4 + |ancestor::sect5 + |ancestor::refsect1 + |ancestor::refsect2 + |ancestor::refsect3)[last()]"/> + + <xsl:variable name="lparent.prefix"> + <xsl:apply-templates select="$lparent" mode="label.markup"/> + </xsl:variable> + + <xsl:variable name="prefix"> + <xsl:if test="$qanda.inherit.numeration != 0"> + <xsl:if test="$lparent.prefix != ''"> + <xsl:apply-templates select="$lparent" mode="label.markup"/> + <xsl:apply-templates select="$lparent" mode="intralabel.punctuation"/> + </xsl:if> + </xsl:if> + </xsl:variable> + + <xsl:choose> + <xsl:when test="$qandadiv.autolabel != 0"> + <xsl:value-of select="$prefix"/> + <xsl:number level="multiple" count="qandadiv" format="1"/> + </xsl:when> + </xsl:choose> +</xsl:template> + +<xsl:template match="question|answer" mode="label.markup"> + <xsl:variable name="lparent" select="(ancestor::set + |ancestor::book + |ancestor::chapter + |ancestor::appendix + |ancestor::preface + |ancestor::section + |ancestor::simplesect + |ancestor::sect1 + |ancestor::sect2 + |ancestor::sect3 + |ancestor::sect4 + |ancestor::sect5 + |ancestor::refsect1 + |ancestor::refsect2 + |ancestor::refsect3)[last()]"/> + + <xsl:variable name="lparent.prefix"> + <xsl:apply-templates select="$lparent" mode="label.markup"/> + </xsl:variable> + + <xsl:variable name="prefix"> + <xsl:if test="$qanda.inherit.numeration != 0"> + <xsl:choose> + <xsl:when test="ancestor::qandadiv"> + <xsl:apply-templates select="ancestor::qandadiv[1]" mode="label.markup"/> + <xsl:apply-templates select="ancestor::qandadiv[1]" + mode="intralabel.punctuation"/> + </xsl:when> + <xsl:when test="$lparent.prefix != ''"> + <xsl:apply-templates select="$lparent" mode="label.markup"/> + <xsl:apply-templates select="$lparent" mode="intralabel.punctuation"/> + </xsl:when> + </xsl:choose> + </xsl:if> + </xsl:variable> + + <xsl:variable name="inhlabel" + select="ancestor-or-self::qandaset/@defaultlabel[1]"/> + + <xsl:variable name="deflabel"> + <xsl:choose> + <xsl:when test="$inhlabel != ''"> + <xsl:value-of select="$inhlabel"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$qanda.defaultlabel"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:variable name="label" select="label"/> + + <xsl:choose> + <xsl:when test="count($label)>0"> + <xsl:apply-templates select="$label"/> + </xsl:when> + + <xsl:when test="$deflabel = 'qanda' and local-name(.) = 'question'"> + <xsl:call-template name="gentext"> + <xsl:with-param name="key" select="'Question'"/> + </xsl:call-template> + </xsl:when> + + <xsl:when test="$deflabel = 'qanda' and local-name(.) = 'answer'"> + <xsl:call-template name="gentext"> + <xsl:with-param name="key" select="'Answer'"/> + </xsl:call-template> + </xsl:when> + + <xsl:when test="$deflabel = 'number' and local-name(.) = 'question'"> + <xsl:value-of select="$prefix"/> + <xsl:number level="multiple" count="qandaentry" format="1"/> + </xsl:when> + </xsl:choose> +</xsl:template> + +<xsl:template match="bibliography|glossary|index|setindex" mode="label.markup"> + <xsl:if test="@label"> + <xsl:value-of select="@label"/> + </xsl:if> +</xsl:template> + +<xsl:template match="figure|table|example|procedure" mode="label.markup"> + <xsl:variable name="pchap" + select="ancestor::chapter + |ancestor::appendix + |ancestor::article[ancestor::book]"/> + + <xsl:variable name="prefix"> + <xsl:if test="count($pchap) > 0"> + <xsl:apply-templates select="$pchap" mode="label.markup"/> + </xsl:if> + </xsl:variable> + + <xsl:choose> + <xsl:when test="@label"> + <xsl:value-of select="@label"/> + </xsl:when> + <xsl:when test="local-name() = 'procedure' and + $formal.procedures = 0"> + <!-- No label --> + </xsl:when> + <xsl:otherwise> + <xsl:choose> + <xsl:when test="count($pchap)>0"> + <xsl:if test="$prefix != ''"> + <xsl:apply-templates select="$pchap" mode="label.markup"/> + <xsl:apply-templates select="$pchap" mode="intralabel.punctuation"/> + </xsl:if> + <xsl:number format="1" from="chapter|appendix" level="any"/> + </xsl:when> + <xsl:otherwise> + <xsl:number format="1" from="book|article" level="any"/> + </xsl:otherwise> + </xsl:choose> + </xsl:otherwise> + </xsl:choose> +</xsl:template> + +<xsl:template match="equation" mode="label.markup"> + <xsl:variable name="pchap" + select="ancestor::chapter + |ancestor::appendix + |ancestor::article[ancestor::book]"/> + + <xsl:variable name="prefix"> + <xsl:if test="count($pchap) > 0"> + <xsl:apply-templates select="$pchap" mode="label.markup"/> + </xsl:if> + </xsl:variable> + + <xsl:choose> + <xsl:when test="@label"> + <xsl:value-of select="@label"/> + </xsl:when> + <xsl:otherwise> + <xsl:choose> + <xsl:when test="count($pchap)>0"> + <xsl:if test="$prefix != ''"> + <xsl:apply-templates select="$pchap" mode="label.markup"/> + <xsl:apply-templates select="$pchap" mode="intralabel.punctuation"/> + </xsl:if> + <xsl:number format="1" count="equation[title]" from="chapter|appendix" level="any"/> + </xsl:when> + <xsl:otherwise> + <xsl:number format="1" count="equation[title]" from="book|article" level="any"/> + </xsl:otherwise> + </xsl:choose> + </xsl:otherwise> + </xsl:choose> +</xsl:template> + +<xsl:template match="orderedlist/listitem" mode="label.markup"> + <xsl:variable name="numeration"> + <xsl:call-template name="list.numeration"> + <xsl:with-param name="node" select="parent::orderedlist"/> + </xsl:call-template> + </xsl:variable> + + <xsl:variable name="type"> + <xsl:choose> + <xsl:when test="$numeration='arabic'">1</xsl:when> + <xsl:when test="$numeration='loweralpha'">a</xsl:when> + <xsl:when test="$numeration='lowerroman'">i</xsl:when> + <xsl:when test="$numeration='upperalpha'">A</xsl:when> + <xsl:when test="$numeration='upperroman'">I</xsl:when> + <!-- What!? This should never happen --> + <xsl:otherwise> + <xsl:message> + <xsl:text>Unexpected numeration: </xsl:text> + <xsl:value-of select="$numeration"/> + </xsl:message> + <xsl:value-of select="1."/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:variable name="item-number"> + <xsl:call-template name="orderedlist-item-number"/> + </xsl:variable> + + <xsl:number value="$item-number" format="{$type}"/> +</xsl:template> + +<xsl:template match="abstract" mode="label.markup"> + <!-- nop --> +</xsl:template> + +<!-- ============================================================ --> + +<xsl:template name="label.this.section"> + <xsl:param name="section" select="."/> + + <xsl:variable name="level"> + <xsl:call-template name="section.level"/> + </xsl:variable> + + <xsl:choose> + <xsl:when test="$level <= $section.autolabel.max.depth"> + <xsl:value-of select="$section.autolabel"/> + </xsl:when> + <xsl:otherwise>0</xsl:otherwise> + </xsl:choose> +</xsl:template> + +<doc:template name="label.this.section" xmlns=""> +<refpurpose>Returns true if $section should be labelled</refpurpose> +<refdescription> +<para>Returns true if the specified section should be labelled. +By default, this template returns zero unless +the section level is less than or equal to the value of the +<literal>$section.autolabel.max.depth</literal> parameter, in +which case it returns +<literal>$section.autolabel</literal>. +Custom stylesheets may override it to get more selective behavior.</para> +</refdescription> +</doc:template> + +<!-- ============================================================ --> + +</xsl:stylesheet> |