%PDF- %PDF-
Direktori : /usr/share/yelp-xsl/xslt/docbook/html/ |
Current File : //usr/share/yelp-xsl/xslt/docbook/html/db2html-index.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/>. --> <!DOCTYPE xsl:stylesheet [ <!ENTITY % selectors SYSTEM "../common/db-selectors.mod"> %selectors; <!ENTITY primarykey "normalize-space(concat( primary/@sortas | db:primary/@sortas, ' ', primary | db:primary))"> <!ENTITY secondarykey "normalize-space(concat( primary/@sortas | db:primary/@sortas, ' ', primary | db:primary, ' ', secondary/@sortas | db:secondary/@sortas, ' ', secondary | db:secondary))"> <!ENTITY tertiarykey "normalize-space(concat( primary/@sortas | db:primary/@sortas, ' ', primary | db:primary, ' ', secondary/@sortas | db:secondary/@sortas, ' ', secondary | db:secondary, ' ', tertiary/@sortas | db:tertiary/@sortas, ' ', tertiary | db:tertiary))"> <!ENTITY uppercase "'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"> <!ENTITY lowercase "'abcdefghijklmnopqrstuvwxyz'"> ]> <!-- FIXME: upper/lower for langs? --> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:db="http://docbook.org/ns/docbook" xmlns:msg="http://projects.gnome.org/yelp/gettext/" xmlns:set="http://exslt.org/sets" xmlns="http://www.w3.org/1999/xhtml" exclude-result-prefixes="db msg set" version="1.0"> <!--!!========================================================================== DocBook to HTML - Indexes This module provides templates to process DocBook indexes. --> <!-- FIXME: indexdiv seeie seealsoie indexterm (autoidx) --> <xsl:key name="db.index.all.key" match="indexterm | db:indexterm" use="''"/> <xsl:key name="db.index.primary.key" match="indexterm | db:indexterm" use="&primarykey;"/> <xsl:key name="db.index.secondary.key" match="indexterm[secondary] | db:indexterm[db:secondary]" use="&secondarykey;"/> <xsl:key name="db.index.tertiary.key" match="indexterm[tertiary] | db:indexterm[db:tertiary]" use="&tertiarykey;"/> <!-- == Matched Templates == --> <!-- = suppress = --> <xsl:template match="primaryie | db:primaryie"/> <xsl:template match="secondaryie | db:secondaryie"/> <xsl:template match="tertiaryie | db:tertiaryie"/> <!-- = indexentry = --> <xsl:template match="indexentry | db:indexentry"> <xsl:variable name="if"><xsl:call-template name="db.profile.test"/></xsl:variable> <xsl:if test="$if != ''"> <dt class="ixprimary"> <xsl:apply-templates select="primaryie/node() | db:primaryie/node()"/> </dt> <xsl:variable name="pri_see" select="seeie[not(preceding-sibling::secondaryie)] | db:seeie[not(preceding-sibling::db:secondaryie)]"/> <xsl:variable name="pri_seealso" select="seealsoie[not(preceding-sibling::secondaryie)] | db:seealsoie[not(preceding-sibling::db:secondaryie)]"/> <xsl:if test="$pri_see"> <dd class="ixsee"> <xsl:call-template name="l10n.gettext"> <xsl:with-param name="msgid" select="'seeie.format'"/> <xsl:with-param name="node" select="$pri_see"/> <xsl:with-param name="format" select="true()"/> </xsl:call-template> </dd> </xsl:if> <xsl:if test="$pri_seealso"> <dd class="ixseealso"> <xsl:call-template name="l10n.gettext"> <xsl:with-param name="msgid" select="'seealsoie.format'"/> <xsl:with-param name="node" select="$pri_seealso"/> <xsl:with-param name="format" select="true()"/> </xsl:call-template> </dd> </xsl:if> <xsl:for-each select="secondaryie | db:secondaryie"> <dd class="ixsecondary"> <dl class="ixsecondary"> <dt class="ixsecondary"> <xsl:apply-templates/> </dt> <xsl:variable name="sec_see" select="following-sibling::seeie [set:has-same-node(preceding-sibling::secondaryie[1], current())] | following-sibling::db:seeie [set:has-same-node(preceding-sibling::db:secondaryie[1], current())]"/> <xsl:variable name="sec_seealso" select="following-sibling::seealsoie [set:has-same-node(preceding-sibling::secondaryie[1], current())] | following-sibling::db:seealsoie [set:has-same-node(preceding-sibling::db:secondaryie[1], current())]"/> <xsl:variable name="tertiary" select="following-sibling::tertiaryie [set:has-same-node(preceding-sibling::secondaryie[1], current())] | following-sibling::db:tertiaryie [set:has-same-node(preceding-sibling::db:secondaryie[1], current())]"/> <xsl:if test="$sec_see"> <dd class="ixsee"> <xsl:call-template name="l10n.gettext"> <xsl:with-param name="msgid" select="'seeie.format'"/> <xsl:with-param name="node" select="$sec_see"/> <xsl:with-param name="format" select="true()"/> </xsl:call-template> </dd> </xsl:if> <xsl:if test="$sec_seealso"> <dd class="ixseealso"> <xsl:call-template name="l10n.gettext"> <xsl:with-param name="msgid" select="'seealsoie.format'"/> <xsl:with-param name="node" select="$sec_seealso"/> <xsl:with-param name="format" select="true()"/> </xsl:call-template> </dd> </xsl:if> <xsl:if test="$tertiary"> <!-- FIXME --> </xsl:if> </dl> </dd> </xsl:for-each> </xsl:if> </xsl:template> <!-- = index = --> <xsl:template match="index | db:index"> <xsl:param name="depth_in_chunk"> <xsl:call-template name="db.chunk.depth-in-chunk"/> </xsl:param> <xsl:param name="depth_of_chunk"> <xsl:call-template name="db.chunk.depth-of-chunk"/> </xsl:param> <xsl:call-template name="db2html.division.div"> <xsl:with-param name="info" select="indexinfo | db:info"/> <xsl:with-param name="divisions" select="indexdiv | db:indexdiv"/> <xsl:with-param name="entries" select="indexentry | db:indexentry"/> <xsl:with-param name="depth_in_chunk" select="$depth_in_chunk"/> <xsl:with-param name="depth_of_chunk" select="$depth_of_chunk"/> </xsl:call-template> </xsl:template> <!-- = indexdiv = --> <xsl:template match="indexdiv | db:indexdiv"> <xsl:param name="depth_in_chunk"> <xsl:call-template name="db.chunk.depth-in-chunk"/> </xsl:param> <xsl:param name="depth_of_chunk"> <xsl:call-template name="db.chunk.depth-of-chunk"/> </xsl:param> <xsl:call-template name="db2html.division.div"> <xsl:with-param name="entries" select="indexentry | db:indexentry"/> <xsl:with-param name="depth_in_chunk" select="$depth_in_chunk"/> <xsl:with-param name="depth_of_chunk" select="$depth_of_chunk"/> </xsl:call-template> </xsl:template> <!-- = setindex = --> <xsl:template match="setindex | db:setindex"> <xsl:param name="depth_in_chunk"> <xsl:call-template name="db.chunk.depth-in-chunk"/> </xsl:param> <xsl:param name="depth_of_chunk"> <xsl:call-template name="db.chunk.depth-of-chunk"/> </xsl:param> <xsl:call-template name="db2html.division.div"> <xsl:with-param name="info" select="setindexinfo | db:info"/> <xsl:with-param name="divisions" select="indexdiv | db:indexdiv"/> <xsl:with-param name="entries" select="indexentry | db:indexentry"/> <xsl:with-param name="depth_in_chunk" select="$depth_in_chunk"/> <xsl:with-param name="depth_of_chunk" select="$depth_of_chunk"/> </xsl:call-template> </xsl:template> <!--#% l10n.format.mode --> <xsl:template mode="l10n.format.mode" match="msg:seeie"> <xsl:param name="node"/> <xsl:for-each select="$node"> <xsl:if test="position() != 1"> <xsl:call-template name="l10n.gettext"> <xsl:with-param name="msgid" select="', '"/> </xsl:call-template> </xsl:if> <xsl:apply-templates/> <!-- <xsl:choose> <xsl:when test="@otherterm"> <a> <xsl:attribute name="href"> <xsl:call-template name="db.xref.target"> <xsl:with-param name="linkend" select="@otherterm"/> </xsl:call-template> </xsl:attribute> <xsl:attribute name="title"> <xsl:call-template name="db.xref.tooltip"> <xsl:with-param name="linkend" select="@otherterm"/> </xsl:call-template> </xsl:attribute> <xsl:choose> <xsl:when test="normalize-space(.) != ''"> <xsl:apply-templates/> </xsl:when> <xsl:otherwise> <xsl:call-template name="db.xref.content"> <xsl:with-param name="linkend" select="@otherterm"/> <xsl:with-param name="role" select="'glosssee'"/> </xsl:call-template> </xsl:otherwise> </xsl:choose> </a> </xsl:when> <xsl:otherwise> <xsl:apply-templates/> </xsl:otherwise> </xsl:choose> --> </xsl:for-each> </xsl:template> <!-- = index % db2html.division.div.content.mode = --> <!-- Auto-generated indexes --> <xsl:template mode="db2html.division.div.content.mode" match="index[count(indexentry | indexdiv) = 0] | db:index[count(db:indexentry | db:indexdiv) = 0]"> <xsl:param name="node" select="."/> <xsl:param name="info" select="indexinfo | db:info"/> <xsl:param name="depth_in_chunk"> <xsl:call-template name="db.chunk.depth-in-chunk"> <xsl:with-param name="node" select="$node"/> </xsl:call-template> </xsl:param> <xsl:param name="depth_of_chunk"> <xsl:call-template name="db.chunk.depth-of-chunk"> <xsl:with-param name="node" select="$node"/> </xsl:call-template> </xsl:param> <xsl:variable name="nots" select="title | db:title | titleabbrev | db:titleabbrev | subtitle | db:subtitle"/> <xsl:apply-templates select="set:difference(*, $nots)"> <xsl:with-param name="depth_in_chunk" select="$depth_in_chunk + 1"/> <xsl:with-param name="depth_of_chunk" select="$depth_of_chunk"/> </xsl:apply-templates> <xsl:variable name="allterms" select="key('db.index.all.key', '')"/> <xsl:variable name="prifirstterms" select="$allterms[count(. | key('db.index.primary.key', &primarykey;)[1]) = 1]"/> <dl> <xsl:for-each select="$prifirstterms"> <xsl:sort select="translate(&primarykey;, &uppercase;, &lowercase;)"/> <xsl:variable name="term" select="."/> <xsl:if test="true()"> <dt class="ixprimary"> <xsl:apply-templates select="primary/node() | db:primary/node()"/> </dt> <xsl:variable name="prikey" select="&primarykey;"/> <xsl:variable name="priterms" select="key('db.index.primary.key', $prikey)"/> <xsl:variable name="prilinks" select="$priterms[not(secondary | db:secondary | see | db:see)]"/> <xsl:for-each select="$prilinks"> <dd class="ixlink"> <xsl:call-template name="db2html.xref"> <xsl:with-param name="target" select="."/> </xsl:call-template> </dd> </xsl:for-each> <xsl:variable name="prisee" select="$priterms[not(secondary)]/see | $priterms[not(db:secondary)]/db:see"/> <xsl:for-each select="$prisee"> <dd class="ixsee"> <xsl:call-template name="l10n.gettext"> <xsl:with-param name="msgid" select="'seeie.format'"/> <xsl:with-param name="node" select="."/> <xsl:with-param name="format" select="true()"/> </xsl:call-template> </dd> </xsl:for-each> <xsl:variable name="priseealso" select="$priterms[not(secondary)]/seealso | $priterms[not(db:secondary)]/db:seealso"/> <xsl:for-each select="$priseealso"> <dd class="ixseealso"> <xsl:call-template name="l10n.gettext"> <xsl:with-param name="msgid" select="'seealsoie.format'"/> <xsl:with-param name="node" select="."/> <xsl:with-param name="format" select="true()"/> </xsl:call-template> </dd> </xsl:for-each> <xsl:if test="$priterms/secondary or $priterms/db:secondary"> <dd class="ixsecondary"> <dl class="ixsecondary"> <xsl:variable name="secfirstterms" select="$priterms[count(. | key('db.index.secondary.key', &secondarykey;)[1]) = 1]"/> <xsl:for-each select="$secfirstterms"> <xsl:sort select="translate(&secondarykey;, &uppercase;, &lowercase;)"/> <xsl:if test="secondary | db:secondary"> <dt class="ixsecondary"> <xsl:value-of select="secondary | db:secondary"/> </dt> <xsl:variable name="seckey" select="&secondarykey;"/> <xsl:variable name="secterms" select="key('db.index.secondary.key', $seckey)"/> <xsl:variable name="seclinks" select="$secterms[not(tertiary | db:tertiary | see | db:see)]"/> <xsl:for-each select="$seclinks"> <dd class="ixlink"> <xsl:call-template name="db2html.xref"> <xsl:with-param name="target" select="."/> </xsl:call-template> </dd> </xsl:for-each> <xsl:variable name="secsee" select="$secterms[not(tertiary)]/see | $secterms[not(db:tertiary)]/db:see"/> <xsl:for-each select="$secsee"> <dd class="ixsee"> <xsl:call-template name="l10n.gettext"> <xsl:with-param name="msgid" select="'seeie.format'"/> <xsl:with-param name="node" select="."/> <xsl:with-param name="format" select="true()"/> </xsl:call-template> </dd> </xsl:for-each> <xsl:variable name="secseealso" select="$secterms[not(tertiary)]/seealso | $secterms[not(db:tertiary)]/db:seealso"/> <xsl:for-each select="$secseealso"> <dd class="ixseealso"> <xsl:call-template name="l10n.gettext"> <xsl:with-param name="msgid" select="'seealsoie.format'"/> <xsl:with-param name="node" select="."/> <xsl:with-param name="format" select="true()"/> </xsl:call-template> </dd> </xsl:for-each> <xsl:if test="$secterms/tertiary or $secterms/db:tertiary"> <dd class="ixtertiary"> <dl class="ixtertiary"> <xsl:variable name="terfirstterms" select="$secterms[count(. | key('db.index.tertiary.key', &tertiarykey;)[1]) = 1]"/> <xsl:for-each select="$terfirstterms"> <xsl:sort select="translate(&tertiarykey;, &uppercase;, &lowercase;)"/> <xsl:if test="tertiary | db:tertiary"> <dt class="ixtertiary"> <xsl:value-of select="tertiary | db:tertiary"/> </dt> <xsl:variable name="terkey" select="&tertiarykey;"/> <xsl:variable name="terterms" select="key('db.index.tertiary.key', $terkey)"/> <xsl:variable name="terlinks" select="$terterms[not(see | db:see)]"/> <xsl:for-each select="$terlinks"> <dd class="ixlink"> <xsl:call-template name="db2html.xref"> <xsl:with-param name="target" select="."/> </xsl:call-template> </dd> </xsl:for-each> <xsl:variable name="tersee" select="$terterms/see | $terterms/db:see"/> <xsl:for-each select="$tersee"> <dd class="ixsee"> <xsl:call-template name="l10n.gettext"> <xsl:with-param name="msgid" select="'seeie.format'"/> <xsl:with-param name="node" select="."/> <xsl:with-param name="format" select="true()"/> </xsl:call-template> </dd> </xsl:for-each> <xsl:variable name="terseealso" select="$terterms/seealso | $terterms/db:seealso"/> <xsl:for-each select="$terseealso"> <dd class="ixseealso"> <xsl:call-template name="l10n.gettext"> <xsl:with-param name="msgid" select="'seealsoie.format'"/> <xsl:with-param name="node" select="."/> <xsl:with-param name="format" select="true()"/> </xsl:call-template> </dd> </xsl:for-each> </xsl:if> </xsl:for-each> </dl> </dd> </xsl:if> </xsl:if> </xsl:for-each> </dl> </dd> </xsl:if> </xsl:if> </xsl:for-each> </dl> </xsl:template> </xsl:stylesheet>