﻿<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding="utf-8"/>

<xsl:template match="text()">
<xsl:call-template name="formula">
<xsl:with-param name="txt" select="."/>
</xsl:call-template>
</xsl:template>

<xsl:template name="formula">
<xsl:param name="txt"/>
<xsl:choose>
<xsl:when test="contains($txt,'$$') and contains(substring-after($txt,'$$'),'$$')">
<xsl:call-template name="math">
<xsl:with-param name="txt" select="substring-before($txt,'$$')"/>
</xsl:call-template>
<formula>
<xsl:call-template name="split">
<xsl:with-param name="after" select="substring-before(substring-after($txt,'$$'),'$$')"/>
<xsl:with-param name="num" select="0"/>
<xsl:with-param name="arg" select="0"/>
</xsl:call-template>
</formula>
<xsl:call-template name="formula">
<xsl:with-param name="txt" select="substring-after(substring-after($txt,'$$'),'$$')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="math">
<xsl:with-param name="txt" select="$txt"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>

<xsl:template name="math">
<xsl:param name="txt"/>
<xsl:choose>
<xsl:when test="contains($txt,'$') and contains(substring-after($txt,'$'),'$')">
<xsl:value-of select="substring-before($txt,'$')"/>
<math>
<xsl:call-template name="split">
<xsl:with-param name="after" select="substring-before(substring-after($txt,'$'),'$')"/>
<xsl:with-param name="num" select="0"/>
<xsl:with-param name="arg" select="0"/>
</xsl:call-template>
</math>
<xsl:call-template name="math">
<xsl:with-param name="txt" select="substring-after(substring-after($txt,'$'),'$')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$txt"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>


<xsl:template name="split">
<xsl:param name="before"/>
<xsl:param name="content"/>
<xsl:param name="after"/>
<xsl:param name="num"/>
<xsl:param name="tag"/>
<xsl:param name="arg"/>
<xsl:choose>
<xsl:when test="starts-with($after,'\\') and $num = 0">
	<xsl:value-of select="$before"/>
	<line/>
	<xsl:call-template name="split">
	<xsl:with-param name="after" select="substring($after,3)"/>
	<xsl:with-param name="num" select="0"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'\wrap') and $num = 0">
	<xsl:value-of select="$before"/>
	<wrap/>
	<xsl:call-template name="split">
	<xsl:with-param name="after" select="substring($after,6)"/>
	<xsl:with-param name="num" select="0"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'_{') and $num = 0">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="after" select="substring($after,3)"/>
	<xsl:with-param name="num" select="1"/>
	<xsl:with-param name="tag" select="'sub'"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'_') and not(starts-with($after,'_{')) and not(starts-with(substring($after,3),'^')) and $num = 0">
	<xsl:value-of select="$before"/>
	<sub><xsl:value-of select="substring($after,2,1)"/></sub>
	<xsl:call-template name="split">
	<xsl:with-param name="after" select="substring($after,3)"/>
	<xsl:with-param name="num" select="0"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'_') and not(starts-with($after,'_{')) and starts-with(substring($after,3),'^') and not(starts-with(substring($after,3),'^{')) and $num = 0">
	<xsl:value-of select="$before"/>
	<float>
	<sup><xsl:value-of select="substring($after,4,1)"/></sup>
	<sub><xsl:value-of select="substring($after,2,1)"/></sub>
	</float>
	<xsl:call-template name="split">
	<xsl:with-param name="after" select="substring($after,5)"/>
	<xsl:with-param name="num" select="0"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'_') and not(starts-with($after,'_{')) and starts-with(substring($after,3),'^{') and $num = 0">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="after" select="substring($after,5)"/>
	<xsl:with-param name="content" select="concat(substring($after,2,1),'$')"/>
	<xsl:with-param name="num" select="1"/>
	<xsl:with-param name="arg" select="1"/>
	<xsl:with-param name="tag" select="'float-sub-sup'"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'^{') and $num = 0">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="after" select="substring($after,3)"/>
	<xsl:with-param name="num" select="1"/>
	<xsl:with-param name="tag" select="'sup'"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'^') and not(starts-with($after,'^{')) and not(starts-with(substring($after,3),'_')) and $num = 0">
	<xsl:value-of select="$before"/>
	<sup><xsl:value-of select="substring($after,2,1)"/></sup>
	<xsl:call-template name="split">
	<xsl:with-param name="after" select="substring($after,3)"/>
	<xsl:with-param name="num" select="0"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'^') and not(starts-with($after,'^{')) and starts-with(substring($after,3),'_') and not(starts-with(substring($after,3),'_{')) and $num = 0">
	<xsl:value-of select="$before"/>
	<float>
	<sup><xsl:value-of select="substring($after,2,1)"/></sup>
	<sub><xsl:value-of select="substring($after,4,1)"/></sub>
	</float>
	<xsl:call-template name="split">
	<xsl:with-param name="after" select="substring($after,5)"/>
	<xsl:with-param name="num" select="0"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'^') and not(starts-with($after,'^{')) and starts-with(substring($after,3),'_') and starts-with(substring($after,3),'_{') and $num = 0">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="after" select="substring($after,5)"/>
	<xsl:with-param name="content" select="concat(substring($after,2,1),'$')"/>
	<xsl:with-param name="num" select="1"/>
	<xsl:with-param name="arg" select="1"/>
	<xsl:with-param name="tag" select="'float-sup-sub'"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'\sqrt{') and $num = 0">
	<xsl:value-of select="$before"/>
	<radical>
	<radix/>
	<xsl:call-template name="split">
	<xsl:with-param name="after" select="substring($after,7)"/>
	<xsl:with-param name="num" select="1"/>
	<xsl:with-param name="tag" select="'radicand'"/>
	</xsl:call-template>
	</radical>
