</m:mrow>
</m:mtd>
</m:mtr>
- <xsl:for-each select="piecewise/piece">
+ <xsl:for-each select="m:piecewise/m:piece">
<xsl:variable name="charlength"><xsl:apply-templates select="./*[2]" mode="charcount"><xsl:with-param name="nosibling" select="1"/></xsl:apply-templates></xsl:variable>
<m:mtr>
<m:mtd>
<xsl:apply-templates select="*[position()=3]"/>
<m:mphantom><m:mtext>_</m:mtext></m:mphantom>
<m:mo>OF</m:mo>
- <xsl:for-each select="piecewise/piece">
+ <xsl:for-each select="m:piecewise/m:piece">
<xsl:choose>
<xsl:when test="position() != 1">
<m:mo stretchy="false">|</m:mo>
<m:mrow>
<m:mtext mathcolor="Red">We can prove</m:mtext>
<m:mphantom><m:mtext>_</m:mtext></m:mphantom>
- <xsl:apply-templates select="*[position()=3]"/>
+ <!-- the last child is either the expected type, if provided,-->
+ <!-- or the synthesized type. -->
+ <xsl:apply-templates select="*[position()=last()]"/>
<m:mrow>
<m:mphantom><m:mtext>_</m:mtext></m:mphantom>
<m:mtext mathcolor="Green">(explain)</m:mtext>
</m:mrow>
</m:mtd>
</m:mtr>
+ <xsl:variable name="hidedetails">
+ <m:mrow>
+ <m:mphantom>
+ <m:mtext>_</m:mtext>
+ </m:mphantom>
+ <xsl:if test="$test">
+ <m:mtext mathcolor="Green">(hide details)</m:mtext>
+ </xsl:if>
+ </m:mrow>
+ </xsl:variable>
<m:mtr>
<m:mtd>
<m:mrow>
<m:mtext mathcolor="Red">we proved</m:mtext>
<m:mphantom><m:mtext>_</m:mtext></m:mphantom>
<xsl:apply-templates select="*[position()=3]"/>
- <m:mrow>
- <m:mphantom>
- <m:mtext>_</m:mtext>
- </m:mphantom>
- <xsl:if test="$test">
- <m:mtext mathcolor="Green">(hide details)</m:mtext>
- </xsl:if>
- </m:mrow>
+ <xsl:if test="not(*[4])">
+ <xsl:copy-of select="$hidedetails"/>
+ </xsl:if>
</m:mrow>
</m:mtd>
</m:mtr>
+ <xsl:if test="*[4]">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mtext mathcolor="Red">that is equivalent to</m:mtext>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <xsl:apply-templates select="*[position()=4]"/>
+ <xsl:copy-of select="$hidedetails"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </xsl:if>
</m:mtable>
</xsl:variable>
<xsl:choose>
<m:mrow>
<m:mtext mathcolor="Red">We can prove</m:mtext>
<m:mphantom><m:mtext>_</m:mtext></m:mphantom>
- <xsl:apply-templates select="*[position()=3]"/>
+ <!-- the last child is either the expected type, if provided,-->
+ <!-- or the synthesized type. -->
+ <xsl:apply-templates select="*[position()=last()]"/>
<m:mrow>
<m:mphantom><m:mtext>_</m:mtext></m:mphantom>
<m:mtext mathcolor="Green">(explain)</m:mtext>
</m:mrow>
</m:mtd>
</m:mtr>
+ <xsl:variable name="hidedetails">
+ <m:mrow>
+ <m:mphantom>
+ <m:mtext>_</m:mtext>
+ </m:mphantom>
+ <xsl:if test="$test">
+ <m:mtext mathcolor="Green">(hide details)</m:mtext>
+ </xsl:if>
+ </m:mrow>
+ </xsl:variable>
<m:mtr>
<m:mtd>
<m:mrow>
<m:mtext mathcolor="Red">we proved</m:mtext>
<m:mphantom><m:mtext>_</m:mtext></m:mphantom>
<xsl:apply-templates select="*[position()=3]"/>
- <m:mrow>
- <m:mphantom>
- <m:mtext>_</m:mtext>
- </m:mphantom>
- <xsl:if test="$test">
- <m:mtext mathcolor="Green">(hide details)</m:mtext>
- </xsl:if>
- </m:mrow>
+ <xsl:if test="not(*[4])">
+ <xsl:copy-of select="$hidedetails"/>
+ </xsl:if>
</m:mrow>
</m:mtd>
</m:mtr>
+ <xsl:if test="*[4]">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mtext mathcolor="Red">that is equivalent to</m:mtext>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <xsl:apply-templates select="*[position()=4]"/>
+ <xsl:copy-of select="$hidedetails"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </xsl:if>
</m:mtable>
</xsl:variable>
<xsl:choose>
<xsl:param name="nosibling" select="0"/>
<xsl:choose>
<xsl:when test="count(child::*) = 0">
- <xsl:value-of select="$incurrent_length"/>
+ <!-- tremendous bug fixed. An empty element can still have siblings!!! -->
+ <xsl:variable name="siblength"><xsl:apply-templates select="following-sibling::*[position()=1]" mode="charcount"><xsl:with-param name="incurrent_length" select="$incurrent_length"/></xsl:apply-templates></xsl:variable>
+ <xsl:choose>
+ <xsl:when test="string($siblength) = """>
+ <xsl:value-of select="$incurrent_length"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="number($siblength)"/>
+ </xsl:otherwise>
+ </xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="childlength"><xsl:apply-templates select="*[position()=1]" mode="charcount"><xsl:with-param name="incurrent_length" select="$incurrent_length"/><xsl:with-param name="nosibling" select="0"/></xsl:apply-templates></xsl:variable>