Getting index group number

  • 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)"/>