Accept attributes in inline image syntax
[multimarkdown] / MultiMarkdownXSLTMathML / tables.xsl
1 <?xml version='1.0' encoding="UTF-8"?>\r
2 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"\r
3                 xmlns:m="http://www.w3.org/1998/Math/MathML"\r
4                 version='1.0'>\r
5                 \r
6 <!-- ====================================================================== -->\r
7 <!-- $Id: tables.xsl 149 2006-09-12 21:23:53Z fletcher $\r
8      This file is part of the XSLT MathML Library distribution.\r
9      See ./README or http://www.raleigh.ru/MathML/mmltex for\r
10      copyright and other information\r
11      Modified by Fletcher T. Penney for MultiMarkdown Version 2.0.a             -->\r
12 <!-- ====================================================================== -->\r
13 \r
14 <xsl:template match="m:mtd[@columnspan]">\r
15         <xsl:text>\multicolumn{</xsl:text>\r
16         <xsl:value-of select="@columnspan"/>\r
17         <xsl:text>}{c}{</xsl:text>\r
18         <xsl:apply-templates/>\r
19         <xsl:text>}</xsl:text>\r
20         <xsl:if test="count(following-sibling::*)>0">\r
21                 <xsl:text>&amp; </xsl:text>\r
22         </xsl:if>\r
23 </xsl:template>\r
24 \r
25 \r
26 <xsl:template match="m:mtd">\r
27         <xsl:if test="@columnalign='right' or @columnalign='center'">\r
28                 <xsl:text>\hfill </xsl:text>\r
29         </xsl:if>\r
30         <xsl:apply-templates/>\r
31         <xsl:if test="@columnalign='left' or @columnalign='center'">\r
32                 <xsl:text>\hfill </xsl:text>\r
33         </xsl:if>\r
34         <xsl:if test="count(following-sibling::*)>0">\r
35 <!--    this test valid for Sablotron, another form - test="not(position()=last())".\r
36         Also for m:mtd[@columnspan] and m:mtr  -->\r
37                 <xsl:text>&amp; </xsl:text>\r
38         </xsl:if>\r
39 </xsl:template>\r
40 \r
41 <xsl:template match="m:mtr">\r
42         <xsl:apply-templates/>\r
43         <xsl:if test="count(following-sibling::*)>0">\r
44                 <xsl:text>\\ </xsl:text>\r
45         </xsl:if>\r
46 </xsl:template>\r
47 \r
48 <xsl:template match="m:mtable">\r
49         <xsl:text>\begin{array}{</xsl:text>\r
50         <xsl:if test="@frame='solid'">\r
51                 <xsl:text>|</xsl:text>\r
52         </xsl:if>\r
53         <xsl:variable name="numbercols" select="count(./m:mtr[1]/m:mtd[not(@columnspan)])+sum(./m:mtr[1]/m:mtd/@columnspan)"/>\r
54         <xsl:choose>\r
55                 <xsl:when test="@columnalign">\r
56                         <xsl:variable name="colalign">\r
57                                 <xsl:call-template name="colalign">\r
58                                         <xsl:with-param name="colalign" select="@columnalign"/>\r
59                                 </xsl:call-template>\r
60                         </xsl:variable>\r
61                         <xsl:choose>\r
62                                 <xsl:when test="string-length($colalign) > $numbercols">\r
63                                         <xsl:value-of select="substring($colalign,1,$numbercols)"/>\r
64                                 </xsl:when>\r
65                                 <xsl:when test="string-length($colalign) &lt; $numbercols">\r
66                                         <xsl:value-of select="$colalign"/>\r
67                                         <xsl:call-template name="generate-string">\r
68                                                 <xsl:with-param name="text" select="substring($colalign,string-length($colalign))"/>\r
69                                                 <xsl:with-param name="count" select="$numbercols - string-length($colalign)"/>\r
70                                         </xsl:call-template>\r
71                                 </xsl:when>\r
72                                 <xsl:otherwise>\r
73                                         <xsl:value-of select="$colalign"/>\r
74                                 </xsl:otherwise>\r
75                         </xsl:choose>\r
76                 </xsl:when>\r
77                 <xsl:otherwise>\r
78                         <xsl:call-template name="generate-string">\r
79                                 <xsl:with-param name="text" select="'c'"/>\r
80                                 <xsl:with-param name="count" select="$numbercols"/>\r
81                         </xsl:call-template>\r
82                 </xsl:otherwise>\r
83         </xsl:choose>\r
84         <xsl:if test="@frame='solid'">\r
85                 <xsl:text>|</xsl:text>\r
86         </xsl:if>\r
87         <xsl:text>}</xsl:text>\r
88         <xsl:if test="@frame='solid'">\r
89                 <xsl:text>\hline </xsl:text>\r
90         </xsl:if>\r
91         <xsl:apply-templates/>\r
92         <xsl:if test="@frame='solid'">\r
93                 <xsl:text>\\ \hline</xsl:text>\r
94         </xsl:if>\r
95         <xsl:text>\end{array}</xsl:text>\r
96 </xsl:template>\r
97 \r
98 <xsl:template name="colalign">\r
99         <xsl:param name="colalign"/>\r
100         <xsl:choose>\r
101                 <xsl:when test="contains($colalign,' ')">\r
102                         <xsl:value-of select="substring($colalign,1,1)"/>\r
103                         <xsl:call-template name="colalign">\r
104                                 <xsl:with-param name="colalign" select="substring-after($colalign,' ')"/>\r
105                         </xsl:call-template>\r
106                 </xsl:when>\r
107                 <xsl:otherwise>\r
108                         <xsl:value-of select="substring($colalign,1,1)"/>\r
109                 </xsl:otherwise>\r
110         </xsl:choose>\r
111 </xsl:template>\r
112 \r
113 <xsl:template name="generate-string">\r
114 <!-- template from XSLT Standard Library v1.1 -->\r
115     <xsl:param name="text"/>\r
116     <xsl:param name="count"/>\r
117 \r
118     <xsl:choose>\r
119       <xsl:when test="string-length($text) = 0 or $count &lt;= 0"/>\r
120 \r
121       <xsl:otherwise>\r
122         <xsl:value-of select="$text"/>\r
123         <xsl:call-template name="generate-string">\r
124           <xsl:with-param name="text" select="$text"/>\r
125           <xsl:with-param name="count" select="$count - 1"/>\r
126         </xsl:call-template>\r
127       </xsl:otherwise>\r
128     </xsl:choose>\r
129 </xsl:template>\r
130 \r
131 </xsl:stylesheet>