1.1 --- a/XSLForms/XSL/Input.xsl Mon Oct 03 00:49:15 2005 +0000
1.2 +++ b/XSLForms/XSL/Input.xsl Mon Oct 03 00:52:17 2005 +0000
1.3 @@ -44,7 +44,6 @@
1.4 <!-- Match element references. -->
1.5
1.6 <xsl:template match="element">
1.7 - <xsl:param name="nested">false</xsl:param>
1.8
1.9 <!-- Make a rule for the element. -->
1.10 <axsl:template match="{@name}">
1.11 @@ -57,64 +56,77 @@
1.12
1.13 <!-- Find elements and determine how to process them. -->
1.14 <xsl:for-each select="element">
1.15 - <xsl:choose>
1.16 - <!-- Enumerations. -->
1.17 - <xsl:when test="@expr">
1.18 - <xsl:call-template name="inside-element"/>
1.19 - </xsl:when>
1.20 - <!-- Top-level or "section" elements are added. -->
1.21 - <xsl:when test="count(attribute) = 0 or $nested = 'false'">
1.22 - <xsl:element name="{@name}">
1.23 - <xsl:call-template name="inside-element"/>
1.24 - </xsl:element>
1.25 - </xsl:when>
1.26 - <!-- Other elements are only added if found. -->
1.27 - <xsl:otherwise>
1.28 - <axsl:apply-templates select="{@name}"/>
1.29 - </xsl:otherwise>
1.30 - </xsl:choose>
1.31 + <xsl:call-template name="process-element"/>
1.32 </xsl:for-each>
1.33 -
1.34 </xsl:element>
1.35 -
1.36 </axsl:template>
1.37
1.38 <!-- Make rules for nested elements. -->
1.39 - <xsl:choose>
1.40 - <xsl:when test="$nested = 'true'">
1.41 - <xsl:apply-templates select="*[not(@expr)]">
1.42 - <xsl:with-param name="nested">true</xsl:with-param>
1.43 - </xsl:apply-templates>
1.44 - </xsl:when>
1.45 - <xsl:otherwise>
1.46 - <xsl:apply-templates select="*/*[not(@expr)]">
1.47 - <xsl:with-param name="nested">true</xsl:with-param>
1.48 - </xsl:apply-templates>
1.49 - </xsl:otherwise>
1.50 - </xsl:choose>
1.51 + <xsl:for-each select="element">
1.52 + <xsl:call-template name="process-rules"/>
1.53 + </xsl:for-each>
1.54
1.55 </xsl:template>
1.56
1.57
1.58
1.59 - <!-- Fill in elements. -->
1.60 + <!-- Process elements. -->
1.61 +
1.62 + <xsl:template name="process-element">
1.63 + <xsl:param name="path" select="@name"/>
1.64
1.65 - <xsl:template name="inside-element">
1.66 - <axsl:apply-templates select="{@name}/@*"/>
1.67 + <!-- Store multiple-choice selections, if appropriate. -->
1.68 + <xsl:if test="@type='multiple-choice-list'">
1.69 + <axsl:variable name="values" select="{@name}/{element[@type='multiple-choice-list-value']/@name}/@{attribute/@name}"/>
1.70 + </xsl:if>
1.71 +
1.72 + <!-- Define elements which do not have selectors. -->
1.73 + <xsl:variable name="adding-selectors" select="count(//selector[@element=current()/@name])"/>
1.74 +
1.75 <xsl:choose>
1.76 <!-- Enumerations. -->
1.77 - <xsl:when test="@expr">
1.78 + <xsl:when test="@type='multiple-choice-value' or @type='multiple-choice-list-value'">
1.79 <xsl:call-template name="inside-enumeration"/>
1.80 </xsl:when>
1.81 + <!-- Added elements. -->
1.82 + <xsl:when test="$adding-selectors = 0">
1.83 + <xsl:element name="{@name}">
1.84 + <axsl:apply-templates select="{$path}/@*"/>
1.85 + <xsl:for-each select="element">
1.86 + <xsl:call-template name="process-element">
1.87 + <xsl:with-param name="path" select="concat($path, '/', @name)"/>
1.88 + </xsl:call-template>
1.89 + </xsl:for-each>
1.90 + </xsl:element>
1.91 + </xsl:when>
1.92 + <!-- Other elements are only added if found. -->
1.93 <xsl:otherwise>
1.94 - <!-- Enumeration containers. -->
1.95 - <xsl:for-each select="*[@expr]">
1.96 - <xsl:call-template name="inside-element"/>
1.97 + <axsl:apply-templates select="{$path}"/>
1.98 + </xsl:otherwise>
1.99 + </xsl:choose>
1.100 + </xsl:template>
1.101 +
1.102 +
1.103 +
1.104 + <!-- Process rules. -->
1.105 +
1.106 + <xsl:template name="process-rules">
1.107 +
1.108 + <!-- Define elements which do not have selectors. -->
1.109 + <!-- NOTE: Duplicating adding-selectors - see above. -->
1.110 + <xsl:variable name="adding-selectors" select="count(//selector[@element=current()/@name])"/>
1.111 +
1.112 + <xsl:choose>
1.113 + <xsl:when test="@type='multiple-choice-value' or @type='multiple-choice-list-value'">
1.114 + <!-- Do not match multiple-choice values. -->
1.115 + </xsl:when>
1.116 + <xsl:when test="$adding-selectors = 0">
1.117 + <xsl:for-each select="element">
1.118 + <xsl:call-template name="process-rules"/>
1.119 </xsl:for-each>
1.120 - <!-- Normal elements. -->
1.121 - <xsl:if test="count(element[not(@expr)]) != 0">
1.122 - <axsl:apply-templates select="{@name}/*"/>
1.123 - </xsl:if>
1.124 + </xsl:when>
1.125 + <xsl:otherwise>
1.126 + <xsl:apply-templates select="."/>
1.127 </xsl:otherwise>
1.128 </xsl:choose>
1.129 </xsl:template>
1.130 @@ -127,6 +139,11 @@
1.131 <axsl:for-each select="${../@name}/{../@name}/{@name}">
1.132 <axsl:copy>
1.133 <axsl:apply-templates select="@*"/>
1.134 + <xsl:if test="@type='multiple-choice-list-value'">
1.135 + <axsl:if test="$values[string() = current()/@{attribute/@name}]">
1.136 + <axsl:attribute name="{@expr-name}">1</axsl:attribute>
1.137 + </axsl:if>
1.138 + </xsl:if>
1.139 </axsl:copy>
1.140 </axsl:for-each>
1.141 </xsl:template>