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
6 <!-- ====================================================================== -->
\r
7 <!-- $Id: scripts.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
14 <xsl:template match="m:munderover">
\r
15 <xsl:variable name="base" select="translate(./*[1],' ','')"/>
\r
16 <xsl:variable name="under" select="translate(./*[2],' ','')"/>
\r
17 <xsl:variable name="over" select="translate(./*[3],' ','')"/>
\r
19 <xsl:when test="$over='¯'"> <!-- OverBar - over bar -->
\r
20 <xsl:text>\overline{</xsl:text>
\r
21 <xsl:call-template name="munder">
\r
22 <xsl:with-param name="base" select="$base"/>
\r
23 <xsl:with-param name="under" select="$under"/>
\r
24 </xsl:call-template>
\r
25 <xsl:text>}</xsl:text>
\r
27 <xsl:when test="$over='︷'"> <!-- OverBrace - over brace -->
\r
28 <xsl:text>\overbrace{</xsl:text>
\r
29 <xsl:call-template name="munder">
\r
30 <xsl:with-param name="base" select="$base"/>
\r
31 <xsl:with-param name="under" select="$under"/>
\r
32 </xsl:call-template>
\r
33 <xsl:text>}</xsl:text>
\r
35 <xsl:when test="$over='←'"> <!--/leftarrow /gets A: =leftward arrow -->
\r
36 <xsl:text>\overleftarrow{</xsl:text>
\r
37 <xsl:call-template name="munder">
\r
38 <xsl:with-param name="base" select="$base"/>
\r
39 <xsl:with-param name="under" select="$under"/>
\r
40 </xsl:call-template>
\r
41 <xsl:text>}</xsl:text>
\r
43 <xsl:when test="$over='→'"> <!--/rightarrow /to A: =rightward arrow -->
\r
44 <xsl:text>\overrightarrow{</xsl:text>
\r
45 <xsl:call-template name="munder">
\r
46 <xsl:with-param name="base" select="$base"/>
\r
47 <xsl:with-param name="under" select="$under"/>
\r
48 </xsl:call-template>
\r
49 <xsl:text>}</xsl:text>
\r
51 <xsl:when test="$over='↔'"> <!--/leftrightarrow A: l&r arrow -->
\r
52 <xsl:text>\overleftrightarrow{</xsl:text>
\r
53 <xsl:call-template name="munder">
\r
54 <xsl:with-param name="base" select="$base"/>
\r
55 <xsl:with-param name="under" select="$under"/>
\r
56 </xsl:call-template>
\r
57 <xsl:text>}</xsl:text>
\r
59 <xsl:when test="$under='̲'"> <!-- UnderBar - combining low line -->
\r
60 <xsl:text>\underline{</xsl:text>
\r
61 <xsl:call-template name="mover">
\r
62 <xsl:with-param name="base" select="$base"/>
\r
63 <xsl:with-param name="over" select="$over"/>
\r
64 <xsl:with-param name="pos_over" select="3"/>
\r
65 </xsl:call-template>
\r
66 <xsl:text>}</xsl:text>
\r
68 <xsl:when test="$under='︸'"> <!-- UnderBrace - under brace -->
\r
69 <xsl:text>\underbrace{</xsl:text>
\r
70 <xsl:call-template name="mover">
\r
71 <xsl:with-param name="base" select="$base"/>
\r
72 <xsl:with-param name="over" select="$over"/>
\r
73 <xsl:with-param name="pos_over" select="3"/>
\r
74 </xsl:call-template>
\r
75 <xsl:text>}</xsl:text>
\r
77 <xsl:when test="$under='←'"> <!--/leftarrow /gets A: =leftward arrow -->
\r
78 <xsl:text>\underleftarrow{</xsl:text>
\r
79 <xsl:call-template name="mover">
\r
80 <xsl:with-param name="base" select="$base"/>
\r
81 <xsl:with-param name="over" select="$over"/>
\r
82 <xsl:with-param name="pos_over" select="3"/>
\r
83 </xsl:call-template>
\r
84 <xsl:text>}</xsl:text>
\r
86 <xsl:when test="$under='→'"> <!--/rightarrow /to A: =rightward arrow -->
\r
87 <xsl:text>\underrightarrow{</xsl:text>
\r
88 <xsl:call-template name="mover">
\r
89 <xsl:with-param name="base" select="$base"/>
\r
90 <xsl:with-param name="over" select="$over"/>
\r
91 <xsl:with-param name="pos_over" select="3"/>
\r
92 </xsl:call-template>
\r
93 <xsl:text>}</xsl:text>
\r
95 <xsl:when test="$under='↔'"> <!--/leftrightarrow A: l&r arrow -->
\r
96 <xsl:text>\underleftrightarrow{</xsl:text>
\r
97 <xsl:call-template name="mover">
\r
98 <xsl:with-param name="base" select="$base"/>
\r
99 <xsl:with-param name="over" select="$over"/>
\r
100 <xsl:with-param name="pos_over" select="3"/>
\r
101 </xsl:call-template>
\r
102 <xsl:text>}</xsl:text>
\r
104 <xsl:when test="translate($base,'∏∐⋂⋃⊔',
\r
105 '∑∑∑∑∑')='∑'">
\r
106 <!-- if $base is operator, such as
\r
107 ∑ /sum L: summation operator
\r
108 ∏ /prod L: product operator
\r
109 ∐ /coprod L: coproduct operator
\r
112 ⊔ /bigsqcup
\r
114 <xsl:apply-templates select="./*[1]"/>
\r
115 <xsl:text>_{</xsl:text>
\r
116 <xsl:apply-templates select="./*[2]"/>
\r
117 <xsl:text>}^{</xsl:text>
\r
118 <xsl:apply-templates select="./*[3]"/>
\r
119 <xsl:text>}</xsl:text>
\r
122 <xsl:text>\underset{</xsl:text>
\r
123 <xsl:apply-templates select="./*[2]"/>
\r
124 <xsl:text>}{\overset{</xsl:text>
\r
125 <xsl:apply-templates select="./*[3]"/>
\r
126 <xsl:text>}{</xsl:text>
\r
127 <xsl:apply-templates select="./*[1]"/>
\r
128 <xsl:text>}}</xsl:text>
\r
133 <xsl:template match="m:mover">
\r
134 <xsl:call-template name="mover">
\r
135 <xsl:with-param name="base" select="translate(./*[1],' ','')"/>
\r
136 <xsl:with-param name="over" select="translate(./*[2],' ','')"/>
\r
137 </xsl:call-template>
\r
140 <xsl:template match="m:munder">
\r
141 <xsl:call-template name="munder">
\r
142 <xsl:with-param name="base" select="translate(./*[1],' ','')"/>
\r
143 <xsl:with-param name="under" select="translate(./*[2],' ','')"/>
\r
144 </xsl:call-template>
\r
147 <xsl:template name="mover">
\r
148 <xsl:param name="base"/>
\r
149 <xsl:param name="over"/>
\r
150 <xsl:param name="pos_over" select="2"/>
\r
152 <xsl:when test="$over='¯'"> <!-- OverBar - over bar -->
\r
153 <xsl:text>\overline{</xsl:text>
\r
154 <xsl:apply-templates select="./*[1]"/>
\r
155 <xsl:text>}</xsl:text>
\r
157 <xsl:when test="$over='︷'"> <!-- OverBrace - over brace -->
\r
158 <xsl:text>\overbrace{</xsl:text>
\r
159 <xsl:apply-templates select="./*[1]"/>
\r
160 <xsl:text>}</xsl:text>
\r
162 <xsl:when test="$over='←'"> <!--/leftarrow /gets A: =leftward arrow -->
\r
163 <xsl:text>\overleftarrow{</xsl:text>
\r
164 <xsl:apply-templates select="./*[1]"/>
\r
165 <xsl:text>}</xsl:text>
\r
167 <xsl:when test="$over='→'"> <!--/rightarrow /to A: =rightward arrow -->
\r
168 <xsl:text>\overrightarrow{</xsl:text>
\r
169 <xsl:apply-templates select="./*[1]"/>
\r
170 <xsl:text>}</xsl:text>
\r
172 <xsl:when test="$over='↔'"> <!--/leftrightarrow A: l&r arrow -->
\r
173 <xsl:text>\overleftrightarrow{</xsl:text>
\r
174 <xsl:apply-templates select="./*[1]"/>
\r
175 <xsl:text>}</xsl:text>
\r
177 <xsl:when test="$over='˜'"> <!-- small tilde -->
\r
178 <xsl:text>\tilde{</xsl:text>
\r
179 <xsl:apply-templates select="./*[1]"/>
\r
180 <xsl:text>}</xsl:text>
\r
182 <xsl:when test="$over='✓'"> <!-- /checkmark =tick, check mark -->
\r
183 <xsl:text>\check{</xsl:text>
\r
184 <xsl:apply-templates select="./*[1]"/>
\r
185 <xsl:text>}</xsl:text>
\r
187 <xsl:when test="$over='˙'"> <!-- dot above -->
\r
188 <xsl:text>\dot{</xsl:text>
\r
189 <xsl:apply-templates select="./*[1]"/>
\r
190 <xsl:text>}</xsl:text>
\r
192 <xsl:when test="$over='¨'"> <!-- DoubleDot - dieresis or umlaut mark -->
\r
193 <xsl:text>\ddot{</xsl:text>
\r
194 <xsl:apply-templates select="./*[1]"/>
\r
195 <xsl:text>}</xsl:text>
\r
197 <xsl:when test="$over='̂' or $over='^'"> <!-- Hat or circ - circumflex accent -->
\r
199 <xsl:when test="@accent='true'">
\r
200 <xsl:text>\widehat{</xsl:text>
\r
203 <xsl:text>\hat{</xsl:text>
\r
206 <xsl:apply-templates select="./*[1]"/><xsl:text>}</xsl:text>
\r
208 <xsl:when test="translate($base,'∏∐⋂⋃⊔',
\r
209 '∑∑∑∑∑')='∑'">
\r
210 <!-- if $base is operator, such as
\r
211 ∑ /sum L: summation operator
\r
212 ∏ /prod L: product operator
\r
213 ∐ /coprod L: coproduct operator
\r
216 ⊔ /bigsqcup
\r
218 <xsl:apply-templates select="./*[1]"/>
\r
219 <xsl:text>^{</xsl:text>
\r
220 <xsl:apply-templates select="./*[$pos_over]"/>
\r
221 <xsl:text>}</xsl:text>
\r
224 <xsl:text>\stackrel{</xsl:text>
\r
225 <xsl:apply-templates select="./*[$pos_over]"/>
\r
226 <xsl:text>}{</xsl:text>
\r
227 <xsl:apply-templates select="./*[1]"/>
\r
228 <xsl:text>}</xsl:text>
\r
230 <xsl:text>\overset{</xsl:text>
\r
231 <xsl:apply-templates select="./*[$pos_over]"/>
\r
232 <xsl:text>}{</xsl:text>
\r
233 <xsl:apply-templates select="./*[1]"/>
\r
234 <xsl:text>}</xsl:text>-->
\r
239 <xsl:template name="munder">
\r
240 <xsl:param name="base"/>
\r
241 <xsl:param name="under"/>
\r
243 <xsl:when test="$under='̲'"> <!-- UnderBar - combining low line -->
\r
244 <xsl:text>\underline{</xsl:text>
\r
245 <xsl:apply-templates select="./*[1]"/>
\r
246 <xsl:text>}</xsl:text>
\r
248 <xsl:when test="$under='︸'"> <!-- UnderBrace - under brace -->
\r
249 <xsl:text>\underbrace{</xsl:text>
\r
250 <xsl:apply-templates select="./*[1]"/>
\r
251 <xsl:text>}</xsl:text>
\r
253 <xsl:when test="$under='←'"> <!--/leftarrow /gets A: =leftward arrow -->
\r
254 <xsl:text>\underleftarrow{</xsl:text>
\r
255 <xsl:apply-templates select="./*[1]"/>
\r
256 <xsl:text>}</xsl:text>
\r
258 <xsl:when test="$under='→'"> <!--/rightarrow /to A: =rightward arrow -->
\r
259 <xsl:text>\underrightarrow{</xsl:text>
\r
260 <xsl:apply-templates select="./*[1]"/>
\r
261 <xsl:text>}</xsl:text>
\r
263 <xsl:when test="$under='↔'"> <!--/leftrightarrow A: l&r arrow -->
\r
264 <xsl:text>\underleftrightarrow{</xsl:text>
\r
265 <xsl:apply-templates select="./*[1]"/>
\r
266 <xsl:text>}</xsl:text>
\r
268 <xsl:when test="translate($base,'∏∐⋂⋃⊔',
\r
269 '∑∑∑∑∑')='∑'">
\r
270 <!-- if $base is operator, such as
\r
271 ∑ /sum L: summation operator
\r
272 ∏ /prod L: product operator
\r
273 ∐ /coprod L: coproduct operator
\r
276 ⊔ /bigsqcup
\r
278 <xsl:apply-templates select="./*[1]"/>
\r
279 <xsl:text>_{</xsl:text>
\r
280 <xsl:apply-templates select="./*[2]"/>
\r
281 <xsl:text>}</xsl:text>
\r
284 <xsl:text>\underset{</xsl:text> <!-- Required AmsMath package -->
\r
285 <xsl:apply-templates select="./*[2]"/>
\r
286 <xsl:text>}{</xsl:text>
\r
287 <xsl:apply-templates select="./*[1]"/>
\r
288 <xsl:text>}</xsl:text>
\r
293 <xsl:template match="m:msubsup">
\r
294 <xsl:text>{</xsl:text>
\r
295 <xsl:apply-templates select="./*[1]"/>
\r
296 <xsl:text>}_{</xsl:text>
\r
297 <xsl:apply-templates select="./*[2]"/>
\r
298 <xsl:text>}^{</xsl:text>
\r
299 <xsl:apply-templates select="./*[3]"/>
\r
300 <xsl:text>}</xsl:text>
\r
303 <xsl:template match="m:msup">
\r
304 <xsl:text>{</xsl:text>
\r
305 <xsl:apply-templates select="./*[1]"/>
\r
306 <xsl:text>}^{</xsl:text>
\r
307 <xsl:apply-templates select="./*[2]"/>
\r
308 <xsl:text>}</xsl:text>
\r
311 <xsl:template match="m:msub">
\r
312 <xsl:text>{</xsl:text>
\r
313 <xsl:apply-templates select="./*[1]"/>
\r
314 <xsl:text>}_{</xsl:text>
\r
315 <xsl:apply-templates select="./*[2]"/>
\r
316 <xsl:text>}</xsl:text>
\r
319 <xsl:template match="m:mmultiscripts" mode="mprescripts">
\r
320 <xsl:for-each select="m:mprescripts/following-sibling::*">
\r
321 <xsl:if test="position() mod 2 and local-name(.)!='none'">
\r
322 <xsl:text>{}_{</xsl:text>
\r
323 <xsl:apply-templates select="."/>
\r
324 <xsl:text>}</xsl:text>
\r
326 <xsl:if test="not(position() mod 2) and local-name(.)!='none'">
\r
327 <xsl:text>{}^{</xsl:text>
\r
328 <xsl:apply-templates select="."/>
\r
329 <xsl:text>}</xsl:text>
\r
332 <xsl:apply-templates select="./*[1]"/>
\r
333 <xsl:for-each select="m:mprescripts/preceding-sibling::*[position()!=last()]">
\r
334 <xsl:if test="position()>2 and local-name(.)!='none'">
\r
335 <xsl:text>{}</xsl:text>
\r
337 <xsl:if test="position() mod 2 and local-name(.)!='none'">
\r
338 <xsl:text>_{</xsl:text>
\r
339 <xsl:apply-templates select="."/>
\r
340 <xsl:text>}</xsl:text>
\r
342 <xsl:if test="not(position() mod 2) and local-name(.)!='none'">
\r
343 <xsl:text>^{</xsl:text>
\r
344 <xsl:apply-templates select="."/>
\r
345 <xsl:text>}</xsl:text>
\r
350 <xsl:template match="m:mmultiscripts">
\r
352 <xsl:when test="m:mprescripts">
\r
353 <xsl:apply-templates select="." mode="mprescripts"/>
\r
356 <xsl:apply-templates select="./*[1]"/>
\r
357 <xsl:for-each select="*[position()>1]">
\r
358 <xsl:if test="position()>2 and local-name(.)!='none'">
\r
359 <xsl:text>{}</xsl:text>
\r
361 <xsl:if test="position() mod 2 and local-name(.)!='none'">
\r
362 <xsl:text>_{</xsl:text>
\r
363 <xsl:apply-templates select="."/>
\r
364 <xsl:text>}</xsl:text>
\r
366 <xsl:if test="not(position() mod 2) and local-name(.)!='none'">
\r
367 <xsl:text>^{</xsl:text>
\r
368 <xsl:apply-templates select="."/>
\r
369 <xsl:text>}</xsl:text>
\r