<?xml version="1.0"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

  <xsl:output method="xml"/>
  <xsl:strip-space elements="*"/>
  
  <xsl:template match="/*" priority="1">
    <xsl:element name="toc">
      <xsl:apply-templates/>
    </xsl:element>
  </xsl:template>
  
  <xsl:template match="*|/">
    <xsl:apply-templates/>
  </xsl:template>
  
  <xsl:template match="text()" priority="1"/>
  
  <xsl:template name="xpath">
    <xsl:param name="ancestors" select="ancestor-or-self::*"/>
    <xsl:text>#element(</xsl:text>
    <xsl:for-each select="$ancestors">
      <xsl:variable name="myname" select="name()"/>
      <xsl:text>/</xsl:text>
      <xsl:value-of select="count(preceding-sibling::*) + 1"/>
    </xsl:for-each>
    <xsl:text>)</xsl:text>
  </xsl:template>
  
  <xsl:attribute-set name="targetattr">
    <xsl:attribute namespace="http://www.w3.org/1999/xlink" name="xlink:href">
      <xsl:call-template name="xpath"/>
    </xsl:attribute>
  </xsl:attribute-set>
  
  <xsl:attribute-set name="titleattr">
    <xsl:attribute namespace="http://www.w3.org/1999/xlink" name="xlink:href">
      <xsl:call-template name="xpath">
	<xsl:with-param name="ancestors" select="title/ancestor-or-self::*"/>
      </xsl:call-template>
    </xsl:attribute>
  </xsl:attribute-set>
  
  <xsl:template match="sect1|sect2" priority="3">
    <xsl:text>    
    </xsl:text>
    <tocitem>
      <link xsl:use-attribute-sets="targetattr">
	<titleref xsl:use-attribute-sets="titleattr"/>
      </link>
      <xsl:apply-templates/>
    </tocitem>
  </xsl:template>
</xsl:stylesheet>
