Merge branch 'jira-3251' into 'master'

[DEV-3251] add escape-param attribute to tame

See merge request floss/tame!19
master
Gregory Torbenson 2018-07-02 15:04:29 -04:00
commit 9889838c5e
2 changed files with 47 additions and 7 deletions

View File

@ -48,7 +48,7 @@
<lvmp:node name="{name()}" /> <lvmp:node name="{name()}" />
<xsl:text> => </xsl:text> <xsl:text> => </xsl:text>
<lvmp:node-boundary> <lvmp:node-boundary escape-param="{@lvm:escape-param}">
<xsl:apply-templates select="." mode="lvmp:c1-node-result" /> <xsl:apply-templates select="." mode="lvmp:c1-node-result" />
</lvmp:node-boundary> </lvmp:node-boundary>
</xsl:template> </xsl:template>
@ -61,6 +61,11 @@
<xsl:template match="c1:*" mode="lvmp:c1-node-result" priority="1"> <xsl:template match="c1:*" mode="lvmp:c1-node-result" priority="1">
<xsl:text>array( </xsl:text> <xsl:text>array( </xsl:text>
<xsl:apply-templates select="@*|*" /> <xsl:apply-templates select="@*|*" />
<xsl:if test="text() and not( element() )">
<xsl:text>'text()' => </xsl:text>
<xsl:apply-templates select="text()" mode="lvm:valparse" />
<xsl:text></xsl:text>
</xsl:if>
<xsl:text>) </xsl:text> <xsl:text>) </xsl:text>
</xsl:template> </xsl:template>
@ -72,7 +77,7 @@
<xsl:template match="c1:*[text()]" priority="4"> <xsl:template match="c1:*[text()]" priority="4">
<!-- defer node rendering; allows us to easily determine if there are <!-- defer node rendering; allows us to easily determine if there are
siblings of the same name within a node boundary --> siblings of the same name within a node boundary -->
<lvmp:node name="{name()}" /> <lvmp:node name="{name()}" escape-param="{@lvm:escape-param}"/>
<xsl:text> => </xsl:text> <xsl:text> => </xsl:text>
<xsl:text></xsl:text> <xsl:text></xsl:text>
@ -105,6 +110,7 @@
</xsl:template> </xsl:template>
<xsl:template match="c1:*/@lvm:*" priority="6"> <xsl:template match="c1:*/@lvm:*" priority="6">
<!-- discard all system attributes --> <!-- discard all system attributes -->
<!-- TODO: error once everything is properly implemented --> <!-- TODO: error once everything is properly implemented -->

View File

@ -22,6 +22,7 @@
--> -->
<xsl:stylesheet version="2.0" <xsl:stylesheet version="2.0"
xmlns:c1="http://www.epic-premier.com/XMLSchema" xmlns:c1="http://www.epic-premier.com/XMLSchema"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:lvm="http://www.lovullo.com/rater/map/c1" xmlns:lvm="http://www.lovullo.com/rater/map/c1"
xmlns:lvmp="http://www.lovullo.com/rater/map/c1/pp"> xmlns:lvmp="http://www.lovullo.com/rater/map/c1/pp">
@ -29,6 +30,16 @@
<xsl:import href="transform.xsl" /> <xsl:import href="transform.xsl" />
<xsl:function name="lvm:is-escaped-param" as="xs:boolean">
<xsl:param name="value" as="element( lvmp:value )"/>
<xsl:variable name="escape-param" as="xs:string?"
select="$value/ancestor-or-self::lvmp:node-boundary[1]/@escape-param[ 1 ]" />
<xsl:variable name="parent-value" as="element( lvmp:value )?"
select="$value/parent::lvmp:value[ 1 ]"/>
<xsl:sequence select="$escape-param and boolean($escape-param) and not( $parent-value )" />
</xsl:function>
<xsl:template match="lvmp:root" mode="lvmp:render" priority="5"> <xsl:template match="lvmp:root" mode="lvmp:render" priority="5">
<xsl:text>&lt;?php </xsl:text> <xsl:text>&lt;?php </xsl:text>
@ -133,6 +144,10 @@
<xsl:param name="value" select="$var/@value" /> <xsl:param name="value" select="$var/@value" />
<xsl:param name="default" select="$var/lvmp:default" /> <xsl:param name="default" select="$var/lvmp:default" />
<xsl:variable name="needs-escape" as="xs:boolean" select="lvm:is-escaped-param( . )"/>
<xsl:if test="$needs-escape">
<xsl:text>$contract-&gt;escapeValue(</xsl:text>
</xsl:if>
<xsl:text>$contract-&gt;getValueByContext( </xsl:text> <xsl:text>$contract-&gt;getValueByContext( </xsl:text>
<!-- recursive process contexts --> <!-- recursive process contexts -->
<xsl:apply-templates select="lvmp:value" mode="lvmp:render"> <xsl:apply-templates select="lvmp:value" mode="lvmp:render">
@ -145,6 +160,9 @@
<xsl:text>' </xsl:text> <xsl:text>' </xsl:text>
<xsl:text> )</xsl:text> <xsl:text> )</xsl:text>
<xsl:if test="$needs-escape">
<xsl:text> )</xsl:text>
</xsl:if>
</xsl:template> </xsl:template>
@ -177,11 +195,23 @@
</xsl:choose> </xsl:choose>
</xsl:param> </xsl:param>
<xsl:text>$contract-&gt;getValue( '</xsl:text> <xsl:variable name="needs-escape" as="xs:boolean" select="lvm:is-escaped-param( . )"/>
<xsl:value-of select="$from" /> <xsl:choose>
<xsl:text>', $contract->getValueIndex( '</xsl:text> <xsl:when test="$needs-escape">
<xsl:value-of select="$index-name" /> <xsl:text>$contract-&gt;escapeValue( $contract-&gt;getValue( '</xsl:text>
<xsl:text>' )</xsl:text> <xsl:value-of select="$from" />
<xsl:text>', $contract->getValueIndex( '</xsl:text>
<xsl:value-of select="$index-name" />
<xsl:text>' ) )</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>$contract-&gt;getValue( '</xsl:text>
<xsl:value-of select="$from" />
<xsl:text>', $contract->getValueIndex( '</xsl:text>
<xsl:value-of select="$index-name" />
<xsl:text>' )</xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="$default"> <xsl:if test="$default">
<xsl:text>, </xsl:text> <xsl:text>, </xsl:text>
@ -241,6 +271,10 @@
<!-- no longer needed --> <!-- no longer needed -->
</xsl:template> </xsl:template>
<xsl:template match="lvmp:var-escape" mode="lvmp:render" priority="5">
<!-- no longer needed -->
</xsl:template>
<xsl:template match="lvmp:var/lvmp:default" mode="lvmp:render" priority="5"> <xsl:template match="lvmp:var/lvmp:default" mode="lvmp:render" priority="5">
<!-- render contents --> <!-- render contents -->
<xsl:apply-templates mode="lvmp:render" /> <xsl:apply-templates mode="lvmp:render" />