<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:date="http://exslt.org/dates-and-times"
  xmlns:crypto="http://exslt.org/crypto"
>

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

  <xsl:include href="date.xsl"/>

  <xsl:variable name="baseurl">https://www.c3d2.de/</xsl:variable>

  <xsl:template match="news"><xsl:text>BEGIN:VCALENDAR</xsl:text>
    <xsl:text>&#13;&#10;</xsl:text>
    
    <xsl:text>VERSION:2.0</xsl:text>
    <xsl:text>&#13;&#10;</xsl:text>

    <xsl:text>PRODID:-//C3D2-Web//event iCal-Export//DE</xsl:text>
    <xsl:text>&#13;&#10;</xsl:text>

    <xsl:text>CALSCALE:GREGORIAN</xsl:text>
    <xsl:text>&#13;&#10;</xsl:text>

    <xsl:text>METHOD:PUBLISH</xsl:text>
    <xsl:text>&#13;&#10;</xsl:text>

    <xsl:text>X-WR-CALDESC;VALUE=TEXT:Events und Themenabende beim CCC Dresden</xsl:text>
    <xsl:text>&#13;&#10;</xsl:text>

    <xsl:text>X-WR-CALNAME;VALUE=TEXT:C3D2-Events</xsl:text>
    <xsl:text>&#13;&#10;</xsl:text>

    <xsl:text>X-WR-TIMEZONE;VALUE=TEXT:Europe/Berlin</xsl:text>
    <xsl:text>&#13;&#10;</xsl:text>

    <xsl:for-each select="newsfile">
      <xsl:sort select="date:seconds(document(.)/item/@date)" data-type="number" order="descending" />
      <xsl:if test="document(.)/item/event">
        <xsl:apply-templates select="document(.)/item">
          <xsl:with-param name="newsfile" select="."/>
        </xsl:apply-templates>
      </xsl:if>
    </xsl:for-each>

    <xsl:text>&#13;&#10;</xsl:text>
    <xsl:text>END:VCALENDAR</xsl:text>
    <xsl:text>&#13;&#10;</xsl:text>
  </xsl:template>

  <xsl:template match="item">
    <xsl:param name="newsfile"/>

    <xsl:text>BEGIN:VEVENT</xsl:text>
    <xsl:text>&#13;&#10;</xsl:text>

    <xsl:text>METHOD:PUBLISH</xsl:text>
    <xsl:text>&#13;&#10;</xsl:text>

    <xsl:text>UID:</xsl:text><xsl:value-of select="crypto:sha1(concat(@title,@date))"/><xsl:text>@www.c3d2.de</xsl:text>
    <xsl:text>&#13;&#10;</xsl:text>

    <xsl:text>DTSTAMP:</xsl:text>
    <xsl:call-template name="date-to-hevent">
      <xsl:with-param name="date" select="@date"/>
    </xsl:call-template>
    <xsl:text>&#13;&#10;</xsl:text>

    <xsl:text>DTSTART:</xsl:text>
    <xsl:call-template name="date-to-hevent">
      <xsl:with-param name="date" select="event/start"/>
    </xsl:call-template>
    <xsl:text>&#13;&#10;</xsl:text>

    <xsl:if test="event/end">
      <xsl:text>DTEND:</xsl:text>
      <xsl:call-template name="date-to-hevent">
        <xsl:with-param name="date" select="event/end"/>
      </xsl:call-template>
      <xsl:text>&#13;&#10;</xsl:text>
    </xsl:if>

    <xsl:call-template name="wrap-text">
      <xsl:with-param name="text">SUMMARY:<xsl:value-of select="@title"/></xsl:with-param>
      <xsl:with-param name="length" select="70"/>
    </xsl:call-template>
    <xsl:text>&#13;&#10;</xsl:text>

    <xsl:text>CLASS:PUBLIC</xsl:text>
    <xsl:text>&#13;&#10;</xsl:text>

    <xsl:text>CATEGORY:</xsl:text>
    <xsl:choose>
      <xsl:when test="starts-with($newsfile, 'content/news/ta-')">
        <item>Themenabend</item>
      </xsl:when>
      <xsl:when test="starts-with($newsfile, 'content/news/event-')">
        <item>Event</item>
      </xsl:when>
      <xsl:otherwise>
        <item>Misc</item>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:text>&#13;&#10;</xsl:text>

    <xsl:text>URL:</xsl:text>
    <xsl:value-of select="$baseurl"/>
    <xsl:value-of select="substring-after(substring-before($newsfile, '.xml'), 'content/')"/>
    <xsl:text>.html</xsl:text>
    <xsl:text>&#13;&#10;</xsl:text>

    <xsl:call-template name="wrap-text">
      <xsl:with-param name="text">LOCATION:<xsl:value-of select="event/location"/></xsl:with-param>
      <xsl:with-param name="length" select="70"/>
    </xsl:call-template>
    <xsl:text>&#13;&#10;</xsl:text>

    <xsl:text>END:VEVENT</xsl:text>
    <xsl:text>&#13;&#10;</xsl:text>

  </xsl:template>

  <!-- Copy left by Tim Pritlove -->
  <xsl:template name="wrap-text">
    <xsl:param name="text" />
    <xsl:param name="length" />

    <xsl:choose>
      <xsl:when test="string-length($text) &gt; $length">
        <xsl:value-of select="substring($text, 0, $length)" />
        <xsl:text>&#13;&#10; </xsl:text>
        <xsl:call-template name="wrap-text">
          <xsl:with-param name="text" select="substring($text, $length)" />
          <xsl:with-param name="length" select="$length" />
        </xsl:call-template>
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="$text" />
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
</xsl:stylesheet>