</xsl:when>
<xsl:when test="starts-with($after,'\sqrt[') and $num = 0">
	<xsl:value-of select="$before"/>
	<radical>
	<radix>
	<xsl:call-template name="split">
	<xsl:with-param name="after" select="substring-before(substring($after,7),']{')"/>
	<xsl:with-param name="num" select="0"/>
	</xsl:call-template>
	</radix>
	<xsl:call-template name="split">
	<xsl:with-param name="after" select="substring-after($after,']{')"/>
	<xsl:with-param name="num" select="1"/>
	<xsl:with-param name="tag" select="'radicand'"/>
	</xsl:call-template>
	</radical>
</xsl:when>
<xsl:when test="starts-with($after,'\left') and $num = 0">
	<xsl:if test="starts-with($after,'\left \')">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="after" select="substring($after,9)"/>
	<xsl:with-param name="num" select="1"/>
	<xsl:with-param name="tag" select="concat('fence_',substring($after,8,1))"/>
	</xsl:call-template>
	</xsl:if>
	<xsl:if test="not(starts-with($after,'\left \'))">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="after" select="substring($after,8)"/>
	<xsl:with-param name="num" select="1"/>
	<xsl:with-param name="tag" select="concat('fence_',substring($after,7,1))"/>
	</xsl:call-template>
	</xsl:if>
