[DEV-6370] Package changes

Merge branch 'jira-6370'

* jira-6370:
  [DEV-6370] Allow recursive conditionals
  [DEV-6370] Pass in the $line_code rather than using it from the contract
master
Joseph Frazer 2019-11-04 11:35:23 -05:00
commit d9ecbd4e2c
2 changed files with 51 additions and 17 deletions

View File

@ -331,6 +331,10 @@
</lvmp:var>
</xsl:template>
<xsl:template match="lvm:pass[@name='line_code'] | lvm:map[@to='line_code']" priority="9">
<xsl:message terminate="yes">error: "line_code" is a reserved word</xsl:message>
</xsl:template>
<xsl:template match="lvm:external" priority="4">
<lvmp:var name="{@name}" from="{@name}" src="external">
<xsl:call-template name="lvmp:map-common" />

View File

@ -55,7 +55,7 @@
<xsl:text> {</xsl:text>
<xsl:value-of select="$lvmp:nl" />
<xsl:text>public function compose( $contract ) {</xsl:text>
<xsl:text>public function compose( $contract, $line_code ) {</xsl:text>
<xsl:value-of select="$lvmp:nl" />
<xsl:text> return array(</xsl:text>
<xsl:value-of select="$lvmp:nl" />
@ -201,7 +201,16 @@
<xsl:value-of select="$from" />
<xsl:text>', $contract->getValueIndex( '</xsl:text>
<xsl:value-of select="$index-name" />
<xsl:text>' ) )</xsl:text>
<xsl:text>' )</xsl:text>
<xsl:if test="$default">
<xsl:text>, </xsl:text>
<xsl:apply-templates select="$default" mode="lvmp:render" />
</xsl:if>
<xsl:text> ) )</xsl:text>
</xsl:when>
<xsl:when test="$from='line_code'">
<xsl:text>$</xsl:text>
<xsl:value-of select="$from" />
</xsl:when>
<xsl:otherwise>
<xsl:text>$contract-&gt;getValue( '</xsl:text>
@ -209,15 +218,14 @@
<xsl:text>', $contract->getValueIndex( '</xsl:text>
<xsl:value-of select="$index-name" />
<xsl:text>' )</xsl:text>
<xsl:if test="$default">
<xsl:text>, </xsl:text>
<xsl:apply-templates select="$default" mode="lvmp:render" />
</xsl:if>
<xsl:text> )</xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="$default">
<xsl:text>, </xsl:text>
<xsl:apply-templates select="$default" mode="lvmp:render" />
</xsl:if>
<xsl:text> )</xsl:text>
</xsl:template>
@ -315,7 +323,7 @@
<xsl:text>$contract->iterateValues( '</xsl:text>
<xsl:value-of select="$from" />
<xsl:text>', </xsl:text>
<xsl:text>function( $contract ) {</xsl:text>
<xsl:text>function( $contract ) use( $line_code ) {</xsl:text>
<xsl:text> return array(</xsl:text>
<xsl:apply-templates mode="lvmp:render" />
<xsl:text>);</xsl:text>
@ -334,7 +342,7 @@
<xsl:text>$contract->iterateValues( '</xsl:text>
<xsl:value-of select="$from" />
<xsl:text>', </xsl:text>
<xsl:text>function( $contract ) {</xsl:text>
<xsl:text>function( $contract ) use( $line_code ) {</xsl:text>
<xsl:text> return </xsl:text>
<xsl:apply-templates mode="lvmp:render" select="lvmp:condition" />
<xsl:text>;</xsl:text>
@ -390,7 +398,35 @@
<xsl:variable name="cond" as="element( lvmp:condition )"
select="ancestor::lvmp:condition[1]" />
<xsl:text>( ( </xsl:text>
<xsl:text>( </xsl:text>
<xsl:call-template name="conditionals">
<xsl:with-param name="cond" select="$cond" />
</xsl:call-template>
<xsl:text> ) ? </xsl:text>
<xsl:apply-templates mode="lvmp:render">
<xsl:with-param name="no-trailing-sep" select="true()" />
</xsl:apply-templates>
<xsl:text> : null ), </xsl:text>
</xsl:template>
<xsl:template name="conditionals">
<xsl:param name="cond"/>
<!-- if the parent node is also a conditional, it should be joined with this one -->
<xsl:if test="$cond/parent::lvmp:condition">
<xsl:call-template name="conditionals">
<xsl:with-param name="cond" select="$cond/.." />
</xsl:call-template>
<xsl:text>)</xsl:text>
<xsl:text> &amp;&amp; </xsl:text>
</xsl:if>
<xsl:text>( </xsl:text>
<xsl:text>$contract->isTruthy( </xsl:text>
<xsl:apply-templates select="$cond/lvmp:when/lvmp:*" mode="lvmp:render" />
<xsl:if test="$cond/lvmp:cmp/(*|text())">
@ -398,15 +434,9 @@
<xsl:apply-templates select="$cond/lvmp:cmp/(lvmp:*|text())" mode="lvmp:render" />
</xsl:if>
<xsl:text>)</xsl:text>
<xsl:text> ) ? </xsl:text>
<xsl:apply-templates mode="lvmp:render">
<xsl:with-param name="no-trailing-sep" select="true()" />
</xsl:apply-templates>
<xsl:text> : null ), </xsl:text>
</xsl:template>
<xsl:template mode="lvmp:render" priority="8" match="lvmp:condition[ @when ]">
<xsl:variable name="cond" select="." />