]> matita.cs.unibo.it Git - helm.git/blob - helm/style/contentlib.xsl
----------------------------------------------------------------------
[helm.git] / helm / style / contentlib.xsl
1 <?xml version="1.0"?>
2
3 <!-- Copyright (C) 2000, HELM Team                                     -->
4 <!--                                                                   -->
5 <!-- This file is part of HELM, an Hypertextual, Electronic            -->
6 <!-- Library of Mathematics, developed at the Computer Science         -->
7 <!-- Department, University of Bologna, Italy.                         -->
8 <!--                                                                   -->
9 <!-- HELM is free software; you can redistribute it and/or             -->
10 <!-- modify it under the terms of the GNU General Public License       -->
11 <!-- as published by the Free Software Foundation; either version 2    -->
12 <!-- of the License, or (at your option) any later version.            -->
13 <!--                                                                   -->
14 <!-- HELM is distributed in the hope that it will be useful,           -->
15 <!-- but WITHOUT ANY WARRANTY; without even the implied warranty of    -->
16 <!-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the     -->
17 <!-- GNU General Public License for more details.                      -->
18 <!--                                                                   -->
19 <!-- You should have received a copy of the GNU General Public License -->
20 <!-- along with HELM; if not, write to the Free Software               -->
21 <!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
22 <!-- MA  02111-1307, USA.                                              -->
23 <!--                                                                   -->
24 <!-- For details, see the HELM World-Wide-Web page,                    -->
25 <!-- http://cs.unibo.it/helm/.                                         -->
26
27 <!--******************************************************************--> 
28 <!-- Library for MML Content                                          -->
29 <!-- First draft: March 20 2001, Ferruccio Guidi                      -->
30 <!--******************************************************************-->
31
32 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
33                               xmlns:m="http://www.w3.org/1998/Math/MathML"
34                               xmlns:helm="http://www.cs.unibo.it/helm">
35
36 <xsl:template name="out-mml-op"> <!-- outputs MML nodes for operators -->
37    <xsl:param name="arity"/>     <!-- operator arity                  -->
38    <xsl:param name="c-tag"/>     <!-- CIC    tag                      -->
39    <xsl:param name="m-tag"/>     <!-- MathML tag                      -->
40    <xsl:param name="mbody"/>     <!-- other sons of m:apply           -->
41    <xsl:choose>
42       <xsl:when test="count(child::*) = $arity + 1">
43          <m:apply helm:xref="{@id}">
44             <xsl:element name="{concat('m:',$m-tag)}">
45                <xsl:attribute name="definitionURL">
46                   <xsl:value-of select="$c-tag/@uri"/> 
47                </xsl:attribute>
48                <xsl:attribute name="helm:xref">
49                   <xsl:value-of select="$c-tag/@id"/>
50                </xsl:attribute>
51             </xsl:element>
52             <xsl:copy-of select="$mbody"/>
53          </m:apply>
54       </xsl:when>
55       <xsl:otherwise>
56          <xsl:apply-imports/>
57       </xsl:otherwise>
58    </xsl:choose>
59 </xsl:template>
60
61 <!-- noannot -->
62
63 <xsl:template name="mk-mml-op-noannot">    <!-- makes MML nodes for operators (noannot mode) --> 
64    <xsl:param name="arity"/>               <!-- operator arity        -->
65    <xsl:param name="c-tag"/>               <!-- CIC    tag            -->
66    <xsl:param name="m-tag"/>               <!-- MathML tag            -->
67    <xsl:param name="rnset" 
68               select="*[position() > 1]"/> <!-- nodes for recursion   -->
69    <xsl:variable name="mbody">
70       <xsl:apply-templates select="$rnset" mode="noannot"/>
71    </xsl:variable>
72    <xsl:call-template name="out-mml-op">
73       <xsl:with-param name="arity" select="$arity"/>
74       <xsl:with-param name="c-tag" select="$c-tag"/>
75       <xsl:with-param name="m-tag" select="$m-tag"/>
76       <xsl:with-param name="mbody" select="$mbody"/>
77    </xsl:call-template>
78 </xsl:template>
79
80 <!-- interp -->
81
82 <xsl:template name="start-interp"> <!-- interp mode starter -->
83    <xsl:param name="rtree"/>
84    <xsl:param name="atree"/>   
85    <m:apply helm:xref="{@id}">
86       <m:csymbol>interp</m:csymbol>
87       <xsl:apply-templates mode="interp" select="$rtree">
88          <xsl:with-param name="atree" select="$atree"/>
89       </xsl:apply-templates>
90    </m:apply>
91 </xsl:template>
92
93 <xsl:template name="mk-mml-op-interp"> <!-- make MML node for operators (interp mode) --> 
94    <xsl:param name="arity"/>           <!-- operator arity        -->
95    <xsl:param name="c-tag"/>           <!-- CIC    tag            -->
96    <xsl:param name="m-tag"/>           <!-- MathML tag            -->
97    <xsl:param name="atree"/>           <!-- abstract tree pointer -->
98    <xsl:variable name="mbody">
99       <xsl:apply-templates select="*[position() > 1]" mode="interp">
100          <xsl:with-param name="atree" select="$atree"/>
101       </xsl:apply-templates>
102    </xsl:variable>
103    <xsl:call-template name="out-mml-op">
104       <xsl:with-param name="arity" select="$arity"/>
105       <xsl:with-param name="c-tag" select="$c-tag"/>
106       <xsl:with-param name="m-tag" select="$m-tag"/>
107       <xsl:with-param name="mbody" select="$mbody"/>
108    </xsl:call-template>
109 </xsl:template>
110
111 </xsl:stylesheet>