--- /dev/null
+<?xml version='1.0' encoding="UTF-8"?>\r
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"\r
+ xmlns:m="http://www.w3.org/1998/Math/MathML"\r
+ version='1.0'>\r
+ \r
+<!-- ====================================================================== -->\r
+<!-- $id: tables.xsl, 2002/17/05 Exp $\r
+ This file is part of the XSLT MathML Library distribution.\r
+ See ./README or http://www.raleigh.ru/MathML/mmltex for\r
+ copyright and other information -->\r
+<!-- ====================================================================== -->\r
+\r
+<xsl:template match="m:mtd[@columnspan]">\r
+ <xsl:text>\multicolumn{</xsl:text>\r
+ <xsl:value-of select="@columnspan"/>\r
+ <xsl:text>}{c}{</xsl:text>\r
+ <xsl:apply-templates/>\r
+ <xsl:text>}</xsl:text>\r
+ <xsl:if test="count(following-sibling::*)>0">\r
+ <xsl:text>& </xsl:text>\r
+ </xsl:if>\r
+</xsl:template>\r
+\r
+\r
+<xsl:template match="m:mtd">\r
+ <xsl:if test="@columnalign='right' or @columnalign='center'">\r
+ <xsl:text>\hfill </xsl:text>\r
+ </xsl:if>\r
+ <xsl:apply-templates/>\r
+ <xsl:if test="@columnalign='left' or @columnalign='center'">\r
+ <xsl:text>\hfill </xsl:text>\r
+ </xsl:if>\r
+ <xsl:if test="count(following-sibling::*)>0">\r
+<!-- this test valid for Sablotron, another form - test="not(position()=last())".\r
+ Also for m:mtd[@columnspan] and m:mtr -->\r
+ <xsl:text>& </xsl:text>\r
+ </xsl:if>\r
+</xsl:template>\r
+\r
+<xsl:template match="m:mtr">\r
+ <xsl:apply-templates/>\r
+ <xsl:if test="count(following-sibling::*)>0">\r
+ <xsl:text>\\ </xsl:text>\r
+ </xsl:if>\r
+</xsl:template>\r
+\r
+<xsl:template match="m:mtable">\r
+ <xsl:text>\begin{array}{</xsl:text>\r
+ <xsl:if test="@frame='solid'">\r
+ <xsl:text>|</xsl:text>\r
+ </xsl:if>\r
+ <xsl:variable name="numbercols" select="count(./m:mtr[1]/m:mtd[not(@columnspan)])+sum(./m:mtr[1]/m:mtd/@columnspan)"/>\r
+ <xsl:choose>\r
+ <xsl:when test="@columnalign">\r
+ <xsl:variable name="colalign">\r
+ <xsl:call-template name="colalign">\r
+ <xsl:with-param name="colalign" select="@columnalign"/>\r
+ </xsl:call-template>\r
+ </xsl:variable>\r
+ <xsl:choose>\r
+ <xsl:when test="string-length($colalign) > $numbercols">\r
+ <xsl:value-of select="substring($colalign,1,$numbercols)"/>\r
+ </xsl:when>\r
+ <xsl:when test="string-length($colalign) < $numbercols">\r
+ <xsl:value-of select="$colalign"/>\r
+ <xsl:call-template name="generate-string">\r
+ <xsl:with-param name="text" select="substring($colalign,string-length($colalign))"/>\r
+ <xsl:with-param name="count" select="$numbercols - string-length($colalign)"/>\r
+ </xsl:call-template>\r
+ </xsl:when>\r
+ <xsl:otherwise>\r
+ <xsl:value-of select="$colalign"/>\r
+ </xsl:otherwise>\r
+ </xsl:choose>\r
+ </xsl:when>\r
+ <xsl:otherwise>\r
+ <xsl:call-template name="generate-string">\r
+ <xsl:with-param name="text" select="'c'"/>\r
+ <xsl:with-param name="count" select="$numbercols"/>\r
+ </xsl:call-template>\r
+ </xsl:otherwise>\r
+ </xsl:choose>\r
+ <xsl:if test="@frame='solid'">\r
+ <xsl:text>|</xsl:text>\r
+ </xsl:if>\r
+ <xsl:text>}</xsl:text>\r
+ <xsl:if test="@frame='solid'">\r
+ <xsl:text>\hline </xsl:text>\r
+ </xsl:if>\r
+ <xsl:apply-templates/>\r
+ <xsl:if test="@frame='solid'">\r
+ <xsl:text>\\ \hline</xsl:text>\r
+ </xsl:if>\r
+ <xsl:text>\end{array}</xsl:text>\r
+</xsl:template>\r
+\r
+<xsl:template name="colalign">\r
+ <xsl:param name="colalign"/>\r
+ <xsl:choose>\r
+ <xsl:when test="contains($colalign,' ')">\r
+ <xsl:value-of select="substring($colalign,1,1)"/>\r
+ <xsl:call-template name="colalign">\r
+ <xsl:with-param name="colalign" select="substring-after($colalign,' ')"/>\r
+ </xsl:call-template>\r
+ </xsl:when>\r
+ <xsl:otherwise>\r
+ <xsl:value-of select="substring($colalign,1,1)"/>\r
+ </xsl:otherwise>\r
+ </xsl:choose>\r
+</xsl:template>\r
+\r
+<xsl:template name="generate-string">\r
+<!-- template from XSLT Standard Library v1.1 -->\r
+ <xsl:param name="text"/>\r
+ <xsl:param name="count"/>\r
+\r
+ <xsl:choose>\r
+ <xsl:when test="string-length($text) = 0 or $count <= 0"/>\r
+\r
+ <xsl:otherwise>\r
+ <xsl:value-of select="$text"/>\r
+ <xsl:call-template name="generate-string">\r
+ <xsl:with-param name="text" select="$text"/>\r
+ <xsl:with-param name="count" select="$count - 1"/>\r
+ </xsl:call-template>\r
+ </xsl:otherwise>\r
+ </xsl:choose>\r
+</xsl:template>\r
+\r
+</xsl:stylesheet>
\ No newline at end of file