</xsl:when>
<xsl:when test="starts-with($after,'\cases{') and $num = 0">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="after" select="substring($after,8)"/>
	<xsl:with-param name="num" select="1"/>
	<xsl:with-param name="tag" select="'cases'"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'\sur{') and $num = 0">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="after" select="substring($after,6)"/>
	<xsl:with-param name="num" select="1"/>
	<xsl:with-param name="tag" select="'sur'"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'\inf{') and $num = 0">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="after" select="substring($after,6)"/>
	<xsl:with-param name="num" select="1"/>
	<xsl:with-param name="tag" select="'inf'"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'\matrix{') and $num = 0">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="after" select="substring($after,9)"/>
	<xsl:with-param name="num" select="1"/>
	<xsl:with-param name="tag" select="'matrix'"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'\det{') and $num = 0">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="after" select="substring($after,6)"/>
	<xsl:with-param name="num" select="1"/>
	<xsl:with-param name="tag" select="'det'"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'\mathbf{') and $num = 0">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="after" select="substring($after,9)"/>
	<xsl:with-param name="num" select="1"/>
	<xsl:with-param name="tag" select="'bold'"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'\mathsl{') and $num = 0">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="after" select="substring($after,9)"/>
	<xsl:with-param name="num" select="1"/>
	<xsl:with-param name="tag" select="'italic'"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'\strike{') and $num = 0">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="after" select="substring($after,9)"/>
	<xsl:with-param name="num" select="1"/>
	<xsl:with-param name="tag" select="'strike'"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'\underline{') and $num = 0">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="after" select="substring($after,12)"/>
	<xsl:with-param name="num" select="1"/>
	<xsl:with-param name="tag" select="'underline'"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'\overline{') and $num = 0">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="after" select="substring($after,11)"/>
	<xsl:with-param name="num" select="1"/>
	<xsl:with-param name="tag" select="'overline'"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'\overbrace{') and $num = 0">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="after" select="substring($after,12)"/>
	<xsl:with-param name="content" select="'$'"/>
	<xsl:with-param name="num" select="1"/>
	<xsl:with-param name="arg" select="1"/>
	<xsl:with-param name="tag" select="'over-overbrace-ker'"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'\underbrace{') and $num = 0">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="after" select="substring($after,13)"/>
	<xsl:with-param name="content" select="'$'"/>
	<xsl:with-param name="num" select="1"/>
	<xsl:with-param name="arg" select="1"/>
	<xsl:with-param name="tag" select="'under-underbrace-ker'"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'\frac{') and $num = 0">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="after" select="substring($after,7)"/>
	<xsl:with-param name="num" select="1"/>
	<xsl:with-param name="tag" select="'fraction-num-den'"/>
	<xsl:with-param name="arg" select="2"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'\pre{') and $num = 0">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="after" select="substring($after,6)"/>
	<xsl:with-param name="num" select="1"/>
	<xsl:with-param name="tag" select="'float-sur-inf'"/>
	<xsl:with-param name="arg" select="2"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'\case{') and $num = 0">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="after" select="substring($after,7)"/>
	<xsl:with-param name="num" select="1"/>
	<xsl:with-param name="tag" select="'case-value-scope'"/>
	<xsl:with-param name="arg" select="2"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'\stackrel{') and $num = 0">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="after" select="substring($after,11)"/>
	<xsl:with-param name="num" select="1"/>
	<xsl:with-param name="tag" select="'over-sat-ker'"/>
	<xsl:with-param name="arg" select="2"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'\stackrev{') and $num = 0">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="after" select="substring($after,11)"/>
	<xsl:with-param name="num" select="1"/>
	<xsl:with-param name="tag" select="'under-ker-sat'"/>
	<xsl:with-param name="arg" select="2"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'\vector{') and $num = 0">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="after" select="substring($after,9)"/>
	<xsl:with-param name="num" select="1"/>
	<xsl:with-param name="tag" select="'vector-entry'"/>
	<xsl:with-param name="arg" select="9"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'\row{') and $num = 0">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="after" select="substring($after,6)"/>
	<xsl:with-param name="num" select="1"/>
	<xsl:with-param name="tag" select="'row-cell'"/>
	<xsl:with-param name="arg" select="9"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'{')">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="content" select="concat($content, '{')"/>
	<xsl:with-param name="after" select="substring($after,2)"/>
	<xsl:with-param name="num" select="$num + 1"/>
	<xsl:with-param name="tag" select="$tag"/>
	<xsl:with-param name="arg" select="$arg"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'\left')">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="content" select="concat($content, '\left')"/>
	<xsl:with-param name="after" select="substring($after,6)"/>
	<xsl:with-param name="num" select="$num + 1"/>
	<xsl:with-param name="tag" select="$tag"/>
	<xsl:with-param name="arg" select="$arg"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'}') and $num > 1">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="content" select="concat($content,'}')"/>
	<xsl:with-param name="after" select="substring($after,2)"/>
	<xsl:with-param name="num" select="$num - 1"/>
	<xsl:with-param name="tag" select="$tag"/>
	<xsl:with-param name="arg" select="$arg"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'\right') and $num > 1">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="content" select="concat($content,'\right')"/>
	<xsl:with-param name="after" select="substring($after,7)"/>
	<xsl:with-param name="num" select="$num - 1"/>
	<xsl:with-param name="tag" select="$tag"/>
	<xsl:with-param name="arg" select="$arg"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'}{') and $num = 1 and $arg = 2">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="content" select="concat($content,'$')"/>
	<xsl:with-param name="after" select="substring($after,3)"/>
	<xsl:with-param name="num" select="1"/>
	<xsl:with-param name="tag" select="$tag"/>
	<xsl:with-param name="arg" select="$arg - 1"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'}{') and $num = 1 and $arg = 9">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="content" select="concat($content,'$')"/>
	<xsl:with-param name="after" select="substring($after,3)"/>
	<xsl:with-param name="num" select="1"/>
	<xsl:with-param name="tag" select="$tag"/>
	<xsl:with-param name="arg" select="9"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'}_') and not(starts-with($after,'}_{')) and $num = 1 and $tag = 'sup'">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="content" select="concat($content,'$',substring($after,3,1))"/>
	<xsl:with-param name="after" select="concat('}',substring($after,4))"/>
	<xsl:with-param name="num" select="1"/>
	<xsl:with-param name="tag" select="'float-sup-sub'"/>
	<xsl:with-param name="arg" select="1"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'}_{') and $num = 1 and $tag = 'sup'">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="content" select="concat($content,'$')"/>
	<xsl:with-param name="after" select="substring($after,4)"/>
	<xsl:with-param name="num" select="1"/>
	<xsl:with-param name="tag" select="'float-sup-sub'"/>
	<xsl:with-param name="arg" select="1"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'}_{') and $num = 1 and $tag = 'under-ker-underbrace'">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="content" select="concat('\underbrace{',substring-before($content,'$'),'}$')"/>
	<xsl:with-param name="after" select="substring($after,4)"/>
	<xsl:with-param name="num" select="1"/>
	<xsl:with-param name="tag" select="'under-ker-sat'"/>
	<xsl:with-param name="arg" select="1"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'}^{') and $num = 1 and $tag = 'over-overbrace-ker'">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="content" select="concat('\overbrace{',substring-after($content,'$'),'}$')"/>
	<xsl:with-param name="after" select="substring($after,4)"/>
	<xsl:with-param name="num" select="1"/>
	<xsl:with-param name="tag" select="'over-ker-sat'"/>
	<xsl:with-param name="arg" select="1"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'}^') and not(starts-with($after,'}^{')) and $num = 1 and $tag = 'over-overbrace-ker'">
	<xsl:value-of select="$before"/>
	<over>
	<sat><xsl:value-of select="substring($after,3,1)"/></sat>
	<overbrace/>
	<ker>
	<xsl:call-template name="split">
	<xsl:with-param name="after" select="substring-after($content,'$')"/>
	<xsl:with-param name="num" select="0"/>
	</xsl:call-template>
	</ker>
	</over>
	<xsl:call-template name="split">
	<xsl:with-param name="after" select="substring($after,4)"/>
	<xsl:with-param name="num" select="0"/>
	</xsl:call-template>
