6.2 Continuos Fractions

6.2.1 Get Three Bottom Levels

<..tail continuos fractions..>
 <xsl:when test="          check numeral numerator
    (translate(
       normalize-space(
       child::span[ @class = ’mrow-numerator’ ]),
                               ’0123456789’,’’)= ’’)
    and <.check equality of numerators.>
    and <.check ops before two top fracs.>
 ">
   <.a,b := top 2 pre op values.>
   <xsl:choose>
      <xsl:when test="
          ( translate($a,’0123456789 ’,’’) = ’’)
          and (normalize-space($a)=normalize-space($b))
          and starts-with( $c, normalize-space( $a ))
          and starts-with(
                normalize-space(
                  substring-after( $c, normalize-space( $a )) )
                ,
                normalize-space(
                     child::span[ @class = ’mrow-enumerator’ ] /
                     child::span[ @class = ’mfrac’ ] /
                     preceding-sibling::*[1]                  )
              )
      " >
          <xsl:attribute name="class">
             <xsl:value-of select=" ’continuous-mfrac’ " />
          </xsl:attribute>
          <xsl:apply-templates select="*|text()|comment()" />
      </xsl:when>
      <xsl:otherwise>
          <xsl:apply-templates select="*|@*|text()|comment()" />
      </xsl:otherwise>
   </xsl:choose>
 </xsl:when>
-_-_-

<..check equality of numerators..>
 (  normalize-space(
    child::span[ @class = ’mrow-numerator’ ])
   and
    normalize-space(
    child::span[ @class = ’mrow-enumerator’ ] /
    child::span[ @class = ’mfrac’ ] /
    child::span[ @class = ’mrow-numerator’ ])
 )
 and
 (  normalize-space(
    child::span[ @class = ’mrow-enumerator’ ] /
    child::span[ @class = ’mfrac’ ] /
    child::span[ @class = ’mrow-numerator’ ])
   and
    normalize-space(
    child::span[ @class = ’mrow-enumerator’ ] /
    child::span[ @class = ’mfrac’ ] /
    child::span[ @class = ’mrow-enumerator’ ] /
    child::span[ @class = ’mfrac’ ] /
    child::span[ @class = ’mrow-numerator’ ])
 )
-_-_-

<..check ops before two top fracs..>
 (  child::span[ @class = ’mrow-enumerator’ ] /
    child::span[ @class = ’mfrac’ ] /
    preceding-sibling::*[1][@class = ’mo-bin’]
 )
 and
 (  normalize-space(
    child::span[ @class = ’mrow-enumerator’ ] /
    child::span[ @class = ’mfrac’ ] /
    preceding-sibling::*[1] )
    =
    normalize-space(
    child::span[ @class = ’mrow-enumerator’ ] /
    child::span[ @class = ’mfrac’ ] /
    child::span[ @class = ’mrow-enumerator’ ] /
    child::span[ @class = ’mfrac’ ] /
    preceding-sibling::*[1] )
 )
-_-_-

<..a,b := top 2 pre op values..>
 <xsl:variable name="a">
    <xsl:apply-templates select="
          child::span[ @class = ’mrow-enumerator’ ] /
          child::span[ @class = ’mfrac’ ] /
          preceding-sibling::*[2]
    "  mode="enum-op" />
 </xsl:variable>
 <xsl:variable name="b">
    <xsl:apply-templates select="
          child::span[ @class = ’mrow-enumerator’ ] /
          child::span[ @class = ’mfrac’ ] /
          child::span[ @class = ’mrow-enumerator’ ] /
          child::span[ @class = ’mfrac’ ] /
          preceding-sibling::*[2]
    "  mode="enum-op" />
 </xsl:variable>
 <xsl:variable name="c">
    <xsl:value-of select="
     normalize-space(
       child::span[ @class = ’mrow-enumerator’ ] /
       child::span[ @class = ’mfrac’ ] /
       child::span[ @class = ’mrow-enumerator’ ] /
       child::span[ @class = ’mfrac’ ] /
       child::span[ @class = ’mrow-enumerator’ ] )
    "  />
 </xsl:variable>
-_-_-

<..frac templates..>+
 <xsl:template match="*" mode="enum-op">
    <xsl:if test="preceding-sibling::*" >
       <xsl:apply-templates select=" preceding-sibling::*[1] " />
    </xsl:if>
    <xsl:value-of select="." />
 </xsl:template>
-_-_-

6.2.2 Prepend Existing one

<..prepend continuos fractions..>
 <xsl:when test="
       (@class = ’mfrac’)
     and
       child::span[ @class = ’mrow-enumerator’ ]
         / child::span[ @class = ’continuous-mfrac’ ]
     and
       ( normalize-space(
           child::span[ @class = ’mrow-numerator’ ]
         )
         =
         normalize-space(
           child::span[ @class = ’mrow-enumerator’ ]
            / child::span[ @class = ’continuous-mfrac’ ]
            / child::span[ @class = ’mrow-numerator’ ]
         )
       )
     and <.check equality of op with cont frac.>
 " >
   <.a,b := cont top 2 pre op values.>
   <xsl:choose>
      <xsl:when test="
          normalize-space($a)=normalize-space($b)
      " >
          <xsl:attribute name="class">
             <xsl:value-of select=" ’continuous-mfrac’ " />
          </xsl:attribute>
          <xsl:apply-templates select="*|text()|comment()" />
      </xsl:when>
      <xsl:otherwise>
          <xsl:apply-templates select="*|@*|text()|comment()" />
      </xsl:otherwise>
   </xsl:choose>
 </xsl:when>
-_-_-

<..check equality of op with cont frac..>
 (
    normalize-space(
    child::span[ @class = ’mrow-enumerator’ ] /
    child::span[ @class = ’mfrac’ ] /
    preceding-sibling::*[1] )
    =
    normalize-space(
    child::span[ @class = ’mrow-enumerator’ ] /
    child::span[ @class = ’mfrac’ ] /
    child::span[ @class = ’mrow-enumerator’ ] /
    child::span[ @class = ’continuous-mfrac’ ] /
    preceding-sibling::*[1] )
 )
-_-_-

<..a,b := cont top 2 pre op values..>
 <xsl:variable name="a">
    <xsl:apply-templates select="
          child::span[ @class = ’mrow-enumerator’ ] /
          child::span[ @class = ’mcontinuous-mfrac’ ] /
          preceding-sibling::*[2]
    "  mode="enum-op" />
 </xsl:variable>
 <xsl:variable name="b">
    <xsl:apply-templates select="
          child::span[ @class = ’mrow-enumerator’ ] /
          child::span[ @class = ’mcontinuous-mfrac’ ] /
          child::span[ @class = ’mrow-enumerator’ ] /
          child::span[
            (@class = ’mfrac’) or (@class = ’mcontinuous-mfrac’)
          ] /
          preceding-sibling::*[2]
    "  mode="enum-op" />
 </xsl:variable>
-_-_-