]> matita.cs.unibo.it Git - helm.git/blob - helm/style/style_prima_del_linguaggio_naturale/mmlextension_irene.xsl
Added style before natural language synthesis
[helm.git] / helm / style / style_prima_del_linguaggio_naturale / mmlextension_irene.xsl
1 <?xml version="1.0"?>
2
3 <!--***********************************************************************--> 
4 <!-- Extension to the XSLT version 0.07 of MathML content to presentation: -->
5 <!-- First draft: February 19 2000, Andrea Asperti, Irene Schena           -->
6 <!-- Revised: March 3 2000, Irene Schena                                   -->
7 <!-- Revised: March 15 2000, Claudio Sacerdoti Coen, Irene Schena          -->
8 <!-- Revised: March 21 2000, Irene Schena                                  -->
9 <!--***********************************************************************--> 
10
11 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
12                               xmlns:m="http://www.w3.org/1998/Math/MathML"
13                               xmlns:helm="http://www.cs.unibo.it/helm">
14
15 <xsl:import href="mml2mmlv1_0.xsl"/>
16
17 <!--***********************************************************************-->
18 <!-- Parameter affecting line-breaking                                     -->
19 <!--***********************************************************************-->
20
21 <xsl:variable name="framewidth" select="30"/>
22
23 <!--***********************************************************************-->
24 <!-- Gli oggetti sono stampati come mtext all'interno di una marca toplevel-->
25 <!-- math ma al di fuori di semantics. Ora vi sono tanti semantics quanti  -->
26 <!-- sono i termini: la presentation per un termine e' generata come primo -->
27 <!-- figlio di un semantics e l'originario content viene inserito nel      -->
28 <!-- nel secondo figlio di semantics, annotation-xml                       -->
29 <!--***********************************************************************-->
30
31 <!--**********************-->
32 <!--        OBJECTS       -->
33 <!--**********************-->
34
35 <!-- DEFINITION -->
36
37 <xsl:template match="Definition">
38     <m:math>
39      <m:mtable align="baseline 1" equalrows="false" columnalign="left" helm:xref="{@helm:xref}">
40       <m:mtr>
41        <m:mtd>
42         <m:mrow>
43          <m:mtext>DEFINITION <xsl:value-of select="@name"/>(<xsl:if test="string(./Params) != &quot;&quot;"><xsl:value-of select="Params"/></xsl:if>) OF TYPE</m:mtext>
44         </m:mrow>
45        </m:mtd>
46       </m:mtr>
47       <m:mtr>
48        <m:mtd>
49         <m:mrow>
50          <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
51          <xsl:apply-templates select="type/*[1]"/>
52         </m:mrow>
53        </m:mtd>
54       </m:mtr>
55       <m:mtr>
56        <m:mtd>
57         <m:mrow>
58          <m:mtext>AS</m:mtext>
59         </m:mrow>
60        </m:mtd>
61       </m:mtr>
62       <m:mtr>
63        <m:mtd>
64         <m:mrow>
65          <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
66          <xsl:apply-templates select="body/*[1]"/>
67         </m:mrow>
68        </m:mtd>
69       </m:mtr>
70      </m:mtable>
71     </m:math>
72 </xsl:template>
73
74 <!-- AXIOM -->
75
76 <xsl:template match="Axiom">
77     <m:math>
78      <m:mtable align="baseline 1" equalrows="false" columnalign="left" helm:xref="{@helm:xref}">
79       <m:mtr>
80        <m:mtd>
81         <m:mrow>
82          <m:mtext>AXIOM <xsl:value-of select="@name"/>(<xsl:if test="string(./Params) != &quot;&quot;"><xsl:value-of select="Params"/></xsl:if>) OF TYPE</m:mtext>
83         </m:mrow>
84        </m:mtd>
85       </m:mtr>
86       <m:mtr>
87        <m:mtd>
88         <m:mrow>
89          <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
90          <xsl:apply-templates select="type/*[1]"/>
91         </m:mrow>
92        </m:mtd>
93       </m:mtr>
94      </m:mtable>
95     </m:math>
96 </xsl:template>
97
98 <!-- UNFINISHED PROOF -->
99
100 <xsl:template match="CurrentProof">
101     <m:math>
102      <m:mtable align="baseline 1" equalrows="false" columnalign="left" helm:xref="{@helm:xref}">
103       <m:mtr>
104        <m:mtd>
105         <m:mrow>
106          <m:mtext>UNFINISHED PROOF <xsl:value-of select="@name"/>(<xsl:if test="string(./Params) != &quot;&quot;"><xsl:value-of select="Params"/></xsl:if>)</m:mtext>
107         </m:mrow>
108        </m:mtd>
109       </m:mtr>
110       <m:mtr>
111        <m:mtd>
112         <m:mrow>
113          <m:mtext>THESIS:</m:mtext>
114         </m:mrow>
115        </m:mtd>
116       </m:mtr>
117       <m:mtr>
118        <m:mtd>
119         <m:mrow>
120          <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
121          <xsl:apply-templates select="type/*[1]"/>
122         </m:mrow>
123        </m:mtd>
124       </m:mtr>
125       <m:mtr>
126        <m:mtd>
127         <m:mrow>
128          <m:mtext>CONJECTURES:</m:mtext>
129         </m:mrow>
130        </m:mtd>
131       </m:mtr>
132       <xsl:for-each select="Conjecture">
133       <m:mtr>
134        <m:mtd>
135         <m:mrow>
136          <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
137          <m:mtext><xsl:value-of select="./@no"/>:</m:mtext>
138          <xsl:apply-templates select="./*[1]"/>
139         </m:mrow>
140        </m:mtd>
141       </m:mtr>
142       </xsl:for-each>
143       <m:mtr>
144        <m:mtd>
145         <m:mrow>
146          <m:mtext>CORRESPONDING PROOF:</m:mtext>
147         </m:mrow>
148        </m:mtd>
149       </m:mtr>
150       <m:mtr>
151        <m:mtd>
152         <m:mrow>
153          <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
154          <xsl:apply-templates select="body/*[1]"/>
155         </m:mrow>
156        </m:mtd>
157       </m:mtr>
158      </m:mtable>
159     </m:math>
160 </xsl:template>
161
162 <!-- MUTUAL INDUCTIVE DEFINITION -->
163
164 <xsl:template match="InductiveDefinition">
165     <m:math>
166      <m:mtable align="baseline 1" equalrows="false" columnalign="left" helm:xref="{@helm:xref}">
167      <xsl:for-each select="InductiveType">
168       <m:mtr>
169        <m:mtd>
170         <m:mrow>
171          <xsl:choose>
172          <xsl:when test="position() = 1">
173           <xsl:choose>
174           <xsl:when test="string(./@inductive) = &quot;true&quot;">
175            <m:mtext>INDUCTIVE DEFINITION</m:mtext>
176           </xsl:when>
177           <xsl:otherwise>
178            <m:mtext>COINDUCTIVE DEFINITION</m:mtext>
179           </xsl:otherwise>
180           </xsl:choose>  
181          </xsl:when>
182          <xsl:otherwise>
183           <m:mtext>AND</m:mtext>
184          </xsl:otherwise>
185          </xsl:choose>
186          <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
187          <m:mtext><xsl:value-of select="./@name"/>(<xsl:if test="string(../Params) != &quot;&quot;"><xsl:value-of select="../Params"/></xsl:if>)</m:mtext>
188         </m:mrow>
189        </m:mtd>
190       </m:mtr>
191       <m:mtr>
192        <m:mtd>
193         <m:mrow> 
194          <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
195          <m:mtext>[</m:mtext>
196          <xsl:choose>
197          <xsl:when test="string(../Param) != &quot;&quot;">         
198           <m:mtable align="baseline 1" equalrows="false" columnalign="left">
199            <xsl:for-each select="../Param">
200             <m:mtr>
201              <m:mtd>
202               <m:mrow>   
203                <m:mi><xsl:value-of select="./@name"/></m:mi>
204                <m:mo>:</m:mo>
205                <xsl:apply-templates select="*"/>
206               </m:mrow>
207              </m:mtd>
208             </m:mtr>
209            </xsl:for-each>
210             <m:mtr>
211              <m:mtd>
212               <m:mrow>
213                <m:mtext>]</m:mtext>
214               </m:mrow>
215              </m:mtd>
216             </m:mtr>
217           </m:mtable>
218          </xsl:when>
219          <xsl:otherwise>
220           <m:mtext>]</m:mtext>
221          </xsl:otherwise>
222          </xsl:choose>
223         </m:mrow>
224        </m:mtd>
225       </m:mtr>
226       <m:mtr>
227        <m:mtd>
228         <m:mrow>
229          <m:mtext>OF ARITY</m:mtext>
230         </m:mrow>
231        </m:mtd>
232       </m:mtr>
233       <m:mtr>
234        <m:mtd>
235         <m:mrow>
236          <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
237          <xsl:apply-templates select="./arity/*[1]"/>
238         </m:mrow>
239        </m:mtd>
240       </m:mtr>
241       <m:mtr>
242        <m:mtd>
243         <m:mrow>
244          <m:mtext>BUILT FROM</m:mtext>
245         </m:mrow>
246        </m:mtd>
247       </m:mtr>
248       <xsl:for-each select="./Constructor">
249       <m:mtr>
250        <m:mtd>
251         <m:mrow>
252          <xsl:choose>
253          <xsl:when test="position() = 1">
254           <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
255          </xsl:when>
256          <xsl:otherwise>
257           <m:mtext>|</m:mtext>
258           <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
259          </xsl:otherwise>
260          </xsl:choose>
261          <m:mtext><xsl:value-of select="./@name"/> OF</m:mtext>
262          <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
263          <xsl:apply-templates select="./*[1]"/>
264         </m:mrow>
265        </m:mtd>
266       </m:mtr>
267       </xsl:for-each>
268      </xsl:for-each>
269      </m:mtable>
270     </m:math>
271 </xsl:template>
272
273 <!-- VARIABLE -->
274
275 <xsl:template match="Variable">
276     <m:math>
277      <m:mtable align="baseline 1" equalrows="false" columnalign="left" helm:xref="{@helm:xref}">
278       <m:mtr>
279        <m:mtd>
280         <m:mrow>
281          <m:mtext>VARIABLE <xsl:value-of select="@name"/> OF TYPE</m:mtext>
282         </m:mrow>
283        </m:mtd>
284       </m:mtr>
285       <m:mtr>
286        <m:mtd>
287         <m:mrow>
288          <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
289          <xsl:apply-templates select="type/*[1]"/>
290         </m:mrow>
291        </m:mtd>
292       </m:mtr>
293      </m:mtable>
294     </m:math>
295 </xsl:template>
296
297 <!--**********************-->
298 <!--        TERMS         -->
299 <!--**********************-->
300
301 <!-- CSYMBOL -->
302
303 <xsl:template match="m:apply[m:csymbol]">
304     <xsl:variable name="name"><xsl:value-of select="m:csymbol"/></xsl:variable>
305     <xsl:variable name="charlength"><xsl:apply-templates select="m:csymbol" mode="charcount"/></xsl:variable>
306     <m:mrow helm:xref="{@helm:xref}">
307      <xsl:choose>
308       <xsl:when test="$name='prod'">
309        <xsl:choose>
310        <xsl:when test="$charlength >= $framewidth">
311         <xsl:variable name="charlength"><xsl:apply-templates select="m:bvar/m:type" mode="charcount"><xsl:with-param name="nosibling" select="1"/></xsl:apply-templates></xsl:variable>
312         <m:mtable align="baseline 1" equalrows="false" columnalign="left">
313          <m:mtr>
314           <m:mtd>
315            <m:mrow>
316             <m:mo color="Blue">&#x03a0;</m:mo>
317             <xsl:apply-templates select="m:bvar/m:ci"/>
318             <m:mo>:</m:mo>
319             <xsl:if test="$framewidth > $charlength">
320              <xsl:apply-templates select="m:bvar/m:type"/>
321             </xsl:if>
322            </m:mrow>
323           </m:mtd>
324          </m:mtr>
325          <xsl:if test="$charlength >= $framewidth">
326          <m:mtr>
327           <m:mtd>
328            <m:mrow>
329             <m:mphantom><m:mtext>.</m:mtext></m:mphantom>
330             <xsl:apply-templates select="m:bvar/m:type"/>
331            </m:mrow>
332           </m:mtd>
333          </m:mtr>
334          </xsl:if>
335          <m:mtr>
336           <m:mtd>
337            <m:mrow>
338             <m:mo>.</m:mo>
339             <xsl:apply-templates select="*[position()=3]"/>
340            </m:mrow>
341           </m:mtd>
342          </m:mtr>
343         </m:mtable>
344        </xsl:when>
345        <xsl:otherwise>
346         <m:mo color="Blue">&#x03a0;</m:mo>
347         <xsl:apply-templates select="m:bvar/m:ci"/>
348         <m:mo>:</m:mo>
349         <xsl:apply-templates select="m:bvar/m:type"/>
350         <m:mo>.</m:mo>
351         <xsl:apply-templates select="*[position()=3]"/>
352        </xsl:otherwise>
353        </xsl:choose> 
354       </xsl:when>
355       <xsl:when test="$name='arrow'">
356        <xsl:choose>
357        <xsl:when test="$charlength >= $framewidth">
358         <m:mtable align="baseline 1" equalrows="false" columnalign="left">
359          <m:mtr>
360           <m:mtd>
361            <m:mrow>
362             <m:mo stretchy="false">(</m:mo>
363             <xsl:apply-templates select="*[position()=2]"/>
364            </m:mrow>
365           </m:mtd>
366          </m:mtr>
367          <m:mtr>
368           <m:mtd>
369            <m:mrow>
370             <m:mo color="Blue">&#x2192;</m:mo>
371             <xsl:apply-templates select="*[position()=3]"/>
372            </m:mrow>
373           </m:mtd>
374          </m:mtr>
375          <m:mtr>
376           <m:mtd>
377            <m:mrow>
378             <m:mo stretchy="false">)</m:mo>
379            </m:mrow>
380           </m:mtd>
381          </m:mtr>
382         </m:mtable>
383        </xsl:when>
384        <xsl:otherwise>
385         <m:mo stretchy="false">(</m:mo>
386         <xsl:apply-templates select="*[position()=2]"/>
387         <m:mo color="Blue">&#x2192;</m:mo>
388         <xsl:apply-templates select="*[position()=3]"/>
389         <m:mo stretchy="false">)</m:mo>
390        </xsl:otherwise>
391        </xsl:choose>
392       </xsl:when>
393       <xsl:when test="$name='app'">
394        <xsl:choose>
395        <xsl:when test="$charlength >= $framewidth">
396         <m:mtable align="baseline 1" equalrows="false" columnalign="left">
397          <m:mtr>
398           <m:mtd>
399            <m:mrow>
400             <m:mo stretchy="false">(</m:mo>
401             <xsl:apply-templates select="*[position()=2]"/>
402            </m:mrow>
403           </m:mtd>
404          </m:mtr>
405          <xsl:for-each select="*[position()>2]">
406          <m:mtr>
407           <m:mtd>
408            <m:mrow>
409             <m:mphantom><m:mtext>(</m:mtext></m:mphantom>
410             <xsl:apply-templates select="."/>
411            </m:mrow>
412           </m:mtd>
413          </m:mtr>
414          </xsl:for-each>
415          <m:mtr>
416           <m:mtd>
417            <m:mrow>
418             <m:mo stretchy="false">)</m:mo>
419            </m:mrow>
420           </m:mtd>
421          </m:mtr>
422         </m:mtable>
423        </xsl:when>
424        <xsl:otherwise>
425         <m:mo stretchy="false">(</m:mo>
426         <xsl:apply-templates select="*[position()=2]"/>
427         <xsl:for-each select="*[position()>2]">
428          <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
429          <xsl:apply-templates select="."/>
430         </xsl:for-each>
431         <m:mo stretchy="false">)</m:mo>
432        </xsl:otherwise>
433        </xsl:choose>
434       </xsl:when>
435       <xsl:when test="$name='cast'">
436        <xsl:choose>
437        <xsl:when test="$charlength >= $framewidth">
438         <m:mtable align="baseline 1" equalrows="false" columnalign="left">
439          <m:mtr>
440           <m:mtd>
441            <m:mrow>
442             <m:mo stretchy="false">(</m:mo>
443             <xsl:apply-templates select="*[position()=2]"/>
444            </m:mrow>
445           </m:mtd>
446          </m:mtr>
447          <m:mtr>
448           <m:mtd>
449            <m:mrow>
450             <m:mo color="Yellow">:></m:mo>
451             <xsl:apply-templates select="*[position()=3]"/>
452            </m:mrow>
453           </m:mtd>
454          </m:mtr>
455          <m:mtr>
456           <m:mtd>
457            <m:mrow>
458             <m:mo stretchy="false">)</m:mo>
459            </m:mrow>
460           </m:mtd>
461          </m:mtr>
462         </m:mtable>
463        </xsl:when>
464        <xsl:otherwise>
465         <m:mo stretchy="false">(</m:mo>
466         <xsl:apply-templates select="*[position()=2]"/>
467         <m:mo color="Yellow">:></m:mo>
468         <xsl:apply-templates select="*[position()=3]"/>
469         <m:mo stretchy="false">)</m:mo>
470        </xsl:otherwise>
471        </xsl:choose>
472       </xsl:when>
473       <xsl:when test="$name='Prop'">
474        <m:mo>Prop</m:mo>
475       </xsl:when>
476       <xsl:when test="$name='Set'">
477        <m:mo>Set</m:mo>
478       </xsl:when>
479       <xsl:when test="$name='Type'">
480        <m:mo>Type</m:mo>
481       </xsl:when>
482       <xsl:when test="$name='mutcase'">
483        <xsl:choose>
484        <xsl:when test="$charlength >= $framewidth">
485         <xsl:variable name="charlength"><xsl:apply-templates select="*[position()=2]" mode="charcount"><xsl:with-param name="nosibling" select="1"/></xsl:apply-templates></xsl:variable>
486         <m:mtable align="baseline 1" equalrows="false" columnalign="left">
487          <m:mtr>
488           <m:mtd>
489            <m:mrow>
490             <m:mo>&lt;</m:mo>
491             <xsl:apply-templates select="*[position()=2]"/>
492             <xsl:if test="$framewidth > $charlength">
493              <m:mo>&gt;</m:mo>
494              <m:mo>CASES</m:mo>
495              <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
496              <xsl:apply-templates select="*[position()=3]"/>
497             </xsl:if>
498            </m:mrow>
499           </m:mtd>
500          </m:mtr>
501          <xsl:if test="$charlength >= $framewidth">
502          <m:mtr>
503           <m:mtd>
504            <m:mrow>
505             <m:mo>&gt;</m:mo>
506             <m:mo>CASES</m:mo>
507             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
508             <xsl:apply-templates select="*[position()=3]"/>
509            </m:mrow>
510           </m:mtd>
511          </m:mtr>
512          </xsl:if>
513          <m:mtr>
514           <m:mtd>
515            <m:mrow>
516             <m:mo>OF</m:mo>
517            </m:mrow>
518           </m:mtd>
519          </m:mtr>
520          <xsl:for-each select="*[position() mod 2 = 0 and position()>3]">
521          <xsl:variable name="charlength"><xsl:apply-templates select="." mode="charcount"><xsl:with-param name="nosibling" select="1"/></xsl:apply-templates></xsl:variable>
522          <m:mtr>
523           <m:mtd>
524            <m:mrow>
525             <xsl:choose>
526             <xsl:when test="position() = 1">
527               <m:mphantom><m:mtext>|</m:mtext></m:mphantom>
528             </xsl:when>
529             <xsl:otherwise>
530              <m:mo stretchy="false">|</m:mo>
531             </xsl:otherwise>
532             </xsl:choose>
533             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
534             <xsl:apply-templates select="."/>
535             <xsl:if test="$framewidth > $charlength">
536              <m:mo color="Green">&#x21d2;</m:mo>
537              <xsl:apply-templates select="following-sibling::*[position()= 1]"/>
538             </xsl:if>
539            </m:mrow>
540           </m:mtd>
541          </m:mtr>
542          <xsl:if test="$charlength >= $framewidth">
543          <m:mtr>
544           <m:mtd>
545            <m:mrow>
546             <m:mphantom><m:mtext>|_</m:mtext></m:mphantom>  
547             <m:mo color="Green">&#x21d2;</m:mo>
548             <xsl:apply-templates select="following-sibling::*[position()= 1]"/>
549            </m:mrow>
550           </m:mtd>
551          </m:mtr>
552          </xsl:if>
553         </xsl:for-each>
554          <m:mtr>
555           <m:mtd>
556            <m:mrow>
557             <m:mo>END</m:mo>
558            </m:mrow>
559           </m:mtd>
560          </m:mtr>
561         </m:mtable>
562        </xsl:when>
563        <xsl:otherwise>
564         <m:mo>&lt;</m:mo><xsl:apply-templates select="*[position()=2]"/><m:mo>&gt;</m:mo>
565         <m:mo>CASES</m:mo>
566         <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
567         <xsl:apply-templates select="*[position()=3]"/>
568         <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
569         <m:mo>OF</m:mo>
570         <xsl:for-each select="*[position() mod 2 = 0 and position()>3]">
571          <xsl:choose>
572          <xsl:when test="position() != 1">
573           <m:mo stretchy="false">|</m:mo>
574          </xsl:when> 
575          </xsl:choose>
576          <xsl:apply-templates select="."/>
577          <m:mo color="Green">&#x21d2;</m:mo>
578          <xsl:apply-templates select="following-sibling::*[position()= 1]"/>
579         </xsl:for-each>
580         <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
581         <m:mo>END</m:mo>
582        </xsl:otherwise>
583        </xsl:choose>
584       </xsl:when>
585       <xsl:when test="$name='fix'">
586        <xsl:choose>
587        <xsl:when test="$charlength >= $framewidth">
588         <m:mtable align="baseline 1" equalrows="false" columnalign="left">
589          <m:mtr>
590           <m:mtd>
591            <m:mrow>
592             <m:mo>FIX</m:mo>
593             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
594             <m:mi><xsl:value-of select="m:ci"/></m:mi>
595             <m:mo stretchy="false">{</m:mo>
596            </m:mrow>
597           </m:mtd>
598          </m:mtr>
599          <m:mtr>
600           <m:mtd>
601            <m:mrow>
602             <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
603             <m:mtable align="baseline 1" equalrows="false" columnalign="left">
604             <xsl:for-each select="m:bvar"> 
605              <xsl:variable name="charlength"><xsl:apply-templates select="m:type" mode="charcount"><xsl:with-param name="nosibling" select="1"/></xsl:apply-templates></xsl:variable>
606              <m:mtr>
607               <m:mtd>
608                <m:mrow>
609                 <m:mi><xsl:value-of select="m:ci"/></m:mi>
610                 <m:mo>:</m:mo>
611                 <xsl:if test="$framewidth > $charlength">
612                  <xsl:apply-templates select="m:type"/>
613                 </xsl:if>
614                </m:mrow>
615               </m:mtd>
616              </m:mtr> 
617              <xsl:if test="$charlength >= $framewidth">
618              <m:mtr>
619               <m:mtd>
620                <m:mrow>
621                 <m:mphantom><m:mtext>:=</m:mtext></m:mphantom>
622                 <xsl:apply-templates select="m:type"/>
623                </m:mrow>
624               </m:mtd>
625              </m:mtr>
626              </xsl:if>
627              <m:mtr>
628               <m:mtd>
629                <m:mrow>
630                 <m:mo>:=</m:mo>
631                 <xsl:apply-templates select="following-sibling::*[position()=1]"/>
632                </m:mrow>
633               </m:mtd>
634              </m:mtr> 
635             </xsl:for-each>
636             </m:mtable>
637            </m:mrow>
638           </m:mtd>
639          </m:mtr>
640          <m:mtr>
641           <m:mtd>
642            <m:mrow>
643             <m:mo stretchy="false">}</m:mo>
644            </m:mrow>
645           </m:mtd>
646          </m:mtr>
647         </m:mtable>
648        </xsl:when>
649        <xsl:otherwise>
650         <m:mo>FIX</m:mo>
651         <m:mi><xsl:value-of select="m:ci"/></m:mi>
652         <m:mo stretchy="false">{</m:mo>
653         <m:mtable align="baseline 1" equalrows="false" columnalign="left">
654         <xsl:for-each select="m:bvar"> 
655          <m:mtr>
656           <m:mtd>
657            <m:mrow>
658             <m:mi><xsl:value-of select="m:ci"/></m:mi>
659             <m:mo>:</m:mo>
660             <xsl:apply-templates select="m:type"/>
661             <m:mo>:=</m:mo>
662             <xsl:apply-templates select="following-sibling::*[position() = 1]"/>
663             <xsl:if test="position()=last()">
664              <m:mo stretchy="false">}</m:mo>
665             </xsl:if>
666            </m:mrow>
667           </m:mtd>
668          </m:mtr>
669          </xsl:for-each>
670         </m:mtable>
671        </xsl:otherwise>
672        </xsl:choose>
673       </xsl:when>
674       <xsl:when test="$name='cofix'">
675        <xsl:choose>
676        <xsl:when test="$charlength >= $framewidth">
677         <m:mtable align="baseline 1" equalrows="false" columnalign="left">
678          <m:mtr>
679           <m:mtd>
680            <m:mrow>
681             <m:mo>COFIX</m:mo>
682             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
683             <m:mi><xsl:value-of select="m:ci"/></m:mi>
684             <m:mo stretchy="false">{</m:mo>
685            </m:mrow>
686           </m:mtd>
687          </m:mtr>
688          <m:mtr>
689           <m:mtd>
690            <m:mrow>
691             <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
692             <m:mtable align="baseline 1" equalrows="false" columnalign="left">
693             <xsl:for-each select="m:bvar">
694              <xsl:variable name="charlength"><xsl:apply-templates select="m:type" mode="charcount"><xsl:with-param name="nosibling" select="1"/></xsl:apply-templates></xsl:variable> 
695              <m:mtr>
696               <m:mtd>
697                <m:mrow>
698                 <m:mi><xsl:value-of select="m:ci"/></m:mi>
699                 <m:mo>:</m:mo>
700                 <xsl:if test="$framewidth > $charlength">
701                  <xsl:apply-templates select="m:type"/>
702                 </xsl:if>
703                </m:mrow>
704               </m:mtd>
705              </m:mtr> 
706              <xsl:if test="$charlength >= $framewidth">
707              <m:mtr>
708               <m:mtd>
709                <m:mrow>
710                 <m:mphantom><m:mtext>:=</m:mtext></m:mphantom>
711                 <xsl:apply-templates select="m:type"/>
712                </m:mrow>
713               </m:mtd>
714              </m:mtr>
715              </xsl:if>
716              <m:mtr>
717               <m:mtd>
718                <m:mrow>
719                 <m:mo>:=</m:mo>
720                 <xsl:apply-templates select="following-sibling::*[position() = 1]"/>
721                </m:mrow>
722               </m:mtd>
723              </m:mtr>
724             </xsl:for-each>
725             </m:mtable>
726            </m:mrow>
727           </m:mtd>
728          </m:mtr>
729          <m:mtr>
730           <m:mtd>
731            <m:mrow>
732             <m:mo stretchy="false">}</m:mo>
733            </m:mrow>
734           </m:mtd>
735          </m:mtr>
736         </m:mtable>
737        </xsl:when>
738        <xsl:otherwise>
739         <m:mo>COFIX</m:mo>
740         <m:mi><xsl:value-of select="m:ci"/></m:mi>
741         <m:mo stretchy="false">{</m:mo>
742         <m:mtable align="baseline 1" equalrows="false" columnalign="left">  
743         <xsl:for-each select="m:bvar"> 
744          <m:mtr>
745           <m:mtd>
746            <m:mrow>
747             <m:mi><xsl:value-of select="m:ci"/></m:mi>
748             <m:mo>:</m:mo>
749             <xsl:apply-templates select="m:type"/>
750             <m:mo>:=</m:mo>
751             <xsl:apply-templates select="following-sibling::*[position() = 1]"/>
752             <xsl:if test="position()=last()">
753              <m:mo stretchy="false">}</m:mo>
754             </xsl:if>
755            </m:mrow>
756           </m:mtd>
757          </m:mtr>
758          </xsl:for-each>
759         </m:mtable>
760        </xsl:otherwise>
761        </xsl:choose>
762       </xsl:when>
763       </xsl:choose>
764      </m:mrow>
765 </xsl:template>
766
767 <!-- LAMBDA -->
768
769 <xsl:template match="m:lambda">
770     <xsl:variable name="charlength"><xsl:apply-templates select="*[position()=1]" mode="charcount"/></xsl:variable>
771     <m:mrow helm:xref="{@helm:xref}">
772      <xsl:choose>
773      <xsl:when test="$charlength >= $framewidth">
774       <xsl:variable name="charlength"><xsl:apply-templates select="m:bvar/m:type" mode="charcount"><xsl:with-param name="nosibling" select="1"/></xsl:apply-templates></xsl:variable>
775       <m:mtable align="baseline 1" equalrows="false" columnalign="left">
776        <m:mtr>
777         <m:mtd>
778          <m:mrow>
779           <m:mo color="Red">&#x03bb;</m:mo>
780 <!--<xsl:text disable-output-escaping="yes">&amp;lambda;</xsl:text>-->
781           <xsl:apply-templates select="m:bvar/m:ci"/>
782           <m:mo>:</m:mo>
783           <xsl:if test="$framewidth > $charlength">
784            <xsl:apply-templates select="m:bvar/m:type"/>
785           </xsl:if>
786          </m:mrow>
787         </m:mtd>
788        </m:mtr>
789        <xsl:if test="$charlength >= $framewidth">
790        <m:mtr>
791         <m:mtd>
792          <m:mrow>
793           <m:mphantom><m:mtext>.</m:mtext></m:mphantom>
794           <xsl:apply-templates select="m:bvar/m:type"/>
795          </m:mrow>
796         </m:mtd>
797        </m:mtr>
798        </xsl:if>
799        <m:mtr>
800         <m:mtd>
801          <m:mrow>
802           <m:mo>.</m:mo>
803           <xsl:apply-templates select="*[position()=2]"/>
804          </m:mrow>
805         </m:mtd>
806        </m:mtr>
807       </m:mtable>
808      </xsl:when>
809      <xsl:otherwise>
810       <m:mo color="Red">&#x03bb;</m:mo>
811       <xsl:apply-templates select="m:bvar/m:ci"/>
812       <m:mo>:</m:mo>
813       <xsl:apply-templates select="m:bvar/m:type"/>
814       <m:mo>.</m:mo>
815       <xsl:apply-templates select="*[position()=2]"/>
816      </xsl:otherwise>
817      </xsl:choose>
818     </m:mrow>
819 </xsl:template>
820
821 <!--**********************-->
822 <!--       COUNTING       -->
823 <!--**********************-->
824
825 <xsl:template match="m:ci|m:csymbol" mode="charcount">
826 <xsl:param name="incurrent_length" select="0"/> 
827 <xsl:param name="nosibling" select="0"/>
828     <xsl:choose>
829     <xsl:when test="$framewidth > ($incurrent_length + string-length()) and ($nosibling = 0)">
830      <xsl:variable name="siblength"><xsl:apply-templates select="following-sibling::*[position()=1]" mode="charcount"><xsl:with-param name="incurrent_length" select="$incurrent_length + string-length()"/></xsl:apply-templates></xsl:variable>
831      <xsl:choose>
832      <xsl:when test="string($siblength) = &quot;&quot;">
833       <xsl:value-of select="$incurrent_length + string-length()"/>
834      </xsl:when>
835      <xsl:otherwise>
836       <xsl:value-of select="number($siblength)"/>
837      </xsl:otherwise>
838      </xsl:choose>
839     </xsl:when>
840     <xsl:otherwise>
841      <xsl:value-of select="$incurrent_length + string-length()"/>
842     </xsl:otherwise>
843     </xsl:choose>
844 </xsl:template> 
845
846 <xsl:template match="*" mode="charcount">
847 <xsl:param name="incurrent_length" select="0"/>
848 <xsl:param name="nosibling" select="0"/>
849     <xsl:variable name="childlength"><xsl:apply-templates select="*[position()=1]" mode="charcount"><xsl:with-param name="incurrent_length" select="$incurrent_length"/><xsl:with-param name="nosibling" select="0"/></xsl:apply-templates></xsl:variable>
850     <xsl:choose>
851     <xsl:when test="$framewidth > number($childlength) and ($nosibling = 0)">
852      <xsl:variable name="siblength"><xsl:apply-templates select="following-sibling::*[position()=1]" mode="charcount"><xsl:with-param name="incurrent_length" select="$childlength"/></xsl:apply-templates></xsl:variable>
853      <xsl:choose>
854      <xsl:when test="string($siblength) = &quot;&quot;">
855       <xsl:value-of select="number($childlength)"/>
856      </xsl:when>
857      <xsl:otherwise>
858       <xsl:value-of select="number($siblength)"/>
859      </xsl:otherwise>
860      </xsl:choose>>
861     </xsl:when>
862     <xsl:otherwise>
863      <xsl:value-of select="number($childlength)"/>
864     </xsl:otherwise>
865     </xsl:choose>
866 </xsl:template>
867
868 </xsl:stylesheet>