</xsl:when>

<xsl:when test="starts-with($after,'}_') and not(starts-with($after,'}_{')) and $num = 1 and $tag = 'under-ker-underbrace'">
	<xsl:value-of select="$before"/>
	<under>
	<ker>
	<xsl:call-template name="split">
	<xsl:with-param name="after" select="substring-before($content,'$')"/>
	<xsl:with-param name="num" select="0"/>
	</xsl:call-template>
	</ker>
	<underbrace/>
	<sat><xsl:value-of select="substring($after,3,1)"/></sat>
	</under>
	<xsl:call-template name="split">
	<xsl:with-param name="after" select="substring($after,4)"/>
	<xsl:with-param name="num" select="0"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'}^') and not(starts-with($after,'}^{')) and $num = 1 and $tag = 'sub'">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="content" select="concat($content,'$',substring($after,3,1))"/>
	<xsl:with-param name="after" select="concat('}',substring($after,4))"/>
	<xsl:with-param name="num" select="1"/>
	<xsl:with-param name="tag" select="'float-sub-sup'"/>
	<xsl:with-param name="arg" select="1"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'}^{') and $num = 1 and $tag = 'sub'">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="content" select="concat($content,'$')"/>
	<xsl:with-param name="after" select="substring($after,4)"/>
	<xsl:with-param name="num" select="1"/>
	<xsl:with-param name="tag" select="'float-sub-sup'"/>
	<xsl:with-param name="arg" select="1"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'}') and $num = 1 and $arg = 1 and $tag = 'float-sub-sup'">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="content" select="concat(substring-after($content,'$'), '$', substring-before($content,'$'))"/>
	<xsl:with-param name="after" select="$after"/>
	<xsl:with-param name="num" select="$num"/>
	<xsl:with-param name="tag" select="'float-sup-sub'"/>
	<xsl:with-param name="arg" select="$arg"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'}') and $num = 1 and $arg = 1 and $tag = 'under-underbrace-ker'">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="content" select="concat(substring-after($content,'$'), '$', substring-before($content,'$'))"/>
	<xsl:with-param name="after" select="$after"/>
	<xsl:with-param name="num" select="$num"/>
	<xsl:with-param name="tag" select="'under-ker-underbrace'"/>
	<xsl:with-param name="arg" select="$arg"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'}') and $num = 1 and $arg = 1 and $tag = 'over-ker-sat'">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="content" select="concat(substring-after($content,'$'), '$', substring-before($content,'$'))"/>
	<xsl:with-param name="after" select="$after"/>
	<xsl:with-param name="num" select="$num"/>
	<xsl:with-param name="tag" select="'over-sat-ker'"/>
	<xsl:with-param name="arg" select="$arg"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'}') and not(starts-with($after,'}{')) and $num = 1 and $arg = 9">
	<xsl:value-of select="$before"/>
	<xsl:element name="{substring-before($tag,'-')}">
	<xsl:call-template name="vector">
	<xsl:with-param name="content" select="concat($content,'$')"/>
	<xsl:with-param name="tag" select="substring-after($tag,'-')"/>
	</xsl:call-template>
	</xsl:element>
	<xsl:call-template name="split">
	<xsl:with-param name="content" select="''"/>
	<xsl:with-param name="after" select="substring($after,2)"/>
	<xsl:with-param name="num" select="0"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'}') and $num = 1 and $arg = 1 and contains($tag,'-')">
	<xsl:value-of select="$before"/>
	<xsl:element name="{substring-before($tag,'-')}">
	<xsl:element name="{substring-before(substring-after($tag,'-'),'-')}">
	<xsl:call-template name="split">
	<xsl:with-param name="after" select="substring-before($content,'$')"/>
	<xsl:with-param name="num" select="0"/>
	</xsl:call-template>
	</xsl:element>
	<xsl:element name="{substring-after(substring-after($tag,'-'),'-')}">
	<xsl:call-template name="split">
	<xsl:with-param name="after" select="substring-after($content,'$')"/>
	<xsl:with-param name="num" select="0"/>
	</xsl:call-template>
	</xsl:element>
	</xsl:element>
	<xsl:call-template name="split">
	<xsl:with-param name="after" select="substring($after,2)"/>
	<xsl:with-param name="num" select="0"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'}') and $num = 1 and $tag != '' and not(contains($tag,'-'))">
	<xsl:value-of select="$before"/>
	<xsl:element name="{$tag}">
	<xsl:call-template name="split">
	<xsl:with-param name="after" select="$content"/>
	<xsl:with-param name="num" select="0"/>
	</xsl:call-template>
	</xsl:element>
	<xsl:call-template name="split">
	<xsl:with-param name="after" select="substring($after,2)"/>
	<xsl:with-param name="num" select="0"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'\right') and $num = 1 and starts-with($tag,'fence')">
	<xsl:value-of select="$before"/>
	<xsl:element name="{substring-before($tag,'_')}">
	<xsl:if test="substring-after($tag,'_')='('">
	<xsl:attribute name="left">round</xsl:attribute>
	</xsl:if>
	<xsl:if test="substring-after($tag,'_')='{'">
	<xsl:attribute name="left">curly</xsl:attribute>
	</xsl:if>
	<xsl:if test="substring-after($tag,'_')='|'">
	<xsl:attribute name="left">solid</xsl:attribute>
	</xsl:if>
	<xsl:if test="substring-after($tag,'_')='.'">
	<xsl:attribute name="left">none</xsl:attribute>
	</xsl:if>
	<xsl:if test="starts-with($after,'\right )')">
	<xsl:attribute name="right">round</xsl:attribute>
	</xsl:if>
	<xsl:if test="starts-with($after,'\right |')">
	<xsl:attribute name="right">solid</xsl:attribute>
	</xsl:if>
	<xsl:if test="starts-with($after,'\right \}')">
	<xsl:attribute name="right">curly</xsl:attribute>
	</xsl:if>
	<xsl:call-template name="split">
	<xsl:with-param name="after" select="$content"/>
	<xsl:with-param name="num" select="0"/>
	</xsl:call-template>
	</xsl:element>
	<xsl:if test="starts-with($after,'\right \')">
	<xsl:call-template name="split">
	<xsl:with-param name="after" select="substring($after,10)"/>
	<xsl:with-param name="num" select="0"/>
	</xsl:call-template>
	</xsl:if>
	<xsl:if test="not(starts-with($after,'\right \'))">
	<xsl:call-template name="split">
	<xsl:with-param name="after" select="substring($after,9)"/>
	<xsl:with-param name="num" select="0"/>
	</xsl:call-template>
	</xsl:if>
