rename upstream-man-pages to upstream-doc
[clinton/guile-figl.git] / upstream-doc / man3 / xhtml / ctop.xsl
CommitLineData
7faf1d71
AW
1<!-- saved from url=(0013)about:internet -->
2<xsl:stylesheet
3 version="1.0"
4 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
5 xmlns:mml="http://www.w3.org/1998/Math/MathML"
6>
7
8<!--
9$Id: ctop.xsl,v 1.3 2002/09/20 08:41:39 davidc Exp $
10
11Copyright David Carlisle 2001, 2002.
12
13Use and distribution of this code are permitted under the terms of the <a
14href="http://www.w3.org/Consortium/Legal/copyright-software-19980720"
15>W3C Software Notice and License</a>.
16-->
17
18<xsl:output method="xml" />
19
20<xsl:template mode="c2p" match="*">
21<xsl:copy>
22 <xsl:copy-of select="@*"/>
23 <xsl:apply-templates mode="c2p"/>
24</xsl:copy>
25</xsl:template>
26
27
28<!-- 4.4.1.1 cn -->
29
30<xsl:template mode="c2p" match="mml:cn">
31 <mml:mn><xsl:apply-templates mode="c2p"/></mml:mn>
32</xsl:template>
33
34<xsl:template mode="c2p" match="mml:cn[@type='complex-cartesian']">
35 <mml:mrow>
36 <mml:mn><xsl:apply-templates mode="c2p" select="text()[1]"/></mml:mn>
37 <mml:mo>+</mml:mo>
38 <mml:mn><xsl:apply-templates mode="c2p" select="text()[2]"/></mml:mn>
39 <mml:mo><!--&#8290;--><!--invisible times--></mml:mo>
40 <mml:mi>i<!-- imaginary i --></mml:mi>
41 </mml:mrow>
42</xsl:template>
43
44<xsl:template mode="c2p" match="mml:cn[@type='rational']">
45 <mml:mrow>
46 <mml:mn><xsl:apply-templates mode="c2p" select="text()[1]"/></mml:mn>
47 <mml:mo>/</mml:mo>
48 <mml:mn><xsl:apply-templates mode="c2p" select="text()[2]"/></mml:mn>
49 </mml:mrow>
50</xsl:template>
51
52<xsl:template mode="c2p" match="mml:cn[@type='integer']">
53 <xsl:choose>
54 <xsl:when test="not(@base) or @base=10">
55 <mml:mn><xsl:apply-templates mode="c2p"/></mml:mn>
56 </xsl:when>
57 <xsl:otherwise>
58 <mml:msub>
59 <mml:mn><xsl:apply-templates mode="c2p"/></mml:mn>
60 <mml:mn><xsl:value-of select="@base"/></mml:mn>
61 </mml:msub>
62 </xsl:otherwise>
63 </xsl:choose>
64</xsl:template>
65
66<xsl:template mode="c2p" match="mml:cn[@type='complex-polar']">
67 <mml:mrow>
68 <mml:mn><xsl:apply-templates mode="c2p" select="text()[1]"/></mml:mn>
69 <mml:mo><!--&#8290;--><!--invisible times--></mml:mo>
70 <mml:msup>
71 <mml:mi>e<!-- exponential e--></mml:mi>
72 <mml:mrow>
73 <mml:mi>i<!-- imaginary i--></mml:mi>
74 <mml:mo><!--&#8290;--><!--invisible times--></mml:mo>
75 <mml:mn><xsl:apply-templates mode="c2p" select="text()[2]"/></mml:mn>
76 </mml:mrow>
77 </mml:msup>
78 </mml:mrow>
79</xsl:template>
80
81<xsl:template mode="c2p" match="mml:cn[@type='e-notation']">
82 <mml:mn><xsl:apply-templates mode="c2p" select="text()[1]"/>E<xsl:apply-templates mode="c2p" select="text()[2]"/></mml:mn>
83</xsl:template>
84
85<!-- 4.4.1.1 ci -->
86
87<xsl:template mode="c2p" match="mml:ci/text()">
88 <mml:mi><xsl:value-of select="."/></mml:mi>
89</xsl:template>
90
91<xsl:template mode="c2p" match="mml:ci">
92 <mml:mrow><xsl:apply-templates mode="c2p"/></mml:mrow>
93</xsl:template>
94
95<!-- 4.4.1.2 csymbol -->
96
97<xsl:template mode="c2p" match="mml:csymbol/text()">
98 <mml:mo><xsl:apply-templates mode="c2p"/></mml:mo>
99</xsl:template>
100
101<xsl:template mode="c2p" match="mml:csymbol">
102 <mml:mrow><xsl:apply-templates mode="c2p"/></mml:mrow>
103</xsl:template>
104
105<!-- 4.4.2.1 apply 4.4.2.2 reln -->
106
107<xsl:template mode="c2p" match="mml:apply|mml:reln">
108 <mml:mrow>
109 <xsl:apply-templates mode="c2p" select="*[1]">
110 <xsl:with-param name="p" select="10"/>
111 </xsl:apply-templates>
112 <mml:mo><!--&#8290;--><!--invisible times--></mml:mo>
113 <mml:mfenced open="(" close=")" separators=",">
114 <xsl:apply-templates mode="c2p" select="*[position()>1]"/>
115 </mml:mfenced>
116 </mml:mrow>
117</xsl:template>
118
119<!-- 4.4.2.3 fn -->
120<xsl:template mode="c2p" match="mml:fn">
121 <mml:mrow><xsl:apply-templates mode="c2p"/></mml:mrow>
122</xsl:template>
123
124<!-- 4.4.2.4 interval -->
125<xsl:template mode="c2p" match="mml:interval[*[2]]">
126 <mml:mfenced open="[" close="]"><xsl:apply-templates mode="c2p"/></mml:mfenced>
127</xsl:template>
128<xsl:template mode="c2p" match="mml:interval[*[2]][@closure='open']">
129 <mml:mfenced open="(" close=")"><xsl:apply-templates mode="c2p"/></mml:mfenced>
130</xsl:template>
131<xsl:template mode="c2p" match="mml:interval[*[2]][@closure='open-closed']">
132 <mml:mfenced open="(" close="]"><xsl:apply-templates mode="c2p"/></mml:mfenced>
133</xsl:template>
134<xsl:template mode="c2p" match="mml:interval[*[2]][@closure='closed-open']">
135 <mml:mfenced open="[" close=")"><xsl:apply-templates mode="c2p"/></mml:mfenced>
136</xsl:template>
137
138<xsl:template mode="c2p" match="mml:interval">
139 <mml:mfenced open="{{" close="}}"><xsl:apply-templates mode="c2p"/></mml:mfenced>
140</xsl:template>
141
142<!-- 4.4.2.5 inverse -->
143
144<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:inverse]]">
145 <mml:msup>
146 <xsl:apply-templates mode="c2p" select="*[2]"/>
147 <mml:mrow><mml:mo>(</mml:mo><mml:mn>-1</mml:mn><mml:mo>)</mml:mo></mml:mrow>
148 </mml:msup>
149</xsl:template>
150
151<!-- 4.4.2.6 sep -->
152
153<!-- 4.4.2.7 condition -->
154<xsl:template mode="c2p" match="mml:condition">
155 <mml:mrow><xsl:apply-templates mode="c2p"/></mml:mrow>
156</xsl:template>
157
158<!-- 4.4.2.8 declare -->
159<xsl:template mode="c2p" match="mml:declare"/>
160
161<!-- 4.4.2.9 lambda -->
162<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:lambda]]">
163 <mml:mrow>
164 <mml:mi>&#955;<!--lambda--></mml:mi>
165 <mml:mrow><xsl:apply-templates mode="c2p" select="mml:bvar/*"/></mml:mrow>
166 <mml:mo>.</mml:mo>
167 <mml:mfenced>
168 <xsl:apply-templates mode="c2p" select="*[last()]"/>
169 </mml:mfenced>
170</mml:mrow>
171</xsl:template>
172
173
174<!-- 4.4.2.10 compose -->
175<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:compose]]">
176<xsl:param name="p" select="0"/>
177<xsl:call-template name="infix">
178 <xsl:with-param name="this-p" select="1"/>
179 <xsl:with-param name="p" select="$p"/>
180 <xsl:with-param name="mo"><mml:mo>&#8728;<!-- o --></mml:mo></xsl:with-param>
181</xsl:call-template>
182</xsl:template>
183
184
185<!-- 4.4.2.11` ident -->
186<xsl:template mode="c2p" match="mml:ident">
187<mml:mo>id</mml:mo>
188</xsl:template>
189
190<!-- 4.4.2.12` domain -->
191<xsl:template mode="c2p" match="mml:domain">
192<mml:mo>domain</mml:mo>
193</xsl:template>
194
195<!-- 4.4.2.13` codomain -->
196<xsl:template mode="c2p" match="mml:codomain">
197<mml:mo>codomain</mml:mo>
198</xsl:template>
199
200<!-- 4.4.2.14` image -->
201<xsl:template mode="c2p" match="mml:image">
202<mml:mo>image</mml:mo>
203</xsl:template>
204
205<!-- 4.4.2.15` domainofapplication -->
206<xsl:template mode="c2p" match="mml:domainofapplication">
207 <mml:error/>
208</xsl:template>
209
210<!-- 4.4.2.16` piecewise -->
211<xsl:template mode="c2p" match="mml:piecewise">
212<mml:mrow>
213<mml:mo>{</mml:mo>
214<mml:mtable>
215 <xsl:for-each select="mml:piece|mml:otherwise">
216 <mml:mtr>
217 <mml:mtd><xsl:apply-templates mode="c2p" select="*[1]"/></mml:mtd>
218 <mml:mtd><mml:mtext>&#160; if &#160;</mml:mtext></mml:mtd>
219 <mml:mtd><xsl:apply-templates mode="c2p" select="*[2]"/></mml:mtd>
220 </mml:mtr>
221 </xsl:for-each>
222</mml:mtable>
223</mml:mrow>
224</xsl:template>
225
226
227<!-- 4.4.3.1 quotient -->
228<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:quotient]]">
229<mml:mrow>
230<mml:mo>&#8970;<!-- lfloor--></mml:mo>
231<xsl:apply-templates mode="c2p" select="*[2]"/>
232<mml:mo>/</mml:mo>
233<xsl:apply-templates mode="c2p" select="*[3]"/>
234<mml:mo>&#8971;<!-- rfloor--></mml:mo>
235</mml:mrow>
236</xsl:template>
237
238
239
240<!-- 4.4.3.2 factorial -->
241<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:factorial]]">
242<mml:mrow>
243<xsl:apply-templates mode="c2p" select="*[2]">
244 <xsl:with-param name="p" select="7"/>
245</xsl:apply-templates>
246<mml:mo>!</mml:mo>
247</mml:mrow>
248</xsl:template>
249
250
251<!-- 4.4.3.3 divide -->
252<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:divide]]">
253 <xsl:param name="p" select="0"/>
254<xsl:call-template name="binary">
255 <xsl:with-param name="mo"><mml:mo>/</mml:mo></xsl:with-param>
256 <xsl:with-param name="p" select="$p"/>
257 <xsl:with-param name="this-p" select="3"/>
258</xsl:call-template>
259</xsl:template>
260
261
262<!-- 4.4.3.4 max min-->
263<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:max]]">
264<mml:mrow>
265 <mml:mo>max</mml:mo>
266 <xsl:call-template name="set"/>
267</mml:mrow>
268</xsl:template>
269
270<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:min]]">
271<mml:mrow>
272 <mml:mo>max</mml:mo>
273 <xsl:call-template name="set"/>
274</mml:mrow>
275</xsl:template>
276
277<!-- 4.4.3.5 minus-->
278<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:minus] and count(*)=2]">
279<mml:mrow>
280 <mml:mo>&#8722;<!--minus--></mml:mo>
281 <xsl:apply-templates mode="c2p" select="*[2]">
282 <xsl:with-param name="p" select="5"/>
283 </xsl:apply-templates>
284</mml:mrow>
285</xsl:template>
286
287<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:minus] and count(*)&gt;2]">
288 <xsl:param name="p" select="0"/>
289<xsl:call-template name="binary">
290 <xsl:with-param name="mo"><mml:mo>&#8722;<!--minus--></mml:mo></xsl:with-param>
291 <xsl:with-param name="p" select="$p"/>
292 <xsl:with-param name="this-p" select="2"/>
293</xsl:call-template>
294</xsl:template>
295
296<!-- 4.4.3.6 plus-->
297<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:plus]]">
298 <xsl:param name="p" select="0"/>
299 <mml:mrow>
300 <xsl:if test="$p &gt; 2"><mml:mo>(</mml:mo></xsl:if>
301 <xsl:for-each select="*[position()&gt;1]">
302 <xsl:if test="position() &gt; 1">
303 <mml:mo>
304 <xsl:choose>
305 <xsl:when test="self::mml:apply[*[1][self::mml:times] and
306 *[2][self::mml:apply/*[1][self::mml:minus] or self::mml:cn[not(mml:sep) and
307 (number(.) &lt; 0)]]]">&#8722;<!--minus--></xsl:when>
308 <xsl:otherwise>+</xsl:otherwise>
309 </xsl:choose>
310 </mml:mo>
311 </xsl:if>
312 <xsl:choose>
313 <xsl:when test="self::mml:apply[*[1][self::mml:times] and
314 *[2][self::mml:cn[not(mml:sep) and (number(.) &lt;0)]]]">
315 <mml:mrow>
316 <mml:mn><xsl:value-of select="-(*[2])"/></mml:mn>
317 <mml:mo><!--&#8290;--><!--invisible times--></mml:mo>
318 <xsl:apply-templates mode="c2p" select=".">
319 <xsl:with-param name="first" select="2"/>
320 <xsl:with-param name="p" select="2"/>
321 </xsl:apply-templates>
322 </mml:mrow>
323 </xsl:when>
324 <xsl:when test="self::mml:apply[*[1][self::mml:times] and
325 *[2][self::mml:apply/*[1][self::mml:minus]]]">
326 <mml:mrow>
327 <xsl:apply-templates mode="c2p" select="./*[2]/*[2]"/>
328 <xsl:apply-templates mode="c2p" select=".">
329 <xsl:with-param name="first" select="2"/>
330 <xsl:with-param name="p" select="2"/>
331 </xsl:apply-templates>
332 </mml:mrow>
333 </xsl:when>
334 <xsl:otherwise>
335 <xsl:apply-templates mode="c2p" select=".">
336 <xsl:with-param name="p" select="2"/>
337 </xsl:apply-templates>
338 </xsl:otherwise>
339 </xsl:choose>
340 </xsl:for-each>
341 <xsl:if test="$p &gt; 2"><mml:mo>)</mml:mo></xsl:if>
342 </mml:mrow>
343</xsl:template>
344
345
346<!-- 4.4.3.7 power -->
347<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:power]]">
348<mml:msup>
349<xsl:apply-templates mode="c2p" select="*[2]">
350 <xsl:with-param name="p" select="5"/>
351</xsl:apply-templates>
352<xsl:apply-templates mode="c2p" select="*[3]">
353 <xsl:with-param name="p" select="5"/>
354</xsl:apply-templates>
355</mml:msup>
356</xsl:template>
357
358<!-- 4.4.3.8 remainder -->
359<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:rem]]">
360 <xsl:param name="p" select="0"/>
361<xsl:call-template name="binary">
362 <xsl:with-param name="mo"><mml:mo>mod</mml:mo></xsl:with-param>
363 <xsl:with-param name="p" select="$p"/>
364 <xsl:with-param name="this-p" select="3"/>
365</xsl:call-template>
366</xsl:template>
367
368<!-- 4.4.3.9 times-->
369<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:times]]" name="times">
370 <xsl:param name="p" select="0"/>
371 <xsl:param name="first" select="1"/>
372 <mml:mrow>
373 <xsl:if test="$p &gt; 3"><mml:mo>(</mml:mo></xsl:if>
374 <xsl:for-each select="*[position()&gt;1]">
375 <xsl:if test="position() &gt; 1">
376 <mml:mo>
377 <xsl:choose>
378 <xsl:when test="self::mml:cn">&#215;<!-- times --></xsl:when>
379 <xsl:otherwise><!--&#8290;--><!--invisible times--></xsl:otherwise>
380 </xsl:choose>
381 </mml:mo>
382 </xsl:if>
383 <xsl:if test="position()&gt;= $first">
384 <xsl:apply-templates mode="c2p" select=".">
385 <xsl:with-param name="p" select="3"/>
386 </xsl:apply-templates>
387 </xsl:if>
388 </xsl:for-each>
389 <xsl:if test="$p &gt; 3"><mml:mo>)</mml:mo></xsl:if>
390 </mml:mrow>
391</xsl:template>
392
393
394<!-- 4.4.3.10 root -->
395<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:root] and not(mml:degree) or mml:degree=2]" priority="4">
396<mml:msqrt>
397<xsl:apply-templates mode="c2p" select="*[position()&gt;1]"/>
398</mml:msqrt>
399</xsl:template>
400
401<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:root]]">
402<mml:mroot>
403<xsl:apply-templates mode="c2p" select="*[position()&gt;1 and not(self::mml:degree)]"/>
404<mml:mrow><xsl:apply-templates mode="c2p" select="mml:degree/*"/></mml:mrow>
405</mml:mroot>
406</xsl:template>
407
408<!-- 4.4.3.11 gcd -->
409<xsl:template mode="c2p" match="mml:gcd">
410<mml:mo>gcd</mml:mo>
411</xsl:template>
412
413<!-- 4.4.3.12 and -->
414<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:and]]">
415<xsl:param name="p" select="0"/>
416<xsl:call-template name="infix">
417 <xsl:with-param name="this-p" select="2"/>
418 <xsl:with-param name="p" select="$p"/>
419 <xsl:with-param name="mo"><mml:mo>&#8743;<!-- and --></mml:mo></xsl:with-param>
420</xsl:call-template>
421</xsl:template>
422
423
424<!-- 4.4.3.13 or -->
425<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:or]]">
426<xsl:param name="p" select="0"/>
427<xsl:call-template name="infix">
428 <xsl:with-param name="this-p" select="3"/>
429 <xsl:with-param name="p" select="$p"/>
430 <xsl:with-param name="mo"><mml:mo>&#8744;<!-- or --></mml:mo></xsl:with-param>
431</xsl:call-template>
432</xsl:template>
433
434<!-- 4.4.3.14 xor -->
435<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:xor]]">
436<xsl:param name="p" select="0"/>
437<xsl:call-template name="infix">
438 <xsl:with-param name="this-p" select="3"/>
439 <xsl:with-param name="p" select="$p"/>
440 <xsl:with-param name="mo"><mml:mo>xor</mml:mo></xsl:with-param>
441</xsl:call-template>
442</xsl:template>
443
444
445<!-- 4.4.3.15 not -->
446<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:not]]">
447<mml:mrow>
448<mml:mo>&#172;<!-- not --></mml:mo>
449<xsl:apply-templates mode="c2p" select="*[2]">
450 <xsl:with-param name="p" select="7"/>
451</xsl:apply-templates>
452</mml:mrow>
453</xsl:template>
454
455
456
457
458<!-- 4.4.3.16 implies -->
459<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:implies]]">
460 <xsl:param name="p" select="0"/>
461<xsl:call-template name="binary">
462 <xsl:with-param name="mo"><mml:mo>&#8658;<!-- Rightarrow --></mml:mo></xsl:with-param>
463 <xsl:with-param name="p" select="$p"/>
464 <xsl:with-param name="this-p" select="3"/>
465</xsl:call-template>
466</xsl:template>
467
468
469<!-- 4.4.3.17 forall -->
470<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:forall]]">
471 <mml:mrow>
472 <mml:mi>&#8704;<!--forall--></mml:mi>
473 <mml:mrow><xsl:apply-templates mode="c2p" select="mml:bvar[not(current()/mml:condition)]/*|mml:condition/*"/></mml:mrow>
474 <mml:mo>.</mml:mo>
475 <mml:mfenced>
476 <xsl:apply-templates mode="c2p" select="*[last()]"/>
477 </mml:mfenced>
478</mml:mrow>
479</xsl:template>
480
481
482
483<!-- 4.4.3.18 exists -->
484<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:exists]]">
485 <mml:mrow>
486 <mml:mi>&#8707;<!--exists--></mml:mi>
487 <mml:mrow><xsl:apply-templates mode="c2p" select="mml:bvar[not(current()/mml:condition)]/*|mml:condition/*"/></mml:mrow>
488 <mml:mo>.</mml:mo>
489 <mml:mfenced>
490 <xsl:apply-templates mode="c2p" select="*[last()]"/>
491 </mml:mfenced>
492</mml:mrow>
493</xsl:template>
494
495
496<!-- 4.4.3.19 abs -->
497<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:abs]]">
498<mml:mrow>
499<mml:mo>|</mml:mo>
500<xsl:apply-templates mode="c2p" select="*[2]"/>
501<mml:mo>|</mml:mo>
502</mml:mrow>
503</xsl:template>
504
505
506
507<!-- 4.4.3.20 conjugate -->
508<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:conjugate]]">
509<mml:mover>
510<xsl:apply-templates mode="c2p" select="*[2]"/>
511<mml:mo>&#175;<!-- overline --></mml:mo>
512</mml:mover>
513</xsl:template>
514
515<!-- 4.4.3.21 arg -->
516<xsl:template mode="c2p" match="mml:arg">
517 <mml:mo>arg</mml:mo>
518</xsl:template>
519
520
521<!-- 4.4.3.22 real -->
522<xsl:template mode="c2p" match="mml:real">
523 <mml:mo>&#8475;<!-- real --></mml:mo>
524</xsl:template>
525
526<!-- 4.4.3.23 imaginary -->
527<xsl:template mode="c2p" match="mml:imaginary">
528 <mml:mo>&#8465;<!-- imaginary --></mml:mo>
529</xsl:template>
530
531<!-- 4.4.3.24 lcm -->
532<xsl:template mode="c2p" match="mml:lcm">
533 <mml:mo>lcm</mml:mo>
534</xsl:template>
535
536
537<!-- 4.4.3.25 floor -->
538<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:floor]]">
539<mml:mrow>
540<mml:mo>&#8970;<!-- lfloor--></mml:mo>
541<xsl:apply-templates mode="c2p" select="*[2]"/>
542<mml:mo>&#8971;<!-- rfloor--></mml:mo>
543</mml:mrow>
544</xsl:template>
545
546
547<!-- 4.4.3.25 ceiling -->
548<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:ceiling]]">
549<mml:mrow>
550<mml:mo>&#8968;<!-- lceil--></mml:mo>
551<xsl:apply-templates mode="c2p" select="*[2]"/>
552<mml:mo>&#8969;<!-- rceil--></mml:mo>
553</mml:mrow>
554</xsl:template>
555
556<!-- 4.4.4.1 eq -->
557<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:eq]]">
558<xsl:param name="p" select="0"/>
559<xsl:call-template name="infix">
560 <xsl:with-param name="this-p" select="1"/>
561 <xsl:with-param name="p" select="$p"/>
562 <xsl:with-param name="mo"><mml:mo>=</mml:mo></xsl:with-param>
563</xsl:call-template>
564</xsl:template>
565
566<!-- 4.4.4.2 neq -->
567<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:neq]]">
568<xsl:param name="p" select="0"/>
569<xsl:call-template name="infix">
570 <xsl:with-param name="this-p" select="1"/>
571 <xsl:with-param name="p" select="$p"/>
572 <xsl:with-param name="mo"><mml:mo>&#8800;<!-- neq --></mml:mo></xsl:with-param>
573</xsl:call-template>
574</xsl:template>
575
576<!-- 4.4.4.3 eq -->
577<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:gt]]">
578<xsl:param name="p" select="0"/>
579<xsl:call-template name="infix">
580 <xsl:with-param name="this-p" select="1"/>
581 <xsl:with-param name="p" select="$p"/>
582 <xsl:with-param name="mo"><mml:mo>&gt;</mml:mo></xsl:with-param>
583</xsl:call-template>
584</xsl:template>
585
586<!-- 4.4.4.4 lt -->
587<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:lt]]">
588<xsl:param name="p" select="0"/>
589<xsl:call-template name="infix">
590 <xsl:with-param name="this-p" select="1"/>
591 <xsl:with-param name="p" select="$p"/>
592 <xsl:with-param name="mo"><mml:mo>&lt;</mml:mo></xsl:with-param>
593</xsl:call-template>
594</xsl:template>
595
596<!-- 4.4.4.5 geq -->
597<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:geq]]">
598<xsl:param name="p" select="0"/>
599<xsl:call-template name="infix">
600 <xsl:with-param name="this-p" select="1"/>
601 <xsl:with-param name="p" select="$p"/>
602 <xsl:with-param name="mo"><mml:mo>&#8805;</mml:mo></xsl:with-param>
603</xsl:call-template>
604</xsl:template>
605
606<!-- 4.4.4.6 geq -->
607<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:leq]]">
608<xsl:param name="p" select="0"/>
609<xsl:call-template name="infix">
610 <xsl:with-param name="this-p" select="1"/>
611 <xsl:with-param name="p" select="$p"/>
612 <xsl:with-param name="mo"><mml:mo>&#8804;</mml:mo></xsl:with-param>
613</xsl:call-template>
614</xsl:template>
615
616<!-- 4.4.4.7 equivalent -->
617<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:equivalent]]">
618<xsl:param name="p" select="0"/>
619<xsl:call-template name="infix">
620 <xsl:with-param name="this-p" select="1"/>
621 <xsl:with-param name="p" select="$p"/>
622 <xsl:with-param name="mo"><mml:mo>&#8801;</mml:mo></xsl:with-param>
623</xsl:call-template>
624</xsl:template>
625
626<!-- 4.4.4.8 approx -->
627<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:approx]]">
628<xsl:param name="p" select="0"/>
629<xsl:call-template name="infix">
630 <xsl:with-param name="this-p" select="1"/>
631 <xsl:with-param name="p" select="$p"/>
632 <xsl:with-param name="mo"><mml:mo>&#8771;</mml:mo></xsl:with-param>
633</xsl:call-template>
634</xsl:template>
635
636
637<!-- 4.4.4.9 factorof -->
638<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:factorof]]">
639 <xsl:param name="p" select="0"/>
640<xsl:call-template name="binary">
641 <xsl:with-param name="mo"><mml:mo>|</mml:mo></xsl:with-param>
642 <xsl:with-param name="p" select="$p"/>
643 <xsl:with-param name="this-p" select="3"/>
644</xsl:call-template>
645</xsl:template>
646
647<!-- 4.4.5.1 int -->
648<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:int]]">
649 <mml:mrow>
650 <mml:msubsup>
651 <mml:mi>&#8747;<!--int--></mml:mi>
652 <mml:mrow><xsl:apply-templates mode="c2p" select="mml:lowlimit/*|mml:interval/*[1]|mml:condition/*"/></mml:mrow>
653 <mml:mrow><xsl:apply-templates mode="c2p" select="mml:uplimit/*|mml:interval/*[2]"/></mml:mrow>
654 </mml:msubsup>
655 <xsl:apply-templates mode="c2p" select="*[last()]"/>
656 <mml:mo>d</mml:mo><xsl:apply-templates mode="c2p" select="mml:bvar"/>
657</mml:mrow>
658</xsl:template>
659
660<!-- 4.4.5.2 diff -->
661<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:diff] and mml:ci and count(*)=2]" priority="2">
662 <mml:msup>
663 <mml:mrow><xsl:apply-templates mode="c2p" select="*[2]"/></mml:mrow>
664 <mml:mo>&#8242;<!--prime--></mml:mo>
665 </mml:msup>
666</xsl:template>
667
668<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:diff]]" priority="1">
669 <mml:mfrac>
670 <xsl:choose>
671 <xsl:when test="mml:bvar/mml:degree">
672 <mml:mrow><mml:msup><mml:mo>d</mml:mo><xsl:apply-templates mode="c2p" select="mml:bvar/mml:degree/node()"/></mml:msup>
673 <xsl:apply-templates mode="c2p" select="*[last()]"/></mml:mrow>
674 <mml:mrow><mml:mo>d</mml:mo><mml:msup><xsl:apply-templates mode="c2p"
675 select="mml:bvar/node()"/><xsl:apply-templates mode="c2p"
676 select="mml:bvar/mml:degree/node()"/></mml:msup>
677</mml:mrow>
678</xsl:when>
679<xsl:otherwise>
680 <mml:mrow><mml:mo>d</mml:mo><xsl:apply-templates mode="c2p" select="*[last()]"/></mml:mrow>
681 <mml:mrow><mml:mo>d</mml:mo><xsl:apply-templates mode="c2p" select="mml:bvar"/></mml:mrow>
682</xsl:otherwise>
683 </xsl:choose>
684 </mml:mfrac>
685</xsl:template>
686
687
688<!-- 4.4.5.3 partialdiff -->
689<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:partialdiff] and mml:list and mml:ci and count(*)=3]" priority="2">
690<mml:mrow>
691 <mml:msub><mml:mo>D</mml:mo><mml:mrow>
692<xsl:for-each select="mml:list[1]/*">
693<xsl:apply-templates mode="c2p" select="."/>
694<xsl:if test="position()&lt;last()"><mml:mo>,</mml:mo></xsl:if>
695</xsl:for-each>
696</mml:mrow></mml:msub>
697 <mml:mrow><xsl:apply-templates mode="c2p" select="*[3]"/></mml:mrow>
698</mml:mrow>
699</xsl:template>
700
701<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:partialdiff]]" priority="1">
702 <mml:mfrac>
703 <mml:mrow><mml:msup><mml:mo>&#8706;<!-- partial --></mml:mo>
704<mml:mrow>
705 <xsl:choose>
706 <xsl:when test="mml:degree">
707<xsl:apply-templates mode="c2p" select="mml:degree/node()"/>
708</xsl:when>
709<xsl:when test="mml:bvar/mml:degree[string(number(.))='NaN']">
710<xsl:for-each select="mml:bvar/mml:degree">
711<xsl:apply-templates mode="c2p" select="node()"/>
712<xsl:if test="position()&lt;last()"><mml:mo>+</mml:mo></xsl:if>
713</xsl:for-each>
714<xsl:if test="count(mml:bvar[not(mml:degree)])&gt;0">
715<mml:mo>+</mml:mo><mml:mn><xsl:value-of select="count(mml:bvar[not(mml:degree)])"/></mml:mn>
716</xsl:if>
717</xsl:when>
718<xsl:otherwise>
719<mml:mn><xsl:value-of select="sum(mml:bvar/mml:degree)+count(mml:bvar[not(mml:degree)])"/></mml:mn>
720</xsl:otherwise>
721 </xsl:choose>
722</mml:mrow>
723</mml:msup>
724 <xsl:apply-templates mode="c2p" select="*[last()]"/></mml:mrow>
725<mml:mrow>
726<xsl:for-each select="mml:bvar">
727<mml:mrow>
728<mml:mo>&#8706;<!-- partial --></mml:mo><mml:msup><xsl:apply-templates mode="c2p" select="node()"/>
729 <mml:mrow><xsl:apply-templates mode="c2p" select="mml:degree/node()"/></mml:mrow>
730</mml:msup>
731</mml:mrow>
732</xsl:for-each>
733</mml:mrow>
734 </mml:mfrac>
735</xsl:template>
736
737<!-- 4.4.5.4 lowlimit-->
738<xsl:template mode="c2p" match="mml:lowlimit"/>
739
740<!-- 4.4.5.5 uplimit-->
741<xsl:template mode="c2p" match="mml:uplimit"/>
742
743<!-- 4.4.5.6 bvar-->
744<xsl:template mode="c2p" match="mml:bvar">
745 <mml:mi><xsl:apply-templates mode="c2p"/></mml:mi>
746 <xsl:if test="following-sibling::mml:bvar"><mml:mo>,</mml:mo></xsl:if>
747</xsl:template>
748
749<!-- 4.4.5.7 degree-->
750<xsl:template mode="c2p" match="mml:degree"/>
751
752<!-- 4.4.5.8 divergence-->
753<xsl:template mode="c2p" match="mml:divergence">
754<mml:mo>div</mml:mo>
755</xsl:template>
756
757<!-- 4.4.5.9 grad-->
758<xsl:template mode="c2p" match="mml:grad">
759<mml:mo>grad</mml:mo>
760</xsl:template>
761
762<!-- 4.4.5.10 curl -->
763<xsl:template mode="c2p" match="mml:curl">
764<mml:mo>curl</mml:mo>
765</xsl:template>
766
767
768<!-- 4.4.5.11 laplacian-->
769<xsl:template mode="c2p" match="mml:laplacian">
770<mml:msup><mml:mo>&#8711;<!-- nabla --></mml:mo><mml:mn>2</mml:mn></mml:msup>
771</xsl:template>
772
773<!-- 4.4.6.1 set -->
774
775<xsl:template mode="c2p" match="mml:set">
776 <xsl:call-template name="set"/>
777</xsl:template>
778
779<!-- 4.4.6.2 list -->
780
781<xsl:template mode="c2p" match="mml:list">
782 <xsl:call-template name="set">
783 <xsl:with-param name="o" select="'('"/>
784 <xsl:with-param name="c" select="')'"/>
785 </xsl:call-template>
786</xsl:template>
787
788<!-- 4.4.6.3 union -->
789<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:union]]">
790<xsl:param name="p" select="0"/>
791<xsl:call-template name="infix">
792 <xsl:with-param name="this-p" select="2"/>
793 <xsl:with-param name="p" select="$p"/>
794 <xsl:with-param name="mo"><mml:mo>&#8746;<!-- union --></mml:mo></xsl:with-param>
795</xsl:call-template>
796</xsl:template>
797
798<!-- 4.4.6.4 intersect -->
799<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:intersect]]">
800<xsl:param name="p" select="0"/>
801<xsl:call-template name="infix">
802 <xsl:with-param name="this-p" select="3"/>
803 <xsl:with-param name="p" select="$p"/>
804 <xsl:with-param name="mo"><mml:mo>&#8745;<!-- intersect --></mml:mo></xsl:with-param>
805</xsl:call-template>
806</xsl:template>
807
808<!-- 4.4.6.5 in -->
809<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:in]]">
810 <xsl:param name="p" select="0"/>
811<xsl:call-template name="binary">
812 <xsl:with-param name="mo"><mml:mo>&#8712;<!-- in --></mml:mo></xsl:with-param>
813 <xsl:with-param name="p" select="$p"/>
814 <xsl:with-param name="this-p" select="3"/>
815</xsl:call-template>
816</xsl:template>
817
818<!-- 4.4.6.5 notin -->
819<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:notin]]">
820 <xsl:param name="p" select="0"/>
821<xsl:call-template name="binary">
822 <xsl:with-param name="mo"><mml:mo>&#8713;<!-- not in --></mml:mo></xsl:with-param>
823 <xsl:with-param name="p" select="$p"/>
824 <xsl:with-param name="this-p" select="3"/>
825</xsl:call-template>
826</xsl:template>
827
828<!-- 4.4.6.7 subset -->
829<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:subset]]">
830<xsl:param name="p" select="0"/>
831<xsl:call-template name="infix">
832 <xsl:with-param name="this-p" select="2"/>
833 <xsl:with-param name="p" select="$p"/>
834 <xsl:with-param name="mo"><mml:mo>&#8838;<!-- subseteq --></mml:mo></xsl:with-param>
835</xsl:call-template>
836</xsl:template>
837
838<!-- 4.4.6.8 prsubset -->
839<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:prsubset]]">
840<xsl:param name="p" select="0"/>
841<xsl:call-template name="infix">
842 <xsl:with-param name="this-p" select="2"/>
843 <xsl:with-param name="p" select="$p"/>
844 <xsl:with-param name="mo"><mml:mo>&#8834;<!-- prsubset --></mml:mo></xsl:with-param>
845</xsl:call-template>
846</xsl:template>
847
848<!-- 4.4.6.9 notsubset -->
849<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:notsubset]]">
850<xsl:param name="p" select="0"/>
851<xsl:call-template name="binary">
852 <xsl:with-param name="this-p" select="2"/>
853 <xsl:with-param name="p" select="$p"/>
854 <xsl:with-param name="mo"><mml:mo>&#8840;<!-- notsubseteq --></mml:mo></xsl:with-param>
855</xsl:call-template>
856</xsl:template>
857
858<!-- 4.4.6.10 notprsubset -->
859<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:notprsubset]]">
860<xsl:param name="p" select="0"/>
861<xsl:call-template name="binary">
862 <xsl:with-param name="this-p" select="2"/>
863 <xsl:with-param name="p" select="$p"/>
864 <xsl:with-param name="mo"><mml:mo>&#8836;<!-- prsubset --></mml:mo></xsl:with-param>
865</xsl:call-template>
866</xsl:template>
867
868<!-- 4.4.6.11 setdiff -->
869<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:setdiff]]">
870<xsl:param name="p" select="0"/>
871<xsl:call-template name="binary">
872 <xsl:with-param name="this-p" select="2"/>
873 <xsl:with-param name="p" select="$p"/>
874 <xsl:with-param name="mo"><mml:mo>&#8726;<!-- setminus --></mml:mo></xsl:with-param>
875</xsl:call-template>
876</xsl:template>
877
878<!-- 4.4.6.12 card -->
879<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:card]]">
880<mml:mrow>
881<mml:mo>|</mml:mo>
882<xsl:apply-templates mode="c2p" select="*[2]"/>
883<mml:mo>|</mml:mo>
884</mml:mrow>
885</xsl:template>
886
887<!-- 4.4.6.13 cartesianproduct -->
888<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:cartesianproduct or self::mml:vectorproduct]]">
889<xsl:param name="p" select="0"/>
890<xsl:call-template name="infix">
891 <xsl:with-param name="this-p" select="2"/>
892 <xsl:with-param name="p" select="$p"/>
893 <xsl:with-param name="mo"><mml:mo>&#215;<!-- times --></mml:mo></xsl:with-param>
894</xsl:call-template>
895</xsl:template>
896
897<xsl:template
898match="mml:apply[*[1][self::mml:cartesianproduct][count(following-sibling::mml:reals)=count(following-sibling::*)]]"
899priority="2">
900<mml:msup>
901<xsl:apply-templates mode="c2p" select="*[2]">
902 <xsl:with-param name="p" select="5"/>
903</xsl:apply-templates>
904<mml:mn><xsl:value-of select="count(*)-1"/></mml:mn>
905</mml:msup>
906</xsl:template>
907
908
909<!-- 4.4.7.1 sum -->
910<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:sum]]">
911 <mml:mrow>
912 <mml:msubsup>
913 <mml:mo>&#8721;<!--sum--></mml:mo>
914 <mml:mrow><xsl:apply-templates mode="c2p" select="mml:lowlimit/*|mml:interval/*[1]|mml:condition/*"/></mml:mrow>
915 <mml:mrow><xsl:apply-templates mode="c2p" select="mml:uplimit/*|mml:interval/*[2]"/></mml:mrow>
916 </mml:msubsup>
917 <xsl:apply-templates mode="c2p" select="*[last()]"/>
918</mml:mrow>
919</xsl:template>
920
921<!-- 4.4.7.2 product -->
922<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:product]]">
923 <mml:mrow>
924 <mml:msubsup>
925 <mml:mo>&#8719;<!--product--></mml:mo>
926 <mml:mrow><xsl:apply-templates mode="c2p" select="mml:lowlimit/*|mml:interval/*[1]|mml:condition/*"/></mml:mrow>
927 <mml:mrow><xsl:apply-templates mode="c2p" select="mml:uplimit/*|mml:interval/*[2]"/></mml:mrow>
928 </mml:msubsup>
929 <xsl:apply-templates mode="c2p" select="*[last()]"/>
930</mml:mrow>
931</xsl:template>
932
933<!-- 4.4.7.3 limit -->
934<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:limit]]">
935 <mml:mrow>
936 <mml:munder>
937 <mml:mi>limit</mml:mi>
938 <mml:mrow><xsl:apply-templates mode="c2p" select="mml:lowlimit|mml:condition/*"/></mml:mrow>
939 </mml:munder>
940 <xsl:apply-templates mode="c2p" select="*[last()]"/>
941</mml:mrow>
942</xsl:template>
943
944<xsl:template mode="c2p" match="mml:apply[mml:limit]/mml:lowlimit" priority="3">
945<mml:mrow>
946<xsl:apply-templates mode="c2p" select="../mml:bvar/node()"/>
947<mml:mo>&#8594;<!--rightarrow--></mml:mo>
948<xsl:apply-templates mode="c2p"/>
949</mml:mrow>
950</xsl:template>
951
952
953<!-- 4.4.7.4 tendsto -->
954<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:tendsto]]">
955 <xsl:param name="p"/>
956<xsl:call-template name="binary">
957 <xsl:with-param name="this-p" select="2"/>
958 <xsl:with-param name="p" select="$p"/>
959 <xsl:with-param name="mo"><mml:mo>
960 <xsl:choose>
961 <xsl:when test="@type='above'">&#8600;<!--searrow--></xsl:when>
962 <xsl:when test="@type='below'">&#8599;<!--nearrow--></xsl:when>
963 <xsl:when test="@type='two-sided'">&#8594;<!--rightarrow--></xsl:when>
964 <xsl:otherwise>&#8594;<!--rightarrow--></xsl:otherwise>
965 </xsl:choose>
966 </mml:mo></xsl:with-param>
967</xsl:call-template>
968</xsl:template>
969
970<!-- 4.4.8.1 trig -->
971<xsl:template mode="c2p" match="mml:apply[*[1][
972 self::mml:sin or self::mml:cos or self::mml:tan or self::mml:sec or
973 self::mml:csc or self::mml:cot or self::mml:sinh or self::mml:cosh or
974 self::mml:tanh or self::mml:sech or self::mml:csch or self::mml:coth or
975 self::mml:arcsin or self::mml:arccos or self::mml:arctan or self::mml:arccosh
976 or self::mml:arccot or self::mml:arccoth or self::mml:arccsc or
977 self::mml:arccsch or self::mml:arcsec or self::mml:arcsech or
978 self::mml:arcsinh or self::mml:arctanh or self::mml:ln]]">
979<mml:mrow>
980<mml:mi><xsl:value-of select="local-name(*[1])"/></mml:mi>
981<xsl:apply-templates mode="c2p" select="*[2]">
982 <xsl:with-param name="p" select="7"/>
983</xsl:apply-templates>
984</mml:mrow>
985</xsl:template>
986
987
988
989
990<!-- 4.4.8.2 exp -->
991<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:exp]]">
992<mml:msup>
993<mml:mi>e<!-- exponential e--></mml:mi>
994<mml:mrow><xsl:apply-templates mode="c2p" select="*[2]"/></mml:mrow>
995</mml:msup>
996</xsl:template>
997
998<!-- 4.4.8.3 ln -->
999<!-- with trig -->
1000
1001<!-- 4.4.8.4 log -->
1002<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:log]]">
1003<mml:mrow>
1004<xsl:choose>
1005<xsl:when test="not(mml:logbase) or mml:logbase=10">
1006<mml:mi>log</mml:mi>
1007</xsl:when>
1008<xsl:otherwise>
1009<mml:msub>
1010<mml:mi>log</mml:mi>
1011<mml:mrow><xsl:apply-templates mode="c2p" select="mml:logbase/node()"/></mml:mrow>
1012</mml:msub>
1013</xsl:otherwise>
1014</xsl:choose>
1015<xsl:apply-templates mode="c2p" select="*[last()]">
1016 <xsl:with-param name="p" select="7"/>
1017</xsl:apply-templates>
1018</mml:mrow>
1019</xsl:template>
1020
1021
1022<!-- 4.4.9.1 mean -->
1023<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:mean]]">
1024<mml:mrow>
1025 <mml:mo>&#9001;<!--langle--></mml:mo>
1026 <xsl:for-each select="*[position()&gt;1]">
1027 <xsl:apply-templates mode="c2p" select="."/>
1028 <xsl:if test="position() !=last()"><mml:mo>,</mml:mo></xsl:if>
1029 </xsl:for-each>
1030<mml:mo>&#9002;<!--rangle--></mml:mo>
1031</mml:mrow>
1032</xsl:template>
1033
1034
1035<!-- 4.4.9.2 sdef -->
1036<xsl:template mode="c2p" match="mml:sdev">
1037<mml:mo>&#963;<!--sigma--></mml:mo>
1038</xsl:template>
1039
1040<!-- 4.4.9.3 variance -->
1041<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:variance]]">
1042<mml:msup>
1043<mml:mrow>
1044<mml:mo>&#963;<!--sigma--></mml:mo>
1045<mml:mo>(</mml:mo>
1046<xsl:apply-templates mode="c2p" select="*[2]"/>
1047<mml:mo>)</mml:mo>
1048</mml:mrow>
1049<mml:mn>2</mml:mn>
1050</mml:msup>
1051</xsl:template>
1052
1053
1054<!-- 4.4.9.4 median -->
1055<xsl:template mode="c2p" match="mml:median">
1056<mml:mo>median</mml:mo>
1057</xsl:template>
1058
1059
1060<!-- 4.4.9.5 mode -->
1061<xsl:template mode="c2p" match="mml:mode">
1062<mml:mo>mode</mml:mo>
1063</xsl:template>
1064
1065<!-- 4.4.9.5 moment -->
1066<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:moment]]">
1067<mml:mrow>
1068 <mml:mo>&#9001;<!--langle--></mml:mo>
1069 <mml:msup>
1070 <xsl:apply-templates mode="c2p" select="*[last()]"/>
1071 <mml:mrow><xsl:apply-templates mode="c2p" select="mml:degree/node()"/></mml:mrow>
1072 </mml:msup>
1073<mml:mo>&#9002;<!--rangle--></mml:mo>
1074</mml:mrow>
1075</xsl:template>
1076
1077<!-- 4.4.9.5 momentabout -->
1078<xsl:template mode="c2p" match="mml:momentabout"/>
1079
1080<!-- 4.4.10.1 vector -->
1081<xsl:template mode="c2p" match="mml:vector">
1082<mml:mrow>
1083<mml:mo>(</mml:mo>
1084<mml:mtable>
1085<xsl:for-each select="*">
1086<mml:mtr><mml:mtd><xsl:apply-templates mode="c2p" select="."/></mml:mtd></mml:mtr>
1087</xsl:for-each>
1088</mml:mtable>
1089<mml:mo>)</mml:mo>
1090</mml:mrow>
1091</xsl:template>
1092
1093<!-- 4.4.10.2 matrix -->
1094<xsl:template mode="c2p" match="mml:matrix">
1095<mml:mrow>
1096<mml:mo>(</mml:mo>
1097<mml:mtable>
1098<xsl:apply-templates mode="c2p"/>
1099</mml:mtable>
1100<mml:mo>)</mml:mo>
1101</mml:mrow>
1102</xsl:template>
1103
1104<!-- 4.4.10.3 matrixrow -->
1105<xsl:template mode="c2p" match="mml:matrixrow">
1106<mml:mtr>
1107<xsl:for-each select="*">
1108<mml:mtd><xsl:apply-templates mode="c2p" select="."/></mml:mtd>
1109</xsl:for-each>
1110</mml:mtr>
1111</xsl:template>
1112
1113<!-- 4.4.10.4 determinant -->
1114<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:determinant]]">
1115<mml:mrow>
1116<mml:mi>det</mml:mi>
1117<xsl:apply-templates mode="c2p" select="*[2]">
1118 <xsl:with-param name="p" select="7"/>
1119</xsl:apply-templates>
1120</mml:mrow>
1121</xsl:template>
1122
1123<xsl:template
1124match="mml:apply[*[1][self::mml:determinant]][*[2][self::mml:matrix]]" priority="2">
1125<mml:mrow>
1126<mml:mo>|</mml:mo>
1127<mml:mtable>
1128<xsl:apply-templates mode="c2p" select="mml:matrix/*"/>
1129</mml:mtable>
1130<mml:mo>|</mml:mo>
1131</mml:mrow>
1132</xsl:template>
1133
1134<!-- 4.4.10.5 transpose -->
1135<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:transpose]]">
1136<mml:msup>
1137<xsl:apply-templates mode="c2p" select="*[2]">
1138 <xsl:with-param name="p" select="7"/>
1139</xsl:apply-templates>
1140<mml:mi>T</mml:mi>
1141</mml:msup>
1142</xsl:template>
1143
1144<!-- 4.4.10.5 selector -->
1145<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:selector]]">
1146<mml:msub>
1147<xsl:apply-templates mode="c2p" select="*[2]">
1148 <xsl:with-param name="p" select="7"/>
1149</xsl:apply-templates>
1150<mml:mrow>
1151 <xsl:for-each select="*[position()&gt;2]">
1152 <xsl:apply-templates mode="c2p" select="."/>
1153 <xsl:if test="position() !=last()"><mml:mo>,</mml:mo></xsl:if>
1154 </xsl:for-each>
1155</mml:mrow>
1156</mml:msub>
1157</xsl:template>
1158
1159<!-- *** -->
1160<!-- 4.4.10.6 vectorproduct see cartesianproduct -->
1161
1162
1163<!-- 4.4.10.7 scalarproduct-->
1164<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:scalarproduct or self::mml:outerproduct]]">
1165<xsl:param name="p" select="0"/>
1166<xsl:call-template name="infix">
1167 <xsl:with-param name="this-p" select="2"/>
1168 <xsl:with-param name="p" select="$p"/>
1169 <xsl:with-param name="mo"><mml:mo>.</mml:mo></xsl:with-param>
1170</xsl:call-template>
1171</xsl:template>
1172
1173<!-- 4.4.10.8 outerproduct-->
1174
1175<!-- 4.4.11.2 semantics -->
1176<xsl:template mode="c2p" match="mml:semantics">
1177 <xsl:apply-templates mode="c2p" select="*[1]"/>
1178</xsl:template>
1179<xsl:template mode="c2p" match="mml:semantics[mml:annotation-xml/@encoding='MathML-Presentation']">
1180 <xsl:apply-templates mode="c2p" select="mml:annotation-xml[@encoding='MathML-Presentation']/node()"/>
1181</xsl:template>
1182
1183<!-- 4.4.12.1 integers -->
1184<xsl:template mode="c2p" match="mml:integers">
1185<mml:mi mathvariant="double-struck">Z</mml:mi>
1186</xsl:template>
1187
1188<!-- 4.4.12.2 reals -->
1189<xsl:template mode="c2p" match="mml:reals">
1190<mml:mi mathvariant="double-struck">R</mml:mi>
1191</xsl:template>
1192
1193<!-- 4.4.12.3 rationals -->
1194<xsl:template mode="c2p" match="mml:rationals">
1195<mml:mi mathvariant="double-struck">Q</mml:mi>
1196</xsl:template>
1197
1198<!-- 4.4.12.4 naturalnumbers -->
1199<xsl:template mode="c2p" match="mml:naturalnumbers">
1200<mml:mi mathvariant="double-struck">N</mml:mi>
1201</xsl:template>
1202
1203<!-- 4.4.12.5 complexes -->
1204<xsl:template mode="c2p" match="mml:complexes">
1205<mml:mi mathvariant="double-struck">C</mml:mi>
1206</xsl:template>
1207
1208<!-- 4.4.12.6 primes -->
1209<xsl:template mode="c2p" match="mml:primes">
1210<mml:mi mathvariant="double-struck">P</mml:mi>
1211</xsl:template>
1212
1213<!-- 4.4.12.7 exponentiale -->
1214<xsl:template mode="c2p" match="mml:exponentiale">
1215 <mml:mi>e<!-- exponential e--></mml:mi>
1216</xsl:template>
1217
1218<!-- 4.4.12.8 imaginaryi -->
1219<xsl:template mode="c2p" match="mml:imaginaryi">
1220 <mml:mi>i<!-- imaginary i--></mml:mi>
1221</xsl:template>
1222
1223<!-- 4.4.12.9 notanumber -->
1224<xsl:template mode="c2p" match="mml:notanumber">
1225 <mml:mi>NaN</mml:mi>
1226</xsl:template>
1227
1228<!-- 4.4.12.10 true -->
1229<xsl:template mode="c2p" match="mml:true">
1230 <mml:mi>true</mml:mi>
1231</xsl:template>
1232
1233<!-- 4.4.12.11 false -->
1234<xsl:template mode="c2p" match="mml:false">
1235 <mml:mi>false</mml:mi>
1236</xsl:template>
1237
1238<!-- 4.4.12.12 emptyset -->
1239<xsl:template mode="c2p" match="mml:emptyset">
1240 <mml:mi>&#8709;<!-- emptyset --></mml:mi>
1241</xsl:template>
1242
1243
1244<!-- 4.4.12.13 pi -->
1245<xsl:template mode="c2p" match="mml:pi">
1246 <mml:mi>&#960;<!-- pi --></mml:mi>
1247</xsl:template>
1248
1249<!-- 4.4.12.14 eulergamma -->
1250<xsl:template mode="c2p" match="mml:eulergamma">
1251 <mml:mi>&#947;<!-- gamma --></mml:mi>
1252</xsl:template>
1253
1254<!-- 4.4.12.15 infinity -->
1255<xsl:template mode="c2p" match="mml:infinity">
1256 <mml:mi>&#8734;<!-- infinity --></mml:mi>
1257</xsl:template>
1258
1259
1260<!-- ****************************** -->
1261<xsl:template name="infix" >
1262 <xsl:param name="mo"/>
1263 <xsl:param name="p" select="0"/>
1264 <xsl:param name="this-p" select="0"/>
1265 <mml:mrow>
1266 <xsl:if test="$this-p &lt; $p"><mml:mo>(</mml:mo></xsl:if>
1267 <xsl:for-each select="*[position()&gt;1]">
1268 <xsl:if test="position() &gt; 1">
1269 <xsl:copy-of select="$mo"/>
1270 </xsl:if>
1271 <xsl:apply-templates mode="c2p" select=".">
1272 <xsl:with-param name="p" select="$this-p"/>
1273 </xsl:apply-templates>
1274 </xsl:for-each>
1275 <xsl:if test="$this-p &lt; $p"><mml:mo>)</mml:mo></xsl:if>
1276 </mml:mrow>
1277</xsl:template>
1278
1279<xsl:template name="binary" >
1280 <xsl:param name="mo"/>
1281 <xsl:param name="p" select="0"/>
1282 <xsl:param name="this-p" select="0"/>
1283 <mml:mrow>
1284 <xsl:if test="$this-p &lt; $p"><mml:mo>(</mml:mo></xsl:if>
1285 <xsl:apply-templates mode="c2p" select="*[2]">
1286 <xsl:with-param name="p" select="$this-p"/>
1287 </xsl:apply-templates>
1288 <xsl:copy-of select="$mo"/>
1289 <xsl:apply-templates mode="c2p" select="*[3]">
1290 <xsl:with-param name="p" select="$this-p"/>
1291 </xsl:apply-templates>
1292 <xsl:if test="$this-p &lt; $p"><mml:mo>)</mml:mo></xsl:if>
1293 </mml:mrow>
1294</xsl:template>
1295
1296<xsl:template name="set" >
1297 <xsl:param name="o" select="'{'"/>
1298 <xsl:param name="c" select="'}'"/>
1299 <mml:mrow>
1300 <mml:mo><xsl:value-of select="$o"/></mml:mo>
1301 <xsl:choose>
1302 <xsl:when test="mml:condition">
1303 <mml:mrow><xsl:apply-templates mode="c2p" select="mml:bvar/*[not(self::bvar or self::condition)]"/></mml:mrow>
1304 <mml:mo>|</mml:mo>
1305 <mml:mrow><xsl:apply-templates mode="c2p" select="mml:condition/node()"/></mml:mrow>
1306 </xsl:when>
1307 <xsl:otherwise>
1308 <xsl:for-each select="*">
1309 <xsl:apply-templates mode="c2p" select="."/>
1310 <xsl:if test="position() !=last()"><mml:mo>,</mml:mo></xsl:if>
1311 </xsl:for-each>
1312 </xsl:otherwise>
1313 </xsl:choose>
1314 <mml:mo><xsl:value-of select="$c"/></mml:mo>
1315 </mml:mrow>
1316</xsl:template>
1317
1318</xsl:stylesheet>
1319