--- /dev/null
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:m="http://www.w3.org/1998/Math/MathML"
+ xmlns:xlink="http://www.w3.org/1999/xlink">
+
+<xsl:key name="sequent" use="m:mtr/m:mtd/m:mrow/m:mtext/text()" match="m:mtable[starts-with(m:mtr/m:mtd/m:mrow/m:mtext/text(),'Sequent (')]"/>
+
+<xsl:template match="/">
+ <xsl:apply-templates select="*"/>
+</xsl:template>
+
+<xsl:template match="m:mi">
+ <xsl:param name="sequentno" select="'/..'"/>
+ <xsl:choose>
+ <xsl:when test="contains(.,'%')">
+ <xsl:variable name="var" select="."/>
+ <m:maction actiontype="toggle">
+ <m:mi mathcolor="green"><xsl:value-of select="."/></m:mi>
+ <m:mrow>
+ <m:mi mathcolor="green"><xsl:value-of select="$var"/>: </m:mi>
+ <xsl:call-template name="look_for_decl">
+ <xsl:with-param name="csequent" select="$sequentno"/>
+ <xsl:with-param name="var" select="$var"/>
+ </xsl:call-template>
+ </m:mrow>
+ </m:maction>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:copy>
+ <xsl:apply-templates select="@*|node()"/>
+ </xsl:copy>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="m:mtable[starts-with(m:mtr/m:mtd/m:mrow/m:mtext/text(),'Sequent')]">
+ <xsl:copy>
+ <xsl:variable name="text" select="m:mtr/m:mtd/m:mrow/m:mtext/text()"/>
+ <xsl:variable name="tmp1" select="substring-after($text,'Sequent (')"/>
+ <xsl:variable name="tmp2" select="substring-before($tmp1,')')"/>
+ <xsl:apply-templates select="*|@*|text()">
+ <xsl:with-param name="sequentno" select="$tmp2"/>
+ </xsl:apply-templates>
+ </xsl:copy>
+</xsl:template>
+
+<xsl:template match="*|@*|text()">
+ <xsl:param name="sequentno" select="'/..'"/>
+ <xsl:copy>
+ <xsl:apply-templates select="*|@*|text()">
+ <xsl:with-param name="sequentno" select="$sequentno"/>
+ </xsl:apply-templates>
+ </xsl:copy>
+</xsl:template>
+
+<xsl:template name="look_for_decl">
+ <xsl:param name="csequent" select="/.."/>
+ <xsl:param name="var" select="''"/>
+ <xsl:param name="result" select="0"/>
+ <xsl:choose>
+ <xsl:when test="$csequent=''">
+ <m:mi>
+ ERROR
+ </m:mi>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:variable name="sect_table" select="key('sequent',concat('Sequent (',$csequent,')'))"/>
+ <xsl:variable name="check_res" select="$sect_table/m:mtr/m:mtable/m:mtr/m:mtd/m:mrow/m:mo[text()=$var]/following-sibling::*[2]"/>
+ <xsl:choose>
+ <xsl:when test="not ($check_res)">
+ <xsl:variable name="new_sequent">
+ <xsl:call-template name="truncate">
+ <xsl:with-param name="tail" select="$csequent"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:call-template name="look_for_decl">
+ <xsl:with-param name="csequent" select="$new_sequent"/>
+ <xsl:with-param name="var" select="$var"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:copy-of select="$check_res"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name="truncate">
+ <xsl:param name="tail" select="''"/>
+ <xsl:param name="head" select="''"/>
+ <xsl:choose>
+ <xsl:when test="substring-before($tail,' ')=''">
+ <xsl:value-of select="$head"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:variable name="head1">
+ <xsl:if test="$head !=''">
+ <xsl:value-of select="concat($head,' ')"/>
+ </xsl:if>
+ </xsl:variable>
+ <xsl:call-template name="truncate">
+ <xsl:with-param name="tail" select="substring-after($tail,' ')"/>
+ <xsl:with-param name="head" select="concat($head1,substring-before($tail,' '))"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+</xsl:stylesheet>