<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:regexp="http://exslt.org/regular-expressions"
extension-element-prefixes="regexp"
>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/website">
<sitemap src="{@sourceDir}" dest="{@targetDir}">
<xsl:apply-templates select="structure/section/*"/>
<xsl:apply-templates select="layout/documentStyle"/>
</sitemap>
</xsl:template>
<xsl:template match="section">
<section name="{@name}">
<xsl:if test="@title"><xsl:attribute name="title"><xsl:value-of select="@title"/></xsl:attribute></xsl:if>
<xsl:if test="@sourceDir"><xsl:attribute name="src"><xsl:value-of select="@sourceDir"/></xsl:attribute></xsl:if>
<xsl:if test="@targetDir"><xsl:attribute name="dest"><xsl:value-of select="@targetDir"/></xsl:attribute></xsl:if>
<xsl:apply-templates select="*"/>
</section>
</xsl:template>
<xsl:template match="directory">
<section name="{@id}">
<xsl:if test="@title"><xsl:attribute name="title"><xsl:value-of select="@title"/></xsl:attribute></xsl:if>
<xsl:if test="@sourceDir"><xsl:attribute name="src"><xsl:value-of select="@sourceDir"/></xsl:attribute></xsl:if>
<xsl:if test="@targetDir"><xsl:attribute name="dest"><xsl:value-of select="@targetDir"/></xsl:attribute></xsl:if>
<xsl:apply-templates select="*"/>
</section>
</xsl:template>
<xsl:template match="homepage">
<main name="{@name}" src="{@sourceFile}" dest="{@targetFile}" type="{@type}" />
</xsl:template>
<xsl:template match="entry">
<page name="{@name}" src="{@sourceFile}" dest="{@targetFile}" type="{@type}" />
</xsl:template>
<xsl:template match="file">
<page name="{@id}" src="{@sourceFile}" dest="{@targetFile}" type="{@type}" visible="no"/>
</xsl:template>
<xsl:template match="documentStyle[child::xsl]">
<type name="{@type}">
<xsl:apply-templates select="xsl"/>
</type>
</xsl:template>
<xsl:template match="xsl">
<xsl:apply-templates select="child::xsl"/>
<xslt href="{@stylesheet}">
<xsl:for-each select="parameter"><param name="{@name}"><xsl:value-of select="@value"/></param></xsl:for-each>
</xslt>
</xsl:template>
<xsl:template match="documentStyle[child::copy]">
<type name="{@type}">
<command>mkdir -p `dirname $@`;cp $^ $@</command>
</type>
</xsl:template>
<xsl:template name="str-subst">
<xsl:param name="text"/>
<xsl:param name="replace"/>
<xsl:param name="with"/>
<xsl:choose>
<xsl:when test="string-length($replace) = 0">
<xsl:value-of select="$text"/>
</xsl:when>
<xsl:when test="contains($text, $replace)">
<xsl:variable name="before" select="substring-before($text, $replace)"/>
<xsl:variable name="after" select="substring-after($text, $replace)"/>
<xsl:value-of select="$before"/>
<xsl:value-of select="$with"/>
<xsl:call-template name="str-subst">
<xsl:with-param name="text" select="$after"/>
<xsl:with-param name="replace" select="$replace"/>
<xsl:with-param name="with" select="$with"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$text"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="documentStyle[child::programCall]">
<type name="{@type}">
<xsl:for-each select="programCall"><command><xsl:call-template name="str-subst"><xsl:with-param name="text"><xsl:call-template name="str-subst"><xsl:with-param name="text" select="@command"/><xsl:with-param name="replace" select="'%s'"/><xsl:with-param name="with" select="'$^'"/></xsl:call-template></xsl:with-param><xsl:with-param name="replace" select="'%d'"/><xsl:with-param name="with" select="'$@'"/></xsl:call-template></command></xsl:for-each>
</type>
</xsl:template>
</xsl:stylesheet>