<?xml version="1.0"?>
<!-- ============================================================ -->
<!--                                                              -->
<!-- 	This file makes a part of RenderX XSL Test Suite          -->
<!--                                                              -->
<!--    Author: Alexander Peshkov                                 -->
<!--                                                              -->
<!--    (c) RenderX, 2003                                         -->
<!--                                                              -->
<!-- ============================================================ -->

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                			  xmlns:fo="http://www.w3.org/1999/XSL/Format"
                			  xmlns:rx="http://www.renderx.com/XSL/Extensions">

	<xsl:import href="generic.xsl"/>
	<xsl:output method="xml" indent="yes"/>

	<xsl:key name="index"
   			 match="indexterm | indexrange[@class='start']"
   			 use="@term"/>

	<xsl:template match="indexrange">
	  <xsl:choose>
	    <xsl:when test="not(@id)">
	      <xsl:message>Error! Indexrange element without ID will be ignored.</xsl:message>
	    </xsl:when>
	    <xsl:when test="not(@term) and @class='start'">
	      <xsl:message>Error! No terms defined for starting indexrange, it will be ignored.</xsl:message>
	    </xsl:when>
	    <xsl:when test="@class='start'">
	      <rx:begin-index-range>
	        <xsl:attribute name="rx:key">
	          <xsl:value-of select="@term"/>
	          <xsl:if test="@primary='true'"><xsl:text>-primary</xsl:text></xsl:if>
	        </xsl:attribute>
	        <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
	      </rx:begin-index-range>
	      <fo:inline font-size="16pt" color="red">-&gt;</fo:inline>
	    </xsl:when>
	    <xsl:when test="@class='end'">
	      <fo:inline font-size="16pt" color="red">&lt;-</fo:inline>
	      <rx:end-index-range>
	        <xsl:attribute name="ref-id"><xsl:value-of select="@id"/></xsl:attribute>
	      </rx:end-index-range>
	    </xsl:when>
	  </xsl:choose>
	  <xsl:apply-templates/>	  
	</xsl:template>

	<xsl:template match="indexterm">
	  <fo:inline font-style="italic" color="silver">
	    <xsl:attribute name="rx:key">
	      <xsl:value-of select="@term"/>
	      <xsl:if test="@primary='true'"><xsl:text>-primary</xsl:text></xsl:if>
	    </xsl:attribute>
	    <xsl:apply-templates/>
      </fo:inline>
	</xsl:template>
	
	<xsl:template match="index">
		<xsl:variable name="merge-subsequent-page-numbers"><xsl:value-of select="@merge-subsequent-page-numbers"/></xsl:variable>
		<xsl:variable name="range-separator"><xsl:value-of select="@range-separator"/></xsl:variable>	
		<xsl:variable name="list-separator"><xsl:value-of select="@list-separator"/></xsl:variable>	
		<xsl:variable name="link-back"><xsl:value-of select="@link-back"/></xsl:variable>	
	    <xsl:for-each select="//*[generate-id()=generate-id(key('index', @term))]">
			<xsl:sort select="@term"/>
			<fo:block font="12pt Times">
    			<xsl:value-of select="@term"/>
   				<xsl:text> </xsl:text>
				<rx:page-index>
				    <xsl:if test="$list-separator!=''">
				      <xsl:attribute name="list-separator"><xsl:value-of select="$list-separator"/></xsl:attribute>
				    </xsl:if>
   					<!-- Primary term -->
   					<xsl:if test="count(key('index', @term)[@primary='true'])&gt;0">
 				      <rx:index-item ref-key="{@term}-primary" color="blue" font-style="italic" font-weight="bold">
 				        <xsl:if test="$link-back!=''">
					      <xsl:attribute name="link-back"><xsl:value-of select="$link-back"/></xsl:attribute>
					    </xsl:if>
					    <xsl:if test="$range-separator!=''">
   					      <xsl:attribute name="range-separator"><xsl:value-of select="$range-separator"/></xsl:attribute>
   					    </xsl:if>
   					    <xsl:if test="$merge-subsequent-page-numbers!=''">
   					      <xsl:attribute name="merge-subsequent-page-numbers"><xsl:value-of select="$merge-subsequent-page-numbers"/></xsl:attribute>
   					    </xsl:if>
			          </rx:index-item>
			        </xsl:if>
			        <!-- Regular terms -->
			        <xsl:if test="count(key('index', @term)[not(@primary) or @primary!='true'])&gt;0">
				      <rx:index-item ref-key="{@term}" color="blue" font-style="italic" font-weight="normal">
 				        <xsl:if test="$link-back!=''">
					      <xsl:attribute name="link-back"><xsl:value-of select="$link-back"/></xsl:attribute>
					    </xsl:if>
					    <xsl:if test="$range-separator!=''">
   					      <xsl:attribute name="range-separator"><xsl:value-of select="$range-separator"/></xsl:attribute>
   					    </xsl:if>
   					    <xsl:if test="$merge-subsequent-page-numbers!=''">
   					      <xsl:attribute name="merge-subsequent-page-numbers"><xsl:value-of select="$merge-subsequent-page-numbers"/></xsl:attribute>
   					    </xsl:if>
			          </rx:index-item>
			        </xsl:if>
			    </rx:page-index>
			</fo:block>
		  </xsl:for-each>
	</xsl:template>	

</xsl:stylesheet>