File: //usr/share/yelp-xsl/xslt/docbook/html/db2html-xref.xsl
<?xml version='1.0' encoding='UTF-8'?><!-- -*- indent-tabs-mode: nil -*- -->
<!--
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the Free
Software Foundation; either version 2 of the License, or (at your option) any
later version.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
details.
You should have received a copy of the GNU Lesser General Public License
along with this program; see the file COPYING.LGPL. If not, see <http://www.gnu.org/licenses/>.
-->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:db="http://docbook.org/ns/docbook"
xmlns:xl="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/1999/xhtml"
exclude-result-prefixes="db xl"
version="1.0">
<!--!!==========================================================================
DocBook to HTML - Links and Cross References
REMARK: Describe this module
-->
<!--**==========================================================================
db2html.anchor
Generates an anchor point for an element
[xsl:params]
$node: The element to generate an anchor for
$name: The text to use for the `name` attribute
REMARK: Describe this template
-->
<xsl:template name="db2html.anchor" match="anchor | db:anchor">
<xsl:param name="node" select="."/>
<xsl:param name="name" select="$node/@id | $node/@xml:id"/>
<xsl:if test="$name"><a name="{$name}"/></xsl:if>
</xsl:template>
<!--**==========================================================================
db2html.link
Generates a hyperlink from a `link` element
[xsl:params]
$linkend: The id of the element being linked to
$target: The element being linked to
REMARK: Describe this template
-->
<xsl:template name="db2html.link" match="link">
<xsl:param name="linkend" select="@linkend"/>
<xsl:param name="target" select="key('db.id.key', $linkend)"/>
<a>
<xsl:call-template name="html.class.attr">
<xsl:with-param name="class" select="'link'"/>
</xsl:call-template>
<xsl:attribute name="href">
<xsl:call-template name="db.xref.target">
<xsl:with-param name="linkend" select="$linkend"/>
</xsl:call-template>
</xsl:attribute>
<xsl:attribute name="title">
<xsl:call-template name="db.xref.tooltip">
<xsl:with-param name="linkend" select="$linkend"/>
<xsl:with-param name="target" select="$target"/>
</xsl:call-template>
</xsl:attribute>
<xsl:choose>
<xsl:when test="normalize-space(.) != ''">
<xsl:apply-templates/>
</xsl:when>
<xsl:when test="@endterm">
<xsl:apply-templates select="key('db.id.key', @endterm)/node()"/>
</xsl:when>
</xsl:choose>
</a>
</xsl:template>
<!--**==========================================================================
db2html.ulink
Generates a hyperlink from a `ulink` element
[xsl:params]
$url: The URL to link to
$content: Optional content to use for the text of the link
REMARK: Describe this template
-->
<xsl:template name="db2html.ulink" match="ulink">
<xsl:param name="url" select="@url"/>
<xsl:param name="content" select="false()"/>
<a href="{$url}">
<xsl:call-template name="html.class.attr">
<xsl:with-param name="class" select="'ulink'"/>
</xsl:call-template>
<xsl:attribute name="title">
<xsl:call-template name="db.ulink.tooltip"/>
</xsl:attribute>
<xsl:choose>
<!--
Other templates, such as db2html.xlink (from ubiquitously linked
inlines) may pass us $content as a result tree fragment. If $content
is empty, it may still be evaluated as true, which isn't what we want.
-->
<xsl:when test="$content and string-length($content) != 0">
<xsl:copy-of select="$content"/>
</xsl:when>
<xsl:when test="string-length(normalize-space(node())) != 0">
<xsl:apply-templates/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$url"/>
</xsl:otherwise>
</xsl:choose>
</a>
</xsl:template>
<!--**==========================================================================
db2html.xlink
Generates a hyperlink from a DocBook 5 `link` element
[xsl:params]
$node: The node in question
$linkend: The ID of the element to link to
$url: The URL to link to
$content: Optional content to use for the text of the link
Note that this template is also called for inline elements that use DocBook 5's ubiquitous linking.
-->
<xsl:template name="db2html.xlink" match="db:link">
<xsl:param name="node" select="."/>
<xsl:param name="linkend" select="$node/@linkend"/>
<xsl:param name="url" select="$node/@xl:href"/>
<xsl:param name="content" select="false()"/>
<xsl:choose>
<xsl:when test="$url">
<xsl:call-template name="db2html.ulink">
<xsl:with-param name="url" select="$url"/>
<xsl:with-param name="content" select="$content"/>
</xsl:call-template>
</xsl:when>
<xsl:when test="$linkend">
<xsl:call-template name="db2html.link">
<xsl:with-param name="linkend" select="$linkend"/>
</xsl:call-template>
</xsl:when>
</xsl:choose>
</xsl:template>
<!--**==========================================================================
db2html.xref
Generates a hyperlink from an `xref` element
[xsl:params]
$linkend: The id of the element being linked to
$target: The element being linked to
$endterm: The id of an element whose contents will be used for the link text
$xrefstyle: The style of cross reference text to use
$content: Optional content to use for the text of the link
REMARK: Describe this template
-->
<xsl:template name="db2html.xref" match="xref | db:xref">
<xsl:param name="linkend" select="@linkend"/>
<xsl:param name="target" select="key('db.id.key', $linkend)"/>
<xsl:param name="endterm" select="@endterm"/>
<xsl:param name="xrefstyle" select="@xrefstyle"/>
<xsl:param name="content" select="false()"/>
<a>
<xsl:call-template name="html.class.attr">
<xsl:with-param name="class" select="'xref'"/>
</xsl:call-template>
<xsl:attribute name="href">
<xsl:call-template name="db.xref.target">
<xsl:with-param name="linkend" select="$linkend"/>
<xsl:with-param name="target" select="$target"/>
</xsl:call-template>
</xsl:attribute>
<xsl:attribute name="title">
<xsl:call-template name="db.xref.tooltip">
<xsl:with-param name="linkend" select="$linkend"/>
<xsl:with-param name="target" select="$target"/>
</xsl:call-template>
</xsl:attribute>
<xsl:choose>
<xsl:when test="$content">
<xsl:copy-of select="$content"/>
</xsl:when>
<xsl:when test="$endterm">
<xsl:apply-templates select="key('db.id.key', $endterm)/node()"/>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="db.xref.content">
<xsl:with-param name="linkend" select="$linkend"/>
<xsl:with-param name="target" select="$target"/>
<xsl:with-param name="xrefstyle" select="$xrefstyle"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</a>
</xsl:template>
</xsl:stylesheet>