<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="/pool/xslt_ht.xslt" type="application/xml"?>
<xsl:stylesheet
  xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"
  xmlns:d = "http://herbaer.de/xmlns/20051201/doc"
  xmlns:tr = "http://herbaer.de/xmlns/20151222/tree/"
  xmlns:ht = "http://www.w3.org/1999/xhtml"
  xmlns = "http://www.w3.org/1999/xhtml"
  version = "1.0"
>
<d:info xmlns="http://herbaer.de/xmlns/20051201/doc">
  <title>tree_files.xslt</title>
  <subtitle>Liste der Dateien in der Baumstruktur</subtitle>
  <date>2016-01-23</date>
  <author>
    <personname>
      <firstname>Herbert</firstname>
      <surname>Schiemann</surname>
    </personname>
    <email>h.schiemann@herbaer.de</email>
  </author>
</d:info>

<d:para role="stylesheet">
Diese Transformation erstellt eine Liste der relativen URI
der Endknoten ohne Unterknoten (Kalenderbildauswahlen).
Jeder URI wird in einer Zeile ausgegeben.
</d:para>

<d:section xmlns="http://herbaer.de/xmlns/20051201/doc">
<para>
Anzahl der zu überspringenden Ebenen.
</para>
<para>
Die oberste Ebene ist die Ebene des Eintrags &#x201e;Kalender&#x201d;
(ID <literal>kal</literal>).
Die Ebene darunter enthält die Verzeichniseinträge für einzelne Jahre
und die &#x201e;vorgezogenen&#x201d; Kalender des aktuellen Jahres.
Die &#x201e;wirklichen&#x201d; Kalender liegen erst in der dritten Ebene
unter einem Jahreseeintrag.
Dem entspricht der voreingestellte Wert <literal>2</literal>.
</para>
</d:section>
<xsl:param name="p_skip" select="'2'"/>

<d:para>
<d:varname>$txt.break</d:varname>
</d:para>
<xsl:include href="/pool/txt.xslt"/>

<xsl:output method="text" encoding="utf-8"/>

<xsl:template match="/tr:tree">
  <xsl:apply-templates select="tr:node"/>
</xsl:template>

<d:para>
Zu Knoten, die keinen Unterknoten enthalten,
wird der Pfad ausgegeben.
</d:para>
<xsl:template match="tr:node">
  <!-- Anzahl der zu überspringenden Ebenen -->
  <xsl:param name="skip" select="$p_skip"/>
  <!-- Teilpfad zum Elternknoten -->
  <xsl:param name="refbase" select="''"/>
  <xsl:choose>
    <xsl:when test="tr:node">
      <xsl:variable name="rb">
        <xsl:choose>
          <xsl:when test="starts-with (tr:refbase, '/')">
            <xsl:value-of select="tr:refbase"/>
          </xsl:when>
          <xsl:when test="string-length($refbase) &gt; 0 and string-length(tr:refbase) &gt; 0"
          >
            <xsl:value-of select="concat ($refbase, '/', tr:refbase)"/>
          </xsl:when>
          <xsl:otherwise>
            <xsl:value-of select="concat ($refbase, tr:refbase)"/>
          </xsl:otherwise>
        </xsl:choose>
      </xsl:variable>
      <xsl:apply-templates select="tr:node">
        <xsl:with-param name="skip" select="$skip - 1"/>
        <xsl:with-param name="refbase" select="$rb"/>
      </xsl:apply-templates>
    </xsl:when>
    <xsl:when test="$skip &lt; 1">
      <xsl:variable name="rf">
        <xsl:choose>
          <xsl:when test="starts-with (tr:ref, '/')">
            <xsl:value-of select="tr:ref"/>
          </xsl:when>
          <xsl:when test="string-length($refbase) &gt; 0 and string-length(tr:ref) &gt; 0"
          >
            <xsl:value-of select="concat ($refbase, '/', tr:ref)"/>
          </xsl:when>
          <xsl:otherwise>
            <xsl:value-of select="concat ($refbase, tr:ref)"/>
          </xsl:otherwise>
        </xsl:choose>
      </xsl:variable>
      <xsl:value-of select="concat ($rf, $txt.break)"/>
    </xsl:when>
    <xsl:otherwise/>
  </xsl:choose>
</xsl:template>

</xsl:stylesheet>
