implemented as EXSLT function that is later used in XSLT key for grouping purposes
<func:function name="i:group-index"> <xsl:param name="term"/> ... uninteresting code that will feed $letters by elements from localization file based on selected language ... <xsl:variable name="long-letter-index" select="$letters/l:l[. = substring($term,1,2)]/@i"/> <xsl:variable name="short-letter-index" select="$letters/l:l[. = substring($term,1,1)]/@i"/> <xsl:variable name="letter-index"> <xsl:choose> <xsl:when test="$long-letter-index"> <xsl:value-of select="$long-letter-index"/> </xsl:when> <xsl:when test="$short-letter-index"> <xsl:value-of select="$short-letter-index"/> </xsl:when> <!-- group number zero is reserved for symbols --> <xsl:otherwise>0</xsl:otherwise> </xsl:choose> </xsl:variable> <func:result select="number($letter-index)"/> </func:function>
key definition
<xsl:key name="group-code" match="indexterm" use="i:group-index(primary)"/>