Accept attributes in inline image syntax
[multimarkdown] / MultiMarkdownXSLTMathML / glayout.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: glayout.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 <!-- 3.3.2 mfrac -->\r
15 <xsl:template match="m:mfrac">\r
16         <xsl:choose>\r
17                 <xsl:when test="@linethickness">\r
18                         <xsl:text>\genfrac{}{}{</xsl:text>\r
19                         <xsl:choose>\r
20                                 <xsl:when test="number(@linethickness)">\r
21                                         <xsl:value-of select="@linethickness div 10"/>\r
22                                         <xsl:text>ex</xsl:text>\r
23                                 </xsl:when>\r
24                                 <xsl:when test="@linethickness='0'">\r
25                                         <xsl:text>0ex</xsl:text>\r
26                                 </xsl:when>\r
27                                 <xsl:when test="@linethickness='thin'">\r
28                                         <xsl:text>.05ex</xsl:text>\r
29                                 </xsl:when>\r
30                                 <xsl:when test="@linethickness='medium'"/>\r
31                                 <xsl:when test="@linethickness='thick'">\r
32                                         <xsl:text>.2ex</xsl:text>\r
33                                 </xsl:when>\r
34                                 <xsl:otherwise>\r
35                                         <xsl:value-of select="@linethickness"/>\r
36                                 </xsl:otherwise>\r
37                         </xsl:choose>\r
38                         <xsl:text>}{}{</xsl:text>\r
39                 </xsl:when>\r
40                 <xsl:otherwise>\r
41                         <xsl:text>\frac{</xsl:text>\r
42                 </xsl:otherwise>\r
43         </xsl:choose>\r
44         <xsl:if test="@numalign='right'">\r
45                 <xsl:text>\hfill </xsl:text>\r
46         </xsl:if>\r
47         <xsl:apply-templates select="./*[1]"/>\r
48         <xsl:if test="@numalign='left'">\r
49                 <xsl:text>\hfill </xsl:text>\r
50         </xsl:if>\r
51         <xsl:text>}{</xsl:text> \r
52         <xsl:if test="@denomalign='right'">\r
53                 <xsl:text>\hfill </xsl:text>\r
54         </xsl:if>\r
55         <xsl:apply-templates select="./*[2]"/>\r
56                 <xsl:if test="@denomalign='left'">\r
57                 <xsl:text>\hfill </xsl:text>\r
58         </xsl:if>\r
59         <xsl:text>}</xsl:text>\r
60 </xsl:template>\r
61 \r
62 <xsl:template match="m:mfrac[@bevelled='true']">\r
63         <xsl:text>\raisebox{1ex}{$</xsl:text>\r
64         <xsl:apply-templates select="./*[1]"/>\r
65         <xsl:text>$}\!\left/ \!\raisebox{-1ex}{$</xsl:text>\r
66         <xsl:apply-templates select="./*[2]"/>\r
67         <xsl:text>$}\right.</xsl:text>\r
68 </xsl:template>\r
69 \r
70 \r
71 <xsl:template match="m:mroot">\r
72         <xsl:choose>\r
73                 <xsl:when test="count(./*)=2">\r
74                         <xsl:text>\sqrt[</xsl:text>\r
75                         <xsl:apply-templates select="./*[2]"/>\r
76                         <xsl:text>]{</xsl:text> \r
77                         <xsl:apply-templates select="./*[1]"/>\r
78                         <xsl:text>}</xsl:text>  \r
79                 </xsl:when>\r
80                 <xsl:otherwise>\r
81                 <!-- number of argumnets is not 2 - code 25 -->\r
82                         <xsl:message>exception 25:</xsl:message>\r
83                         <xsl:text>\text{exception 25:}</xsl:text> \r
84                 </xsl:otherwise>\r
85         </xsl:choose>\r
86 </xsl:template>\r
87 \r
88 <xsl:template match="m:msqrt">\r
89         <xsl:text>\sqrt{</xsl:text>\r
90         <xsl:apply-templates/>\r
91         <xsl:text>}</xsl:text>\r
92 </xsl:template>\r
93 \r
94 <xsl:template match="m:mfenced">\r
95         <xsl:choose>\r
96                 <xsl:when test="@open">\r
97                         <xsl:if test="translate(@open,'{}[]()|','{{{{{{{')='{'">\r
98                                 <xsl:text>\left</xsl:text>\r
99                         </xsl:if>\r
100                         <xsl:if test="@open='{' or @open='}'">\r
101                                 <xsl:text>\</xsl:text>\r
102                         </xsl:if>\r
103                         <xsl:if test="translate(@open,'{}[]()|','{{{{{{{')!='{' and (translate(@close,'{}[]()|','{{{{{{{')='{' or not(@close))">\r
104                                 <xsl:text>\left.</xsl:text>\r
105                         </xsl:if>\r
106                         <xsl:value-of select="@open"/>\r
107                 </xsl:when>\r
108                 <xsl:otherwise><xsl:text>\left(</xsl:text></xsl:otherwise>\r
109         </xsl:choose>\r
110                         <xsl:variable name="sep">\r
111                                 <xsl:choose>\r
112                                         <xsl:when test="@separators">\r
113                                                 <xsl:value-of select="translate(@separators,' ','')"/>\r
114                                         </xsl:when>\r
115                                         <xsl:otherwise>,</xsl:otherwise>\r
116                                 </xsl:choose>\r
117                         </xsl:variable>\r
118                         <xsl:for-each select="./*">\r
119                                 <xsl:apply-templates select="."/>\r
120                                 <xsl:if test="not(position()=last())">\r
121                                         <xsl:choose>\r
122                                                 <xsl:when test="position()>string-length($sep)">\r
123                                                         <xsl:value-of select="substring($sep,string-length($sep))"/>\r
124                                                 </xsl:when>\r
125                                                 <xsl:otherwise>\r
126                                                         <xsl:value-of select="substring($sep,position(),1)"/>\r
127                                                 </xsl:otherwise>\r
128                                         </xsl:choose>\r
129                                 </xsl:if>\r
130                         </xsl:for-each>\r
131         <xsl:choose>\r
132                 <xsl:when test="@close">\r
133                         <xsl:if test="translate(@close,'{}[]()|','{{{{{{{')='{'">\r
134                                 <xsl:text>\right</xsl:text>\r
135                         </xsl:if>\r
136                         <xsl:if test="@close='{' or @close='}'">\r
137                                 <xsl:text>\</xsl:text>\r
138                         </xsl:if>\r
139                         <xsl:if test="translate(@close,'{}[]()|','{{{{{{{')!='{' and (translate(@open,'{}[]()|','{{{{{{{')='{' or not(@open))">\r
140                                 <xsl:text>\right.</xsl:text>\r
141                         </xsl:if>\r
142                         <xsl:value-of select="@close"/>\r
143                 </xsl:when>\r
144                 <xsl:otherwise><xsl:text>\right)</xsl:text></xsl:otherwise>\r
145         </xsl:choose>   \r
146 </xsl:template>\r
147 \r
148 <xsl:template match="m:mphantom">\r
149         <xsl:text>\phantom{</xsl:text>\r
150         <xsl:apply-templates/>\r
151         <xsl:text>}</xsl:text>\r
152 </xsl:template>\r
153 \r
154 <xsl:template match="m:menclose">\r
155         <xsl:choose>\r
156                 <xsl:when test="@notation = 'actuarial'">\r
157                         <xsl:text>\overline{</xsl:text>\r
158                         <xsl:apply-templates/>\r
159                         <xsl:text>\hspace{.2em}|}</xsl:text>\r
160                 </xsl:when>\r
161                 <xsl:when test="@notation = 'radical'">\r
162                         <xsl:text>\sqrt{</xsl:text>\r
163                         <xsl:apply-templates/>\r
164                         <xsl:text>}</xsl:text>\r
165                 </xsl:when>\r
166                 <xsl:otherwise>\r
167                         <xsl:text>\overline{)</xsl:text>\r
168                         <xsl:apply-templates/>\r
169                         <xsl:text>}</xsl:text>\r
170                 </xsl:otherwise>\r
171         </xsl:choose>\r
172 </xsl:template>\r
173 \r
174 <xsl:template match="m:mrow">\r
175         <xsl:apply-templates/>\r
176 </xsl:template>\r
177 \r
178 <xsl:template match="m:mstyle">\r
179         <xsl:if test="@displaystyle='true'">\r
180                 <xsl:text>{\displaystyle </xsl:text>\r
181         </xsl:if>\r
182         <xsl:if test="@scriptlevel and not(@displaystyle='true')">\r
183                 <xsl:text>{</xsl:text>\r
184                 <xsl:choose>\r
185                         <xsl:when test="@scriptlevel=0"><xsl:text>\textstyle </xsl:text></xsl:when>\r
186                         <xsl:when test="@scriptlevel=1"><xsl:text>\scriptstyle </xsl:text></xsl:when>\r
187                         <xsl:otherwise><xsl:text>\scriptscriptstyle </xsl:text></xsl:otherwise> \r
188                 </xsl:choose> \r
189         </xsl:if>       \r
190         <xsl:if test="@background">\r
191                 <xsl:text>\colorbox[rgb]{</xsl:text>\r
192                 <xsl:call-template name="color">\r
193                         <xsl:with-param name="color" select="@background"/>\r
194                 </xsl:call-template>\r
195                 <xsl:text>}{$</xsl:text>\r
196         </xsl:if>\r
197         <xsl:if test="@color[not(@mathcolor)] or @mathcolor">\r
198                 <xsl:text>\textcolor[rgb]{</xsl:text>\r
199                 <xsl:call-template name="color">\r
200                         <xsl:with-param name="color" select="@color|@mathcolor"/>\r
201                 </xsl:call-template>\r
202                 <xsl:text>}{</xsl:text>\r
203         </xsl:if>\r
204         <xsl:apply-templates/>\r
205         <xsl:if test="@color[not(@mathcolor)] or @mathcolor">\r
206                 <xsl:text>}</xsl:text>\r
207         </xsl:if>\r
208         <xsl:if test="@background">\r
209                 <xsl:text>$}</xsl:text>\r
210         </xsl:if>\r
211         <xsl:if test="@scriptlevel and not(@displaystyle='true')">\r
212                 <xsl:text>}</xsl:text>\r
213         </xsl:if>       \r
214         <xsl:if test="@displaystyle='true'">\r
215                 <xsl:text>}</xsl:text>\r
216         </xsl:if>\r
217 </xsl:template>\r
218 \r
219 <xsl:template match="m:merror">\r
220         <xsl:apply-templates/>\r
221 </xsl:template>\r
222 \r
223 </xsl:stylesheet>