apply-gen now properly handles multiple functions

master
Mike Gerwitz 2014-11-21 14:25:52 -05:00
parent dd6c8a8040
commit 1cc2423662
4 changed files with 45 additions and 9 deletions

View File

@ -120,15 +120,10 @@
select="namespace-uri-for-prefix(
$ns-prefix, . )" />
<!-- this ensures that the prefix used is actually defined within
our result document and resolves to the proper namespace -->
<namespace name="{$ns-prefix}"
select="$ns" />
<sequence select="fgen:create-func(
$name-resolv, $local-name, $ns )" />
$name-resolv, $local-name, $ns-prefix, $ns )" />
<sequence select="fgen:create-tpl(
$name-resolv, . )" />
$name-resolv, ., $ns-prefix, $ns )" />
</template>
@ -154,9 +149,13 @@
<function name="fgen:create-func">
<param name="name-resolv" as="xs:QName" />
<param name="local-name" as="xs:string" />
<param name="ns-prefix" as="xs:string" />
<param name="ns" as="xs:anyURI" />
<out:function name="{$name-resolv}" as="element()">
<namespace name="{$ns-prefix}"
select="$ns" />
<element name="{$local-name}"
namespace="{$ns}" />
</out:function>
@ -174,12 +173,17 @@
<function name="fgen:create-tpl">
<param name="name-resolv" as="xs:QName" />
<param name="defn" as="element(xsl:function)" />
<param name="ns-prefix" as="xs:string" />
<param name="ns" as="xs:anyURI" />
<variable name="params"
select="$defn/xsl:param" />
<out:template mode="f:apply"
match="{$name-resolv}">
<namespace name="{$ns-prefix}"
select="$ns" />
<for-each select="$params">
<xsl:variable name="i"
select="position()" />

View File

@ -32,5 +32,13 @@
<sequence select="$x + $y" />
</function>
</stylesheet>
<!-- make sure multiple functions are properly handled -->
<function name="foo:sub-two" as="xs:decimal">
<param name="x" as="xs:decimal" />
<param name="y" as="xs:decimal" />
<sequence select="$x - $y" />
</function>
</stylesheet>

View File

@ -41,12 +41,24 @@
<function name="foo:apply-add-two">
<param name="x" as="xs:decimal" />
<param name="y" as="xs:decimal" />
<apply-templates select="foo:add-two()"
mode="f:apply">
<with-param name="arg1" select="$x" />
<with-param name="arg2" select="$y" />
</apply-templates>
</function>
<function name="foo:apply-sub-two">
<param name="x" as="xs:decimal" />
<param name="y" as="xs:decimal" />
<apply-templates select="foo:sub-two()"
mode="f:apply">
<with-param name="arg1" select="$x" />
<with-param name="arg2" select="$y" />
</apply-templates>
</function>
</stylesheet>

View File

@ -165,5 +165,17 @@
<expect label="applying template to nullary yields proper result"
test="$x:result = 5" />
<!-- ensure that multiple functions are processed -->
<scenario label="with multiple functions">
<call function="foo:apply-sub-two">
<param name="x" select="2" />
<param name="y" select="3" />
</call>
<expect label="applying template to nullary yields proper result"
test="$x:result = -1" />
</scenario>
</scenario>
</description>