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