diff options
Separated task planning and processing into separate transformations
* "plan.xsl" traverses the file-tree provided by "list.xsl" and determines the tasks to be executed
* "process.xsl" executes the tasks planned by "plan.xsl" in a sensible order
* this change was implemented to be able to e.g. schedule the linkage tasks for last
** performing them in tree-order caused problems when the generator tried to create symlinks inside non-existing directories
** additionally this further modularizes the processing chain
Diffstat (limited to 'traverse.xsl')
-rw-r--r-- | traverse.xsl | 217 |
1 files changed, 0 insertions, 217 deletions
diff --git a/traverse.xsl b/traverse.xsl deleted file mode 100644 index 6814312..0000000 --- a/traverse.xsl +++ /dev/null @@ -1,217 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<xsl:stylesheet - version="1.0" - xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:dyn="http://exslt.org/dynamic" - xmlns:xalan="http://xml.apache.org/xalan" - xmlns:InputXSLT="function.inputxslt.application" - exclude-result-prefixes="dyn xalan InputXSLT" -> - -<xsl:import href="utility/helper.xsl"/> - -<xsl:output - method="xml" - omit-xml-declaration="yes" - encoding="UTF-8" - indent="yes" -/> - -<xsl:variable name="root" select="/datasource"/> - -<xsl:template name="generate"> - <xsl:param name="input"/> - <xsl:param name="transformation"/> - <xsl:param name="target"/> - - <xsl:copy-of select="InputXSLT:generate( - $input, - $transformation, - $target - )/self::generation"/> -</xsl:template> - -<xsl:template name="linker"> - <xsl:param name="from"/> - <xsl:param name="to"/> - - <linkage from="{$from}" to="{$to}" result="{InputXSLT:external-command( - concat('ln -sr ', $to, ' ', $from) - )/self::command/@result}"/> -</xsl:template> - -<xsl:template name="cleaner"> - <xsl:param name="path"/> - - <cleaning path="./{$path}" result="{InputXSLT:external-command( - concat('rm -r ./', $path, '/*') - )/self::command/@result}"/> -</xsl:template> - -<xsl:template name="resolve_datasource"> - <xsl:param name="datasource"/> - - <xsl:for-each select="$datasource"> - <xsl:element name="{@target}"> - <xsl:choose> - <xsl:when test="@mode = 'full'"> - <xsl:copy-of select="InputXSLT:read-file(@source)/self::file/*/*"/> - </xsl:when> - </xsl:choose> - </xsl:element> - </xsl:for-each> -</xsl:template> - -<xsl:template name="resolve_target"> - <xsl:param name="prefix"/> - <xsl:param name="target"/> - <xsl:param name="datasource"/> - - <xsl:choose> - <xsl:when test="$target/@mode = 'plain'"> - <xsl:value-of select="concat($prefix, '/', $target/@value)"/> - </xsl:when> - <xsl:when test="$target/@mode = 'xpath'"> - <xsl:value-of select="concat($prefix, '/', dyn:evaluate($target/@value))"/> - </xsl:when> - </xsl:choose> -</xsl:template> - -<xsl:template name="compile"> - <xsl:param name="main"/> - <xsl:param name="support"/> - <xsl:param name="transformation"/> - <xsl:param name="target_prefix"/> - <xsl:param name="target"/> - - <xsl:variable name="datasource"> - <xsl:call-template name="merge_datasource"> - <xsl:with-param name="main" select="$main"/> - <xsl:with-param name="support"> - <xsl:call-template name="resolve_datasource"> - <xsl:with-param name="datasource" select="$support"/> - </xsl:call-template> - </xsl:with-param> - </xsl:call-template> - </xsl:variable> - - <xsl:variable name="resolved_target"> - <xsl:call-template name="resolve_target"> - <xsl:with-param name="prefix" select="$target_prefix"/> - <xsl:with-param name="target" select="$target"/> - <xsl:with-param name="datasource" select="$datasource"/> - </xsl:call-template> - </xsl:variable> - - <xsl:call-template name="generate"> - <xsl:with-param name="input" select="$datasource"/> - <xsl:with-param name="transformation" select="$transformation"/> - <xsl:with-param name="target" select="$resolved_target"/> - </xsl:call-template> -</xsl:template> - -<xsl:template name="process"> - <xsl:param name="source"/> - <xsl:param name="target"/> - - <xsl:variable name="transformation" select="InputXSLT:read-file($source)/self::file/node()"/> - <xsl:variable name="meta" select="$transformation/self::*[name() = 'xsl:stylesheet']/*[name() = 'xsl:variable' and @name = 'meta']"/> - <xsl:variable name="main_source" select="$meta/datasource[@type = 'main']"/> - <xsl:variable name="support_source" select="$meta/datasource[@type = 'support']"/> - - <xsl:choose> - <xsl:when test="$main_source/@mode = 'full'"> - <xsl:call-template name="compile"> - <xsl:with-param name="main"> - <xsl:element name="{$main_source/@target}"> - <xsl:copy-of select="InputXSLT:read-file($main_source/@source)/self::file/*/*"/> - </xsl:element> - </xsl:with-param> - <xsl:with-param name="support" select="$support_source"/> - <xsl:with-param name="transformation" select="$transformation"/> - <xsl:with-param name="target_prefix" select="$target"/> - <xsl:with-param name="target" select="$meta/target"/> - </xsl:call-template> - </xsl:when> - <xsl:when test="$main_source/@mode = 'iterate'"> - <xsl:for-each select="InputXSLT:read-file($main_source/@source)/self::file/*/entry"> - <xsl:call-template name="compile"> - <xsl:with-param name="main"> - <xsl:element name="{$main_source/@target}"> - <xsl:copy-of select="."/> - </xsl:element> - </xsl:with-param> - <xsl:with-param name="support" select="$support_source"/> - <xsl:with-param name="transformation" select="$transformation"/> - <xsl:with-param name="target_prefix" select="$target"/> - <xsl:with-param name="target" select="$meta/target"/> - </xsl:call-template> - </xsl:for-each> - </xsl:when> - <xsl:otherwise> - <xsl:call-template name="compile"> - <xsl:with-param name="support" select="$support_source"/> - <xsl:with-param name="transformation" select="$transformation"/> - <xsl:with-param name="target_prefix" select="$target"/> - <xsl:with-param name="target" select="$meta/target"/> - </xsl:call-template> - </xsl:otherwise> - </xsl:choose> -</xsl:template> - -<xsl:template name="traverse"> - <xsl:param name="source"/> - <xsl:param name="target"/> - <xsl:param name="path"/> - <xsl:param name="node"/> - - <xsl:for-each select="$node/directory"> - <xsl:choose> - <xsl:when test=".//file/@extension = '.xsl'"> - <xsl:call-template name="traverse"> - <xsl:with-param name="source" select="$source"/> - <xsl:with-param name="target" select="$target"/> - <xsl:with-param name="path" select="concat($path, '/', @name)"/> - <xsl:with-param name="node" select="."/> - </xsl:call-template> - </xsl:when> - <xsl:otherwise> - <xsl:call-template name="linker"> - <xsl:with-param name="from" select="concat($target, '/', $path, '/', @name)"/> - <xsl:with-param name="to" select="concat($source, '/', $path, '/', @name)"/> - </xsl:call-template> - </xsl:otherwise> - </xsl:choose> - </xsl:for-each> - - <xsl:for-each select="$node/file"> - <xsl:choose> - <xsl:when test="@extension = '.xsl'"> - <xsl:call-template name="process"> - <xsl:with-param name="source" select="concat($source, '/', $path, '/', @name, @extension)"/> - <xsl:with-param name="target" select="concat($target, '/', $path)"/> - </xsl:call-template> - </xsl:when> - <xsl:when test="@extension = '.css'"> - <xsl:call-template name="linker"> - <xsl:with-param name="from" select="concat($target, '/', $path, '/', @name, @extension)"/> - <xsl:with-param name="to" select="concat($source, '/', $path, '/', @name, @extension)"/> - </xsl:call-template> - </xsl:when> - </xsl:choose> - </xsl:for-each> -</xsl:template> - -<xsl:template match="datasource"> - <xsl:call-template name="cleaner"> - <xsl:with-param name="path" select="meta/target"/> - </xsl:call-template> - - <xsl:call-template name="traverse"> - <xsl:with-param name="source" select="$root/meta/source"/> - <xsl:with-param name="target" select="$root/meta/target"/> - <xsl:with-param name="node" select="source"/> - </xsl:call-template> -</xsl:template> - -</xsl:stylesheet> |