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"
8 <xsl:output indent="yes"/>
10 <xsl:param name="id" select="/.."/>
12 <xsl:template match="/">
15 <xsl:apply-templates select="descendant::*[@id=$id]"/>
18 <xsl:apply-templates/>
23 <xsl:template match="tml:math">
26 <xsl:attribute name="xref">
27 <xsl:value-of select="@id"/>
30 <xsl:if test="@display='1'">
31 <xsl:attribute name="display">block</xsl:attribute>
33 <xsl:attribute name="display">block</xsl:attribute>
34 <xsl:apply-templates select="*"/>
38 <xsl:template match="tml:i">
41 <xsl:attribute name="xref">
42 <xsl:value-of select="@id"/>
45 <xsl:value-of select="@val"/>
49 <xsl:template match="tml:n">
52 <xsl:attribute name="xref">
53 <xsl:value-of select="@id"/>
56 <xsl:value-of select="@val"/>
60 <xsl:template match="tml:o">
63 <xsl:attribute name="xref">
64 <xsl:value-of select="@id"/>
67 <xsl:value-of select="@val"/>
71 <xsl:template name="cursor">
73 <xsl:when test="substring(@val,1,1)='\'">
76 <xsl:attribute name="xref">
77 <xsl:value-of select="@id"/>
80 <m:mo stretchy="false">〈</m:mo>
81 <m:mtext mathcolor="blue"><xsl:value-of select="@val"/></m:mtext>
82 <m:mo stretchy="false">〉</m:mo>
86 <m:mtext mathcolor="blue">
88 <xsl:attribute name="xref">
89 <xsl:value-of select="@id"/>
98 <xsl:template match="tml:cursor">
99 <xsl:param name="annotation" select="/.."/>
101 <xsl:when test="$annotation">
103 <xsl:call-template name="cursor"/>
105 <xsl:value-of select="$annotation"/>
110 <xsl:call-template name="cursor"/>
115 <xsl:template match="tml:sb[@under='1'][*[1]/tml:sp[@over='1']]">
118 <xsl:attribute name="xref">
119 <xsl:value-of select="@id"/>
122 <xsl:apply-templates select="*[1]/*[1]"/>
123 <xsl:apply-templates select="*[2]"/>
124 <xsl:apply-templates select="*[1]/*[2]"/>
128 <xsl:template match="tml:sb[@under='1']">
131 <xsl:attribute name="xref">
132 <xsl:value-of select="@id"/>
135 <xsl:apply-templates select="*[1]"/>
136 <xsl:apply-templates select="*[2]"/>
140 <xsl:template match="tml:sb[*[1][self::tml:sp[not(@over) or @over='0']]]">
143 <xsl:attribute name="xref">
144 <xsl:value-of select="@id"/>
147 <xsl:apply-templates select="*[1]/*[1]"/>
148 <xsl:apply-templates select="*[2]"/>
149 <xsl:apply-templates select="*[1]/*[2]"/>
153 <xsl:template match="tml:sb">
156 <xsl:attribute name="xref">
157 <xsl:value-of select="@id"/>
160 <xsl:apply-templates select="*[1]"/>
161 <xsl:apply-templates select="*[2]"/>
165 <xsl:template match="tml:sp[@over='1'][*[1]/tml:sb[@under='1']]">
168 <xsl:attribute name="xref">
169 <xsl:value-of select="@id"/>
172 <xsl:apply-templates select="*[1]/*[1]"/>
173 <xsl:apply-templates select="*[1]/*[2]"/>
174 <xsl:apply-templates select="*[2]"/>
178 <xsl:template match="tml:sp[@over='1']">
181 <xsl:attribute name="xref">
182 <xsl:value-of select="@id"/>
185 <xsl:apply-templates select="*[1]"/>
186 <xsl:apply-templates select="*[2]"/>
190 <xsl:template match="tml:sp[*[1][self::tml:sb[not(@over) or @over='0']]]">
193 <xsl:attribute name="xref">
194 <xsl:value-of select="@id"/>
197 <xsl:apply-templates select="*[1]/*[1]"/>
198 <xsl:apply-templates select="*[1]/*[2]"/>
199 <xsl:apply-templates select="*[2]"/>
203 <xsl:template match="tml:sp">
206 <xsl:attribute name="xref">
207 <xsl:value-of select="@id"/>
210 <xsl:apply-templates select="*[1]"/>
211 <xsl:apply-templates select="*[2]"/>
215 <xsl:template match="tml:g">
216 <xsl:param name="annotation" select="/.."/>
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>
223 <xsl:when test="tml:cursor">
224 <m:mstyle mathbackground="#e0e0e0">
226 <xsl:attribute name="xref">
227 <xsl:value-of select="@id"/>
231 <xsl:apply-templates select="*">
232 <xsl:with-param name="annotation" select="$annotation"/>
233 </xsl:apply-templates>
240 <xsl:attribute name="xref">
241 <xsl:value-of select="@id"/>
244 <xsl:apply-templates select="*">
245 <xsl:with-param name="annotation" select="$annotation"/>
246 </xsl:apply-templates>
252 <xsl:template match="tml:row">
254 <xsl:apply-templates select="cell"/>
258 <xsl:template match="tml:cell">
260 <xsl:apply-templates select="*"/>
264 <!--/// CONTROL SEQUENCES ///-->
266 <xsl:template match="tml:c">
269 <xsl:attribute name="xref">
270 <xsl:value-of select="@id"/>
273 <m:mtext mathcolor="blue">\<xsl:value-of select="@name"/></m:mtext>
274 <xsl:apply-templates select="*"/>
278 <xsl:template match="tml:c[@name='fun' and count(*)=3]">
281 <xsl:attribute name="xref">
282 <xsl:value-of select="@id"/>
285 <m:mo mathcolor="red">λ</m:mo>
286 <xsl:apply-templates select="*[1]"/>
288 <xsl:apply-templates select="*[2]"/>
290 <xsl:apply-templates select="*[3]"/>
294 <xsl:template match="tml:c[@name='not'][*[1][self::tml:o]]">
298 <xsl:attribute name="xref">
299 <xsl:value-of select="@id"/>
302 <xsl:value-of select="*[1]/@val"/≯</m:mo>
305 <xsl:template match="tml:c[@name='buildrel']">
309 <xsl:attribute name="xref">
310 <xsl:value-of select="@id"/>
313 <xsl:apply-templates select="*[2]"/>
314 <xsl:apply-templates select="*[1]"/>
318 <xsl:template match="tml:c[@name='left' or @name='right'][*[1][self::tml:o]]">
320 <m:mo stretchy="true">
322 <xsl:attribute name="xref">
323 <xsl:value-of select="@id"/>
326 <xsl:value-of select="*[1]/@val"/>
330 <xsl:template match="tml:c[@name='bigl' or @name='bigr' or @name='bigm' or @name='big'][*[1][self::tml:o]]">
332 <m:mo stretchy="true" minsize="8.5pt">
334 <xsl:attribute name="xref">
335 <xsl:value-of select="@id"/>
338 <xsl:value-of select="*[1]/@val"/>
342 <xsl:template match="tml:c[@name='Bigl' or @name='Bigr' or @name='Bigm'][*[1][self::tml:o]]">
344 <m:mo stretchy="true" minsize="11.5pt">
346 <xsl:attribute name="xref">
347 <xsl:value-of select="@id"/>
350 <xsl:value-of select="*[1]/@val"/>
354 <xsl:template match="tml:c[@name='biggl' or @name='biggr' or @name='biggm'][*[1][self::tml:o]]">
356 <m:mo stretchy="true" minsize="14.5pt">
358 <xsl:attribute name="xref">
359 <xsl:value-of select="@id"/>
362 <xsl:value-of select="*[1]/@val"/>
366 <xsl:template match="tml:c[@name='Biggl' or @name='Biggr' or @name='Biggm'][*[1][self::tml:o]]">
368 <m:mo stretchy="true" minsize="17.5pt">
370 <xsl:attribute name="xref">
371 <xsl:value-of select="@id"/>
374 <xsl:value-of select="*[1]/@val"/>
378 <xsl:template match="tml:c[@name='hat']">
380 <m:mover accent="true">
382 <xsl:attribute name="xref">
383 <xsl:value-of select="@id"/>
386 <xsl:apply-templates select="*[1]"/>
387 <m:mo>̂</m:mo>
391 <xsl:template match="tml:c[@name='widehat']">
393 <m:mover accent="false">
395 <xsl:attribute name="xref">
396 <xsl:value-of select="@id"/>
399 <xsl:apply-templates select="*[1]"/>
400 <m:mo stretchy="true">̂</m:mo>
404 <xsl:template match="tml:c[@name='check']">
406 <m:mover accent="true">
408 <xsl:attribute name="xref">
409 <xsl:value-of select="@id"/>
412 <xsl:apply-templates select="*[1]"/>
413 <m:mo>̌</m:mo>
417 <xsl:template match="tml:c[@name='tilde']">
419 <m:mover accent="true">
421 <xsl:attribute name="xref">
422 <xsl:value-of select="@id"/>
425 <xsl:apply-templates select="*[1]"/>
426 <m:mo>̃</m:mo>
430 <xsl:template match="tml:c[@name='widetilde']">
434 <xsl:attribute name="xref">
435 <xsl:value-of select="@id"/>
438 <xsl:apply-templates select="*[1]"/>
439 <m:mo stretchy="true">̃</m:mo>
443 <xsl:template match="tml:c[@name='acute']">
445 <m:mover accent="true">
447 <xsl:attribute name="xref">
448 <xsl:value-of select="@id"/>
451 <xsl:apply-templates select="*[1]"/>
452 <m:mo>́</m:mo>
456 <xsl:template match="tml:c[@name='grave']">
458 <m:mover accent="true">
460 <xsl:attribute name="xref">
461 <xsl:value-of select="@id"/>
464 <xsl:apply-templates select="*[1]"/>
465 <m:mo>̀</m:mo>
469 <xsl:template match="tml:c[@name='dot']">
471 <m:mover accent="true">
473 <xsl:attribute name="xref">
474 <xsl:value-of select="@id"/>
477 <xsl:apply-templates select="*[1]"/>
478 <m:mo>̇</m:mo>
482 <xsl:template match="tml:c[@name='ddot']">
484 <m:mover accent="true">
486 <xsl:attribute name="xref">
487 <xsl:value-of select="@id"/>
490 <xsl:apply-templates select="*[1]"/>
491 <m:mo>̈</m:mo>
495 <xsl:template match="tml:c[@name='breve']">
497 <m:mover accent="true">
499 <xsl:attribute name="xref">
500 <xsl:value-of select="@id"/>
503 <xsl:apply-templates select="*[1]"/>
504 <m:mo>̆</m:mo>
508 <xsl:template match="tml:c[@name='bar']">
510 <m:mover accent="true">
512 <xsl:attribute name="xref">
513 <xsl:value-of select="@id"/>
516 <xsl:apply-templates select="*[1]"/>
517 <m:mo>̄</m:mo>
521 <xsl:template match="tml:c[@name='vec']">
523 <m:mover accent="true">
525 <xsl:attribute name="xref">
526 <xsl:value-of select="@id"/>
529 <xsl:apply-templates select="*[1]"/>
530 <m:mo>⃗</m:mo>
534 <xsl:template match="tml:c[@name='overline']">
538 <xsl:attribute name="xref">
539 <xsl:value-of select="@id"/>
542 <xsl:apply-templates select="*[1]"/>
543 <m:mo stretchy="true">̅</m:mo>
547 <xsl:template match="tml:c[@name='underline']">
551 <xsl:attribute name="xref">
552 <xsl:value-of select="@id"/>
555 <xsl:apply-templates select="*[1]"/>
556 <m:mo stretchy="true">̲</m:mo>
560 <xsl:template match="tml:c[@name='sqrt']">
564 <xsl:attribute name="xref">
565 <xsl:value-of select="@id"/>
568 <xsl:apply-templates select="*"/>
572 <xsl:template match="tml:c[@name='root']">
576 <xsl:attribute name="xref">
577 <xsl:value-of select="@id"/>
580 <xsl:apply-templates select="*[2]"/>
581 <xsl:apply-templates select="*[1]"/>
585 <xsl:template match="tml:c[@name='frac']">
589 <xsl:attribute name="xref">
590 <xsl:value-of select="@id"/>
593 <xsl:apply-templates select="*[1]"/>
594 <xsl:apply-templates select="*[2]"/>
598 <xsl:template match="tml:c[@name='over']">
602 <xsl:attribute name="xref">
603 <xsl:value-of select="@id"/>
606 <xsl:apply-templates select="*[1]"/>
607 <xsl:apply-templates select="*[2]"/>
611 <xsl:template match="tml:c[@name='atop']">
613 <m:mfrac linethickness="0">
615 <xsl:attribute name="xref">
616 <xsl:value-of select="@id"/>
619 <xsl:apply-templates select="*[1]"/>
620 <xsl:apply-templates select="*[2]"/>
624 <xsl:template match="tml:c[@name='choose']">
628 <xsl:attribute name="xref">
629 <xsl:value-of select="@id"/>
632 <m:mo stretchy="true">(</m:mo>
633 <m:mfrac linethickness="0">
634 <xsl:apply-templates select="*[1]"/>
635 <xsl:apply-templates select="*[2]"/>
637 <m:mo stretchy="true">)</m:mo>
641 <xsl:template match="tml:c[@name='brace']">
645 <xsl:attribute name="xref">
646 <xsl:value-of select="@id"/>
649 <m:mo stretchy="true">{</m:mo>
650 <m:mfrac linethickness="0">
651 <xsl:apply-templates select="*[1]"/>
652 <xsl:apply-templates select="*[2]"/>
654 <m:mo stretchy="true">}</m:mo>
658 <xsl:template match="tml:c[@name='brack']">
662 <xsl:attribute name="xref">
663 <xsl:value-of select="@id"/>
666 <m:mo stretchy="true">[</m:mo>
667 <m:mfrac linethickness="0">
668 <xsl:apply-templates select="*[1]"/>
669 <xsl:apply-templates select="*[2]"/>
671 <m:mo stretchy="true">]</m:mo>
675 <xsl:template match="tml:c[@name='displaystyle']">
676 <!-- displaystyle -->
677 <m:mstyle displaystyle="true">
679 <xsl:attribute name="xref">
680 <xsl:value-of select="@id"/>
683 <xsl:apply-templates select="*[1]"/>
687 <xsl:template match="tml:c[@name='textstyle']">
689 <m:mstyle scriptlevel="0">
691 <xsl:attribute name="xref">
692 <xsl:value-of select="@id"/>
695 <xsl:apply-templates select="*[1]"/>
696 <xsl:if test="tml:g/tml:cursor">
698 <m:mtext mathcolor="#808080">}</m:mtext>
699 <m:mtext><xsl:value-of select="@name"/></m:mtext>
705 <xsl:template match="tml:c[@name='scriptstyle']">
707 <m:mstyle scriptlevel="1">
709 <xsl:attribute name="xref">
710 <xsl:value-of select="@id"/>
713 <xsl:apply-templates select="*[1]"/>
717 <xsl:template match="tml:c[@name='scriptscriptstyle']">
718 <!-- scriptscriptstyle -->
719 <m:mstyle scriptlevel="2">
721 <xsl:attribute name="xref">
722 <xsl:value-of select="@id"/>
725 <xsl:apply-templates select="*[1]"/>
729 <xsl:template match="tml:c[@name='pmod']">
733 <xsl:attribute name="xref">
734 <xsl:value-of select="@id"/>
740 <xsl:apply-templates select="*[1]"/>
746 <xsl:template match="tml:c[@name='rm']">
748 <m:mstyle mathvariant="normal">
750 <xsl:attribute name="xref">
751 <xsl:value-of select="@id"/>
754 <xsl:apply-templates select="*[1]"/>
758 <xsl:template match="tml:c[@name='bf']">
760 <m:mstyle mathvariant="bold">
762 <xsl:attribute name="xref">
763 <xsl:value-of select="@id"/>
766 <xsl:apply-templates select="*[1]"/>
770 <xsl:template match="tml:c[@name='tt']">
772 <m:mstyle mathvariant="monospace">
774 <xsl:attribute name="xref">
775 <xsl:value-of select="@id"/>
778 <xsl:apply-templates select="*[1]"/>
782 <xsl:template match="tml:c[@name='sl']">
784 <m:mstyle mathvariant="italic">
786 <xsl:attribute name="xref">
787 <xsl:value-of select="@id"/>
790 <xsl:apply-templates select="*[1]"/>
794 <xsl:template match="tml:c[@name='it']">
796 <m:mstyle mathvariant="italic">
798 <xsl:attribute name="xref">
799 <xsl:value-of select="@id"/>
802 <xsl:apply-templates select="*[1]"/>
806 <xsl:template match="tml:c[@name=',']">
808 <m:mspace width="thinmathspace">
810 <xsl:attribute name="xref">
811 <xsl:value-of select="@id"/>
817 <xsl:template match="tml:c[@name='>']">
819 <m:mspace width="mediummathspace">
821 <xsl:attribute name="xref">
822 <xsl:value-of select="@id"/>
828 <xsl:template match="tml:c[@name=';']">
830 <m:mspace width="thickmathspace">
832 <xsl:attribute name="xref">
833 <xsl:value-of select="@id"/>
839 <xsl:template match="tml:c[@name='!']">
841 <m:mspace width="-0.166667em">
843 <xsl:attribute name="xref">
844 <xsl:value-of select="@id"/>
850 <xsl:template name="table-content">
852 <xsl:when test="tml:row">
853 <xsl:apply-templates select="tml:row"/>
858 <xsl:apply-templates select="*"/>
865 <xsl:template match="tml:c[@name='matrix']">
869 <xsl:attribute name="xref">
870 <xsl:value-of select="@id"/>
873 <xsl:call-template name="table-content"/>
877 <xsl:template match="tml:row">
879 <xsl:apply-templates select="tml:cell"/>
883 <xsl:template match="tml:cell">
885 <xsl:apply-templates select="*"/>
889 <xsl:template match="tml:c[@name='pmatrix']">
893 <xsl:attribute name="xref">
894 <xsl:value-of select="@id"/>
897 <m:mo stretchy="true">(</m:mo>
899 <xsl:call-template name="table-content"/>
901 <m:mo stretchy="true">)</m:mo>
905 <xsl:template match="tml:c[@name='bordermatrix']">
906 <!-- bordermatrix -->
909 <xsl:attribute name="xref">
910 <xsl:value-of select="@id"/>
914 <xsl:apply-templates select="tml:row[1]/tml:cell[1]"/>
916 <xsl:apply-templates select="tml:row[1]/tml:cell[position() > 1]"/>
919 <xsl:for-each select="tml:row[position() > 1]">
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>
927 <xsl:apply-templates select="tml:cell[position() > 1]"/>
928 <xsl:if test="position() = 1">
929 <m:mtd rowspan="{count(../tml:row) - 1}">
930 <m:mo stretchy="true">)</m:mo>
938 <xsl:template match="tml:c[@name='overbrace']">
942 <xsl:attribute name="xref">
943 <xsl:value-of select="@id"/>
946 <xsl:apply-templates select="*[1]"/>
947 <m:mo stretchy="true">????</m:mo>
951 <xsl:template match="tml:c[@name='underbrace']">
955 <xsl:attribute name="xref">
956 <xsl:value-of select="@id"/>
959 <xsl:apply-templates select="*[1]"/>
960 <m:mo stretchy="true">????</m:mo>
964 <xsl:template match="tml:c[@name='cases']">
968 <xsl:attribute name="xref">
969 <xsl:value-of select="@id"/>
972 <m:mo stretchy="true">{</m:mo>
974 <xsl:call-template name="table-content"/>
979 <xsl:template match="tml:c[@name='red']">
981 <m:mstyle mathcolor="red">
983 <xsl:attribute name="xref">
984 <xsl:value-of select="@id"/>
986 <xsl:apply-templates/>
991 <xsl:template match="tml:c[@name='green']">
993 <m:mstyle mathcolor="green">
995 <xsl:attribute name="xref">
996 <xsl:value-of select="@id"/>
998 <xsl:apply-templates/>
1003 <xsl:template match="tml:c[@name='duedelim']">
1007 <xsl:attribute name="xref">
1008 <xsl:value-of select="@id"/>
1011 <xsl:apply-templates select="*[1]"/>
1012 <xsl:apply-templates select="*[2]"/>