1<?xml version="1.0"?> 2<!DOCTYPE xsl:stylesheet [ 3<!ENTITY primary 'normalize-space(concat(primary/@sortas, primary[not(@sortas)]))'> 4<!-- Documents using the kimber index method must have a lang attribute --> 5<!-- Only one of these should be present in the entity --> 6 7<!ENTITY lang 'concat(/*/@lang, /*/@xml:lang, "en")'> 8]> 9<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 10 version="1.0" 11 xmlns:func="http://exslt.org/functions" 12 xmlns:exslt="http://exslt.org/common" 13 xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" 14 xmlns:k="java:com.isogen.saxoni18n.Saxoni18nService" 15 extension-element-prefixes="func exslt" 16 exclude-result-prefixes="func exslt i l k" 17 xmlns:i="urn:cz-kosek:functions:index"> 18 19<!-- ******************************************************************** 20 $Id: autoidx-ng.xsl,v 1.2 2006/05/14 04:34:41 bobstayton Exp $ 21 ******************************************************************** 22 23 This file is part of the DocBook XSL Stylesheet distribution. 24 See /README or http://docbook.sf.net/ for copyright 25 and other information. 26 27 ******************************************************************** --> 28 29<!-- Returns index group code for given term --> 30<func:function name="i:group-index"> 31 <xsl:param name="term"/> 32 33 <xsl:variable name="letters-rtf"> 34 <xsl:variable name="lang"> 35 <xsl:call-template name="l10n.language"/> 36 </xsl:variable> 37 38 <xsl:variable name="local.l10n.letters" 39 select="($local.l10n.xml//l:i18n/l:l10n[@language=$lang]/l:letters)[1]"/> 40 41 <xsl:variable name="l10n.letters" 42 select="($l10n.xml/l:i18n/l:l10n[@language=$lang]/l:letters)[1]"/> 43 44 <xsl:choose> 45 <xsl:when test="count($local.l10n.letters) > 0"> 46 <xsl:copy-of select="$local.l10n.letters"/> 47 </xsl:when> 48 <xsl:when test="count($l10n.letters) > 0"> 49 <xsl:copy-of select="$l10n.letters"/> 50 </xsl:when> 51 <xsl:otherwise> 52 <xsl:message> 53 <xsl:text>No "</xsl:text> 54 <xsl:value-of select="$lang"/> 55 <xsl:text>" localization of index grouping letters exists</xsl:text> 56 <xsl:choose> 57 <xsl:when test="$lang = 'en'"> 58 <xsl:text>.</xsl:text> 59 </xsl:when> 60 <xsl:otherwise> 61 <xsl:text>; using "en".</xsl:text> 62 </xsl:otherwise> 63 </xsl:choose> 64 </xsl:message> 65 66 <xsl:copy-of select="($l10n.xml/l:i18n/l:l10n[@language='en']/l:letters)[1]"/> 67 </xsl:otherwise> 68 </xsl:choose> 69 </xsl:variable> 70 71 <xsl:variable name="letters" select="exslt:node-set($letters-rtf)/*"/> 72 73 <xsl:variable name="long-letter-index" select="$letters/l:l[. = substring($term,1,2)]/@i"/> 74 <xsl:variable name="short-letter-index" select="$letters/l:l[. = substring($term,1,1)]/@i"/> 75 <xsl:variable name="letter-index"> 76 <xsl:choose> 77 <xsl:when test="$long-letter-index"> 78 <xsl:value-of select="$long-letter-index"/> 79 </xsl:when> 80 <xsl:when test="$short-letter-index"> 81 <xsl:value-of select="$short-letter-index"/> 82 </xsl:when> 83 <xsl:otherwise>0</xsl:otherwise> 84 </xsl:choose> 85 </xsl:variable> 86 <func:result select="number($letter-index)"/> 87</func:function> 88 89<!-- Return index group letter for given group code --> 90<func:function name="i:group-letter"> 91 <xsl:param name="index"/> 92 93 <xsl:variable name="letters-rtf"> 94 <xsl:variable name="lang"> 95 <xsl:call-template name="l10n.language"/> 96 </xsl:variable> 97 98 <xsl:variable name="local.l10n.letters" 99 select="($local.l10n.xml//l:i18n/l:l10n[@language=$lang]/l:letters)[1]"/> 100 101 <xsl:variable name="l10n.letters" 102 select="($l10n.xml/l:i18n/l:l10n[@language=$lang]/l:letters)[1]"/> 103 104 <xsl:choose> 105 <xsl:when test="count($local.l10n.letters) > 0"> 106 <xsl:copy-of select="$local.l10n.letters"/> 107 </xsl:when> 108 <xsl:when test="count($l10n.letters) > 0"> 109 <xsl:copy-of select="$l10n.letters"/> 110 </xsl:when> 111 <xsl:otherwise> 112 <xsl:message> 113 <xsl:text>No "</xsl:text> 114 <xsl:value-of select="$lang"/> 115 <xsl:text>" localization of index grouping letters exists</xsl:text> 116 <xsl:choose> 117 <xsl:when test="$lang = 'en'"> 118 <xsl:text>.</xsl:text> 119 </xsl:when> 120 <xsl:otherwise> 121 <xsl:text>; using "en".</xsl:text> 122 </xsl:otherwise> 123 </xsl:choose> 124 </xsl:message> 125 126 <xsl:copy-of select="($l10n.xml/l:i18n/l:l10n[@language='en']/l:letters)[1]"/> 127 </xsl:otherwise> 128 </xsl:choose> 129 </xsl:variable> 130 131 <xsl:variable name="letters" select="exslt:node-set($letters-rtf)/*"/> 132 133 <func:result select="$letters/l:l[@i=$index][1]"/> 134</func:function> 135 136<!-- The following key used in the kosek indexing method. --> 137<xsl:key name="group-code" 138 match="indexterm" 139 use="i:group-index(&primary;)"/> 140 141<!-- The following key used in the kimber indexing method. --> 142<xsl:key name="k-group" 143 match="indexterm" 144 use="k:getIndexGroupKey(⟨, &primary;)"/> 145 146</xsl:stylesheet> 147