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) &gt; 0">
46        <xsl:copy-of select="$local.l10n.letters"/>
47      </xsl:when>
48      <xsl:when test="count($l10n.letters) &gt; 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) &gt; 0">
106        <xsl:copy-of select="$local.l10n.letters"/>
107      </xsl:when>
108      <xsl:when test="count($l10n.letters) &gt; 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(&lang;, &primary;)"/>
145
146</xsl:stylesheet>
147