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