1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/XSLForms/XSL/Prepare.xsl Mon Dec 20 00:30:39 2004 +0000
1.3 @@ -0,0 +1,141 @@
1.4 +<?xml version="1.0"?>
1.5 +<xsl:stylesheet version="1.0"
1.6 + xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
1.7 + xmlns:axsl="http://www.w3.org/1999/XSL/TransformAlias"
1.8 + xmlns:template="http://www.boddie.org.uk/ns/xmltools/template">
1.9 +
1.10 + <xsl:output indent="yes"/>
1.11 + <xsl:namespace-alias stylesheet-prefix="axsl" result-prefix="xsl"/>
1.12 + <xsl:variable name="template-expr">http://www.boddie.org.uk/ns/xmltools/template-expr</xsl:variable>
1.13 +
1.14 + <!-- Match the document itself. -->
1.15 +
1.16 + <xsl:template match="/">
1.17 + <axsl:stylesheet version="1.0">
1.18 + <axsl:template match="/">
1.19 +
1.20 + <!-- Include the remaining attributes. -->
1.21 + <xsl:apply-templates select="@*"/>
1.22 +
1.23 + <!-- Process the elements. -->
1.24 + <xsl:apply-templates select="*"/>
1.25 +
1.26 + </axsl:template>
1.27 + </axsl:stylesheet>
1.28 + </xsl:template>
1.29 +
1.30 +
1.31 +
1.32 + <!-- Match element references. -->
1.33 +
1.34 + <xsl:template match="*[@template:element]">
1.35 + <xsl:call-template name="enter-element">
1.36 + <xsl:with-param name="other-elements" select="@template:element"/>
1.37 + </xsl:call-template>
1.38 + </xsl:template>
1.39 +
1.40 + <xsl:template name="enter-element">
1.41 + <xsl:param name="other-elements"/>
1.42 + <xsl:variable name="first-element" select="substring-before($other-elements, ',')"/>
1.43 + <xsl:variable name="remaining-elements" select="substring-after($other-elements, ',')"/>
1.44 + <xsl:choose>
1.45 + <xsl:when test="$first-element = ''">
1.46 + <xsl:call-template name="next-element">
1.47 + <xsl:with-param name="first-element" select="$other-elements"/>
1.48 + </xsl:call-template>
1.49 + </xsl:when>
1.50 + <xsl:otherwise>
1.51 + <xsl:call-template name="next-element">
1.52 + <xsl:with-param name="first-element" select="$first-element"/>
1.53 + <xsl:with-param name="remaining-elements" select="$remaining-elements"/>
1.54 + </xsl:call-template>
1.55 + </xsl:otherwise>
1.56 + </xsl:choose>
1.57 + </xsl:template>
1.58 +
1.59 + <xsl:template name="next-element">
1.60 + <xsl:param name="first-element"/>
1.61 + <xsl:param name="remaining-elements"/>
1.62 + <axsl:for-each select="{$first-element}">
1.63 + <xsl:choose>
1.64 + <xsl:when test="$remaining-elements = ''">
1.65 + <xsl:call-template name="special-attributes"/>
1.66 + </xsl:when>
1.67 + <xsl:otherwise>
1.68 + <xsl:call-template name="enter-element">
1.69 + <xsl:with-param name="other-elements" select="$remaining-elements"/>
1.70 + </xsl:call-template>
1.71 + </xsl:otherwise>
1.72 + </xsl:choose>
1.73 + </axsl:for-each>
1.74 + </xsl:template>
1.75 +
1.76 +
1.77 +
1.78 + <!-- Match special expression attributes. -->
1.79 +
1.80 + <xsl:template match="*[not(@template:element) and (@template:attribute or @template:value or @template:expr)]">
1.81 + <xsl:call-template name="special-attributes"/>
1.82 + </xsl:template>
1.83 +
1.84 + <xsl:template name="special-attributes">
1.85 + <xsl:choose>
1.86 + <xsl:when test="@template:effect = 'replace'">
1.87 + <xsl:call-template name="special-values"/>
1.88 + </xsl:when>
1.89 + <xsl:otherwise>
1.90 + <xsl:copy>
1.91 + <xsl:apply-templates select="@*"/>
1.92 + <xsl:if test="@template:expr and @template:expr-attr">
1.93 + <axsl:if test="{@template:expr}">
1.94 + <axsl:attribute name="{@template:expr-attr}"><xsl:value-of select="@template:expr-attr"/></axsl:attribute>
1.95 + </axsl:if>
1.96 + </xsl:if>
1.97 + <xsl:call-template name="special-values"/>
1.98 + </xsl:copy>
1.99 + </xsl:otherwise>
1.100 + </xsl:choose>
1.101 + </xsl:template>
1.102 +
1.103 + <xsl:template name="special-values">
1.104 + <xsl:choose>
1.105 + <xsl:when test="@template:attribute">
1.106 + <axsl:for-each select="@{@template:attribute}">
1.107 + <xsl:call-template name="special-value"/>
1.108 + </axsl:for-each>
1.109 + </xsl:when>
1.110 + <xsl:otherwise>
1.111 + <xsl:call-template name="special-value"/>
1.112 + </xsl:otherwise>
1.113 + </xsl:choose>
1.114 + </xsl:template>
1.115 +
1.116 + <xsl:template name="special-value">
1.117 + <xsl:choose>
1.118 + <xsl:when test="@template:value">
1.119 + <axsl:value-of select="{@template:value}"/>
1.120 + </xsl:when>
1.121 + <xsl:otherwise>
1.122 + <xsl:apply-templates select="node()"/>
1.123 + </xsl:otherwise>
1.124 + </xsl:choose>
1.125 + </xsl:template>
1.126 +
1.127 +
1.128 +
1.129 + <!-- Remove template elements. -->
1.130 +
1.131 + <xsl:template match="@template:element|@template:attribute|@template:value|@template:expr|@template:expr-attr|@template:effect">
1.132 + </xsl:template>
1.133 +
1.134 +
1.135 +
1.136 + <!-- Replicate unknown elements. -->
1.137 +
1.138 + <xsl:template match="@*|node()">
1.139 + <xsl:copy>
1.140 + <xsl:apply-templates select="@*|node()"/>
1.141 + </xsl:copy>
1.142 + </xsl:template>
1.143 +
1.144 +</xsl:stylesheet>