aboutsummaryrefslogtreecommitdiff
path: root/x2s.xsl
diff options
context:
space:
mode:
Diffstat (limited to 'x2s.xsl')
-rw-r--r--x2s.xsl95
1 files changed, 95 insertions, 0 deletions
diff --git a/x2s.xsl b/x2s.xsl
new file mode 100644
index 0000000..a1633c6
--- /dev/null
+++ b/x2s.xsl
@@ -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