</xsl:when>
<xsl:when test="string-length($after) = 0">
	<xsl:value-of select="concat($before,$content)"/>
</xsl:when>
<xsl:when test="(starts-with($after,'\{') or starts-with($after,'\}') or starts-with($after,'\_') or starts-with($after,'\^')) and $tag = ''">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="concat($before,substring($after,2,1))"/>
	<xsl:with-param name="after" select="substring($after,3)"/>
	<xsl:with-param name="num" select="$num"/>
	<xsl:with-param name="arg" select="$arg"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'\s') and $tag = ''">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="concat($before,'$')"/>
	<xsl:with-param name="after" select="substring($after,3)"/>
	<xsl:with-param name="num" select="$num"/>
	<xsl:with-param name="arg" select="$arg"/>
	</xsl:call-template>
</xsl:when>
<xsl:when test="starts-with($after,'\b') and $tag = ''">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="concat($before,'\')"/>
	<xsl:with-param name="after" select="substring($after,3)"/>
	<xsl:with-param name="num" select="$num"/>
	<xsl:with-param name="arg" select="$arg"/>
	</xsl:call-template>
</xsl:when>
<xsl:otherwise>
	<xsl:if test="$tag = ''">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="concat($before, substring($after,1,1))"/>
	<xsl:with-param name="after" select="substring($after,2)"/>
	<xsl:with-param name="num" select="$num"/>
	<xsl:with-param name="arg" select="$arg"/>
	</xsl:call-template>
	</xsl:if>
	<xsl:if test="$tag != ''">
	<xsl:call-template name="split">
	<xsl:with-param name="before" select="$before"/>
	<xsl:with-param name="content" select="concat($content, substring($after,1,1))"/>
	<xsl:with-param name="after" select="substring($after,2)"/>
	<xsl:with-param name="num" select="$num"/>
	<xsl:with-param name="tag" select="$tag"/>
	<xsl:with-param name="arg" select="$arg"/>
	</xsl:call-template>
	</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:template>

<xsl:template name="vector">
<xsl:param name="content"/>
<xsl:param name="tag"/>
	<xsl:element name="{$tag}">
	<xsl:call-template name="split">
	<xsl:with-param name="after" select="substring-before($content,'$')"/>
	<xsl:with-param name="num" select="0"/>
	</xsl:call-template>
	</xsl:element>
	<xsl:if test="string-length(substring-after($content,'$')) > 0">
	<xsl:call-template name="vector">
	<xsl:with-param name="content" select="substring-after($content,'$')"/>
	<xsl:with-param name="tag" select="$tag"/>
	</xsl:call-template>
	</xsl:if>
</xsl:template>
<xsl:template match="*|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/> 
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

<!-- 
	XSLT style sheet for converting LaTeX-like notations to XML MAIDEN 2.1. 
	Designed by George Chavchanidze as a part of XML MAIDEN project http://xml-maiden.com
	Last modified on 15:27 05/05/2006 (incomplete experimental version)
-->