]> matita.cs.unibo.it Git - helm.git/blob - helm/DEVEL/mathml_editor/xsl/tml-mmlp.xsl
* the stylesheet does not generate the tml namespace anymore
[helm.git] / helm / DEVEL / mathml_editor / xsl / tml-mmlp.xsl
1 <?xml version="1.0"?>
2 <xsl:stylesheet
3      xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
4      xmlns:tml="http://helm.cs.unibo.it/2002/TML"
5      xmlns:m="http://www.w3.org/1998/Math/MathML"
6      exclude-result-prefixes="tml"
7      version="1.0">
8
9   <xsl:output indent="yes"/>
10
11   <xsl:param name="id" select="/.."/>
12
13   <xsl:template match="/">
14     <xsl:choose>
15       <xsl:when test="$id">
16         <xsl:apply-templates select="descendant::*[@id=$id]"/>
17       </xsl:when>
18       <xsl:otherwise>
19         <xsl:apply-templates/>
20       </xsl:otherwise>
21     </xsl:choose>
22   </xsl:template>
23
24   <xsl:template match="tml:math">
25     <m:math>
26       <xsl:if test="@id">
27         <xsl:attribute name="xref">
28           <xsl:value-of select="@id"/>
29         </xsl:attribute>
30       </xsl:if>
31        <xsl:if test="@display='1'">
32         <xsl:attribute name="display">block</xsl:attribute>
33       </xsl:if>
34       <xsl:attribute name="display">block</xsl:attribute>
35       <xsl:apply-templates select="*"/>
36     </m:math>
37   </xsl:template>
38
39   <xsl:template match="tml:i">
40     <m:mi>
41       <xsl:if test="@id">
42         <xsl:attribute name="xref">
43           <xsl:value-of select="@id"/>
44         </xsl:attribute>
45       </xsl:if>
46       <xsl:value-of select="@val"/>
47     </m:mi>
48   </xsl:template>
49
50   <xsl:template match="tml:n">
51     <m:mn>
52       <xsl:if test="@id">
53         <xsl:attribute name="xref">
54           <xsl:value-of select="@id"/>
55         </xsl:attribute>
56       </xsl:if>
57       <xsl:value-of select="@val"/>
58     </m:mn>
59   </xsl:template>
60
61   <xsl:template match="tml:o">
62     <m:mo>
63       <xsl:if test="@id">
64         <xsl:attribute name="xref">
65           <xsl:value-of select="@id"/>
66         </xsl:attribute>
67       </xsl:if>
68       <xsl:value-of select="@val"/>
69     </m:mo>
70   </xsl:template>
71
72   <xsl:template name="cursor">
73     <xsl:choose>
74       <xsl:when test="substring(@val,1,1)='\'">
75         <m:mrow>
76           <xsl:if test="@id">
77             <xsl:attribute name="xref">
78               <xsl:value-of select="@id"/>
79             </xsl:attribute>
80           </xsl:if>
81           <m:mo stretchy="false">&#x2329;</m:mo>
82           <m:mtext mathcolor="blue"><xsl:value-of select="@val"/></m:mtext>
83           <m:mo stretchy="false">&#x232a;</m:mo>
84         </m:mrow>
85       </xsl:when>
86       <xsl:otherwise>
87         <m:mtext mathcolor="blue">
88          <xsl:if test="@id">
89            <xsl:attribute name="xref">
90              <xsl:value-of select="@id"/>
91            </xsl:attribute>
92          </xsl:if>I</m:mtext>
93       </xsl:otherwise>
94     </xsl:choose>
95   </xsl:template>
96
97   <xsl:template match="tml:cursor[@visible='1']">
98     <xsl:param name="annotation" select="/.."/>
99     <xsl:choose>
100       <xsl:when test="$annotation">
101         <m:msub>
102           <xsl:call-template name="cursor"/>
103           <m:mtext>
104             <xsl:value-of select="$annotation"/>
105           </m:mtext>
106         </m:msub>
107       </xsl:when>
108       <xsl:otherwise>
109         <xsl:call-template name="cursor"/>
110       </xsl:otherwise>
111     </xsl:choose>
112   </xsl:template>
113
114   <xsl:template match="tml:cursor[not(@visible) or @visible='0']">
115   </xsl:template>
116
117   <xsl:template match="tml:sb[@under='1'][*[1]/tml:sp[@over='1']]">
118     <m:munderover>
119       <xsl:if test="@id">
120         <xsl:attribute name="xref">
121           <xsl:value-of select="@id"/>
122         </xsl:attribute>
123       </xsl:if>
124       <xsl:apply-templates select="*[1]/*[1]"/>
125       <xsl:apply-templates select="*[2]"/>
126       <xsl:apply-templates select="*[1]/*[2]"/>
127     </m:munderover>
128   </xsl:template>
129
130   <xsl:template match="tml:sb[@under='1']">
131     <m:munder>
132       <xsl:if test="@id">
133         <xsl:attribute name="xref">
134           <xsl:value-of select="@id"/>
135         </xsl:attribute>
136       </xsl:if>
137       <xsl:apply-templates select="*[1]"/>
138       <xsl:apply-templates select="*[2]"/>
139     </m:munder>
140   </xsl:template>
141
142   <xsl:template match="tml:sb[*[1][self::tml:sp[not(@over) or @over='0']]]">
143     <m:msubsup>
144       <xsl:if test="@id">
145         <xsl:attribute name="xref">
146           <xsl:value-of select="@id"/>
147         </xsl:attribute>
148       </xsl:if>
149       <xsl:apply-templates select="*[1]/*[1]"/>
150       <xsl:apply-templates select="*[2]"/>
151       <xsl:apply-templates select="*[1]/*[2]"/>
152     </m:msubsup>
153   </xsl:template>
154
155   <xsl:template match="tml:sb">
156     <m:msub>
157       <xsl:if test="@id">
158         <xsl:attribute name="xref">
159           <xsl:value-of select="@id"/>
160         </xsl:attribute>
161       </xsl:if>
162       <xsl:apply-templates select="*[1]"/>
163       <xsl:apply-templates select="*[2]"/>
164     </m:msub>
165   </xsl:template>
166
167   <xsl:template match="tml:sp[@over='1'][*[1]/tml:sb[@under='1']]">
168     <m:munderover>
169       <xsl:if test="@id">
170         <xsl:attribute name="xref">
171           <xsl:value-of select="@id"/>
172         </xsl:attribute>
173       </xsl:if>
174       <xsl:apply-templates select="*[1]/*[1]"/>
175       <xsl:apply-templates select="*[1]/*[2]"/>
176       <xsl:apply-templates select="*[2]"/>
177     </m:munderover>
178   </xsl:template>
179
180   <xsl:template match="tml:sp[@over='1']">
181     <m:mover>
182       <xsl:if test="@id">
183         <xsl:attribute name="xref">
184           <xsl:value-of select="@id"/>
185         </xsl:attribute>
186       </xsl:if>
187       <xsl:apply-templates select="*[1]"/>
188       <xsl:apply-templates select="*[2]"/>
189     </m:mover>
190   </xsl:template>
191
192   <xsl:template match="tml:sp[*[1][self::tml:sb[not(@over) or @over='0']]]">
193     <m:msubsup>
194       <xsl:if test="@id">
195         <xsl:attribute name="xref">
196           <xsl:value-of select="@id"/>
197         </xsl:attribute>
198       </xsl:if>
199       <xsl:apply-templates select="*[1]/*[1]"/>
200       <xsl:apply-templates select="*[1]/*[2]"/>
201       <xsl:apply-templates select="*[2]"/>
202     </m:msubsup>
203   </xsl:template>
204
205   <xsl:template match="tml:sp">
206     <m:msup>
207       <xsl:if test="@id">
208         <xsl:attribute name="xref">
209           <xsl:value-of select="@id"/>
210         </xsl:attribute>
211       </xsl:if>
212       <xsl:apply-templates select="*[1]"/>
213       <xsl:apply-templates select="*[2]"/>
214     </m:msup>
215   </xsl:template>
216
217   <xsl:template match="tml:g">
218     <xsl:param name="annotation" select="/.."/>
219     <xsl:choose>
220       <xsl:when test="not(@id) and count(*) = 1">
221         <xsl:apply-templates select="*[1]">
222           <xsl:with-param name="annotation" select="$annotation"/>
223         </xsl:apply-templates>
224       </xsl:when>
225       <xsl:when test="tml:cursor">
226         <m:mstyle mathbackground="#e0e0e0">
227           <xsl:if test="@id">
228             <xsl:attribute name="xref">
229               <xsl:value-of select="@id"/>
230             </xsl:attribute>
231           </xsl:if>
232           <m:mrow>
233             <xsl:apply-templates select="*">
234               <xsl:with-param name="annotation" select="$annotation"/>
235             </xsl:apply-templates>
236           </m:mrow>
237         </m:mstyle>
238       </xsl:when>
239        <xsl:otherwise>
240         <m:mrow>
241           <xsl:if test="@id">
242             <xsl:attribute name="xref">
243               <xsl:value-of select="@id"/>
244             </xsl:attribute>
245           </xsl:if>
246           <xsl:apply-templates select="*">
247             <xsl:with-param name="annotation" select="$annotation"/>
248           </xsl:apply-templates>
249         </m:mrow>
250       </xsl:otherwise>
251     </xsl:choose>
252   </xsl:template>
253
254   <xsl:template match="tml:row">
255     <m:mtr>
256       <xsl:apply-templates select="cell"/>
257     </m:mtr>
258   </xsl:template>
259
260   <xsl:template match="tml:cell">
261     <m:mtd>
262       <xsl:apply-templates select="*"/>
263     </m:mtd>
264   </xsl:template>
265
266 <!--/// CONTROL SEQUENCES ///-->
267
268   <xsl:template match="tml:c">
269     <m:mrow>
270       <xsl:if test="@id">
271         <xsl:attribute name="xref">
272           <xsl:value-of select="@id"/>
273         </xsl:attribute>
274       </xsl:if>
275       <m:mtext mathcolor="blue">\<xsl:value-of select="@name"/></m:mtext>
276       <xsl:apply-templates select="*"/>
277     </m:mrow>
278   </xsl:template>
279
280   <xsl:template match="tml:c[@name='fun' and count(*)=3]">
281     <m:mrow>
282       <xsl:if test="@id">
283         <xsl:attribute name="xref">
284           <xsl:value-of select="@id"/>
285         </xsl:attribute>
286       </xsl:if>
287       <m:mo mathcolor="red">&#x03bb;</m:mo>
288       <xsl:apply-templates select="*[1]"/>
289       <m:mo>:</m:mo>
290       <xsl:apply-templates select="*[2]"/>
291       <m:mo>.</m:mo>
292       <xsl:apply-templates select="*[3]"/>
293     </m:mrow>
294   </xsl:template>
295
296   <xsl:template match="tml:c[@name='not'][*[1][self::tml:o]]">
297 <!-- not -->
298     <m:mo>
299       <xsl:if test="@id">
300         <xsl:attribute name="xref">
301           <xsl:value-of select="@id"/>
302         </xsl:attribute>
303       </xsl:if>
304       <xsl:value-of select="*[1]/@val"/>&#x0338;</m:mo>
305   </xsl:template>
306
307   <xsl:template match="tml:c[@name='buildrel']">
308 <!-- buildrel -->
309     <m:mover>
310       <xsl:if test="@id">
311         <xsl:attribute name="xref">
312           <xsl:value-of select="@id"/>
313         </xsl:attribute>
314       </xsl:if>
315       <xsl:apply-templates select="*[2]"/>
316       <xsl:apply-templates select="*[1]"/>
317     </m:mover>
318   </xsl:template>
319
320   <xsl:template match="tml:c[@name='left' or @name='right'][*[1][self::tml:o]]">
321 <!-- left -->
322     <m:mo stretchy="true">
323       <xsl:if test="@id">
324         <xsl:attribute name="xref">
325           <xsl:value-of select="@id"/>
326         </xsl:attribute>
327       </xsl:if>
328       <xsl:value-of select="*[1]/@val"/>
329     </m:mo>
330   </xsl:template>
331
332   <xsl:template match="tml:c[@name='bigl' or @name='bigr' or @name='bigm' or @name='big'][*[1][self::tml:o]]">
333 <!-- bigl -->
334     <m:mo stretchy="true" minsize="8.5pt">
335       <xsl:if test="@id">
336         <xsl:attribute name="xref">
337           <xsl:value-of select="@id"/>
338         </xsl:attribute>
339       </xsl:if>
340       <xsl:value-of select="*[1]/@val"/>
341     </m:mo>
342   </xsl:template>
343
344   <xsl:template match="tml:c[@name='Bigl' or @name='Bigr' or @name='Bigm'][*[1][self::tml:o]]">
345 <!-- Bigl -->
346     <m:mo stretchy="true" minsize="11.5pt">
347       <xsl:if test="@id">
348         <xsl:attribute name="xref">
349           <xsl:value-of select="@id"/>
350         </xsl:attribute>
351       </xsl:if>
352       <xsl:value-of select="*[1]/@val"/>
353     </m:mo>
354   </xsl:template>
355
356   <xsl:template match="tml:c[@name='biggl' or @name='biggr' or @name='biggm'][*[1][self::tml:o]]">
357 <!-- biggl -->
358     <m:mo stretchy="true" minsize="14.5pt">
359       <xsl:if test="@id">
360         <xsl:attribute name="xref">
361           <xsl:value-of select="@id"/>
362         </xsl:attribute>
363       </xsl:if>
364       <xsl:value-of select="*[1]/@val"/>
365     </m:mo>
366   </xsl:template>
367
368   <xsl:template match="tml:c[@name='Biggl' or @name='Biggr' or @name='Biggm'][*[1][self::tml:o]]">
369 <!-- biggl -->
370     <m:mo stretchy="true" minsize="17.5pt">
371       <xsl:if test="@id">
372         <xsl:attribute name="xref">
373           <xsl:value-of select="@id"/>
374         </xsl:attribute>
375       </xsl:if>
376       <xsl:value-of select="*[1]/@val"/>
377     </m:mo>
378   </xsl:template>
379
380   <xsl:template match="tml:c[@name='hat']">
381 <!-- hat -->
382     <m:mover accent="true">
383       <xsl:if test="@id">
384         <xsl:attribute name="xref">
385           <xsl:value-of select="@id"/>
386         </xsl:attribute>
387       </xsl:if>
388       <xsl:apply-templates select="*[1]"/>
389       <m:mo>&#x0302;</m:mo>
390     </m:mover>
391   </xsl:template>
392
393   <xsl:template match="tml:c[@name='widehat']">
394 <!-- widehat -->
395     <m:mover accent="false">
396       <xsl:if test="@id">
397         <xsl:attribute name="xref">
398           <xsl:value-of select="@id"/>
399         </xsl:attribute>
400       </xsl:if>
401       <xsl:apply-templates select="*[1]"/>
402       <m:mo stretchy="true">&#x0302;</m:mo>
403     </m:mover>
404   </xsl:template>
405
406   <xsl:template match="tml:c[@name='check']">
407 <!-- check -->
408     <m:mover accent="true">
409       <xsl:if test="@id">
410         <xsl:attribute name="xref">
411           <xsl:value-of select="@id"/>
412         </xsl:attribute>
413       </xsl:if>
414       <xsl:apply-templates select="*[1]"/>
415       <m:mo>&#x030c;</m:mo>
416     </m:mover>
417   </xsl:template>
418
419   <xsl:template match="tml:c[@name='tilde']">
420 <!-- tilde -->
421     <m:mover accent="true">
422       <xsl:if test="@id">
423         <xsl:attribute name="xref">
424           <xsl:value-of select="@id"/>
425         </xsl:attribute>
426       </xsl:if>
427       <xsl:apply-templates select="*[1]"/>
428       <m:mo>&#x0303;</m:mo>
429     </m:mover>
430   </xsl:template>
431
432   <xsl:template match="tml:c[@name='widetilde']">
433 <!-- widetilde -->
434     <m:mover>
435       <xsl:if test="@id">
436         <xsl:attribute name="xref">
437           <xsl:value-of select="@id"/>
438         </xsl:attribute>
439       </xsl:if>
440       <xsl:apply-templates select="*[1]"/>
441       <m:mo stretchy="true">&#x0303;</m:mo>
442     </m:mover>>
443   </xsl:template>
444
445   <xsl:template match="tml:c[@name='acute']">
446 <!-- acute -->
447     <m:mover accent="true">
448       <xsl:if test="@id">
449         <xsl:attribute name="xref">
450           <xsl:value-of select="@id"/>
451         </xsl:attribute>
452       </xsl:if>
453       <xsl:apply-templates select="*[1]"/>
454       <m:mo>&#x0301;</m:mo>
455     </m:mover>
456   </xsl:template>
457
458   <xsl:template match="tml:c[@name='grave']">
459 <!-- grave -->
460     <m:mover accent="true">
461       <xsl:if test="@id">
462         <xsl:attribute name="xref">
463           <xsl:value-of select="@id"/>
464         </xsl:attribute>
465       </xsl:if>
466       <xsl:apply-templates select="*[1]"/>
467       <m:mo>&#x0300;</m:mo>
468     </m:mover>>
469   </xsl:template>
470
471   <xsl:template match="tml:c[@name='dot']">
472 <!-- dot -->
473     <m:mover accent="true">
474       <xsl:if test="@id">
475         <xsl:attribute name="xref">
476           <xsl:value-of select="@id"/>
477         </xsl:attribute>
478       </xsl:if>
479       <xsl:apply-templates select="*[1]"/>
480       <m:mo>&#x0307;</m:mo>
481     </m:mover>
482   </xsl:template>
483
484   <xsl:template match="tml:c[@name='ddot']">
485 <!-- ddot -->
486     <m:mover accent="true">
487       <xsl:if test="@id">
488         <xsl:attribute name="xref">
489           <xsl:value-of select="@id"/>
490         </xsl:attribute>
491       </xsl:if>
492       <xsl:apply-templates select="*[1]"/>
493       <m:mo>&#x0308;</m:mo>
494     </m:mover>
495   </xsl:template>
496
497   <xsl:template match="tml:c[@name='breve']">
498 <!-- breve -->
499     <m:mover accent="true">
500       <xsl:if test="@id">
501         <xsl:attribute name="xref">
502           <xsl:value-of select="@id"/>
503         </xsl:attribute>
504       </xsl:if>
505       <xsl:apply-templates select="*[1]"/>
506       <m:mo>&#x0306;</m:mo>
507     </m:mover>
508   </xsl:template>
509
510   <xsl:template match="tml:c[@name='bar']">
511 <!-- bar -->
512     <m:mover accent="true">
513       <xsl:if test="@id">
514         <xsl:attribute name="xref">
515           <xsl:value-of select="@id"/>
516         </xsl:attribute>
517       </xsl:if>
518       <xsl:apply-templates select="*[1]"/>
519       <m:mo>&#x0304;</m:mo>
520     </m:mover>
521   </xsl:template>
522
523   <xsl:template match="tml:c[@name='vec']">
524 <!-- vec -->
525     <m:mover accent="true">
526       <xsl:if test="@id">
527         <xsl:attribute name="xref">
528           <xsl:value-of select="@id"/>
529         </xsl:attribute>
530       </xsl:if>
531       <xsl:apply-templates select="*[1]"/>
532       <m:mo>&#x20d7;</m:mo>
533     </m:mover>
534   </xsl:template>
535
536   <xsl:template match="tml:c[@name='overline']">
537 <!-- overline -->
538     <m:mover>
539       <xsl:if test="@id">
540         <xsl:attribute name="xref">
541           <xsl:value-of select="@id"/>
542         </xsl:attribute>
543       </xsl:if>
544       <xsl:apply-templates select="*[1]"/>
545       <m:mo stretchy="true">&#x0305;</m:mo>
546     </m:mover>
547   </xsl:template>
548
549   <xsl:template match="tml:c[@name='underline']">
550 <!-- underline -->
551     <m:munder>
552       <xsl:if test="@id">
553         <xsl:attribute name="xref">
554           <xsl:value-of select="@id"/>
555         </xsl:attribute>
556       </xsl:if>
557       <xsl:apply-templates select="*[1]"/>
558       <m:mo stretchy="true">&#x0332;</m:mo>
559     </m:munder>
560   </xsl:template>
561
562   <xsl:template match="tml:c[@name='sqrt']">
563 <!-- sqrt -->
564     <m:msqrt>
565       <xsl:if test="@id">
566         <xsl:attribute name="xref">
567           <xsl:value-of select="@id"/>
568         </xsl:attribute>
569       </xsl:if>
570       <xsl:apply-templates select="*"/>
571     </m:msqrt>
572   </xsl:template>
573
574   <xsl:template match="tml:c[@name='root']">
575 <!-- root -->
576     <m:mroot>
577       <xsl:if test="@id">
578         <xsl:attribute name="xref">
579           <xsl:value-of select="@id"/>
580         </xsl:attribute>
581       </xsl:if>
582       <xsl:choose>
583         <xsl:when test="count(*) &lt; 2">
584           <m:mrow/>
585           <xsl:apply-templates select="*[1]"/>
586         </xsl:when>
587         <xsl:otherwise>
588           <xsl:apply-templates select="*[2]"/>
589           <xsl:apply-templates select="*[1]"/>
590         </xsl:otherwise>
591       </xsl:choose>
592     </m:mroot>
593   </xsl:template>
594
595   <xsl:template match="tml:c[@name='frac']">
596 <!-- frac -->
597     <m:mfrac>
598       <xsl:if test="@id">
599         <xsl:attribute name="xref">
600           <xsl:value-of select="@id"/>
601         </xsl:attribute>
602       </xsl:if>
603       <xsl:apply-templates select="*[1]"/>
604       <xsl:apply-templates select="*[2]"/>
605     </m:mfrac>
606   </xsl:template>
607
608   <xsl:template match="tml:c[@name='over']">
609 <!-- over -->
610     <m:mfrac>
611       <xsl:if test="@id">
612         <xsl:attribute name="xref">
613           <xsl:value-of select="@id"/>
614         </xsl:attribute>
615       </xsl:if>
616       <xsl:apply-templates select="*[1]"/>
617       <xsl:apply-templates select="*[2]"/>
618     </m:mfrac>
619   </xsl:template>
620
621   <xsl:template match="tml:c[@name='atop']">
622 <!-- atop -->
623     <m:mfrac linethickness="0">
624       <xsl:if test="@id">
625         <xsl:attribute name="xref">
626           <xsl:value-of select="@id"/>
627         </xsl:attribute>
628       </xsl:if>
629       <xsl:apply-templates select="*[1]"/>
630       <xsl:apply-templates select="*[2]"/>
631     </m:mfrac>
632   </xsl:template>
633
634   <xsl:template match="tml:c[@name='choose']">
635 <!-- choose -->
636     <m:mrow>
637       <xsl:if test="@id">
638         <xsl:attribute name="xref">
639           <xsl:value-of select="@id"/>
640         </xsl:attribute>
641       </xsl:if>
642       <m:mo stretchy="true">(</m:mo>
643       <m:mfrac linethickness="0">
644         <xsl:apply-templates select="*[1]"/>
645         <xsl:apply-templates select="*[2]"/>
646       </m:mfrac>
647       <m:mo stretchy="true">)</m:mo>
648     </m:mrow>
649   </xsl:template>
650
651   <xsl:template match="tml:c[@name='brace']">
652 <!-- brace -->
653     <m:mrow>
654       <xsl:if test="@id">
655         <xsl:attribute name="xref">
656           <xsl:value-of select="@id"/>
657         </xsl:attribute>
658       </xsl:if>
659       <m:mo stretchy="true">{</m:mo>
660       <m:mfrac linethickness="0">
661         <xsl:apply-templates select="*[1]"/>
662         <xsl:apply-templates select="*[2]"/>
663       </m:mfrac>
664       <m:mo stretchy="true">}</m:mo>
665     </m:mrow>
666   </xsl:template>
667
668   <xsl:template match="tml:c[@name='brack']">
669 <!-- brack -->
670     <m:mrow>
671       <xsl:if test="@id">
672         <xsl:attribute name="xref">
673           <xsl:value-of select="@id"/>
674         </xsl:attribute>
675       </xsl:if>
676       <m:mo stretchy="true">[</m:mo>
677       <m:mfrac linethickness="0">
678         <xsl:apply-templates select="*[1]"/>
679         <xsl:apply-templates select="*[2]"/>
680       </m:mfrac>
681       <m:mo stretchy="true">]</m:mo>
682     </m:mrow>
683   </xsl:template>
684
685   <xsl:template match="tml:c[@name='displaystyle']">
686 <!-- displaystyle -->
687     <m:mstyle displaystyle="true">
688       <xsl:if test="@id">
689         <xsl:attribute name="xref">
690           <xsl:value-of select="@id"/>
691         </xsl:attribute>
692       </xsl:if>
693       <xsl:apply-templates select="*[1]"/>
694     </m:mstyle>
695   </xsl:template>
696
697   <xsl:template match="tml:c[@name='textstyle']">
698 <!-- textstyle -->
699     <m:mstyle scriptlevel="0">
700       <xsl:if test="@id">
701         <xsl:attribute name="xref">
702           <xsl:value-of select="@id"/>
703         </xsl:attribute>
704       </xsl:if>
705       <xsl:apply-templates select="*[1]"/>
706       <xsl:if test="tml:g/tml:cursor[@visible='1']">
707         <m:msub>
708           <m:mtext mathcolor="#808080">}</m:mtext>
709           <m:mtext><xsl:value-of select="@name"/></m:mtext>
710         </m:msub>
711       </xsl:if>
712     </m:mstyle>
713   </xsl:template>
714
715   <xsl:template match="tml:c[@name='scriptstyle']">
716 <!-- scriptstyle -->
717     <m:mstyle scriptlevel="1">
718       <xsl:if test="@id">
719         <xsl:attribute name="xref">
720           <xsl:value-of select="@id"/>
721         </xsl:attribute>
722       </xsl:if>
723       <xsl:apply-templates select="*[1]"/>
724     </m:mstyle>
725   </xsl:template>
726
727   <xsl:template match="tml:c[@name='scriptscriptstyle']">
728 <!-- scriptscriptstyle -->
729     <m:mstyle scriptlevel="2">
730       <xsl:if test="@id">
731         <xsl:attribute name="xref">
732           <xsl:value-of select="@id"/>
733         </xsl:attribute>
734       </xsl:if>
735       <xsl:apply-templates select="*[1]"/>
736     </m:mstyle>
737   </xsl:template>
738
739   <xsl:template match="tml:c[@name='pmod']">
740 <!-- pmod -->
741     <m:mrow>
742       <xsl:if test="@id">
743         <xsl:attribute name="xref">
744           <xsl:value-of select="@id"/>
745         </xsl:attribute>
746       </xsl:if>
747       <m:mo>(</m:mo>
748       <m:mrow>
749         <m:mo>mod</m:mo>
750         <xsl:apply-templates select="*[1]"/>
751       </m:mrow>
752       <m:mo>)</m:mo>
753     </m:mrow>
754   </xsl:template>
755
756   <xsl:template match="tml:c[@name='rm']">
757 <!-- rm -->
758     <m:mstyle mathvariant="normal">
759       <xsl:if test="@id">
760         <xsl:attribute name="xref">
761           <xsl:value-of select="@id"/>
762         </xsl:attribute>
763       </xsl:if>
764       <xsl:apply-templates select="*[1]"/>
765     </m:mstyle>
766   </xsl:template>
767
768   <xsl:template match="tml:c[@name='bf']">
769 <!-- bf -->
770     <m:mstyle mathvariant="bold">
771       <xsl:if test="@id">
772         <xsl:attribute name="xref">
773           <xsl:value-of select="@id"/>
774         </xsl:attribute>
775       </xsl:if>
776       <xsl:apply-templates select="*[1]"/>
777     </m:mstyle>
778   </xsl:template>
779
780   <xsl:template match="tml:c[@name='tt']">
781 <!-- tt -->
782     <m:mstyle mathvariant="monospace">
783       <xsl:if test="@id">
784         <xsl:attribute name="xref">
785           <xsl:value-of select="@id"/>
786         </xsl:attribute>
787       </xsl:if>
788       <xsl:apply-templates select="*[1]"/>
789     </m:mstyle>
790   </xsl:template>
791
792   <xsl:template match="tml:c[@name='sl']">
793 <!-- sl -->
794     <m:mstyle mathvariant="italic">
795       <xsl:if test="@id">
796         <xsl:attribute name="xref">
797           <xsl:value-of select="@id"/>
798         </xsl:attribute>
799       </xsl:if>
800       <xsl:apply-templates select="*[1]"/>
801     </m:mstyle>
802   </xsl:template>
803
804   <xsl:template match="tml:c[@name='it']">
805 <!-- it -->
806     <m:mstyle mathvariant="italic">
807       <xsl:if test="@id">
808         <xsl:attribute name="xref">
809           <xsl:value-of select="@id"/>
810         </xsl:attribute>
811       </xsl:if>
812       <xsl:apply-templates select="*[1]"/>
813     </m:mstyle>
814   </xsl:template>
815
816   <xsl:template match="tml:c[@name=',']">
817 <!-- , -->
818     <m:mspace width="thinmathspace">
819       <xsl:if test="@id">
820         <xsl:attribute name="xref">
821           <xsl:value-of select="@id"/>
822         </xsl:attribute>
823       </xsl:if>
824     </m:mspace>
825   </xsl:template>
826
827   <xsl:template match="tml:c[@name='&gt;']">
828 <!-- > -->
829     <m:mspace width="mediummathspace">
830       <xsl:if test="@id">
831         <xsl:attribute name="xref">
832           <xsl:value-of select="@id"/>
833         </xsl:attribute>
834       </xsl:if>
835     </m:mspace>
836   </xsl:template>
837
838   <xsl:template match="tml:c[@name=';']">
839 <!-- ; -->
840     <m:mspace width="thickmathspace">
841       <xsl:if test="@id">
842         <xsl:attribute name="xref">
843           <xsl:value-of select="@id"/>
844         </xsl:attribute>
845       </xsl:if>
846     </m:mspace>
847   </xsl:template>
848
849   <xsl:template match="tml:c[@name='!']">
850 <!-- ! -->
851     <m:mspace width="-0.166667em">
852       <xsl:if test="@id">
853         <xsl:attribute name="xref">
854           <xsl:value-of select="@id"/>
855         </xsl:attribute>
856       </xsl:if>
857     </m:mspace>
858   </xsl:template>
859
860   <xsl:template name="table-content">
861       <xsl:choose>
862         <xsl:when test="tml:row">
863           <xsl:apply-templates select="tml:row"/>
864         </xsl:when>
865         <xsl:otherwise>
866           <m:mtr>
867             <m:mtd>
868               <xsl:apply-templates select="*"/>
869             </m:mtd>
870           </m:mtr>
871         </xsl:otherwise>
872       </xsl:choose>
873   </xsl:template>
874
875   <xsl:template match="tml:c[@name='matrix']">
876 <!-- matrix -->
877     <m:mtable>
878       <xsl:if test="@id">
879         <xsl:attribute name="xref">
880           <xsl:value-of select="@id"/>
881         </xsl:attribute>
882       </xsl:if>
883       <xsl:call-template name="table-content"/>
884     </m:mtable>
885   </xsl:template>
886
887   <xsl:template match="tml:row">
888     <m:mtr>
889       <xsl:apply-templates select="tml:cell"/>
890     </m:mtr>
891   </xsl:template>
892
893   <xsl:template match="tml:cell">
894     <m:mtd>
895       <xsl:apply-templates select="*"/>
896     </m:mtd>
897   </xsl:template>
898
899   <xsl:template match="tml:c[@name='pmatrix']">
900 <!-- pmatrix -->
901     <m:mrow>
902       <xsl:if test="@id">
903         <xsl:attribute name="xref">
904           <xsl:value-of select="@id"/>
905         </xsl:attribute>
906       </xsl:if>
907       <m:mo stretchy="true">(</m:mo>
908       <m:mtable>
909         <xsl:call-template name="table-content"/>
910       </m:mtable>
911       <m:mo stretchy="true">)</m:mo>
912     </m:mrow>
913   </xsl:template>
914
915   <xsl:template match="tml:c[@name='bordermatrix']">
916 <!-- bordermatrix -->
917     <m:mtable>
918       <xsl:if test="@id">
919         <xsl:attribute name="xref">
920           <xsl:value-of select="@id"/>
921         </xsl:attribute>
922       </xsl:if>
923       <m:mtr>
924         <xsl:apply-templates select="tml:row[1]/tml:cell[1]"/>
925         <m:mtd/>
926         <xsl:apply-templates select="tml:row[1]/tml:cell[position() &gt; 1]"/>
927         <m:mtd/>
928       </m:mtr>
929       <xsl:for-each select="tml:row[position() &gt; 1]">
930         <m:mtr>
931           <xsl:apply-templates select="tml:cell[1]"/>
932           <xsl:if test="position() = 1">
933             <m:mtd rowspan="{count(../tml:row) - 1}">
934               <m:mo stretchy="true">(</m:mo>
935             </m:mtd>
936           </xsl:if>
937           <xsl:apply-templates select="tml:cell[position() &gt; 1]"/>
938           <xsl:if test="position() = 1">
939             <m:mtd rowspan="{count(../tml:row) - 1}">
940               <m:mo stretchy="true">)</m:mo>
941             </m:mtd>
942           </xsl:if>         
943         </m:mtr>
944       </xsl:for-each>      
945     </m:mtable>
946   </xsl:template>
947
948   <xsl:template match="tml:c[@name='overbrace']">
949 <!-- overbrace -->
950     <m:mover>
951       <xsl:if test="@id">
952         <xsl:attribute name="xref">
953           <xsl:value-of select="@id"/>
954         </xsl:attribute>
955       </xsl:if>
956       <xsl:apply-templates select="*[1]"/>
957       <m:mo stretchy="true">????</m:mo>
958     </m:mover>>
959   </xsl:template>
960
961   <xsl:template match="tml:c[@name='underbrace']">
962 <!-- underbrace -->
963     <m:munder>
964       <xsl:if test="@id">
965         <xsl:attribute name="xref">
966           <xsl:value-of select="@id"/>
967         </xsl:attribute>
968       </xsl:if>
969       <xsl:apply-templates select="*[1]"/>
970       <m:mo stretchy="true">????</m:mo>
971     </m:munder>
972   </xsl:template>
973
974   <xsl:template match="tml:c[@name='cases']">
975 <!-- cases -->
976     <m:mrow>
977       <xsl:if test="@id">
978         <xsl:attribute name="xref">
979           <xsl:value-of select="@id"/>
980         </xsl:attribute>
981       </xsl:if>
982       <m:mo stretchy="true">{</m:mo>
983       <m:mtable>
984         <xsl:call-template name="table-content"/>
985       </m:mtable>
986     </m:mrow>
987   </xsl:template>
988
989   <xsl:template match="tml:c[@name='red']">
990 <!-- red  -->
991     <m:mstyle mathcolor="red">
992       <xsl:if test="@id">
993         <xsl:attribute name="xref">
994           <xsl:value-of select="@id"/>
995         </xsl:attribute>
996         <xsl:apply-templates/>
997       </xsl:if>
998     </m:mstyle>
999   </xsl:template>
1000
1001   <xsl:template match="tml:c[@name='green']">
1002 <!-- green  -->
1003     <m:mstyle mathcolor="green">
1004       <xsl:if test="@id">
1005         <xsl:attribute name="xref">
1006           <xsl:value-of select="@id"/>
1007         </xsl:attribute>
1008         <xsl:apply-templates/>
1009       </xsl:if>
1010     </m:mstyle>
1011   </xsl:template>
1012
1013   <xsl:template match="tml:c[@name='duedelim']">
1014 <!-- duedelim  -->
1015     <m:mfrac>
1016       <xsl:if test="@id">
1017         <xsl:attribute name="xref">
1018           <xsl:value-of select="@id"/>
1019         </xsl:attribute>
1020       </xsl:if>
1021       <xsl:apply-templates select="*[1]"/>
1022       <xsl:apply-templates select="*[2]"/>
1023     </m:mfrac>
1024   </xsl:template>
1025
1026 </xsl:stylesheet>