1 <?xml version='1.0' encoding="UTF-8"?>
2 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3 xmlns:m="http://www.w3.org/1998/Math/MathML"
6 <!-- ====================================================================== -->
7 <!-- $id: tables.xsl, 2002/17/05 Exp $
8 This file is part of the XSLT MathML Library distribution.
9 See ./README or http://www.raleigh.ru/MathML/mmltex for
10 copyright and other information -->
11 <!-- ====================================================================== -->
13 <xsl:template match="m:mtd[@columnspan]">
14 <xsl:text>\multicolumn{</xsl:text>
15 <xsl:value-of select="@columnspan"/>
16 <xsl:text>}{c}{</xsl:text>
17 <xsl:apply-templates/>
18 <xsl:text>}</xsl:text>
19 <xsl:if test="count(following-sibling::*)>0">
20 <xsl:text>& </xsl:text>
25 <xsl:template match="m:mtd">
26 <xsl:if test="@columnalign='right' or @columnalign='center'">
27 <xsl:text>\hfill </xsl:text>
29 <xsl:apply-templates/>
30 <xsl:if test="@columnalign='left' or @columnalign='center'">
31 <xsl:text>\hfill </xsl:text>
33 <xsl:if test="count(following-sibling::*)>0">
34 <!-- this test valid for Sablotron, another form - test="not(position()=last())".
35 Also for m:mtd[@columnspan] and m:mtr -->
36 <xsl:text>& </xsl:text>
40 <xsl:template match="m:mtr">
41 <xsl:apply-templates/>
42 <xsl:if test="count(following-sibling::*)>0">
43 <xsl:text>\\ </xsl:text>
47 <xsl:template match="m:mtable">
48 <xsl:text>\begin{array}{</xsl:text>
49 <xsl:if test="@frame='solid'">
50 <xsl:text>|</xsl:text>
52 <xsl:variable name="numbercols" select="count(./m:mtr[1]/m:mtd[not(@columnspan)])+sum(./m:mtr[1]/m:mtd/@columnspan)"/>
54 <xsl:when test="@columnalign">
55 <xsl:variable name="colalign">
56 <xsl:call-template name="colalign">
57 <xsl:with-param name="colalign" select="@columnalign"/>
61 <xsl:when test="string-length($colalign) > $numbercols">
62 <xsl:value-of select="substring($colalign,1,$numbercols)"/>
64 <xsl:when test="string-length($colalign) < $numbercols">
65 <xsl:value-of select="$colalign"/>
66 <xsl:call-template name="generate-string">
67 <xsl:with-param name="text" select="substring($colalign,string-length($colalign))"/>
68 <xsl:with-param name="count" select="$numbercols - string-length($colalign)"/>
72 <xsl:value-of select="$colalign"/>
77 <xsl:call-template name="generate-string">
78 <xsl:with-param name="text" select="'c'"/>
79 <xsl:with-param name="count" select="$numbercols"/>
83 <xsl:if test="@frame='solid'">
84 <xsl:text>|</xsl:text>
86 <xsl:text>}</xsl:text>
87 <xsl:if test="@frame='solid'">
88 <xsl:text>\hline </xsl:text>
90 <xsl:apply-templates/>
91 <xsl:if test="@frame='solid'">
92 <xsl:text>\\ \hline</xsl:text>
94 <xsl:text>\end{array}</xsl:text>
97 <xsl:template name="colalign">
98 <xsl:param name="colalign"/>
100 <xsl:when test="contains($colalign,' ')">
101 <xsl:value-of select="substring($colalign,1,1)"/>
102 <xsl:call-template name="colalign">
103 <xsl:with-param name="colalign" select="substring-after($colalign,' ')"/>
107 <xsl:value-of select="substring($colalign,1,1)"/>
112 <xsl:template name="generate-string">
113 <!-- template from XSLT Standard Library v1.1 -->
114 <xsl:param name="text"/>
115 <xsl:param name="count"/>
118 <xsl:when test="string-length($text) = 0 or $count <= 0"/>
121 <xsl:value-of select="$text"/>
122 <xsl:call-template name="generate-string">
123 <xsl:with-param name="text" select="$text"/>
124 <xsl:with-param name="count" select="$count - 1"/>