diff options
Diffstat (limited to 'x2s.xsl')
-rw-r--r-- | x2s.xsl | 95 |
1 files changed, 95 insertions, 0 deletions
@@ -0,0 +1,95 @@ +<?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>
\ No newline at end of file |