]> matita.cs.unibo.it Git - helm.git/blob - helm/DEVEL/mathml_editor/xsl/tml-mmlp.xsl
* the minus sign is now mapped to the right Unicode character ant not
[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 match="tml:o[@val='-']">
73     <m:mo>
74       <xsl:if test="@id">
75         <xsl:attribute name="xref">
76           <xsl:value-of select="@id"/>
77         </xsl:attribute>
78       </xsl:if>
79       &#x2212;
80     </m:mo>
81   </xsl:template>
82
83   <xsl:template name="cursor">
84     <xsl:choose>
85       <xsl:when test="substring(@val,1,1)='\'">
86         <m:mrow>
87           <xsl:if test="@id">
88             <xsl:attribute name="xref">
89               <xsl:value-of select="@id"/>
90             </xsl:attribute>
91           </xsl:if>
92           <m:mo stretchy="false">&#x2329;</m:mo>
93           <m:mtext mathcolor="blue"><xsl:value-of select="@val"/></m:mtext>
94           <m:mo stretchy="false">&#x232a;</m:mo>
95         </m:mrow>
96       </xsl:when>
97       <xsl:otherwise>
98         <m:mtext mathcolor="blue">
99          <xsl:if test="@id">
100            <xsl:attribute name="xref">
101              <xsl:value-of select="@id"/>
102            </xsl:attribute>
103          </xsl:if>I</m:mtext>
104       </xsl:otherwise>
105     </xsl:choose>
106   </xsl:template>
107
108   <xsl:template match="tml:cursor[@visible='1']">
109     <xsl:param name="annotation" select="/.."/>
110     <xsl:choose>
111       <xsl:when test="$annotation">
112         <m:msub>
113           <xsl:call-template name="cursor"/>
114           <m:mtext>
115             <xsl:value-of select="$annotation"/>
116           </m:mtext>
117         </m:msub>
118       </xsl:when>
119       <xsl:otherwise>
120         <xsl:call-template name="cursor"/>
121       </xsl:otherwise>
122     </xsl:choose>
123   </xsl:template>
124
125   <xsl:template match="tml:cursor[not(@visible) or @visible='0']">
126   </xsl:template>
127
128   <xsl:template match="tml:sb[@under='1'][*[1]/tml:sp[@over='1']]">
129     <m:munderover>
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]/*[1]"/>
136       <xsl:apply-templates select="*[2]"/>
137       <xsl:apply-templates select="*[1]/*[2]"/>
138     </m:munderover>
139   </xsl:template>
140
141   <xsl:template match="tml:sb[@under='1']">
142     <m:munder>
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]"/>
149       <xsl:apply-templates select="*[2]"/>
150     </m:munder>
151   </xsl:template>
152
153   <xsl:template match="tml:sb[*[1][self::tml:sp[not(@over) or @over='0']]]">
154     <m:msubsup>
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]/*[1]"/>
161       <xsl:apply-templates select="*[2]"/>
162       <xsl:apply-templates select="*[1]/*[2]"/>
163     </m:msubsup>
164   </xsl:template>
165
166   <xsl:template match="tml:sb">
167     <m:msub>
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]"/>
174       <xsl:apply-templates select="*[2]"/>
175     </m:msub>
176   </xsl:template>
177
178   <xsl:template match="tml:sp[@over='1'][*[1]/tml:sb[@under='1']]">
179     <m:munderover>
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]/*[1]"/>
186       <xsl:apply-templates select="*[1]/*[2]"/>
187       <xsl:apply-templates select="*[2]"/>
188     </m:munderover>
189   </xsl:template>
190
191   <xsl:template match="tml:sp[@over='1']">
192     <m:mover>
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]"/>
199       <xsl:apply-templates select="*[2]"/>
200     </m:mover>
201   </xsl:template>
202
203   <xsl:template match="tml:sp[*[1][self::tml:sb[not(@over) or @over='0']]]">
204     <m:msubsup>
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]/*[1]"/>
211       <xsl:apply-templates select="*[1]/*[2]"/>
212       <xsl:apply-templates select="*[2]"/>
213     </m:msubsup>
214   </xsl:template>
215
216   <xsl:template match="tml:sp">
217     <m:msup>
218       <xsl:if test="@id">
219         <xsl:attribute name="xref">
220           <xsl:value-of select="@id"/>
221         </xsl:attribute>
222       </xsl:if>
223       <xsl:apply-templates select="*[1]"/>
224       <xsl:apply-templates select="*[2]"/>
225     </m:msup>
226   </xsl:template>
227
228   <xsl:template match="tml:g">
229     <xsl:param name="annotation" select="/.."/>
230     <xsl:choose>
231       <xsl:when test="not(@id) and count(*) = 1">
232         <xsl:apply-templates select="*[1]">
233           <xsl:with-param name="annotation" select="$annotation"/>
234         </xsl:apply-templates>
235       </xsl:when>
236       <xsl:when test="tml:cursor">
237         <m:mstyle mathbackground="#e0e0e0">
238           <xsl:if test="@id">
239             <xsl:attribute name="xref">
240               <xsl:value-of select="@id"/>
241             </xsl:attribute>
242           </xsl:if>
243           <m:mrow>
244             <xsl:apply-templates select="*">
245               <xsl:with-param name="annotation" select="$annotation"/>
246             </xsl:apply-templates>
247           </m:mrow>
248         </m:mstyle>
249       </xsl:when>
250        <xsl:otherwise>
251         <m:mrow>
252           <xsl:if test="@id">
253             <xsl:attribute name="xref">
254               <xsl:value-of select="@id"/>
255             </xsl:attribute>
256           </xsl:if>
257           <xsl:apply-templates select="*">
258             <xsl:with-param name="annotation" select="$annotation"/>
259           </xsl:apply-templates>
260         </m:mrow>
261       </xsl:otherwise>
262     </xsl:choose>
263   </xsl:template>
264
265   <xsl:template match="tml:row">
266     <m:mtr>
267       <xsl:apply-templates select="cell"/>
268     </m:mtr>
269   </xsl:template>
270
271   <xsl:template match="tml:cell">
272     <m:mtd>
273       <xsl:apply-templates select="*"/>
274     </m:mtd>
275   </xsl:template>
276
277 <!--/// CONTROL SEQUENCES ///-->
278
279   <xsl:template match="tml:c">
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:mtext mathcolor="blue">\<xsl:value-of select="@name"/></m:mtext>
287       <xsl:apply-templates select="*"/>
288     </m:mrow>
289   </xsl:template>
290
291   <xsl:template match="tml:c[@name='fun' and count(*)=3]">
292     <m:mrow>
293       <xsl:if test="@id">
294         <xsl:attribute name="xref">
295           <xsl:value-of select="@id"/>
296         </xsl:attribute>
297       </xsl:if>
298       <m:mo mathcolor="red">&#x03bb;</m:mo>
299       <xsl:apply-templates select="*[1]"/>
300       <m:mo>:</m:mo>
301       <xsl:apply-templates select="*[2]"/>
302       <m:mo>.</m:mo>
303       <xsl:apply-templates select="*[3]"/>
304     </m:mrow>
305   </xsl:template>
306
307   <xsl:template match="tml:c[@name='not'][*[1][self::tml:o]]">
308 <!-- not -->
309     <m:mo>
310       <xsl:if test="@id">
311         <xsl:attribute name="xref">
312           <xsl:value-of select="@id"/>
313         </xsl:attribute>
314       </xsl:if>
315       <xsl:value-of select="*[1]/@val"/>&#x0338;</m:mo>
316   </xsl:template>
317
318   <xsl:template match="tml:c[@name='buildrel']">
319 <!-- buildrel -->
320     <m:mover>
321       <xsl:if test="@id">
322         <xsl:attribute name="xref">
323           <xsl:value-of select="@id"/>
324         </xsl:attribute>
325       </xsl:if>
326       <xsl:apply-templates select="*[2]"/>
327       <xsl:apply-templates select="*[1]"/>
328     </m:mover>
329   </xsl:template>
330
331   <xsl:template match="tml:c[@name='left' or @name='right'][*[1][self::tml:o]]">
332 <!-- left -->
333     <m:mo stretchy="true">
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' or @name='big'][*[1][self::tml:o]]">
344 <!-- bigl -->
345     <m:mo stretchy="true" minsize="8.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='Bigl' or @name='Bigr' or @name='Bigm'][*[1][self::tml:o]]">
356 <!-- Bigl -->
357     <m:mo stretchy="true" minsize="11.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="14.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='Biggl' or @name='Biggr' or @name='Biggm'][*[1][self::tml:o]]">
380 <!-- biggl -->
381     <m:mo stretchy="true" minsize="17.5pt">
382       <xsl:if test="@id">
383         <xsl:attribute name="xref">
384           <xsl:value-of select="@id"/>
385         </xsl:attribute>
386       </xsl:if>
387       <xsl:value-of select="*[1]/@val"/>
388     </m:mo>
389   </xsl:template>
390
391   <xsl:template match="tml:c[@name='hat']">
392 <!-- hat -->
393     <m:mover accent="true">
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>&#x0302;</m:mo>
401     </m:mover>
402   </xsl:template>
403
404   <xsl:template match="tml:c[@name='widehat']">
405 <!-- widehat -->
406     <m:mover accent="false">
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 stretchy="true">&#x0302;</m:mo>
414     </m:mover>
415   </xsl:template>
416
417   <xsl:template match="tml:c[@name='check']">
418 <!-- check -->
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>&#x030c;</m:mo>
427     </m:mover>
428   </xsl:template>
429
430   <xsl:template match="tml:c[@name='tilde']">
431 <!-- tilde -->
432     <m:mover accent="true">
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>&#x0303;</m:mo>
440     </m:mover>
441   </xsl:template>
442
443   <xsl:template match="tml:c[@name='widetilde']">
444 <!-- widetilde -->
445     <m:mover>
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 stretchy="true">&#x0303;</m:mo>
453     </m:mover>>
454   </xsl:template>
455
456   <xsl:template match="tml:c[@name='acute']">
457 <!-- acute -->
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>&#x0301;</m:mo>
466     </m:mover>
467   </xsl:template>
468
469   <xsl:template match="tml:c[@name='grave']">
470 <!-- grave -->
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>&#x0300;</m:mo>
479     </m:mover>>
480   </xsl:template>
481
482   <xsl:template match="tml:c[@name='dot']">
483 <!-- dot -->
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>&#x0307;</m:mo>
492     </m:mover>
493   </xsl:template>
494
495   <xsl:template match="tml:c[@name='ddot']">
496 <!-- ddot -->
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>&#x0308;</m:mo>
505     </m:mover>
506   </xsl:template>
507
508   <xsl:template match="tml:c[@name='breve']">
509 <!-- breve -->
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>&#x0306;</m:mo>
518     </m:mover>
519   </xsl:template>
520
521   <xsl:template match="tml:c[@name='bar']">
522 <!-- bar -->
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>&#x0304;</m:mo>
531     </m:mover>
532   </xsl:template>
533
534   <xsl:template match="tml:c[@name='vec']">
535 <!-- vec -->
536     <m:mover accent="true">
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>&#x20d7;</m:mo>
544     </m:mover>
545   </xsl:template>
546
547   <xsl:template match="tml:c[@name='overline']">
548 <!-- overline -->
549     <m:mover>
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">&#x0305;</m:mo>
557     </m:mover>
558   </xsl:template>
559
560   <xsl:template match="tml:c[@name='underline']">
561 <!-- underline -->
562     <m:munder>
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="*[1]"/>
569       <m:mo stretchy="true">&#x0332;</m:mo>
570     </m:munder>
571   </xsl:template>
572
573   <xsl:template match="tml:c[@name='sqrt']">
574 <!-- sqrt -->
575     <m:msqrt>
576       <xsl:if test="@id">
577         <xsl:attribute name="xref">
578           <xsl:value-of select="@id"/>
579         </xsl:attribute>
580       </xsl:if>
581       <xsl:apply-templates select="*"/>
582     </m:msqrt>
583   </xsl:template>
584
585   <xsl:template match="tml:c[@name='root']">
586 <!-- root -->
587     <m:mroot>
588       <xsl:if test="@id">
589         <xsl:attribute name="xref">
590           <xsl:value-of select="@id"/>
591         </xsl:attribute>
592       </xsl:if>
593       <xsl:choose>
594         <xsl:when test="count(*) &lt; 2">
595           <m:mrow/>
596           <xsl:apply-templates select="*[1]"/>
597         </xsl:when>
598         <xsl:otherwise>
599           <xsl:apply-templates select="*[2]"/>
600           <xsl:apply-templates select="*[1]"/>
601         </xsl:otherwise>
602       </xsl:choose>
603     </m:mroot>
604   </xsl:template>
605
606   <xsl:template match="tml:c[@name='frac']">
607 <!-- frac -->
608     <m:mfrac>
609       <xsl:if test="@id">
610         <xsl:attribute name="xref">
611           <xsl:value-of select="@id"/>
612         </xsl:attribute>
613       </xsl:if>
614       <xsl:apply-templates select="*[1]"/>
615       <xsl:apply-templates select="*[2]"/>
616     </m:mfrac>
617   </xsl:template>
618
619   <xsl:template match="tml:c[@name='over']">
620 <!-- over -->
621     <m:mfrac>
622       <xsl:if test="@id">
623         <xsl:attribute name="xref">
624           <xsl:value-of select="@id"/>
625         </xsl:attribute>
626       </xsl:if>
627       <xsl:apply-templates select="*[1]"/>
628       <xsl:apply-templates select="*[2]"/>
629     </m:mfrac>
630   </xsl:template>
631
632   <xsl:template match="tml:c[@name='atop']">
633 <!-- atop -->
634     <m:mfrac linethickness="0">
635       <xsl:if test="@id">
636         <xsl:attribute name="xref">
637           <xsl:value-of select="@id"/>
638         </xsl:attribute>
639       </xsl:if>
640       <xsl:apply-templates select="*[1]"/>
641       <xsl:apply-templates select="*[2]"/>
642     </m:mfrac>
643   </xsl:template>
644
645   <xsl:template match="tml:c[@name='choose']">
646 <!-- choose -->
647     <m:mrow>
648       <xsl:if test="@id">
649         <xsl:attribute name="xref">
650           <xsl:value-of select="@id"/>
651         </xsl:attribute>
652       </xsl:if>
653       <m:mo stretchy="true">(</m:mo>
654       <m:mfrac linethickness="0">
655         <xsl:apply-templates select="*[1]"/>
656         <xsl:apply-templates select="*[2]"/>
657       </m:mfrac>
658       <m:mo stretchy="true">)</m:mo>
659     </m:mrow>
660   </xsl:template>
661
662   <xsl:template match="tml:c[@name='brace']">
663 <!-- brace -->
664     <m:mrow>
665       <xsl:if test="@id">
666         <xsl:attribute name="xref">
667           <xsl:value-of select="@id"/>
668         </xsl:attribute>
669       </xsl:if>
670       <m:mo stretchy="true">{</m:mo>
671       <m:mfrac linethickness="0">
672         <xsl:apply-templates select="*[1]"/>
673         <xsl:apply-templates select="*[2]"/>
674       </m:mfrac>
675       <m:mo stretchy="true">}</m:mo>
676     </m:mrow>
677   </xsl:template>
678
679   <xsl:template match="tml:c[@name='brack']">
680 <!-- brack -->
681     <m:mrow>
682       <xsl:if test="@id">
683         <xsl:attribute name="xref">
684           <xsl:value-of select="@id"/>
685         </xsl:attribute>
686       </xsl:if>
687       <m:mo stretchy="true">[</m:mo>
688       <m:mfrac linethickness="0">
689         <xsl:apply-templates select="*[1]"/>
690         <xsl:apply-templates select="*[2]"/>
691       </m:mfrac>
692       <m:mo stretchy="true">]</m:mo>
693     </m:mrow>
694   </xsl:template>
695
696   <xsl:template match="tml:c[@name='displaystyle']">
697 <!-- displaystyle -->
698     <m:mstyle displaystyle="true">
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     </m:mstyle>
706   </xsl:template>
707
708   <xsl:template match="tml:c[@name='textstyle']">
709 <!-- textstyle -->
710     <m:mstyle scriptlevel="0">
711       <xsl:if test="@id">
712         <xsl:attribute name="xref">
713           <xsl:value-of select="@id"/>
714         </xsl:attribute>
715       </xsl:if>
716       <xsl:apply-templates select="*[1]"/>
717       <xsl:if test="tml:g/tml:cursor[@visible='1']">
718         <m:msub>
719           <m:mtext mathcolor="#808080">}</m:mtext>
720           <m:mtext><xsl:value-of select="@name"/></m:mtext>
721         </m:msub>
722       </xsl:if>
723     </m:mstyle>
724   </xsl:template>
725
726   <xsl:template match="tml:c[@name='scriptstyle']">
727 <!-- scriptstyle -->
728     <m:mstyle scriptlevel="1">
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='scriptscriptstyle']">
739 <!-- scriptscriptstyle -->
740     <m:mstyle scriptlevel="2">
741       <xsl:if test="@id">
742         <xsl:attribute name="xref">
743           <xsl:value-of select="@id"/>
744         </xsl:attribute>
745       </xsl:if>
746       <xsl:apply-templates select="*[1]"/>
747     </m:mstyle>
748   </xsl:template>
749
750   <xsl:template match="tml:c[@name='pmod']">
751 <!-- pmod -->
752     <m:mrow>
753       <xsl:if test="@id">
754         <xsl:attribute name="xref">
755           <xsl:value-of select="@id"/>
756         </xsl:attribute>
757       </xsl:if>
758       <m:mo>(</m:mo>
759       <m:mrow>
760         <m:mo>mod</m:mo>
761         <xsl:apply-templates select="*[1]"/>
762       </m:mrow>
763       <m:mo>)</m:mo>
764     </m:mrow>
765   </xsl:template>
766
767   <xsl:template match="tml:c[@name='rm']">
768 <!-- rm -->
769     <m:mstyle mathvariant="normal">
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='bf']">
780 <!-- bf -->
781     <m:mstyle mathvariant="bold">
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='tt']">
792 <!-- tt -->
793     <m:mstyle mathvariant="monospace">
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='sl']">
804 <!-- sl -->
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='it']">
816 <!-- it -->
817     <m:mstyle mathvariant="italic">
818       <xsl:if test="@id">
819         <xsl:attribute name="xref">
820           <xsl:value-of select="@id"/>
821         </xsl:attribute>
822       </xsl:if>
823       <xsl:apply-templates select="*[1]"/>
824     </m:mstyle>
825   </xsl:template>
826
827   <xsl:template match="tml:c[@name=',']">
828 <!-- , -->
829     <m:mspace width="thinmathspace">
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='&gt;']">
839 <!-- > -->
840     <m:mspace width="mediummathspace">
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="thickmathspace">
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 match="tml:c[@name='!']">
861 <!-- ! -->
862     <m:mspace width="-0.166667em">
863       <xsl:if test="@id">
864         <xsl:attribute name="xref">
865           <xsl:value-of select="@id"/>
866         </xsl:attribute>
867       </xsl:if>
868     </m:mspace>
869   </xsl:template>
870
871   <xsl:template name="table-content">
872       <xsl:choose>
873         <xsl:when test="tml:row">
874           <xsl:apply-templates select="tml:row"/>
875         </xsl:when>
876         <xsl:otherwise>
877           <m:mtr>
878             <m:mtd>
879               <xsl:apply-templates select="*"/>
880             </m:mtd>
881           </m:mtr>
882         </xsl:otherwise>
883       </xsl:choose>
884   </xsl:template>
885
886   <xsl:template match="tml:c[@name='matrix']">
887 <!-- matrix -->
888     <m:mtable>
889       <xsl:if test="@id">
890         <xsl:attribute name="xref">
891           <xsl:value-of select="@id"/>
892         </xsl:attribute>
893       </xsl:if>
894       <xsl:call-template name="table-content"/>
895     </m:mtable>
896   </xsl:template>
897
898   <xsl:template match="tml:row">
899     <m:mtr>
900       <xsl:apply-templates select="tml:cell"/>
901     </m:mtr>
902   </xsl:template>
903
904   <xsl:template match="tml:cell">
905     <m:mtd>
906       <xsl:apply-templates select="*"/>
907     </m:mtd>
908   </xsl:template>
909
910   <xsl:template match="tml:c[@name='pmatrix']">
911 <!-- pmatrix -->
912     <m:mrow>
913       <xsl:if test="@id">
914         <xsl:attribute name="xref">
915           <xsl:value-of select="@id"/>
916         </xsl:attribute>
917       </xsl:if>
918       <m:mo stretchy="true">(</m:mo>
919       <m:mtable>
920         <xsl:call-template name="table-content"/>
921       </m:mtable>
922       <m:mo stretchy="true">)</m:mo>
923     </m:mrow>
924   </xsl:template>
925
926   <xsl:template match="tml:c[@name='bordermatrix']">
927 <!-- bordermatrix -->
928     <m:mtable>
929       <xsl:if test="@id">
930         <xsl:attribute name="xref">
931           <xsl:value-of select="@id"/>
932         </xsl:attribute>
933       </xsl:if>
934       <m:mtr>
935         <xsl:apply-templates select="tml:row[1]/tml:cell[1]"/>
936         <m:mtd/>
937         <xsl:apply-templates select="tml:row[1]/tml:cell[position() &gt; 1]"/>
938         <m:mtd/>
939       </m:mtr>
940       <xsl:for-each select="tml:row[position() &gt; 1]">
941         <m:mtr>
942           <xsl:apply-templates select="tml:cell[1]"/>
943           <xsl:if test="position() = 1">
944             <m:mtd rowspan="{count(../tml:row) - 1}">
945               <m:mo stretchy="true">(</m:mo>
946             </m:mtd>
947           </xsl:if>
948           <xsl:apply-templates select="tml:cell[position() &gt; 1]"/>
949           <xsl:if test="position() = 1">
950             <m:mtd rowspan="{count(../tml:row) - 1}">
951               <m:mo stretchy="true">)</m:mo>
952             </m:mtd>
953           </xsl:if>         
954         </m:mtr>
955       </xsl:for-each>      
956     </m:mtable>
957   </xsl:template>
958
959   <xsl:template match="tml:c[@name='overbrace']">
960 <!-- overbrace -->
961     <m:mover>
962       <xsl:if test="@id">
963         <xsl:attribute name="xref">
964           <xsl:value-of select="@id"/>
965         </xsl:attribute>
966       </xsl:if>
967       <xsl:apply-templates select="*[1]"/>
968       <m:mo stretchy="true">????</m:mo>
969     </m:mover>>
970   </xsl:template>
971
972   <xsl:template match="tml:c[@name='underbrace']">
973 <!-- underbrace -->
974     <m:munder>
975       <xsl:if test="@id">
976         <xsl:attribute name="xref">
977           <xsl:value-of select="@id"/>
978         </xsl:attribute>
979       </xsl:if>
980       <xsl:apply-templates select="*[1]"/>
981       <m:mo stretchy="true">????</m:mo>
982     </m:munder>
983   </xsl:template>
984
985   <xsl:template match="tml:c[@name='cases']">
986 <!-- cases -->
987     <m:mrow>
988       <xsl:if test="@id">
989         <xsl:attribute name="xref">
990           <xsl:value-of select="@id"/>
991         </xsl:attribute>
992       </xsl:if>
993       <m:mo stretchy="true">{</m:mo>
994       <m:mtable>
995         <xsl:call-template name="table-content"/>
996       </m:mtable>
997     </m:mrow>
998   </xsl:template>
999
1000   <xsl:template match="tml:c[@name='red']">
1001 <!-- red  -->
1002     <m:mstyle mathcolor="red">
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='green']">
1013 <!-- green  -->
1014     <m:mstyle mathcolor="green">
1015       <xsl:if test="@id">
1016         <xsl:attribute name="xref">
1017           <xsl:value-of select="@id"/>
1018         </xsl:attribute>
1019         <xsl:apply-templates/>
1020       </xsl:if>
1021     </m:mstyle>
1022   </xsl:template>
1023
1024   <xsl:template match="tml:c[@name='duedelim']">
1025 <!-- duedelim  -->
1026     <m:mfrac>
1027       <xsl:if test="@id">
1028         <xsl:attribute name="xref">
1029           <xsl:value-of select="@id"/>
1030         </xsl:attribute>
1031       </xsl:if>
1032       <xsl:apply-templates select="*[1]"/>
1033       <xsl:apply-templates select="*[2]"/>
1034     </m:mfrac>
1035   </xsl:template>
1036
1037 </xsl:stylesheet>