--- /dev/null
+<?xml encoding="ISO-8859-1"?>
+
+<!--*****************************************************************-->
+<!-- DTD FOR ANNOTATED OBJECTS: -->
+<!-- First draft: June 2000, Claudio Sacerdoti Coen -->
+<!--*****************************************************************-->
+
+<!ENTITY % annotation '(#PCDATA|node|attribute)*'>
+
+<!ELEMENT Annotations (Annotation)*>
+<!ATTLIST Annotations
+ of CDATA #REQUIRED>
+
+<!ELEMENT Annotation %annotation;>
+<!ATTLIST Annotation
+ of CDATA #REQUIRED>
+
+<!-- Annotations: -->
+
+<!ELEMENT attribute EMPTY>
+<!ATTLIST attribute
+ name NMTOKEN #REQUIRED
+ id NMTOKEN #REQUIRED
+ child NMTOKEN #IMPLIED
+ grandchild NMTOKEN #IMPLIED>
+
+<!ELEMENT node EMPTY>
+<!ATTLIST node
+ id NMTOKEN #REQUIRED>
--- /dev/null
+<?xml encoding="ISO-8859-1"?>
+
+<!--*****************************************************************-->
+<!-- DTD FOR CIC OBJECTS: -->
+<!-- First draft: September 1999, Claudio Sacerdoti Coen -->
+<!-- Revised: February 3 2000, Claudio Sacerdoti Coen, Irene Schena -->
+<!-- Last Revision: April 4 2000, Claudio Sacerdoti Coen -->
+<!-- Last Revision: June 19 2000, Claudio Sacerdoti Coen -->
+<!-- Last Revision: June 20 2000, Claudio Sacerdoti Coen -->
+<!--*****************************************************************-->
+
+<!-- CIC term declaration -->
+
+<!ENTITY % term '(LAMBDA|CAST|PROD|REL|SORT|APPLY|VAR|META|IMPLICIT|CONST|
+ ABST|MUTIND|MUTCONSTRUCT|MUTCASE|FIX|COFIX)'>
+
+<!-- CIC objects: -->
+
+<!ELEMENT Definition (body, type)>
+<!ATTLIST Definition
+ name CDATA #REQUIRED
+ params CDATA #REQUIRED
+ paramMode (POSSIBLE) #IMPLIED
+ id ID #REQUIRED>
+
+<!ELEMENT Axiom (type)>
+<!ATTLIST Axiom
+ name CDATA #REQUIRED
+ params CDATA #REQUIRED
+ id ID #REQUIRED>
+
+<!ELEMENT CurrentProof (Conjecture*,body,type)>
+<!ATTLIST CurrentProof
+ name CDATA #REQUIRED
+ id ID #REQUIRED>
+
+<!ELEMENT InductiveDefinition (InductiveType+)>
+<!ATTLIST InductiveDefinition
+ noParams NMTOKEN #REQUIRED
+ params CDATA #REQUIRED
+ id ID #REQUIRED>
+
+<!ELEMENT Variable (type)>
+<!ATTLIST Variable
+ name CDATA #REQUIRED
+ id ID #REQUIRED>
+
+<!-- Elements used in CIC objects, which are not terms: -->
+
+<!ELEMENT InductiveType (arity,Constructor*)>
+<!ATTLIST InductiveType
+ name CDATA #REQUIRED
+ inductive (true|false) #REQUIRED>
+
+<!ELEMENT Conjecture %term;>
+<!ATTLIST Conjecture
+ no NMTOKEN #REQUIRED>
+
+<!ELEMENT Constructor %term;>
+<!ATTLIST Constructor
+ name CDATA #REQUIRED>
+
+<!-- CIC terms: -->
+
+<!ELEMENT LAMBDA (source,target)>
+<!ATTLIST LAMBDA
+ id ID #REQUIRED>
+
+<!ELEMENT PROD (source,target)>
+<!ATTLIST PROD
+ id ID #REQUIRED>
+
+<!ELEMENT CAST (term,type)>
+<!ATTLIST CAST
+ id ID #REQUIRED>
+
+<!ELEMENT REL EMPTY>
+<!ATTLIST REL
+ value NMTOKEN #REQUIRED
+ binder CDATA #REQUIRED
+ id ID #REQUIRED>
+
+<!ELEMENT SORT EMPTY>
+<!ATTLIST SORT
+ value CDATA #REQUIRED
+ id ID #REQUIRED>
+
+<!ELEMENT APPLY (%term;)+>
+<!ATTLIST APPLY
+ id ID #REQUIRED>
+
+<!ELEMENT VAR EMPTY>
+<!ATTLIST VAR
+ relUri CDATA #REQUIRED
+ id ID #REQUIRED>
+
+<!ELEMENT META EMPTY>
+<!ATTLIST META
+ no NMTOKEN #REQUIRED
+ id ID #REQUIRED>
+
+<!ELEMENT IMPLICIT EMPTY>
+<!ATTLIST IMPLICIT
+ id ID #REQUIRED>
+
+<!ELEMENT CONST EMPTY>
+<!ATTLIST CONST
+ uri CDATA #REQUIRED
+ id ID #REQUIRED>
+
+<!ELEMENT ABST EMPTY>
+<!ATTLIST ABST
+ uri CDATA #REQUIRED
+ id ID #REQUIRED>
+
+<!ELEMENT MUTIND EMPTY>
+<!ATTLIST MUTIND
+ uri CDATA #REQUIRED
+ noType NMTOKEN #REQUIRED
+ id ID #REQUIRED>
+
+<!ELEMENT MUTCONSTRUCT EMPTY>
+<!ATTLIST MUTCONSTRUCT
+ uri CDATA #REQUIRED
+ noType NMTOKEN #REQUIRED
+ noConstr NMTOKEN #REQUIRED
+ id ID #REQUIRED>
+
+<!ELEMENT MUTCASE (patternsType,inductiveTerm,pattern*)>
+<!ATTLIST MUTCASE
+ uriType CDATA #REQUIRED
+ noType NMTOKEN #REQUIRED
+ id ID #REQUIRED>
+
+<!ELEMENT FIX (FixFunction+)>
+<!ATTLIST FIX
+ noFun NMTOKEN #REQUIRED
+ id ID #REQUIRED>
+
+<!ELEMENT COFIX (CofixFunction+)>
+<!ATTLIST COFIX
+ noFun NMTOKEN #REQUIRED
+ id ID #REQUIRED>
+
+<!-- Elements used in CIC terms: -->
+
+<!ELEMENT FixFunction (type,body)>
+<!ATTLIST FixFunction
+ name CDATA #REQUIRED
+ recIndex NMTOKEN #REQUIRED>
+
+<!ELEMENT CofixFunction (type,body)>
+<!ATTLIST CofixFunction
+ name CDATA #REQUIRED>
+
+<!-- Sintactic sugar for CIC terms and for CIC objects: -->
+
+<!ELEMENT source %term;>
+
+<!ELEMENT target %term;>
+<!ATTLIST target
+ binder CDATA #IMPLIED>
+
+<!ELEMENT term %term;>
+
+<!ELEMENT type %term;>
+
+<!ELEMENT arity %term;>
+
+<!ELEMENT patternsType %term;>
+
+<!ELEMENT inductiveTerm %term;>
+
+<!ELEMENT pattern %term;>
+
+<!ELEMENT body %term;>
--- /dev/null
+<?xml encoding="ISO-8859-1"?>
+
+<!--*****************************************************************-->
+<!-- DTD FOR CIC OBJECTS AT LEVEL OF MATHML CONTENT: -->
+<!-- First draft: March 21, Claudio Sacerdoti Coen, Irene Schena -->
+<!--*****************************************************************-->
+
+<!ENTITY % mathml SYSTEM "mathml2.dtd">
+
+%mathml;
+
+<!ENTITY % term '(annotation|%math.qname;)'>
+
+<!-- Terms: -->
+
+<!ELEMENT annotation (#PCDATA|annotation|%math.qname;)*>
+<!ATTLIST annotation
+ xmlns:m CDATA #REQUIRED>
+
+<!-- CIC objects: -->
+
+<!ELEMENT Definition (Params,body,type)>
+<!ATTLIST Definition
+ name CDATA #REQUIRED
+ xmlns:m CDATA #REQUIRED>
+
+<!ELEMENT Axiom (Params,type)>
+<!ATTLIST Axiom
+ name CDATA #REQUIRED
+ xmlns:m CDATA #REQUIRED>
+
+<!ELEMENT CurrentProof (Conjecture*,body,type)>
+<!ATTLIST CurrentProof
+ name CDATA #REQUIRED
+ xmlns:m CDATA #REQUIRED>
+
+<!ELEMENT InductiveDefinition (Params,Param*,InductiveType+)>
+<!ATTLIST InductiveDefinition
+ xmlns:m CDATA #REQUIRED>
+
+<!ELEMENT Variable (type)>
+<!ATTLIST Variable
+ name CDATA #REQUIRED
+ xmlns:m CDATA #REQUIRED>
+
+<!-- Elements used in CIC objects, which are not terms: -->
+
+<!ELEMENT InductiveType (arity,Constructor*)>
+<!ATTLIST InductiveType
+ name CDATA #REQUIRED
+ inductive (true|false) #REQUIRED>
+
+<!ELEMENT Conjecture %term;>
+<!ATTLIST Conjecture
+ no NMTOKEN #REQUIRED>
+
+<!ELEMENT Constructor %term;>
+<!ATTLIST Constructor
+ name CDATA #REQUIRED>
+
+<!ELEMENT Param %term;>
+<!ATTLIST Param
+ name CDATA #REQUIRED>
+
+<!ELEMENT Params (#PCDATA)*>
+
+<!-- Sintactic sugar for CIC objects: -->
+
+<!ELEMENT type %term;>
+
+<!ELEMENT arity %term;>
+
+<!ELEMENT body %term;>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null
+<?xml encoding="ISO-8859-1"?>
+
+<!--*****************************************************************-->
+<!-- DTD FOR INNER TYPES: -->
+<!-- First draft: November 11 2000, Claudio Sacerdoti Coen -->
+<!--*****************************************************************-->
+
+<!ENTITY % cicdtd SYSTEM "cic.dtd">
+
+%cicdtd;
+
+<!ELEMENT ALLTYPES (TYPE*)>
+
+<!ELEMENT TYPE (%term;)>
+<!ATTLIST TYPE
+ id NMTOKEN #REQUIRED>
--- /dev/null
+
+<!--
+ File isoamsa.ent produced by the XSL script mmldtd.xsl
+ from input data in unicode.xml.
+
+ Please report any errors to
+ David Carlisle <davidc@nag.co.uk>.
+
+ The numeric character values assigned to each entity
+ (should) match either official Unicode assignments
+ or assignments provisionally allocated by the
+ Unicode Consortium based on the characters in the `STIX'
+ propsal for mathematics. Note that these assignments
+ have not been ratified by the corresponding ISO
+ committee and thus should be considered liable to
+ change.
+
+ Entity names in this file are derived from files carrying the
+ following notice:
+
+ (C) International Organization for Standardization 1991
+ Permission to copy in any form is granted for use with
+ conforming SGML systems and applications as defined in
+ ISO 8879, provided this notice is included in all copies.
+
+-->
+
+<!ENTITY angzarr "⍼" ><!--angle with down zig-zag arrow -->
+<!ENTITY cirmid "⫯" ><!--circle, mid below -->
+<!ENTITY cudarrl "⤸" ><!--left, curved, down arrow -->
+<!ENTITY cudarrr "⤵" ><!--right, curved, down arrow -->
+<!ENTITY cularr "↶" ><!--/curvearrowleft A: left curved arrow -->
+<!ENTITY cularrp "⤽" ><!--curved left arrow with plus -->
+<!ENTITY curarr "↷" ><!--/curvearrowright A: rt curved arrow -->
+<!ENTITY curarrm "⤼" ><!--curved right arrow with minus -->
+<!ENTITY dArr "⇓" ><!--/Downarrow A: down dbl arrow -->
+<!ENTITY Darr "↡" ><!--down two-headed arrow -->
+<!ENTITY ddarr "⇊" ><!--/downdownarrows A: two down arrows -->
+<!ENTITY DDotrahd "⤑" ><!--right arrow with dotted stem -->
+<!ENTITY dfisht "⥿" ><!--down fish tail -->
+<!ENTITY dHar "⥥" ><!--down harpoon-left, down harpoon-right -->
+<!ENTITY dharl "⇃" ><!--/downharpoonleft A: dn harpoon-left -->
+<!ENTITY dharr "⇂" ><!--/downharpoonright A: down harpoon-rt -->
+<!ENTITY duarr "⇵" ><!--down arrow, up arrow -->
+<!ENTITY duhar "⥯" ><!--down harp, up harp -->
+<!ENTITY dzigrarr "⇝" ><!--right long zig-zag arrow -->
+<!ENTITY erarr "⥱" ><!--equal, right arrow below -->
+<!ENTITY harr "↔" ><!--/leftrightarrow A: l&r arrow -->
+<!ENTITY hArr "⇔" ><!--/Leftrightarrow A: l&r dbl arrow -->
+<!ENTITY harrcir "⥈" ><!--left and right arrow with a circle -->
+<!ENTITY harrw "↭" ><!--/leftrightsquigarrow A: l&r arr-wavy -->
+<!ENTITY hoarr "⇿" ><!--horizontal open arrow -->
+<!ENTITY imof "⊷" ><!--image of -->
+<!ENTITY lAarr "⇚" ><!--/Lleftarrow A: left triple arrow -->
+<!ENTITY Larr "↞" ><!--/twoheadleftarrow A: -->
+<!ENTITY larrbfs "⤟" ><!--left arrow-bar, filled square -->
+<!ENTITY larrfs "⤝" ><!--left arrow, filled square -->
+<!ENTITY larrhk "↩" ><!--/hookleftarrow A: left arrow-hooked -->
+<!ENTITY larrlp "↫" ><!--/looparrowleft A: left arrow-looped -->
+<!ENTITY larrpl "⤹" ><!--left arrow, plus -->
+<!ENTITY larrsim "⥳" ><!--left arrow, similar -->
+<!ENTITY larrtl "↢" ><!--/leftarrowtail A: left arrow-tailed -->
+<!ENTITY latail "⤙" ><!--left arrow-tail -->
+<!ENTITY lAtail "⤛" ><!--left double arrow-tail -->
+<!ENTITY lbarr "⤌" ><!--left broken arrow -->
+<!ENTITY lBarr "⤎" ><!--left doubly broken arrow -->
+<!ENTITY ldca "⤶" ><!--left down curved arrow -->
+<!ENTITY ldrdhar "⥧" ><!--left harpoon-down over right harpoon-down -->
+<!ENTITY ldrushar "⥋" ><!--left-down-right-up harpoon -->
+<!ENTITY ldsh "↲" ><!--left down angled arrow -->
+<!ENTITY lfisht "⥼" ><!--left fish tail -->
+<!ENTITY lHar "⥢" ><!--left harpoon-up over left harpoon-down -->
+<!ENTITY lhard "↽" ><!--/leftharpoondown A: l harpoon-down -->
+<!ENTITY lharu "↼" ><!--/leftharpoonup A: left harpoon-up -->
+<!ENTITY lharul "⥪" ><!--left harpoon-up over long dash -->
+<!ENTITY llarr "⇇" ><!--/leftleftarrows A: two left arrows -->
+<!ENTITY llhard "⥫" ><!--left harpoon-down below long dash -->
+<!ENTITY loarr "⇽" ><!--left open arrow -->
+<!ENTITY lrarr "⇆" ><!--/leftrightarrows A: l arr over r arr -->
+<!ENTITY lrhar "⇋" ><!--/leftrightharpoons A: l harp over r -->
+<!ENTITY lrhard "⥭" ><!--right harpoon-down below long dash -->
+<!ENTITY lsh "↰" ><!--/Lsh A: -->
+<!ENTITY lurdshar "⥊" ><!--left-up-right-down harpoon -->
+<!ENTITY luruhar "⥦" ><!--left harpoon-up over right harpoon-up -->
+<!ENTITY map "↦" ><!--/mapsto A: -->
+<!ENTITY Map "⤅" ><!--twoheaded mapsto -->
+<!ENTITY midcir "⫰" ><!--mid, circle below -->
+<!ENTITY mumap "⊸" ><!--/multimap A: -->
+<!ENTITY nearhk "⤤" ><!--NE arrow-hooked -->
+<!ENTITY nearr "↗" ><!--/nearrow A: NE pointing arrow -->
+<!ENTITY neArr "⇗" ><!--NE pointing dbl arrow -->
+<!ENTITY nesear "⤨" ><!--/toea A: NE & SE arrows -->
+<!ENTITY nharr "↮" ><!--/nleftrightarrow A: not l&r arrow -->
+<!ENTITY nhArr "⇎" ><!--/nLeftrightarrow A: not l&r dbl arr -->
+<!ENTITY nlarr "↚" ><!--/nleftarrow A: not left arrow -->
+<!ENTITY nlArr "⇍" ><!--/nLeftarrow A: not implied by -->
+<!ENTITY nrarr "↛" ><!--/nrightarrow A: not right arrow -->
+<!ENTITY nrArr "⇏" ><!--/nRightarrow A: not implies -->
+<!ENTITY nrarrc "⤳̸" ><!--not right arrow-curved -->
+<!ENTITY nrarrw "↝̸" ><!--not right arrow-wavy -->
+<!ENTITY nvHarr "⇎" ><!--not, vert, left and right double arrow -->
+<!ENTITY nvlArr "⇍" ><!--not, vert, left double arrow -->
+<!ENTITY nvrArr "⇏" ><!--not, vert, right double arrow -->
+<!ENTITY nwarhk "⤣" ><!--NW arrow-hooked -->
+<!ENTITY nwarr "↖" ><!--/nwarrow A: NW pointing arrow -->
+<!ENTITY nwArr "⇖" ><!--NW pointing dbl arrow -->
+<!ENTITY nwnear "⤧" ><!--NW & NE arrows -->
+<!ENTITY olarr "↺" ><!--/circlearrowleft A: l arr in circle -->
+<!ENTITY orarr "↻" ><!--/circlearrowright A: r arr in circle -->
+<!ENTITY origof "⊶" ><!--original of -->
+<!ENTITY rAarr "⇛" ><!--/Rrightarrow A: right triple arrow -->
+<!ENTITY Rarr "↠" ><!--/twoheadrightarrow A: -->
+<!ENTITY rarrap "⥵" ><!--approximate, right arrow above -->
+<!ENTITY rarrbfs "⤠" ><!--right arrow-bar, filled square -->
+<!ENTITY rarrc "⤳" ><!--right arrow-curved -->
+<!ENTITY rarrfs "⤞" ><!--right arrow, filled square -->
+<!ENTITY rarrhk "↪" ><!--/hookrightarrow A: rt arrow-hooked -->
+<!ENTITY rarrlp "↬" ><!--/looparrowright A: rt arrow-looped -->
+<!ENTITY rarrpl "⥅" ><!--right arrow, plus -->
+<!ENTITY rarrsim "⥴" ><!--right arrow, similar -->
+<!ENTITY rarrtl "↣" ><!--/rightarrowtail A: rt arrow-tailed -->
+<!ENTITY Rarrtl "⤖" ><!--right two-headed arrow with tail -->
+<!ENTITY rarrw "⇝" ><!--/rightsquigarrow A: rt arrow-wavy -->
+<!ENTITY ratail "↣" ><!--right arrow-tail -->
+<!ENTITY rAtail "⤜" ><!--right double arrow-tail -->
+<!ENTITY rbarr "⤍" ><!--/bkarow A: right broken arrow -->
+<!ENTITY rBarr "⤏" ><!--/dbkarow A: right doubly broken arrow -->
+<!ENTITY RBarr "⤐" ><!--/drbkarow A: twoheaded right broken arrow -->
+<!ENTITY rdca "⤷" ><!--right down curved arrow -->
+<!ENTITY rdldhar "⥩" ><!--right harpoon-down over left harpoon-down -->
+<!ENTITY rdsh "↳" ><!--right down angled arrow -->
+<!ENTITY rfisht "⥽" ><!--right fish tail -->
+<!ENTITY rHar "⥤" ><!--right harpoon-up over right harpoon-down -->
+<!ENTITY rhard "⇁" ><!--/rightharpoondown A: rt harpoon-down -->
+<!ENTITY rharu "⇀" ><!--/rightharpoonup A: rt harpoon-up -->
+<!ENTITY rharul "⥬" ><!--right harpoon-up over long dash -->
+<!ENTITY rlarr "⇄" ><!--/rightleftarrows A: r arr over l arr -->
+<!ENTITY rlhar "⇌" ><!--/rightleftharpoons A: r harp over l -->
+<!ENTITY roarr "⇾" ><!--right open arrow -->
+<!ENTITY rrarr "⇉" ><!--/rightrightarrows A: two rt arrows -->
+<!ENTITY rsh "↱" ><!--/Rsh A: -->
+<!ENTITY ruluhar "⥨" ><!--right harpoon-up over left harpoon-up -->
+<!ENTITY searhk "⤥" ><!--/hksearow A: SE arrow-hooken -->
+<!ENTITY searr "↘" ><!--/searrow A: SE pointing arrow -->
+<!ENTITY seArr "⇘" ><!--SE pointing dbl arrow -->
+<!ENTITY seswar "⤩" ><!--/tosa A: SE & SW arrows -->
+<!ENTITY simrarr "⥲" ><!--similar, right arrow below -->
+<!ENTITY slarr "←⁣" ><!--short left arrow -->
+<!ENTITY srarr "→⁣" ><!--short right arrow -->
+<!ENTITY swarhk "⤦" ><!--/hkswarow A: SW arrow-hooked -->
+<!ENTITY swarr "↙" ><!--/swarrow A: SW pointing arrow -->
+<!ENTITY swArr "⇙" ><!--SW pointing dbl arrow -->
+<!ENTITY swnwar "⤪" ><!--SW & NW arrows -->
+<!ENTITY uArr "⇑" ><!--/Uparrow A: up dbl arrow -->
+<!ENTITY Uarr "↟" ><!--up two-headed arrow -->
+<!ENTITY Uarrocir "⥉" ><!--up two-headed arrow above circle -->
+<!ENTITY udarr "⇅" ><!--up arrow, down arrow -->
+<!ENTITY udhar "⥮" ><!--up harp, down harp -->
+<!ENTITY ufisht "⥾" ><!--up fish tail -->
+<!ENTITY uHar "⥣" ><!--up harpoon-left, up harpoon-right -->
+<!ENTITY uharl "↿" ><!--/upharpoonleft A: up harpoon-left -->
+<!ENTITY uharr "↾" ><!--/upharpoonright /restriction A: up harp-r -->
+<!ENTITY uuarr "⇈" ><!--/upuparrows A: two up arrows -->
+<!ENTITY varr "↕" ><!--/updownarrow A: up&down arrow -->
+<!ENTITY vArr "⇕" ><!--/Updownarrow A: up&down dbl arrow -->
+<!ENTITY xharr "↔" ><!--/longleftrightarrow A: long l&r arr -->
+<!ENTITY xhArr "⇔" ><!--/Longleftrightarrow A: long l&r dbl arr -->
+<!ENTITY xlarr "←" ><!--/longleftarrow A: long left arrow -->
+<!ENTITY xlArr "⇐" ><!--/Longleftarrow A: long l dbl arrow -->
+<!ENTITY xmap "↦" ><!--/longmapsto A: -->
+<!ENTITY xrarr "→" ><!--/longrightarrow A: long right arrow -->
+<!ENTITY xrArr "⇒" ><!--/Longrightarrow A: long rt dbl arr -->
+<!ENTITY zigrarr "⇝" ><!--right zig-zag arrow -->
--- /dev/null
+
+<!--
+ File isoamsb.ent produced by the XSL script mmldtd.xsl
+ from input data in unicode.xml.
+
+ Please report any errors to
+ David Carlisle <davidc@nag.co.uk>.
+
+ The numeric character values assigned to each entity
+ (should) match either official Unicode assignments
+ or assignments provisionally allocated by the
+ Unicode Consortium based on the characters in the `STIX'
+ propsal for mathematics. Note that these assignments
+ have not been ratified by the corresponding ISO
+ committee and thus should be considered liable to
+ change.
+
+ Entity names in this file are derived from files carrying the
+ following notice:
+
+ (C) International Organization for Standardization 1991
+ Permission to copy in any form is granted for use with
+ conforming SGML systems and applications as defined in
+ ISO 8879, provided this notice is included in all copies.
+
+-->
+
+<!ENTITY ac "⤏" ><!--most positive -->
+<!ENTITY acE "⧛" ><!--most positive, two lines below -->
+<!ENTITY amalg "⨿" ><!--/amalg B: amalgamation or coproduct -->
+<!ENTITY barvee "⊽" ><!--bar, vee -->
+<!ENTITY barwed "⊼" ><!--/barwedge B: logical and, bar above -->
+<!ENTITY Barwed "⌆" ><!--/doublebarwedge B: log and, dbl bar above -->
+<!ENTITY bsolb "⧅" ><!--reverse solidus in square -->
+<!ENTITY Cap "⋒" ><!--/Cap /doublecap B: dbl intersection -->
+<!ENTITY capand "⩄" ><!--intersection, and -->
+<!ENTITY capbrcup "⩉" ><!--intersection, bar, union -->
+<!ENTITY capcap "⩋" ><!--intersection, intersection, joined -->
+<!ENTITY capcup "⩇" ><!--intersection above union -->
+<!ENTITY capdot "⩀" ><!--intersection, with dot -->
+<!ENTITY caps "∩⁣" ><!--intersection, serifs -->
+<!ENTITY ccaps "⩍" ><!--closed intersection, serifs -->
+<!ENTITY ccups "⩌" ><!--closed union, serifs -->
+<!ENTITY ccupssm "⩐" ><!--closed union, serifs, smash product -->
+<!ENTITY coprod "∐" ><!--/coprod L: coproduct operator -->
+<!ENTITY Cup "⋓" ><!--/Cup /doublecup B: dbl union -->
+<!ENTITY cupbrcap "⩈" ><!--union, bar, intersection -->
+<!ENTITY cupcap "⩆" ><!--union above intersection -->
+<!ENTITY cupcup "⩊" ><!--union, union, joined -->
+<!ENTITY cupdot "⊍" ><!--union, with dot -->
+<!ENTITY cupor "⩅" ><!--union, or -->
+<!ENTITY cups "∪⁣" ><!--union, serifs -->
+<!ENTITY cuvee "⋎" ><!--/curlyvee B: curly logical or -->
+<!ENTITY cuwed "⋏" ><!--/curlywedge B: curly logical and -->
+<!ENTITY dagger "†" ><!--/dagger B: dagger relation -->
+<!ENTITY Dagger "‡" ><!--/ddagger B: double dagger relation -->
+<!ENTITY diam "⋄" ><!--/diamond B: open diamond -->
+<!ENTITY divonx "⋇" ><!--/divideontimes B: division on times -->
+<!ENTITY eplus "⩱" ><!--equal, plus -->
+<!ENTITY hercon "⊹" ><!--hermitian conjugate matrix -->
+<!ENTITY intcal "⊺" ><!--/intercal B: intercal -->
+<!ENTITY iprod "⨼" ><!--/intprod -->
+<!ENTITY loplus "⨭" ><!--plus sign in left half circle -->
+<!ENTITY lotimes "⨴" ><!--multiply sign in left half circle -->
+<!ENTITY lthree "⋋" ><!--/leftthreetimes B: -->
+<!ENTITY ltimes "⋉" ><!--/ltimes B: times sign, left closed -->
+<!ENTITY midast "*" ><!--/ast B: asterisk -->
+<!ENTITY minusb "⊟" ><!--/boxminus B: minus sign in box -->
+<!ENTITY minusd "∸" ><!--/dotminus B: minus sign, dot above -->
+<!ENTITY minusdu "⨪" ><!--minus sign, dot below -->
+<!ENTITY ncap "⩃" ><!--bar, intersection -->
+<!ENTITY ncup "⩂" ><!--bar, union -->
+<!ENTITY oast "⊛" ><!--/circledast B: asterisk in circle -->
+<!ENTITY ocir "⊚" ><!--/circledcirc B: small circle in circle -->
+<!ENTITY odash "⊝" ><!--/circleddash B: hyphen in circle -->
+<!ENTITY odiv "⨸" ><!--divide in circle -->
+<!ENTITY odot "⊙" ><!--/odot B: middle dot in circle -->
+<!ENTITY odsold "⦼" ><!--dot, solidus, dot in circle -->
+<!ENTITY ofcir "⦿" ><!--filled circle in circle -->
+<!ENTITY ogt "⧁" ><!--greater-than in circle -->
+<!ENTITY ohbar "⦵" ><!--circle with horizontal bar -->
+<!ENTITY olcir "⦾" ><!--large circle in circle -->
+<!ENTITY olt "⧀" ><!--less-than in circle -->
+<!ENTITY omid "⦶" ><!--vertical bar in circle -->
+<!ENTITY ominus "⊖" ><!--/ominus B: minus sign in circle -->
+<!ENTITY opar "⦷" ><!--parallel in circle -->
+<!ENTITY operp "⦹" ><!--perpendicular in circle -->
+<!ENTITY oplus "⊕" ><!--/oplus B: plus sign in circle -->
+<!ENTITY osol "⊘" ><!--/oslash B: solidus in circle -->
+<!ENTITY otimes "⊗" ><!--/otimes B: multiply sign in circle -->
+<!ENTITY Otimes "⨷" ><!--multiply sign in double circle -->
+<!ENTITY otimesas "⨶" ><!--multiply sign in circle, circumflex accent -->
+<!ENTITY ovbar "⌽" ><!--circle with vertical bar -->
+<!ENTITY plusacir "⨣" ><!--plus, circumflex accent above -->
+<!ENTITY plusb "⊞" ><!--/boxplus B: plus sign in box -->
+<!ENTITY pluscir "⨢" ><!--plus, small circle above -->
+<!ENTITY plusdo "∔" ><!--/dotplus B: plus sign, dot above -->
+<!ENTITY plusdu "⨥" ><!--plus sign, dot below -->
+<!ENTITY pluse "⩲" ><!--plus, equals -->
+<!ENTITY plussim "⨦" ><!--plus, similar below -->
+<!ENTITY plustwo "⨧" ><!--plus, two; Nim-addition -->
+<!ENTITY prod "∏" ><!--/prod L: product operator -->
+<!ENTITY race "⧚" ><!--reverse most positive, line below -->
+<!ENTITY roplus "⨮" ><!--plus sign in right half circle -->
+<!ENTITY rotimes "⨵" ><!--multiply sign in right half circle -->
+<!ENTITY rthree "⋌" ><!--/rightthreetimes B: -->
+<!ENTITY rtimes "⋊" ><!--/rtimes B: times sign, right closed -->
+<!ENTITY sdot "⋅" ><!--/cdot B: small middle dot -->
+<!ENTITY sdotb "⊡" ><!--/dotsquare /boxdot B: small dot in box -->
+<!ENTITY setmn "∖" ><!--/setminus B: reverse solidus -->
+<!ENTITY simplus "⨤" ><!--plus, similar above -->
+<!ENTITY smashp "⨳" ><!--smash product -->
+<!ENTITY solb "⧄" ><!--solidus in square -->
+<!ENTITY sqcap "⊓" ><!--/sqcap B: square intersection -->
+<!ENTITY sqcaps "⊓⁣" ><!--square intersection, serifs -->
+<!ENTITY sqcup "⊔" ><!--/sqcup B: square union -->
+<!ENTITY sqcups "⊔⁣" ><!--square union, serifs -->
+<!ENTITY ssetmn "∖" ><!--/smallsetminus B: sm reverse solidus -->
+<!ENTITY sstarf "⋆" ><!--/star B: small star, filled -->
+<!ENTITY subdot "⪽" ><!--subset, with dot -->
+<!ENTITY sum "∑" ><!--/sum L: summation operator -->
+<!ENTITY supdot "⪾" ><!--superset, with dot -->
+<!ENTITY timesb "⊠" ><!--/boxtimes B: multiply sign in box -->
+<!ENTITY timesbar "⨱" ><!--multiply sign, bar below -->
+<!ENTITY timesd "⨰" ><!--times, dot -->
+<!ENTITY tridot "◬" ><!--dot in triangle -->
+<!ENTITY triminus "⨺" ><!--minus in triangle -->
+<!ENTITY triplus "⨹" ><!--plus in triangle -->
+<!ENTITY trisb "⧍" ><!--triangle, serifs at bottom -->
+<!ENTITY tritime "⨻" ><!--multiply in triangle -->
+<!ENTITY uplus "⊎" ><!--/uplus B: plus sign in union -->
+<!ENTITY veebar "⊻" ><!--/veebar B: logical or, bar below -->
+<!ENTITY wedbar "⩟" ><!--wedge, bar below -->
+<!ENTITY wreath "≀" ><!--/wr B: wreath product -->
+<!ENTITY xcap "⋂" ><!--/bigcap L: intersection operator -->
+<!ENTITY xcirc "◯" ><!--/bigcirc B: large circle -->
+<!ENTITY xcup "⋃" ><!--/bigcup L: union operator -->
+<!ENTITY xdtri "▽" ><!--/bigtriangledown B: big dn tri, open -->
+<!ENTITY xodot "⊙" ><!--/bigodot L: circle dot operator -->
+<!ENTITY xoplus "⊕" ><!--/bigoplus L: circle plus operator -->
+<!ENTITY xotime "⊗" ><!--/bigotimes L: circle times operator -->
+<!ENTITY xsqcup "⊔" ><!--/bigsqcup L: square union operator -->
+<!ENTITY xuplus "⊎" ><!--/biguplus L: -->
+<!ENTITY xutri "△" ><!--/bigtriangleup B: big up tri, open -->
+<!ENTITY xvee "⋁" ><!--/bigvee L: logical and operator -->
+<!ENTITY xwedge "⋀" ><!--/bigwedge L: logical or operator -->
--- /dev/null
+
+<!--
+ File isoamsc.ent produced by the XSL script mmldtd.xsl
+ from input data in unicode.xml.
+
+ Please report any errors to
+ David Carlisle <davidc@nag.co.uk>.
+
+ The numeric character values assigned to each entity
+ (should) match either official Unicode assignments
+ or assignments provisionally allocated by the
+ Unicode Consortium based on the characters in the `STIX'
+ propsal for mathematics. Note that these assignments
+ have not been ratified by the corresponding ISO
+ committee and thus should be considered liable to
+ change.
+
+ Entity names in this file are derived from files carrying the
+ following notice:
+
+ (C) International Organization for Standardization 1991
+ Permission to copy in any form is granted for use with
+ conforming SGML systems and applications as defined in
+ ISO 8879, provided this notice is included in all copies.
+
+-->
+
+<!ENTITY dlcorn "⌞" ><!--/llcorner O: lower left corner -->
+<!ENTITY drcorn "⌟" ><!--/lrcorner C: lower right corner -->
+<!ENTITY gtlPar "⦕" ><!--dbl left parenthesis, greater -->
+<!ENTITY langd "⦑" ><!--left angle, dot -->
+<!ENTITY lbrke "⦋" ><!--left bracket, equal -->
+<!ENTITY lbrksld "⦏" ><!--left bracket, solidus bottom corner -->
+<!ENTITY lbrkslu "⦍" ><!--left bracket, solidus top corner -->
+<!ENTITY lceil "⌈" ><!--/lceil O: left ceiling -->
+<!ENTITY lfloor "⌊" ><!--/lfloor O: left floor -->
+<!ENTITY lmoust "⦘" ><!--/lmoustache -->
+<!ENTITY lparlt "⦓" ><!--O: left parenthesis, lt -->
+<!ENTITY ltrPar "⦖" ><!--dbl right parenthesis, less -->
+<!ENTITY rangd "⦒" ><!--right angle, dot -->
+<!ENTITY rbrke "⦌" ><!--right bracket, equal -->
+<!ENTITY rbrksld "⦎" ><!--right bracket, solidus bottom corner -->
+<!ENTITY rbrkslu "⦐" ><!--right bracket, solidus top corner -->
+<!ENTITY rceil "⌉" ><!--/rceil C: right ceiling -->
+<!ENTITY rfloor "⌋" ><!--/rfloor C: right floor -->
+<!ENTITY rmoust "⦗" ><!--/rmoustache -->
+<!ENTITY rpargt "⦔" ><!--C: right paren, gt -->
+<!ENTITY ulcorn "⌜" ><!--/ulcorner O: upper left corner -->
+<!ENTITY urcorn "⌝" ><!--/urcorner C: upper right corner -->
--- /dev/null
+
+<!--
+ File isoamsn.ent produced by the XSL script mmldtd.xsl
+ from input data in unicode.xml.
+
+ Please report any errors to
+ David Carlisle <davidc@nag.co.uk>.
+
+ The numeric character values assigned to each entity
+ (should) match either official Unicode assignments
+ or assignments provisionally allocated by the
+ Unicode Consortium based on the characters in the `STIX'
+ propsal for mathematics. Note that these assignments
+ have not been ratified by the corresponding ISO
+ committee and thus should be considered liable to
+ change.
+
+ Entity names in this file are derived from files carrying the
+ following notice:
+
+ (C) International Organization for Standardization 1991
+ Permission to copy in any form is granted for use with
+ conforming SGML systems and applications as defined in
+ ISO 8879, provided this notice is included in all copies.
+
+-->
+
+<!ENTITY gnap "⪊" ><!--/gnapprox N: greater, not approximate -->
+<!ENTITY gne "≩" ><!--/gneq N: greater, not equals -->
+<!ENTITY gnE "≩" ><!--/gneqq N: greater, not dbl equals -->
+<!ENTITY gnsim "⋧" ><!--/gnsim N: greater, not similar -->
+<!ENTITY gvnE "≩̸" ><!--/gvertneqq N: gt, vert, not dbl eq -->
+<!ENTITY lnap "⪉" ><!--/lnapprox N: less, not approximate -->
+<!ENTITY lne "≨" ><!--/lneq N: less, not equals -->
+<!ENTITY lnE "≨" ><!--/lneqq N: less, not double equals -->
+<!ENTITY lnsim "⋦" ><!--/lnsim N: less, not similar -->
+<!ENTITY lvnE "≨̸" ><!--/lvertneqq N: less, vert, not dbl eq -->
+<!ENTITY nap "≉" ><!--/napprox N: not approximate -->
+<!ENTITY napE "⩰̸" ><!--not approximately equal or equal to -->
+<!ENTITY napid "≋̸" ><!--not approximately identical to -->
+<!ENTITY ncong "≇" ><!--/ncong N: not congruent with -->
+<!ENTITY ncongdot "⩭̸" ><!--not congruent, dot -->
+<!ENTITY nequiv "≢" ><!--/nequiv N: not identical with -->
+<!ENTITY nge "≱⃥" ><!--/ngeq N: not greater-than-or-equal -->
+<!ENTITY ngE "≱" ><!--/ngeqq N: not greater, dbl equals -->
+<!ENTITY nges "≱" ><!--/ngeqslant N: not gt-or-eq, slanted -->
+<!ENTITY nGg "⋙̸" ><!--not triple greater than -->
+<!ENTITY ngsim "≵" ><!--not greater, similar -->
+<!ENTITY ngt "≯" ><!--/ngtr N: not greater-than -->
+<!ENTITY nGt "≫̸" ><!--not, vert, much greater than -->
+<!ENTITY nGtv "≫̸⁣" ><!--not much greater than, variant -->
+<!ENTITY nle "≰⃥" ><!--/nleq N: not less-than-or-equal -->
+<!ENTITY nlE "≰" ><!--/nleqq N: not less, dbl equals -->
+<!ENTITY nles "≰" ><!--/nleqslant N: not less-or-eq, slant -->
+<!ENTITY nLl "⋘̸" ><!--not triple less than -->
+<!ENTITY nlsim "≴" ><!--not less, similar -->
+<!ENTITY nlt "≮" ><!--/nless N: not less-than -->
+<!ENTITY nLt "≪̸" ><!--not, vert, much less than -->
+<!ENTITY nltri "⋪" ><!--/ntriangleleft N: not left triangle -->
+<!ENTITY nltrie "⋬" ><!--/ntrianglelefteq N: not l tri, eq -->
+<!ENTITY nLtv "≪̸⁣" ><!--not much less than, variant -->
+<!ENTITY nmid "∤" ><!--/nmid -->
+<!ENTITY npar "∦" ><!--/nparallel N: not parallel -->
+<!ENTITY npr "⊀" ><!--/nprec N: not precedes -->
+<!ENTITY nprcue "⋠" ><!--not curly precedes, eq -->
+<!ENTITY npre "⪯̸" ><!--/npreceq N: not precedes, equals -->
+<!ENTITY nrtri "⋫" ><!--/ntriangleright N: not rt triangle -->
+<!ENTITY nrtrie "⋭" ><!--/ntrianglerighteq N: not r tri, eq -->
+<!ENTITY nsc "⊁" ><!--/nsucc N: not succeeds -->
+<!ENTITY nsccue "⋡" ><!--not succeeds, curly eq -->
+<!ENTITY nsce "⪰̸" ><!--/nsucceq N: not succeeds, equals -->
+<!ENTITY nsim "≁" ><!--/nsim N: not similar -->
+<!ENTITY nsime "≄" ><!--/nsimeq N: not similar, equals -->
+<!ENTITY nsmid "∤⁣" ><!--/nshortmid -->
+<!ENTITY nspar "∦⁣" ><!--/nshortparallel N: not short par -->
+<!ENTITY nsqsube "⋢" ><!--not, square subset, equals -->
+<!ENTITY nsqsupe "⋣" ><!--not, square superset, equals -->
+<!ENTITY nsub "⊄" ><!--not subset -->
+<!ENTITY nsube "⊈" ><!--/nsubseteq N: not subset, equals -->
+<!ENTITY nsubE "⊈" ><!--/nsubseteqq N: not subset, dbl eq -->
+<!ENTITY nsup "⊅" ><!--not superset -->
+<!ENTITY nsupe "⊉" ><!--/nsupseteq N: not superset, equals -->
+<!ENTITY nsupE "⊉" ><!--/nsupseteqq N: not superset, dbl eq -->
+<!ENTITY ntgl "≹" ><!--not greater, less -->
+<!ENTITY ntlg "≸" ><!--not less, greater -->
+<!ENTITY nvap "≉̸" ><!--not, vert, approximate -->
+<!ENTITY nvdash "⊬" ><!--/nvdash N: not vertical, dash -->
+<!ENTITY nvDash "⊭" ><!--/nvDash N: not vertical, dbl dash -->
+<!ENTITY nVdash "⊮" ><!--/nVdash N: not dbl vertical, dash -->
+<!ENTITY nVDash "⊯" ><!--/nVDash N: not dbl vert, dbl dash -->
+<!ENTITY nvge "≱" ><!--not, vert, greater-than-or-equal -->
+<!ENTITY nvgt "≯" ><!--not, vert, greater-than -->
+<!ENTITY nvle "≰" ><!--not, vert, less-than-or-equal -->
+<!ENTITY nvlt "≮" ><!--not, vert, less-than -->
+<!ENTITY nvltrie "⋬̸" ><!--not, vert, left triangle, equals -->
+<!ENTITY nvrtrie "⋭̸" ><!--not, vert, right triangle, equals -->
+<!ENTITY nvsim "≁̸" ><!--not, vert, similar -->
+<!ENTITY parsim "⫳" ><!--parallel, similar -->
+<!ENTITY prnap "⋨" ><!--/precnapprox N: precedes, not approx -->
+<!ENTITY prnE "⪵" ><!--/precneqq N: precedes, not dbl eq -->
+<!ENTITY prnsim "⋨" ><!--/precnsim N: precedes, not similar -->
+<!ENTITY rnmid "⫮" ><!--reverse /nmid -->
+<!ENTITY scnap "⋩" ><!--/succnapprox N: succeeds, not approx -->
+<!ENTITY scnE "⪶" ><!--/succneqq N: succeeds, not dbl eq -->
+<!ENTITY scnsim "⋩" ><!--/succnsim N: succeeds, not similar -->
+<!ENTITY simne "≆" ><!--similar, not equals -->
+<!ENTITY solbar "⌿" ><!--solidus, bar through -->
+<!ENTITY subne "⊊" ><!--/subsetneq N: subset, not equals -->
+<!ENTITY subnE "⊊" ><!--/subsetneqq N: subset, not dbl eq -->
+<!ENTITY supne "⊋" ><!--/supsetneq N: superset, not equals -->
+<!ENTITY supnE "⊋" ><!--/supsetneqq N: superset, not dbl eq -->
+<!ENTITY vnsub "⊄" ><!--/nsubset N: not subset, var -->
+<!ENTITY vnsup "⊅" ><!--/nsupset N: not superset, var -->
+<!ENTITY vsubne "⊊⁣" ><!--/varsubsetneq N: subset, not eq, var -->
+<!ENTITY vsubnE "⊊⁣" ><!--/varsubsetneqq N: subset not dbl eq, var -->
+<!ENTITY vsupne "⊋⁣" ><!--/varsupsetneq N: superset, not eq, var -->
+<!ENTITY vsupnE "⊋⁣" ><!--/varsupsetneqq N: super not dbl eq, var -->
--- /dev/null
+
+<!--
+ File isoamso.ent produced by the XSL script mmldtd.xsl
+ from input data in unicode.xml.
+
+ Please report any errors to
+ David Carlisle <davidc@nag.co.uk>.
+
+ The numeric character values assigned to each entity
+ (should) match either official Unicode assignments
+ or assignments provisionally allocated by the
+ Unicode Consortium based on the characters in the `STIX'
+ propsal for mathematics. Note that these assignments
+ have not been ratified by the corresponding ISO
+ committee and thus should be considered liable to
+ change.
+
+ Entity names in this file are derived from files carrying the
+ following notice:
+
+ (C) International Organization for Standardization 1991
+ Permission to copy in any form is granted for use with
+ conforming SGML systems and applications as defined in
+ ISO 8879, provided this notice is included in all copies.
+
+-->
+
+<!ENTITY ang "∠" ><!--/angle - angle -->
+<!ENTITY ange "⦤" ><!--angle, equal -->
+<!ENTITY angmsd "∡" ><!--/measuredangle - angle-measured -->
+<!ENTITY angmsdaa "⦨" ><!--angle-measured, arrow, up, right -->
+<!ENTITY angmsdab "⦩" ><!--angle-measured, arrow, up, left -->
+<!ENTITY angmsdac "⦪" ><!--angle-measured, arrow, down, right -->
+<!ENTITY angmsdad "⦫" ><!--angle-measured, arrow, down, left -->
+<!ENTITY angmsdae "⦬" ><!--angle-measured, arrow, right, up -->
+<!ENTITY angmsdaf "⦭" ><!--angle-measured, arrow, left, up -->
+<!ENTITY angmsdag "⦮" ><!--angle-measured, arrow, right, down -->
+<!ENTITY angmsdah "⦯" ><!--angle-measured, arrow, left, down -->
+<!ENTITY angrtvb "⦝⁣" ><!--right angle-measured -->
+<!ENTITY angrtvbd "⦝" ><!--right angle-measured, dot -->
+<!ENTITY bbrk "⎵" ><!--bottom square bracket -->
+<!ENTITY bemptyv "⦰" ><!--reversed circle, slash -->
+<!ENTITY beth "ℶ" ><!--/beth - beth, Hebrew -->
+<!ENTITY boxbox "⧉" ><!--two joined squares -->
+<!ENTITY bprime "‵" ><!--/backprime - reverse prime -->
+<!ENTITY bsemi "⁏" ><!--reverse semi-colon -->
+<!ENTITY cemptyv "⦲" ><!--circle, slash, small circle above -->
+<!ENTITY cirE "⧃" ><!--circle, two horizontal stroked to the right -->
+<!ENTITY cirscir "⧂" ><!--circle, small circle to the right -->
+<!ENTITY comp "∁" ><!--/complement - complement sign -->
+<!ENTITY daleth "ℸ" ><!--/daleth - daleth, Hebrew -->
+<!ENTITY demptyv "⦱" ><!--circle, slash, bar above -->
+<!ENTITY ell "ℓ" ><!--/ell - cursive small l -->
+<!ENTITY empty "∅⁣" ><!--/emptyset - zero, slash -->
+<!ENTITY emptyv "∅" ><!--/varnothing - circle, slash -->
+<!ENTITY gimel "ℷ" ><!--/gimel - gimel, Hebrew -->
+<!ENTITY iiota "℩" ><!--inverted iota -->
+<!ENTITY image "ℑ" ><!--/Im - imaginary -->
+<!ENTITY imath "ı" ><!--/imath - small i, no dot -->
+<!ENTITY jmath "j⁣" ><!--/jmath - small j, no dot -->
+<!ENTITY laemptyv "⦴" ><!--circle, slash, left arrow above -->
+<!ENTITY lltri "◺" ><!--lower left triangle -->
+<!ENTITY lrtri "⊿" ><!--lower right triangle -->
+<!ENTITY mho "℧" ><!--/mho - conductance -->
+<!ENTITY nang "∠̸" ><!--not, vert, angle -->
+<!ENTITY nexist "∄" ><!--/nexists - negated exists -->
+<!ENTITY oS "Ⓢ" ><!--/circledS - capital S in circle -->
+<!ENTITY plank "ℏ" ><!--/hbar - Planck's over 2pi -->
+<!ENTITY plankv "ℏ" ><!--/hslash - variant Planck's over 2pi -->
+<!ENTITY raemptyv "⦳" ><!--circle, slash, right arrow above -->
+<!ENTITY range "⦥" ><!--reverse angle, equal -->
+<!ENTITY real "ℜ" ><!--/Re - real -->
+<!ENTITY tbrk "⎴" ><!--top square bracket -->
+<!ENTITY ultri "◸" ><!--upper left triangle -->
+<!ENTITY urtri "◹" ><!--upper right triangle -->
+<!ENTITY vzigzag "⦚" ><!--vertical zig-zag line -->
+<!ENTITY weierp "℘" ><!--/wp - Weierstrass p -->
--- /dev/null
+
+<!--
+ File isoamsr.ent produced by the XSL script mmldtd.xsl
+ from input data in unicode.xml.
+
+ Please report any errors to
+ David Carlisle <davidc@nag.co.uk>.
+
+ The numeric character values assigned to each entity
+ (should) match either official Unicode assignments
+ or assignments provisionally allocated by the
+ Unicode Consortium based on the characters in the `STIX'
+ propsal for mathematics. Note that these assignments
+ have not been ratified by the corresponding ISO
+ committee and thus should be considered liable to
+ change.
+
+ Entity names in this file are derived from files carrying the
+ following notice:
+
+ (C) International Organization for Standardization 1991
+ Permission to copy in any form is granted for use with
+ conforming SGML systems and applications as defined in
+ ISO 8879, provided this notice is included in all copies.
+
+-->
+
+<!ENTITY ape "≊" ><!--/approxeq R: approximate, equals -->
+<!ENTITY apE "≊" ><!--approximately equal or equal to -->
+<!ENTITY apid "≋" ><!--approximately identical to -->
+<!ENTITY asymp "≍" ><!--/asymp R: asymptotically equal to -->
+<!ENTITY Barv "⫧" ><!--vert, dbl bar (over) -->
+<!ENTITY bcong "≌" ><!--/backcong R: reverse congruent -->
+<!ENTITY bepsi "ℼ" ><!--/backepsilon R: such that -->
+<!ENTITY bowtie "⋈" ><!--/bowtie R: -->
+<!ENTITY bsim "∽" ><!--/backsim R: reverse similar -->
+<!ENTITY bsime "⋍" ><!--/backsimeq R: reverse similar, eq -->
+<!ENTITY bsolhsub "\⊂" ><!--reverse solidus, subset -->
+<!ENTITY bump "≎" ><!--/Bumpeq R: bumpy equals -->
+<!ENTITY bumpe "≏" ><!--/bumpeq R: bumpy equals, equals -->
+<!ENTITY bumpE "⪮" ><!--bump, equals -->
+<!ENTITY cire "≗" ><!--/circeq R: circle, equals -->
+<!ENTITY Colon "∷" ><!--/Colon, two colons -->
+<!ENTITY colone "≔" ><!--/coloneq R: colon, equals -->
+<!ENTITY Colone "⩴" ><!--double colon, equals -->
+<!ENTITY congdot "⩭" ><!--congruent, dot -->
+<!ENTITY csub "⫏" ><!--subset, closed -->
+<!ENTITY csube "⫑" ><!--subset, closed, equals -->
+<!ENTITY csup "⫐" ><!--superset, closed -->
+<!ENTITY csupe "⫒" ><!--superset, closed, equals -->
+<!ENTITY cuepr "⋞" ><!--/curlyeqprec R: curly eq, precedes -->
+<!ENTITY cuesc "⋟" ><!--/curlyeqsucc R: curly eq, succeeds -->
+<!ENTITY dashv "⊣" ><!--/dashv R: dash, vertical -->
+<!ENTITY Dashv "⫤" ><!--dbl dash, vertical -->
+<!ENTITY easter "≛" ><!--equal, asterisk above -->
+<!ENTITY ecir "≖" ><!--/eqcirc R: circle on equals sign -->
+<!ENTITY ecolon "≕" ><!--/eqcolon R: equals, colon -->
+<!ENTITY eDDot "⩷" ><!--/ddotseq R: equal with four dots -->
+<!ENTITY eDot "≑" ><!--/doteqdot /Doteq R: eq, even dots -->
+<!ENTITY efDot "≒" ><!--/fallingdotseq R: eq, falling dots -->
+<!ENTITY eg "⪚" ><!--equal-or-greater -->
+<!ENTITY egs "⋝" ><!--/eqslantgtr R: equal-or-gtr, slanted -->
+<!ENTITY egsdot "⪘" ><!--equal-or-greater, slanted, dot inside -->
+<!ENTITY el "⪙" ><!--equal-or-less -->
+<!ENTITY els "⋜" ><!--/eqslantless R: eq-or-less, slanted -->
+<!ENTITY elsdot "⪗" ><!--equal-or-less, slanted, dot inside -->
+<!ENTITY equest "≟" ><!--/questeq R: equal with questionmark -->
+<!ENTITY equivDD "⩸" ><!--equivalent, four dots above -->
+<!ENTITY erDot "≓" ><!--/risingdotseq R: eq, rising dots -->
+<!ENTITY esdot "≐" ><!--/doteq R: equals, single dot above -->
+<!ENTITY esim "≂" ><!--/esim R: equals, similar -->
+<!ENTITY Esim "⩳" ><!--equal, similar -->
+<!ENTITY fork "⋔" ><!--/pitchfork R: pitchfork -->
+<!ENTITY forkv "⫙" ><!--fork, variant -->
+<!ENTITY frown "⌢" ><!--/frown R: down curve -->
+<!ENTITY gap "≳" ><!--/gtrapprox R: greater, approximate -->
+<!ENTITY gE "≧" ><!--/geqq R: greater, double equals -->
+<!ENTITY gel "⋛" ><!--/gtreqless R: greater, equals, less -->
+<!ENTITY gEl "⋛" ><!--/gtreqqless R: gt, dbl equals, less -->
+<!ENTITY ges "⩾" ><!--/geqslant R: gt-or-equal, slanted -->
+<!ENTITY gescc "⪩" ><!--greater than, closed by curve, equal, slanted -->
+<!ENTITY gesdot "⪀" ><!--greater-than-or-equal, slanted, dot inside -->
+<!ENTITY gesdoto "⪂" ><!--greater-than-or-equal, slanted, dot above -->
+<!ENTITY gesdotol "⪄" ><!--greater-than-or-equal, slanted, dot above left -->
+<!ENTITY gesl "⋛⁣" ><!--greater, equal, slanted, less -->
+<!ENTITY gesles "⪔" ><!--greater, equal, slanted, less, equal, slanted -->
+<!ENTITY Gg "⋙" ><!--/ggg /Gg /gggtr R: triple gtr-than -->
+<!ENTITY gl "≷" ><!--/gtrless R: greater, less -->
+<!ENTITY gla "⪥" ><!--greater, less, apart -->
+<!ENTITY glE "⪒" ><!--greater, less, equal -->
+<!ENTITY glj "⪤" ><!--greater, less, overlapping -->
+<!ENTITY gsim "≳" ><!--/gtrsim R: greater, similar -->
+<!ENTITY gsime "⪎" ><!--greater, similar, equal -->
+<!ENTITY gsiml "⪐" ><!--greater, similar, less -->
+<!ENTITY Gt "≫" ><!--/gg R: dbl greater-than sign -->
+<!ENTITY gtcc "⪧" ><!--greater than, closed by curve -->
+<!ENTITY gtcir "⩺" ><!--greater than, circle inside -->
+<!ENTITY gtdot "⋗" ><!--/gtrdot R: greater than, with dot -->
+<!ENTITY gtquest "⩼" ><!--greater than, questionmark above -->
+<!ENTITY gtrarr "⥸" ><!--greater than, right arrow -->
+<!ENTITY homtht "∻" ><!--homothetic -->
+<!ENTITY lap "≲" ><!--/lessapprox R: less, approximate -->
+<!ENTITY lat "⪫" ><!--larger than -->
+<!ENTITY late "⪭" ><!--larger than or equal -->
+<!ENTITY lates "⪭⁣" ><!--larger than or equal, slanted -->
+<!ENTITY lE "≦" ><!--/leqq R: less, double equals -->
+<!ENTITY leg "⋚" ><!--/lesseqgtr R: less, eq, greater -->
+<!ENTITY lEg "⋚" ><!--/lesseqqgtr R: less, dbl eq, greater -->
+<!ENTITY les "⩽" ><!--/leqslant R: less-than-or-eq, slant -->
+<!ENTITY lescc "⪨" ><!--less than, closed by curve, equal, slanted -->
+<!ENTITY lesdot "⩿" ><!--less-than-or-equal, slanted, dot inside -->
+<!ENTITY lesdoto "⪁" ><!--less-than-or-equal, slanted, dot above -->
+<!ENTITY lesdotor "⪃" ><!--less-than-or-equal, slanted, dot above right -->
+<!ENTITY lesg "⋚⁣" ><!--less, equal, slanted, greater -->
+<!ENTITY lesges "⪓" ><!--less, equal, slanted, greater, equal, slanted -->
+<!ENTITY lg "≶" ><!--/lessgtr R: less, greater -->
+<!ENTITY lgE "⪑" ><!--less, greater, equal -->
+<!ENTITY Ll "⋘" ><!--/Ll /lll /llless R: triple less-than -->
+<!ENTITY lsim "≲" ><!--/lesssim R: less, similar -->
+<!ENTITY lsime "⪍" ><!--less, similar, equal -->
+<!ENTITY lsimg "⪏" ><!--less, similar, greater -->
+<!ENTITY Lt "≪" ><!--/ll R: double less-than sign -->
+<!ENTITY ltcc "⪦" ><!--less than, closed by curve -->
+<!ENTITY ltcir "⩹" ><!--less than, circle inside -->
+<!ENTITY ltdot "⋖" ><!--/lessdot R: less than, with dot -->
+<!ENTITY ltlarr "⥶" ><!--less than, left arrow -->
+<!ENTITY ltquest "⩻" ><!--less than, questionmark above -->
+<!ENTITY ltrie "⊴" ><!--/trianglelefteq R: left triangle, eq -->
+<!ENTITY mcomma "⨩" ><!--minus, comma above -->
+<!ENTITY mDDot "∺" ><!--minus with four dots, geometric properties -->
+<!ENTITY mid "∣" ><!--/mid R: -->
+<!ENTITY mlcp "⫛" ><!--/mlcp -->
+<!ENTITY models "⊧" ><!--/models R: -->
+<!ENTITY mstpos "∾" ><!--most positive -->
+<!ENTITY pr "≺" ><!--/prec R: precedes -->
+<!ENTITY Pr "⪻" ><!--dbl precedes -->
+<!ENTITY prap "≾" ><!--/precapprox R: precedes, approximate -->
+<!ENTITY prcue "≼" ><!--/preccurlyeq R: precedes, curly eq -->
+<!ENTITY pre "⪯" ><!--/preceq R: precedes, equals -->
+<!ENTITY prE "⪯" ><!--precedes, dbl equals -->
+<!ENTITY prsim "≾" ><!--/precsim R: precedes, similar -->
+<!ENTITY prurel "⊰" ><!--element precedes under relation -->
+<!ENTITY ratio "∶" ><!--/ratio -->
+<!ENTITY rtrie "⊵" ><!--/trianglerighteq R: right tri, eq -->
+<!ENTITY rtriltri "⧎" ><!--right triangle above left triangle -->
+<!ENTITY sc "≻" ><!--/succ R: succeeds -->
+<!ENTITY Sc "⪼" ><!--dbl succeeds -->
+<!ENTITY scap "≿" ><!--/succapprox R: succeeds, approximate -->
+<!ENTITY sccue "≽" ><!--/succcurlyeq R: succeeds, curly eq -->
+<!ENTITY sce "≽" ><!--/succeq R: succeeds, equals -->
+<!ENTITY scE "≾" ><!--succeeds, dbl equals -->
+<!ENTITY scsim "≿" ><!--/succsim R: succeeds, similar -->
+<!ENTITY sdote "⩦" ><!--equal, dot below -->
+<!ENTITY simg "⪞" ><!--similar, greater -->
+<!ENTITY simgE "⪠" ><!--similar, greater, equal -->
+<!ENTITY siml "⪝" ><!--similar, less -->
+<!ENTITY simlE "⪟" ><!--similar, less, equal -->
+<!ENTITY smid "∣⁣" ><!--/shortmid R: -->
+<!ENTITY smile "⌣" ><!--/smile R: up curve -->
+<!ENTITY smt "⪪" ><!--smaller than -->
+<!ENTITY smte "⪬" ><!--smaller than or equal -->
+<!ENTITY smtes "⪬⁣" ><!--smaller than or equal, slanted -->
+<!ENTITY spar "∥⁣" ><!--/shortparallel R: short parallel -->
+<!ENTITY sqsub "⊏" ><!--/sqsubset R: square subset -->
+<!ENTITY sqsube "⊑" ><!--/sqsubseteq R: square subset, equals -->
+<!ENTITY sqsup "⊐" ><!--/sqsupset R: square superset -->
+<!ENTITY sqsupe "⊒" ><!--/sqsupseteq R: square superset, eq -->
+<!ENTITY Sub "⋐" ><!--/Subset R: double subset -->
+<!ENTITY subE "⊆" ><!--/subseteqq R: subset, dbl equals -->
+<!ENTITY subedot "⫃" ><!--subset, equals, dot -->
+<!ENTITY submult "⫁" ><!--subset, multiply -->
+<!ENTITY subplus "⪿" ><!--subset, plus -->
+<!ENTITY subrarr "⥹" ><!--subset, right arrow -->
+<!ENTITY subsim "⫇" ><!--subset, similar -->
+<!ENTITY subsub "⫕" ><!--subset above subset -->
+<!ENTITY subsup "⫓" ><!--subset above superset -->
+<!ENTITY Sup "⋑" ><!--/Supset R: dbl superset -->
+<!ENTITY supdsub "⫘" ><!--superset, subset, dash joining them -->
+<!ENTITY supE "⊇" ><!--/supseteqq R: superset, dbl equals -->
+<!ENTITY supedot "⫄" ><!--superset, equals, dot -->
+<!ENTITY suphsol "⊃/" ><!--superset, solidus -->
+<!ENTITY suphsub "⫗" ><!--superset, subset -->
+<!ENTITY suplarr "⥻" ><!--superset, left arrow -->
+<!ENTITY supmult "⫂" ><!--superset, multiply -->
+<!ENTITY supplus "⫀" ><!--superset, plus -->
+<!ENTITY supsim "⫈" ><!--superset, similar -->
+<!ENTITY supsub "⫔" ><!--superset above subset -->
+<!ENTITY supsup "⫖" ><!--superset above superset -->
+<!ENTITY thkap "≈⁣" ><!--/thickapprox R: thick approximate -->
+<!ENTITY thksim "∼" ><!--/thicksim R: thick similar -->
+<!ENTITY topfork "⫚" ><!--fork with top -->
+<!ENTITY trie "≜" ><!--/triangleq R: triangle, equals -->
+<!ENTITY twixt "≬" ><!--/between R: between -->
+<!ENTITY vBar "⫨" ><!--vert, dbl bar (under) -->
+<!ENTITY Vbar "⫫" ><!--dbl vert, bar (under) -->
+<!ENTITY vBarv "⫩" ><!--dbl bar, vert over and under -->
+<!ENTITY vdash "⊢" ><!--/vdash R: vertical, dash -->
+<!ENTITY vDash "⊨" ><!--/vDash R: vertical, dbl dash -->
+<!ENTITY Vdash "⊩" ><!--/Vdash R: dbl vertical, dash -->
+<!ENTITY VDash "⊫" ><!--dbl vert, dbl dash -->
+<!ENTITY Vdashl "⫦" ><!--vertical, dash (long) -->
+<!ENTITY vltri "⊲" ><!--/vartriangleleft R: l tri, open, var -->
+<!ENTITY vprop "∝" ><!--/varpropto R: proportional, variant -->
+<!ENTITY vrtri "⊳" ><!--/vartriangleright R: r tri, open, var -->
+<!ENTITY Vvdash "⊪" ><!--/Vvdash R: triple vertical, dash -->
--- /dev/null
+
+<!--
+ File isobox.ent produced by the XSL script mmldtd.xsl
+ from input data in unicode.xml.
+
+ Please report any errors to
+ David Carlisle <davidc@nag.co.uk>.
+
+ The numeric character values assigned to each entity
+ (should) match either official Unicode assignments
+ or assignments provisionally allocated by the
+ Unicode Consortium based on the characters in the `STIX'
+ propsal for mathematics. Note that these assignments
+ have not been ratified by the corresponding ISO
+ committee and thus should be considered liable to
+ change.
+
+ Entity names in this file are derived from files carrying the
+ following notice:
+
+ (C) International Organization for Standardization 1986
+ Permission to copy in any form is granted for use with
+ conforming SGML systems and applications as defined in
+ ISO 8879, provided this notice is included in all copies.
+
+-->
+
+<!ENTITY boxdl "┐" ><!--lower left quadrant -->
+<!ENTITY boxdL "╕" ><!--lower left quadrant -->
+<!ENTITY boxDl "╖" ><!--lower left quadrant -->
+<!ENTITY boxDL "╗" ><!--lower left quadrant -->
+<!ENTITY boxdr "┌" ><!--lower right quadrant -->
+<!ENTITY boxdR "╒" ><!--lower right quadrant -->
+<!ENTITY boxDr "╓" ><!--lower right quadrant -->
+<!ENTITY boxDR "╔" ><!--lower right quadrant -->
+<!ENTITY boxh "─" ><!--horizontal line -->
+<!ENTITY boxH "═" ><!--horizontal line -->
+<!ENTITY boxhd "┬" ><!--lower left and right quadrants -->
+<!ENTITY boxhD "╥" ><!--lower left and right quadrants -->
+<!ENTITY boxHd "╤" ><!--lower left and right quadrants -->
+<!ENTITY boxHD "╦" ><!--lower left and right quadrants -->
+<!ENTITY boxhu "┴" ><!--upper left and right quadrants -->
+<!ENTITY boxhU "╨" ><!--upper left and right quadrants -->
+<!ENTITY boxHu "╧" ><!--upper left and right quadrants -->
+<!ENTITY boxHU "╩" ><!--upper left and right quadrants -->
+<!ENTITY boxul "┘" ><!--upper left quadrant -->
+<!ENTITY boxuL "╛" ><!--upper left quadrant -->
+<!ENTITY boxUl "╜" ><!--upper left quadrant -->
+<!ENTITY boxUL "╝" ><!--upper left quadrant -->
+<!ENTITY boxur "└" ><!--upper right quadrant -->
+<!ENTITY boxuR "╘" ><!--upper right quadrant -->
+<!ENTITY boxUr "╙" ><!--upper right quadrant -->
+<!ENTITY boxUR "╚" ><!--upper right quadrant -->
+<!ENTITY boxv "│" ><!--vertical line -->
+<!ENTITY boxV "║" ><!--vertical line -->
+<!ENTITY boxvh "┼" ><!--all four quadrants -->
+<!ENTITY boxvH "╪" ><!--all four quadrants -->
+<!ENTITY boxVh "╫" ><!--all four quadrants -->
+<!ENTITY boxVH "╬" ><!--all four quadrants -->
+<!ENTITY boxvl "┤" ><!--upper and lower left quadrants -->
+<!ENTITY boxvL "╡" ><!--upper and lower left quadrants -->
+<!ENTITY boxVl "╢" ><!--upper and lower left quadrants -->
+<!ENTITY boxVL "╣" ><!--upper and lower left quadrants -->
+<!ENTITY boxvr "├" ><!--upper and lower right quadrants -->
+<!ENTITY boxvR "╞" ><!--upper and lower right quadrants -->
+<!ENTITY boxVr "╟" ><!--upper and lower right quadrants -->
+<!ENTITY boxVR "╠" ><!--upper and lower right quadrants -->
--- /dev/null
+
+<!--
+ File isocyr1.ent produced by the XSL script mmldtd.xsl
+ from input data in unicode.xml.
+
+ Please report any errors to
+ David Carlisle <davidc@nag.co.uk>.
+
+ The numeric character values assigned to each entity
+ (should) match either official Unicode assignments
+ or assignments provisionally allocated by the
+ Unicode Consortium based on the characters in the `STIX'
+ propsal for mathematics. Note that these assignments
+ have not been ratified by the corresponding ISO
+ committee and thus should be considered liable to
+ change.
+
+ Entity names in this file are derived from files carrying the
+ following notice:
+
+ (C) International Organization for Standardization 1986
+ Permission to copy in any form is granted for use with
+ conforming SGML systems and applications as defined in
+ ISO 8879, provided this notice is included in all copies.
+
+-->
+
+<!ENTITY acy "а" ><!--=small a, Cyrillic -->
+<!ENTITY Acy "А" ><!--=capital A, Cyrillic -->
+<!ENTITY bcy "б" ><!--=small be, Cyrillic -->
+<!ENTITY Bcy "Б" ><!--=capital BE, Cyrillic -->
+<!ENTITY chcy "ч" ><!--=small che, Cyrillic -->
+<!ENTITY CHcy "Ч" ><!--=capital CHE, Cyrillic -->
+<!ENTITY dcy "д" ><!--=small de, Cyrillic -->
+<!ENTITY Dcy "Д" ><!--=capital DE, Cyrillic -->
+<!ENTITY ecy "э" ><!--=small e, Cyrillic -->
+<!ENTITY Ecy "Э" ><!--=capital E, Cyrillic -->
+<!ENTITY fcy "ф" ><!--=small ef, Cyrillic -->
+<!ENTITY Fcy "Ф" ><!--=capital EF, Cyrillic -->
+<!ENTITY gcy "г" ><!--=small ghe, Cyrillic -->
+<!ENTITY Gcy "Г" ><!--=capital GHE, Cyrillic -->
+<!ENTITY hardcy "ъ" ><!--=small hard sign, Cyrillic -->
+<!ENTITY HARDcy "Ъ" ><!--=capital HARD sign, Cyrillic -->
+<!ENTITY icy "и" ><!--=small i, Cyrillic -->
+<!ENTITY Icy "И" ><!--=capital I, Cyrillic -->
+<!ENTITY iecy "е" ><!--=small ie, Cyrillic -->
+<!ENTITY IEcy "Е" ><!--=capital IE, Cyrillic -->
+<!ENTITY iocy "ё" ><!--=small io, Russian -->
+<!ENTITY IOcy "Ё" ><!--=capital IO, Russian -->
+<!ENTITY jcy "й" ><!--=small short i, Cyrillic -->
+<!ENTITY Jcy "Й" ><!--=capital short I, Cyrillic -->
+<!ENTITY kcy "к" ><!--=small ka, Cyrillic -->
+<!ENTITY Kcy "К" ><!--=capital KA, Cyrillic -->
+<!ENTITY khcy "х" ><!--=small ha, Cyrillic -->
+<!ENTITY KHcy "Х" ><!--=capital HA, Cyrillic -->
+<!ENTITY lcy "л" ><!--=small el, Cyrillic -->
+<!ENTITY Lcy "Л" ><!--=capital EL, Cyrillic -->
+<!ENTITY mcy "м" ><!--=small em, Cyrillic -->
+<!ENTITY Mcy "М" ><!--=capital EM, Cyrillic -->
+<!ENTITY ncy "н" ><!--=small en, Cyrillic -->
+<!ENTITY Ncy "Н" ><!--=capital EN, Cyrillic -->
+<!ENTITY numero "№" ><!--=numero sign -->
+<!ENTITY ocy "о" ><!--=small o, Cyrillic -->
+<!ENTITY Ocy "О" ><!--=capital O, Cyrillic -->
+<!ENTITY pcy "п" ><!--=small pe, Cyrillic -->
+<!ENTITY Pcy "П" ><!--=capital PE, Cyrillic -->
+<!ENTITY rcy "р" ><!--=small er, Cyrillic -->
+<!ENTITY Rcy "Р" ><!--=capital ER, Cyrillic -->
+<!ENTITY scy "с" ><!--=small es, Cyrillic -->
+<!ENTITY Scy "С" ><!--=capital ES, Cyrillic -->
+<!ENTITY shchcy "щ" ><!--=small shcha, Cyrillic -->
+<!ENTITY SHCHcy "Щ" ><!--=capital SHCHA, Cyrillic -->
+<!ENTITY shcy "ш" ><!--=small sha, Cyrillic -->
+<!ENTITY SHcy "Ш" ><!--=capital SHA, Cyrillic -->
+<!ENTITY softcy "ь" ><!--=small soft sign, Cyrillic -->
+<!ENTITY SOFTcy "Ь" ><!--=capital SOFT sign, Cyrillic -->
+<!ENTITY tcy "т" ><!--=small te, Cyrillic -->
+<!ENTITY Tcy "Т" ><!--=capital TE, Cyrillic -->
+<!ENTITY tscy "ц" ><!--=small tse, Cyrillic -->
+<!ENTITY TScy "Ц" ><!--=capital TSE, Cyrillic -->
+<!ENTITY ucy "у" ><!--=small u, Cyrillic -->
+<!ENTITY Ucy "У" ><!--=capital U, Cyrillic -->
+<!ENTITY vcy "в" ><!--=small ve, Cyrillic -->
+<!ENTITY Vcy "В" ><!--=capital VE, Cyrillic -->
+<!ENTITY yacy "я" ><!--=small ya, Cyrillic -->
+<!ENTITY YAcy "Я" ><!--=capital YA, Cyrillic -->
+<!ENTITY ycy "ы" ><!--=small yeru, Cyrillic -->
+<!ENTITY Ycy "Ы" ><!--=capital YERU, Cyrillic -->
+<!ENTITY yucy "ю" ><!--=small yu, Cyrillic -->
+<!ENTITY YUcy "Ю" ><!--=capital YU, Cyrillic -->
+<!ENTITY zcy "з" ><!--=small ze, Cyrillic -->
+<!ENTITY Zcy "З" ><!--=capital ZE, Cyrillic -->
+<!ENTITY zhcy "ж" ><!--=small zhe, Cyrillic -->
+<!ENTITY ZHcy "Ж" ><!--=capital ZHE, Cyrillic -->
--- /dev/null
+
+<!--
+ File isocyr2.ent produced by the XSL script mmldtd.xsl
+ from input data in unicode.xml.
+
+ Please report any errors to
+ David Carlisle <davidc@nag.co.uk>.
+
+ The numeric character values assigned to each entity
+ (should) match either official Unicode assignments
+ or assignments provisionally allocated by the
+ Unicode Consortium based on the characters in the `STIX'
+ propsal for mathematics. Note that these assignments
+ have not been ratified by the corresponding ISO
+ committee and thus should be considered liable to
+ change.
+
+ Entity names in this file are derived from files carrying the
+ following notice:
+
+ (C) International Organization for Standardization 1986
+ Permission to copy in any form is granted for use with
+ conforming SGML systems and applications as defined in
+ ISO 8879, provided this notice is included in all copies.
+
+-->
+
+<!ENTITY djcy "ђ" ><!--=small dje, Serbian -->
+<!ENTITY DJcy "Ђ" ><!--=capital DJE, Serbian -->
+<!ENTITY dscy "ѕ" ><!--=small dse, Macedonian -->
+<!ENTITY DScy "Ѕ" ><!--=capital DSE, Macedonian -->
+<!ENTITY dzcy "џ" ><!--=small dze, Serbian -->
+<!ENTITY DZcy "Џ" ><!--=capital dze, Serbian -->
+<!ENTITY gjcy "ѓ" ><!--=small gje, Macedonian -->
+<!ENTITY GJcy "Ѓ" ><!--=capital GJE Macedonian -->
+<!ENTITY iukcy "і" ><!--=small i, Ukrainian -->
+<!ENTITY Iukcy "І" ><!--=capital I, Ukrainian -->
+<!ENTITY jsercy "ј" ><!--=small je, Serbian -->
+<!ENTITY Jsercy "Ј" ><!--=capital JE, Serbian -->
+<!ENTITY jukcy "є" ><!--=small je, Ukrainian -->
+<!ENTITY Jukcy "Є" ><!--=capital JE, Ukrainian -->
+<!ENTITY kjcy "ќ" ><!--=small kje Macedonian -->
+<!ENTITY KJcy "Ќ" ><!--=capital KJE, Macedonian -->
+<!ENTITY ljcy "љ" ><!--=small lje, Serbian -->
+<!ENTITY LJcy "Љ" ><!--=capital LJE, Serbian -->
+<!ENTITY njcy "њ" ><!--=small nje, Serbian -->
+<!ENTITY NJcy "Њ" ><!--=capital NJE, Serbian -->
+<!ENTITY tshcy "ћ" ><!--=small tshe, Serbian -->
+<!ENTITY TSHcy "Ћ" ><!--=capital TSHE, Serbian -->
+<!ENTITY ubrcy "ў" ><!--=small u, Byelorussian -->
+<!ENTITY Ubrcy "Ў" ><!--=capital U, Byelorussian -->
+<!ENTITY yicy "ї" ><!--=small yi, Ukrainian -->
+<!ENTITY YIcy "Ї" ><!--=capital YI, Ukrainian -->
--- /dev/null
+
+<!--
+ File isodia.ent produced by the XSL script mmldtd.xsl
+ from input data in unicode.xml.
+
+ Please report any errors to
+ David Carlisle <davidc@nag.co.uk>.
+
+ The numeric character values assigned to each entity
+ (should) match either official Unicode assignments
+ or assignments provisionally allocated by the
+ Unicode Consortium based on the characters in the `STIX'
+ propsal for mathematics. Note that these assignments
+ have not been ratified by the corresponding ISO
+ committee and thus should be considered liable to
+ change.
+
+ Entity names in this file are derived from files carrying the
+ following notice:
+
+ (C) International Organization for Standardization 1986
+ Permission to copy in any form is granted for use with
+ conforming SGML systems and applications as defined in
+ ISO 8879, provided this notice is included in all copies.
+
+-->
+
+<!ENTITY acute "´" ><!--=acute accent -->
+<!ENTITY breve "˘" ><!--=breve -->
+<!ENTITY caron "ˇ" ><!--=caron -->
+<!ENTITY cedil "¸" ><!--=cedilla -->
+<!ENTITY circ "^" ><!--circumflex accent -->
+<!ENTITY dblac "˝" ><!--=double acute accent -->
+<!ENTITY die "¨" ><!--=dieresis -->
+<!ENTITY dot "˙" ><!--=dot above -->
+<!ENTITY grave "`" ><!--=grave accent -->
+<!ENTITY macr "¯" ><!--=macron -->
+<!ENTITY ogon "˛" ><!--=ogonek -->
+<!ENTITY ring "˚" ><!--=ring -->
+<!ENTITY tilde "˜" ><!--=tilde -->
+<!ENTITY uml "¨" ><!--=umlaut mark -->
--- /dev/null
+
+<!--
+ File isogrk3.ent produced by the XSL script mmldtd.xsl
+ from input data in unicode.xml.
+
+ Please report any errors to
+ David Carlisle <davidc@nag.co.uk>.
+
+ The numeric character values assigned to each entity
+ (should) match either official Unicode assignments
+ or assignments provisionally allocated by the
+ Unicode Consortium based on the characters in the `STIX'
+ propsal for mathematics. Note that these assignments
+ have not been ratified by the corresponding ISO
+ committee and thus should be considered liable to
+ change.
+
+ Entity names in this file are derived from files carrying the
+ following notice:
+
+ (C) International Organization for Standardization 1991
+ Permission to copy in any form is granted for use with
+ conforming SGML systems and applications as defined in
+ ISO 8879, provided this notice is included in all copies.
+
+-->
+
+<!ENTITY alpha "α" ><!--/alpha small alpha, Greek -->
+<!ENTITY beta "β" ><!--/beta small beta, Greek -->
+<!ENTITY chi "χ" ><!--/chi small chi, Greek -->
+<!ENTITY delta "δ" ><!--/delta small delta, Greek -->
+<!ENTITY Delta "Δ" ><!--/Delta capital Delta, Greek -->
+<!ENTITY epsi "ε" ><!--/straightepsilon, small epsilon, Greek -->
+<!ENTITY epsiv "ɛ" ><!--/varepsilon -->
+<!ENTITY eta "η" ><!--/eta small eta, Greek -->
+<!ENTITY gamma "γ" ><!--/gamma small gamma, Greek -->
+<!ENTITY Gamma "Γ" ><!--/Gamma capital Gamma, Greek -->
+<!ENTITY gammad "Ϝ" ><!--/digamma -->
+<!ENTITY Gammad "Ϝ" ><!--capital digamma -->
+<!ENTITY iota "ι" ><!--/iota small iota, Greek -->
+<!ENTITY kappa "κ" ><!--/kappa small kappa, Greek -->
+<!ENTITY kappav "ϰ" ><!--/varkappa -->
+<!ENTITY lambda "λ" ><!--/lambda small lambda, Greek -->
+<!ENTITY Lambda "Λ" ><!--/Lambda capital Lambda, Greek -->
+<!ENTITY mu "μ" ><!--/mu small mu, Greek -->
+<!ENTITY nu "ν" ><!--/nu small nu, Greek -->
+<!ENTITY omega "ω" ><!--/omega small omega, Greek -->
+<!ENTITY Omega "Ω" ><!--/Omega capital Omega, Greek -->
+<!ENTITY phi "φ" ><!--/straightphi - small phi, Greek -->
+<!ENTITY Phi "Φ" ><!--/Phi capital Phi, Greek -->
+<!ENTITY phiv "ϕ" ><!--/varphi - curly or open phi -->
+<!ENTITY pi "π" ><!--/pi small pi, Greek -->
+<!ENTITY Pi "Π" ><!--/Pi capital Pi, Greek -->
+<!ENTITY piv "ϖ" ><!--/varpi -->
+<!ENTITY psi "ψ" ><!--/psi small psi, Greek -->
+<!ENTITY Psi "Ψ" ><!--/Psi capital Psi, Greek -->
+<!ENTITY rho "ρ" ><!--/rho small rho, Greek -->
+<!ENTITY rhov "ϱ" ><!--/varrho -->
+<!ENTITY sigma "σ" ><!--/sigma small sigma, Greek -->
+<!ENTITY Sigma "Σ" ><!--/Sigma capital Sigma, Greek -->
+<!ENTITY sigmav "ς" ><!--/varsigma -->
+<!ENTITY tau "τ" ><!--/tau small tau, Greek -->
+<!ENTITY theta "θ" ><!--/theta straight theta, small theta, Greek -->
+<!ENTITY Theta "Θ" ><!--/Theta capital Theta, Greek -->
+<!ENTITY thetav "ϑ" ><!--/vartheta - curly or open theta -->
+<!ENTITY upsi "υ" ><!--/upsilon small upsilon, Greek -->
+<!ENTITY Upsi "ϒ" ><!--/Upsilon capital Upsilon, Greek -->
+<!ENTITY xi "ξ" ><!--/xi small xi, Greek -->
+<!ENTITY Xi "Ξ" ><!--/Xi capital Xi, Greek -->
+<!ENTITY zeta "ζ" ><!--/zeta small zeta, Greek -->
--- /dev/null
+
+<!--
+ File isolat1.ent produced by the XSL script mmldtd.xsl
+ from input data in unicode.xml.
+
+ Please report any errors to
+ David Carlisle <davidc@nag.co.uk>.
+
+ The numeric character values assigned to each entity
+ (should) match either official Unicode assignments
+ or assignments provisionally allocated by the
+ Unicode Consortium based on the characters in the `STIX'
+ propsal for mathematics. Note that these assignments
+ have not been ratified by the corresponding ISO
+ committee and thus should be considered liable to
+ change.
+
+ Entity names in this file are derived from files carrying the
+ following notice:
+
+ (C) International Organization for Standardization 1986
+ Permission to copy in any form is granted for use with
+ conforming SGML systems and applications as defined in
+ ISO 8879, provided this notice is included in all copies.
+
+-->
+
+<!ENTITY aacute "á" ><!--=small a, acute accent -->
+<!ENTITY Aacute "Á" ><!--=capital A, acute accent -->
+<!ENTITY acirc "â" ><!--=small a, circumflex accent -->
+<!ENTITY Acirc "Â" ><!--=capital A, circumflex accent -->
+<!ENTITY aelig "æ" ><!--=small ae diphthong (ligature) -->
+<!ENTITY AElig "Æ" ><!--=capital AE diphthong (ligature) -->
+<!ENTITY agrave "à" ><!--=small a, grave accent -->
+<!ENTITY Agrave "À" ><!--=capital A, grave accent -->
+<!ENTITY aring "å" ><!--=small a, ring -->
+<!ENTITY Aring "Å" ><!--=capital A, ring -->
+<!ENTITY atilde "ã" ><!--=small a, tilde -->
+<!ENTITY Atilde "Ã" ><!--=capital A, tilde -->
+<!ENTITY auml "ä" ><!--=small a, dieresis or umlaut mark -->
+<!ENTITY Auml "Ä" ><!--=capital A, dieresis or umlaut mark -->
+<!ENTITY ccedil "ç" ><!--=small c, cedilla -->
+<!ENTITY Ccedil "Ç" ><!--=capital C, cedilla -->
+<!ENTITY eacute "é" ><!--=small e, acute accent -->
+<!ENTITY Eacute "É" ><!--=capital E, acute accent -->
+<!ENTITY ecirc "ê" ><!--=small e, circumflex accent -->
+<!ENTITY Ecirc "Ê" ><!--=capital E, circumflex accent -->
+<!ENTITY egrave "è" ><!--=small e, grave accent -->
+<!ENTITY Egrave "È" ><!--=capital E, grave accent -->
+<!ENTITY eth "ð" ><!--=small eth, Icelandic -->
+<!ENTITY ETH "Ð" ><!--=capital Eth, Icelandic -->
+<!ENTITY euml "ë" ><!--=small e, dieresis or umlaut mark -->
+<!ENTITY Euml "Ë" ><!--=capital E, dieresis or umlaut mark -->
+<!ENTITY iacute "í" ><!--=small i, acute accent -->
+<!ENTITY Iacute "Í" ><!--=capital I, acute accent -->
+<!ENTITY icirc "î" ><!--=small i, circumflex accent -->
+<!ENTITY Icirc "Î" ><!--=capital I, circumflex accent -->
+<!ENTITY igrave "ì" ><!--=small i, grave accent -->
+<!ENTITY Igrave "Ì" ><!--=capital I, grave accent -->
+<!ENTITY iuml "ï" ><!--=small i, dieresis or umlaut mark -->
+<!ENTITY Iuml "Ï" ><!--=capital I, dieresis or umlaut mark -->
+<!ENTITY ntilde "ñ" ><!--=small n, tilde -->
+<!ENTITY Ntilde "Ñ" ><!--=capital N, tilde -->
+<!ENTITY oacute "ó" ><!--=small o, acute accent -->
+<!ENTITY Oacute "Ó" ><!--=capital O, acute accent -->
+<!ENTITY ocirc "ô" ><!--=small o, circumflex accent -->
+<!ENTITY Ocirc "Ô" ><!--=capital O, circumflex accent -->
+<!ENTITY ograve "ò" ><!--=small o, grave accent -->
+<!ENTITY Ograve "Ò" ><!--=capital O, grave accent -->
+<!ENTITY oslash "ø" ><!--latin small letter o with stroke -->
+<!ENTITY Oslash "Ø" ><!--=capital O, slash -->
+<!ENTITY otilde "õ" ><!--=small o, tilde -->
+<!ENTITY Otilde "Õ" ><!--=capital O, tilde -->
+<!ENTITY ouml "ö" ><!--=small o, dieresis or umlaut mark -->
+<!ENTITY Ouml "Ö" ><!--=capital O, dieresis or umlaut mark -->
+<!ENTITY szlig "ß" ><!--=small sharp s, German (sz ligature) -->
+<!ENTITY thorn "þ" ><!--=small thorn, Icelandic -->
+<!ENTITY THORN "Þ" ><!--=capital THORN, Icelandic -->
+<!ENTITY uacute "ú" ><!--=small u, acute accent -->
+<!ENTITY Uacute "Ú" ><!--=capital U, acute accent -->
+<!ENTITY ucirc "û" ><!--=small u, circumflex accent -->
+<!ENTITY Ucirc "Û" ><!--=capital U, circumflex accent -->
+<!ENTITY ugrave "ù" ><!--=small u, grave accent -->
+<!ENTITY Ugrave "Ù" ><!--=capital U, grave accent -->
+<!ENTITY uuml "ü" ><!--=small u, dieresis or umlaut mark -->
+<!ENTITY Uuml "Ü" ><!--=capital U, dieresis or umlaut mark -->
+<!ENTITY yacute "ý" ><!--=small y, acute accent -->
+<!ENTITY Yacute "Ý" ><!--=capital Y, acute accent -->
+<!ENTITY yuml "ÿ" ><!--=small y, dieresis or umlaut mark -->
--- /dev/null
+
+<!--
+ File isolat2.ent produced by the XSL script mmldtd.xsl
+ from input data in unicode.xml.
+
+ Please report any errors to
+ David Carlisle <davidc@nag.co.uk>.
+
+ The numeric character values assigned to each entity
+ (should) match either official Unicode assignments
+ or assignments provisionally allocated by the
+ Unicode Consortium based on the characters in the `STIX'
+ propsal for mathematics. Note that these assignments
+ have not been ratified by the corresponding ISO
+ committee and thus should be considered liable to
+ change.
+
+ Entity names in this file are derived from files carrying the
+ following notice:
+
+ (C) International Organization for Standardization 1986
+ Permission to copy in any form is granted for use with
+ conforming SGML systems and applications as defined in
+ ISO 8879, provided this notice is included in all copies.
+
+-->
+
+<!ENTITY abreve "ă" ><!--=small a, breve -->
+<!ENTITY Abreve "Ă" ><!--=capital A, breve -->
+<!ENTITY amacr "ā" ><!--=small a, macron -->
+<!ENTITY Amacr "Ā" ><!--=capital A, macron -->
+<!ENTITY aogon "ą" ><!--=small a, ogonek -->
+<!ENTITY Aogon "Ą" ><!--=capital A, ogonek -->
+<!ENTITY cacute "ć" ><!--=small c, acute accent -->
+<!ENTITY Cacute "Ć" ><!--=capital C, acute accent -->
+<!ENTITY ccaron "č" ><!--=small c, caron -->
+<!ENTITY Ccaron "Č" ><!--=capital C, caron -->
+<!ENTITY ccirc "ĉ" ><!--=small c, circumflex accent -->
+<!ENTITY Ccirc "Ĉ" ><!--=capital C, circumflex accent -->
+<!ENTITY cdot "ċ" ><!--=small c, dot above -->
+<!ENTITY Cdot "Ċ" ><!--=capital C, dot above -->
+<!ENTITY dcaron "ď" ><!--=small d, caron -->
+<!ENTITY Dcaron "Ď" ><!--=capital D, caron -->
+<!ENTITY dstrok "đ" ><!--=small d, stroke -->
+<!ENTITY Dstrok "Đ" ><!--=capital D, stroke -->
+<!ENTITY ecaron "ě" ><!--=small e, caron -->
+<!ENTITY Ecaron "Ě" ><!--=capital E, caron -->
+<!ENTITY edot "ė" ><!--=small e, dot above -->
+<!ENTITY Edot "Ė" ><!--=capital E, dot above -->
+<!ENTITY emacr "ē" ><!--=small e, macron -->
+<!ENTITY Emacr "Ē" ><!--=capital E, macron -->
+<!ENTITY eng "ŋ" ><!--=small eng, Lapp -->
+<!ENTITY ENG "Ŋ" ><!--=capital ENG, Lapp -->
+<!ENTITY eogon "ę" ><!--=small e, ogonek -->
+<!ENTITY Eogon "Ę" ><!--=capital E, ogonek -->
+<!ENTITY gacute "ǵ" ><!--=small g, acute accent -->
+<!ENTITY gbreve "ğ" ><!--=small g, breve -->
+<!ENTITY Gbreve "Ğ" ><!--=capital G, breve -->
+<!ENTITY Gcedil "Ģ" ><!--=capital G, cedilla -->
+<!ENTITY gcirc "ĝ" ><!--=small g, circumflex accent -->
+<!ENTITY Gcirc "Ĝ" ><!--=capital G, circumflex accent -->
+<!ENTITY gdot "ġ" ><!--=small g, dot above -->
+<!ENTITY Gdot "Ġ" ><!--=capital G, dot above -->
+<!ENTITY hcirc "ĥ" ><!--=small h, circumflex accent -->
+<!ENTITY Hcirc "Ĥ" ><!--=capital H, circumflex accent -->
+<!ENTITY hstrok "ħ" ><!--=small h, stroke -->
+<!ENTITY Hstrok "Ħ" ><!--=capital H, stroke -->
+<!ENTITY Idot "İ" ><!--=capital I, dot above -->
+<!ENTITY ijlig "ij" ><!--=small ij ligature -->
+<!ENTITY IJlig "IJ" ><!--=capital IJ ligature -->
+<!ENTITY imacr "ī" ><!--=small i, macron -->
+<!ENTITY Imacr "Ī" ><!--=capital I, macron -->
+<!ENTITY inodot "ı" ><!--=small i without dot -->
+<!ENTITY iogon "į" ><!--=small i, ogonek -->
+<!ENTITY Iogon "Į" ><!--=capital I, ogonek -->
+<!ENTITY itilde "ĩ" ><!--=small i, tilde -->
+<!ENTITY Itilde "Ĩ" ><!--=capital I, tilde -->
+<!ENTITY jcirc "ĵ" ><!--=small j, circumflex accent -->
+<!ENTITY Jcirc "Ĵ" ><!--=capital J, circumflex accent -->
+<!ENTITY kcedil "ķ" ><!--=small k, cedilla -->
+<!ENTITY Kcedil "Ķ" ><!--=capital K, cedilla -->
+<!ENTITY kgreen "ĸ" ><!--=small k, Greenlandic -->
+<!ENTITY lacute "ĺ" ><!--=small l, acute accent -->
+<!ENTITY Lacute "Ĺ" ><!--=capital L, acute accent -->
+<!ENTITY lcaron "ľ" ><!--=small l, caron -->
+<!ENTITY Lcaron "Ľ" ><!--=capital L, caron -->
+<!ENTITY lcedil "ļ" ><!--=small l, cedilla -->
+<!ENTITY Lcedil "Ļ" ><!--=capital L, cedilla -->
+<!ENTITY lmidot "ŀ" ><!--=small l, middle dot -->
+<!ENTITY Lmidot "Ŀ" ><!--=capital L, middle dot -->
+<!ENTITY lstrok "ł" ><!--=small l, stroke -->
+<!ENTITY Lstrok "Ł" ><!--=capital L, stroke -->
+<!ENTITY nacute "ń" ><!--=small n, acute accent -->
+<!ENTITY Nacute "Ń" ><!--=capital N, acute accent -->
+<!ENTITY napos "ʼn" ><!--=small n, apostrophe -->
+<!ENTITY ncaron "ň" ><!--=small n, caron -->
+<!ENTITY Ncaron "Ň" ><!--=capital N, caron -->
+<!ENTITY ncedil "ņ" ><!--=small n, cedilla -->
+<!ENTITY Ncedil "Ņ" ><!--=capital N, cedilla -->
+<!ENTITY odblac "ő" ><!--=small o, double acute accent -->
+<!ENTITY Odblac "Ő" ><!--=capital O, double acute accent -->
+<!ENTITY oelig "œ" ><!--=small oe ligature -->
+<!ENTITY OElig "Œ" ><!--=capital OE ligature -->
+<!ENTITY omacr "ō" ><!--=small o, macron -->
+<!ENTITY Omacr "Ō" ><!--=capital O, macron -->
+<!ENTITY racute "ŕ" ><!--=small r, acute accent -->
+<!ENTITY Racute "Ŕ" ><!--=capital R, acute accent -->
+<!ENTITY rcaron "ř" ><!--=small r, caron -->
+<!ENTITY Rcaron "Ř" ><!--=capital R, caron -->
+<!ENTITY rcedil "ŗ" ><!--=small r, cedilla -->
+<!ENTITY Rcedil "Ŗ" ><!--=capital R, cedilla -->
+<!ENTITY sacute "ś" ><!--=small s, acute accent -->
+<!ENTITY Sacute "Ś" ><!--=capital S, acute accent -->
+<!ENTITY scaron "š" ><!--=small s, caron -->
+<!ENTITY Scaron "Š" ><!--=capital S, caron -->
+<!ENTITY scedil "ş" ><!--=small s, cedilla -->
+<!ENTITY Scedil "Ş" ><!--=capital S, cedilla -->
+<!ENTITY scirc "ŝ" ><!--=small s, circumflex accent -->
+<!ENTITY Scirc "Ŝ" ><!--=capital S, circumflex accent -->
+<!ENTITY tcaron "ť" ><!--=small t, caron -->
+<!ENTITY Tcaron "Ť" ><!--=capital T, caron -->
+<!ENTITY tcedil "ţ" ><!--=small t, cedilla -->
+<!ENTITY Tcedil "Ţ" ><!--=capital T, cedilla -->
+<!ENTITY tstrok "ŧ" ><!--=small t, stroke -->
+<!ENTITY Tstrok "Ŧ" ><!--=capital T, stroke -->
+<!ENTITY ubreve "ŭ" ><!--=small u, breve -->
+<!ENTITY Ubreve "Ŭ" ><!--=capital U, breve -->
+<!ENTITY udblac "ű" ><!--=small u, double acute accent -->
+<!ENTITY Udblac "Ű" ><!--=capital U, double acute accent -->
+<!ENTITY umacr "ū" ><!--=small u, macron -->
+<!ENTITY Umacr "Ū" ><!--=capital U, macron -->
+<!ENTITY uogon "ų" ><!--=small u, ogonek -->
+<!ENTITY Uogon "Ų" ><!--=capital U, ogonek -->
+<!ENTITY uring "ů" ><!--=small u, ring -->
+<!ENTITY Uring "Ů" ><!--=capital U, ring -->
+<!ENTITY utilde "ũ" ><!--=small u, tilde -->
+<!ENTITY Utilde "Ũ" ><!--=capital U, tilde -->
+<!ENTITY wcirc "ŵ" ><!--=small w, circumflex accent -->
+<!ENTITY Wcirc "Ŵ" ><!--=capital W, circumflex accent -->
+<!ENTITY ycirc "ŷ" ><!--=small y, circumflex accent -->
+<!ENTITY Ycirc "Ŷ" ><!--=capital Y, circumflex accent -->
+<!ENTITY Yuml "Ÿ" ><!--=capital Y, dieresis or umlaut mark -->
+<!ENTITY zacute "ź" ><!--=small z, acute accent -->
+<!ENTITY Zacute "Ź" ><!--=capital Z, acute accent -->
+<!ENTITY zcaron "ž" ><!--=small z, caron -->
+<!ENTITY Zcaron "Ž" ><!--=capital Z, caron -->
+<!ENTITY zdot "ż" ><!--=small z, dot above -->
+<!ENTITY Zdot "Ż" ><!--=capital Z, dot above -->
--- /dev/null
+
+<!--
+ File isomfrk.ent produced by the XSL script mmldtd.xsl
+ from input data in unicode.xml.
+
+ Please report any errors to
+ David Carlisle <davidc@nag.co.uk>.
+
+ The numeric character values assigned to each entity
+ (should) match either official Unicode assignments
+ or assignments provisionally allocated by the
+ Unicode Consortium based on the characters in the `STIX'
+ propsal for mathematics. Note that these assignments
+ have not been ratified by the corresponding ISO
+ committee and thus should be considered liable to
+ change.
+
+ Entity names in this file are derived from files carrying the
+ following notice:
+
+ (C) International Organization for Standardization 1991
+ Permission to copy in any form is granted for use with
+ conforming SGML systems and applications as defined in
+ ISO 8879, provided this notice is included in all copies.
+
+-->
+
+<!ENTITY afr "<%mchar.qname; name='afr'/>" ><!--(1D51E)/frak a, lower case a -->
+<!ENTITY Afr "<%mchar.qname; name='Afr'/>" ><!--(1D504)/frak A, upper case a -->
+<!ENTITY bfr "<%mchar.qname; name='bfr'/>" ><!--(1D51F)/frak b, lower case b -->
+<!ENTITY Bfr "<%mchar.qname; name='Bfr'/>" ><!--(1D505)/frak B, upper case b -->
+<!ENTITY cfr "<%mchar.qname; name='cfr'/>" ><!--(1D520)/frak c, lower case c -->
+<!ENTITY Cfr "<%mchar.qname; name='Cfr'/>" ><!--(1D506)/frak C, upper case c -->
+<!ENTITY dfr "<%mchar.qname; name='dfr'/>" ><!--(1D521)/frak d, lower case d -->
+<!ENTITY Dfr "<%mchar.qname; name='Dfr'/>" ><!--(1D507)/frak D, upper case d -->
+<!ENTITY efr "<%mchar.qname; name='efr'/>" ><!--(1D522)/frak e, lower case e -->
+<!ENTITY Efr "<%mchar.qname; name='Efr'/>" ><!--(1D508)/frak E, upper case e -->
+<!ENTITY ffr "<%mchar.qname; name='ffr'/>" ><!--(1D523)/frak f, lower case f -->
+<!ENTITY Ffr "<%mchar.qname; name='Ffr'/>" ><!--(1D509)/frak F, upper case f -->
+<!ENTITY gfr "<%mchar.qname; name='gfr'/>" ><!--(1D524)/frak g, lower case g -->
+<!ENTITY Gfr "<%mchar.qname; name='Gfr'/>" ><!--(1D50A)/frak G, upper case g -->
+<!ENTITY hfr "<%mchar.qname; name='hfr'/>" ><!--(1D525)/frak h, lower case h -->
+<!ENTITY Hfr "<%mchar.qname; name='Hfr'/>" ><!--(1D50B)/frak H, upper case h -->
+<!ENTITY ifr "<%mchar.qname; name='ifr'/>" ><!--(1D526)/frak i, lower case i -->
+<!ENTITY Ifr "<%mchar.qname; name='Ifr'/>" ><!--(1D50C)/frak I, upper case i -->
+<!ENTITY jfr "<%mchar.qname; name='jfr'/>" ><!--(1D527)/frak j, lower case j -->
+<!ENTITY Jfr "<%mchar.qname; name='Jfr'/>" ><!--(1D50D)/frak J, upper case j -->
+<!ENTITY kfr "<%mchar.qname; name='kfr'/>" ><!--(1D528)/frak k, lower case k -->
+<!ENTITY Kfr "<%mchar.qname; name='Kfr'/>" ><!--(1D50E)/frak K, upper case k -->
+<!ENTITY lfr "<%mchar.qname; name='lfr'/>" ><!--(1D529)/frak l, lower case l -->
+<!ENTITY Lfr "<%mchar.qname; name='Lfr'/>" ><!--(1D50F)/frak L, upper case l -->
+<!ENTITY mfr "<%mchar.qname; name='mfr'/>" ><!--(1D52A)/frak m, lower case m -->
+<!ENTITY Mfr "<%mchar.qname; name='Mfr'/>" ><!--(1D510)/frak M, upper case m -->
+<!ENTITY nfr "<%mchar.qname; name='nfr'/>" ><!--(1D52B)/frak n, lower case n -->
+<!ENTITY Nfr "<%mchar.qname; name='Nfr'/>" ><!--(1D511)/frak N, upper case n -->
+<!ENTITY ofr "<%mchar.qname; name='ofr'/>" ><!--(1D52C)/frak o, lower case o -->
+<!ENTITY Ofr "<%mchar.qname; name='Ofr'/>" ><!--(1D512)/frak O, upper case o -->
+<!ENTITY pfr "<%mchar.qname; name='pfr'/>" ><!--(1D52D)/frak p, lower case p -->
+<!ENTITY Pfr "<%mchar.qname; name='Pfr'/>" ><!--(1D513)/frak P, upper case p -->
+<!ENTITY qfr "<%mchar.qname; name='qfr'/>" ><!--(1D52E)/frak q, lower case q -->
+<!ENTITY Qfr "<%mchar.qname; name='Qfr'/>" ><!--(1D514)/frak Q, upper case q -->
+<!ENTITY rfr "<%mchar.qname; name='rfr'/>" ><!--(1D52F)/frak r, lower case r -->
+<!ENTITY Rfr "<%mchar.qname; name='Rfr'/>" ><!--(1D515)/frak R, upper case r -->
+<!ENTITY sfr "<%mchar.qname; name='sfr'/>" ><!--(1D530)/frak s, lower case s -->
+<!ENTITY Sfr "<%mchar.qname; name='Sfr'/>" ><!--(1D516)/frak S, upper case s -->
+<!ENTITY tfr "<%mchar.qname; name='tfr'/>" ><!--(1D531)/frak t, lower case t -->
+<!ENTITY Tfr "<%mchar.qname; name='Tfr'/>" ><!--(1D517)/frak T, upper case t -->
+<!ENTITY ufr "<%mchar.qname; name='ufr'/>" ><!--(1D532)/frak u, lower case u -->
+<!ENTITY Ufr "<%mchar.qname; name='Ufr'/>" ><!--(1D518)/frak U, upper case u -->
+<!ENTITY vfr "<%mchar.qname; name='vfr'/>" ><!--(1D533)/frak v, lower case v -->
+<!ENTITY Vfr "<%mchar.qname; name='Vfr'/>" ><!--(1D519)/frak V, upper case v -->
+<!ENTITY wfr "<%mchar.qname; name='wfr'/>" ><!--(1D534)/frak w, lower case w -->
+<!ENTITY Wfr "<%mchar.qname; name='Wfr'/>" ><!--(1D51A)/frak W, upper case w -->
+<!ENTITY xfr "<%mchar.qname; name='xfr'/>" ><!--(1D535)/frak x, lower case x -->
+<!ENTITY Xfr "<%mchar.qname; name='Xfr'/>" ><!--(1D51B)/frak X, upper case x -->
+<!ENTITY yfr "<%mchar.qname; name='yfr'/>" ><!--(1D536)/frak y, lower case y -->
+<!ENTITY Yfr "<%mchar.qname; name='Yfr'/>" ><!--(1D51C)/frak Y, upper case y -->
+<!ENTITY zfr "<%mchar.qname; name='zfr'/>" ><!--(1D537)/frak z, lower case z -->
+<!ENTITY Zfr "<%mchar.qname; name='Zfr'/>" ><!--(1D51D)/frak Z, upper case z -->
--- /dev/null
+
+<!--
+ File isomopf.ent produced by the XSL script mmldtd.xsl
+ from input data in unicode.xml.
+
+ Please report any errors to
+ David Carlisle <davidc@nag.co.uk>.
+
+ The numeric character values assigned to each entity
+ (should) match either official Unicode assignments
+ or assignments provisionally allocated by the
+ Unicode Consortium based on the characters in the `STIX'
+ propsal for mathematics. Note that these assignments
+ have not been ratified by the corresponding ISO
+ committee and thus should be considered liable to
+ change.
+
+ Entity names in this file are derived from files carrying the
+ following notice:
+
+ (C) International Organization for Standardization 1991
+ Permission to copy in any form is granted for use with
+ conforming SGML systems and applications as defined in
+ ISO 8879, provided this notice is included in all copies.
+
+-->
+
+<!ENTITY Aopf "<%mchar.qname; name='Aopf'/>" ><!--(1D538)/Bbb A, open face A -->
+<!ENTITY Bopf "<%mchar.qname; name='Bopf'/>" ><!--(1D539)/Bbb B, open face B -->
+<!ENTITY Copf "<%mchar.qname; name='Copf'/>" ><!--(1D53A)/Bbb C, open face C -->
+<!ENTITY Dopf "<%mchar.qname; name='Dopf'/>" ><!--(1D53B)/Bbb D, open face D -->
+<!ENTITY Eopf "<%mchar.qname; name='Eopf'/>" ><!--(1D53C)/Bbb E, open face E -->
+<!ENTITY Fopf "<%mchar.qname; name='Fopf'/>" ><!--(1D53D)/Bbb F, open face F -->
+<!ENTITY Gopf "<%mchar.qname; name='Gopf'/>" ><!--(1D53E)/Bbb G, open face G -->
+<!ENTITY Hopf "<%mchar.qname; name='Hopf'/>" ><!--(1D53F)/Bbb H, open face H -->
+<!ENTITY Iopf "<%mchar.qname; name='Iopf'/>" ><!--(1D540)/Bbb I, open face I -->
+<!ENTITY Jopf "<%mchar.qname; name='Jopf'/>" ><!--(1D541)/Bbb J, open face J -->
+<!ENTITY Kopf "<%mchar.qname; name='Kopf'/>" ><!--(1D542)/Bbb K, open face K -->
+<!ENTITY Lopf "<%mchar.qname; name='Lopf'/>" ><!--(1D543)/Bbb L, open face L -->
+<!ENTITY Mopf "<%mchar.qname; name='Mopf'/>" ><!--(1D544)/Bbb M, open face M -->
+<!ENTITY Nopf "<%mchar.qname; name='Nopf'/>" ><!--(1D545)/Bbb N, open face N -->
+<!ENTITY Oopf "<%mchar.qname; name='Oopf'/>" ><!--(1D546)/Bbb O, open face O -->
+<!ENTITY Popf "<%mchar.qname; name='Popf'/>" ><!--(1D547)/Bbb P, open face P -->
+<!ENTITY Qopf "<%mchar.qname; name='Qopf'/>" ><!--(1D548)/Bbb Q, open face Q -->
+<!ENTITY Ropf "<%mchar.qname; name='Ropf'/>" ><!--(1D549)/Bbb R, open face R -->
+<!ENTITY Sopf "<%mchar.qname; name='Sopf'/>" ><!--(1D54A)/Bbb S, open face S -->
+<!ENTITY Topf "<%mchar.qname; name='Topf'/>" ><!--(1D54B)/Bbb T, open face T -->
+<!ENTITY Uopf "<%mchar.qname; name='Uopf'/>" ><!--(1D54C)/Bbb U, open face U -->
+<!ENTITY Vopf "<%mchar.qname; name='Vopf'/>" ><!--(1D54D)/Bbb V, open face V -->
+<!ENTITY Wopf "<%mchar.qname; name='Wopf'/>" ><!--(1D54E)/Bbb W, open face W -->
+<!ENTITY Xopf "<%mchar.qname; name='Xopf'/>" ><!--(1D54F)/Bbb X, open face X -->
+<!ENTITY Yopf "<%mchar.qname; name='Yopf'/>" ><!--(1D550)/Bbb Y, open face Y -->
+<!ENTITY Zopf "<%mchar.qname; name='Zopf'/>" ><!--(1D551)/Bbb Z, open face Z -->
--- /dev/null
+
+<!--
+ File isomscr.ent produced by the XSL script mmldtd.xsl
+ from input data in unicode.xml.
+
+ Please report any errors to
+ David Carlisle <davidc@nag.co.uk>.
+
+ The numeric character values assigned to each entity
+ (should) match either official Unicode assignments
+ or assignments provisionally allocated by the
+ Unicode Consortium based on the characters in the `STIX'
+ propsal for mathematics. Note that these assignments
+ have not been ratified by the corresponding ISO
+ committee and thus should be considered liable to
+ change.
+
+ Entity names in this file are derived from files carrying the
+ following notice:
+
+ (C) International Organization for Standardization 1991
+ Permission to copy in any form is granted for use with
+ conforming SGML systems and applications as defined in
+ ISO 8879, provided this notice is included in all copies.
+
+-->
+
+<!ENTITY ascr "<%mchar.qname; name='ascr'/>" ><!--(1D4B6)/scr a, script letter a -->
+<!ENTITY Ascr "<%mchar.qname; name='Ascr'/>" ><!--(1D49C)/scr A, script letter A -->
+<!ENTITY bscr "<%mchar.qname; name='bscr'/>" ><!--(1D4B7)/scr b, script letter b -->
+<!ENTITY Bscr "<%mchar.qname; name='Bscr'/>" ><!--(1D49D)/scr B, script letter B -->
+<!ENTITY cscr "<%mchar.qname; name='cscr'/>" ><!--(1D4B8)/scr c, script letter c -->
+<!ENTITY Cscr "<%mchar.qname; name='Cscr'/>" ><!--(1D49E)/scr C, script letter C -->
+<!ENTITY dscr "<%mchar.qname; name='dscr'/>" ><!--(1D4B9)/scr d, script letter d -->
+<!ENTITY Dscr "<%mchar.qname; name='Dscr'/>" ><!--(1D49F)/scr D, script letter D -->
+<!ENTITY escr "<%mchar.qname; name='escr'/>" ><!--(1D4BA)/scr e, script letter e -->
+<!ENTITY Escr "<%mchar.qname; name='Escr'/>" ><!--(1D4A0)/scr E, script letter E -->
+<!ENTITY fscr "<%mchar.qname; name='fscr'/>" ><!--(1D4BB)/scr f, script letter f -->
+<!ENTITY Fscr "<%mchar.qname; name='Fscr'/>" ><!--(1D4A1)/scr F, script letter F -->
+<!ENTITY gscr "<%mchar.qname; name='gscr'/>" ><!--(1D4BC)/scr g, script letter g -->
+<!ENTITY Gscr "<%mchar.qname; name='Gscr'/>" ><!--(1D4A2)/scr G, script letter G -->
+<!ENTITY hscr "<%mchar.qname; name='hscr'/>" ><!--(1D4BD)/scr h, script letter h -->
+<!ENTITY Hscr "<%mchar.qname; name='Hscr'/>" ><!--(1D4A3)/scr H, script letter H -->
+<!ENTITY iscr "<%mchar.qname; name='iscr'/>" ><!--(1D4BE)/scr i, script letter i -->
+<!ENTITY Iscr "<%mchar.qname; name='Iscr'/>" ><!--(1D4A4)/scr I, script letter I -->
+<!ENTITY jscr "<%mchar.qname; name='jscr'/>" ><!--(1D4BF)/scr j, script letter j -->
+<!ENTITY Jscr "<%mchar.qname; name='Jscr'/>" ><!--(1D4A5)/scr J, script letter J -->
+<!ENTITY kscr "<%mchar.qname; name='kscr'/>" ><!--(1D4C0)/scr k, script letter k -->
+<!ENTITY Kscr "<%mchar.qname; name='Kscr'/>" ><!--(1D4A6)/scr K, script letter K -->
+<!ENTITY lscr "<%mchar.qname; name='lscr'/>" ><!--(1D4C1)/scr l, script letter l -->
+<!ENTITY Lscr "<%mchar.qname; name='Lscr'/>" ><!--(1D4A7)/scr L, script letter L -->
+<!ENTITY mscr "<%mchar.qname; name='mscr'/>" ><!--(1D4C2)/scr m, script letter m -->
+<!ENTITY Mscr "<%mchar.qname; name='Mscr'/>" ><!--(1D4A8)/scr M, script letter M -->
+<!ENTITY nscr "<%mchar.qname; name='nscr'/>" ><!--(1D4C3)/scr n, script letter n -->
+<!ENTITY Nscr "<%mchar.qname; name='Nscr'/>" ><!--(1D4A9)/scr N, script letter N -->
+<!ENTITY oscr "<%mchar.qname; name='oscr'/>" ><!--(1D4C4)/scr o, script letter o -->
+<!ENTITY Oscr "<%mchar.qname; name='Oscr'/>" ><!--(1D4AA)/scr O, script letter O -->
+<!ENTITY pscr "<%mchar.qname; name='pscr'/>" ><!--(1D4C5)/scr p, script letter p -->
+<!ENTITY Pscr "<%mchar.qname; name='Pscr'/>" ><!--(1D4AB)/scr P, script letter P -->
+<!ENTITY qscr "<%mchar.qname; name='qscr'/>" ><!--(1D4C6)/scr q, script letter q -->
+<!ENTITY Qscr "<%mchar.qname; name='Qscr'/>" ><!--(1D4AC)/scr Q, script letter Q -->
+<!ENTITY rscr "<%mchar.qname; name='rscr'/>" ><!--(1D4C7)/scr r, script letter r -->
+<!ENTITY Rscr "<%mchar.qname; name='Rscr'/>" ><!--(1D4AD)/scr R, script letter R -->
+<!ENTITY sscr "<%mchar.qname; name='sscr'/>" ><!--(1D4C8)/scr s, script letter s -->
+<!ENTITY Sscr "<%mchar.qname; name='Sscr'/>" ><!--(1D4AE)/scr S, script letter S -->
+<!ENTITY tscr "<%mchar.qname; name='tscr'/>" ><!--(1D4C9)/scr t, script letter t -->
+<!ENTITY Tscr "<%mchar.qname; name='Tscr'/>" ><!--(1D4AF)/scr T, script letter T -->
+<!ENTITY uscr "<%mchar.qname; name='uscr'/>" ><!--(1D4CA)/scr u, script letter u -->
+<!ENTITY Uscr "<%mchar.qname; name='Uscr'/>" ><!--(1D4B0)/scr U, script letter U -->
+<!ENTITY vscr "<%mchar.qname; name='vscr'/>" ><!--(1D4CB)/scr v, script letter v -->
+<!ENTITY Vscr "<%mchar.qname; name='Vscr'/>" ><!--(1D4B1)/scr V, script letter V -->
+<!ENTITY wscr "<%mchar.qname; name='wscr'/>" ><!--(1D4CC)/scr w, script letter w -->
+<!ENTITY Wscr "<%mchar.qname; name='Wscr'/>" ><!--(1D4B2)/scr W, script letter W -->
+<!ENTITY xscr "<%mchar.qname; name='xscr'/>" ><!--(1D4CD)/scr x, script letter x -->
+<!ENTITY Xscr "<%mchar.qname; name='Xscr'/>" ><!--(1D4B3)/scr X, script letter X -->
+<!ENTITY yscr "<%mchar.qname; name='yscr'/>" ><!--(1D4CE)/scr y, script letter y -->
+<!ENTITY Yscr "<%mchar.qname; name='Yscr'/>" ><!--(1D4B4)/scr Y, script letter Y -->
+<!ENTITY zscr "<%mchar.qname; name='zscr'/>" ><!--(1D4CF)/scr z, script letter z -->
+<!ENTITY Zscr "<%mchar.qname; name='Zscr'/>" ><!--(1D4B5)/scr Z, script letter Z -->
--- /dev/null
+
+<!--
+ File isonum.ent produced by the XSL script mmldtd.xsl
+ from input data in unicode.xml.
+
+ Please report any errors to
+ David Carlisle <davidc@nag.co.uk>.
+
+ The numeric character values assigned to each entity
+ (should) match either official Unicode assignments
+ or assignments provisionally allocated by the
+ Unicode Consortium based on the characters in the `STIX'
+ propsal for mathematics. Note that these assignments
+ have not been ratified by the corresponding ISO
+ committee and thus should be considered liable to
+ change.
+
+ Entity names in this file are derived from files carrying the
+ following notice:
+
+ (C) International Organization for Standardization 1986
+ Permission to copy in any form is granted for use with
+ conforming SGML systems and applications as defined in
+ ISO 8879, provided this notice is included in all copies.
+
+-->
+<!--HELM: deleted the central &:
+<!ENTITY amp "&&" >-->
+<!ENTITY amp "&#x00026;" ><!--=ampersand -->
+<!ENTITY apos "'" ><!--=apostrophe -->
+<!ENTITY ast "*" ><!--/ast B: =asterisk -->
+<!ENTITY brvbar "¦" ><!--=broken (vertical) bar -->
+<!ENTITY bsol "\" ><!--/backslash =reverse solidus -->
+<!ENTITY cent "¢" ><!--=cent sign -->
+<!ENTITY colon ":" ><!--/colon P: -->
+<!ENTITY comma "," ><!--P: =comma -->
+<!ENTITY commat "@" ><!--=commercial at -->
+<!ENTITY copy "©" ><!--=copyright sign -->
+<!ENTITY curren "¤" ><!--=general currency sign -->
+<!ENTITY darr "↓" ><!--/downarrow A: =downward arrow -->
+<!ENTITY deg "°" ><!--=degree sign -->
+<!ENTITY divide "÷" ><!--/div B: =divide sign -->
+<!ENTITY dollar "$" ><!--=dollar sign -->
+<!ENTITY equals "=" ><!--=equals sign R: -->
+<!ENTITY excl "!" ><!--=exclamation mark -->
+<!ENTITY frac12 "½" ><!--=fraction one-half -->
+<!ENTITY frac14 "¼" ><!--=fraction one-quarter -->
+<!ENTITY frac18 "⅛" ><!--=fraction one-eighth -->
+<!ENTITY frac34 "¾" ><!--=fraction three-quarters -->
+<!ENTITY frac38 "⅜" ><!--=fraction three-eighths -->
+<!ENTITY frac58 "⅝" ><!--=fraction five-eighths -->
+<!ENTITY frac78 "⅞" ><!--=fraction seven-eighths -->
+<!ENTITY gt ">" ><!--=greater-than sign R: -->
+<!ENTITY half "½" ><!--=fraction one-half -->
+<!ENTITY horbar "―" ><!--=horizontal bar -->
+<!ENTITY hyphen "‐" ><!--=hyphen -->
+<!ENTITY iexcl "¡" ><!--=inverted exclamation mark -->
+<!ENTITY iquest "¿" ><!--=inverted question mark -->
+<!ENTITY laquo "«" ><!--=angle quotation mark, left -->
+<!ENTITY larr "←" ><!--/leftarrow /gets A: =leftward arrow -->
+<!ENTITY lcub "{" ><!--/lbrace O: =left curly bracket -->
+<!ENTITY ldquo "“" ><!--=double quotation mark, left -->
+<!ENTITY lowbar "_" ><!--=low line -->
+<!ENTITY lpar "(" ><!--O: =left parenthesis -->
+<!ENTITY lsqb "[" ><!--/lbrack O: =left square bracket -->
+<!ENTITY lsquo "‘" ><!--=single quotation mark, left -->
+<!--HELM: deleted the central &:
+<!ENTITY lt "&<" >-->
+<!ENTITY lt "&#x0003C;" ><!--=less-than sign R: -->
+<!ENTITY micro "µ" ><!--=micro sign -->
+<!ENTITY middot "·" ><!--/centerdot B: =middle dot -->
+<!ENTITY nbsp " " ><!--=no break (required) space -->
+<!ENTITY not "¬" ><!--/neg /lnot =not sign -->
+<!ENTITY num "#" ><!--=number sign -->
+<!ENTITY ohm "Ω" ><!--=ohm sign -->
+<!ENTITY ordf "ª" ><!--=ordinal indicator, feminine -->
+<!ENTITY ordm "º" ><!--=ordinal indicator, masculine -->
+<!ENTITY para "¶" ><!--=pilcrow (paragraph sign) -->
+<!ENTITY percnt "%" ><!--=percent sign -->
+<!ENTITY period "." ><!--=full stop, period -->
+<!ENTITY plus "+" ><!--=plus sign B: -->
+<!ENTITY plusmn "±" ><!--/pm B: =plus-or-minus sign -->
+<!ENTITY pound "£" ><!--=pound sign -->
+<!ENTITY quest "?" ><!--=question mark -->
+<!ENTITY quot """ ><!--=quotation mark -->
+<!ENTITY raquo "»" ><!--=angle quotation mark, right -->
+<!ENTITY rarr "→" ><!--/rightarrow /to A: =rightward arrow -->
+<!ENTITY rcub "}" ><!--/rbrace C: =right curly bracket -->
+<!ENTITY rdquo "”" ><!--=double quotation mark, right -->
+<!ENTITY reg "®" ><!--/circledR =registered sign -->
+<!ENTITY rpar ")" ><!--C: =right parenthesis -->
+<!ENTITY rsqb "]" ><!--/rbrack C: =right square bracket -->
+<!ENTITY rsquo "’" ><!--=single quotation mark, right -->
+<!ENTITY sect "§" ><!--=section sign -->
+<!ENTITY semi ";" ><!--=semicolon P: -->
+<!ENTITY shy "­" ><!--=soft hyphen -->
+<!ENTITY sol "/" ><!--=solidus -->
+<!ENTITY sung "♪" ><!--=music note (sung text sign) -->
+<!ENTITY sup1 "¹" ><!--=superscript one -->
+<!ENTITY sup2 "²" ><!--=superscript two -->
+<!ENTITY sup3 "³" ><!--=superscript three -->
+<!ENTITY times "×" ><!--/times B: =multiply sign -->
+<!ENTITY trade "™" ><!--=trade mark sign -->
+<!ENTITY uarr "↑" ><!--/uparrow A: =upward arrow -->
+<!ENTITY verbar "|" ><!--/vert =vertical bar -->
+<!ENTITY yen "¥" ><!--/yen =yen sign -->
--- /dev/null
+
+<!--
+ File isopub.ent produced by the XSL script mmldtd.xsl
+ from input data in unicode.xml.
+
+ Please report any errors to
+ David Carlisle <davidc@nag.co.uk>.
+
+ The numeric character values assigned to each entity
+ (should) match either official Unicode assignments
+ or assignments provisionally allocated by the
+ Unicode Consortium based on the characters in the `STIX'
+ propsal for mathematics. Note that these assignments
+ have not been ratified by the corresponding ISO
+ committee and thus should be considered liable to
+ change.
+
+ Entity names in this file are derived from files carrying the
+ following notice:
+
+ (C) International Organization for Standardization 1986
+ Permission to copy in any form is granted for use with
+ conforming SGML systems and applications as defined in
+ ISO 8879, provided this notice is included in all copies.
+
+-->
+
+<!ENTITY blank "␣" ><!--=significant blank symbol -->
+<!ENTITY blk12 "▒" ><!--=50% shaded block -->
+<!ENTITY blk14 "░" ><!--=25% shaded block -->
+<!ENTITY blk34 "▓" ><!--=75% shaded block -->
+<!ENTITY block "█" ><!--=full block -->
+<!ENTITY bull "•" ><!--/bullet B: =round bullet, filled -->
+<!ENTITY caret "⁁" ><!--=caret (insertion mark) -->
+<!ENTITY check "✓" ><!--/checkmark =tick, check mark -->
+<!ENTITY cir "○" ><!--/circ B: =circle, open -->
+<!ENTITY clubs "♣" ><!--/clubsuit =club suit symbol -->
+<!ENTITY copysr "℗" ><!--=sound recording copyright sign -->
+<!ENTITY cross "✗" ><!--=ballot cross -->
+<!ENTITY dagger "†" ><!--/dagger B: =dagger -->
+<!ENTITY Dagger "‡" ><!--/ddagger B: =double dagger -->
+<!ENTITY dash "‐" ><!--=hyphen (true graphic) -->
+<!ENTITY diams "♦" ><!--/diamondsuit =diamond suit symbol -->
+<!ENTITY dlcrop "⌍" ><!--downward left crop mark -->
+<!ENTITY drcrop "⌌" ><!--downward right crop mark -->
+<!ENTITY dtri "▿" ><!--/triangledown =down triangle, open -->
+<!ENTITY dtrif "▾" ><!--/blacktriangledown =dn tri, filled -->
+<!ENTITY emsp " " ><!--=em space -->
+<!ENTITY emsp13 " " ><!--=1/3-em space -->
+<!ENTITY emsp14 " " ><!--=1/4-em space -->
+<!ENTITY ensp " " ><!--=en space (1/2-em) -->
+<!ENTITY female "♀" ><!--=female symbol -->
+<!ENTITY ffilig "ffi" ><!--small ffi ligature -->
+<!ENTITY fflig "ff" ><!--small ff ligature -->
+<!ENTITY ffllig "ffl" ><!--small ffl ligature -->
+<!ENTITY filig "fi" ><!--small fi ligature -->
+<!ENTITY flat "♭" ><!--/flat =musical flat -->
+<!ENTITY fllig "fl" ><!--small fl ligature -->
+<!ENTITY frac13 "⅓" ><!--=fraction one-third -->
+<!ENTITY frac15 "⅕" ><!--=fraction one-fifth -->
+<!ENTITY frac16 "⅙" ><!--=fraction one-sixth -->
+<!ENTITY frac23 "⅔" ><!--=fraction two-thirds -->
+<!ENTITY frac25 "⅖" ><!--=fraction two-fifths -->
+<!ENTITY frac35 "⅗" ><!--=fraction three-fifths -->
+<!ENTITY frac45 "⅘" ><!--=fraction four-fifths -->
+<!ENTITY frac56 "⅚" ><!--=fraction five-sixths -->
+<!ENTITY hairsp " " ><!--=hair space -->
+<!ENTITY hearts "♡" ><!--/heartsuit =heart suit symbol -->
+<!ENTITY hellip "…" ><!--=ellipsis (horizontal) -->
+<!ENTITY hybull "⁃" ><!--rectangle, filled (hyphen bullet) -->
+<!ENTITY incare "℅" ><!--=in-care-of symbol -->
+<!ENTITY ldquor "„" ><!--=rising dbl quote, left (low) -->
+<!ENTITY lhblk "▄" ><!--=lower half block -->
+<!ENTITY loz "◊" ><!--/lozenge - lozenge or total mark -->
+<!ENTITY lozf "⧫" ><!--/blacklozenge - lozenge, filled -->
+<!ENTITY lsquor "‚" ><!--=rising single quote, left (low) -->
+<!ENTITY ltri "◃" ><!--/triangleleft B: l triangle, open -->
+<!ENTITY ltrif "◂" ><!--/blacktriangleleft R: =l tri, filled -->
+<!ENTITY male "♂" ><!--=male symbol -->
+<!ENTITY malt "✠" ><!--/maltese =maltese cross -->
+<!ENTITY marker "▮" ><!--=histogram marker -->
+<!ENTITY mdash "—" ><!--=em dash -->
+<!ENTITY mldr "…" ><!--em leader -->
+<!ENTITY natur "♮" ><!--/natural - music natural -->
+<!ENTITY ndash "–" ><!--=en dash -->
+<!ENTITY nldr "‥" ><!--=double baseline dot (en leader) -->
+<!ENTITY numsp " " ><!--=digit space (width of a number) -->
+<!ENTITY phone "☎" ><!--=telephone symbol -->
+<!ENTITY puncsp " " ><!--=punctuation space (width of comma) -->
+<!ENTITY rdquor "”" ><!--rising dbl quote, right (high) -->
+<!ENTITY rect "▭" ><!--=rectangle, open -->
+<!ENTITY rsquor "’" ><!--rising single quote, right (high) -->
+<!ENTITY rtri "▹" ><!--/triangleright B: r triangle, open -->
+<!ENTITY rtrif "▸" ><!--/blacktriangleright R: =r tri, filled -->
+<!ENTITY rx "℞" ><!--pharmaceutical prescription (Rx) -->
+<!ENTITY sext "✶" ><!--sextile (6-pointed star) -->
+<!ENTITY sharp "♯" ><!--/sharp =musical sharp -->
+<!ENTITY spades "♠" ><!--/spadesuit =spades suit symbol -->
+<!ENTITY squ "□" ><!--=square, open -->
+<!ENTITY squf "▪" ><!--/blacksquare =sq bullet, filled -->
+<!ENTITY star "⋆" ><!--=star, open -->
+<!ENTITY starf "★" ><!--/bigstar - star, filled -->
+<!ENTITY target "⌖" ><!--register mark or target -->
+<!ENTITY telrec "⌕" ><!--=telephone recorder symbol -->
+<!ENTITY thinsp " " ><!--=thin space (1/6-em) -->
+<!ENTITY uhblk "▀" ><!--=upper half block -->
+<!ENTITY ulcrop "⌏" ><!--upward left crop mark -->
+<!ENTITY urcrop "⌎" ><!--upward right crop mark -->
+<!ENTITY utri "▵" ><!--/triangle =up triangle, open -->
+<!ENTITY utrif "▴" ><!--/blacktriangle =up tri, filled -->
+<!ENTITY vellip "⋮" ><!--vertical ellipsis -->
--- /dev/null
+
+<!--
+ File isotech.ent produced by the XSL script mmldtd.xsl
+ from input data in unicode.xml.
+
+ Please report any errors to
+ David Carlisle <davidc@nag.co.uk>.
+
+ The numeric character values assigned to each entity
+ (should) match either official Unicode assignments
+ or assignments provisionally allocated by the
+ Unicode Consortium based on the characters in the `STIX'
+ propsal for mathematics. Note that these assignments
+ have not been ratified by the corresponding ISO
+ committee and thus should be considered liable to
+ change.
+
+ Entity names in this file are derived from files carrying the
+ following notice:
+
+ (C) International Organization for Standardization 1991
+ Permission to copy in any form is granted for use with
+ conforming SGML systems and applications as defined in
+ ISO 8879, provided this notice is included in all copies.
+
+-->
+
+<!ENTITY acd "∿" ><!--ac current -->
+<!ENTITY aleph "ℵ" ><!--/aleph aleph, Hebrew -->
+<!ENTITY and "∧" ><!--/wedge /land B: logical and -->
+<!ENTITY And "⩓" ><!--dbl logical and -->
+<!ENTITY andand "⩕" ><!--two logical and -->
+<!ENTITY andd "⩜" ><!--and, horizontal dash -->
+<!ENTITY andslope "⩘" ><!--sloping large and -->
+<!ENTITY andv "⩚" ><!--and with middle stem -->
+<!ENTITY angrt "∟" ><!--right (90 degree) angle -->
+<!ENTITY angsph "∢" ><!--/sphericalangle angle-spherical -->
+<!ENTITY angst "Å" ><!--Angstrom capital A, ring -->
+<!ENTITY ap "≈" ><!--/approx R: approximate -->
+<!ENTITY apacir "⩯" ><!--approximate, circumflex accent -->
+<!ENTITY awconint "∳" ><!--contour integral, anti-clockwise -->
+<!ENTITY awint "⨑" ><!--anti clock-wise integration -->
+<!ENTITY becaus "∵" ><!--/because R: because -->
+<!ENTITY bernou "ℬ" ><!--Bernoulli function (script capital B) -->
+<!ENTITY bne "=⃥" ><!--reverse not equal -->
+<!ENTITY bnequiv "≡⃥" ><!--reverse not equivalent -->
+<!ENTITY bnot "⌐" ><!--reverse not -->
+<!ENTITY bNot "⫭" ><!--reverse not with two horizontal strokes -->
+<!ENTITY bottom "⊥" ><!--/bot bottom -->
+<!ENTITY cap "∩" ><!--/cap B: intersection -->
+<!ENTITY Cconint "∰" ><!--triple contour integral operator -->
+<!ENTITY cirfnint "⨐" ><!--circulation function -->
+<!ENTITY compfn "∘" ><!--/circ B: composite function (small circle) -->
+<!ENTITY cong "≅" ><!--/cong R: congruent with -->
+<!ENTITY conint "∮" ><!--/oint L: contour integral operator -->
+<!ENTITY Conint "∯" ><!--double contour integral operator -->
+<!ENTITY ctdot "⋯" ><!--/cdots, three dots, centered -->
+<!ENTITY cup "∪" ><!--/cup B: union or logical sum -->
+<!ENTITY cwconint "∲" ><!--contour integral, clockwise -->
+<!ENTITY cwint "∱" ><!--clockwise integral -->
+<!ENTITY cylcty "⌭" ><!--cylindricity -->
+<!ENTITY disin "⋲" ><!--set membership, long horizontal stroke -->
+<!ENTITY Dot "¨" ><!--dieresis or umlaut mark -->
+<!ENTITY DotDot "⃜" ><!--four dots above -->
+<!ENTITY dsol "⁒" ><!--solidus, bar above -->
+<!ENTITY dtdot "⋱" ><!--/ddots, three dots, descending -->
+<!ENTITY dwangle "⦦" ><!--large downward pointing angle -->
+<!ENTITY epar "⋕" ><!--parallel, equal; equal or parallel -->
+<!ENTITY eparsl "⧣" ><!--parallel, slanted, equal; homothetically congruent to -->
+<!ENTITY equiv "≡" ><!--/equiv R: identical with -->
+<!ENTITY eqvparsl "⧥" ><!--equivalent, equal; congruent and parallel -->
+<!ENTITY exist "∃" ><!--/exists at least one exists -->
+<!ENTITY fnof "ƒ" ><!--function of (italic small f) -->
+<!ENTITY forall "∀" ><!--/forall for all -->
+<!ENTITY fpartint "⨍" ><!--finite part integral -->
+<!ENTITY ge "≥" ><!--/geq /ge R: greater-than-or-equal -->
+<!ENTITY hamilt "ℋ" ><!--Hamiltonian (script capital H) -->
+<!ENTITY iff "⇔" ><!--/iff if and only if -->
+<!ENTITY iinfin "⧜" ><!--infinity sign, incomplete -->
+<!ENTITY imped "<%mchar.qname; name='imped'/>" ><!--(1D543)impedance -->
+<!ENTITY infin "∞" ><!--/infty infinity -->
+<!ENTITY int "∫" ><!--/int L: integral operator -->
+<!ENTITY Int "∬" ><!--double integral operator -->
+<!ENTITY intlarhk "⨗" ><!--integral, left arrow with hook -->
+<!ENTITY isin "∈" ><!--/in R: set membership -->
+<!ENTITY isindot "⋵" ><!--set membership, dot above -->
+<!ENTITY isinE "⋹" ><!--set membership, two horizontal strokes -->
+<!ENTITY isins "⋴" ><!--set membership, vertical bar on horizontal stroke -->
+<!ENTITY isinsv "⋳" ><!--large set membership, vertical bar on horizontal stroke -->
+<!ENTITY isinv "∈" ><!--set membership, variant -->
+<!ENTITY lagran "ℒ" ><!--Lagrangian (script capital L) -->
+<!ENTITY lang "〈" ><!--/langle O: left angle bracket -->
+<!ENTITY Lang "《" ><!--left angle bracket, double -->
+<!ENTITY lArr "⇐" ><!--/Leftarrow A: is implied by -->
+<!ENTITY lbbrk "〔" ><!--left broken bracket -->
+<!ENTITY le "≤" ><!--/leq /le R: less-than-or-equal -->
+<!ENTITY loang "〘" ><!--left open angular bracket -->
+<!ENTITY lobrk "〚" ><!--left open bracket -->
+<!ENTITY lopar "⦅" ><!--left open parenthesis -->
+<!ENTITY lowast "∗" ><!--low asterisk -->
+<!ENTITY minus "−" ><!--B: minus sign -->
+<!ENTITY mnplus "∓" ><!--/mp B: minus-or-plus sign -->
+<!ENTITY nabla "∇" ><!--/nabla del, Hamilton operator -->
+<!ENTITY ne "≠" ><!--/ne /neq R: not equal -->
+<!ENTITY nedot "≠⁣" ><!--not equal, dot -->
+<!ENTITY nhpar "⫲" ><!--not, horizontal, parallel -->
+<!ENTITY ni "∋" ><!--/ni /owns R: contains -->
+<!ENTITY nis "⋼" ><!--contains, vertical bar on horizontal stroke -->
+<!ENTITY nisd "⋺" ><!--contains, long horizontal stroke -->
+<!ENTITY niv "∋" ><!--contains, variant -->
+<!ENTITY Not "⫬" ><!--not with two horizontal strokes -->
+<!ENTITY notin "∉" ><!--/notin N: negated set membership -->
+<!ENTITY notindot "⋶⁣" ><!--negated set membership, dot above -->
+<!ENTITY notinva "∉̸" ><!--negated set membership, variant -->
+<!ENTITY notinvb "⋷" ><!--negated set membership, variant -->
+<!ENTITY notinvc "⋶" ><!--negated set membership, variant -->
+<!ENTITY notni "∌" ><!--negated contains -->
+<!ENTITY notniva "∌" ><!--negated contains, variant -->
+<!ENTITY notnivb "⋾" ><!--contains, variant -->
+<!ENTITY notnivc "⋽" ><!--contains, variant -->
+<!ENTITY nparsl "∥⁣⃥" ><!--not parallel, slanted -->
+<!ENTITY npart "∂̸" ><!--not partial differential -->
+<!ENTITY npolint "⨔" ><!--line integration, not including the pole -->
+<!ENTITY nvinfin "⧞" ><!--not, vert, infinity -->
+<!ENTITY olcross "⦻" ><!--circle, cross -->
+<!ENTITY or "∨" ><!--/vee /lor B: logical or -->
+<!ENTITY Or "⩔" ><!--dbl logical or -->
+<!ENTITY ord "⩝" ><!--or, horizontal dash -->
+<!ENTITY order "ℴ" ><!--order of (script small o) -->
+<!ENTITY oror "⩖" ><!--two logical or -->
+<!ENTITY orslope "⩗" ><!--sloping large or -->
+<!ENTITY orv "⩛" ><!--or with middle stem -->
+<!ENTITY par "∥" ><!--/parallel R: parallel -->
+<!ENTITY parsl "∥⁣" ><!--parallel, slanted -->
+<!ENTITY part "∂" ><!--/partial partial differential -->
+<!ENTITY permil "‰" ><!--per thousand -->
+<!ENTITY perp "⊥" ><!--/perp R: perpendicular -->
+<!ENTITY pertenk "‱" ><!--per 10 thousand -->
+<!ENTITY phmmat "ℳ" ><!--physics M-matrix (script capital M) -->
+<!ENTITY pointint "⨕" ><!--integral around a point operator -->
+<!ENTITY prime "′" ><!--/prime prime or minute -->
+<!ENTITY Prime "″" ><!--double prime or second -->
+<!ENTITY profalar "⌮" ><!--all-around profile -->
+<!ENTITY profline "⌒" ><!--profile of a line -->
+<!ENTITY profsurf "⌓" ><!--profile of a surface -->
+<!ENTITY prop "∝" ><!--/propto R: is proportional to -->
+<!ENTITY qint "⨌" ><!--/iiiint quadruple integral operator -->
+<!ENTITY qprime "⁗" ><!--quadruple prime -->
+<!ENTITY quatint "⨖" ><!--quaternion integral operator -->
+<!ENTITY radic "√" ><!--/surd radical -->
+<!ENTITY rang "〉" ><!--/rangle C: right angle bracket -->
+<!ENTITY Rang "》" ><!--right angle bracket, double -->
+<!ENTITY rArr "⇒" ><!--/Rightarrow A: implies -->
+<!ENTITY rbbrk "〕" ><!--right broken bracket -->
+<!ENTITY roang "〙" ><!--right open angular bracket -->
+<!ENTITY robrk "〛" ><!--right open bracket -->
+<!ENTITY ropar "⦆" ><!--right open parenthesis -->
+<!ENTITY rppolint "⨒" ><!--line integration, rectangular path around pole -->
+<!ENTITY scpolint "⨓" ><!--line integration, semi-circular path around pole -->
+<!ENTITY sim "∼" ><!--/sim R: similar -->
+<!ENTITY simdot "⩪" ><!--similar, dot -->
+<!ENTITY sime "≃" ><!--/simeq R: similar, equals -->
+<!ENTITY smeparsl "⧤" ><!--similar, parallel, slanted, equal -->
+<!ENTITY square "□" ><!--/square, square -->
+<!ENTITY squarf "▪" ><!--/blacksquare, square, filled -->
+<!ENTITY sub "⊂" ><!--/subset R: subset or is implied by -->
+<!ENTITY sube "⊆" ><!--/subseteq R: subset, equals -->
+<!ENTITY sup "⊃" ><!--/supset R: superset or implies -->
+<!ENTITY supe "⊇" ><!--/supseteq R: superset, equals -->
+<!ENTITY tdot "⃛" ><!--three dots above -->
+<!ENTITY there4 "∴" ><!--/therefore R: therefore -->
+<!ENTITY tint "∭" ><!--/iiint triple integral operator -->
+<!ENTITY top "⊤" ><!--/top top -->
+<!ENTITY topbot "⌶" ><!--top and bottom -->
+<!ENTITY topcir "⫱" ><!--top, circle below -->
+<!ENTITY tprime "‴" ><!--triple prime -->
+<!ENTITY utdot "⋰" ><!--three dots, ascending -->
+<!ENTITY uwangle "⦧" ><!--large upward pointing angle -->
+<!ENTITY vangrt "⊾" ><!--right angle, variant -->
+<!ENTITY veeeq "≚" ><!--logical or, equals -->
+<!ENTITY Verbar "‖" ><!--/Vert dbl vertical bar -->
+<!ENTITY wedgeq "≙" ><!--/wedgeq R: corresponds to (wedge, equals) -->
+<!ENTITY xnis "⋻" ><!--large contains, vertical bar on horizontal stroke -->
--- /dev/null
+<!-- ....................................................................... -->
+<!-- MathML Qualified Names Module ........................................ -->
+<!-- file: mathml2-qname-1.mod
+
+ This is the Mathematical Markup Language (MathML) 2.0, an XML
+ application for describing mathematical notation and capturing
+ both its structure and content.
+
+ Copyright 1998-2000 W3C (MIT, INRIA, Keio), All Rights Reserved.
+ Revision: $Id$
+
+ This DTD module is identified by the PUBLIC and SYSTEM identifiers:
+
+ PUBLIC "-//W3C//ENTITIES MathML 2.0 Qualified Names 1.0//EN"
+ SYSTEM "mathml2-qname-1.mod"
+
+ Revisions:
+ (none)
+ ....................................................................... -->
+
+<!-- MathML Qualified Names
+
+ This module is contained in two parts, labeled Section 'A' and 'B':
+
+ Section A declares parameter entities to support namespace-
+ qualified names, namespace declarations, and name prefixing
+ for MathML.
+
+ Section B declares parameter entities used to provide
+ namespace-qualified names for all MathML element types.
+
+ This module is derived from the XHTML Qualified Names Template module.
+-->
+
+<!-- Section A: XHTML XML Namespace Framework :::::::::::::::::::: -->
+
+<!-- HELM: mathml namespace activated:
+<!ENTITY % NS.prefixed "IGNORE" >-->
+
+<!ENTITY % NS.prefixed "INCLUDE" >
+<!ENTITY % MATHML.prefixed "%NS.prefixed;" >
+
+<!-- XLink ............... -->
+
+<!ENTITY % XLINK.xmlns "http://www.w3.org/1999/xlink" >
+<!ENTITY % XLINK.xmlns.attrib
+ "xmlns:xlink CDATA #FIXED '%XLINK.xmlns;'"
+>
+
+<!-- MathML .............. -->
+
+<!ENTITY % MATHML.xmlns "http://www.w3.org/1998/Math/MathML" >
+<!ENTITY % MATHML.prefix "m" >
+<![%MATHML.prefixed;[
+<!ENTITY % MATHML.xmlns.extra.attrib "" >
+]]>
+<!ENTITY % MATHML.xmlns.extra.attrib
+ "%XLINK.xmlns.attrib;" >
+
+<![%MATHML.prefixed;[
+<!ENTITY % MATHML.pfx "%MATHML.prefix;:" >
+<!ENTITY % MATHML.xmlns.attrib
+ "xmlns:%MATHML.prefix; CDATA #FIXED '%MATHML.xmlns;'
+ %MATHML.xmlns.extra.attrib;"
+>
+]]>
+<!ENTITY % MATHML.pfx "" >
+<!ENTITY % MATHML.xmlns.attrib
+ "xmlns CDATA #FIXED '%MATHML.xmlns;'
+ %MATHML.xmlns.extra.attrib;"
+>
+
+<![%NS.prefixed;[
+<!ENTITY % XHTML.xmlns.extra.attrib
+ "%MATHML.xmlns.attrib;" >
+]]>
+<!ENTITY % XHTML.xmlns.extra.attrib
+ "%XLINK.xmlns.attrib;"
+>
+
+<!-- Section B: MathML Qualified Names ::::::::::::::::::::::::::::: -->
+
+<!-- 9. This section declares parameter entities used to provide
+ namespace-qualified names for all MathML element types.
+-->
+
+<!ENTITY % mspace.qname "%MATHML.pfx;mspace" >
+<!ENTITY % mprescripts.qname "%MATHML.pfx;mprescripts" >
+<!ENTITY % none.qname "%MATHML.pfx;none" >
+<!ENTITY % malignmark.qname "%MATHML.pfx;malignmark" >
+<!ENTITY % maligngroup.qname "%MATHML.pfx;maligngroup" >
+<!ENTITY % mchar.qname "%MATHML.pfx;mchar" >
+<!ENTITY % mglyph.qname "%MATHML.pfx;mglyph" >
+<!ENTITY % integers.qname "%MATHML.pfx;integers" >
+<!ENTITY % reals.qname "%MATHML.pfx;reals" >
+<!ENTITY % rationals.qname "%MATHML.pfx;rationals" >
+<!ENTITY % naturalnumbers.qname "%MATHML.pfx;naturalnumbers" >
+<!ENTITY % complexes.qname "%MATHML.pfx;complexes" >
+<!ENTITY % primes.qname "%MATHML.pfx;primes" >
+<!ENTITY % exponentiale.qname "%MATHML.pfx;exponentiale" >
+<!ENTITY % imaginaryi.qname "%MATHML.pfx;imaginaryi" >
+<!ENTITY % notanumber.qname "%MATHML.pfx;notanumber" >
+<!ENTITY % true.qname "%MATHML.pfx;true" >
+<!ENTITY % false.qname "%MATHML.pfx;false" >
+<!ENTITY % emptyset.qname "%MATHML.pfx;emptyset" >
+<!ENTITY % pi.qname "%MATHML.pfx;pi" >
+<!ENTITY % eulergamma.qname "%MATHML.pfx;eulergamma" >
+<!ENTITY % infinity.qname "%MATHML.pfx;infinity" >
+<!ENTITY % sep.qname "%MATHML.pfx;sep" >
+<!ENTITY % inverse.qname "%MATHML.pfx;inverse" >
+<!ENTITY % ident.qname "%MATHML.pfx;ident" >
+<!ENTITY % compose.qname "%MATHML.pfx;compose" >
+<!ENTITY % exp.qname "%MATHML.pfx;exp" >
+<!ENTITY % abs.qname "%MATHML.pfx;abs" >
+<!ENTITY % arg.qname "%MATHML.pfx;arg" >
+<!ENTITY % real.qname "%MATHML.pfx;real" >
+<!ENTITY % imaginary.qname "%MATHML.pfx;imaginary" >
+<!ENTITY % conjugate.qname "%MATHML.pfx;conjugate" >
+<!ENTITY % factorial.qname "%MATHML.pfx;factorial" >
+<!ENTITY % minus.qname "%MATHML.pfx;minus" >
+<!ENTITY % quotient.qname "%MATHML.pfx;quotient" >
+<!ENTITY % divide.qname "%MATHML.pfx;divide" >
+<!ENTITY % power.qname "%MATHML.pfx;power" >
+<!ENTITY % rem.qname "%MATHML.pfx;rem" >
+<!ENTITY % plus.qname "%MATHML.pfx;plus" >
+<!ENTITY % max.qname "%MATHML.pfx;max" >
+<!ENTITY % min.qname "%MATHML.pfx;min" >
+<!ENTITY % times.qname "%MATHML.pfx;times" >
+<!ENTITY % gcd.qname "%MATHML.pfx;gcd" >
+<!ENTITY % lcm.qname "%MATHML.pfx;lcm" >
+<!ENTITY % root.qname "%MATHML.pfx;root" >
+<!ENTITY % exists.qname "%MATHML.pfx;exists" >
+<!ENTITY % forall.qname "%MATHML.pfx;forall" >
+<!ENTITY % and.qname "%MATHML.pfx;and" >
+<!ENTITY % or.qname "%MATHML.pfx;or" >
+<!ENTITY % xor.qname "%MATHML.pfx;xor" >
+<!ENTITY % not.qname "%MATHML.pfx;not" >
+<!ENTITY % implies.qname "%MATHML.pfx;implies" >
+<!ENTITY % divergence.qname "%MATHML.pfx;divergence" >
+<!ENTITY % grad.qname "%MATHML.pfx;grad" >
+<!ENTITY % curl.qname "%MATHML.pfx;curl" >
+<!ENTITY % laplacian.qname "%MATHML.pfx;laplacian" >
+<!ENTITY % log.qname "%MATHML.pfx;log" >
+<!ENTITY % int.qname "%MATHML.pfx;int" >
+<!ENTITY % diff.qname "%MATHML.pfx;diff" >
+<!ENTITY % partialdiff.qname "%MATHML.pfx;partialdiff" >
+<!ENTITY % ln.qname "%MATHML.pfx;ln" >
+<!ENTITY % card.qname "%MATHML.pfx;card" >
+<!ENTITY % setdiff.qname "%MATHML.pfx;setdiff" >
+<!ENTITY % union.qname "%MATHML.pfx;union" >
+<!ENTITY % intersect.qname "%MATHML.pfx;intersect" >
+<!ENTITY % sum.qname "%MATHML.pfx;sum" >
+<!ENTITY % product.qname "%MATHML.pfx;product" >
+<!ENTITY % limit.qname "%MATHML.pfx;limit" >
+<!ENTITY % sin.qname "%MATHML.pfx;sin" >
+<!ENTITY % cos.qname "%MATHML.pfx;cos" >
+<!ENTITY % tan.qname "%MATHML.pfx;tan" >
+<!ENTITY % sec.qname "%MATHML.pfx;sec" >
+<!ENTITY % csc.qname "%MATHML.pfx;csc" >
+<!ENTITY % cot.qname "%MATHML.pfx;cot" >
+<!ENTITY % sinh.qname "%MATHML.pfx;sinh" >
+<!ENTITY % cosh.qname "%MATHML.pfx;cosh" >
+<!ENTITY % tanh.qname "%MATHML.pfx;tanh" >
+<!ENTITY % sech.qname "%MATHML.pfx;sech" >
+<!ENTITY % csch.qname "%MATHML.pfx;csch" >
+<!ENTITY % coth.qname "%MATHML.pfx;coth" >
+<!ENTITY % arcsin.qname "%MATHML.pfx;arcsin" >
+<!ENTITY % arccos.qname "%MATHML.pfx;arccos" >
+<!ENTITY % arctan.qname "%MATHML.pfx;arctan" >
+<!ENTITY % arccosh.qname "%MATHML.pfx;arccosh" >
+<!ENTITY % arccot.qname "%MATHML.pfx;arccot" >
+<!ENTITY % arccoth.qname "%MATHML.pfx;arccoth" >
+<!ENTITY % arccsc.qname "%MATHML.pfx;arccsc" >
+<!ENTITY % arccsch.qname "%MATHML.pfx;arccsch" >
+<!ENTITY % arcsec.qname "%MATHML.pfx;arcsec" >
+<!ENTITY % arcsech.qname "%MATHML.pfx;arcsech" >
+<!ENTITY % arcsinh.qname "%MATHML.pfx;arcsinh" >
+<!ENTITY % arctanh.qname "%MATHML.pfx;arctanh" >
+<!ENTITY % arccosh.qname "%MATHML.pfx;arccosh" >
+<!ENTITY % mean.qname "%MATHML.pfx;mean" >
+<!ENTITY % sdev.qname "%MATHML.pfx;sdev" >
+<!ENTITY % variance.qname "%MATHML.pfx;variance" >
+<!ENTITY % median.qname "%MATHML.pfx;median" >
+<!ENTITY % mode.qname "%MATHML.pfx;mode" >
+<!ENTITY % moment.qname "%MATHML.pfx;moment" >
+<!ENTITY % determinant.qname "%MATHML.pfx;determinant" >
+<!ENTITY % transpose.qname "%MATHML.pfx;transpose" >
+<!ENTITY % vectorproduct.qname "%MATHML.pfx;vectorproduct" >
+<!ENTITY % scalarproduct.qname "%MATHML.pfx;scalarproduct" >
+<!ENTITY % outerproduct.qname "%MATHML.pfx;outerproduct" >
+<!ENTITY % selector.qname "%MATHML.pfx;selector" >
+<!ENTITY % neq.qname "%MATHML.pfx;neq" >
+<!ENTITY % eq.qname "%MATHML.pfx;eq" >
+<!ENTITY % equivalent.qname "%MATHML.pfx;equivalent" >
+<!ENTITY % approx.qname "%MATHML.pfx;approx" >
+<!ENTITY % gt.qname "%MATHML.pfx;gt" >
+<!ENTITY % lt.qname "%MATHML.pfx;lt" >
+<!ENTITY % geq.qname "%MATHML.pfx;geq" >
+<!ENTITY % leq.qname "%MATHML.pfx;leq" >
+<!ENTITY % in.qname "%MATHML.pfx;in" >
+<!ENTITY % notin.qname "%MATHML.pfx;notin" >
+<!ENTITY % notsubset.qname "%MATHML.pfx;notsubset" >
+<!ENTITY % notprsubset.qname "%MATHML.pfx;notprsubset" >
+<!ENTITY % subset.qname "%MATHML.pfx;subset" >
+<!ENTITY % prsubset.qname "%MATHML.pfx;prsubset" >
+<!ENTITY % tendsto.qname "%MATHML.pfx;tendsto" >
+<!ENTITY % ci.qname "%MATHML.pfx;ci" >
+<!ENTITY % csymbol.qname "%MATHML.pfx;csymbol" >
+<!ENTITY % cn.qname "%MATHML.pfx;cn" >
+<!ENTITY % apply.qname "%MATHML.pfx;apply" >
+<!ENTITY % reln.qname "%MATHML.pfx;reln" >
+<!ENTITY % lambda.qname "%MATHML.pfx;lambda" >
+<!ENTITY % condition.qname "%MATHML.pfx;condition" >
+<!ENTITY % declare.qname "%MATHML.pfx;declare" >
+<!ENTITY % type.qname "%MATHML.pfx;type" >
+<!ENTITY % semantics.qname "%MATHML.pfx;semantics" >
+<!ENTITY % annotation.qname "%MATHML.pfx;annotation" >
+<!ENTITY % annotation-xml.qname "%MATHML.pfx;annotation-xml" >
+<!ENTITY % interval.qname "%MATHML.pfx;interval" >
+<!ENTITY % set.qname "%MATHML.pfx;set" >
+<!ENTITY % list.qname "%MATHML.pfx;list" >
+<!ENTITY % vector.qname "%MATHML.pfx;vector" >
+<!ENTITY % matrix.qname "%MATHML.pfx;matrix" >
+<!ENTITY % matrixrow.qname "%MATHML.pfx;matrixrow" >
+<!ENTITY % fn.qname "%MATHML.pfx;fn" >
+<!ENTITY % lowlimit.qname "%MATHML.pfx;lowlimit" >
+<!ENTITY % uplimit.qname "%MATHML.pfx;uplimit" >
+<!ENTITY % bvar.qname "%MATHML.pfx;bvar" >
+<!ENTITY % degree.qname "%MATHML.pfx;degree" >
+<!ENTITY % logbase.qname "%MATHML.pfx;logbase" >
+<!ENTITY % mstyle.qname "%MATHML.pfx;mstyle" >
+<!ENTITY % merror.qname "%MATHML.pfx;merror" >
+<!ENTITY % mphantom.qname "%MATHML.pfx;mphantom" >
+<!ENTITY % mrow.qname "%MATHML.pfx;mrow" >
+<!ENTITY % mfrac.qname "%MATHML.pfx;mfrac" >
+<!ENTITY % msqrt.qname "%MATHML.pfx;msqrt" >
+<!ENTITY % menclose.qname "%MATHML.pfx;menclose" >
+<!ENTITY % mroot.qname "%MATHML.pfx;mroot" >
+<!ENTITY % msub.qname "%MATHML.pfx;msub" >
+<!ENTITY % msup.qname "%MATHML.pfx;msup" >
+<!ENTITY % msubsup.qname "%MATHML.pfx;msubsup" >
+<!ENTITY % mmultiscripts.qname "%MATHML.pfx;mmultiscripts" >
+<!ENTITY % munder.qname "%MATHML.pfx;munder" >
+<!ENTITY % mover.qname "%MATHML.pfx;mover" >
+<!ENTITY % munderover.qname "%MATHML.pfx;munderover" >
+<!ENTITY % mtable.qname "%MATHML.pfx;mtable" >
+<!ENTITY % mtr.qname "%MATHML.pfx;mtr" >
+<!ENTITY % mlabeledtr.qname "%MATHML.pfx;mlabeledtr" >
+<!ENTITY % mtd.qname "%MATHML.pfx;mtd" >
+<!ENTITY % maction.qname "%MATHML.pfx;maction" >
+<!ENTITY % mfenced.qname "%MATHML.pfx;mfenced" >
+<!ENTITY % mpadded.qname "%MATHML.pfx;mpadded" >
+<!ENTITY % mi.qname "%MATHML.pfx;mi" >
+<!ENTITY % mn.qname "%MATHML.pfx;mn" >
+<!ENTITY % mo.qname "%MATHML.pfx;mo" >
+<!ENTITY % mtext.qname "%MATHML.pfx;mtext" >
+<!ENTITY % ms.qname "%MATHML.pfx;ms" >
+<!ENTITY % math.qname "%MATHML.pfx;math" >
+
+
+<!-- ignores subsequent instantiation of this module when
+ used as external subset rather than module fragment.
+ NOTE: Do not modify this parameter entity, otherwise
+ a recursive parsing situation may result.
+-->
+<!ENTITY % mathml-qname.module "IGNORE" >
+
+<!-- end of template-qname-1.mod -->
--- /dev/null
+<!-- MathML 2.0 DTD ....................................................... -->
+<!-- file: mathml2.dtd
+-->
+
+<!-- MathML 2.0 DTD
+
+ This is the Mathematical Markup Language (MathML) 2.0, an XML
+ application for describing mathematical notation and capturing
+ both its structure and content.
+
+ Copyright 1998-2000 World Wide Web Consortium
+ (Massachusetts Institute of Technology, Institut National de
+ Recherche en Informatique et en Automatique, Keio University).
+ All Rights Reserved.
+
+ Permission to use, copy, modify and distribute the XHTML 1.1 DTD and
+ its accompanying documentation for any purpose and without fee is
+ hereby granted in perpetuity, provided that the above copyright notice
+ and this paragraph appear in all copies. The copyright holders make
+ no representation about the suitability of the DTD for any purpose.
+
+ It is provided "as is" without expressed or implied warranty.
+
+ Revision: $Id$
+
+ This entity may be identified by the PUBLIC and SYSTEM identifiers:
+
+ PUBLIC "-//W3C//DTD MathML 2.0//EN"
+ SYSTEM "mathml2.dtd"
+
+ Revisions: editor and revision history at EOF
+-->
+
+
+<!-- MathML Qualified Names module ............................... -->
+<!ENTITY % mathml-qname.module "INCLUDE" >
+<![%mathml-qname.module;[
+<!ENTITY % mathml-qname.mod
+ PUBLIC "-//W3C//ENTITIES MathML 2.0 Qualified Names 1.0//EN"
+ "mathml2-qname-1.mod" >
+%mathml-qname.mod;]]>
+
+<!-- if %NS.prefixed; is INCLUDE, include all NS attributes,
+ otherwise just those associated with MathML
+-->
+<![%NS.prefixed;[
+<!-- HELM: %NamespaceDecl.attrib; not declared !! ENTITY substituted
+<!ENTITY % MATHML.NamespaceDecl.attrib
+ "%NamespaceDecl.attrib;"
+>-->
+<!ENTITY % MATHML.NamespaceDecl.attrib
+ "%MATHML.xmlns.attrib;"
+>
+]]>
+<!ENTITY % MATHML.NamespaceDecl.attrib
+ "%MATHML.xmlns.attrib;"
+>
+
+<!-- Attributes shared by all elements .......................... -->
+
+<!ENTITY % MATHML.Common.attrib
+ "%MATHML.NamespaceDecl.attrib;
+ xlink:href CDATA #IMPLIED
+ class CDATA #IMPLIED
+ style CDATA #IMPLIED
+ id ID #IMPLIED
+ xref IDREF #IMPLIED
+ other CDATA #IMPLIED"
+>
+
+<!-- Presentation element set ................................... -->
+
+<!-- Attribute definitions -->
+
+<!ENTITY % att-fontsize
+ "fontsize CDATA #IMPLIED" >
+<!ENTITY % att-fontweight
+ "fontweight ( normal | bold ) #IMPLIED" >
+<!ENTITY % att-fontstyle
+ "fontstyle ( normal | italic ) #IMPLIED" >
+<!ENTITY % att-fontfamily
+ "fontfamily CDATA #IMPLIED" >
+<!ENTITY % att-color
+ "color CDATA #IMPLIED" >
+
+<!ENTITY % att-fontinfo
+ "%att-fontsize;
+ %att-fontweight;
+ %att-fontstyle;
+ %att-fontfamily;
+ %att-color;"
+>
+
+<!ENTITY % att-form
+ "form ( prefix | infix | postfix ) #IMPLIED" >
+<!ENTITY % att-fence
+ "fence ( true | false ) #IMPLIED" >
+<!ENTITY % att-separator
+ "separator ( true | false ) #IMPLIED" >
+<!ENTITY % att-lspace
+ "lspace CDATA #IMPLIED" >
+<!ENTITY % att-rspace
+ "rspace CDATA #IMPLIED" >
+<!ENTITY % att-stretchy
+ "stretchy ( true | false ) #IMPLIED" >
+<!ENTITY % att-symmetric
+ "symmetric ( true | false ) #IMPLIED" >
+<!ENTITY % att-maxsize
+ "maxsize CDATA #IMPLIED" >
+<!ENTITY % att-minsize
+ "minsize CDATA #IMPLIED" >
+<!ENTITY % att-largeop
+ "largeop ( true | false) #IMPLIED" >
+<!ENTITY % att-movablelimits
+ "movablelimits ( true | false ) #IMPLIED" >
+<!ENTITY % att-accent
+ "accent ( true | false ) #IMPLIED" >
+
+<!ENTITY % att-opinfo
+ "%att-form;
+ %att-fence;
+ %att-separator;
+ %att-lspace;
+ %att-rspace;
+ %att-stretchy;
+ %att-symmetric;
+ %att-maxsize;
+ %att-minsize;
+ %att-largeop;
+ %att-movablelimits;
+ %att-accent;"
+>
+<!ENTITY % att-width
+ "width CDATA #IMPLIED" >
+<!ENTITY % att-height
+ "height CDATA #IMPLIED" >
+<!ENTITY % att-depth
+ "depth CDATA #IMPLIED" >
+<!ENTITY % att-linebreak
+ "linebreak CDATA #IMPLIED" >
+<!ENTITY % att-sizeinfo
+ "%att-width;
+ %att-height;
+ %att-depth;"
+>
+<!ENTITY % att-lquote
+ "lquote CDATA #IMPLIED" >
+<!ENTITY % att-rquote
+ "rquote CDATA #IMPLIED" >
+<!ENTITY % att-linethickness
+ "linethickness CDATA #IMPLIED" >
+<!ENTITY % att-scriptlevel
+ "scriptlevel CDATA #IMPLIED" >
+<!ENTITY % att-displaystyle
+ "displaystyle ( true | false ) #IMPLIED" >
+<!ENTITY % att-scriptsizemultiplier
+ "scriptsizemultiplier CDATA #IMPLIED" >
+<!ENTITY % att-scriptminsize
+ "scriptminsize CDATA #IMPLIED" >
+<!ENTITY % att-background
+ "background CDATA #IMPLIED" >
+<!ENTITY % att-open
+ "open CDATA #IMPLIED" >
+<!ENTITY % att-close
+ "close CDATA #IMPLIED" >
+<!ENTITY % att-separators
+ "separators CDATA #IMPLIED" >
+<!ENTITY % att-subscriptshift
+ "subscriptshift CDATA #IMPLIED" >
+<!ENTITY % att-superscriptshift
+ "superscriptshift CDATA #IMPLIED" >
+<!ENTITY % att-accentunder
+ "accentunder ( true | false ) #IMPLIED" >
+<!ENTITY % att-align
+ "align CDATA #IMPLIED" >
+<!ENTITY % att-rowalign
+ "rowalign CDATA #IMPLIED" >
+<!ENTITY % att-columnalign
+ "columnalign CDATA #IMPLIED" >
+<!ENTITY % att-columnwidth
+ "columnwidth CDATA #IMPLIED" >
+<!ENTITY % att-groupalign
+ "groupalign CDATA #IMPLIED" >
+<!ENTITY % att-alignmentscope
+ "alignmentscope CDATA #IMPLIED" >
+<!ENTITY % att-rowspacing
+ "rowspacing CDATA #IMPLIED" >
+<!ENTITY % att-columnspacing
+ "columnspacing CDATA #IMPLIED" >
+<!ENTITY % att-rowlines
+ "rowlines CDATA #IMPLIED" >
+<!ENTITY % att-columnlines
+ "columnlines CDATA #IMPLIED" >
+<!ENTITY % att-frame
+ "frame ( none | solid | dashed ) #IMPLIED" >
+<!ENTITY % att-framespacing
+ "framespacing CDATA #IMPLIED" >
+<!ENTITY % att-equalrows
+ "equalrows CDATA #IMPLIED" >
+<!ENTITY % att-equalcolumns
+ "equalcolumns CDATA #IMPLIED" >
+
+<!ENTITY % att-tableinfo
+ "%att-align;
+ %att-rowalign;
+ %att-columnalign;
+ %att-columnwidth;
+ %att-groupalign;
+ %att-alignmentscope;
+ %att-rowspacing;
+ %att-columnspacing;
+ %att-rowlines;
+ %att-columnlines;
+ %att-frame;
+ %att-framespacing;
+ %att-equalrows;
+ %att-equalcolumns;
+ %att-displaystyle;"
+>
+
+<!ENTITY % att-rowspan
+ "rowspan CDATA #IMPLIED" >
+<!ENTITY % att-columnspan
+ "columnspan CDATA #IMPLIED" >
+<!ENTITY % att-edge
+ "edge ( left | right ) #IMPLIED" >
+<!ENTITY % att-actiontype
+ "actiontype CDATA #IMPLIED" >
+<!ENTITY % att-selection
+ "selection CDATA #IMPLIED" >
+
+<!ENTITY % att-name
+ "name CDATA #IMPLIED" >
+<!ENTITY % att-alt
+ "alt CDATA #IMPLIED" >
+<!ENTITY % att-index
+ "index CDATA #IMPLIED" >
+
+<!ENTITY % att-bevelled
+ "bevelled CDATA #IMPLIED" >
+
+<!-- Presentation schemata with content -->
+
+<!ENTITY % ptoken
+ "%mi.qname; | %mn.qname; | %mo.qname;
+ | %mtext.qname; | %ms.qname;" >
+
+<!ATTLIST %mi.qname;
+ %MATHML.Common.attrib;
+ %att-fontinfo;
+>
+
+<!ATTLIST %mn.qname;
+ %MATHML.Common.attrib;
+ %att-fontinfo;
+>
+
+<!ATTLIST %mo.qname;
+ %MATHML.Common.attrib;
+ %att-fontinfo;
+ %att-opinfo;
+>
+
+<!ATTLIST %mtext.qname;
+ %MATHML.Common.attrib;
+ %att-fontinfo;
+>
+
+<!ATTLIST %ms.qname;
+ %MATHML.Common.attrib;
+ %att-fontinfo;
+ %att-lquote;
+ %att-rquote;
+>
+
+<!-- Empty presentation schemata -->
+
+<!ENTITY % petoken
+ "%mspace.qname;" >
+<!ELEMENT %mspace.qname; EMPTY >
+
+<!ATTLIST %mspace.qname;
+ %att-sizeinfo;
+ %att-linebreak;
+ %MATHML.Common.attrib;
+>
+
+<!-- Presentation: general layout schemata -->
+
+<!ENTITY % pgenschema
+ "%mrow.qname; | %mfrac.qname; | %msqrt.qname; | %mroot.qname;
+ | %menclose.qname; | %mstyle.qname; | %merror.qname;
+ | %mpadded.qname; | %mphantom.qname; | %mfenced.qname;" >
+
+<!ATTLIST %mrow.qname;
+ %MATHML.Common.attrib;
+>
+
+<!ATTLIST %mfrac.qname;
+ %MATHML.Common.attrib;
+ %att-bevelled;
+ %att-linethickness;
+>
+
+<!ATTLIST %msqrt.qname;
+ %MATHML.Common.attrib;
+>
+
+<!ATTLIST %menclose.qname;
+ %MATHML.Common.attrib;
+ notation CDATA 'longdiv' >
+
+<!ATTLIST %mroot.qname;
+ %MATHML.Common.attrib;
+>
+
+<!ATTLIST %mstyle.qname;
+ %MATHML.Common.attrib;
+ %att-fontinfo;
+ %att-opinfo;
+ %att-lquote;
+ %att-rquote;
+ %att-linethickness;
+ %att-scriptlevel;
+ %att-scriptsizemultiplier;
+ %att-scriptminsize;
+ %att-background;
+ %att-open;
+ %att-close;
+ %att-separators;
+ %att-subscriptshift;
+ %att-superscriptshift;
+ %att-accentunder;
+ %att-tableinfo;
+ %att-rowspan;
+ %att-columnspan;
+ %att-edge;
+ %att-actiontype;
+ %att-selection;
+>
+
+<!ATTLIST %merror.qname;
+ %MATHML.Common.attrib;
+>
+
+<!ATTLIST %mpadded.qname;
+ %MATHML.Common.attrib;
+ %att-sizeinfo;
+ %att-lspace;
+>
+
+<!ATTLIST %mphantom.qname;
+ %MATHML.Common.attrib;
+>
+
+<!ATTLIST %mfenced.qname;
+ %MATHML.Common.attrib;
+ %att-open;
+ %att-close;
+ %att-separators;
+>
+
+<!-- Presentation layout schemata: scripts and limits -->
+
+<!ENTITY % pscrschema
+ "%msub.qname; | %msup.qname; | %msubsup.qname; | %munder.qname;
+ | %mover.qname; | %munderover.qname; | %mmultiscripts.qname;" >
+
+<!ATTLIST %msub.qname;
+ %MATHML.Common.attrib;
+ %att-subscriptshift;
+>
+
+<!ATTLIST %msup.qname;
+ %MATHML.Common.attrib;
+ %att-superscriptshift;
+>
+
+<!ATTLIST %msubsup.qname;
+ %MATHML.Common.attrib;
+ %att-subscriptshift;
+ %att-superscriptshift;
+>
+
+<!ATTLIST %munder.qname;
+ %MATHML.Common.attrib;
+ %att-accentunder;
+>
+
+<!ATTLIST %mover.qname;
+ %MATHML.Common.attrib;
+ %att-accent;
+>
+
+<!ATTLIST %munderover.qname;
+ %MATHML.Common.attrib;
+ %att-accent;
+ %att-accentunder;
+>
+
+<!ATTLIST %mmultiscripts.qname;
+ %MATHML.Common.attrib;
+ %att-subscriptshift;
+ %att-superscriptshift;
+>
+
+<!-- Presentation layout schemata: empty elements for scripts -->
+
+<!ENTITY % pscreschema
+ "%mprescripts.qname; | %none.qname;" >
+
+<!ELEMENT %mprescripts.qname; EMPTY >
+<!ATTLIST %mprescripts.qname;
+ %MATHML.xmlns.attrib; >
+
+<!ELEMENT %none.qname; EMPTY >
+<!ATTLIST %none.qname;
+ %MATHML.xmlns.attrib; >
+
+<!-- Presentation layout schemata: tables -->
+
+<!ENTITY % ptabschema
+ "%mtable.qname; | %mtr.qname; | %mlabeledtr.qname; | %mtd.qname;" >
+
+<!ATTLIST %mtable.qname;
+ %MATHML.Common.attrib;
+ %att-tableinfo;
+>
+
+<!ATTLIST %mtr.qname;
+ %MATHML.Common.attrib;
+ %att-rowalign;
+ %att-columnalign;
+ %att-groupalign;
+>
+
+<!ATTLIST %mlabeledtr.qname;
+ %MATHML.Common.attrib;
+ %att-rowalign;
+ %att-columnalign;
+ %att-groupalign;
+>
+
+<!ATTLIST %mtd.qname;
+ %MATHML.Common.attrib;
+ %att-rowalign;
+ %att-columnalign;
+ %att-groupalign;
+ %att-rowspan;
+ %att-columnspan;
+>
+
+<!ENTITY % plschema
+ "%pgenschema; | %pscrschema; | %ptabschema;" >
+
+<!-- Empty presentation layout schemata -->
+
+<!ENTITY % peschema
+ "%maligngroup.qname; | %malignmark.qname;" >
+
+<!ELEMENT %malignmark.qname; EMPTY >
+
+<!ATTLIST %malignmark.qname;
+ %att-edge; >
+
+<!ELEMENT %maligngroup.qname; EMPTY >
+<!ATTLIST %maligngroup.qname;
+ %MATHML.Common.attrib;
+ %att-groupalign;
+>
+
+<!ELEMENT %mchar.qname; EMPTY >
+<!ATTLIST %mchar.qname;
+ %att-name; >
+
+<!ELEMENT %mglyph.qname; EMPTY >
+<!ATTLIST %mglyph.qname;
+ %att-alt;
+ %att-fontfamily;
+ %att-index; >
+
+<!-- Presentation action schemata -->
+
+<!ENTITY % pactions
+ "%maction.qname;" >
+<!ATTLIST %maction.qname;
+ %MATHML.Common.attrib;
+ %att-actiontype;
+ %att-selection;
+>
+
+<!-- The following entity for substitution into
+ content constructs excludes elements that
+ are not valid as expressions.
+-->
+
+<!ENTITY % PresInCont
+ "%ptoken; | %petoken; |
+ %plschema; | %peschema; | %pactions;" >
+
+<!-- Presentation entity: all presentation constructs -->
+
+<!ENTITY % Presentation
+ "%ptoken; | %petoken; | %pscreschema; |
+ %plschema; | %peschema; | %pactions;">
+
+<!-- Content element set ........................................ -->
+
+<!-- Attribute definitions -->
+
+<!ENTITY % att-base
+ "base CDATA '10'" >
+<!ENTITY % att-closure
+ "closure CDATA 'closed'" >
+<!ENTITY % att-definition
+ "definitionURL CDATA ''" >
+<!ENTITY % att-encoding
+ "encoding CDATA ''" >
+<!ENTITY % att-nargs
+ "nargs CDATA '1'" >
+<!ENTITY % att-occurrence
+ "occurrence CDATA 'function-model'" >
+<!ENTITY % att-order
+ "order CDATA 'numeric'" >
+<!ENTITY % att-scope
+ "scope CDATA 'local'" >
+<!ENTITY % att-type
+ "type CDATA #IMPLIED" >
+
+<!-- Content elements: leaf nodes -->
+
+<!ENTITY % ctoken
+ "%csymbol.qname; | %ci.qname; | %cn.qname;" >
+
+<!ATTLIST %ci.qname;
+ %MATHML.Common.attrib;
+ %att-type;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ATTLIST %csymbol.qname;
+ %MATHML.Common.attrib;
+ %att-encoding;
+ %att-type;
+ %att-definition;
+>
+
+<!ATTLIST %cn.qname;
+ %MATHML.Common.attrib;
+ %att-type;
+ %att-base;
+ %att-definition;
+ %att-encoding;
+>
+
+<!-- Content elements: specials -->
+
+<!ENTITY % cspecial
+ "%apply.qname; | %reln.qname; |
+ %lambda.qname;" >
+
+<!ATTLIST %apply.qname;
+ %MATHML.Common.attrib;
+>
+
+<!ATTLIST %reln.qname;
+ %MATHML.Common.attrib;
+>
+
+<!ATTLIST %lambda.qname;
+ %MATHML.Common.attrib;
+>
+
+<!-- Content elements: others -->
+<!-- HELM: added the content element type to cother-->
+<!ENTITY % cother
+ "%condition.qname; | %declare.qname; | %sep.qname; | %type.qname;" >
+
+<!ATTLIST %condition.qname;
+ %MATHML.Common.attrib;
+>
+
+<!ATTLIST %declare.qname;
+ %MATHML.Common.attrib;
+ %att-type;
+ %att-scope;
+ %att-nargs;
+ %att-occurrence;
+ %att-definition;
+ %att-encoding;
+>
+
+<!-- HELM: added attributes to the type element -->
+<!ATTLIST %type.qname; %MATHML.Common.attrib; >
+
+<!ELEMENT %sep.qname; EMPTY >
+<!ATTLIST %sep.qname;
+ %MATHML.xmlns.attrib; >
+
+<!-- Content elements: semantic mapping -->
+
+<!ENTITY % csemantics
+ "%semantics.qname; | %annotation.qname; |
+ %annotation-xml.qname;" >
+
+<!ATTLIST %semantics.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ATTLIST %annotation.qname;
+ %MATHML.Common.attrib;
+ %att-encoding;
+>
+
+<!ATTLIST %annotation-xml.qname;
+ %MATHML.Common.attrib;
+ %att-encoding;
+>
+
+<!-- Content elements: constructors -->
+
+<!ENTITY % cconstructor
+ "%interval.qname; | %list.qname; | %matrix.qname;
+ | %matrixrow.qname; | %set.qname; | %vector.qname;" >
+
+<!ATTLIST %interval.qname;
+ %MATHML.Common.attrib;
+ %att-closure;
+>
+
+<!ATTLIST %set.qname;
+ %MATHML.Common.attrib;
+ %att-type;
+>
+
+<!ATTLIST %list.qname;
+ %MATHML.Common.attrib;
+ %att-order;
+>
+
+<!ATTLIST %vector.qname;
+ %MATHML.Common.attrib;
+>
+
+<!ATTLIST %matrix.qname;
+ %MATHML.Common.attrib;
+>
+
+<!ATTLIST %matrixrow.qname;
+ %MATHML.Common.attrib;
+>
+
+<!-- Content elements: symbols -->
+
+<!ENTITY % c0ary
+ "%integers.qname; |
+ %reals.qname; |
+ %rationals.qname; |
+ %naturalnumbers.qname; |
+ %complexes.qname; |
+ %primes.qname; |
+ %exponentiale.qname; |
+ %imaginaryi.qname; |
+ %notanumber.qname; |
+ %true.qname; |
+ %false.qname; |
+ %emptyset.qname; |
+ %pi.qname; |
+ %eulergamma.qname; |
+ %infinity.qname;" >
+
+<!ELEMENT %integers.qname; EMPTY >
+<!ATTLIST %integers.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %reals.qname; EMPTY >
+<!ATTLIST %reals.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %rationals.qname; EMPTY >
+<!ATTLIST %rationals.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %naturalnumbers.qname; EMPTY >
+<!ATTLIST %naturalnumbers.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %complexes.qname; EMPTY >
+<!ATTLIST %complexes.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %primes.qname; EMPTY >
+<!ATTLIST %primes.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %exponentiale.qname; EMPTY >
+<!ATTLIST %exponentiale.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %imaginaryi.qname; EMPTY >
+<!ATTLIST %imaginaryi.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %notanumber.qname; EMPTY >
+<!ATTLIST %notanumber.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %true.qname; EMPTY >
+<!ATTLIST %true.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %false.qname; EMPTY >
+<!ATTLIST %false.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %emptyset.qname; EMPTY >
+<!ATTLIST %emptyset.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %pi.qname; EMPTY >
+<!ATTLIST %pi.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %eulergamma.qname; EMPTY >
+<!ATTLIST %eulergamma.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %infinity.qname; EMPTY >
+<!ATTLIST %infinity.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!-- Content elements: operators -->
+
+<!ENTITY % cfuncop1ary
+ "%inverse.qname; | %ident.qname;" >
+
+<!ELEMENT %inverse.qname; EMPTY >
+<!ATTLIST %inverse.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ENTITY % cfuncopnary
+ "%fn.qname; | %compose.qname;" >
+
+<!ATTLIST %fn.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %ident.qname; EMPTY >
+<!ATTLIST %ident.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %compose.qname; EMPTY >
+<!ATTLIST %compose.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ENTITY % carithop1ary
+ "%abs.qname; | %conjugate.qname; | %exp.qname; | %factorial.qname; |
+ %arg.qname; | %real.qname; | %imaginary.qname;" >
+
+<!ELEMENT %exp.qname; EMPTY >
+<!ATTLIST %exp.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %abs.qname; EMPTY >
+<!ATTLIST %abs.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %arg.qname; EMPTY >
+<!ATTLIST %arg.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %real.qname; EMPTY >
+<!ATTLIST %real.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %imaginary.qname; EMPTY >
+<!ATTLIST %imaginary.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %conjugate.qname; EMPTY >
+<!ATTLIST %conjugate.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %factorial.qname; EMPTY >
+<!ATTLIST %factorial.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ENTITY % carithop1or2ary
+ "%minus.qname;" >
+
+<!ELEMENT %minus.qname; EMPTY >
+<!ATTLIST %minus.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ENTITY % carithop2ary
+ "%quotient.qname; | %divide.qname; | %power.qname; | %rem.qname;" >
+
+<!ELEMENT %quotient.qname; EMPTY >
+<!ATTLIST %quotient.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %divide.qname; EMPTY >
+<!ATTLIST %divide.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %power.qname; EMPTY >
+<!ATTLIST %power.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %rem.qname; EMPTY >
+<!ATTLIST %rem.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ENTITY % carithopnary
+ "%plus.qname; | %times.qname; | %max.qname;
+ | %min.qname; | %gcd.qname; | %lcm.qname;" >
+
+<!ELEMENT %plus.qname; EMPTY >
+<!ATTLIST %plus.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %max.qname; EMPTY >
+<!ATTLIST %max.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %min.qname; EMPTY >
+<!ATTLIST %min.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %times.qname; EMPTY >
+<!ATTLIST %times.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %gcd.qname; EMPTY >
+<!ATTLIST %gcd.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %lcm.qname; EMPTY >
+<!ATTLIST %lcm.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ENTITY % carithoproot
+ "%root.qname;" >
+
+<!ELEMENT %root.qname; EMPTY >
+<!ATTLIST %root.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ENTITY % clogicopquant
+ "%exists.qname; | %forall.qname;" >
+
+<!ELEMENT %exists.qname; EMPTY >
+<!ATTLIST %exists.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %forall.qname; EMPTY >
+<!ATTLIST %forall.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ENTITY % clogicopnary
+ "%and.qname; | %or.qname; | %xor.qname;" >
+
+<!ELEMENT %and.qname; EMPTY >
+<!ATTLIST %and.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %or.qname; EMPTY >
+<!ATTLIST %or.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %xor.qname; EMPTY >
+<!ATTLIST %xor.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ENTITY % clogicop1ary
+ "%not.qname;" >
+
+<!ELEMENT %not.qname; EMPTY >
+<!ATTLIST %not.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ENTITY % clogicop2ary
+ "%implies.qname;" >
+
+<!ELEMENT %implies.qname; EMPTY >
+<!ATTLIST %implies.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ENTITY % ccalcop
+ "%log.qname; | %int.qname; | %diff.qname; | %partialdiff.qname; |
+ %divergence.qname; | %grad.qname; | %curl.qname; | %laplacian.qname;" >
+
+<!ELEMENT %divergence.qname; EMPTY >
+<!ATTLIST %divergence.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %grad.qname; EMPTY >
+<!ATTLIST %grad.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %curl.qname; EMPTY >
+<!ATTLIST %curl.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %laplacian.qname; EMPTY >
+<!ATTLIST %laplacian.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %log.qname; EMPTY >
+<!ATTLIST %log.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %int.qname; EMPTY >
+<!ATTLIST %int.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %diff.qname; EMPTY >
+<!ATTLIST %diff.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %partialdiff.qname; EMPTY >
+<!ATTLIST %partialdiff.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ENTITY % ccalcop1ary
+ "%ln.qname;" >
+
+<!ELEMENT %ln.qname; EMPTY >
+<!ATTLIST %ln.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ENTITY % csetop1ary
+ "%card.qname;" >
+
+<!ELEMENT %card.qname; EMPTY >
+<!ATTLIST %card.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ENTITY % csetop2ary
+ "%setdiff.qname;" >
+
+<!ELEMENT %setdiff.qname; EMPTY >
+<!ATTLIST %setdiff.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ENTITY % csetopnary
+ "%union.qname; | %intersect.qname;" >
+
+<!ELEMENT %union.qname; EMPTY >
+<!ATTLIST %union.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %intersect.qname; EMPTY >
+<!ATTLIST %intersect.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ENTITY % cseqop
+ "%sum.qname; | %product.qname; | %limit.qname;" >
+
+<!ELEMENT %sum.qname; EMPTY >
+<!ATTLIST %sum.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %product.qname; EMPTY >
+<!ATTLIST %product.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %limit.qname; EMPTY >
+<!ATTLIST %limit.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ENTITY % ctrigop
+ "%sin.qname; | %cos.qname; | %tan.qname;
+ | %sec.qname; | %csc.qname; | %cot.qname;
+ | %sinh.qname; | %cosh.qname; | %tanh.qname;
+ | %sech.qname; | %csch.qname; | %coth.qname;
+ | %arcsin.qname; | %arccos.qname; | %arctan.qname;
+ | %arccosh.qname; | %arccot.qname; | %arccoth.qname;
+ | %arccsc.qname; | %arccsch.qname; | %arcsec.qname;
+ | %arcsech.qname; | %arcsinh.qname; | %arctanh.qname;
+ " >
+
+<!ELEMENT %sin.qname; EMPTY >
+<!ATTLIST %sin.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %cos.qname; EMPTY >
+<!ATTLIST %cos.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %tan.qname; EMPTY >
+<!ATTLIST %tan.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %sec.qname; EMPTY >
+<!ATTLIST %sec.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %csc.qname; EMPTY >
+<!ATTLIST %csc.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %cot.qname; EMPTY >
+<!ATTLIST %cot.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %sinh.qname; EMPTY >
+<!ATTLIST %sinh.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %cosh.qname; EMPTY >
+<!ATTLIST %cosh.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %tanh.qname; EMPTY >
+<!ATTLIST %tanh.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %sech.qname; EMPTY >
+<!ATTLIST %sech.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %csch.qname; EMPTY >
+<!ATTLIST %csch.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %coth.qname; EMPTY >
+<!ATTLIST %coth.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %arcsin.qname; EMPTY >
+<!ATTLIST %arcsin.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %arccos.qname; EMPTY >
+<!ATTLIST %arccos.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %arctan.qname; EMPTY >
+<!ATTLIST %arctan.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %arccosh.qname; EMPTY >
+<!ATTLIST %arccosh.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+
+<!ELEMENT %arccot.qname; EMPTY >
+<!ATTLIST %arccot.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %arccoth.qname; EMPTY >
+<!ATTLIST %arccoth.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+
+<!ELEMENT %arccsc.qname; EMPTY >
+<!ATTLIST %arccsc.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %arccsch.qname; EMPTY >
+<!ATTLIST %arccsch.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %arcsec.qname; EMPTY >
+<!ATTLIST %arcsec.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %arcsech.qname; EMPTY >
+<!ATTLIST %arcsech.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %arcsinh.qname; EMPTY >
+<!ATTLIST %arcsinh.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %arctanh.qname; EMPTY >
+<!ATTLIST %arctanh.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+
+
+<!ENTITY % cstatopnary
+ "%mean.qname; | %sdev.qname; |
+ %variance.qname; | %median.qname; |
+ %mode.qname;" >
+
+<!ELEMENT %mean.qname; EMPTY >
+<!ATTLIST %mean.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %sdev.qname; EMPTY >
+<!ATTLIST %sdev.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %variance.qname; EMPTY >
+<!ATTLIST %variance.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %median.qname; EMPTY >
+<!ATTLIST %median.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %mode.qname; EMPTY >
+<!ATTLIST %mode.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ENTITY % cstatopmoment
+ "%moment.qname;" >
+
+<!ELEMENT %moment.qname; EMPTY >
+<!ATTLIST %moment.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ENTITY % clalgop1ary
+ "%determinant.qname; |
+ %transpose.qname;" >
+
+<!ELEMENT %determinant.qname; EMPTY >
+<!ATTLIST %determinant.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %transpose.qname; EMPTY >
+<!ATTLIST %transpose.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ENTITY % clalgop2ary
+ "%vectorproduct.qname;
+ | %scalarproduct.qname;
+ | %outerproduct.qname;" >
+
+<!ELEMENT %vectorproduct.qname; EMPTY >
+<!ATTLIST %vectorproduct.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %scalarproduct.qname; EMPTY >
+<!ATTLIST %scalarproduct.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %outerproduct.qname; EMPTY >
+<!ATTLIST %outerproduct.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ENTITY % clalgopnary
+ "%selector.qname;" >
+
+<!ELEMENT %selector.qname; EMPTY >
+<!ATTLIST %selector.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!-- Content elements: relations -->
+
+<!ENTITY % cgenrel2ary
+ "%neq.qname;" >
+
+<!ELEMENT %neq.qname; EMPTY >
+<!ATTLIST %neq.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ENTITY % cgenrelnary
+ "%eq.qname; | %leq.qname; | %lt.qname; | %geq.qname;
+ | %gt.qname;| %equivalent.qname; | %approx.qname;" >
+
+<!ELEMENT %eq.qname; EMPTY >
+<!ATTLIST %eq.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %equivalent.qname; EMPTY >
+<!ATTLIST %equivalent.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %approx.qname; EMPTY >
+<!ATTLIST %approx.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %gt.qname; EMPTY >
+<!ATTLIST %gt.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %lt.qname; EMPTY >
+<!ATTLIST %lt.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %geq.qname; EMPTY >
+<!ATTLIST %geq.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %leq.qname; EMPTY >
+<!ATTLIST %leq.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ENTITY % csetrel2ary
+ "%in.qname; | %notin.qname; | %notsubset.qname; | %notprsubset.qname;" >
+
+<!ELEMENT %in.qname; EMPTY >
+<!ATTLIST %in.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %notin.qname; EMPTY >
+<!ATTLIST %notin.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %notsubset.qname; EMPTY >
+<!ATTLIST %notsubset.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %notprsubset.qname; EMPTY >
+<!ATTLIST %notprsubset.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ENTITY % csetrelnary
+ "%subset.qname; | %prsubset.qname;" >
+
+<!ELEMENT %subset.qname; EMPTY >
+<!ATTLIST %subset.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ELEMENT %prsubset.qname; EMPTY >
+<!ATTLIST %prsubset.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+>
+
+<!ENTITY % cseqrel2ary
+ "%tendsto.qname;" >
+
+<!ELEMENT %tendsto.qname; EMPTY >
+<!ATTLIST %tendsto.qname;
+ %MATHML.Common.attrib;
+ %att-definition;
+ %att-encoding;
+ %att-type;
+>
+
+<!-- Content elements: quantifiers -->
+
+<!ENTITY % cquantifier
+ "%lowlimit.qname; | %uplimit.qname; | %bvar.qname;
+ | %degree.qname; | %logbase.qname;" >
+
+<!ATTLIST %lowlimit.qname;
+ %MATHML.Common.attrib;
+>
+
+<!ATTLIST %uplimit.qname;
+ %MATHML.Common.attrib;
+>
+
+<!ATTLIST %bvar.qname;
+ %MATHML.Common.attrib;
+>
+
+<!ATTLIST %degree.qname;
+ %MATHML.Common.attrib;
+>
+
+<!ATTLIST %logbase.qname;
+ %MATHML.Common.attrib;
+>
+
+<!-- Operator groups -->
+
+<!ENTITY % cop1ary
+ "%cfuncop1ary; | %carithop1ary; | %clogicop1ary; |
+ %ccalcop1ary; | %ctrigop; | %clalgop1ary; |
+ %csetop1ary;" >
+
+<!ENTITY % cop2ary
+ "%carithop2ary; | %clogicop2ary;| %clalgop2ary; | %csetop2ary;" >
+
+<!ENTITY % copnary
+ "%cfuncopnary; | %carithopnary; | %clogicopnary; |
+ %csetopnary; | %cstatopnary; | %clalgopnary;" >
+
+<!ENTITY % copmisc
+ "%carithoproot; | %carithop1or2ary; | %ccalcop; |
+ %cseqop; | %cstatopmoment; | %clogicopquant;" >
+
+<!-- Relation groups -->
+
+<!ENTITY % crel2ary
+ "%cgenrel2ary; | %csetrel2ary; | %cseqrel2ary;" >
+
+<!ENTITY % crelnary
+ "%cgenrelnary; | %csetrelnary;" >
+
+<!-- Content constructs: all -->
+
+<!ENTITY % Content
+ "%ctoken; | %cspecial; | %cother; | %csemantics; | %c0ary;
+ | %cconstructor; | %cquantifier; | %cop1ary; | %cop2ary;
+ | %copnary; |%copmisc; | %crel2ary; | %crelnary;" >
+
+<!-- Content constructs for substitution in presentation structures -->
+
+<!ENTITY % ContInPres
+ "%ci.qname; |%csymbol.qname;| %cn.qname;|
+ %apply.qname; | %fn.qname; |
+ %lambda.qname; | %reln.qname; |
+ %interval.qname; | %list.qname; |
+ %matrix.qname; | %matrixrow.qname; |
+ %set.qname; | %vector.qname; |
+ %semantics.qname; |%declare.qname;" >
+
+<!-- ............................................................. -->
+<!-- Recursive definition for content of expressions. Include
+ presentation constructs at lowest level so presentation
+ layout schemata hold presentation or content elements.
+ Include content constructs at lowest level so content
+ elements hold PCDATA or presentation elements at leaf
+ level (for permitted substitutable elements in context)
+-->
+
+<!ENTITY % ContentExpression
+ "(%Content; | %PresInCont;)*" >
+<!ENTITY % PresExpression
+ "(%Presentation; | %ContInPres;)*" >
+<!ENTITY % MathExpression
+ "(%PresInCont; | %ContInPres;)*" >
+
+<!-- PCDATA or MathML character elements -->
+<!ENTITY % MathMLCharacters
+ "#PCDATA | %mchar.qname; | %mglyph.qname; " >
+
+<!-- Content elements: tokens -->
+<!-- (may contain embedded presentation constructs) -->
+
+<!ELEMENT %ci.qname; (%MathMLCharacters; | %PresInCont;)* >
+<!ELEMENT %csymbol.qname; (%MathMLCharacters; | %PresInCont;)* >
+<!ELEMENT %cn.qname; (%MathMLCharacters; | %sep.qname; | %PresInCont;)* >
+
+<!-- Content elements: special -->
+
+<!ELEMENT %apply.qname; (%ContentExpression;) >
+<!ELEMENT %reln.qname; (%ContentExpression;) >
+<!ELEMENT %lambda.qname; (%ContentExpression;) >
+
+<!-- Content elements: other -->
+
+<!ELEMENT %condition.qname; (%ContentExpression;) >
+<!ELEMENT %declare.qname; (%ContentExpression;) >
+<!-- HELM: added the content element type -->
+<!ELEMENT %type.qname; (%ContentExpression;) >
+
+<!-- Content elements: semantics -->
+
+<!ELEMENT %semantics.qname; (%ContentExpression;) >
+<!ENTITY % Annotation.content "( #PCDATA )" >
+<!ELEMENT %annotation.qname; %Annotation.content; >
+
+<!ENTITY % Annotation-xml.content "ANY" >
+<!ELEMENT %annotation-xml.qname; %Annotation-xml.content; >
+
+<!-- Content elements: constructors -->
+
+<!ELEMENT %interval.qname; (%ContentExpression;) >
+<!ELEMENT %set.qname; (%ContentExpression;) >
+<!ELEMENT %list.qname; (%ContentExpression;) >
+<!ELEMENT %vector.qname; (%ContentExpression;) >
+<!ELEMENT %matrix.qname; (%ContentExpression;) >
+<!ELEMENT %matrixrow.qname; (%ContentExpression;) >
+
+<!-- Content elements: operator (user-defined) -->
+
+<!ELEMENT %fn.qname; (%ContentExpression;) >
+
+<!-- Content elements: quantifiers -->
+
+<!ELEMENT %lowlimit.qname; (%ContentExpression;) >
+<!ELEMENT %uplimit.qname; (%ContentExpression;) >
+<!ELEMENT %bvar.qname; (%ContentExpression;) >
+<!ELEMENT %degree.qname; (%ContentExpression;) >
+<!ELEMENT %logbase.qname; (%ContentExpression;) >
+
+<!-- ............................................................. -->
+<!-- Presentation layout schemata contain tokens,
+ layout and content schemata.
+-->
+
+<!ELEMENT %mstyle.qname; (%PresExpression;) >
+<!ELEMENT %merror.qname; (%PresExpression;) >
+<!ELEMENT %mphantom.qname; (%PresExpression;) >
+<!ELEMENT %mrow.qname; (%PresExpression;) >
+<!ELEMENT %mfrac.qname; (%PresExpression;) >
+<!ELEMENT %msqrt.qname; (%PresExpression;) >
+<!ELEMENT %menclose.qname; (%PresExpression;) >
+<!ELEMENT %mroot.qname; (%PresExpression;) >
+<!ELEMENT %msub.qname; (%PresExpression;) >
+<!ELEMENT %msup.qname; (%PresExpression;) >
+<!ELEMENT %msubsup.qname; (%PresExpression;) >
+<!ELEMENT %mmultiscripts.qname; (%PresExpression;) >
+<!ELEMENT %munder.qname; (%PresExpression;) >
+<!ELEMENT %mover.qname; (%PresExpression;) >
+<!ELEMENT %munderover.qname; (%PresExpression;) >
+<!ELEMENT %mtable.qname; (%PresExpression;) >
+<!ELEMENT %mtr.qname; (%PresExpression;) >
+<!ELEMENT %mlabeledtr.qname; (%PresExpression;) >
+<!ELEMENT %mtd.qname; (%PresExpression;) >
+<!ELEMENT %maction.qname; (%PresExpression;) >
+<!ELEMENT %mfenced.qname; (%PresExpression;) >
+<!ELEMENT %mpadded.qname; (%PresExpression;) >
+
+<!-- Presentation elements contain PCDATA or malignmark constructs. -->
+
+<!ELEMENT %mi.qname; (%MathMLCharacters; |
+ %malignmark.qname;)* >
+<!ELEMENT %mn.qname; (%MathMLCharacters; |
+ %malignmark.qname;)* >
+<!ELEMENT %mo.qname; (%MathMLCharacters; |
+ %malignmark.qname;)* >
+<!ELEMENT %mtext.qname; (%MathMLCharacters; |
+ %malignmark.qname;)* >
+<!ELEMENT %ms.qname; (%MathMLCharacters; |
+ %malignmark.qname;)* >
+
+<!-- Browser interface definition ............................... -->
+
+<!-- Attributes for top-level element "math" -->
+
+<!ENTITY % att-macros
+ "macros CDATA #IMPLIED" >
+<!ENTITY % att-mode
+ "mode CDATA #IMPLIED" >
+<!ENTITY % att-display
+ "display CDATA #IMPLIED" >
+
+<!ENTITY % att-topinfo
+ "%MATHML.Common.attrib;
+ %att-macros;
+ %att-mode;
+ %att-display;" >
+
+<!-- Attributes for browser interface element -->
+
+<!ENTITY % att-baseline
+ "baseline CDATA #IMPLIED" >
+<!ENTITY % att-overflow
+ "overflow ( scroll | elide | truncate | scale ) 'scroll'" >
+<!ENTITY % att-altimg
+ "altimg CDATA #IMPLIED" >
+<!ENTITY % att-alttext
+ "alttext CDATA #IMPLIED" >
+
+<!ENTITY % att-browif
+ "%att-type;
+ %att-name;
+ %att-height;
+ %att-width;
+ %att-baseline;
+ %att-overflow;
+ %att-altimg;
+ %att-alttext;" >
+
+<!-- ............................................................. -->
+<!-- The top-level element "math" contains MathML encoded
+ mathematics. The "math" element has the browser info
+ attributes iff it is also the browser interface element.
+-->
+
+<!ELEMENT %math.qname; (%MathExpression;) >
+
+<!ATTLIST %math.qname;
+ %att-topinfo;
+ %att-browif; >
+
+<!-- MathML Character Entities .............................................. -->
+<!ENTITY % mathml-charent.module "INCLUDE" >
+<![%mathml-charent.module;[
+<!-- Entity sets from ISO Technical Report 9573-13 ..... -->
+
+<!ENTITY % ent-isoamsa
+ PUBLIC "-//W3C//ENTITIES Added Math Symbols: Arrow Relations for MathML 2.0//EN"
+ "isoamsa.ent" >
+%ent-isoamsa;
+
+<!ENTITY % ent-isoamsb
+ PUBLIC "-//W3C//ENTITIES Added Math Symbols: Binary Operators for MathML 2.0//EN"
+ "isoamsb.ent" >
+%ent-isoamsb;
+
+<!ENTITY % ent-isoamsc
+ PUBLIC "-//W3C//ENTITIES Added Math Symbols: Delimiters for MathML 2.0//EN"
+ "isoamsc.ent" >
+%ent-isoamsc;
+
+<!ENTITY % ent-isoamsn
+ PUBLIC "-//W3C//ENTITIES Added Math Symbols: Negated Relations for MathML 2.0//EN"
+ "isoamsn.ent" >
+%ent-isoamsn;
+
+<!ENTITY % ent-isoamso
+ PUBLIC "-//W3C//ENTITIES Added Math Symbols: Ordinary for MathML 2.0//EN"
+ "isoamso.ent" >
+%ent-isoamso;
+
+<!ENTITY % ent-isoamsr
+ PUBLIC "-//W3C//ENTITIES Added Math Symbols: Relations for MathML 2.0//EN"
+ "isoamsr.ent" >
+%ent-isoamsr;
+
+<!ENTITY % ent-isogrk3
+ PUBLIC "-//W3C//ENTITIES Greek Symbols for MathML 2.0//EN"
+ "isogrk3.ent" >
+%ent-isogrk3;
+
+<!ENTITY % ent-isomfrk
+ PUBLIC "-//W3C//ENTITIES Math Alphabets: Fraktur for MathML 2.0//EN"
+ "isomfrk.ent" >
+%ent-isomfrk;
+
+<!ENTITY % ent-isomopf
+ PUBLIC "-//W3C//ENTITIES Math Alphabets: Open Face for MathML 2.0//EN"
+ "isomopf.ent" >
+%ent-isomopf;
+
+<!ENTITY % ent-isomscr
+ PUBLIC "-//W3C//ENTITIES Math Alphabets: Script for MathML 2.0//EN"
+ "isomscr.ent" >
+%ent-isomscr;
+
+<!ENTITY % ent-isotech
+ PUBLIC "-//W3C//ENTITIES General Technical for MathML 2.0//EN"
+ "isotech.ent" >
+%ent-isotech;
+
+<!-- Entity sets from informative annex to ISO 8879:1986 (SGML) ....... -->
+
+<!ENTITY % ent-isobox
+ PUBLIC "-//W3C//ENTITIES Box and Line Drawing for MathML 2.0//EN"
+ "isobox.ent" >
+%ent-isobox;
+
+<!ENTITY % ent-isocyr1
+ PUBLIC "-//W3C//ENTITIES Russian Cyrillic for MathML 2.0//EN"
+ "isocyr1.ent" >
+%ent-isocyr1;
+
+<!ENTITY % ent-isocyr2
+ PUBLIC "-//W3C//ENTITIES Non-Russian Cyrillic for MathML 2.0//EN"
+ "isocyr2.ent" >
+%ent-isocyr2;
+
+<!ENTITY % ent-isodia
+ PUBLIC "-//W3C//ENTITIES Diacritical Marks for MathML 2.0//EN"
+ "isodia.ent" >
+%ent-isodia;
+
+<!ENTITY % ent-isolat1
+ PUBLIC "-//W3C//ENTITIES Added Latin 1 for MathML 2.0//EN"
+ "isolat1.ent" >
+%ent-isolat1;
+
+<!ENTITY % ent-isolat2
+ PUBLIC "-//W3C//ENTITIES Added Latin 2 for MathML 2.0//EN"
+ "isolat2.ent" >
+%ent-isolat2;
+
+<!ENTITY % ent-isonum
+ PUBLIC "-//W3C//ENTITIES Numeric and Special Graphic for MathML 2.0//EN"
+ "isonum.ent" >
+%ent-isonum;
+
+<!ENTITY % ent-isopub
+ PUBLIC "-//W3C//ENTITIES Publishing for MathML 2.0//EN"
+ "isopub.ent" >
+%ent-isopub;
+
+<!-- New characters defined by MathML ............................ -->
+
+<!ENTITY % ent-mmlextra
+ PUBLIC "-//W3C//ENTITIES Extra for MathML 2.0//EN"
+ "mmlextra.ent" >
+%ent-mmlextra;
+
+<!-- MathML aliases for characters defined above ................. -->
+
+<!ENTITY % ent-mmlalias
+ PUBLIC "-//W3C//ENTITIES Aiases for MathML 2.0//EN"
+ "mmlalias.ent" >
+%ent-mmlalias;
+
+<!-- end of MathML Character Entity section -->]]>
+
+<!-- Revision History:
+
+ Initial draft (syntax = XML) 1997-05-09
+ Stephen Buswell
+ Revised 1997-05-14
+ Robert Miner
+ Revised 1997-06-29 and 1997-07-02
+ Stephen Buswell
+ Revised 1997-12-15
+ Stephen Buswell
+ Revised 1998-02-08
+ Stephen Buswell
+ Revised 1998-04-04
+ Stephen Buswell
+ Entities and small revisions 1999-02-21
+ David Carlisle
+ Added attribute definitionURL to ci and cn 1999-10-11
+ Nico Poppelier
+ Additions for MathML 2 1999-12-16
+ David Carlisle
+ Namespace support 2000-01-14
+ David Carlisle
+ XHTML Compatibility 2000-02-23
+ Murray Altheim
+ New content elements 2000-03-26
+ David Carlisle
+
+-->
+
+<!-- end of MathML 2.0 DTD ................................................ -->
+<!-- ....................................................................... -->
+
--- /dev/null
+<?xml encoding="ISO-8859-1"?>
+
+<!--*****************************************************************-->
+<!-- DTD FOR THEORY OBJECTS AT LEVEL OF CIC XML FILES: -->
+<!-- First draft: May 10 2000, Claudio Sacerdoti Coen, Irene Schena -->
+<!--*****************************************************************-->
+
+<!-- manca il semplice enunciato -->
+<!-- mancano i link ad altre teorie? (corrispondenti a Require?) -->
+<!-- una teoria "vuota" e' una teoria? -->
+<!ENTITY % mathstructure '(THEOREM|LEMMA|COROLLARY|AXIOM|FACT|DEFINITION|
+ VARIABLE|SECTION)*'>
+
+<!ELEMENT Theory (%mathstructure;)>
+<!ATTLIST Theory
+ uri CDATA #REQUIRED>
+
+<!ELEMENT THEOREM EMPTY>
+<!ATTLIST THEOREM
+ id IDREF #REQUIRED
+ uri CDATA #REQUIRED>
+
+<!ELEMENT LEMMA EMPTY>
+<!ATTLIST LEMMA
+ id IDREF #REQUIRED
+ uri CDATA #REQUIRED
+ target IDREF #REQUIRED>
+
+<!ELEMENT COROLLARY EMPTY>
+<!ATTLIST COROLLARY
+ id IDREF #REQUIRED
+ uri CDATA #REQUIRED
+ target IDREF #REQUIRED>
+
+<!ELEMENT AXIOM EMPTY>
+<!ATTLIST AXIOM
+ id IDREF #REQUIRED
+ uri CDATA #REQUIRED>
+
+<!ELEMENT FACT EMPTY>
+<!ATTLIST FACT
+ id IDREF #REQUIRED
+ uri CDATA #REQUIRED>
+
+<!ELEMENT DEFINITION EMPTY>
+<!ATTLIST DEFINITION
+ uri CDATA #REQUIRED>
+
+<!ELEMENT VARIABLE EMPTY>
+<!ATTLIST VARIABLE
+ uri CDATA #REQUIRED>
+
+<!ELEMENT SECTION (%mathstructure;)>
+<!ATTLIST SECTION
+ uri CDATA #REQUIRED>
+
+<!--
+ VINCOLI DI VALIDITA' NON ESPRIMIBILI NEL DTD:
+ Siano V una variabile e T,T' due fatti/definizioni/teoremi/lemmi/corollari
+
+ - per visualizzare T dipendente da T' dove T' e T sono definiti nella stessa
+ (da definirsi) teoria/sezione, debbo visualizzare anche T'?
+ - per visualizzare T dipendente da T' dove anche T' e' visualizzato, debbo
+ visualizzare T necessariamente dopo T'?
+ + consistenza fra la dipendenza dei lemmi e dei corollari dal loro target
+ e quella effettiva data dal livello degli oggetti
+ + tutte le URI debbono essere relative e discendenti (= non contenti "..")
+ +? ogni lemma deve precedere (strettamente?) il suo target
+ +? ogni corollario deve seguire (strettamente?) il suo target
+ + se T/V dipende da V, allora V deve essere visualizzata
+ + se T/V dipende da V, allora V deve essere visualizzata prima di T
+ PROBLEMA: NON ABBIAMO INFORMAZIONI SULLA DIPENDENZA DI V DA V!!!
+-->
--- /dev/null
+
+<!--
+ File mmlalias.ent produced by the XSL script mmldtd.xsl
+ from input data in unicode.xml.
+
+ Please report any errors to
+ David Carlisle <davidc@nag.co.uk>.
+
+ The numeric character values assigned to each entity
+ (should) match either official Unicode assignments
+ or assignments provisionally allocated by the
+ Unicode Consortium based on the characters in the `STIX'
+ propsal for mathematics. Note that these assignments
+ have not been ratified by the corresponding ISO
+ committee and thus should be considered liable to
+ change.
+
+-->
+
+<!ENTITY angle "∠" ><!--alias ISOAMSO ang -->
+<!ENTITY approx "≈" ><!--alias ISOTECH ap -->
+<!ENTITY approxeq "≊" ><!--alias ISOAMSR ape -->
+<!ENTITY backcong "≌" ><!--alias ISOAMSR bcong -->
+<!ENTITY backepsilon "ℼ" ><!--alias ISOAMSR bepsi -->
+<!ENTITY backprime "‵" ><!--alias ISOAMSO bprime -->
+<!ENTITY backsim "∽" ><!--alias ISOAMSR bsim -->
+<!ENTITY backsimeq "⋍" ><!--alias ISOAMSR bsime -->
+<!ENTITY Backslash "∖" ><!--alias ISOAMSB setmn -->
+<!ENTITY barwedge "⊼" ><!--alias ISOAMSB barwed -->
+<!ENTITY because "∵" ><!--alias ISOTECH becaus -->
+<!ENTITY Because "∵" ><!--alias ISOTECH becaus -->
+<!ENTITY Bernoullis "ℬ" ><!--alias ISOTECH bernou -->
+<!ENTITY between "≬" ><!--alias ISOAMSR twixt -->
+<!ENTITY bigcap "⋂" ><!--alias ISOAMSB xcap -->
+<!ENTITY bigcirc "◯" ><!--alias ISOAMSB xcirc -->
+<!ENTITY bigcup "⋃" ><!--alias ISOAMSB xcup -->
+<!ENTITY bigodot "⊙" ><!--alias ISOAMSB xodot -->
+<!ENTITY bigoplus "⊕" ><!--alias ISOAMSB xoplus -->
+<!ENTITY bigotimes "⊗" ><!--alias ISOAMSB xotime -->
+<!ENTITY bigsqcup "⊔" ><!--alias ISOAMSB xsqcup -->
+<!ENTITY bigstar "★" ><!--ISOPUB starf -->
+<!ENTITY bigtriangledown "▽" ><!--alias ISOAMSB xdtri -->
+<!ENTITY bigtriangleup "△" ><!--alias ISOAMSB xutri -->
+<!ENTITY biguplus "⊎" ><!--alias ISOAMSB xuplus -->
+<!ENTITY bigvee "⋁" ><!--alias ISOAMSB xvee -->
+<!ENTITY bigwedge "⋀" ><!--alias ISOAMSB xwedge -->
+<!ENTITY bkarow "⤍" ><!--alias ISOAMSA rbarr -->
+<!ENTITY blacklozenge "⧫" ><!--alias ISOPUB lozf -->
+<!ENTITY blacksquare "▪" ><!--ISOTECH squarf -->
+<!ENTITY blacktriangle "▴" ><!--alias ISOPUB utrif -->
+<!ENTITY blacktriangledown "▾" ><!--alias ISOPUB dtrif -->
+<!ENTITY blacktriangleleft "◂" ><!--alias ISOPUB ltrif -->
+<!ENTITY blacktriangleright "▸" ><!--alias ISOPUB rtrif -->
+<!ENTITY bot "⊥" ><!--alias ISOTECH bottom -->
+<!ENTITY boxminus "⊟" ><!--alias ISOAMSB minusb -->
+<!ENTITY boxplus "⊞" ><!--alias ISOAMSB plusb -->
+<!ENTITY boxtimes "⊠" ><!--alias ISOAMSB timesb -->
+<!ENTITY Breve "˘" ><!--alias ISODIA breve -->
+<!ENTITY bullet "•" ><!--alias ISOPUB bull -->
+<!ENTITY bumpeq "≏" ><!--alias ISOAMSR bumpe -->
+<!ENTITY Bumpeq "≎" ><!--alias ISOAMSR bump -->
+<!ENTITY Cedilla "¸" ><!--alias ISODIA cedil -->
+<!ENTITY centerdot "·" ><!--alias ISONUM middot -->
+<!ENTITY CenterDot "·" ><!--alias ISONUM middot -->
+<!ENTITY checkmark "✓" ><!--alias ISOPUB check -->
+<!ENTITY circeq "≗" ><!--alias ISOAMSR cire -->
+<!ENTITY circlearrowleft "↺" ><!--alias ISOAMSA olarr -->
+<!ENTITY circlearrowright "↻" ><!--alias ISOAMSA orarr -->
+<!ENTITY circledast "⊛" ><!--alias ISOAMSB oast -->
+<!ENTITY circledcirc "⊚" ><!--alias ISOAMSB ocir -->
+<!ENTITY circleddash "⊝" ><!--alias ISOAMSB odash -->
+<!ENTITY CircleDot "⊙" ><!--alias ISOAMSB odot -->
+<!ENTITY circledR "®" ><!--alias ISONUM reg -->
+<!ENTITY circledS "Ⓢ" ><!--alias ISOAMSO oS -->
+<!ENTITY CircleMinus "⊖" ><!--alias ISOAMSB ominus -->
+<!ENTITY CirclePlus "⊕" ><!--alias ISOAMSB oplus -->
+<!ENTITY CircleTimes "⊗" ><!--alias ISOAMSB otimes -->
+<!ENTITY ClockwiseContourIntegral "∲" ><!--alias ISOTECH cwconint -->
+<!ENTITY CloseCurlyDoubleQuote "”" ><!--alias ISONUM rdquo -->
+<!ENTITY CloseCurlyQuote "’" ><!--alias ISONUM rsquo -->
+<!ENTITY clubsuit "♣" ><!--ISOPUB clubs -->
+<!ENTITY coloneq "≔" ><!--alias ISOAMSR colone -->
+<!ENTITY complement "∁" ><!--alias ISOAMSO comp -->
+<!ENTITY Congruent "≡" ><!--alias ISOTECH equiv -->
+<!ENTITY ContourIntegral "∮" ><!--alias ISOTECH conint -->
+<!ENTITY Coproduct "∐" ><!--alias ISOAMSB coprod -->
+<!ENTITY CounterClockwiseContourIntegral "∳" ><!--alias ISOTECH awconint -->
+<!ENTITY CupCap "≍" ><!--alias ISOAMSR asymp -->
+<!ENTITY curlyeqprec "⋞" ><!--alias ISOAMSR cuepr -->
+<!ENTITY curlyeqsucc "⋟" ><!--alias ISOAMSR cuesc -->
+<!ENTITY curlyvee "⋎" ><!--alias ISOAMSB cuvee -->
+<!ENTITY curlywedge "⋏" ><!--alias ISOAMSB cuwed -->
+<!ENTITY curvearrowleft "↶" ><!--alias ISOAMSA cularr -->
+<!ENTITY curvearrowright "↷" ><!--alias ISOAMSA curarr -->
+<!ENTITY dbkarow "⤏" ><!--alias ISOAMSA rBarr -->
+<!ENTITY ddagger "‡" ><!--alias ISOPUB Dagger -->
+<!ENTITY ddotseq "⩷" ><!--alias ISOAMSR eDDot -->
+<!ENTITY Del "∇" ><!--alias ISOTECH nabla -->
+<!ENTITY DiacriticalAcute "´" ><!--alias ISODIA acute -->
+<!ENTITY DiacriticalDot "˙" ><!--alias ISODIA dot -->
+<!ENTITY DiacriticalDoubleAcute "˝" ><!--alias ISODIA dblac -->
+<!ENTITY DiacriticalGrave "`" ><!--alias ISODIA grave -->
+<!ENTITY DiacriticalTilde "˜" ><!--alias ISODIA tilde -->
+<!ENTITY diamond "⋄" ><!--alias ISOAMSB diam -->
+<!ENTITY Diamond "⋄" ><!--alias ISOAMSB diam -->
+<!ENTITY diamondsuit "♦" ><!--ISOPUB diams -->
+<!ENTITY digamma "Ϝ" ><!--alias ISOGRK3 gammad -->
+<!ENTITY div "÷" ><!--alias ISONUM divide -->
+<!ENTITY divideontimes "⋇" ><!--alias ISOAMSB divonx -->
+<!ENTITY doteq "≐" ><!--alias ISOAMSR esdot -->
+<!ENTITY doteqdot "≑" ><!--alias ISOAMSR eDot -->
+<!ENTITY DotEqual "≐" ><!--alias ISOAMSR esdot -->
+<!ENTITY dotminus "∸" ><!--alias ISOAMSB minusd -->
+<!ENTITY dotplus "∔" ><!--alias ISOAMSB plusdo -->
+<!ENTITY dotsquare "⊡" ><!--alias ISOAMSB sdotb -->
+<!ENTITY doublebarwedge "⌆" ><!--alias ISOAMSB Barwed -->
+<!ENTITY DoubleContourIntegral "∯" ><!--alias ISOTECH Conint -->
+<!ENTITY DoubleDot "¨" ><!--alias ISODIA die -->
+<!ENTITY DoubleDownArrow "⇓" ><!--alias ISOAMSA dArr -->
+<!ENTITY DoubleLeftArrow "⇐" ><!--alias ISOTECH lArr -->
+<!ENTITY DoubleLeftRightArrow "⇔" ><!--alias ISOAMSA hArr -->
+<!ENTITY DoubleLeftTee "⫤" ><!--alias for ⫤ -->
+<!ENTITY DoubleLongLeftArrow "⇐" ><!--alias ISOAMSA xlArr -->
+<!ENTITY DoubleLongLeftRightArrow "⇔" ><!--alias ISOAMSA xhArr -->
+<!ENTITY DoubleLongRightArrow "⇒" ><!--alias ISOAMSA xrArr -->
+<!ENTITY DoubleRightArrow "⇒" ><!--alias ISOTECH rArr -->
+<!ENTITY DoubleRightTee "⊨" ><!--alias ISOAMSR vDash -->
+<!ENTITY DoubleUpArrow "⇑" ><!--alias ISOAMSA uArr -->
+<!ENTITY DoubleUpDownArrow "⇕" ><!--alias ISOAMSA vArr -->
+<!ENTITY DoubleVerticalBar "∥" ><!--alias ISOTECH par -->
+<!ENTITY downarrow "↓" ><!--alias ISONUM darr -->
+<!ENTITY Downarrow "⇓" ><!--alias ISOAMSA dArr -->
+<!ENTITY DownArrow "↓" ><!--alias ISONUM darr -->
+<!ENTITY DownArrowUpArrow "⇵" ><!--alias ISOAMSA duarr -->
+<!ENTITY downdownarrows "⇊" ><!--alias ISOAMSA ddarr -->
+<!ENTITY downharpoonleft "⇃" ><!--alias ISOAMSA dharl -->
+<!ENTITY downharpoonright "⇂" ><!--alias ISOAMSA dharr -->
+<!ENTITY DownLeftVector "↽" ><!--alias ISOAMSA lhard -->
+<!ENTITY DownRightVector "⇁" ><!--alias ISOAMSA rhard -->
+<!ENTITY DownTee "⊤" ><!--alias ISOTECH top -->
+<!ENTITY drbkarow "⤐" ><!--alias ISOAMSA RBarr -->
+<!ENTITY Element "∈" ><!--alias ISOTECH isinv -->
+<!ENTITY emptyset "∅⁣" ><!--alias ISOAMSO empty -->
+<!ENTITY eqcirc "≖" ><!--alias ISOAMSR ecir -->
+<!ENTITY eqcolon "≕" ><!--alias ISOAMSR ecolon -->
+<!ENTITY eqsim "≂" ><!--alias ISOAMSR esim -->
+<!ENTITY eqslantgtr "⋝" ><!--alias ISOAMSR egs -->
+<!ENTITY eqslantless "⋜" ><!--alias ISOAMSR els -->
+<!ENTITY EqualTilde "≂" ><!--alias ISOAMSR esim -->
+<!ENTITY Equilibrium "⇌" ><!--alias ISOAMSA rlhar -->
+<!ENTITY Exists "∃" ><!--alias ISOTECH exist -->
+<!ENTITY fallingdotseq "≒" ><!--alias ISOAMSR efDot -->
+<!ENTITY ForAll "∀" ><!--alias ISOTECH forall -->
+<!ENTITY geq "≥" ><!--alias ISOTECH ge -->
+<!ENTITY geqq "≧" ><!--alias ISOAMSR gE -->
+<!ENTITY geqslant "⩾" ><!--alias ISOAMSR ges -->
+<!ENTITY gg "≫" ><!--alias ISOAMSR Gt -->
+<!ENTITY ggg "⋙" ><!--alias ISOAMSR Gg -->
+<!ENTITY gnapprox "⪊" ><!--alias ISOAMSN gnap -->
+<!ENTITY gneq "≩" ><!--alias ISOAMSN gne -->
+<!ENTITY gneqq "≩" ><!--alias ISOAMSN gnE -->
+<!ENTITY GreaterEqual "≥" ><!--alias ISOTECH ge -->
+<!ENTITY GreaterEqualLess "⋛" ><!--alias ISOAMSR gel -->
+<!ENTITY GreaterFullEqual "≧" ><!--alias ISOAMSR gE -->
+<!ENTITY GreaterLess "≷" ><!--alias ISOAMSR gl -->
+<!ENTITY GreaterSlantEqual "⩾" ><!--alias ISOAMSR ges -->
+<!ENTITY GreaterTilde "≳" ><!--alias ISOAMSR gsim -->
+<!ENTITY gtrapprox "≳" ><!--alias ISOAMSR gap -->
+<!ENTITY gtrdot "⋗" ><!--alias ISOAMSR gtdot -->
+<!ENTITY gtreqless "⋛" ><!--alias ISOAMSR gel -->
+<!ENTITY gtreqqless "⋛" ><!--alias ISOAMSR gEl -->
+<!ENTITY gtrless "≷" ><!--alias ISOAMSR gl -->
+<!ENTITY gtrsim "≳" ><!--alias ISOAMSR gsim -->
+<!ENTITY gvertneqq "≩̸" ><!--alias ISOAMSN gvnE -->
+<!ENTITY Hacek "ˇ" ><!--alias ISODIA caron -->
+<!ENTITY Hat "̂" ><!--circumflex accent (circ in ISODIA) -->
+<!ENTITY hbar "ℏ" ><!--alias ISOAMSO plank -->
+<!ENTITY heartsuit "♡" ><!--ISOPUB hearts -->
+<!ENTITY hksearow "⤥" ><!--alias ISOAMSA searhk -->
+<!ENTITY hkswarow "⤦" ><!--alias ISOAMSA swarhk -->
+<!ENTITY hookleftarrow "↩" ><!--alias ISOAMSA larrhk -->
+<!ENTITY hookrightarrow "↪" ><!--alias ISOAMSA rarrhk -->
+<!ENTITY hslash "ℏ" ><!--alias ISOAMSO plankv -->
+<!ENTITY HumpDownHump "≎" ><!--alias ISOAMSR bump -->
+<!ENTITY HumpEqual "≏" ><!--alias ISOAMSR bumpe -->
+<!ENTITY iiiint "⨌" ><!--alias ISOTECH qint -->
+<!ENTITY iiint "∭" ><!--alias ISOTECH tint -->
+<!ENTITY Im "ℑ" ><!--alias ISOAMSO image -->
+<!ENTITY imagpart "ℑ" ><!--alias ISOAMSO image -->
+<!ENTITY Implies "⇒" ><!--alias ISOTECH rArr -->
+<!ENTITY in "∈" ><!--ISOTECH isin -->
+<!ENTITY Integral "∫" ><!--alias ISOTECH int -->
+<!ENTITY intercal "⊺" ><!--alias ISOAMSB intcal -->
+<!ENTITY Intersection "⋂" ><!--alias ISOAMSB xcap -->
+<!ENTITY intprod "⨼" ><!--alias ISOAMSB iprod -->
+<!ENTITY langle "〈" ><!--alias ISOTECH lang -->
+<!ENTITY lbrace "{" ><!--alias ISONUM lcub -->
+<!ENTITY lbrack "[" ><!--alias ISONUM lsqb -->
+<!ENTITY LeftAngleBracket "〈" ><!--alias ISOTECH lang -->
+<!ENTITY leftarrow "←" ><!--alias ISONUM larr -->
+<!ENTITY Leftarrow "⇐" ><!--alias ISOTECH lArr -->
+<!ENTITY LeftArrow "←" ><!--alias ISONUM larr -->
+<!ENTITY LeftArrowRightArrow "⇆" ><!--alias ISOAMSA lrarr -->
+<!ENTITY leftarrowtail "↢" ><!--alias ISOAMSA larrtl -->
+<!ENTITY LeftCeiling "⌈" ><!--alias ISOAMSC lceil -->
+<!ENTITY LeftDoubleBracket "〚" ><!--left double bracket delimiter -->
+<!ENTITY LeftDownVector "⇃" ><!--alias ISOAMSA dharl -->
+<!ENTITY LeftFloor "⌊" ><!--alias ISOAMSC lfloor -->
+<!ENTITY leftharpoondown "↽" ><!--alias ISOAMSA lhard -->
+<!ENTITY leftharpoonup "↼" ><!--alias ISOAMSA lharu -->
+<!ENTITY leftleftarrows "⇇" ><!--alias ISOAMSA llarr -->
+<!ENTITY leftrightarrow "↔" ><!--alias ISOAMSA harr -->
+<!ENTITY Leftrightarrow "⇔" ><!--alias ISOAMSA hArr -->
+<!ENTITY LeftRightArrow "↔" ><!--alias ISOAMSA harr -->
+<!ENTITY leftrightarrows "⇆" ><!--alias ISOAMSA lrarr -->
+<!ENTITY leftrightharpoons "⇋" ><!--alias ISOAMSA lrhar -->
+<!ENTITY leftrightsquigarrow "↭" ><!--alias ISOAMSA harrw -->
+<!ENTITY LeftTee "⊣" ><!--alias ISOAMSR dashv -->
+<!ENTITY leftthreetimes "⋋" ><!--alias ISOAMSB lthree -->
+<!ENTITY LeftTriangle "⊲" ><!--alias ISOAMSR vltri -->
+<!ENTITY LeftTriangleEqual "⊴" ><!--alias ISOAMSR ltrie -->
+<!ENTITY LeftUpVector "↿" ><!--alias ISOAMSA uharl -->
+<!ENTITY LeftVector "↼" ><!--alias ISOAMSA lharu -->
+<!ENTITY leq "≤" ><!--alias ISOTECH le -->
+<!ENTITY leqq "≦" ><!--alias ISOAMSR lE -->
+<!ENTITY leqslant "⩽" ><!--alias ISOAMSR les -->
+<!ENTITY lessapprox "≲" ><!--alias ISOAMSR lap -->
+<!ENTITY lessdot "⋖" ><!--alias ISOAMSR ltdot -->
+<!ENTITY lesseqgtr "⋚" ><!--alias ISOAMSR leg -->
+<!ENTITY lesseqqgtr "⋚" ><!--alias ISOAMSR lEg -->
+<!ENTITY LessEqualGreater "⋚" ><!--alias ISOAMSR leg -->
+<!ENTITY LessFullEqual "≦" ><!--alias ISOAMSR lE -->
+<!ENTITY LessGreater "≶" ><!--alias ISOAMSR lg -->
+<!ENTITY lessgtr "≶" ><!--alias ISOAMSR lg -->
+<!ENTITY lesssim "≲" ><!--alias ISOAMSR lsim -->
+<!ENTITY LessSlantEqual "⩽" ><!--alias ISOAMSR les -->
+<!ENTITY LessTilde "≲" ><!--alias ISOAMSR lsim -->
+<!ENTITY ll "≪" ><!--alias ISOAMSR Lt -->
+<!ENTITY llcorner "⌞" ><!--alias ISOAMSC dlcorn -->
+<!ENTITY Lleftarrow "⇚" ><!--alias ISOAMSA lAarr -->
+<!ENTITY lmoustache "⦘" ><!--alias ISOAMSC lmoust -->
+<!ENTITY lnapprox "⪉" ><!--alias ISOAMSN lnap -->
+<!ENTITY lneq "≨" ><!--alias ISOAMSN lne -->
+<!ENTITY lneqq "≨" ><!--alias ISOAMSN lnE -->
+<!ENTITY longleftarrow "←" ><!--alias ISOAMSA xlarr -->
+<!ENTITY Longleftarrow "⇐" ><!--alias ISOAMSA xlArr -->
+<!ENTITY LongLeftArrow "←" ><!--alias ISOAMSA xlarr -->
+<!ENTITY longleftrightarrow "↔" ><!--alias ISOAMSA xharr -->
+<!ENTITY Longleftrightarrow "⇔" ><!--alias ISOAMSA xhArr -->
+<!ENTITY LongLeftRightArrow "↔" ><!--alias ISOAMSA xharr -->
+<!ENTITY longmapsto "↦" ><!--alias ISOAMSA xmap -->
+<!ENTITY longrightarrow "→" ><!--alias ISOAMSA xrarr -->
+<!ENTITY Longrightarrow "⇒" ><!--alias ISOAMSA xrArr -->
+<!ENTITY LongRightArrow "→" ><!--alias ISOAMSA xrarr -->
+<!ENTITY looparrowleft "↫" ><!--alias ISOAMSA larrlp -->
+<!ENTITY looparrowright "↬" ><!--alias ISOAMSA rarrlp -->
+<!ENTITY LowerLeftArrow "↙" ><!--alias ISOAMSA swarr -->
+<!ENTITY LowerRightArrow "↘" ><!--alias ISOAMSA searr -->
+<!ENTITY lozenge "◊" ><!--alias ISOPUB loz -->
+<!ENTITY lrcorner "⌟" ><!--alias ISOAMSC drcorn -->
+<!ENTITY Lsh "↰" ><!--alias ISOAMSA lsh -->
+<!ENTITY lvertneqq "≨̸" ><!--alias ISOAMSN lvnE -->
+<!ENTITY maltese "✠" ><!--alias ISOPUB malt -->
+<!ENTITY mapsto "↦" ><!--alias ISOAMSA map -->
+<!ENTITY measuredangle "∡" ><!--alias ISOAMSO angmsd -->
+<!ENTITY MinusPlus "∓" ><!--alias ISOTECH mnplus -->
+<!ENTITY mp "∓" ><!--alias ISOTECH mnplus -->
+<!ENTITY multimap "⊸" ><!--alias ISOAMSA mumap -->
+<!ENTITY napprox "≉" ><!--alias ISOAMSN nap -->
+<!ENTITY natural "♮" ><!--alias ISOPUB natur -->
+<!ENTITY nearrow "↗" ><!--alias ISOAMSA nearr -->
+<!ENTITY NestedGreaterGreater "≫" ><!--alias ISOAMSR Gt -->
+<!ENTITY NestedLessLess "≪" ><!--alias ISOAMSR Lt -->
+<!ENTITY nexists "∄" ><!--alias ISOAMSO nexist -->
+<!ENTITY ngeq "≱⃥" ><!--alias ISOAMSN nge -->
+<!ENTITY ngeqq "≱" ><!--alias ISOAMSN ngE -->
+<!ENTITY ngeqslant "≱" ><!--alias ISOAMSN nges -->
+<!ENTITY ngtr "≯" ><!--alias ISOAMSN ngt -->
+<!ENTITY nleftarrow "↚" ><!--alias ISOAMSA nlarr -->
+<!ENTITY nLeftarrow "⇍" ><!--alias ISOAMSA nlArr -->
+<!ENTITY nleftrightarrow "↮" ><!--alias ISOAMSA nharr -->
+<!ENTITY nLeftrightarrow "⇎" ><!--alias ISOAMSA nhArr -->
+<!ENTITY nleq "≰⃥" ><!--alias ISOAMSN nle -->
+<!ENTITY nleqq "≰" ><!--alias ISOAMSN nlE -->
+<!ENTITY nleqslant "≰" ><!--alias ISOAMSN nles -->
+<!ENTITY nless "≮" ><!--alias ISOAMSN nlt -->
+<!ENTITY NotCongruent "≢" ><!--alias ISOAMSN nequiv -->
+<!ENTITY NotDoubleVerticalBar "∦" ><!--alias ISOAMSN npar -->
+<!ENTITY NotElement "∉" ><!--alias ISOTECH notin -->
+<!ENTITY NotEqual "≠" ><!--alias ISOTECH ne -->
+<!ENTITY NotExists "∄" ><!--alias ISOAMSO nexist -->
+<!ENTITY NotGreater "≯" ><!--alias ISOAMSN ngt -->
+<!ENTITY NotGreaterEqual "≱⃥" ><!--alias ISOAMSN nge -->
+<!ENTITY NotGreaterFullEqual "≰" ><!--alias ISOAMSN nlE -->
+<!ENTITY NotGreaterGreater "≫̸⁣" ><!--alias ISOAMSN nGtv -->
+<!ENTITY NotGreaterLess "≹" ><!--alias ISOAMSN ntvgl -->
+<!ENTITY NotGreaterSlantEqual "≱" ><!--alias ISOAMSN nges -->
+<!ENTITY NotGreaterTilde "≵" ><!--alias ISOAMSN ngsim -->
+<!ENTITY NotLeftTriangle "⋪" ><!--alias ISOAMSN nltri -->
+<!ENTITY NotLeftTriangleEqual "⋬" ><!--alias ISOAMSN nltrie -->
+<!ENTITY NotLess "≮" ><!--alias ISOAMSN nlt -->
+<!ENTITY NotLessEqual "≰⃥" ><!--alias ISOAMSN nle -->
+<!ENTITY NotLessGreater "≸" ><!--alias ISOAMSN ntvlg -->
+<!ENTITY NotLessLess "≪̸⁣" ><!--alias ISOAMSN nLtv -->
+<!ENTITY NotLessSlantEqual "≰" ><!--alias ISOAMSN nles -->
+<!ENTITY NotLessTilde "≴" ><!--alias ISOAMSN nlsim -->
+<!ENTITY NotPrecedes "⊀" ><!--alias ISOAMSN npr -->
+<!ENTITY NotPrecedesEqual "⪯̸" ><!--alias ISOAMSN npre -->
+<!ENTITY NotPrecedesSlantEqual "⋠" ><!--alias ISOAMSN nprcue -->
+<!ENTITY NotReverseElement "∌" ><!--alias ISOTECH notniva -->
+<!ENTITY NotRightTriangle "⋫" ><!--alias ISOAMSN nrtri -->
+<!ENTITY NotRightTriangleEqual "⋭" ><!--alias ISOAMSN nrtrie -->
+<!ENTITY NotSquareSubsetEqual "⋢" ><!--alias ISOAMSN nsqsube -->
+<!ENTITY NotSquareSupersetEqual "⋣" ><!--alias ISOAMSN nsqsupe -->
+<!ENTITY NotSubset "⊄" ><!--alias ISOAMSN vnsub -->
+<!ENTITY NotSubsetEqual "⊈" ><!--alias ISOAMSN nsube -->
+<!ENTITY NotSucceeds "⊁" ><!--alias ISOAMSN nsc -->
+<!ENTITY NotSucceedsEqual "⪰̸" ><!--alias ISOAMSN nsce -->
+<!ENTITY NotSucceedsSlantEqual "⋡" ><!--alias ISOAMSN nsccue -->
+<!ENTITY NotSuperset "⊅" ><!--alias ISOAMSN vnsup -->
+<!ENTITY NotSupersetEqual "⊉" ><!--alias ISOAMSN nsupe -->
+<!ENTITY NotTilde "≁" ><!--alias ISOAMSN nsim -->
+<!ENTITY NotTildeEqual "≄" ><!--alias ISOAMSN nsime -->
+<!ENTITY NotTildeFullEqual "≇" ><!--alias ISOAMSN ncong -->
+<!ENTITY NotTildeTilde "≉" ><!--alias ISOAMSN nap -->
+<!ENTITY NotVerticalBar "∤" ><!--alias ISOAMSN nmid -->
+<!ENTITY nparallel "∦" ><!--alias ISOAMSN npar -->
+<!ENTITY nprec "⊀" ><!--alias ISOAMSN npr -->
+<!ENTITY npreceq "⪯̸" ><!--alias ISOAMSN npre -->
+<!ENTITY nrightarrow "↛" ><!--alias ISOAMSA nrarr -->
+<!ENTITY nRightarrow "⇏" ><!--alias ISOAMSA nrArr -->
+<!ENTITY nshortmid "∤⁣" ><!--alias ISOAMSN nsmid -->
+<!ENTITY nshortparallel "∦⁣" ><!--alias ISOAMSN nspar -->
+<!ENTITY nsimeq "≄" ><!--alias ISOAMSN nsime -->
+<!ENTITY nsubset "⊄" ><!--alias ISOAMSN vnsub -->
+<!ENTITY nsubseteq "⊈" ><!--alias ISOAMSN nsube -->
+<!ENTITY nsubseteqq "⊈" ><!--alias ISOAMSN nsubE -->
+<!ENTITY nsucc "⊁" ><!--alias ISOAMSN nsc -->
+<!ENTITY nsucceq "⪰̸" ><!--alias ISOAMSN nsce -->
+<!ENTITY nsupset "⊅" ><!--alias ISOAMSN vnsup -->
+<!ENTITY nsupseteq "⊉" ><!--alias ISOAMSN nsupe -->
+<!ENTITY nsupseteqq "⊉" ><!--alias ISOAMSN nsupE -->
+<!ENTITY ntriangleleft "⋪" ><!--alias ISOAMSN nltri -->
+<!ENTITY ntrianglelefteq "⋬" ><!--alias ISOAMSN nltrie -->
+<!ENTITY ntriangleright "⋫" ><!--alias ISOAMSN nrtri -->
+<!ENTITY ntrianglerighteq "⋭" ><!--alias ISOAMSN nrtrie -->
+<!ENTITY nwarrow "↖" ><!--alias ISOAMSA nwarr -->
+<!ENTITY oint "∮" ><!--alias ISOTECH conint -->
+<!ENTITY OpenCurlyDoubleQuote "“" ><!--alias ISONUM ldquo -->
+<!ENTITY OpenCurlyQuote "‘" ><!--alias ISONUM lsquo -->
+<!ENTITY orderof "ℴ" ><!--alias ISOTECH order -->
+<!ENTITY parallel "∥" ><!--alias ISOTECH par -->
+<!ENTITY PartialD "∂" ><!--alias ISOTECH part -->
+<!ENTITY pitchfork "⋔" ><!--alias ISOAMSR fork -->
+<!ENTITY PlusMinus "±" ><!--alias ISONUM plusmn -->
+<!ENTITY pm "±" ><!--alias ISONUM plusmn -->
+<!ENTITY prec "≺" ><!--alias ISOAMSR pr -->
+<!ENTITY precapprox "≾" ><!--alias ISOAMSR prap -->
+<!ENTITY preccurlyeq "≼" ><!--alias ISOAMSR prcue -->
+<!ENTITY Precedes "≺" ><!--alias ISOAMSR pr -->
+<!ENTITY PrecedesEqual "⪯" ><!--alias ISOAMSR pre -->
+<!ENTITY PrecedesSlantEqual "≼" ><!--alias ISOAMSR prcue -->
+<!ENTITY PrecedesTilde "≾" ><!--alias ISOAMSR prsim -->
+<!ENTITY preceq "⪯" ><!--alias ISOAMSR pre -->
+<!ENTITY precnapprox "⋨" ><!--alias ISOAMSN prnap -->
+<!ENTITY precneqq "⪵" ><!--alias ISOAMSN prnE -->
+<!ENTITY precnsim "⋨" ><!--alias ISOAMSN prnsim -->
+<!ENTITY precsim "≾" ><!--alias ISOAMSR prsim -->
+<!ENTITY Proportion "∷" ><!--alias ISOAMSR Colon -->
+<!ENTITY Proportional "∝" ><!--alias ISOTECH prop -->
+<!ENTITY propto "∝" ><!--alias ISOTECH prop -->
+<!ENTITY questeq "≟" ><!--alias ISOAMSR equest -->
+<!ENTITY rangle "〉" ><!--alias ISOTECH rang -->
+<!ENTITY rbrace "}" ><!--alias ISONUM rcub -->
+<!ENTITY rbrack "]" ><!--alias ISONUM rsqb -->
+<!ENTITY Re "ℜ" ><!--alias ISOAMSO real -->
+<!ENTITY realpart "ℜ" ><!--alias ISOAMSO real -->
+<!ENTITY ReverseElement "∋" ><!--alias ISOTECH niv -->
+<!ENTITY ReverseEquilibrium "⇋" ><!--alias ISOAMSA lrhar -->
+<!ENTITY ReverseUpEquilibrium "⥯" ><!--alias ISOAMSA duhar -->
+<!ENTITY RightAngleBracket "〉" ><!--alias ISOTECH rang -->
+<!ENTITY rightarrow "→" ><!--alias ISONUM rarr -->
+<!ENTITY Rightarrow "⇒" ><!--alias ISOTECH rArr -->
+<!ENTITY RightArrow "→" ><!--alias ISONUM rarr -->
+<!ENTITY RightArrowLeftArrow "⇄" ><!--alias ISOAMSA rlarr -->
+<!ENTITY rightarrowtail "↣" ><!--alias ISOAMSA rarrtl -->
+<!ENTITY RightCeiling "⌉" ><!--alias ISOAMSC rceil -->
+<!ENTITY RightDoubleBracket "〛" ><!--right double bracket delimiter -->
+<!ENTITY RightDownVector "⇂" ><!--alias ISOAMSA dharr -->
+<!ENTITY RightFloor "⌋" ><!--alias ISOAMSC rfloor -->
+<!ENTITY rightharpoondown "⇁" ><!--alias ISOAMSA rhard -->
+<!ENTITY rightharpoonup "⇀" ><!--alias ISOAMSA rharu -->
+<!ENTITY rightleftarrows "⇄" ><!--alias ISOAMSA rlarr -->
+<!ENTITY rightleftharpoons "⇌" ><!--alias ISOAMSA rlhar -->
+<!ENTITY rightrightarrows "⇉" ><!--alias ISOAMSA rrarr -->
+<!ENTITY rightsquigarrow "⇝" ><!--alias ISOAMSA rarrw -->
+<!ENTITY RightTee "⊢" ><!--alias ISOAMSR vdash -->
+<!ENTITY RightTeeArrow "↦" ><!--alias ISOAMSA map -->
+<!ENTITY rightthreetimes "⋌" ><!--alias ISOAMSB rthree -->
+<!ENTITY RightTriangle "⊳" ><!--alias ISOAMSR vrtri -->
+<!ENTITY RightTriangleEqual "⊵" ><!--alias ISOAMSR rtrie -->
+<!ENTITY RightUpVector "↾" ><!--alias ISOAMSA uharr -->
+<!ENTITY RightVector "⇀" ><!--alias ISOAMSA rharu -->
+<!ENTITY risingdotseq "≓" ><!--alias ISOAMSR erDot -->
+<!ENTITY rmoustache "⦗" ><!--alias ISOAMSC rmoust -->
+<!ENTITY Rrightarrow "⇛" ><!--alias ISOAMSA rAarr -->
+<!ENTITY Rsh "↱" ><!--alias ISOAMSA rsh -->
+<!ENTITY searrow "↘" ><!--alias ISOAMSA searr -->
+<!ENTITY setminus "∖" ><!--alias ISOAMSB setmn -->
+<!ENTITY ShortLeftArrow "←⁣" ><!--alias ISOAMSA slarr -->
+<!ENTITY shortmid "∣⁣" ><!--alias ISOAMSR smid -->
+<!ENTITY shortparallel "∥⁣" ><!--alias ISOAMSR spar -->
+<!ENTITY ShortRightArrow "→⁣" ><!--alias ISOAMSA srarr -->
+<!ENTITY simeq "≃" ><!--alias ISOTECH sime -->
+<!ENTITY SmallCircle "∘" ><!--alias ISOTECH compfn -->
+<!ENTITY smallsetminus "∖" ><!--alias ISOAMSB ssetmn -->
+<!ENTITY spadesuit "♠" ><!--ISOPUB spades -->
+<!ENTITY Sqrt "√" ><!--alias ISOTECH radic -->
+<!ENTITY sqsubset "⊏" ><!--alias ISOAMSR sqsub -->
+<!ENTITY sqsubseteq "⊑" ><!--alias ISOAMSR sqsube -->
+<!ENTITY sqsupset "⊐" ><!--alias ISOAMSR sqsup -->
+<!ENTITY sqsupseteq "⊒" ><!--alias ISOAMSR sqsupe -->
+<!ENTITY Square "□" ><!--alias for square -->
+<!ENTITY SquareIntersection "⊓" ><!--alias ISOAMSB sqcap -->
+<!ENTITY SquareSubset "⊏" ><!--alias ISOAMSR sqsub -->
+<!ENTITY SquareSubsetEqual "⊑" ><!--alias ISOAMSR sqsube -->
+<!ENTITY SquareSuperset "⊐" ><!--alias ISOAMSR sqsup -->
+<!ENTITY SquareSupersetEqual "⊒" ><!--alias ISOAMSR sqsupe -->
+<!ENTITY SquareUnion "⊔" ><!--alias ISOAMSB sqcup -->
+<!ENTITY Star "⋆" ><!--alias ISOAMSB sstarf -->
+<!ENTITY straightepsilon "ε" ><!--alias ISOGRK3 epsi -->
+<!ENTITY straightphi "φ" ><!--alias ISOGRK3 phi -->
+<!ENTITY subset "⊂" ><!--alias ISOTECH sub -->
+<!ENTITY Subset "⋐" ><!--alias ISOAMSR Sub -->
+<!ENTITY subseteq "⊆" ><!--alias ISOTECH sube -->
+<!ENTITY subseteqq "⊆" ><!--alias ISOAMSR subE -->
+<!ENTITY SubsetEqual "⊆" ><!--alias ISOTECH sube -->
+<!ENTITY subsetneq "⊊" ><!--alias ISOAMSN subne -->
+<!ENTITY subsetneqq "⊊" ><!--alias ISOAMSN subnE -->
+<!ENTITY succ "≻" ><!--alias ISOAMSR sc -->
+<!ENTITY succapprox "≿" ><!--alias ISOAMSR scap -->
+<!ENTITY succcurlyeq "≽" ><!--alias ISOAMSR sccue -->
+<!ENTITY Succeeds "≻" ><!--alias ISOAMSR sc -->
+<!ENTITY SucceedsEqual "≽" ><!--alias ISOAMSR sce -->
+<!ENTITY SucceedsSlantEqual "≽" ><!--alias ISOAMSR sccue -->
+<!ENTITY SucceedsTilde "≿" ><!--alias ISOAMSR scsim -->
+<!ENTITY succeq "≽" ><!--alias ISOAMSR sce -->
+<!ENTITY succnapprox "⋩" ><!--alias ISOAMSN scnap -->
+<!ENTITY succneqq "⪶" ><!--alias ISOAMSN scnE -->
+<!ENTITY succnsim "⋩" ><!--alias ISOAMSN scnsim -->
+<!ENTITY succsim "≿" ><!--alias ISOAMSR scsim -->
+<!ENTITY SuchThat "∋" ><!--ISOTECH ni -->
+<!ENTITY Sum "∑" ><!--alias ISOAMSB sum -->
+<!ENTITY Superset "⊃" ><!--alias ISOTECH sup -->
+<!ENTITY SupersetEqual "⊇" ><!--alias ISOTECH supe -->
+<!ENTITY supset "⊃" ><!--alias ISOTECH sup -->
+<!ENTITY Supset "⋑" ><!--alias ISOAMSR Sup -->
+<!ENTITY supseteq "⊇" ><!--alias ISOTECH supe -->
+<!ENTITY supseteqq "⊇" ><!--alias ISOAMSR supE -->
+<!ENTITY supsetneq "⊋" ><!--alias ISOAMSN supne -->
+<!ENTITY supsetneqq "⊋" ><!--alias ISOAMSN supnE -->
+<!ENTITY swarrow "↙" ><!--alias ISOAMSA swarr -->
+<!ENTITY therefore "∴" ><!--alias ISOTECH there4 -->
+<!ENTITY Therefore "∴" ><!--alias ISOTECH there4 -->
+<!ENTITY thickapprox "≈⁣" ><!--ISOAMSR thkap -->
+<!ENTITY thicksim "∼" ><!--ISOAMSR thksim -->
+<!ENTITY ThinSpace " " ><!--space of width 3/18 em alias ISOPUB thinsp -->
+<!ENTITY Tilde "∼" ><!--alias ISOTECH sim -->
+<!ENTITY TildeEqual "≃" ><!--alias ISOTECH sime -->
+<!ENTITY TildeFullEqual "≅" ><!--alias ISOTECH cong -->
+<!ENTITY TildeTilde "≈" ><!--alias ISOTECH ap -->
+<!ENTITY toea "⤨" ><!--alias ISOAMSA nesear -->
+<!ENTITY tosa "⤩" ><!--alias ISOAMSA seswar -->
+<!ENTITY triangle "▵" ><!--alias ISOPUB utri -->
+<!ENTITY triangledown "▿" ><!--alias ISOPUB dtri -->
+<!ENTITY triangleleft "◃" ><!--alias ISOPUB ltri -->
+<!ENTITY trianglelefteq "⊴" ><!--alias ISOAMSR ltrie -->
+<!ENTITY triangleq "≜" ><!--alias ISOAMSR trie -->
+<!ENTITY triangleright "▹" ><!--alias ISOPUB rtri -->
+<!ENTITY trianglerighteq "⊵" ><!--alias ISOAMSR rtrie -->
+<!ENTITY TripleDot "⃛" ><!--alias ISOTECH tdot -->
+<!ENTITY twoheadleftarrow "↞" ><!--alias ISOAMSA Larr -->
+<!ENTITY twoheadrightarrow "↠" ><!--alias ISOAMSA Rarr -->
+<!ENTITY ulcorner "⌜" ><!--alias ISOAMSC ulcorn -->
+<!ENTITY Union "⋃" ><!--alias ISOAMSB xcup -->
+<!ENTITY UnionPlus "⊎" ><!--alias ISOAMSB uplus -->
+<!ENTITY uparrow "↑" ><!--alias ISONUM uarr -->
+<!ENTITY Uparrow "⇑" ><!--alias ISOAMSA uArr -->
+<!ENTITY UpArrow "↑" ><!--alias ISONUM uarr -->
+<!ENTITY UpArrowDownArrow "⇅" ><!--alias ISOAMSA udarr -->
+<!ENTITY updownarrow "↕" ><!--alias ISOAMSA varr -->
+<!ENTITY Updownarrow "⇕" ><!--alias ISOAMSA vArr -->
+<!ENTITY UpDownArrow "↕" ><!--alias ISOAMSA varr -->
+<!ENTITY UpEquilibrium "⥮" ><!--alias ISOAMSA udhar -->
+<!ENTITY upharpoonleft "↿" ><!--alias ISOAMSA uharl -->
+<!ENTITY upharpoonright "↾" ><!--alias ISOAMSA uharr -->
+<!ENTITY UpperLeftArrow "↖" ><!--alias ISOAMSA nwarr -->
+<!ENTITY UpperRightArrow "↗" ><!--alias ISOAMSA nearr -->
+<!ENTITY upsilon "υ" ><!--alias ISOGRK3 upsi -->
+<!ENTITY Upsilon "ϒ" ><!--alias ISOGRK3 Upsi -->
+<!ENTITY UpTee "⊥" ><!--alias ISOTECH perp -->
+<!ENTITY upuparrows "⇈" ><!--alias ISOAMSA uuarr -->
+<!ENTITY urcorner "⌝" ><!--alias ISOAMSC urcorn -->
+<!ENTITY varepsilon "ɛ" ><!--alias ISOGRK3 epsiv -->
+<!ENTITY varkappa "ϰ" ><!--alias ISOGRK3 kappav -->
+<!ENTITY varnothing "∅" ><!--alias ISOAMSO emptyv -->
+<!ENTITY varphi "ϕ" ><!--alias ISOGRK3 phiv -->
+<!ENTITY varpi "ϖ" ><!--alias ISOGRK3 piv -->
+<!ENTITY varpropto "∝" ><!--alias ISOAMSR vprop -->
+<!ENTITY varrho "ϱ" ><!--alias ISOGRK3 rhov -->
+<!ENTITY varsigma "ς" ><!--alias ISOGRK3 sigmav -->
+<!ENTITY varsubsetneq "⊊⁣" ><!--alias ISOAMSN vsubne -->
+<!ENTITY varsubsetneqq "⊊⁣" ><!--alias ISOAMSN vsubnE -->
+<!ENTITY varsupsetneq "⊋⁣" ><!--alias ISOAMSN vsupne -->
+<!ENTITY varsupsetneqq "⊋⁣" ><!--alias ISOAMSN vsupnE -->
+<!ENTITY vartheta "ϑ" ><!--alias ISOGRK3 thetav -->
+<!ENTITY vartriangleleft "⊲" ><!--alias ISOAMSR vltri -->
+<!ENTITY vartriangleright "⊳" ><!--alias ISOAMSR vrtri -->
+<!ENTITY vee "∨" ><!--alias ISOTECH or -->
+<!ENTITY Vee "⋁" ><!--alias ISOAMSB xvee -->
+<!ENTITY vert "|" ><!--alias ISONUM verbar -->
+<!ENTITY Vert "‖" ><!--alias ISOTECH Verbar -->
+<!ENTITY VerticalBar "∣" ><!--alias ISOAMSR mid -->
+<!ENTITY VerticalTilde "≀" ><!--alias ISOAMSB wreath -->
+<!ENTITY VeryThinSpace " " ><!--space of width 1/18 em alias ISOPUB hairsp -->
+<!ENTITY wedge "∧" ><!--alias ISOTECH and -->
+<!ENTITY Wedge "⋀" ><!--alias ISOAMSB xwedge -->
+<!ENTITY wp "℘" ><!--alias ISOAMSO weierp -->
+<!ENTITY wr "≀" ><!--alias ISOAMSB wreath -->
--- /dev/null
+
+<!--
+ File mmlextra.ent produced by the XSL script mmldtd.xsl
+ from input data in unicode.xml.
+
+ Please report any errors to
+ David Carlisle <davidc@nag.co.uk>.
+
+ The numeric character values assigned to each entity
+ (should) match either official Unicode assignments
+ or assignments provisionally allocated by the
+ Unicode Consortium based on the characters in the `STIX'
+ propsal for mathematics. Note that these assignments
+ have not been ratified by the corresponding ISO
+ committee and thus should be considered liable to
+ change.
+
+-->
+
+<!ENTITY af "⁡" ><!--short form of ⁡ -->
+<!ENTITY ApplyFunction "⁡" ><!--character showing function application in presentation tagging -->
+<!ENTITY Assign "≔" ><!--assignment operator -->
+<!ENTITY CapitalDifferentialD "ⅅ" ><!--D for use in differentials, e.g., within integrals -->
+<!ENTITY Cayleys "ℭ" ><!--the non-associative ring of octonions or Cayley numbers -->
+<!ENTITY complexes "ℂ" ><!--the field of complex numbers -->
+<!ENTITY Cross "⨯" ><!--cross or vector product -->
+<!ENTITY dd "ⅆ" ><!--short form of ⅆ -->
+<!ENTITY DD "ⅅ" ><!--short form of CapitalDifferentialD -->
+<!ENTITY DifferentialD "ⅆ" ><!--d for use in differentials, e.g., within integrals -->
+<!ENTITY DownArrowBar "⤓" ><!--down arrow to bar -->
+<!ENTITY DownBreve "̑" ><!--breve, inverted (non-spacing) -->
+<!ENTITY DownLeftRightVector "⥐" ><!--left-down-right-down harpoon -->
+<!ENTITY DownLeftTeeVector "⥞" ><!--left-down harpoon from bar -->
+<!ENTITY DownLeftVectorBar "⥖" ><!--left-down harpoon to bar -->
+<!ENTITY DownRightTeeVector "⥟" ><!--right-down harpoon from bar -->
+<!ENTITY DownRightVectorBar "⥗" ><!--right-down harpoon to bar -->
+<!ENTITY DownTeeArrow "↧" ><!--alias for mapstodown -->
+<!ENTITY ee "ⅇ" ><!--short form of ⅇ -->
+<!ENTITY EmptySmallSquare "◽" ><!--empty small square -->
+<!ENTITY EmptyVerySmallSquare "◽" ><!--empty small square -->
+<!ENTITY Equal "⩵" ><!--two consecutive equal signs -->
+<!ENTITY expectation "ℰ" ><!--expectation (operator) -->
+<!ENTITY exponentiale "ℯ" ><!--base of the Napierian logarithms -->
+<!ENTITY ExponentialE "ⅇ" ><!--e use for the exponential base of the natural logarithms -->
+<!ENTITY FilledSmallSquare "◾" ><!--filled small square -->
+<!ENTITY FilledVerySmallSquare "◾" ><!--filled very small square -->
+<!ENTITY Fouriertrf "ℱ" ><!--Fourier transform -->
+<!ENTITY GreaterGreater "⪢" ><!--alias for GT -->
+<!ENTITY HilbertSpace "ℋ" ><!--Hilbert space -->
+<!ENTITY HorizontalLine "─" ><!--short horizontal line -->
+<!ENTITY ic "​" ><!--short form of ⁣ -->
+<!ENTITY ii "ⅈ" ><!--short form of ⅈ -->
+<!ENTITY ImaginaryI "ⅈ" ><!--i for use as a square root of -1 -->
+<!ENTITY imagline "ℐ" ><!--the geometric imaginary line -->
+<!ENTITY integers "ℤ" ><!--the ring of integers -->
+<!ENTITY InvisibleComma "​" ><!--used as a separator, e.g., in indices -->
+<!ENTITY InvisibleTimes "⁢" ><!--marks multiplication when it is understood without a mark -->
+<!ENTITY it "⁢" ><!--short form of ⁢ -->
+<!ENTITY Laplacetrf "ℒ" ><!--Laplace transform -->
+<!ENTITY larrb "⇤" ><!--leftwards arrow to bar -->
+<!ENTITY LeftArrowBar "⇤" ><!--alias for larrb -->
+<!ENTITY LeftDownTeeVector "⥡" ><!--down-left harpoon from bar -->
+<!ENTITY LeftDownVectorBar "⥙" ><!--down-left harpoon to bar -->
+<!ENTITY LeftRightVector "⥎" ><!--left-up-right-up harpoon -->
+<!ENTITY LeftTeeArrow "↤" ><!--alias for mapstoleft -->
+<!ENTITY LeftTeeVector "⥚" ><!--left-up harpoon from bar -->
+<!ENTITY LeftTriangleBar "⧏" ><!--not left triangle, vertical bar -->
+<!ENTITY LeftUpDownVector "⥑" ><!--up-left-down-left harpoon -->
+<!ENTITY LeftUpTeeVector "⥠" ><!--up-left harpoon from bar -->
+<!ENTITY LeftUpVectorBar "⥘" ><!--up-left harpoon to bar -->
+<!ENTITY LeftVectorBar "⥒" ><!--left-up harpoon to bar -->
+<!ENTITY LessLess "⪡" ><!--alias for Lt -->
+<!ENTITY mapstodown "↧" ><!--downwards arrow from bar -->
+<!ENTITY mapstoleft "↤" ><!--leftwards arrow from bar -->
+<!ENTITY mapstoup "↥" ><!--upwards arrow from bar -->
+<!ENTITY Mellintrf "ℳ" ><!--Mellin transform -->
+<!ENTITY naturals "ℕ" ><!--the semi-ring of natural numbers -->
+<!ENTITY nbump "≎̸" ><!--not bumpy equals -->
+<!ENTITY nbumpe "≏̸" ><!--not bumpy single equals -->
+<!ENTITY NegativeMediumSpace " ⁣" ><!--space of width -4/18 em -->
+<!ENTITY NegativeThickSpace " ⁣" ><!--space of width -5/18 em -->
+<!ENTITY NegativeThinSpace " ⁣" ><!--space of width -3/18 em -->
+<!ENTITY NegativeVeryThinSpace " ⁣" ><!--space of width -1/18 em -->
+<!ENTITY nesim "≂̸" ><!--not equal or similar -->
+<!ENTITY NewLine "
" ><!--force a line break; line feed -->
+<!ENTITY NoBreak "" ><!--never break line here -->
+<!ENTITY NotCupCap "≭" ><!--alias for &nasymp; -->
+<!ENTITY NotEqualTilde "≂̸" ><!--alias for ≂̸ -->
+<!ENTITY NotHumpDownHump "≎̸" ><!--alias for ≎̸ -->
+<!ENTITY NotHumpEqual "≏̸" ><!--alias for ≏̸ -->
+<!ENTITY NotLeftTriangleBar "⧏̸" ><!--not left triangle, vertical bar -->
+<!ENTITY NotNestedGreaterGreater "⒢̸" ><!--not double greater-than sign -->
+<!ENTITY NotNestedLessLess "⒡̸" ><!--not double less-than sign -->
+<!ENTITY NotRightTriangleBar "⧐̸" ><!--not vertical bar, right triangle -->
+<!ENTITY NotSquareSubset "⊏̸" ><!--square not subset -->
+<!ENTITY NotSquareSuperset "⊐̸" ><!--negated set-like partial order operator -->
+<!ENTITY NotSucceedsTilde "≿̸" ><!--not succeeds or similar -->
+<!ENTITY OverBar "¯" ><!--over bar -->
+<!ENTITY OverBrace "︷" ><!--over brace -->
+<!ENTITY OverBracket "⎴" ><!--over bracket -->
+<!ENTITY OverParenthesis "︵" ><!--over parenthesis -->
+<!ENTITY planckh "ℎ" ><!--the ring (skew field) of quaternions -->
+<!ENTITY Poincareplane "ℌ" ><!--the Poincare upper half-plane -->
+<!ENTITY primes "ℙ" ><!--the prime natural numbers -->
+<!ENTITY Product "∏" ><!--alias for &prod -->
+<!ENTITY quaternions "ℍ" ><!--the ring (skew field) of quaternions -->
+<!ENTITY rarrb "⇥" ><!--leftwards arrow to bar -->
+<!ENTITY rationals "ℚ" ><!--the field of rational numbers -->
+<!ENTITY realine "ℛ" ><!--the geometric real line -->
+<!ENTITY reals "ℝ" ><!--the field of real numbers -->
+<!ENTITY RightArrowBar "⇥" ><!--alias for rarrb -->
+<!ENTITY RightDownTeeVector "⥝" ><!--down-right harpoon from bar -->
+<!ENTITY RightDownVectorBar "⥕" ><!--down-right harpoon to bar -->
+<!ENTITY RightTeeVector "⥛" ><!--right-up harpoon from bar -->
+<!ENTITY RightTriangleBar "⧐" ><!--vertical bar, right triangle -->
+<!ENTITY RightUpDownVector "⥏" ><!--up-right-down-right harpoon -->
+<!ENTITY RightUpTeeVector "⥜" ><!--up-right harpoon from bar -->
+<!ENTITY RightUpVectorBar "⥔" ><!--up-right harpoon to bar -->
+<!ENTITY RightVectorBar "⥓" ><!--up-right harpoon to bar -->
+<!ENTITY RoundImplies "⥰" ><!--round implies -->
+<!ENTITY RuleDelayed "⧴" ><!--rule-delayed (colon right arrow) -->
+<!ENTITY ShortDownArrow "⌄⁣" ><!--short down arrow -->
+<!ENTITY ShortUpArrow "⌃⁣" ><!--short up arrow -->
+<!ENTITY Tab "	" ><!--tabulator stop; horizontal tabulation -->
+<!ENTITY ThickSpace " " ><!--space of width 5/18 em -->
+<!ENTITY UnderBar "̲" ><!--combining low line -->
+<!ENTITY UnderBrace "︸" ><!--under brace -->
+<!ENTITY UnderBracket "⎵" ><!--under bracket -->
+<!ENTITY UpArrowBar "⤒" ><!--up arrow to bar -->
+<!ENTITY UpTeeArrow "↥" ><!--Alias mapstoup -->
+<!ENTITY VerticalLine "❘" ><!--short vertical line -->
+<!ENTITY VerticalSeparator "❘" ><!--vertical separating operator -->
+<!ENTITY zeetrf "ℨ" ><!--zee transform -->
+<!ENTITY ZeroWidthSpace "​" ><!--zero width space -->
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE SECTION SYSTEM "theoryobject.dtd">
+
+<SECTION>
+
+ <SECTION>
+ <Variable name="A" xmlns:m="http://www.w3.org/1998/Math/MathML"><type>
+ <m:math><m:apply><m:csymbol>cast</m:csymbol>
+
+ <m:apply><m:csymbol>Prop</m:csymbol></m:apply>
+
+
+ <m:apply><m:csymbol>Type</m:csymbol></m:apply>
+
+ </m:apply></m:math>
+ </type></Variable>
+ <SECTION>
+ <Variable name="B" xmlns:m="http://www.w3.org/1998/Math/MathML"><type>
+ <m:math><m:apply><m:csymbol>cast</m:csymbol>
+
+ <m:apply><m:csymbol>Prop</m:csymbol></m:apply>
+
+
+ <m:apply><m:csymbol>Type</m:csymbol></m:apply>
+
+ </m:apply></m:math>
+ </type></Variable>
+ <Axiom name="axiom" xmlns:m="http://www.w3.org/1998/Math/MathML"><Params>1: A 0: B</Params><type>
+ <m:math><m:apply><m:csymbol>cast</m:csymbol>
+
+ <m:apply><m:csymbol>arrow</m:csymbol>
+ <m:ci>A</m:ci>
+
+ <m:apply><m:csymbol>arrow</m:csymbol>
+ <m:apply><m:csymbol>arrow</m:csymbol>
+ <m:ci>A</m:ci>
+
+ <m:ci>B</m:ci>
+ </m:apply>
+
+ <m:ci>B</m:ci>
+ </m:apply>
+ </m:apply>
+
+
+ <m:apply><m:csymbol>Prop</m:csymbol></m:apply>
+
+ </m:apply></m:math>
+ </type></Axiom>
+ <Definition name="th1" xmlns:m="http://www.w3.org/1998/Math/MathML"><Params>1: A 0: B</Params><body>
+ <m:math><m:lambda><m:bvar><m:ci>A0</m:ci><m:type>
+ <m:ci>A</m:ci>
+ </m:type></m:bvar>
+ <m:lambda><m:bvar><m:ci>H</m:ci><m:type>
+ <m:apply><m:csymbol>arrow</m:csymbol>
+ <m:ci>A</m:ci>
+
+ <m:ci>B</m:ci>
+ </m:apply>
+ </m:type></m:bvar>
+ <m:apply><m:csymbol>app</m:csymbol>
+ <m:ci definitionURL="cic:/coq/INIT/Logic/Conjunction/and.ind">conj</m:ci>
+ <m:ci>A</m:ci>
+ <m:ci>B</m:ci>
+ <m:ci>A0</m:ci>
+ <m:apply><m:csymbol>app</m:csymbol>
+ <m:ci definitionURL="cic:/prove/provastruct/a/b1/axiom.con">axiom</m:ci>
+ <m:ci>A0</m:ci>
+ <m:ci>H</m:ci>
+ </m:apply>
+ </m:apply>
+ </m:lambda>
+ </m:lambda></m:math>
+ </body><type>
+ <m:math><m:apply><m:csymbol>cast</m:csymbol>
+
+ <m:apply><m:csymbol>arrow</m:csymbol>
+ <m:ci>A</m:ci>
+
+ <m:apply><m:csymbol>arrow</m:csymbol>
+ <m:apply><m:csymbol>arrow</m:csymbol>
+ <m:ci>A</m:ci>
+
+ <m:ci>B</m:ci>
+ </m:apply>
+
+ <m:apply><m:and definitionURL="cic:/coq/INIT/Logic/Conjunction/and.ind"/><m:ci>A</m:ci><m:ci>B</m:ci></m:apply>
+ </m:apply>
+ </m:apply>
+
+
+ <m:apply><m:csymbol>Prop</m:csymbol></m:apply>
+
+ </m:apply></m:math>
+ </type></Definition>
+ </SECTION>
+ <SECTION>
+ <Variable name="B" xmlns:m="http://www.w3.org/1998/Math/MathML"><type>
+ <m:math><m:apply><m:csymbol>cast</m:csymbol>
+
+ <m:apply><m:csymbol>Set</m:csymbol></m:apply>
+
+
+ <m:apply><m:csymbol>Type</m:csymbol></m:apply>
+
+ </m:apply></m:math>
+ </type></Variable>
+ <Axiom name="axiom'" xmlns:m="http://www.w3.org/1998/Math/MathML"><Params>1: A</Params><type>
+ <m:math><m:apply><m:csymbol>cast</m:csymbol>
+
+ <m:apply><m:csymbol>prod</m:csymbol><m:bvar><m:ci>A</m:ci><m:type>
+ <m:apply><m:csymbol>Prop</m:csymbol></m:apply>
+ </m:type></m:bvar>
+ <m:apply><m:csymbol>arrow</m:csymbol>
+ <m:ci>A</m:ci>
+
+ <m:ci>A</m:ci>
+ </m:apply>
+ </m:apply>
+
+
+ <m:apply><m:csymbol>Prop</m:csymbol></m:apply>
+
+ </m:apply></m:math>
+ </type></Axiom>
+ </SECTION>
+ <Definition name="th1'" xmlns:m="http://www.w3.org/1998/Math/MathML"><Params>0: A</Params><body>
+ <m:math><m:lambda><m:bvar><m:ci>A0</m:ci><m:type>
+ <m:apply><m:csymbol>Prop</m:csymbol></m:apply>
+ </m:type></m:bvar>
+ <m:lambda><m:bvar><m:ci>H</m:ci><m:type>
+ <m:ci>A0</m:ci>
+ </m:type></m:bvar>
+ <m:ci>H</m:ci>
+ </m:lambda>
+ </m:lambda></m:math>
+ </body><type>
+ <m:math><m:apply><m:csymbol>cast</m:csymbol>
+
+ <m:apply><m:csymbol>prod</m:csymbol><m:bvar><m:ci>A</m:ci><m:type>
+ <m:apply><m:csymbol>Prop</m:csymbol></m:apply>
+ </m:type></m:bvar>
+ <m:apply><m:csymbol>arrow</m:csymbol>
+ <m:ci>A</m:ci>
+
+ <m:ci>A</m:ci>
+ </m:apply>
+ </m:apply>
+
+
+ <m:apply><m:csymbol>Prop</m:csymbol></m:apply>
+
+ </m:apply></m:math>
+ </type></Definition>
+ </SECTION>
+</SECTION>
+
+<!-- This page was served in 4037 milliseconds by Cocoon 1.7.3 -->
--- /dev/null
+<?xml encoding="ISO-8859-1"?>
+
+<!--*****************************************************************-->
+<!-- DTD FOR THEORY OBJECTS AT LEVEL OF MATHML CONTENT: -->
+<!-- First draft: May 9 2000, Irene Schena -->
+<!--*****************************************************************-->
+
+<!ENTITY % cicobj SYSTEM "cicobject.dtd">
+
+%cicobj;
+
+<!-- THEORY section: -->
+
+<!ELEMENT SECTION (SECTION|Definition|Axiom|InductiveDefinition|Variable)*>
--- /dev/null
+*.cmo
+*.cmx
+*.cmi
+
+experiment
+experiment.opt
+fix_params
+fix_params.opt
+mmlinterface
+mmlinterface.opt
+reduction
+reduction.opt
+t1lib.log
+output.ps
+output2.ps
deannotate.cmx: cic.cmx
cicXPath.cmo: cic.cmo
cicXPath.cmx: cic.cmx
+pxpUriResolver.cmo: configuration.cmo
+pxpUriResolver.cmx: configuration.cmx
annotationParser.cmo: annotationParser2.cmo pxpUriResolver.cmo
annotationParser.cmx: annotationParser2.cmx pxpUriResolver.cmx
annotationParser2.cmo: cic.cmo
+++ /dev/null
-==============================
-ISTRUZIONI PER CHI USA LA TCSH
-==============================
-
-Lanciare:
-
- source PER_FARLO_ANDARE_TCSH
-
-Poi far partire altri due xterm.
-Nel primo lanciare:
-
- make start-xaland3
-
-Nel secondo lanciare:
-
- make start-http-getter
-
-Se non funziona significa che ce ne e' gia' uno attivo.
-
-Infini lanciare, dall'ultima shell,
-
- ./mmlinterface.opt.saved
LABLGTK_DIR = /usr/lib/ocaml/lablgtk
LABLGTK_MATHVIEW_DIR = /usr/lib/ocaml/lablgtk/mathview
+MINIDOM_DIR = /usr/lib/ocaml/minidom
PXP_DIR = /usr/lib/ocaml/site-lib/pxp
NETSTRING_DIR = /usr/lib/ocaml/site-lib/netstring
-OCAMLC = ocamlc -I $(LABLGTK_DIR) -I $(LABLGTK_MATHVIEW_DIR) -I $(PXP_DIR) -I $(NETSTRING_DIR) -I mlmathview
-OCAMLOPT = ocamlopt -I $(LABLGTK_DIR) -I $(LABLGTK_MATHVIEW_DIR) -I mlgtk_devel -I $(PXP_DIR) -I $(NETSTRING_DIR) -I mlmathview
+OCAMLC = ocamlc -I $(LABLGTK_DIR) -I $(LABLGTK_MATHVIEW_DIR) -I $(PXP_DIR) -I $(NETSTRING_DIR) -I $(MINIDOM_DIR) -I mlmathview
+OCAMLOPT = ocamlopt -I $(LABLGTK_DIR) -I $(LABLGTK_MATHVIEW_DIR) -I mlgtk_devel -I $(PXP_DIR) -I $(NETSTRING_DIR) -I $(MINIDOM_DIR) -I mlmathview
OCAMLDEP = ocamldep
all: experiment reduction fix_params mmlinterface
theoryParser.ml theoryParser2.ml theoryPp.ml theoryTypeChecker.ml \
cicCooking.ml cicCooking.mli cicFindParameters.ml theoryCache.ml \
fix_params.ml cic2Xml.ml xml.ml uriManager.ml uriManager.mli \
- cicSubstitution.ml cicSubstitution.mli mml.ml \
+ cicSubstitution.ml cicSubstitution.mli \
mmlinterface.ml configuration.ml \
xsltProcessor.ml deannotate.ml cicXPath.ml pxpUriResolver.ml \
annotationParser.ml annotationParser2.ml annotation2Xml.ml \
cicParser3.cmo cicParser2.cmo cicParser.cmo deannotate.cmo \
cicSubstitution.cmo annotationParser2.cmo \
annotationParser.cmo cicCache.cmo cicCooking.cmo cicPp.cmo \
- cicReduction.cmo cicTypeChecker.cmo mml.cmo \
+ cicReduction.cmo cicTypeChecker.cmo \
xml.cmo \
xsltProcessor.cmo cic2Xml.cmo annotation2Xml.cmo \
cicXPath.cmo theory.cmo theoryParser2.cmo theoryParser.cmo \
deannotate.cmx cicSubstitution.cmx annotationParser2.cmx \
annotationParser.cmx cicCache.cmx \
cicCooking.cmx cicPp.cmx cicReduction.cmx \
- cicTypeChecker.cmx mml.cmx \
+ cicTypeChecker.cmx \
xml.cmx xsltProcessor.cmx \
cic2Xml.cmx annotation2Xml.cmx cicXPath.cmx \
theory.cmx theoryParser2.cmx theoryParser.cmx \
mmlinterface: $(MMLINTERFACEOBJS)
$(OCAMLC) -custom -o mmlinterface str.cma unix.cma $(PXPLIBS) dbm.cma \
lablgtk.cma gtkInit.cmo \
+ $(MINIDOM_DIR)/minidom.cmo \
+ $(MINIDOM_DIR)/ominidom.cmo \
$(LABLGTK_MATHVIEW_DIR)/lablgtkmathview.cma \
$(MMLINTERFACEOBJS) \
-cclib "-lstr -L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk \
-rdynamic -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm \
- -lunix -L/usr/local/lib/gtkmathview -lgtkmathview \
- $(LABLGTK_MATHVIEW_DIR)/ml_gtk_mathview.o" \
+ -lunix `gtkmathview-config --libs` \
+ $(LABLGTK_MATHVIEW_DIR)/ml_gtk_mathview.o \
+ $(MINIDOM_DIR)/ml_minidom.o" \
-cclib -lmldbm -cclib -lndbm
mmlinterface.opt: $(MMLINTERFACEOPTOBJS)
$(OCAMLOPT) -o mmlinterface.opt str.cmxa $(PXPLIBSOPT) unix.cmxa \
dbm.cmxa lablgtk.cmxa gtkInit.cmx \
+ $(MINIDOM_DIR)/minidom.cmx \
+ $(MINIDOM_DIR)/ominidom.cmx \
$(LABLGTK_MATHVIEW_DIR)/lablgtkmathview.cmxa \
$(MMLINTERFACEOPTOBJS) \
-cclib "-lstr -L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk \
-rdynamic -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm \
- -lunix -L/usr/local/lib/gtkmathview -lgtkmathview \
- $(LABLGTK_MATHVIEW_DIR)/ml_gtk_mathview.o" \
+ -lunix `gtkmathview-config --libs` \
+ $(LABLGTK_MATHVIEW_DIR)/ml_gtk_mathview.o \
+ $(MINIDOM_DIR)/ml_minidom.o" \
-cclib -lmldbm -cclib -lndbm
fix_params: $(FIX_PARAMSOBJS)
reduction.opt fix_params fix_params.opt mmlinterface \
mmlinterface.opt mmlinterface2 mmlinterface2.opt
-start-xaland:
- java xaland 12345 12346 examples/style/rootcontent.xsl \
- examples/style/annotatedpres.xsl examples/style/theory_content.xsl \
- examples/style/theory_pres.xsl
-
-start-xaland3:
- java xaland 12347 12348 examples/style/rootcontent.xsl \
- examples/style/annotatedpres.xsl examples/style/theory_content.xsl \
- examples/style/theory_pres.xsl
-
-start-http-getter:
- http_getter/http_getter.pl
-
include .depend
+++ /dev/null
-
- ***********************************************************************
-
- A T T E N Z I O N E ! ! !
-
- Quando si usa fix_params.opt, scrivere
-
- find /really_very_local/helm/PARSER/examples
-
- invece di examples
-
- ***********************************************************************
-
- PROBLEMA NON FIXATO CON fix_params
-
- LA SOLUZIONE E'
-
-
-
-Correggere:
-
- examples/coq/SETS/Powerset_facts/Sets_as_an_algebra/setcover_intro.con.xml
-
-aggiungendo paramMode="POSSIBLE"
-
-Un esempio che altrimenti non funziona e':
-
-examples/coq/SETS/Powerset_Classical_facts/Sets_as_an_algebra/Add_covers.con.xml
-
+++ /dev/null
-export LD_LIBRARY_PATH=.:/really_very_local/helm/proveluca/mml-browser/
-export no_proxy=cs.unibo.it
+++ /dev/null
-setenv PATH "/home/projects/java/jdk1.2.2/bin:$PATH"
-setenv CLASSPATH "/really_very_local/helm/java/xalan_1_1/xalan.jar:/really_very_local/helm/java/xalan_1_1/xerces.jar:."
-setenv CLASSPATH "/really_very_local/helm/java/saxon-5.3.2/saxon.jar:$CLASSPATH"
-setenv LD_LIBRARY_PATH ".:/really_very_local/helm/proveluca/mml-browser/"
+++ /dev/null
-setenv PATH "/home/projects/java/jdk1.2.2/bin:$PATH"
-setenv CLASSPATH "/really_very_local/helm/java/xalan_1_2_D01/xalan.jar:/really_very_local/helm/java/xalan_1_2_D01/xerces.jar:."
-setenv CLASSPATH "/really_very_local/helm/java/saxon-5.3.2/saxon.jar:$CLASSPATH"
-setenv LD_LIBRARY_PATH ".:/really_very_local/helm/proveluca/mml-browser/"
#! /bin/sh
-export PATH=/home/cadet/sacerdot/jdk118/bin:$PATH
+# Per (my)Coq 6.3.0
+export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
-export CLASSPATH=/home/cadet/sacerdot/xalan-j_1_2/xalan.jar:/home/cadet/sacerdot/xalan-j_1_2/xerces.jar:.
+# WARNING!!! No "//" in the middle of the path, nor a "/" at the end!!!!
-#export CLASSPATH=$CLASSPATH:/home/lpadovan/helm/java/xalan_1_1/xalan.jar
-#export CLASSPATH=$CLASSPATH:/home/lpadovan/helm/java/xalan_1_1/xerces.jar
-#export CLASSPATH=$CLASSPATH:/home/lpadovan/helm/java/saxon-5.3.2/saxon.jar
+#V6.2
+#export HELM_CONFIGURATION_PREFIX=~/HELM/installation
-# Per (my)Coq 6.3.0
-#export LD_LIBRARY_PATH=/home/lpadovan/helm/usr/lib/:$LD_LIBRARY_PATH
-export LD_LIBRARY_PATH=/usr/local/lib/gtkmathview:$LD_LIBRARY_PATH
+#V7
+export HELM_CONFIGURATION_PREFIX=/home/cadet/sacerdot
+
+export T1LIB_CONFIG=./t1.config
+
+# Stix font
+xset fp
+xset fp+ ~/HELM/installation/fonts/
+xset fp rehash
+++ /dev/null
-(******************************************************************************)
-(* *)
-(* PROJECT HELM *)
-(* *)
-(* Claudio Sacerdoti Coen <sacerdot@cs.unibo.it> *)
-(* 11/04/2000 *)
-(* *)
-(* *)
-(******************************************************************************)
-
-(* functions to parse an XPath to retrieve the annotation *)
-
-exception WrongXPath of string;;
-
-let rec get_annotation_of_inductiveFun f xpath =
- let module C = Cic in
- match (xpath,f) with
- 1::tl,(_,_,ty,_) -> get_annotation_of_term ty tl
- | 2::tl,(_,_,_,te) -> get_annotation_of_term te tl
- | l,_ ->
- raise (WrongXPath (List.fold_right (fun n i -> string_of_int n ^ i) l ""))
-
-and get_annotation_of_coinductiveFun f xpath =
- let module C = Cic in
- match (xpath,f) with
- 1::tl,(_,ty,_) -> get_annotation_of_term ty tl
- | 2::tl,(_,_,te) -> get_annotation_of_term te tl
- | l,_ ->
- raise (WrongXPath (List.fold_right (fun n i -> string_of_int n ^ i) l ""))
-
-and get_annotation_of_inductiveType ty xpath =
- let module C = Cic in
- match (xpath,ty) with
- 1::tl,(_,_,arity,_) -> get_annotation_of_term arity tl
- | n::tl,(_,_,_,cons) when n <= List.length cons + 1 ->
- let (_,ty,_) = List.nth cons (n-2) in
- get_annotation_of_term ty tl
- | l,_ ->
- raise (WrongXPath (List.fold_right (fun n i -> string_of_int n ^ i) l ""))
-
-and get_annotation_of_term term xpath =
- let module C = Cic in
- match (xpath,term) with
- [],C.ARel (_,ann,_,_) -> ann
- | [],C.AVar (_,ann,_) -> ann
- | [],C.AMeta (_,ann,_) -> ann
- | [],C.ASort (_,ann,_) -> ann
- | [],C.AImplicit (_,ann) -> ann
- | [],C.ACast (_,ann,_,_) -> ann
- | 1::tl,C.ACast (_,_,te,_) -> get_annotation_of_term te tl
- | 2::tl,C.ACast (_,_,_,ty) -> get_annotation_of_term ty tl
- | [],C.AProd (_,ann,_,_,_) -> ann
- | 1::tl,C.AProd (_,_,_,so,_) -> get_annotation_of_term so tl
- | 2::tl,C.AProd (_,_,_,_,ta) -> get_annotation_of_term ta tl
- | [],C.ALambda (_,ann,_,_,_) -> ann
- | 1::tl,C.ALambda (_,_,_,so,_) -> get_annotation_of_term so tl
- | 2::tl,C.ALambda (_,_,_,_,ta) -> get_annotation_of_term ta tl
- | [],C.AAppl (_,ann,_) -> ann
- | n::tl,C.AAppl (_,_,l) when n <= List.length l ->
- get_annotation_of_term (List.nth l (n-1)) tl
- | [],C.AConst (_,ann,_,_) -> ann
- | [],C.AAbst (_,ann,_) -> ann
- | [],C.AMutInd (_,ann,_,_,_) -> ann
- | [],C.AMutConstruct (_,ann,_,_,_,_) -> ann
- | [],C.AMutCase (_,ann,_,_,_,_,_,_) -> ann
- | 1::tl,C.AMutCase (_,_,_,_,_,outt,_,_) -> get_annotation_of_term outt tl
- | 2::tl,C.AMutCase (_,_,_,_,_,_,te,_) -> get_annotation_of_term te tl
- | n::tl,C.AMutCase (_,_,_,_,_,_,_,pl) when n <= List.length pl ->
- get_annotation_of_term (List.nth pl (n-1)) tl
- | [],C.AFix (_,ann,_,_) -> ann
- | n::tl,C.AFix (_,_,_,fl) when n <= List.length fl ->
- get_annotation_of_inductiveFun (List.nth fl (n-1)) tl
- | [],C.ACoFix (_,ann,_,_) -> ann
- | n::tl,C.ACoFix (_,_,_,fl) when n <= List.length fl ->
- get_annotation_of_coinductiveFun (List.nth fl (n-1)) tl
- | l,_ ->
- raise (WrongXPath (List.fold_right (fun n i -> string_of_int n ^ i) l ""))
-;;
-
-let get_annotation (annobj,_) xpath =
- let module C = Cic in
- match (xpath,annobj) with
- [],C.ADefinition (_,ann,_,_,_,_) -> ann
- | 1::tl,C.ADefinition (_,_,_,bo,_,_) -> get_annotation_of_term bo tl
- | 2::tl,C.ADefinition (_,_,_,_,ty,_) -> get_annotation_of_term ty tl
- | [],C.AAxiom (_,ann,_,_,_) -> ann
- | 1::tl,C.AAxiom (_,_,_,ty,_) -> get_annotation_of_term ty tl
- | [],C.AVariable (_,ann,_,_) -> ann
- | 1::tl,C.AVariable (_,_,_,ty) -> get_annotation_of_term ty tl
- | [],C.ACurrentProof (_,ann,_,_,_,_) -> ann
- | n::tl,C.ACurrentProof (_,ann,_,conjs,_,_) when n <= List.length conjs ->
- get_annotation_of_term (snd (List.nth conjs (n-1))) tl
- | n::tl,C.ACurrentProof (_,ann,_,conjs,bo,_) when n = List.length conjs + 1 ->
- get_annotation_of_term bo tl
- | n::tl,C.ACurrentProof (_,ann,_,conjs,_,ty) when n = List.length conjs + 2 ->
- get_annotation_of_term ty tl
- | [],C.AInductiveDefinition (_,ann,_,_,_) -> ann
- | n::tl,C.AInductiveDefinition (_,_,tys,_,_) when n <= List.length tys ->
- get_annotation_of_inductiveType (List.nth tys (n-1)) tl
- | l,_ ->
- raise (WrongXPath (List.fold_right (fun n i -> string_of_int n ^ i) l ""))
-;;
(******************************************************************************)
(* this should be the only hard coded constant *)
-let filename = "/home/cadet/sacerdot/local/etc/helm/configuration.xml";;
+let filename =
+ let prefix =
+ try
+ Sys.getenv "HELM_CONFIGURATION_PREFIX"
+ with
+ Not_found -> ""
+ in
+ prefix ^ "/local/etc/helm/configuration.xml";;
exception Warnings;;
uris map
;;
+exception PerlGetterNotResponding;;
+
let update () =
let module C = Configuration in
let fd = open_in C.servers_file in
Dbm.opendbm C.uris_dbm [Dbm.Dbm_wronly ; Dbm.Dbm_create] 0o660
in
MapOfStrings.iter (fun uri url -> Dbm.add dbm uri url) urls_of_uris ;
- Dbm.close dbm
+ Dbm.close dbm ;
+ (* Inform also the Perl-getter *)
+ if Sys.command ("wget -O /dev/null http://localhost:8081/update") <> 0
+ then
+ raise PerlGetterNotResponding ;
;;
(* url_of_uri : uri -> url *)
let module U = UriManager in
get_file
(U.uri_of_string
- (Str.replace_first (Str.regexp "\.ann$") ""
- (Str.replace_first (Str.regexp "\.types$") "" (U.string_of_uri uri))))
+ (Str.replace_first (Str.regexp "\.types$") ""
+ (Str.replace_first (Str.regexp "\.ann$") "" (U.string_of_uri uri))))
;;
(* get_ann : uri -> filename *)
+++ /dev/null
-#!/usr/bin/perl
-
-# next require defines: $helm_dir, $html_link
-# LUCA - 12 sep 2000
-# require "/usr/lib/helm/configuration.pl";
-require "/home/cadet/sacerdot/local/lib/helm/configuration.pl";
-use HTTP::Daemon;
-use HTTP::Status;
-use HTTP::Request;
-use LWP::UserAgent;
-use DB_File;
-
-my $cont = "";
-my $d = new HTTP::Daemon LocalPort => 8081;
-tie(%map, 'DB_File', 'urls_of_uris.db', O_RDONLY, 0664);
-print "Please contact me at: <URL:", $d->url, ">\n";
-print "helm_dir: $helm_dir\n";
-$SIG{CHLD} = "IGNORE"; # do not accumulate defunct processes
-while (my $c = $d->accept) {
- if (fork() == 0) {
- while (my $r = $c->get_request) {
- #CSC: mancano i controlli di sicurezza
-
- $cont = "";
- my $cicuri = $r->url;
- $cicuri =~ s/^[^?]*\?url=(.*)/$1/;
- print "*".$r->url."\n";
- my $http_method = $r->method;
- my $http_path = $r->url->path;
- if ($http_method eq 'GET' and $http_path eq "/get") {
- my $filename = $cicuri;
- $filename =~ s/cic:(.*)/$1/;
- $filename =~ s/theory:(.*)/$1/;
- $filename = $helm_dir.$filename.".xml";
- my $resolved = $map{$cicuri};
- print "$cicuri ==> $resolved ($filename)\n";
- if (stat($filename)) {
- print "Using local copy\n";
- open(FD, $filename);
- while(<FD>) { $cont .= $_; }
- close(FD);
- my $res = new HTTP::Response;
- $res->content($cont);
- $c->send_response($res);
- } else {
- print "Downloading\n";
- $ua = LWP::UserAgent->new;
- $request = HTTP::Request->new(GET => "$resolved");
- $response = $ua->request($request, \&callback);
-
- print "Storing file\n";
- open(FD, $filename);
- print FD $cont;
- close(FD);
-
- my $res = new HTTP::Response;
- $res->content($cont);
- $c->send_response($res);
- }
- } elsif ($http_method eq 'GET' and $http_path eq "/annotate") {
- my $do_annotate = ($cicuri =~ /\.ann$/);
- my $target_to_annotate = $cicuri;
- $target_to_annotate =~ s/(.*)\.ann$/$1/ if $do_annotate;
- my $filename = $cicuri;
- $filename =~ s/cic:(.*)/$1/;
- $filename =~ s/theory:(.*)/$1/;
- my $filename_target = $helm_dir.$filename if $do_annotate;
- $filename = $helm_dir.$filename.".xml";
- $filename_target =~ s/(.*)\.ann$/$1.xml/ if $do_annotate;
- my $resolved = $map{$cicuri};
- my $resolved_target = $map{$target_to_annotate} if $do_annotate;
- if ($do_annotate) {
- print "($cicuri, $target_to_annotate) ==> ($resolved + $resolved_target) ($filename)\n";
- } else {
- print "$cicuri ==> $resolved ($filename)\n";
- }
-
- # Retrieves the annotation
-
- if (stat($filename)) {
- print "Using local copy for the annotation\n";
- open(FD, $filename);
- while(<FD>) { $cont .= $_; }
- close(FD);
- } else {
- print "Downloading the annotation\n";
- $ua = LWP::UserAgent->new;
- $request = HTTP::Request->new(GET => "$resolved");
- $response = $ua->request($request, \&callback);
-
- print "Storing file for the annotation\n";
- open(FD, $filename);
- print FD $cont;
- close(FD);
- }
- my $annotation = $cont;
-
- # Retrieves the target to annotate
-
- $cont = "";
- if ($do_annotate) {
- if (stat($filename_target)) {
- print "Using local copy for the file to annotate\n";
- open(FD, $filename_target);
- while(<FD>) { $cont .= $_; }
- close(FD);
- } else {
- print "Downloading the file to annotate\n";
- $ua = LWP::UserAgent->new;
- $request = HTTP::Request->new(GET => "$resolved_target");
- $response = $ua->request($request, \&callback);
-
- print "Storing file for the file to annotate\n";
- open(FD, $filename_target);
- print FD $cont;
- close(FD);
- }
- }
- my $target = $cont;
-
- # Merging the annotation and the target
-
- $target =~ s/<\?xml [^?]*\?>//sg;
- $target =~ s/<!DOCTYPE [^>]*>//sg;
- $annotation =~ s/<\?xml [^?]*\?>//sg;
- $annotation =~ s/<!DOCTYPE [^>]*>//sg;
- my $merged = <<EOT;
-<?xml version="1.0" encoding="UTF-8"?>
-<cicxml uri="$target_to_annotate">
-$target
-$annotation
-</cicxml>
-EOT
-
- # Answering the client
-
- my $res = new HTTP::Response;
- $res->content($merged);
- $c->send_response($res);
- } elsif ($http_method eq 'GET' and $http_path eq "/getwithtypes") {
- my $do_annotate = ($cicuri =~ /\.types$/);
- my $target_to_annotate = $cicuri;
- $target_to_annotate =~ s/(.*)\.types$/$1/ if $do_annotate;
- my $filename = $cicuri;
- $filename =~ s/cic:(.*)/$1/;
- $filename =~ s/theory:(.*)/$1/;
- my $filename_target = $helm_dir.$filename if $do_annotate;
- $filename = $helm_dir.$filename.".xml";
- $filename_target =~ s/(.*)\.types$/$1.xml/ if $do_annotate;
- my $resolved = $map{$cicuri};
- my $resolved_target = $map{$target_to_annotate} if $do_annotate;
- if ($do_annotate) {
- print "GETWITHTYPES!!\n";
- print "($cicuri, $target_to_annotate) ==> ($resolved + $resolved_target) ($filename)\n";
- } else {
- print "$cicuri ==> $resolved ($filename)\n";
- }
-
- # Retrieves the annotation
-
- if (stat($filename)) {
- print "Using local copy for the types\n";
- open(FD, $filename);
- while(<FD>) { $cont .= $_; }
- close(FD);
- } else {
- print "Downloading the types\n";
- $ua = LWP::UserAgent->new;
- $request = HTTP::Request->new(GET => "$resolved");
- $response = $ua->request($request, \&callback);
-
- print "Storing file for the types\n";
- open(FD, $filename);
- print FD $cont;
- close(FD);
- }
- my $annotation = $cont;
-
- # Retrieves the target to annotate
-
- $cont = "";
- my $target;
- if ($do_annotate) {
- if (stat($filename_target)) {
- print "Using local copy for the file to type\n";
- open(FD, $filename_target);
- while(<FD>) { $cont .= $_; }
- close(FD);
- } else {
- print "Downloading the file to type\n";
- $ua = LWP::UserAgent->new;
- $request = HTTP::Request->new(GET => "$resolved_target");
- $response = $ua->request($request, \&callback);
-
- print "Storing file for the file to type\n";
- open(FD, $filename_target);
- print FD $cont;
- close(FD);
- }
- $target = $cont;
- } else {
- $target = $annotation;
- $annotation = "";
- }
-
- # Merging the annotation and the target
-
- $target =~ s/<\?xml [^?]*\?>//sg;
- $target =~ s/<!DOCTYPE [^>]*>//sg;
- $annotation =~ s/<\?xml [^?]*\?>//sg;
- $annotation =~ s/<!DOCTYPE [^>]*>//sg;
- my $merged = <<EOT;
-<?xml version="1.0" encoding="UTF-8"?>
-<cicxml uri="$target_to_annotate">
-$target
-<ALLTYPES>
-$annotation
-</ALLTYPES>
-</cicxml>
-EOT
-
- # Answering the client
-
- my $res = new HTTP::Response;
- $res->content($merged);
- $c->send_response($res);
- } elsif ($http_method eq 'GET' and $http_path eq "/getdtd") {
- my $filename = $cicuri;
- $filename = $helm_dir."/dtd/".$filename;
- print "DTD: $cicuri ==> ($filename)\n";
- if (stat($filename)) {
- print "Using local copy\n";
- open(FD, $filename);
- while(<FD>) { $cont .= $_; }
- close(FD);
- my $res = new HTTP::Response;
- $res->content($cont);
- $c->send_response($res);
- } else {
- die "Could not find DTD!";
- }
- } elsif ($http_method eq 'GET' and $http_path eq "/conf") {
- my $quoted_html_link = $html_link;
- $quoted_html_link =~ s/&/&/g;
- $quoted_html_link =~ s/</</g;
- $quoted_html_link =~ s/>/>/g;
- $quoted_html_link =~ s/'/'/g;
- $quoted_html_link =~ s/"/"/g;
- print "Configuration requested, returned #$quoted_html_link#\n";
- $cont = "<?xml version=\"1.0\"?><html_link>$quoted_html_link</html_link>";
- my $res = new HTTP::Response;
- $res->content($cont);
- $c->send_response($res);
- } else {
- print "INVALID REQUEST!!!!!\n";
- $c->send_error(RC_FORBIDDEN)
- }
- }
- $c->close;
- undef($c);
- print "\nCONNECTION CLOSED\n\n";
- exit;
- } # fork
-}
-
-#================================
-
-sub callback
-{
- my ($data) = @_;
- $cont .= $data;
-}
+++ /dev/null
-#!/usr/bin/perl
-
-# next require defines: $helm_dir, $html_link
-require "/usr/lib/helm/configuration.pl";
-use HTTP::Daemon;
-use HTTP::Status;
-use HTTP::Request;
-use LWP::UserAgent;
-use DB_File;
-
-my $cont = "";
-my $d = new HTTP::Daemon LocalPort => 8081;
-tie(%map, 'DB_File', 'urls_of_uris.db', O_RDONLY, 0664);
-print "Please contact me at: <URL:", $d->url, ">\n";
-print "helm_dir: $helm_dir\n";
-$SIG{CHLD} = "IGNORE"; # do not accumulate defunct processes
-while (my $c = $d->accept) {
- if (fork() == 0) {
- while (my $r = $c->get_request) {
- #CSC: mancano i controlli di sicurezza
-
- $cont = "";
- my $cicuri = $r->url;
- $cicuri =~ s/^[^?]*\?url=(.*)/$1/;
- print "*".$r->url."\n";
- my $http_method = $r->method;
- my $http_path = $r->url->path;
- if ($http_method eq 'GET' and $http_path eq "/get") {
- my $filename = $cicuri;
- $filename =~ s/cic:(.*)/$1/;
- $filename =~ s/theory:(.*)/$1/;
- $filename = $helm_dir.$filename.".xml";
- my $resolved = $map{$cicuri};
- print "$cicuri ==> $resolved ($filename)\n";
- if (stat($filename)) {
- print "Using local copy\n";
- open(FD, $filename);
- while(<FD>) { $cont .= $_; }
- close(FD);
- my $res = new HTTP::Response;
- $res->content($cont);
- $c->send_response($res);
- } else {
- print "Downloading\n";
- $ua = LWP::UserAgent->new;
- $request = HTTP::Request->new(GET => "$resolved");
- $response = $ua->request($request, \&callback);
-
- print "Storing file\n";
- open(FD, $filename);
- print FD $cont;
- close(FD);
-
- my $res = new HTTP::Response;
- $res->content($cont);
- $c->send_response($res);
- }
- } elsif ($http_method eq 'GET' and $http_path eq "/annotate") {
- my $do_annotate = ($cicuri =~ /\.ann$/);
- my $target_to_annotate = $cicuri;
- $target_to_annotate =~ s/(.*)\.ann$/$1/ if $do_annotate;
- my $filename = $cicuri;
- $filename =~ s/cic:(.*)/$1/;
- $filename =~ s/theory:(.*)/$1/;
- my $filename_target = $helm_dir.$filename if $do_annotate;
- $filename = $helm_dir.$filename.".xml";
- $filename_target =~ s/(.*)\.ann$/$1.xml/ if $do_annotate;
- my $resolved = $map{$cicuri};
- my $resolved_target = $map{$target_to_annotate} if $do_annotate;
- if ($do_annotate) {
- print "($cicuri, $target_to_annotate) ==> ($resolved + $resolved_target) ($filename)\n";
- } elsif ($http_method eq 'GET' and $http_path eq "/getwithtypes") {
- my $do_annotate = ($cicuri =~ /\.types$/);
- my $target_to_annotate = $cicuri;
- $target_to_annotate =~ s/(.*)\.types$/$1/ if $do_annotate;
- my $filename = $cicuri;
- $filename =~ s/cic:(.*)/$1/;
- $filename =~ s/theory:(.*)/$1/;
- my $filename_target = $helm_dir.$filename if $do_annotate;
- $filename = $helm_dir.$filename.".xml";
- $filename_target =~ s/(.*)\.types$/$1.xml/ if $do_annotate;
- my $resolved = $map{$cicuri};
- my $resolved_target = $map{$target_to_annotate} if $do_annotate;
- if ($do_annotate) {
- print "($cicuri, $target_to_annotate) ==> ($resolved + $resolved_target) ($filename)\n";
- } else {
- print "$cicuri ==> $resolved ($filename)\n";
- }
-
- # Retrieves the annotation
-
- if (stat($filename)) {
- print "Using local copy for the types\n";
- open(FD, $filename);
- while(<FD>) { $cont .= $_; }
- close(FD);
- } else {
- print "Downloading the types\n";
- $ua = LWP::UserAgent->new;
- $request = HTTP::Request->new(GET => "$resolved");
- $response = $ua->request($request, \&callback);
-
- print "Storing file for the types\n";
- open(FD, $filename);
- print FD $cont;
- close(FD);
- }
- my $annotation = $cont;
-
- # Retrieves the target to annotate
-
- $cont = "";
- if ($do_annotate) {
- if (stat($filename_target)) {
- print "Using local copy for the file to type\n";
- open(FD, $filename_target);
- while(<FD>) { $cont .= $_; }
- close(FD);
- } else {
- print "Downloading the file to type\n";
- $ua = LWP::UserAgent->new;
- $request = HTTP::Request->new(GET => "$resolved_target");
- $response = $ua->request($request, \&callback);
-
- print "Storing file for the file to type\n";
- open(FD, $filename_target);
- print FD $cont;
- close(FD);
- }
- }
- my $target = $cont;
-
- # Merging the annotation and the target
-
- $target =~ s/<\?xml [^?]*\?>//sg;
- $target =~ s/<!DOCTYPE [^>]*>//sg;
- $annotation =~ s/<\?xml [^?]*\?>//sg;
- $annotation =~ s/<!DOCTYPE [^>]*>//sg;
- my $merged = <<EOT;
-<?xml version="1.0" encoding="UTF-8"?>
-<cicxml uri="$target_to_annotate">
-$target
-<ALLTYPES>
-$annotation
-</ALLTYPES>
-</cicxml>
-EOT
-
- # Answering the client
-
- my $res = new HTTP::Response;
- $res->content($merged);
- $c->send_response($res);
- } elsif ($http_method eq 'GET' and $http_path eq "/getdtd") {
- my $filename = $cicuri;
- $filename = $helm_dir."/dtd/".$filename;
- print "DTD: $cicuri ==> ($filename)\n";
- if (stat($filename)) {
- print "Using local copy\n";
- open(FD, $filename);
- while(<FD>) { $cont .= $_; }
- close(FD);
- my $res = new HTTP::Response;
- $res->content($cont);
- $c->send_response($res);
- } else {
- die "Could not find DTD!";
- }
- } elsif ($http_method eq 'GET' and $http_path eq "/conf") {
- my $quoted_html_link = $html_link;
- $quoted_html_link =~ s/&/&/g;
- $quoted_html_link =~ s/</</g;
- $quoted_html_link =~ s/>/>/g;
- $quoted_html_link =~ s/'/'/g;
- $quoted_html_link =~ s/"/"/g;
- print "Configuration requested, returned #$quoted_html_link#\n";
- $cont = "<?xml version=\"1.0\"?><html_link>$quoted_html_link</html_link>";
- my $res = new HTTP::Response;
- $res->content($cont);
- $c->send_response($res);
- } else {
- print "INVALID REQUEST!!!!!\n";
- $c->send_error(RC_FORBIDDEN)
- }
- }
- $c->close;
- undef($c);
- print "\nCONNECTION CLOSED\n\n";
- exit;
- } # fork
-}
-
-#================================
-
-sub callback
-{
- my ($data) = @_;
- $cont .= $data;
-}
#! /bin/sh
-export PATH=$PATH:/opt/java/jdk118/bin/
+# WARNING!!! No "//" in the middle of the path, nor a "/" at the end!!!!
-export CLASSPATH=.
-export CLASSPATH=$CLASSPATH:/home/lpadovan/helm/java/xalan_1_1/xalan.jar
-export CLASSPATH=$CLASSPATH:/home/lpadovan/helm/java/xalan_1_1/xerces.jar
-export CLASSPATH=$CLASSPATH:/home/lpadovan/helm/java/saxon-5.3.2/saxon.jar
+#V6.2
# Per (my)Coq 6.3.0
export LD_LIBRARY_PATH=/home/lpadovan/helm/usr/lib/:$LD_LIBRARY_PATH
-export LD_LIBRARY_PATH=/usr/local/lib/gtkmathview:$LD_LIBRARY_PATH
+export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH
+
+#export T1LIB_CONFIG=./t1.config
+
+# Stix font
+#xset fp
+#xset fp+ ~/HELM/installation/fonts/
+#xset fp rehash
+++ /dev/null
-SIGSEGV received at bfffeacc in /home/cadet/sacerdot/jdk118/lib/linux/native_threads/libjitc.so. Processing terminated
-java full version "JDK 1.1.8 IBM build l118-19991013 (JIT enabled: jitc)"
-args: /home/cadet/sacerdot/jdk118/bin/linux/native_threads/java xaland 12345 12346 examples/style/annotatedcont.xsl examples/style/annotatedpres.xsl examples/style/theory_content.xsl examples/style/theory_pres.xsl
-
-Operating Environment
----------------------
-Host : cadet.
-OS Level : 2.2.14-5.0smp.#1 SMP Tue Mar 7 21:01:40 EST 2000
-glibc Version : 2.1.3
-No. of Procs : 1
-Memory Info:
- total: used: free: shared: buffers: cached:
-Mem: 64503808 55078912 9424896 36126720 1527808 18075648
-Swap: 133885952 7442432 126443520
-MemTotal: 62992 kB
-MemFree: 9204 kB
-MemShared: 35280 kB
-Buffers: 1492 kB
-Cached: 17652 kB
-BigTotal: 0 kB
-BigFree: 0 kB
-SwapTotal: 130748 kB
-SwapFree: 123480 kB
-
-Application Environment
------------------------
-Signal Handlers -
- SIGQUIT : ignored
- SIGILL : sysThreadIDump (libjava.so)
- SIGABRT : sysThreadIDump (libjava.so)
- SIGFPE : sysThreadIDump (libjava.so)
- SIGBUS : sysThreadIDump (libjava.so)
- SIGSEGV : sysThreadIDump (libjava.so)
- SIGPIPE : ignored
- SIGUSR1 : doSuspendLoop (libjava.so)
-
-Environment Variables -
- LESSOPEN=|/usr/bin/lesspipe.sh %s
- SAL_DO_NOT_USE_INVERT50=true
- HISTSIZE=1000
- HOSTNAME=cadet
- LOGNAME=sacerdot
- VISUAL=/usr/bin/emacs
- LD_LIBRARY_PATH=/home/cadet/sacerdot/jdk118/lib/linux/native_threads:/usr/local/lib/gtkmathview:/home/pauillac/coq3/sacerdot/rvplayer5.0
- MAIL=/var/spool/mail/sacerdot
- PAGER=less
- CLASSPATH=.:/usr/share/java/bsf.jar:/usr/share/java/xalan.jar:/usr/share/java/xerces.jar:/home/cadet/sacerdot/jdk118/classes:/home/cadet/sacerdot/jdk118/lib/classes.jar:/home/cadet/sacerdot/jdk118/lib/rt.jar:/home/cadet/sacerdot/jdk118/lib/i18n.jar:/home/cadet/sacerdot/jdk118/lib/classes.zip
- LESSCHARDEF=8bcccbcc18b95.33b.
- ARCH=i586
- PROMPT=cad:
- TERM=xterm
- HOSTTYPE=i386
- PATH=/home/cadet/sacerdot/jdk118/bin:/home/pauillac/coq3/sacerdot/bin/i586:/home/pauillac/coq3/sacerdot/bin:/usr/bin/X11:/usr/bin:/usr/local/bin:/usr/ucb:/usr/bin:/bin:/usr/sbin:/sbin:/usr/games:.
- PRINTER=hp11rv
- HOME=/home/pauillac/coq3/sacerdot
- SHELL=/bin/sh
- ELANLIB=/home/pauillac/coq3/sacerdot/elan-dist.3.00/elanlib
- PILOTPORT=/dev/ttyS1
- TEXINPUTS=:.:/home/pauillac/coq3/sacerdot/lib/latex/inputs:/usr/local/lib/tex/inputs3
- USER=sacerdot
- ENSCRIPT=-Php11rvl -2 -r -B -L66 -k -h
- MANPATH=/usr/man/preformat:/usr/man:/usr/X11/man:/usr/local/man:/home/pauillac/coq3/sacerdot/man
- LESS=-m -e -q -d
- JAVA_HOME=/home/cadet/sacerdot/jdk118
- DISPLAY=:0.0
- MAKEFLAGS=
- HOST=cadet
- OSTYPE=Linux
- NNTPSERVER=news-rocq.inria.fr
- WINDOWID=54525966
- SHLVL=4
- MAKELEVEL=1
- LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:
- EDITOR=/usr/bin/emacs
- MFLAGS=
- CVSROOT=/net/pauillac/constr/ARCHIVE
-
-
-Current Thread Details
-----------------------
- "main" (TID:0x402e62d8, sys_thread_t:0x804abe0)
- Native Thread State: ThreadID: 00000400 Reuse: 1 USER PRIMORDIAL RUNNING
- Native Stack Data : base: bffff47c pointer bffbf96c used(260880) free(-13072)
- ----- Monitors held -----
- ----- Native stack -----
-
-
-
-
-
-
-
-
- ??
- ??
- ??
-
- java_lang_Compiler_start
-
- __irem_trap6
- ------ Java stack ------ () prio=5 *current thread*
- org.apache.xalan.xslt.XSLTEngineImpl.createStylesheetRoot(XSLTEngineImpl.java:715)
- org.apache.xalan.xslt.XSLTEngineImpl.processStylesheet(Compiled Code)
- org.apache.xalan.xslt.XSLTEngineImpl.processStylesheet(Compiled Code)
- xaland.main(Compiled Code)
-----------------------------------------------------------------------
-
-
-Total Thread Count: 3
-Active Thread Count: 3
-JNI Thread Count: 0
-
-Full thread dump:
- "Async Garbage Collector" (TID:0x402e6238, sys_thread_t:0x8091f50)
- Native Thread State: ThreadID: 00000803 Reuse: 1 DAEMON MONITOR WAIT
- Native Stack Data : base: bf5ffd84 pointer bf5ffb78 used(524) free(247284)
- ----- Monitors held -----
- ----- Native stack -----
- sysMonitorWait
- sysThreadSleep
- threadSleep
- SetOrigArgs
- sysThread_shell
- pthread_detach
- __clone
- ------ Java stack ------ () prio=1
-----------------------------------------------------------------------
-
- "Finalizer thread" (TID:0x402e6288, sys_thread_t:0x8091cd0)
- Native Thread State: ThreadID: 00000402 Reuse: 1 DAEMON MONITOR WAIT
- Native Stack Data : base: bf7ffd84 pointer bf7ffbec used(408) free(247400)
- ----- Monitors held -----
- ----- Native stack -----
- sysMonitorWait - waiting on Finalize me queue lock
- finalizeOnExit
- sysThread_shell
- pthread_detach
- __clone
- ------ Java stack ------ () prio=1
-----------------------------------------------------------------------
-
- "main" (TID:0x402e62d8, sys_thread_t:0x804abe0)
- Native Thread State: ThreadID: 00000400 Reuse: 1 USER PRIMORDIAL RUNNING
- Native Stack Data : base: bffff47c pointer bffbf960 used(260892) free(-13084)
- ----- Monitors held -----
- ----- Native stack -----
-
-
-
-
-
-
-
-
- ??
- ??
- ??
-
- java_lang_Compiler_start
-
- __irem_trap6
- ------ Java stack ------ () prio=5 *current thread*
- org.apache.xalan.xslt.XSLTEngineImpl.createStylesheetRoot(XSLTEngineImpl.java:715)
- org.apache.xalan.xslt.XSLTEngineImpl.processStylesheet(Compiled Code)
- org.apache.xalan.xslt.XSLTEngineImpl.processStylesheet(Compiled Code)
- xaland.main(Compiled Code)
-----------------------------------------------------------------------
-
-
-System Monitor Status
----------------------
- JIT monitor: unowned.
- JIT monitor: unowned.
- JIT monitor: unowned.
- JIT monitor: unowned.
- JIT monitor: unowned.
- Thread queue lock: unowned.
- Name and type hash table lock: unowned.
- String intern lock: unowned.
- JNI pinning lock: unowned.
- JNI global reference lock: unowned.
- Zip lock: unowned.
- BinClass lock: unowned.
- Class loading lock: unowned.
- Java stack lock: unowned.
- Code rewrite lock: unowned.
- Heap Lock: unowned.
- Has finalization queue lock: unowned.
- Finalize me queue lock: unowned.
- Integer lock access-lock: unowned.
- Monitor cache lock: unowned.
- Monitor registry: unowned.
-
-Object Monitor Status
----------------------
+++ /dev/null
-SIGSEGV received at bfffeacc in /home/cadet/sacerdot/jdk118/lib/linux/native_threads/libjitc.so. Processing terminated
-java full version "JDK 1.1.8 IBM build l118-19991013 (JIT enabled: jitc)"
-args: /home/cadet/sacerdot/jdk118/bin/linux/native_threads/java xaland 12345 12346 examples/style/annotatedcont.xsl examples/style/annotatedpres.xsl examples/style/theory_content.xsl examples/style/theory_pres.xsl
-
-Operating Environment
----------------------
-Host : cadet.
-OS Level : 2.2.14-5.0smp.#1 SMP Tue Mar 7 21:01:40 EST 2000
-glibc Version : 2.1.3
-No. of Procs : 1
-Memory Info:
- total: used: free: shared: buffers: cached:
-Mem: 64503808 55672832 8830976 36130816 1536000 18612224
-Swap: 133885952 7442432 126443520
-MemTotal: 62992 kB
-MemFree: 8624 kB
-MemShared: 35284 kB
-Buffers: 1500 kB
-Cached: 18176 kB
-BigTotal: 0 kB
-BigFree: 0 kB
-SwapTotal: 130748 kB
-SwapFree: 123480 kB
-
-Application Environment
------------------------
-Signal Handlers -
- SIGQUIT : ignored
- SIGILL : sysThreadIDump (libjava.so)
- SIGABRT : sysThreadIDump (libjava.so)
- SIGFPE : sysThreadIDump (libjava.so)
- SIGBUS : sysThreadIDump (libjava.so)
- SIGSEGV : sysThreadIDump (libjava.so)
- SIGPIPE : ignored
- SIGUSR1 : doSuspendLoop (libjava.so)
-
-Environment Variables -
- LESSOPEN=|/usr/bin/lesspipe.sh %s
- SAL_DO_NOT_USE_INVERT50=true
- HISTSIZE=1000
- HOSTNAME=cadet
- LOGNAME=sacerdot
- VISUAL=/usr/bin/emacs
- LD_LIBRARY_PATH=/home/cadet/sacerdot/jdk118/lib/linux/native_threads:/usr/local/lib/gtkmathview:/home/pauillac/coq3/sacerdot/rvplayer5.0
- MAIL=/var/spool/mail/sacerdot
- PAGER=less
- CLASSPATH=.:/usr/share/java/bsf.jar:/usr/share/java/xalan.jar:/usr/share/java/xerces.jar:/home/cadet/sacerdot/jdk118/classes:/home/cadet/sacerdot/jdk118/lib/classes.jar:/home/cadet/sacerdot/jdk118/lib/rt.jar:/home/cadet/sacerdot/jdk118/lib/i18n.jar:/home/cadet/sacerdot/jdk118/lib/classes.zip
- LESSCHARDEF=8bcccbcc18b95.33b.
- ARCH=i586
- PROMPT=cad:
- TERM=xterm
- HOSTTYPE=i386
- PATH=/home/cadet/sacerdot/jdk118/bin:/home/pauillac/coq3/sacerdot/bin/i586:/home/pauillac/coq3/sacerdot/bin:/usr/bin/X11:/usr/bin:/usr/local/bin:/usr/ucb:/usr/bin:/bin:/usr/sbin:/sbin:/usr/games:.
- PRINTER=hp11rv
- HOME=/home/pauillac/coq3/sacerdot
- SHELL=/bin/sh
- ELANLIB=/home/pauillac/coq3/sacerdot/elan-dist.3.00/elanlib
- PILOTPORT=/dev/ttyS1
- TEXINPUTS=:.:/home/pauillac/coq3/sacerdot/lib/latex/inputs:/usr/local/lib/tex/inputs3
- USER=sacerdot
- ENSCRIPT=-Php11rvl -2 -r -B -L66 -k -h
- MANPATH=/usr/man/preformat:/usr/man:/usr/X11/man:/usr/local/man:/home/pauillac/coq3/sacerdot/man
- LESS=-m -e -q -d
- JAVA_HOME=/home/cadet/sacerdot/jdk118
- DISPLAY=:0.0
- MAKEFLAGS=
- HOST=cadet
- OSTYPE=Linux
- NNTPSERVER=news-rocq.inria.fr
- WINDOWID=54525966
- SHLVL=4
- MAKELEVEL=1
- LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:
- EDITOR=/usr/bin/emacs
- MFLAGS=
- CVSROOT=/net/pauillac/constr/ARCHIVE
-
-
-Current Thread Details
-----------------------
- "main" (TID:0x402e62d8, sys_thread_t:0x804abe0)
- Native Thread State: ThreadID: 00000400 Reuse: 1 USER PRIMORDIAL RUNNING
- Native Stack Data : base: bffff47c pointer bffbf96c used(260880) free(-13072)
- ----- Monitors held -----
- ----- Native stack -----
-
-
-
-
-
-
-
-
- ??
- ??
- ??
-
- java_lang_Compiler_start
-
- __irem_trap6
- ------ Java stack ------ () prio=5 *current thread*
- org.apache.xalan.xslt.XSLTEngineImpl.createStylesheetRoot(XSLTEngineImpl.java:715)
- org.apache.xalan.xslt.XSLTEngineImpl.processStylesheet(Compiled Code)
- org.apache.xalan.xslt.XSLTEngineImpl.processStylesheet(Compiled Code)
- xaland.main(Compiled Code)
-----------------------------------------------------------------------
-
-
-Total Thread Count: 3
-Active Thread Count: 3
-JNI Thread Count: 0
-
-Full thread dump:
- "Async Garbage Collector" (TID:0x402e6238, sys_thread_t:0x8091f50)
- Native Thread State: ThreadID: 00000803 Reuse: 1 DAEMON MONITOR WAIT
- Native Stack Data : base: bf5ffd84 pointer bf5ffb78 used(524) free(247284)
- ----- Monitors held -----
- ----- Native stack -----
- sysMonitorWait
- sysThreadSleep
- threadSleep
- SetOrigArgs
- sysThread_shell
- pthread_detach
- __clone
- ------ Java stack ------ () prio=1
-----------------------------------------------------------------------
-
- "Finalizer thread" (TID:0x402e6288, sys_thread_t:0x8091cd0)
- Native Thread State: ThreadID: 00000402 Reuse: 1 DAEMON MONITOR WAIT
- Native Stack Data : base: bf7ffd84 pointer bf7ffbec used(408) free(247400)
- ----- Monitors held -----
- ----- Native stack -----
- sysMonitorWait - waiting on Finalize me queue lock
- finalizeOnExit
- sysThread_shell
- pthread_detach
- __clone
- ------ Java stack ------ () prio=1
-----------------------------------------------------------------------
-
- "main" (TID:0x402e62d8, sys_thread_t:0x804abe0)
- Native Thread State: ThreadID: 00000400 Reuse: 1 USER PRIMORDIAL RUNNING
- Native Stack Data : base: bffff47c pointer bffbf960 used(260892) free(-13084)
- ----- Monitors held -----
- ----- Native stack -----
-
-
-
-
-
-
-
-
- ??
- ??
- ??
-
- java_lang_Compiler_start
-
- __irem_trap6
- ------ Java stack ------ () prio=5 *current thread*
- org.apache.xalan.xslt.XSLTEngineImpl.createStylesheetRoot(XSLTEngineImpl.java:715)
- org.apache.xalan.xslt.XSLTEngineImpl.processStylesheet(Compiled Code)
- org.apache.xalan.xslt.XSLTEngineImpl.processStylesheet(Compiled Code)
- xaland.main(Compiled Code)
-----------------------------------------------------------------------
-
-
-System Monitor Status
----------------------
- JIT monitor: unowned.
- JIT monitor: unowned.
- JIT monitor: unowned.
- JIT monitor: unowned.
- JIT monitor: unowned.
- Thread queue lock: unowned.
- Name and type hash table lock: unowned.
- String intern lock: unowned.
- JNI pinning lock: unowned.
- JNI global reference lock: unowned.
- Zip lock: unowned.
- BinClass lock: unowned.
- Class loading lock: unowned.
- Java stack lock: unowned.
- Code rewrite lock: unowned.
- Heap Lock: unowned.
- Has finalization queue lock: unowned.
- Finalize me queue lock: unowned.
- Integer lock access-lock: unowned.
- Monitor cache lock: unowned.
- Monitor registry: unowned.
-
-Object Monitor Status
----------------------
+++ /dev/null
-#!/usr/bin/perl
-
-while(<STDIN>)
-{
- s/→/->/g;
- s/⇒/=>/g;
- s/λ/\\/g;
- s/Π/||/g;
- print;
-}
+++ /dev/null
-#!/bin/bash
-
-echo `find . -name "*.xml"` | /really_very_local/helm/PARSER/coq_like_pretty_printer/uris_of_filenames.pl > index.txt
+++ /dev/null
-<?xml encoding="ISO-8859-1"?>
-
-<!-- CSC: mio DTD semplificatissimo per la parte presentation di MML -->
-
-<!-- I seguenti presentation elements sono stati tralasciati ;-)
-mspace
-ms
-<mchar>
-<ms>
-mfrac
-msqrt
-mroot
-mstyle
-merror
-mpadded
-mphantom
-msub
-msup
-msubsup
-munder
-mover
-munderover
-mmultiscripts
-mtable
-mtr
-mtd
-maligngroup
-malignmark
-maction
--->
-
-<!-- Dei seguenti elementi, invece, vengono tralasciati quasi tutti gli
- attributi
-⁡
--->
-
-<!ENTITY % Presentation '(mi|mo|mn|mtext|mrow|mfenced)*'>
-
-<!ELEMENT math %Presentation;>
-
-<!ELEMENT mi (#PCDATA)>
-
-<!ELEMENT mo (#PCDATA)>
-
-<!ELEMENT mn (#PCDATA)>
-
-<!ELEMENT mtext (#PCDATA)>
-
-<!ELEMENT mrow %Presentation;>
-
-<!ELEMENT mfenced %Presentation;>
-<!ATTLIST mfenced
- open CDATA #IMPLIED
- close CDATA #IMPLIED
- separators CDATA #IMPLIED>
+++ /dev/null
-type expr =
- Null
- | Mi of string
- | Mo of string
- | Mn of string
- | Mtext of string
- | Mrow of expr list
- | Mfenced of string * string * string * expr list (* open, close, separators *)
-type fragment =
- Math of expr list
-;;
exception NoCurrentUri;;
exception NoNextOrPrevUri;;
-exception GtkInterfaceInternalError;;
let theory_get_current_uri () =
match !theory_visited_uris with
;;
(* called when an hyperlink is clicked *)
-let jump rendering_window s =
- let uri = UriManager.uri_of_string s in
- rendering_window#show () ;
- rendering_window#prevb#misc#set_sensitive true ;
- rendering_window#nextb#misc#set_sensitive false ;
- visited_uris := uri::!visited_uris ;
- to_visit_uris := [] ;
- annotated_obj := None ;
- update_output rendering_window uri
+let jump rendering_window (node : Ominidom.o_mDOMNode) =
+ let module O = Ominidom in
+ match (node#get_attribute (O.o_mDOMString_of_string "href")) with
+ Some str ->
+ let s = str#get_string in
+ let uri = UriManager.uri_of_string s in
+ rendering_window#show () ;
+ rendering_window#prevb#misc#set_sensitive true ;
+ rendering_window#nextb#misc#set_sensitive false ;
+ visited_uris := uri::!visited_uris ;
+ to_visit_uris := [] ;
+ annotated_obj := None ;
+ update_output rendering_window uri
+ | None -> assert false
;;
-let changefont rendering_window () =
- rendering_window#output#set_font_size rendering_window#spinb#value_as_int
+let choose_selection rendering_window (node : Ominidom.o_mDOMNode option) =
+ let module O = Ominidom in
+ let rec aux node =
+ match node#get_attribute (O.o_mDOMString_of_string "xref") with
+ Some _ -> rendering_window#output#set_selection (Some node)
+ | None -> aux (node#get_parent)
+ in
+ match node with
+ Some x -> aux x
+ | None -> rendering_window#output#set_selection None
;;
;;
let annotateb_pressed rendering_window annotation_window () =
- let xpath = (rendering_window#output#get_selection : string option) in
- match xpath with
- None -> (rendering_window#errors : GEdit.text)#insert "\nNo selection!\n"
+ let module O = Ominidom in
+ match rendering_window#output#get_selection with
+ | Some node ->
+ begin
+ match (node#get_attribute (O.o_mDOMString_of_string "xref")) with
| Some xpath ->
- try
let annobj = get_annotated_obj ()
(* next "cast" can't got rid of, but I don't know why *)
and annotation = (annotation_window#annotation : GEdit.text) in
- ann := CicXPath.get_annotation annobj xpath ;
- CicAnnotationHinter.create_hints annotation_window annobj xpath ;
+ ann := CicXPath.get_annotation annobj (xpath#get_string) ;
+ CicAnnotationHinter.create_hints annotation_window annobj (xpath#get_string) ;
annotation#delete_text 0 annotation#length ;
begin
match !(!ann) with
end ;
GMain.Grab.add (annotation_window#window_to_annotate#coerce) ;
annotation_window#show () ;
- with
- e ->
+ | None ->
(* next "cast" can't got rid of, but I don't know why *)
let errors = (rendering_window#errors : GEdit.text) in
- errors#insert ("\n" ^ Printexc.to_string e ^ "\n")
+ errors#insert ("\nNo xref found\n")
+ end
+ | None -> (rendering_window#errors : GEdit.text)#insert "\nNo selection!\n"
;;
(* called when the annotation is confirmed *)
else
!ann := None ;
match !annotated_obj with
- None -> raise GtkInterfaceInternalError
+ None -> assert false
| Some (annobj,_) ->
let uri = get_current_uri () in
let annxml = Annotation2Xml.pp_annotation annobj uri in
ignore(treeitem2#connect#select
(selection_changed rendering_window uri)) ;
aux treeitem2 ti
- ) !content
+ ) (List.sort compare !content)
| _ -> ()
in
aux
;;
+(* Stuff for the widget settings *)
+
+let export_to_postscript (output : GMathView.math_view) () =
+ output#export_to_postscript ~filename:"output.ps" ();
+;;
+
+let activate_t1 output button_set_anti_aliasing button_set_kerning
+ button_export_to_postscript button_t1 ()
+=
+ let is_set = button_t1#active in
+ output#set_font_manager_type
+ (if is_set then `font_manager_t1 else `font_manager_gtk) ;
+ if is_set then
+ begin
+ button_set_anti_aliasing#misc#set_sensitive true ;
+ button_set_kerning#misc#set_sensitive true ;
+ button_export_to_postscript#misc#set_sensitive true ;
+ end
+ else
+ begin
+ button_set_anti_aliasing#misc#set_sensitive false ;
+ button_set_kerning#misc#set_sensitive false ;
+ button_export_to_postscript#misc#set_sensitive false ;
+ end
+;;
+
+let set_anti_aliasing output button_set_anti_aliasing () =
+ output#set_anti_aliasing button_set_anti_aliasing#active
+;;
+
+let set_kerning output button_set_kerning () =
+ output#set_kerning button_set_kerning#active
+;;
+
+let changefont output font_size_spinb () =
+ output#set_font_size font_size_spinb#value_as_int
+;;
+
+let set_log_verbosity output log_verbosity_spinb () =
+ output#set_log_verbosity log_verbosity_spinb#value_as_int
+;;
+
+class settings_window output sw button_export_to_postscript jump_callback
+ selection_changed_callback
+=
+ let settings_window = GWindow.window ~title:"GtkMathView settings" () in
+ let vbox =
+ GPack.vbox ~packing:settings_window#add () in
+ let table =
+ GPack.table
+ ~rows:1 ~columns:3 ~homogeneous:false ~row_spacings:5 ~col_spacings:5
+ ~border_width:5 ~packing:vbox#add () in
+ let button_t1 =
+ GButton.toggle_button ~label:"activate t1 fonts"
+ ~packing:(table#attach ~left:0 ~top:0) () in
+ let button_set_anti_aliasing =
+ GButton.toggle_button ~label:"set_anti_aliasing"
+ ~packing:(table#attach ~left:1 ~top:0) () in
+ let button_set_kerning =
+ GButton.toggle_button ~label:"set_kerning"
+ ~packing:(table#attach ~left:2 ~top:0) () in
+ let table =
+ GPack.table
+ ~rows:2 ~columns:2 ~homogeneous:false ~row_spacings:5 ~col_spacings:5
+ ~border_width:5 ~packing:vbox#add () in
+ let font_size_label =
+ GMisc.label ~text:"font size:"
+ ~packing:(table#attach ~left:0 ~top:0 ~expand:`NONE) () in
+ let font_size_spinb =
+ let sadj =
+ GData.adjustment ~value:14.0 ~lower:5.0 ~upper:50.0 ~step_incr:1.0 ()
+ in
+ GEdit.spin_button
+ ~adjustment:sadj ~packing:(table#attach ~left:1 ~top:0 ~fill:`NONE) () in
+ let log_verbosity_label =
+ GMisc.label ~text:"log verbosity:"
+ ~packing:(table#attach ~left:0 ~top:1) () in
+ let log_verbosity_spinb =
+ let sadj =
+ GData.adjustment ~value:0.0 ~lower:0.0 ~upper:3.0 ~step_incr:1.0 ()
+ in
+ GEdit.spin_button
+ ~adjustment:sadj ~packing:(table#attach ~left:1 ~top:1) () in
+ let hbox =
+ GPack.hbox ~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in
+ let closeb =
+ GButton.button ~label:"Close"
+ ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
+object(self)
+ method show = settings_window#show
+ initializer
+ button_set_anti_aliasing#misc#set_sensitive false ;
+ button_set_kerning#misc#set_sensitive false ;
+ (* Signals connection *)
+ ignore(button_t1#connect#clicked
+ (activate_t1 output button_set_anti_aliasing button_set_kerning
+ button_export_to_postscript button_t1)) ;
+ ignore(font_size_spinb#connect#changed (changefont output font_size_spinb)) ;
+ ignore(button_set_anti_aliasing#connect#toggled
+ (set_anti_aliasing output button_set_anti_aliasing));
+ ignore(button_set_kerning#connect#toggled
+ (set_kerning output button_set_kerning)) ;
+ ignore(log_verbosity_spinb#connect#changed
+ (set_log_verbosity output log_verbosity_spinb)) ;
+ ignore(closeb#connect#clicked settings_window#misc#hide)
+end;;
+
+(* Main windows *)
+
class annotation_window output label =
let window_to_annotate =
GWindow.window ~title:"Annotating environment" ~border_width:2 () in
in
visited_uris := new_current_uri::(List.tl !visited_uris) ;
label#set_text (UriManager.string_of_uri new_current_uri) ;
- output#load (parse_no_cache new_current_uri)
+ let mmlfile = parse_no_cache new_current_uri in
+ output#load mmlfile
)) ;
ignore (abortb#connect#clicked
(fun () ->
GPack.vbox ~packing:window#add () in
let _ = vbox#pack ~expand:false ~fill:false ~padding:5 label#coerce in
let paned =
- GPack.paned `HORIZONTAL ~packing:(vbox#pack ~padding:5) () in
+ GPack.paned `HORIZONTAL ~packing:(vbox#pack ~expand:true ~padding:5) () in
let scrolled_window0 =
GBin.scrolled_window ~border_width:10 ~packing:paned#add1 () in
let _ = scrolled_window0#add output#coerce in
let annotateb =
GButton.button ~label:"Annotate"
~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
- let spinb =
- let sadj =
- GData.adjustment ~value:14.0 ~lower:5.0 ~upper:50.0 ~step_incr:1.0 ()
- in
- GEdit.spin_button
- ~adjustment:sadj ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5)
- () in
+ let settingsb =
+ GButton.button ~label:"Settings"
+ ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
+ let button_export_to_postscript =
+ GButton.button ~label:"export_to_postscript"
+ ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
let closeb =
GButton.button ~label:"Close"
~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
method nextb = nextb
method prevb = prevb
method label = label
- method spinb = spinb
method output = (output : GMathView.math_view)
method errors = errors
method show () = window#show ()
initializer
nextb#misc#set_sensitive false ;
prevb#misc#set_sensitive false ;
+ button_export_to_postscript#misc#set_sensitive false ;
(* signal handlers here *)
ignore(output#connect#jump (jump self)) ;
+ ignore(output#connect#selection_changed (choose_selection self)) ;
ignore(nextb#connect#clicked (next self)) ;
ignore(prevb#connect#clicked (prev self)) ;
ignore(checkb#connect#clicked (check self)) ;
- ignore(spinb#connect#changed (changefont self)) ;
ignore(closeb#connect#clicked window#misc#hide) ;
ignore(annotateb#connect#clicked (annotateb_pressed self annotation_window)) ;
+ let settings_window = new settings_window output scrolled_window0
+ button_export_to_postscript (jump self) (choose_selection self) in
+ ignore(settingsb#connect#clicked settings_window#show) ;
+ ignore(button_export_to_postscript#connect#clicked (export_to_postscript output)) ;
ignore(window#event#connect#delete (fun _ -> window#misc#hide () ; true ))
end;;
GMisc.label ~text:"???"
~packing:(vbox#pack ~expand:false ~fill:false ~padding:5) () in
let paned =
- GPack.paned `HORIZONTAL ~packing:(vbox#pack ~padding:5) () in
+ GPack.paned `HORIZONTAL ~packing:(vbox#pack ~expand:true ~padding:5) () in
let scrolled_window0 =
GBin.scrolled_window ~border_width:10 ~packing:paned#add1 () in
let output =
let checkb =
GButton.button ~label:"Check"
~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
- let spinb =
- let sadj =
- GData.adjustment ~value:14.0 ~lower:5.0 ~upper:50.0 ~step_incr:1.0 ()
- in
- GEdit.spin_button
- ~adjustment:sadj ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5)
- () in
+ let settingsb =
+ GButton.button ~label:"Settings"
+ ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
+ let button_export_to_postscript =
+ GButton.button ~label:"export_to_postscript"
+ ~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
let closeb =
GButton.button ~label:"Close"
~packing:(hbox#pack ~expand:false ~fill:false ~padding:5) () in
method label = label
method output = (output : GMathView.math_view)
method errors = errors
- method spinb = spinb
method show () = window#show ()
initializer
nextb#misc#set_sensitive false ;
prevb#misc#set_sensitive false ;
+ button_export_to_postscript#misc#set_sensitive false ;
(* signal handlers here *)
ignore(output#connect#jump (jump rendering_window)) ;
+ ignore(output#connect#selection_changed (choose_selection self)) ;
ignore(nextb#connect#clicked (theory_next self)) ;
ignore(prevb#connect#clicked (theory_prev self)) ;
ignore(checkb#connect#clicked (theory_check self)) ;
- ignore(spinb#connect#changed (changefont self)) ;
+ let settings_window = new settings_window output scrolled_window0
+ button_export_to_postscript (jump rendering_window)(choose_selection self) in
+ ignore(settingsb#connect#clicked settings_window#show) ;
+ ignore(button_export_to_postscript#connect#clicked (export_to_postscript output)) ;
ignore(closeb#connect#clicked window#misc#hide) ;
ignore(window#event#connect#delete (fun _ -> window#misc#hide () ; true ))
end;;
let resolve =
function
- "http://localhost:8081/getdtd?url=cic.dtd" ->
- "/home/pauillac/coq3/sacerdot/HELM/INTERFACE/examples/dtd/cic.dtd"
- | "http://localhost:8081/getdtd?url=maththeory.dtd" ->
- "/home/pauillac/coq3/sacerdot/HELM/INTERFACE/examples/dtd/maththeory.dtd"
- | "http://localhost:8081/getdtd?url=annotations.dtd" ->
- "/home/pauillac/coq3/sacerdot/HELM/INTERFACE/examples/dtd/annotations.dtd"
+ "http://localhost:8081/getdtd?uri=cic.dtd" ->
+ Configuration.dtd_dir ^ "/cic.dtd"
+ | "http://localhost:8081/getdtd?uri=maththeory.dtd" ->
+ Configuration.dtd_dir ^ "/maththeory.dtd"
+ | "http://localhost:8081/getdtd?uri=annotations.dtd" ->
+ Configuration.dtd_dir ^ "/annotations.dtd"
| s -> s
;;
+++ /dev/null
-http://caristudenti.students.cs.unibo.it/~sacerdot/helm
-http://pagadebit.students.cs.unibo.it/really_very_local/helm/PARSER/examples
+++ /dev/null
-http://phd.cs.unibo.it/helm/PARSER/examples
-http://caristudenti.students.cs.unibo.it/~sacerdot/helm
--- /dev/null
+ENCODING=.
+AFM=/usr/share/texmf/fonts/afm/
+TYPE1=/usr/share/texmf/fonts/type1/bluesky/cm/:/usr/X11R6/lib/X11/fonts/Type1/:.
chomp;
split / /;
for (@_) {
- if (/.*\.(con|var|ind)\.xml/)
+ if (/.*\.(con|var|ind)(\.types)?\.xml/)
{ s/\./cic:/; }
elsif (/.*\.theory\.xml/)
{ s/\./theory:/; }
+++ /dev/null
-// Base header file. Must be first.
-#include <Include/PlatformDefinitions.hpp>
-
-#include <iostream>
-#include <fstream>
-
-#include <util/PlatformUtils.hpp>
-
-#include <PlatformSupport/DOMStringHelper.hpp>
-
-#include <DOMSupport/DOMSupportDefault.hpp>
-
-#include <XPath/XObjectFactoryDefault.hpp>
-#include <XPath/XPathSupportDefault.hpp>
-#include <XPath/XPathFactoryDefault.hpp>
-
-#include <XSLT/StylesheetConstructionContextDefault.hpp>
-#include <XSLT/StylesheetExecutionContextDefault.hpp>
-#include <XSLT/XSLTEngineImpl.hpp>
-#include <XSLT/XSLTInit.hpp>
-#include <XSLT/XSLTInputSource.hpp>
-#include <XSLT/XSLTProcessorEnvSupportDefault.hpp>
-#include <XSLT/XSLTResultTarget.hpp>
-
-#include <XercesParserLiaison/XercesDOMSupport.hpp>
-#include <XercesParserLiaison/XercesParserLiaison.hpp>
-
-int main(int argc, const char* [])
-{
-#if !defined(XALAN_NO_NAMESPACES)
- using std::cerr;
- using std::endl;
- using std::ofstream;
-#endif
-
- if (argc != 1) {
- cerr << "Usage: SimpleTransform"
- << endl
- << endl;
- } else {
- try {
- // Call the static initializer for Xerces...
- XMLPlatformUtils::Initialize();
-
- {
- // Initialize the Xalan XSLT subsystem...
- XSLTInit theInit;
-
- // Create the support objects that are necessary for
- // running the processor...
- XercesDOMSupport theDOMSupport;
- XercesParserLiaison theParserLiaison(theDOMSupport);
- XPathSupportDefault theXPathSupport(theDOMSupport);
- XSLTProcessorEnvSupportDefault theXSLTProcessorEnvSupport;
- XObjectFactoryDefault theXObjectFactory;
- XPathFactoryDefault theXPathFactory;
-
- // Create a processor...
- XSLTEngineImpl theProcessor(
- theParserLiaison,
- theXPathSupport,
- theXSLTProcessorEnvSupport,
- theDOMSupport,
- theXObjectFactory,
- theXPathFactory);
-
- // Connect the processor to the support object...
- theXSLTProcessorEnvSupport.setProcessor(&theProcessor);
-
- // Create a stylesheet construction context, and a stylesheet
- // execution context...
- StylesheetConstructionContextDefault theConstructionContext(
- theProcessor,
- theXSLTProcessorEnvSupport,
- theXPathFactory);
-
- StylesheetExecutionContextDefault theExecutionContext(
- theProcessor,
- theXSLTProcessorEnvSupport,
- theXPathSupport,
- theXObjectFactory);
-
- // Our input files...The assumption is that the executable will be
- // run from same directory as the input files.
- const XalanDOMString theXMLFileName("foo.xml");
- const XalanDOMString theXSLFileName("foo.xsl");
-
- // Our input sources...
- XSLTInputSource theInputSource(c_wstr(theXMLFileName));
- XSLTInputSource theStylesheetSource(c_wstr(theXSLFileName));
-
- // Our output target...
- const XalanDOMString theOutputFileName("foo.out");
- XSLTResultTarget theResultTarget(theOutputFileName);
-
- theProcessor.process(
- theInputSource,
- theStylesheetSource,
- theResultTarget,
- theConstructionContext,
- theExecutionContext);
-
- }
-
- // Call the static terminator for Xerces...
- XMLPlatformUtils::Terminate();
- }
- catch(...) {
- cerr << "Exception caught!!!"
- << endl
- << endl;
- }
- }
-
- return 0;
-}
-
-/**************************************************/
-/*
-
-public class xaland {
- public static void Transform(StylesheetRoot style, String xmlSourceURL, String OutputURL) throws java.io.IOException, java.net.MalformedURLException, org.xml.sax.SAXException
- {
- XSLTInputSource xmlSource = new XSLTInputSource (xmlSourceURL);
- XSLTResultTarget xmlResult = new XSLTResultTarget (OutputURL);
- style.process(xmlSource, xmlResult);
- }
-
- public static void main(String argv[]) throws java.io.IOException, java.net.MalformedURLException, org.xml.sax.SAXException
- {
- int port = Integer.parseInt(argv[0]);
- int port2 = Integer.parseInt(argv[1]);
- String xsl1 = argv[2];
- String xsl2 = argv[3];
- String theory_xsl1 = argv[4];
- String theory_xsl2 = argv[5];
-
- XSLTProcessor theory_processor =
- XSLTProcessorFactory.getProcessor(new org.apache.xalan.xpath.xdom.XercesLiaison());
- StylesheetRoot theory_style1 =
- theory_processor.processStylesheet(theory_xsl1);
- theory_processor.reset();
- StylesheetRoot theory_style2 =
- theory_processor.processStylesheet(theory_xsl2);
- theory_processor.setStylesheet(theory_style2);
-
- XSLTProcessor processor =
- XSLTProcessorFactory.getProcessor(new org.apache.xalan.xpath.xdom.XercesLiaison());
- StylesheetRoot style1 = processor.processStylesheet(xsl1);
- processor.reset();
- StylesheetRoot style2 = processor.processStylesheet(xsl2);
- processor.setStylesheet(style2);
-
- DatagramSocket socket = new DatagramSocket(port);
-
- System.out.println("Demon activated on input port " + port +
- " and output port " + port2);
- while(true) {
- System.out.print("Ready...");
-
- /* Warning: the packet must be a fresh one! * /
- DatagramPacket packet = new DatagramPacket(new byte[1024],1024);
- socket.receive(packet);
- byte data[] = packet.getData();
- int datalen = packet.getLength();
- String received = new String(data,0,datalen);
-
- int first = received.indexOf(' ');
- int last = received.lastIndexOf(' ');
- String mode = received.substring(0,first);
- String input = received.substring(first+1,last);
- String output = received.substring(last+1);
-
- System.out.println("request received! Parameters are");
- System.out.println("Mode: " + mode + " ");
- System.out.println("Input file: \"" + input + "\"");
- System.out.println("Output file: \"" + output + "\"\n");
-
- if ((new File(output)).exists()) {
- System.out.println("Using cached version\n");
- } else {
- FileOutputStream fout = new FileOutputStream(output);
- if (mode.equals("cic")) {
- processor.setDocumentHandler(style2.getSAXSerializer(fout));
- XSLTResultTarget content = new XSLTResultTarget(processor);
- style1.process(new XSLTInputSource(input), content);
- } else if (mode.equals("theory")) {
- theory_processor.setDocumentHandler(
- theory_style2.getSAXSerializer(fout));
- XSLTResultTarget content =
- new XSLTResultTarget(theory_processor);
- theory_style1.process(new XSLTInputSource(input), content);
- }
- }
-
- InetAddress address = InetAddress.getLocalHost();
- DatagramSocket socket2 = new DatagramSocket();
-
- byte buf[] = new byte[0];
- DatagramPacket packet2 = new DatagramPacket(buf,0,address,port2);
-
- socket2.send(packet2);
- }
- }
-}
-
-*/
+++ /dev/null
-import java.net.*;
-
-public class rompi {
- public static void main(String argv[]) throws java.io.IOException, java.net.MalformedURLException
- {
- /* Wait forever ;-) */
- DatagramSocket socket2 = new DatagramSocket(12346);
- DatagramPacket packet2 = new DatagramPacket(new byte[1],1);
- System.out.println("Ho preso il socket e non lo lascio piu', caro pu, caro pu");
- socket2.receive(packet2);
- }
-}
+++ /dev/null
-import java.net.*;
-
-public class sped {
- public static void main(String argv[]) throws java.io.IOException, java.net.MalformedURLException
- {
- String input = argv[0];
- String out1 = argv[1];
- String out2 = argv[2];
-
- String sent = input + " " + out1 + " " + out2;
-
- InetAddress address = InetAddress.getLocalHost();
- DatagramSocket socket = new DatagramSocket();
-
- int strlen = sent.length();
- byte buf[] = new byte[strlen];
- sent.getBytes(0,strlen,buf,0);
- DatagramPacket packet = new DatagramPacket(buf,strlen,address,12345);
-
- socket.send(packet);
-
-
- /* Wait for answer (or forever ;-) */
- DatagramSocket socket2 = new DatagramSocket(12346);
- DatagramPacket packet2 = new DatagramPacket(new byte[1],1);
- socket2.receive(packet2);
- }
-}
+++ /dev/null
-import org.apache.xalan.xslt.*;
-import java.net.*;
-import java.io.*;
-
-public class xaland {
- public static void Transform(StylesheetRoot style, String xmlSourceURL, String OutputURL) throws java.io.IOException, java.net.MalformedURLException, org.xml.sax.SAXException
- {
- XSLTInputSource xmlSource = new XSLTInputSource (xmlSourceURL);
- XSLTResultTarget xmlResult = new XSLTResultTarget (OutputURL);
- style.process(xmlSource, xmlResult);
- }
-
- public static void main(String argv[]) throws java.io.IOException, java.net.MalformedURLException, org.xml.sax.SAXException
- {
- int port = Integer.parseInt(argv[0]);
- int port2 = Integer.parseInt(argv[1]);
- String xsl1 = argv[2];
- String xsl2 = argv[3];
- String theory_xsl1 = argv[4];
- String theory_xsl2 = argv[5];
-
- XSLTProcessor theory_processor =
- XSLTProcessorFactory.getProcessor(new org.apache.xalan.xpath.xdom.XercesLiaison());
- StylesheetRoot theory_style1 =
- theory_processor.processStylesheet(theory_xsl1);
- theory_processor.reset();
- StylesheetRoot theory_style2 =
- theory_processor.processStylesheet(theory_xsl2);
- theory_processor.setStylesheet(theory_style2);
-
- XSLTProcessor processor =
- XSLTProcessorFactory.getProcessor(new org.apache.xalan.xpath.xdom.XercesLiaison());
- StylesheetRoot style1 = processor.processStylesheet(xsl1);
- processor.reset();
- StylesheetRoot style2 = processor.processStylesheet(xsl2);
- processor.setStylesheet(style2);
-
- DatagramSocket socket = new DatagramSocket(port);
-
- System.out.println("Demon activated on input port " + port +
- " and output port " + port2);
- while(true) {
- System.out.print("Ready...");
-
- /* Warning: the packet must be a fresh one! */
- DatagramPacket packet = new DatagramPacket(new byte[1024],1024);
- socket.receive(packet);
- byte data[] = packet.getData();
- int datalen = packet.getLength();
- String received = new String(data,0,datalen);
-
- int first = received.indexOf(' ');
- int last = received.lastIndexOf(' ');
- String mode = received.substring(0,first);
- String input = received.substring(first+1,last);
- String output = received.substring(last+1);
-
- System.out.println("request received! Parameters are");
- System.out.println("Mode: " + mode + " ");
- System.out.println("Input file: \"" + input + "\"");
- System.out.println("Output file: \"" + output + "\"\n");
-
- if ((new File(output)).exists()) {
- System.out.println("Using cached version\n");
- } else {
- FileOutputStream fout = new FileOutputStream(output);
- if (mode.equals("cic")) {
- processor.setDocumentHandler(style2.getSAXSerializer(fout));
- XSLTResultTarget content = new XSLTResultTarget(processor);
- style1.process(new XSLTInputSource(input), content);
- } else if (mode.equals("theory")) {
- theory_processor.setDocumentHandler(
- theory_style2.getSAXSerializer(fout));
- XSLTResultTarget content =
- new XSLTResultTarget(theory_processor);
- theory_style1.process(new XSLTInputSource(input), content);
- }
- }
-
- InetAddress address = InetAddress.getLocalHost();
- DatagramSocket socket2 = new DatagramSocket();
-
- byte buf[] = new byte[0];
- DatagramPacket packet2 = new DatagramPacket(buf,0,address,port2);
-
- socket2.send(packet2);
- }
- }
-}
+++ /dev/null
-import org.apache.xalan.xslt.*;
-import java.net.*;
-import java.io.*;
-
-public class xaland {
- public static void Transform(StylesheetRoot style, String xmlSourceURL, String OutputURL) throws java.io.IOException, java.net.MalformedURLException, org.xml.sax.SAXException
- {
- XSLTInputSource xmlSource = new XSLTInputSource (xmlSourceURL);
- XSLTResultTarget xmlResult = new XSLTResultTarget (OutputURL);
- style.process(xmlSource, xmlResult);
- }
-
- public static void main(String argv[]) throws java.io.IOException, java.net.MalformedURLException, org.xml.sax.SAXException
- {
- int port = Integer.parseInt(argv[0]);
- int port2 = Integer.parseInt(argv[1]);
- String xsl1 = argv[2];
- String xsl2 = argv[3];
- String theory_xsl1 = argv[4];
- String theory_xsl2 = argv[5];
-
- XSLTProcessor theory_processor = XSLTProcessorFactory.getProcessor();
- StylesheetRoot theory_style1 =
- theory_processor.processStylesheet(theory_xsl1);
- StylesheetRoot theory_style2 =
- theory_processor.processStylesheet(theory_xsl2);
- theory_processor.setStylesheet(theory_style2);
-
- XSLTProcessor processor = XSLTProcessorFactory.getProcessor();
- StylesheetRoot style1 = processor.processStylesheet(xsl1);
- StylesheetRoot style2 = processor.processStylesheet(xsl2);
- processor.setStylesheet(style2);
-
- DatagramSocket socket = new DatagramSocket(port);
-
- System.out.println("Demon activated on input port " + port +
- " and output port " + port2);
- while(true) {
- System.out.print("Ready...");
-
- /* Warning: the packet must be a fresh one! */
- DatagramPacket packet = new DatagramPacket(new byte[1024],1024);
- socket.receive(packet);
- byte data[] = packet.getData();
- int datalen = packet.getLength();
- String received = new String(data,0,datalen);
-
- int first = received.indexOf(' ');
- int last = received.lastIndexOf(' ');
- String mode = received.substring(0,first);
- String input = received.substring(first+1,last);
- String output = received.substring(last+1);
-
- System.out.println("request received! Parameters are");
- System.out.println("Mode: " + mode + " ");
- System.out.println("Input file: \"" + input + "\"");
- System.out.println("Output file: \"" + output + "\"\n");
-
- if ((new File(output)).exists()) {
- System.out.println("Using cached version\n");
- } else {
- FileOutputStream fout = new FileOutputStream(output);
- if (mode.equals("cic")) {
- processor.setDocumentHandler(style2.getSAXSerializer(fout));
- XSLTResultTarget content = new XSLTResultTarget(processor);
- style1.process(new XSLTInputSource(input), content);
- } else if (mode.equals("theory")) {
- theory_processor.setDocumentHandler(
- theory_style2.getSAXSerializer(fout));
- XSLTResultTarget content =
- new XSLTResultTarget(theory_processor);
- theory_style1.process(new XSLTInputSource(input), content);
- }
- }
-
- InetAddress address = InetAddress.getLocalHost();
- DatagramSocket socket2 = new DatagramSocket();
-
- byte buf[] = new byte[0];
- DatagramPacket packet2 = new DatagramPacket(buf,0,address,port2);
-
- socket2.send(packet2);
- }
- }
-}
+++ /dev/null
-import org.apache.xalan.xslt.*;
-import java.net.*;
-import java.io.*;
-
-public class xaland {
- public static void Transform(StylesheetRoot style, String xmlSourceURL, String OutputURL) throws java.io.IOException, java.net.MalformedURLException, org.xml.sax.SAXException
- {
- XSLTInputSource xmlSource = new XSLTInputSource (xmlSourceURL);
- XSLTResultTarget xmlResult = new XSLTResultTarget (OutputURL);
- style.process(xmlSource, xmlResult);
- }
-
- public static void main(String argv[]) throws java.io.IOException, java.net.MalformedURLException, org.xml.sax.SAXException
- {
- int port = Integer.parseInt(argv[0]);
- int port2 = Integer.parseInt(argv[1]);
- String xsl1 = argv[2];
- String xsl2 = argv[3];
- String theory_xsl1 = argv[4];
- String theory_xsl2 = argv[5];
-
- XSLTProcessor theory_processor = XSLTProcessorFactory.getProcessor();
- StylesheetRoot theory_style1 =
- theory_processor.processStylesheet(theory_xsl1);
- theory_processor.reset();
- StylesheetRoot theory_style2 =
- theory_processor.processStylesheet(theory_xsl2);
- theory_processor.setStylesheet(theory_style2);
-
- XSLTProcessor processor = XSLTProcessorFactory.getProcessor();
- StylesheetRoot style1 = processor.processStylesheet(xsl1);
- processor.reset();
- StylesheetRoot style2 = processor.processStylesheet(xsl2);
- processor.setStylesheet(style2);
-
- DatagramSocket socket = new DatagramSocket(port);
-
- System.out.println("Demon activated on input port " + port +
- " and output port " + port2);
- while(true) {
- System.out.print("Ready...");
-
- /* Warning: the packet must be a fresh one! */
- DatagramPacket packet = new DatagramPacket(new byte[1024],1024);
- socket.receive(packet);
- byte data[] = packet.getData();
- int datalen = packet.getLength();
- String received = new String(data,0,datalen);
-
- int first = received.indexOf(' ');
- int last = received.lastIndexOf(' ');
- String mode = received.substring(0,first);
- String input = received.substring(first+1,last);
- String output = received.substring(last+1);
-
- System.out.println("request received! Parameters are");
- System.out.println("Mode: " + mode + " ");
- System.out.println("Input file: \"" + input + "\"");
- System.out.println("Output file: \"" + output + "\"\n");
-
- if ((new File(output)).exists()) {
- System.out.println("Using cached version\n");
- } else {
- FileOutputStream fout = new FileOutputStream(output);
- if (mode.equals("cic")) {
- processor.setDocumentHandler(style2.getSAXSerializer(fout));
- XSLTResultTarget content = new XSLTResultTarget(processor);
- style1.process(new XSLTInputSource(input), content);
- } else if (mode.equals("theory")) {
- theory_processor.setDocumentHandler(
- theory_style2.getSAXSerializer(fout));
- XSLTResultTarget content =
- new XSLTResultTarget(theory_processor);
- theory_style1.process(new XSLTInputSource(input), content);
- }
- }
-
- InetAddress address = InetAddress.getLocalHost();
- DatagramSocket socket2 = new DatagramSocket();
-
- byte buf[] = new byte[0];
- DatagramPacket packet2 = new DatagramPacket(buf,0,address,port2);
-
- socket2.send(packet2);
- }
- }
-}
--- /dev/null
+<?xml version="1.0"?>
+
+<!--***********************************************************************-->
+<!-- XSLT version 0.1 of annotated MathML content to MathML presentation: -->
+<!-- First draft: March 29 2000, Claudio Sacerdoti Coen, Irene Schena -->
+<!--***********************************************************************-->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:m="http://www.w3.org/1998/Math/MathML"
+ xmlns:helm="http://www.cs.unibo.it/helm">
+
+<xsl:import href="objcontent.xsl"/>
+
+<xsl:key name="id" use="@id" match="LAMBDA|PROD|CAST|REL|SORT|APPLY|VAR|META|CONST|MUTIND|MUTCONSTRUCT|MUTCASE|FIX|COFIX|Definition|Axiom|CurrentProof|InductiveDefinition|Variable"/>
+
+<xsl:key name="annid" use="@of" match="Annotation"/>
+
+<xsl:template match="Definition|Axiom|CurrentProof|InductiveDefinition|Variable">
+ <xsl:choose>
+ <xsl:when test="key('annid',@id)">
+ <annotation helm:xref="{@id}">
+ <xsl:apply-templates select="key('annid',@id)"/>
+ </annotation>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="." mode="noannot"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="LAMBDA|PROD|CAST|REL|SORT|APPLY|VAR|META|CONST|MUTIND|MUTCONSTRUCT|MUTCASE|FIX|COFIX">
+ <xsl:choose>
+ <xsl:when test="key('annid',@id)">
+ <annotation helm:xref="{@id}">
+ <xsl:apply-templates select="key('annid',@id)"/>
+ </annotation>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:math>
+ <xsl:apply-templates select="." mode="noannot"/>
+ </m:math>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="node">
+ <xsl:variable name="id" select="@id"/>
+ <xsl:apply-templates select="key('id',$id)"/>
+</xsl:template>
+
+<xsl:template match="attribute">
+ <xsl:variable name="id" select="@id"/>
+ <xsl:variable name="name" select="@name"/>
+ <xsl:variable name="child" select="@child"/>
+ <xsl:variable name="grandchild" select="@grandchild"/>
+ <xsl:choose>
+ <xsl:when test="$child">
+ <xsl:choose>
+ <xsl:when test="$grandchild">
+ <xsl:value-of select="key('id',$id)/*[position() = $child]/*[position() = $grandchild]/attribute::*[name() = $name]"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="key('id',$id)/*[position() = $child]/attribute::*[name() = $name]"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="key('id',$id)/attribute::*[name() = $name]"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+</xsl:stylesheet>
--- /dev/null
+<?xml version="1.0"?>
+
+<!--***********************************************************************-->
+<!-- XSLT version 0.1 of annotated MathML content to MathML presentation: -->
+<!-- First draft: March 29 2000, Claudio Sacerdoti Coen, Irene Schena -->
+<!--***********************************************************************-->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:m="http://www.w3.org/1998/Math/MathML"
+ xmlns:helm="http://www.cs.unibo.it/helm">
+
+<xsl:import href="mmlextension.xsl"/>
+
+<!-- ANNOTATION -->
+
+<xsl:template match="annotation">
+ <xsl:choose>
+ <xsl:when test=". = /">
+ <m:math><m:mrow helm:xref="{@helm:xref}"><xsl:apply-templates/></m:mrow></m:math>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mrow helm:xref="{@helm:xref}"><xsl:apply-templates/></m:mrow>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="text()">
+ <xsl:variable name="text" select="normalize-space(.)"/>
+ <xsl:if test="$text != ''">
+ <m:mtext><xsl:value-of select="$text"/></m:mtext>
+ </xsl:if>
+</xsl:template>
+
+</xsl:stylesheet>
--- /dev/null
+<?xml version="1.0"?>
+
+<!--******************************************************************-->
+<!-- Basic Logic -->
+<!-- First draft: April 3 2000 -->
+<!-- HELM Group: Asperti, Padovani, Sacerdoti, Schena -->
+<!--******************************************************************-->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:m="http://www.w3.org/1998/Math/MathML"
+ xmlns:helm="http://www.cs.unibo.it/helm">
+
+<!--******************************************************************-->
+<!-- Variable containing the absolute path of the CIC file -->
+<!--******************************************************************-->
+
+<xsl:variable name="absPath">http://localhost:8081/getciconly?uri=</xsl:variable>
+
+<!-- ************************* LOGIC *********************************-->
+
+<!-- AND -->
+
+<xsl:template match="APPLY[MUTIND[attribute::uri='cic:/coq/INIT/Logic/Conjunction/and.ind'] and (count(child::*) = 3)]" mode="pure">
+ <m:apply helm:xref="{@id}">
+ <m:and definitionURL="{MUTIND/@uri}" helm:xref="{MUTIND/@id}"/>
+ <xsl:apply-templates select="*[2]" mode="noannot"/>
+ <xsl:apply-templates select="*[3]" mode="noannot"/>
+ </m:apply>
+</xsl:template>
+
+<!-- OR -->
+
+<xsl:template match="APPLY[MUTIND[attribute::uri='cic:/coq/INIT/Logic/Disjunction/or.ind'] and (count(child::*) = 3)]" mode="pure">
+ <m:apply helm:xref="{@id}">
+ <m:or definitionURL="{MUTIND/@uri}" helm:xref="{MUTIND/@id}"/>
+ <xsl:apply-templates select="*[2]" mode="noannot"/>
+ <xsl:apply-templates select="*[3]" mode="noannot"/>
+ </m:apply>
+</xsl:template>
+
+<!-- NOT -->
+
+<xsl:template match="APPLY[CONST[attribute::uri='cic:/coq/INIT/Logic/not.con'] and (count(child::*) = 2)]" mode="pure">
+ <m:apply helm:xref="{@id}">
+ <m:not definitionURL="{CONST/@uri}" helm:xref="{MUTIND/@id}"/>
+ <xsl:apply-templates select="*[2]" mode="noannot"/>
+ </m:apply>
+</xsl:template>
+
+<!-- IFF -->
+<!--
+<xsl:template match="APPLY[CONST[attribute::uri='cic:/coq/INIT/Logic/Equivalence/iff.ind'] and (count(child::*) = 3)]" mode="pure">
+ <m:apply helm:xref="{@id}">
+ <m:iff definitionURL="{CONST/@uri}" helm:xref="{CONST/@id}"/>
+ <xsl:apply-templates select="*[2]" mode="noannot"/>
+ <xsl:apply-templates select="*[3]" mode="noannot"/>
+ </m:apply>
+</xsl:template>
+-->
+
+<!-- EXISTS -->
+
+<xsl:template match="APPLY[MUTIND[attribute::uri='cic:/coq/INIT/Logic/First_order_quantifiers/ex.ind' or attribute::uri='cic:/coq/INIT/Logic_Type/exT.ind'] and (count(child::*) = 3)]" mode="pure">
+ <m:apply helm:xref="{@id}">
+ <m:exists definitionURL="{MUTIND/@uri}" helm:xref="{MUTIND/@id}"/>
+ <xsl:choose>
+ <xsl:when test="name(*[3]) = 'LAMBDA'">
+ <m:bvar>
+ <m:ci><xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="LAMBDA/target/@binder"/></xsl:with-param></xsl:call-template></m:ci>
+ </m:bvar>
+ <xsl:apply-templates select="LAMBDA/target" mode="noannot"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:bvar>
+ <m:ci>$x</m:ci>
+ </m:bvar>
+ <m:apply>
+ <m:csymbol>app</m:csymbol>
+ <xsl:apply-templates select="*[3]" mode="noannot"/>
+ <m:ci>$x</m:ci>
+ </m:apply>
+ </xsl:otherwise>
+ </xsl:choose>
+ </m:apply>
+</xsl:template>
+
+<xsl:template match="APPLY[MUTIND[attribute::uri='cic:/coq/INIT/Logic/First_order_quantifiers/ex2.ind' or attribute::uri='cic:/coq/INIT/Logic_Type/exT2.ind'] and (count(child::*) = 4)]" mode="pure">
+ <m:apply helm:xref="{@id}">
+ <m:exists definitionURL="{MUTIND/@uri}" helm:xref="{MUTIND/@id}"/>
+ <xsl:choose>
+ <xsl:when test="name(*[3]) = 'LAMBDA'">
+ <xsl:variable name="bvarname" select="*[3]/target/@binder"/>
+ <m:bvar>
+ <m:ci><xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="$bvarname"/></xsl:with-param></xsl:call-template></m:ci>
+ </m:bvar>
+ <m:condition>
+ <xsl:apply-templates select="LAMBDA[1]/target" mode="noannot"/>
+ </m:condition>
+ <xsl:choose>
+ <xsl:when test="(name(*[4]) = 'LAMBDA') and
+ ($bvarname = *[4]/target/@binder)">
+ <xsl:apply-templates select="LAMBDA[2]/target" mode="noannot"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:apply>
+ <m:csymbol>app</m:csymbol>
+ <xsl:apply-templates select="*[4]" mode="noannot"/>
+ <m:ci><xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="$bvarname"/></xsl:with-param></xsl:call-template></m:ci>
+ </m:apply>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:choose>
+ <xsl:when test="name(*[4]) = 'LAMBDA'">
+ <xsl:variable name="bvarname" select="*[4]/target/@binder"/>
+ <m:bvar>
+ <m:ci><xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="$bvarname"/></xsl:with-param></xsl:call-template></m:ci>
+ </m:bvar>
+ <m:condition>
+ <m:apply>
+ <m:csymbol>app</m:csymbol>
+ <xsl:apply-templates select="*[3]" mode="noannot"/>
+ <m:ci><xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="$bvarname"/></xsl:with-param></xsl:call-template></m:ci>
+ </m:apply>
+ </m:condition>
+ <xsl:apply-templates select="*[4]/target" mode="noannot"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:bvar>
+ <m:ci>x</m:ci>
+ </m:bvar>
+ <m:condition>
+ <m:apply>
+ <m:csymbol>app</m:csymbol>
+ <xsl:apply-templates select="*[3]" mode="noannot"/>
+ <m:ci>x</m:ci>
+ </m:apply>
+ </m:condition>
+ <m:apply>
+ <m:csymbol>app</m:csymbol>
+ <xsl:apply-templates select="*[4]" mode="noannot"/>
+ <m:ci>x</m:ci>
+ </m:apply>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ </m:apply>
+</xsl:template>
+
+<!-- EQUALITY -->
+
+<xsl:template match="APPLY[MUTIND[attribute::uri='cic:/coq/INIT/Logic/Equality/eq.ind'] and (count(child::*) = 4)]" mode="pure">
+ <m:apply helm:xref="{@id}">
+ <m:eq definitionURL="{MUTIND/@uri}" helm:xref="{MUTIND/@id}"/>
+ <xsl:apply-templates select="*[3]" mode="noannot"/>
+ <xsl:apply-templates select="*[4]" mode="noannot"/>
+ </m:apply>
+</xsl:template>
+
+
+<!-- TYPE EQUALITY -->
+
+<xsl:template match="APPLY[MUTIND[attribute::uri='cic:/coq/INIT/Logic_Type/eqT.ind'] and (count(child::*) = 4)]" mode="pure">
+ <m:apply helm:xref="{@id}">
+ <m:eq definitionURL="{MUTIND/@uri}" helm:xref="{MUTIND/@id}"/>
+ <xsl:apply-templates select="*[3]" mode="noannot"/>
+ <xsl:apply-templates select="*[4]" mode="noannot"/>
+ </m:apply>
+</xsl:template>
+
+<!-- NOT-EQ -->
+<!-- NOT and EQ have no parameters -->
+<xsl:template match="APPLY[CONST[attribute::uri='cic:/coq/INIT/Logic/not.con']
+and (count(child::*) = 2) and APPLY[MUTIND[attribute::uri='cic:/coq/INIT/Logic/Equality/eq.ind']]]" mode="pure">
+ <xsl:choose>
+ <xsl:when test="count(APPLY/child::*) = 4">
+ <m:apply helm:xref="{@id}">
+ <m:neq/>
+ <xsl:apply-templates select="*[2]/*[3]" mode="noannot"/>
+ <xsl:apply-templates select="*[2]/*[4]" mode="set"/>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- NOT-EQT -->
+<xsl:template match="APPLY[CONST[attribute::uri='cic:/coq/INIT/Logic/not.con']
+and (count(child::*) = 2) and APPLY[MUTIND[attribute::uri='cic:/coq/INIT/Logic_Type/eqT.ind']]]" mode="pure">
+ <xsl:choose>
+ <xsl:when test="count(APPLY/child::*) = 4">
+ <m:apply helm:xref="{@id}">
+ <m:neq/>
+ <xsl:apply-templates select="*[2]/*[3]" mode="noannot"/>
+ <xsl:apply-templates select="*[2]/*[4]" mode="set"/>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- ************************ DATATYPES ******************************* -->
+
+<!-- no datatypes in MathML content -->
+
+
+<!-- *************************** PEANO ********************************* -->
+
+<xsl:template match="APPLY[MUTIND[attribute::uri='cic:/coq/INIT/Peano/le.ind'] and (count(child::*) = 3)]" mode="pure">
+ <m:apply helm:xref="{@id}">
+ <m:leq definitionURL="{MUTIND/@uri}" helm:xref="{MUTIND/@id}"/>
+ <xsl:apply-templates select="*[2]" mode="noannot"/>
+ <xsl:apply-templates select="*[3]" mode="noannot"/>
+ </m:apply>
+</xsl:template>
+
+<xsl:template match="APPLY[CONST[attribute::uri='cic:/coq/INIT/Peano/lt.con'] and (count(child::*) = 3)]" mode="pure">
+ <m:apply helm:xref="{@id}">
+ <m:lt definitionURL="{CONST/@uri}" helm:xref="{CONST/@id}"/>
+ <xsl:apply-templates select="*[2]" mode="noannot"/>
+ <xsl:apply-templates select="*[3]" mode="noannot"/>
+ </m:apply>
+</xsl:template>
+
+<xsl:template match="APPLY[CONST[attribute::uri='cic:/coq/INIT/Peano/ge.con'] and (count(child::*) = 3)]" mode="pure">
+ <m:apply helm:xref="{@id}">
+ <m:geq definitionURL="{CONST/@uri}" helm:xref="{CONST/@id}"/>
+ <xsl:apply-templates select="*[2]" mode="noannot"/>
+ <xsl:apply-templates select="*[3]" mode="noannot"/>
+ </m:apply>
+</xsl:template>
+
+<xsl:template match="APPLY[CONST[attribute::uri='cic:/coq/INIT/Peano/gt.con'] and (count(child::*) = 3)]" mode="pure">
+ <m:apply helm:xref="{@id}">
+ <m:gt definitionURL="{CONST/@uri}" helm:xref="{CONST/@id}"/>
+ <xsl:apply-templates select="*[2]" mode="noannot"/>
+ <xsl:apply-templates select="*[3]" mode="noannot"/>
+ </m:apply>
+</xsl:template>
+
+</xsl:stylesheet>
+
+
+
+
+
+
--- /dev/null
+<?xml version="1.0"?>
+
+<!--******************************************************************-->
+<!-- XSLT version 0.1 of CIC objects to MathML content: -->
+<!-- First draft: February 14 2000, Andrea Asperti, Irene Schena -->
+<!-- Revised: March 3 2000, Irene Schena -->
+<!-- Revised: March 10 2000, Irene Schena -->
+<!-- Revised: March 15 2000, Claudio Sacerdoti Coen, Irene Schena -->
+<!--******************************************************************-->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:m="http://www.w3.org/1998/Math/MathML"
+ xmlns:helm="http://www.cs.unibo.it/helm">
+
+<xsl:include href="params.xsl"/>
+
+<!--<xsl:output
+ method="xml"
+ version="1.0"
+ encoding="ISO-8859-1"
+ omit-xml-declaration="no"
+ standalone="no"
+ doctype-public="http://www.w3.org/TR/REC-MathML"
+ indent="yes"
+ media-type="text/mathml" /> -->
+
+<!-- DA FARE:
+1)risolvere nella fase di pre-processing le uri relative delle var, settando
+l'attributo
+definitionURL dell'oggetto corrispondente (alcuni punteranno a nulla! -quelli
+che non hanno il file di definizione corrispondente-); [le uri assolute hanno
+la forma cic:/.../ in definitionURL e questo schema di uri verra' risolto da
+Amaya o da chi di dovere in /really_very_local/helm/PARSER/example/.../]
+-->
+
+<!--******************************************************************-->
+<!-- Variable containing the absolute path of the CIC file -->
+<!--******************************************************************-->
+
+<xsl:variable name="absPath">http://localhost:8081/getciconly?uri=</xsl:variable>
+
+<!-- CIC TERMS -->
+
+<xsl:template match="LAMBDA" mode="pure">
+ <m:lambda helm:xref="{@id}">
+ <m:bvar>
+ <m:ci>
+ <xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="target/@binder"/></xsl:with-param></xsl:call-template>
+ </m:ci>
+ <m:type>
+ <xsl:apply-templates select="source/*[1]" mode="noannot"/>
+ </m:type>
+ </m:bvar>
+ <xsl:apply-templates select="target/*[1]" mode="noannot"/>
+ </m:lambda>
+</xsl:template>
+
+<xsl:template match="PROD" mode="pure">
+ <m:apply helm:xref="{@id}">
+ <xsl:choose>
+ <xsl:when test="string(target/@binder)= """>
+ <m:csymbol>arrow</m:csymbol>
+ <xsl:apply-templates select="source/*[1]" mode="noannot"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:csymbol>prod</m:csymbol>
+ <m:bvar>
+ <m:ci>
+ <xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="target/@binder"/></xsl:with-param></xsl:call-template>
+ </m:ci>
+ <m:type>
+ <xsl:apply-templates select="source/*[1]" mode="noannot"/>
+ </m:type>
+ </m:bvar>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:apply-templates select="target/*[1]" mode="noannot"/>
+ </m:apply>
+</xsl:template>
+
+<xsl:template match="CAST" mode="pure">
+ <m:apply helm:xref="{@id}">
+ <m:csymbol>cast</m:csymbol>
+ <xsl:apply-templates mode="noannot" select="*/*"/>
+ </m:apply>
+</xsl:template>
+
+<xsl:template match="REL" mode="pure">
+ <m:ci helm:xref="{@id}">
+ <xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="@binder"/></xsl:with-param></xsl:call-template>
+ </m:ci>
+</xsl:template>
+
+<xsl:template match="SORT" mode="pure">
+ <m:apply helm:xref="{@id}">
+ <m:csymbol>
+ <xsl:value-of select="@value"/>
+ </m:csymbol>
+ </m:apply>
+</xsl:template>
+
+<xsl:template match="APPLY" mode="pure">
+ <xsl:choose>
+ <!-- <xsl:when test="//ALLTYPES and boolean(key('typeid',*/@id))"> -->
+ <!-- start looking for subproofs -->
+ <xsl:when test="((*/@id) = (//ALLTYPES/TYPE/@id))">
+ <m:apply helm:xref="{@id}">
+ <m:csymbol>letin</m:csymbol>
+ <!-- <xsl:for-each select="*[boolean(key('typeid',@id))]"> -->
+ <!-- first process all subproofs (let-in) -->
+ <xsl:for-each select="*[@id = (//ALLTYPES/TYPE/@id)]">
+ <m:apply>
+ <m:csymbol>let</m:csymbol>
+ <m:ci><xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="concat('h',position())"/></xsl:with-param></xsl:call-template></m:ci>
+ <xsl:apply-templates mode="noannot" select="."/>
+ </m:apply>
+ </xsl:for-each>
+ <!-- now re-process the application in mode appflat -->
+ <xsl:apply-templates mode="appflat" select="."/>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates mode="appflat" select="."/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="APPLY" mode="appflat">
+ <m:apply helm:xref="{@id}">
+ <m:csymbol>app</m:csymbol>
+ <!-- mode flat looks for siblings: call with the first child -->
+ <xsl:apply-templates mode="flat" select="*[1]"/>
+ </m:apply>
+</xsl:template>
+
+<xsl:template match="*" mode="flat">
+ <xsl:param name="n" select="1"/>
+ <xsl:choose>
+ <xsl:when test="@id">
+ <xsl:variable name="id" select="@id"/>
+ <xsl:choose>
+ <!-- <xsl:when test="key('typeid',@id)"> -->
+ <xsl:when test="//ALLTYPES/TYPE[@id=$id]">
+ <m:ci>
+ <xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="concat('h',$n)"/></xsl:with-param></xsl:call-template>
+ </m:ci>
+ <xsl:apply-templates mode="flat" select="following-sibling::*[1]">
+ <xsl:with-param name="n" select="$n+1"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates mode="pure" select="."/>
+ <xsl:apply-templates mode="flat" select="following-sibling::*[1]">
+ <xsl:with-param name="n" select="$n"/>
+ </xsl:apply-templates>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates mode="pure" select="."/>
+ <xsl:apply-templates mode="flat" select="following-sibling::*[1]">
+ <xsl:with-param name="n" select="$n"/>
+ </xsl:apply-templates>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="VAR" mode="pure">
+ <m:ci helm:xref="{@id}">
+ <xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="substring-after(@relUri,",")"/></xsl:with-param></xsl:call-template>
+ </m:ci>
+</xsl:template>
+
+<xsl:template match="META" mode="pure">
+ <m:ci helm:xref="{@id}">
+ <xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="@no"/></xsl:with-param></xsl:call-template>
+ </m:ci>
+</xsl:template>
+
+<xsl:template match="CONST" mode="pure">
+ <m:ci definitionURL="{@uri}" helm:xref="{@id}">
+ <xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:call-template name="name_of_uri">
+ <xsl:with-param name="uri" select="@uri"/>
+ </xsl:call-template></xsl:with-param></xsl:call-template>
+ <!-- <xsl:value-of select="document(concat(string($absPath),@uri))/*/@name"/> -->
+ </m:ci>
+</xsl:template>
+
+<xsl:template match="MUTIND" mode="pure">
+ <m:ci definitionURL="{@uri}" helm:xref="{@id}">
+ <xsl:variable name="index"><xsl:value-of select="@noType"/></xsl:variable>
+ <xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="document(concat(string($absPath),@uri))/InductiveDefinition/InductiveType[position()=number($index)+1]/@name"/></xsl:with-param></xsl:call-template>
+ </m:ci>
+</xsl:template>
+
+<xsl:template match="MUTCONSTRUCT" mode="pure">
+ <m:ci definitionURL="{@uri}" helm:xref="{@id}">
+ <xsl:variable name="Tindex"><xsl:value-of select="@noType"/></xsl:variable>
+ <xsl:variable name="Cindex"><xsl:value-of select="@noConstr"/></xsl:variable>
+ <xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="document(concat(string($absPath),@uri))/InductiveDefinition/InductiveType[position()=number($Tindex)+1]/Constructor[position()=number($Cindex)]/@name"/></xsl:with-param></xsl:call-template>
+ </m:ci>
+</xsl:template>
+
+<xsl:template match="MUTCASE" mode="pure">
+ <xsl:variable name="Tindex"><xsl:value-of select="@noType"/></xsl:variable>
+ <xsl:variable name="Turi"><xsl:value-of select="@uriType"/></xsl:variable>
+ <m:apply helm:xref="{@id}">
+ <m:csymbol>mutcase</m:csymbol>
+ <xsl:apply-templates select="patternsType/*[1]" mode="noannot"/>
+ <xsl:apply-templates select="inductiveTerm/*[1]" mode="noannot"/>
+ <xsl:variable name="nop"><xsl:value-of select="document(concat(string($absPath),$Turi))/InductiveDefinition/@noParams"/></xsl:variable>
+ <xsl:for-each select="pattern">
+ <xsl:variable name="pos" select="position()"/>
+ <xsl:variable name="nopar"><xsl:apply-templates select="document(concat(string($absPath),$Turi))/InductiveDefinition/InductiveType[position()=number($Tindex)+1]/Constructor[position()=number($pos)]/*[1]" mode="counting"><xsl:with-param name="noparams" select="$nop"/></xsl:apply-templates></xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$nopar = 0">
+ <m:ci>
+ <xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="document(concat(string($absPath),$Turi))/InductiveDefinition/InductiveType[position()=number($Tindex)+1]/Constructor[position()=number($pos)]/@name"/></xsl:with-param></xsl:call-template>
+ </m:ci>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:apply>
+ <m:csymbol>app</m:csymbol>
+ <m:ci>
+ <xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="document(concat(string($absPath),$Turi))/InductiveDefinition/InductiveType[position()=number($Tindex)+1]/Constructor[position()=number($pos)]/@name"/></xsl:with-param></xsl:call-template>
+ </m:ci>
+ <xsl:apply-templates select="./*[1]" mode="abstparams"><xsl:with-param name="noparams" select="$nopar"/><xsl:with-param name="binder">LAMBDA</xsl:with-param></xsl:apply-templates>
+ </m:apply>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:apply-templates select="./*[1]" mode="abstparams"><xsl:with-param name="noparams" select="$nopar"/><xsl:with-param name="target" select="1"/><xsl:with-param name="binder">LAMBDA</xsl:with-param></xsl:apply-templates>
+ </xsl:for-each>
+ </m:apply>
+</xsl:template>
+
+<xsl:template match="FIX" mode="pure">
+ <m:apply helm:xref="{@id}">
+ <xsl:variable name="findex"><xsl:value-of select="@noFun"/></xsl:variable>
+ <m:csymbol>fix</m:csymbol>
+ <m:ci><xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="FixFunction[position()=number($findex)+1]/@name"/></xsl:with-param></xsl:call-template></m:ci>
+ <xsl:apply-templates mode="pure" select="*"/>
+ </m:apply>
+</xsl:template>
+
+<xsl:template match="COFIX" mode="pure">
+ <m:apply helm:xref="{@id}">
+ <xsl:variable name="findex"><xsl:value-of select="@noFun"/></xsl:variable>
+ <m:csymbol>cofix</m:csymbol>
+ <m:ci><xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="CofixFunction[position()=number($findex)+1]/@name"/></xsl:with-param></xsl:call-template></m:ci>
+ <xsl:apply-templates mode="pure" select="*"/>
+ </m:apply>
+</xsl:template>
+
+<!-- ELEMENTS OF CIC TERMS -->
+
+<xsl:template match="FixFunction" mode="pure">
+ <m:bvar>
+ <m:ci><xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="@name"/></xsl:with-param></xsl:call-template></m:ci>
+ <m:type><xsl:apply-templates select="type/*[1]" mode="noannot"/></m:type>
+ </m:bvar>
+ <xsl:apply-templates select="body/*[1]" mode="noannot"/>
+</xsl:template>
+
+<xsl:template match="CofixFunction" mode="pure">
+ <m:bvar>
+ <m:ci><xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="@name"/></xsl:with-param></xsl:call-template></m:ci>
+ <m:type><xsl:apply-templates select="type/*[1]" mode="noannot"/></m:type>
+ </m:bvar>
+ <xsl:apply-templates select="body/*[1]" mode="noannot"/>
+</xsl:template>
+
+</xsl:stylesheet>
+
+
+
+
+
--- /dev/null
+<?xml version="1.0"?>
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:m="http://www.w3.org/1998/Math/MathML">
+
+<!--***********************************************************************-->
+<!-- From MathML content to HTML -->
+<!-- HELM Group: Asperti, Padovani, Sacerdoti, Schena -->
+<!--***********************************************************************-->
+
+
+<xsl:include href="html_init.xsl"/>
+<xsl:include href="html_set.xsl"/>
+<xsl:include href="html_reals.xsl"/>
+
+
+<!-- <xsl:variable name="absPath">http://localhost:8081/getciconly?uri=</xsl:variable>-->
+<xsl:variable name="header" select="document('http://localhost:8081/conf')/html_link"/>
+
+<xsl:variable name="showcast" select="0"/>
+
+
+<!--***********************************************************************-->
+<!-- HTML Head and Body -->
+<!--***********************************************************************-->
+
+<xsl:output method="html"/>
+
+<xsl:variable name="framewidth" select="36"/>
+
+<xsl:template match="/">
+ <xsl:param name="current_indent" select="0"/>
+ <html>
+ <head></head>
+ <body>
+ <xsl:apply-templates>
+ <xsl:with-param name="current_indent" select="0"/>
+ </xsl:apply-templates>
+ </body>
+ </html>
+</xsl:template>
+
+<!--***********************************************************************-->
+<!-- Indentation -->
+<!--***********************************************************************-->
+
+<xsl:template name="make_indent">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:if test="$current_indent > 0">
+ <xsl:text> </xsl:text>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent - 1"/>
+ </xsl:call-template>
+ </xsl:if>
+</xsl:template>
+
+<!-- Syntactic Sugar -->
+
+<xsl:template match="m:type">
+<xsl:param name="current_indent" select="0"/>
+<xsl:apply-templates>
+ <xsl:with-param name="current_indent"
+ select="$current_indent"/>
+</xsl:apply-templates>
+</xsl:template>
+
+<xsl:template match="m:condition">
+<xsl:param name="current_indent" select="0"/>
+<xsl:apply-templates>
+ <xsl:with-param name="current_indent"
+ select="$current_indent"/>
+</xsl:apply-templates>
+</xsl:template>
+
+<xsl:template match="m:math">
+<xsl:param name="current_indent" select="0"/>
+<xsl:apply-templates>
+ <xsl:with-param name="current_indent"
+ select="$current_indent"/>
+</xsl:apply-templates>
+</xsl:template>
+
+<!-- CSYMBOL -->
+
+<xsl:template match="m:apply[m:csymbol]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="name">
+ <xsl:value-of select="m:csymbol"/>
+ </xsl:variable>
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="m:csymbol" mode="charcount"/>
+ </xsl:variable>
+ <!-- <xsl:value-of select="$current_indent"/> -->
+ <!-- <xsl:value-of select="$charlength"/> -->
+ <xsl:choose>
+ <xsl:when test="$name='prod'">
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <!-- Π -->
+ <FONT FACE="symbol" SIZE="+2" color="blue">P</FONT>
+ <xsl:apply-templates select="m:bvar/m:ci"/>
+ <xsl:text>:</xsl:text>
+ <xsl:apply-templates select="m:bvar/m:type">
+ <xsl:with-param name="current_indent"
+ select="$current_indent + 2 + string-length(m:bvar/m:ci)"/>
+ </xsl:apply-templates><BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <xsl:text>.</xsl:text>
+ <xsl:apply-templates select="*[position()=3]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- Π -->
+ <FONT FACE="symbol" SIZE="+2" color="blue">P</FONT>
+ <xsl:apply-templates select="m:bvar/m:ci"/>
+ <xsl:text>:</xsl:text>
+ <xsl:apply-templates select="m:bvar/m:type"/>
+ <xsl:text>.</xsl:text>
+ <xsl:apply-templates select="*[position()=3]"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:when test="$name='arrow'">
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[position()=2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <!-- -> -->
+ <FONT FACE="symbol" SIZE="+2" color="blue">®</FONT>
+ <xsl:apply-templates select="*[position()=3]">
+ <xsl:with-param name="current_indent" select="$current_indent + 5"/>
+ </xsl:apply-templates>
+ <xsl:text>)</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[position()=2]"/>
+ <!-- -> -->
+ <FONT FACE="symbol" SIZE="+2" color="blue">®</FONT>
+ <xsl:apply-templates select="*[position()=3]"/>
+ <xsl:text>)</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:when test="$name='app'">
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[position()=2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <xsl:for-each select="*[position()>2]">
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <xsl:apply-templates select=".">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ </xsl:for-each>
+ <xsl:text>)</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[position()=2]"/>
+ <xsl:for-each select="*[position()>2]">
+ <xsl:text> </xsl:text>
+ <xsl:apply-templates select="."/>
+ </xsl:for-each>
+ <xsl:text>)</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:when test="$name='cast'">
+ <xsl:choose>
+ <xsl:when test="$showcast = 1">
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[position()=2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates><BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/> </xsl:call-template>
+ <xsl:text>:></xsl:text>
+ <xsl:apply-templates select="*[position()=3]">
+ <xsl:with-param name="current_indent" select="$current_indent + 3"/>
+ </xsl:apply-templates>
+ <xsl:text>)</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[position()=2]"/>
+ <xsl:text>:></xsl:text>
+ <xsl:apply-templates select="*[position()=3]"/>
+ <xsl:text>)</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="*[position()=2]">
+ <xsl:with-param name="current_indent" select="$current_indent"/>
+ </xsl:apply-templates>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:when test="$name='Prop'">
+ <xsl:text>Prop</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name='Set'">
+ <xsl:text>Set</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name='Type'">
+ <xsl:text>Type</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name='mutcase'">
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <xsl:text><</xsl:text>
+ <xsl:apply-templates select="*[position()=2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <xsl:text>> </xsl:text>
+ <xsl:text>CASE </xsl:text>
+ <xsl:apply-templates select="*[position()=3]">
+ <xsl:with-param name="current_indent" select="$current_indent + 8"/>
+ </xsl:apply-templates>
+ <xsl:text> OF </xsl:text>
+ <xsl:for-each select="*[position() mod 2 = 0 and position()>3]">
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <xsl:choose>
+ <xsl:when test="position() = 1">
+ <xsl:text>  </xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>| </xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:apply-templates select="."/>
+ <FONT FACE="symbol" SIZE="+2" color="green">Þ</FONT>
+ <xsl:apply-templates select="following-sibling::*[position()= 1]">
+ <xsl:with-param name="current_indent" select="$current_indent + 4 + string-length()"/>
+ </xsl:apply-templates>
+ </xsl:for-each>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text><</xsl:text>
+ <xsl:apply-templates select="*[position()=2]"/>
+ <xsl:text>> </xsl:text>
+ <xsl:text>CASE </xsl:text>
+ <xsl:apply-templates select="*[position()=3]"/>
+ <xsl:text> OF </xsl:text>
+ <xsl:for-each select="*[position() mod 2 = 0 and position()>3]">
+ <xsl:choose>
+ <xsl:when test="not(position() = 1)">
+ <xsl:text> | </xsl:text>
+ </xsl:when>
+ </xsl:choose>
+ <xsl:apply-templates select="."/>
+ <FONT FACE="symbol" SIZE="+2" color="green">Þ</FONT>
+ <xsl:apply-templates select="following-sibling::*[position()= 1]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2 + string-length()"/>
+ </xsl:apply-templates>
+ </xsl:for-each>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:when test="$name='fix'">
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <xsl:text>FIX</xsl:text>
+ <xsl:value-of select="m:ci"/>
+ <xsl:text>{</xsl:text>
+ <xsl:for-each select="m:bvar">
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <xsl:value-of select="m:ci"/>
+ <xsl:text>:</xsl:text>
+ <xsl:apply-templates select="m:type">
+ <xsl:with-param name="current_indent"
+ select="$current_indent + 5 + string-length(m:ci)"/>
+ </xsl:apply-templates>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <xsl:text>:=</xsl:text>
+ <xsl:apply-templates select="following-sibling::*[position() = 1]">
+ <xsl:with-param name="current_indent" select="$current_indent +2"/>
+ </xsl:apply-templates>
+ </xsl:for-each>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <xsl:text>}</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>FIX</xsl:text>
+ <xsl:value-of select="m:ci"/>
+ <xsl:text>{</xsl:text>
+ <xsl:for-each select="m:bvar">
+ <xsl:value-of select="m:ci"/>
+ <xsl:text>:</xsl:text>
+ <xsl:apply-templates select="m:type"/>
+ <xsl:text>:=</xsl:text>
+ <xsl:apply-templates select="following-sibling::*[position() = 1]"/>
+ <xsl:choose>
+ <xsl:when test="position()=last()">
+ <xsl:text>}</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:when test="$name='cofix'">
+ <xsl:choose>
+ <xsl:when test="($charlength + 10) > $framewidth">
+ <xsl:text>COFIX</xsl:text>
+ <xsl:value-of select="m:ci"/>
+ <xsl:text>{</xsl:text>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <xsl:for-each select="m:bvar">
+ <xsl:value-of select="m:ci"/>
+ <xsl:text>:</xsl:text>
+ <xsl:apply-templates select="m:type">
+ <xsl:with-param name="current_indent"
+ select="$current_indent + 5 + string-length(m:ci)"/>
+ </xsl:apply-templates>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <xsl:text>:=</xsl:text>
+ <xsl:apply-templates select="following-sibling::*[position() = 1]">
+ <xsl:with-param name="current_indent" select="$current_indent + 3"/>
+ </xsl:apply-templates>
+
+ </xsl:for-each>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <xsl:text>}</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>COFIX</xsl:text>
+ <xsl:value-of select="m:ci"/>
+ <xsl:text>{</xsl:text>
+ <xsl:for-each select="m:bvar">
+ <xsl:value-of select="m:ci"/>
+ <xsl:text>:</xsl:text>
+ <xsl:apply-templates select="m:type"/>
+ <xsl:text>:=</xsl:text>
+ <xsl:apply-templates select="following-sibling::*[position() = 1]"/>
+ <xsl:choose>
+ <xsl:when test="position()=last()">
+ <xsl:text>}</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ </xsl:choose>
+ <!-- </m:mrow> -->
+</xsl:template>
+
+<!-- LAMBDA -->
+
+<xsl:template match="m:lambda">
+<xsl:param name="current_indent" select="0"/>
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="*[position()=1]" mode="charcount"/>
+ <!-- <xsl:apply-templates select="." mode="charcount"/> -->
+ </xsl:variable>
+ <!-- <xsl:value-of select="$charlength"/> -->
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <!-- λ -->
+ <FONT FACE="symbol" SIZE="+2" color="red">l</FONT>
+ <xsl:apply-templates select="m:bvar/m:ci"/>
+ <xsl:text>:</xsl:text>
+ <xsl:apply-templates select="m:bvar/m:type">
+ <xsl:with-param name="current_indent"
+ select="$current_indent + 2 + string-length(m:bvar/m:ci)"/>
+ </xsl:apply-templates><BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <xsl:text>.</xsl:text>
+ <xsl:apply-templates select="*[position()=2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- λ -->
+ <FONT FACE="symbol" SIZE="+2" color="red">l</FONT>
+ <xsl:apply-templates select="m:bvar/m:ci"/>
+ <xsl:text>:</xsl:text>
+ <xsl:apply-templates select="m:bvar/m:type"/>
+ <xsl:text>.</xsl:text>
+ <xsl:apply-templates select="*[position()=2]"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- href -->
+<xsl:template match="m:ci">
+ <xsl:choose>
+ <xsl:when test="boolean(@definitionURL)">
+<!-- CSC: non bisogna piu' utilizzare la url, bensi' la uri -->
+<!-- <xsl:variable name="url">
+ <xsl:value-of select="concat(string($absPath),
+ @definitionURL)"/>
+ </xsl:variable>-->
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string(@definitionURL))"/>
+ </xsl:attribute>
+ <xsl:apply-templates/>
+ </a>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="."/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- COUNTING -->
+
+<xsl:template match="m:ci|m:csymbol" mode="charcount">
+<xsl:param name="incurrent_length" select="0"/>
+ <xsl:choose>
+ <xsl:when test="$framewidth >= ($incurrent_length + string-length())">
+ <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>
+ <xsl:choose>
+ <xsl:when test="string($siblength) = """>
+ <xsl:value-of select="$incurrent_length + string-length()"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="number($siblength)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$incurrent_length + string-length()"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="*" mode="charcount">
+ <xsl:param name="incurrent_length" select="0"/>
+ <xsl:choose>
+ <xsl:when test="count(child::*) = 0">
+ <xsl:value-of select="$incurrent_length"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:variable name="childlength"><xsl:apply-templates select="*[position()=1]" mode="charcount"><xsl:with-param name="incurrent_length" select="$incurrent_length"/></xsl:apply-templates></xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$framewidth >= number($childlength)">
+ <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>
+ <xsl:choose>
+ <xsl:when test="string($siblength) = """>
+ <xsl:value-of select="number($childlength)"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="number($siblength)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="number($childlength)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+
+<!--***********************************************************************-->
+<!-- OBJECTS -->
+<!--***********************************************************************-->
+
+<!-- DEFINITION -->
+
+<xsl:template match="Definition">
+<xsl:param name="current_indent" select="0"/>
+<p>
+DEFINITION <xsl:value-of select="@name"/>(<xsl:if test="string(./Params) != """><xsl:value-of select="Params"/></xsl:if>)<BR/>
+TYPE =<BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 7"/>
+ </xsl:call-template>
+ <xsl:apply-templates select="type/*[1]">
+ <xsl:with-param name="current_indent" select="$current_indent + 7"/>
+ </xsl:apply-templates><BR/>
+BODY =<BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 7"/>
+ </xsl:call-template>
+ <xsl:apply-templates select="body/*[1]">
+ <xsl:with-param name="current_indent" select="$current_indent + 7"/>
+ </xsl:apply-templates>
+</p>
+</xsl:template>
+
+<!-- AXIOM -->
+
+<xsl:template match="Axiom">
+<xsl:param name="current_indent" select="0"/>
+<p>
+AXIOM <xsl:value-of select="@name"/>(<xsl:if test="string(./Params) != """><xsl:value-of select="Params"/></xsl:if>)<BR/>
+TYPE = <xsl:apply-templates select="type/*[1]">
+ <xsl:with-param name="current_indent" select="$current_indent + 7"/>
+ </xsl:apply-templates>
+</p>
+</xsl:template>
+
+<!-- UNFINISHED PROOF -->
+
+<xsl:template match="CurrentProof">
+<xsl:param name="current_indent" select="0"/>
+<p>
+UNFINISHED PROOF <xsl:value-of select="@name"/>(<xsl:if test="string(./Params) != """><xsl:value-of select="Params"/></xsl:if>)<BR/>
+THESIS: <xsl:apply-templates select="type/*[1]">
+ <xsl:with-param name="current_indent" select="$current_indent + 8"/>
+ </xsl:apply-templates><BR/>
+CONJECTURES:
+ <xsl:for-each select="Conjecture">
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 8"/>
+ </xsl:call-template>
+ <xsl:value-of select="./@no"/> :
+ <xsl:apply-templates select="./*[1]">
+ <xsl:with-param name="current_indent" select="$current_indent + 11"/>
+ </xsl:apply-templates>
+ </xsl:for-each>
+ <BR/>
+PROOF:
+ <xsl:apply-templates select="body/*[1]">
+ <xsl:with-param name="current_indent" select="$current_indent + 8"/>
+ </xsl:apply-templates>
+</p>
+</xsl:template>
+
+<!-- MUTUAL INDUCTIVE DEFINITION -->
+
+<xsl:template match="InductiveDefinition">
+<xsl:param name="current_indent" select="0"/>
+<p>
+ <xsl:for-each select="InductiveType">
+ <xsl:choose>
+ <xsl:when test="position() = 1">
+ <xsl:choose>
+ <xsl:when test="string(./@inductive) = "true"">
+ INDUCTIVE DEFINITION
+ </xsl:when>
+ <xsl:otherwise>
+ COINDUCTIVE DEFINITION
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ AND
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:value-of select="./@name"/>(<xsl:if test="string(../Params) != """><xsl:value-of select="../Params"/></xsl:if>)
+ [
+ <xsl:if test="string(../Param) != """>
+ <xsl:for-each select="../Param">
+ <xsl:value-of select="./@name"/>
+ :
+ <xsl:apply-templates select="*"/>
+ </xsl:for-each>
+ </xsl:if>
+ ] <BR/>
+ OF ARITY
+ <xsl:apply-templates select="./arity/*[1]">
+ <xsl:with-param name="current_indent" select="$current_indent + 9"/>
+ </xsl:apply-templates> <BR/>
+ BUILT FROM:
+ <xsl:for-each select="./Constructor">
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 3"/>
+ </xsl:call-template>
+ <xsl:choose>
+ <xsl:when test="position() = 1">
+ <xsl:text>  </xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>| </xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:value-of select="./@name"/>
+ <xsl:text>: </xsl:text>
+ <xsl:apply-templates select="./*[1]">
+ <xsl:with-param name="current_indent" select="$current_indent + string-length(./@name) + 4"/>
+ </xsl:apply-templates>
+ </xsl:for-each>
+ </xsl:for-each>
+</p>
+</xsl:template>
+
+<!-- VARIABLE -->
+
+<xsl:template match="Variable">
+<xsl:param name="current_indent" select="0"/>
+<p>
+VARIABLE <xsl:value-of select="@name"/><BR/>
+TYPE = <xsl:apply-templates select="type/*[1]">
+ <xsl:with-param name="current_indent" select="$current_indent + 7"/>
+ </xsl:apply-templates>
+</p>
+</xsl:template>
+
+<!--***********************************************************************-->
+<!-- SECTIONS -->
+<!--***********************************************************************-->
+
+<!-- SECTION -->
+
+<xsl:template match="SECTION">
+<xsl:param name="current_indent" select="0"/>
+ <h1>BEGIN OF SECTION</h1>
+ <xsl:apply-templates/>
+ <h1>END OF SECTION</h1>
+</xsl:template>
+
+</xsl:stylesheet>
--- /dev/null
+<?xml version="1.0"?>
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:m="http://www.w3.org/1998/Math/MathML">
+
+<!--***********************************************************************-->
+<!-- INIT style for HTML -->
+<!-- HELM Group: Asperti, Padovani, Sacerdoti, Schena -->
+<!--***********************************************************************-->
+
+<xsl:variable name="absPath">http://localhost:8081/getciconly?uri=</xsl:variable>
+
+
+<!-- BASIC OPERATORS -->
+
+ <xsl:template match="m:apply[m:and|m:or|m:eq|m:neq|m:leq|m:lt
+ |m:geq|m:gt|m:plus|m:times]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="*[1]/@definitionURL"/>
+ </xsl:variable>
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="*[1]" mode="charcount"/>
+ </xsl:variable>
+ <xsl:variable name="symbol">
+ <xsl:choose>
+ <xsl:when test="m:and">
+ <xsl:value-of select="'Ù'"/>
+ </xsl:when>
+ <xsl:when test="m:or">
+ <xsl:value-of select="'Ú'"/>
+ </xsl:when>
+ <xsl:when test="m:eq">
+ <xsl:value-of select="'='"/>
+ </xsl:when>
+ <xsl:when test="m:neq">
+ <xsl:value-of select="'¹'"/>
+ </xsl:when>
+ <xsl:when test="m:leq">
+ <xsl:value-of select="'£'"/>
+ </xsl:when>
+ <xsl:when test="m:lt">
+ <xsl:value-of select="'<'"/>
+ </xsl:when>
+ <xsl:when test="m:geq">
+ <xsl:value-of select="'³'"/>
+ </xsl:when>
+ <xsl:when test="m:gt">
+ <xsl:value-of select="'>'"/>
+ </xsl:when>
+ <xsl:when test="m:plus">
+ <xsl:value-of select="'+'"/>
+ </xsl:when>
+ <xsl:when test="m:times">
+ <xsl:value-of select="'*'"/>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <FONT FACE="symbol" color="blue">
+ <xsl:value-of select="$symbol"/>
+ </FONT>
+ </a>
+ <xsl:apply-templates select="*[3]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <xsl:text>)</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[2]"/>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <FONT FACE="symbol" color="blue">
+ <xsl:value-of select="$symbol"/>
+ </FONT>
+ </a>
+ <xsl:apply-templates select="*[3]"/>
+ <xsl:text>)</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+<!-- MINUS (can be unary!) -->
+
+<xsl:template match="m:apply[m:minus]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="*[1]/@definitionURL"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="count(child::*)=2">
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <xsl:text>-</xsl:text>
+ </a>
+ <xsl:apply-templates select="*[2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 1"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="*[1]" mode="charcount"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <xsl:text>-</xsl:text>
+ </a>
+ <xsl:apply-templates select="*[3]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <xsl:text>)</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[2]"/>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <xsl:text>-</xsl:text>
+ </a>
+ <xsl:apply-templates select="*[3]"/>
+ <xsl:text>)</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+<!-- NOT -->
+
+ <xsl:template match="m:apply[m:not]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="m:not/@definitionURL"/>
+ </xsl:variable>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <FONT FACE="symbol" color="blue">Ø</FONT>
+ </a>
+ <xsl:apply-templates select="*[2]"/>
+ </xsl:template>
+
+<!-- EXISTS -->
+
+ <xsl:template match="m:apply[m:exists]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="m:exists/@definitionURL"/>
+ </xsl:variable>
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="m:exists" mode="charcount"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <FONT FACE="symbol" color="blue">$</FONT>
+ </a>
+ <xsl:apply-templates select="m:bvar/m:ci"/>
+ <xsl:text>:</xsl:text>
+ <xsl:apply-templates select="m:condition">
+ <xsl:with-param name="current_indent" select="$current_indent + 2 +
+ string-length(bvar/ci)"/>
+ </xsl:apply-templates>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <xsl:text>.</xsl:text>
+ <xsl:apply-templates select="*[last()]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <FONT FACE="symbol" color="blue">$</FONT>
+ </a>
+ <xsl:apply-templates select="m:bvar/m:ci"/>
+ <xsl:text>:</xsl:text>
+ <xsl:apply-templates select="m:condition"/>
+ <xsl:text>.</xsl:text>
+ <xsl:apply-templates select="*[last()]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+
+
+
+<!-- COUNTING -->
+
+<xsl:template match="m:cn|m:and|m:or|m:not|m:exists|m:eq|m:neq
+ |m:lt|m:leq|m:gt|m:geq|m:plus|m:minus|m:times" mode="charcount">
+<xsl:param name="incurrent_length" select="0"/>
+ <xsl:choose>
+ <xsl:when test="$framewidth >= ($incurrent_length + string-length())">
+ <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>
+ <xsl:choose>
+ <xsl:when test="string($siblength) = """>
+ <xsl:value-of select="$incurrent_length + string-length()"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="number($siblength)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$incurrent_length + string-length()"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+</xsl:stylesheet>
+
+
--- /dev/null
+<?xml version="1.0"?>
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:m="http://www.w3.org/1998/Math/MathML">
+
+<!--***********************************************************************-->
+<!-- INIT style for HTML -->
+<!-- HELM Group: Asperti, Padovani, Sacerdoti, Schena -->
+<!--***********************************************************************-->
+
+<xsl:variable name="absPath">http://localhost:8081/getciconly?uri=</xsl:variable>
+
+<!-- LIMIT -->
+
+<xsl:template match="m:apply[m:limit]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="m:limit/@definitionURL"/>
+ </xsl:variable>
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="m:limit" mode="charcount"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <xsl:text>lim</xsl:text>
+ </a>
+ <SUB>
+ <xsl:apply-templates select="m:bvar/m:ci"/>
+ <FONT FACE="symbol" color="blue">®</FONT>
+ <xsl:apply-templates select="m:lowlimit"/>
+ </SUB>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 5"/>
+ </xsl:call-template>
+ <xsl:apply-templates select="*[4]">
+ <xsl:with-param name="current_indent" select="$current_indent + 5"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <xsl:text>lim</xsl:text>
+ </a>
+ <SUB>
+ <xsl:apply-templates select="m:bvar/m:ci"/>
+ <FONT FACE="symbol" color="blue">®</FONT>
+ <xsl:apply-templates select="m:lowlimit"/>
+ </SUB>
+ <xsl:apply-templates select="*[4]">
+ <xsl:with-param name="current_indent" select="$current_indent + 5"/>
+ </xsl:apply-templates>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+<!-- DIFFERENTIATION -->
+
+<xsl:template match="m:apply[m:diff]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="m:diff/@definitionURL"/>
+ </xsl:variable>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <SUP>d</SUP>
+ <xsl:text>/</xsl:text>
+ <SUB>
+ <xsl:text>d</xsl:text>
+ <xsl:value-of select="m:bvar/m:ci"/>
+ </SUB>
+ </a>
+ <xsl:apply-templates select="*[3]">
+ <xsl:with-param name="current_indent" select="$current_indent + 5"/>
+ </xsl:apply-templates>
+ </xsl:template>
+
+<!-- ABSOLUTE VALUE -->
+<xsl:template match="m:apply[m:abs]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="m:abs/@definitionURL"/>
+ </xsl:variable>
+ <xsl:text>|</xsl:text>
+ <xsl:apply-templates select="*[2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <xsl:text>|</xsl:text>
+ </xsl:template>
+
+<!-- FACTORIAL -->
+
+<xsl:template match="m:apply[m:fact]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="m:abs/@definitionURL"/>
+ </xsl:variable>
+ <xsl:apply-templates select="*[2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <xsl:text>!</xsl:text>
+ </xsl:template>
+
+<!-- SQUARE ROOT -->
+
+<xsl:template match="m:apply[m:root]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="m:abs/@definitionURL"/>
+ </xsl:variable>
+ <xsl:text>(sqr</xsl:text>
+ <xsl:apply-templates select="*[2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 5"/>
+ </xsl:apply-templates>
+ <xsl:text>)</xsl:text>
+ </xsl:template>
+
+<!-- POWER -->
+
+<xsl:template match="m:apply[m:power]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="m:power/@definitionURL"/>
+ </xsl:variable>
+ <xsl:apply-templates select="*[2]"/>
+ <SUP>
+ <xsl:apply-templates select="*[3]"/>
+ </SUP>
+ </xsl:template>
+
+<!-- MIN and MAX (binari: estendere) -->
+
+ <xsl:template match="m:apply[m:min|m:max]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="*[1]/@definitionURL"/>
+ </xsl:variable>
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="*[1]" mode="charcount"/>
+ </xsl:variable>
+ <xsl:variable name="symbol">
+ <xsl:choose>
+ <xsl:when test="m:min">
+ <xsl:value-of select="'min'"/>
+ </xsl:when>
+ <xsl:when test="m:max">
+ <xsl:value-of select="'max'"/>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <xsl:value-of select="$symbol"/>
+ </a>
+ <xsl:text>{</xsl:text>
+ <xsl:apply-templates select="*[2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <xsl:text>,</xsl:text>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 5"/>
+ </xsl:call-template>
+ <xsl:apply-templates select="*[3]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <xsl:text>}</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <xsl:value-of select="$symbol"/>
+ </a>
+ <xsl:text>{</xsl:text>
+ <xsl:apply-templates select="*[2]"/>
+ <xsl:text>, </xsl:text>
+ <xsl:apply-templates select="*[3]"/>
+ <xsl:text>}</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+<!-- COUNTING -->
+
+<xsl:template match="m:abs|m:fact|m:root
+ |m:limit|m:diff|m:min|m:max" mode="charcount">
+<xsl:param name="incurrent_length" select="0"/>
+ <xsl:choose>
+ <xsl:when test="$framewidth >= ($incurrent_length + string-length())">
+ <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>
+ <xsl:choose>
+ <xsl:when test="string($siblength) = """>
+ <xsl:value-of select="$incurrent_length + string-length()"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="number($siblength)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$incurrent_length + string-length()"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+</xsl:stylesheet>
+
+
+
+
+
+
+
--- /dev/null
+<?xml version="1.0"?>
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:m="http://www.w3.org/1998/Math/MathML">
+
+<!--***********************************************************************-->
+<!-- INIT style for HTML -->
+<!-- HELM Group: Asperti, Padovani, Sacerdoti, Schena -->
+<!--***********************************************************************-->
+
+<xsl:variable name="absPath">http://localhost:8081/getciconly?uri=</xsl:variable>
+
+<!-- IN -->
+
+ <xsl:template match="m:apply[m:in]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="m:in/@definitionURL"/>
+ </xsl:variable>
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="m:in" mode="charcount"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <FONT FACE="symbol" SIZE="+2" color="blue">Î</FONT>
+ </a>
+ <xsl:apply-templates select="*[3]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <xsl:text>)</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[2]"/>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <FONT FACE="symbol" SIZE="+2" color="blue">Î</FONT>
+ </a>
+ <xsl:apply-templates select="*[3]"/>
+ <xsl:text>)</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+<!-- NOTIN -->
+
+ <xsl:template match="m:apply[m:notin]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="m:notin/@definitionURL"/>
+ </xsl:variable>
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="m:notin" mode="charcount"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <FONT FACE="symbol" SIZE="+2" color="blue">Ï</FONT>
+ <xsl:apply-templates select="*[3]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <xsl:text>)</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[2]"/>
+ <FONT FACE="symbol" SIZE="+2" color="blue">Ï</FONT>
+ <xsl:apply-templates select="*[3]"/>
+ <xsl:text>)</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+<!-- SET -->
+
+ <xsl:template match="m:set">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="concat(string($absPath), @definitionURL)"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="count(child::*) = 0">
+ <FONT FACE="symbol" color="blue">Æ</FONT>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="." mode="charcount"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="name(*[1]) = 'm:bvar'">
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <xsl:text>{</xsl:text>
+ <xsl:apply-templates select="m:bvar/m:ci"/>
+ <xsl:text>:</xsl:text>
+ <xsl:apply-templates select="m:bvar/m:type">
+ <xsl:with-param name="current_indent"
+ select="$current_indent + 2 + string-length(m:bvar/m:ci)"/>
+ </xsl:apply-templates><BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <xsl:text>|</xsl:text>
+ <xsl:apply-templates select="m:condition">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <xsl:text>}</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>{</xsl:text>
+ <xsl:apply-templates select="m:bvar/m:ci"/>
+ <xsl:text>:</xsl:text>
+ <xsl:apply-templates select="m:bvar/m:type"/>
+ <xsl:text>|</xsl:text>
+ <xsl:apply-templates select="*[position()=2]"/>
+ <xsl:text>}</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <xsl:text>{</xsl:text>
+ <xsl:apply-templates select="*[position()=1]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <xsl:for-each select="*[position()>1]">
+ <xsl:text>,</xsl:text>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <xsl:apply-templates select=".">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ </xsl:for-each>
+ <xsl:text>}</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>{</xsl:text>
+ <xsl:for-each select="*">
+ <xsl:apply-templates select="."/>
+ <xsl:choose>
+ <xsl:when test="position() = last()">
+ <xsl:text>}</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>,</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+
+<!-- INTERSECTION -->
+
+<xsl:template match="m:apply[m:intersect]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="m:intersect/@definitionURL"/>
+ </xsl:variable>
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="m:intersect" mode="charcount"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <FONT FACE="symbol" SIZE="+2" color="blue">Ç</FONT>
+ </a>
+ <xsl:apply-templates select="*[3]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <xsl:text>)</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[2]"/>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <FONT FACE="symbol" SIZE="+2" color="blue">Ç</FONT>
+ </a>
+ <xsl:apply-templates select="*[3]"/>
+ <xsl:text>)</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+<!-- UNION -->
+
+<xsl:template match="m:apply[m:union]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="m:union/@definitionURL"/>
+ </xsl:variable>
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="m:union" mode="charcount"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <FONT FACE="symbol" SIZE="+2" color="blue">È</FONT>
+ </a>
+ <xsl:apply-templates select="*[3]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <xsl:text>)</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[2]"/>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <FONT FACE="symbol" SIZE="+2" color="blue">È</FONT>
+ </a>
+ <xsl:apply-templates select="*[3]"/>
+ <xsl:text>)</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+<!-- SUBSET -->
+<xsl:template match="m:apply[m:subset]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="m:subset/@definitionURL"/>
+ </xsl:variable>
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="m:subset" mode="charcount"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <FONT FACE="symbol" SIZE="+2" color="blue">Í</FONT>
+ </a>
+ <xsl:apply-templates select="*[3]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <xsl:text>)</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[2]"/>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <FONT FACE="symbol" SIZE="+2" color="blue">Í</FONT>
+ </a>
+ <xsl:apply-templates select="*[3]"/>
+ <xsl:text>)</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+<!-- PRSUBSET -->
+<xsl:template match="m:apply[m:prsubset]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="m:prsubset/@definitionURL"/>
+ </xsl:variable>
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="m:prsubset" mode="charcount"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <FONT FACE="symbol" SIZE="+2" color="blue">Ì</FONT>
+ </a>
+ <xsl:apply-templates select="*[3]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <xsl:text>)</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[2]"/>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <FONT FACE="symbol" SIZE="+2" color="blue">Ì</FONT>
+ </a>
+ <xsl:apply-templates select="*[3]"/>
+ <xsl:text>)</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+
+<!-- SETDIFF -->
+
+<xsl:template match="m:apply[m:setdiff]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="m:setdiff/@definitionURL"/>
+ </xsl:variable>
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="m:setdiff" mode="charcount"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <xsl:text>/</xsl:text>
+ </a>
+ <xsl:apply-templates select="*[3]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <xsl:text>)</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[2]"/>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <xsl:text>/</xsl:text>
+ </a>
+ <xsl:apply-templates select="*[3]"/>
+ <xsl:text>)</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+<!-- CARD -->
+<xsl:template match="m:apply[m:card]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="m:card/@definitionURL"/>
+ </xsl:variable>
+ <xsl:text>|</xsl:text>
+ <xsl:apply-templates select="*[2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <xsl:text>|</xsl:text>
+ </xsl:template>
+
+<!-- COUNTING -->
+
+<xsl:template match="m:in|m:notin|m:intersect|m:union
+ |m:subset|m:prsubset|m:setdiff|m:card" mode="charcount">
+<xsl:param name="incurrent_length" select="0"/>
+ <xsl:choose>
+ <xsl:when test="$framewidth >= ($incurrent_length + string-length())">
+ <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>
+ <xsl:choose>
+ <xsl:when test="string($siblength) = """>
+ <xsl:value-of select="$incurrent_length + string-length()"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="number($siblength)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$incurrent_length + string-length()"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+</xsl:stylesheet>
+
+
+
+
+
+
+
--- /dev/null
+<?xml version="1.0"?>
+
+<!-- ====================================================== -->
+<!-- XSL Transform of MathML content to MathML presentation -->
+<!-- By Igor Rodionov, Computer Science Department of -->
+<!-- the University of Western Ontario, London, Canada -->
+<!-- Complies with the W3C Working Draft from Dec.3, 1999 -->
+<!-- Version x.xx from Feb. 18, 2000 -->
+<!-- Comments to: igor@csd.uwo.ca -->
+<!-- -->
+<!-- (C) Copyright 1999, 2000 Symbolic Computation -->
+<!-- Laboratory, University of Western Ontario. -->
+<!-- ====================================================== -->
+
+<!-- ====================================================== -->
+<!-- May 11, 2000 - HELM group: -->
+<!-- Added the namespace prefix to all the output elements -->
+<!-- Changed the mml prefix into m -->
+<!-- Swapped math element out of the semantic element -->
+<!-- Added the declaration of the xlink namespace -->
+<!-- ====================================================== -->
+
+<!-- ====================================================== -->
+<!-- June, 2000 - HELM group: -->
+<!-- Added auxiliary function to insert: -->
+<!-- 1) backwards pointers: helm:xref -->
+<!-- 2) references to definitions: xlink:href -->
+<!-- Added call-templates to the functions: -->
+<!-- insert_xref, insert, insert1, insert2 -->
+<!-- ====================================================== -->
+
+
+<!-- HELM: namespace helm added -->
+<xsl:stylesheet id="mml2mml"
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:m="http://www.w3.org/1998/Math/MathML"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:helm="http://www.cs.unibo.it/helm">
+
+<xsl:output method="xml" indent="yes" encoding="iso-8859-1"/>
+
+<!-- ***************************************************** -->
+<!-- Parameters affectin' stylesheet's run-time behavior -->
+<!-- ***************************************************** -->
+
+<!-- SEM_SW: -1 - strip off all semantics
+ 0 - pass semantics "as is" (default)
+ 1 - add semantics at top level only
+ 2 - add semantics at all levels
+ 3 - semantics at top level with cross-references
+-->
+<!-- HELM: SEM_SW was 0 -->
+<xsl:param name="SEM_SW" select="1"/>
+
+<!-- Miscellaneous Variable Definitions -->
+
+<xsl:variable name="NO" select="0"/>
+<xsl:variable name="YES" select="1"/>
+<xsl:variable name="PAR_NO" select="-7"/>
+<xsl:variable name="PAR_YES" select="-5"/>
+<xsl:variable name="PAR_SAME" select="-3"/>
+<xsl:variable name="NO_PARAM" select="-1"/>
+
+<!-- Operator Precedence Definitions -->
+
+<xsl:variable name="NO_PREC" select="0"/>
+<xsl:variable name="UNION_PREC" select="1"/>
+<xsl:variable name="SETDIFF_PREC" select="1"/>
+<xsl:variable name="INTERSECT_PREC" select="3"/>
+<xsl:variable name="OR_PREC" select="5"/>
+<xsl:variable name="XOR_PREC" select="5"/>
+<xsl:variable name="AND_PREC" select="7"/>
+<xsl:variable name="PLUS_PREC" select="9"/>
+<xsl:variable name="MINUS_PREC" select="9"/>
+<xsl:variable name="MUL_PREC" select="11"/>
+<xsl:variable name="DIV_PREC" select="11"/>
+<xsl:variable name="NEG_PREC" select="13"/>
+<xsl:variable name="FUNCTION_PREC" select="99"/>
+
+<!-- HELM: auxiliary functions for backwards pointers and refs -->
+
+<xsl:template name = "insert_xref">
+ <xsl:if test="@helm:xref">
+ <xsl:attribute name="helm:xref">
+ <xsl:value-of select="@helm:xref"/>
+ </xsl:attribute>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template name = "insert">
+ <xsl:if test="@definitionURL">
+ <xsl:attribute name="xlink:href">
+ <xsl:value-of select="@definitionURL"/>
+ </xsl:attribute>
+ </xsl:if>
+ <xsl:if test="@helm:xref">
+ <xsl:attribute name="helm:xref">
+ <xsl:value-of select="@helm:xref"/>
+ </xsl:attribute>
+ </xsl:if>
+</xsl:template>
+
+<!-- HELM: for use inside m:apply -->
+<xsl:template name = "insert1">
+ <xsl:if test="*[1]/@definitionURL">
+ <xsl:attribute name="xlink:href">
+ <xsl:value-of select="*[1]/@definitionURL"/>
+ </xsl:attribute>
+ </xsl:if>
+ <xsl:if test="*[1]/@helm:xref">
+ <xsl:attribute name="helm:xref">
+ <xsl:value-of select="*[1]/@helm:xref"/>
+ </xsl:attribute>
+ </xsl:if>
+</xsl:template>
+
+<!-- HELM: for use inside "for-each" -->
+<xsl:template name = "insert2">
+ <xsl:if test="../*[1]/@definitionURL">
+ <xsl:attribute name="xlink:href">
+ <xsl:value-of select="../*[1]/@definitionURL"/>
+ </xsl:attribute>
+ </xsl:if>
+ <xsl:if test="../*[1]/@helm:xref">
+ <xsl:attribute name="helm:xref">
+ <xsl:value-of select="../*[1]/@helm:xref"/>
+ </xsl:attribute>
+ </xsl:if>
+</xsl:template>
+
+<!-- THE TOPMOST ELEMENT: MATH -->
+
+<xsl:template match = "m:math">
+ <xsl:choose>
+ <xsl:when test="$SEM_SW>0">
+<!-- HELM: deleted math (we have already inserted at object level) -->
+ <!--<m:math>-->
+ <m:semantics>
+ <xsl:apply-templates mode = "semantics"/>
+ <m:annotation-xml encoding="MathML">
+ <xsl:copy-of select = "*"/>
+ </m:annotation-xml>
+ </m:semantics>
+ <!--</m:math>-->
+ </xsl:when>
+ <xsl:otherwise>
+ <!--<m:math>-->
+ <xsl:apply-templates mode = "semantics"/>
+ <!--</m:math>-->
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- SEMANTICS -->
+
+<xsl:template match = "m:*" mode = "semantics">
+ <xsl:param name="IN_PREC" select="$NO_PREC"/>
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:choose>
+ <xsl:when test="$SEM_SW=-1 and self::m:semantics">
+ <xsl:apply-templates select="*[1]">
+ <xsl:with-param name="IN_PREC" select="$IN_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:when test="$SEM_SW=0 and self::m:semantics">
+ <m:semantics>
+ <xsl:apply-templates select="*[1]">
+ <xsl:with-param name="IN_PREC" select="$IN_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <xsl:copy-of select="m:annotation-xml"/>
+ </m:semantics>
+ </xsl:when>
+ <xsl:when test="$SEM_SW=2">
+ <m:semantics>
+ <xsl:choose>
+ <xsl:when test="self::m:semantics">
+ <xsl:apply-templates select="*[1]">
+ <xsl:with-param name="IN_PREC" select="$IN_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <xsl:copy-of select="m:annotation-xml"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select=".">
+ <xsl:with-param name="IN_PREC" select="$IN_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <m:annotation-xml encoding="MathML">
+ <xsl:copy-of select="."/>
+ </m:annotation-xml>
+ </xsl:otherwise>
+ </xsl:choose>
+ </m:semantics>
+ </xsl:when>
+ <xsl:when test="$SEM_SW=3 and @id">
+ <m:mrow idref="{@id}">
+ <xsl:apply-templates select=".">
+ <xsl:with-param name="IN_PREC" select="$IN_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mrow>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select=".">
+ <xsl:with-param name="IN_PREC" select="$IN_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:semantics">
+ <xsl:apply-templates select="*[1]" mode = "semantics"/>
+</xsl:template>
+
+
+<!-- BASIC ELEMENTS -->
+
+<!-- HELM: cn could not contain MAthMl presentation -->
+<xsl:template match = "m:cn">
+ <xsl:param name="IN_PREC" select="$NO_PREC"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+<!-- HELM: added -->
+<xsl:choose>
+ <xsl:when test="child::text()">
+<!-- HELM -->
+ <xsl:choose>
+ <xsl:when test=". < 0 and $IN_PREC > 0 and $PAREN=$PAR_NO and $PAR_NO_IGNORE=$NO">
+ <m:mfenced separators="">
+ <xsl:apply-templates select="." mode="cn"/>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="." mode="cn"/>
+ </xsl:otherwise>
+ </xsl:choose>
+<!-- HELM: added -->
+</xsl:when>
+ <xsl:otherwise>
+ <xsl:copy-of select="*"/>
+ </xsl:otherwise>
+ </xsl:choose>
+<!-- HELM -->
+</xsl:template>
+
+<xsl:template match = "m:cn" mode="cn">
+ <xsl:choose>
+ <xsl:when test="@base and (not(@type) or @type='integer' or @type='real')">
+ <m:msub>
+ <m:mn> <xsl:apply-templates mode = "semantics"/> </m:mn>
+ <m:mn> <xsl:value-of select="@base"/> </m:mn>
+ </m:msub>
+ </xsl:when>
+ <xsl:when test="@type='complex' and not(@base) and child::m:sep[1]">
+ <m:mfenced separators="">
+ <m:mn> <xsl:apply-templates select="text()[1]" mode = "semantics"/> </m:mn>
+ <xsl:if test="text()[2] < 0">
+ <m:mo>-</m:mo>
+ <m:mn> <xsl:value-of select="-text()[2]"/> </m:mn>
+ </xsl:if>
+ <xsl:if test="not(text()[2] < 0)">
+ <m:mo>+</m:mo>
+ <xsl:apply-templates select="text()[2]" mode = "semantics"/>
+ </xsl:if>
+ <m:mo> <mchar name="InvisibleTimes"/> </m:mo>
+ <m:mo>i</m:mo>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="@type='complex' and @base and child::m:sep[1]">
+ <m:msub>
+ <m:mfenced separators="">
+ <m:mn> <xsl:apply-templates select="text()[1]" mode = "semantics"/> </m:mn>
+ <xsl:if test="text()[2] < 0">
+ <m:mo>-</m:mo>
+ <m:mn> <xsl:value-of select="-text()[2]"/> </m:mn>
+ </xsl:if>
+ <xsl:if test="not(text()[2] < 0)">
+ <m:mo>+</m:mo>
+ <m:mn> <xsl:apply-templates select="text()[2]" mode = "semantics"/> </m:mn>
+ </xsl:if>
+ <m:mo> <mchar name="InvisibleTimes"/> </m:mo>
+ <m:mo>i</m:mo>
+ </m:mfenced>
+ <m:mn> <xsl:value-of select="@base"/> </m:mn>
+ </m:msub>
+ </xsl:when>
+ <xsl:when test="@type='rational' and not(@base) and child::m:sep[1]">
+ <m:mrow>
+ <m:mn> <xsl:apply-templates select="text()[1]" mode = "semantics"/> </m:mn>
+ <m:mo>/</m:mo>
+ <m:mn> <xsl:apply-templates select="text()[2]" mode = "semantics"/> </m:mn>
+ </m:mrow>
+ </xsl:when>
+ <xsl:when test="@type='rational' and @base and child::m:sep[1]">
+ <m:msub>
+ <m:mfenced separators="">
+ <m:mn> <xsl:apply-templates select="text()[1]" mode = "semantics"/> </m:mn>
+ <m:mo>/</m:mo>
+ <m:mn> <xsl:apply-templates select="text()[2]" mode = "semantics"/> </m:mn>
+ </m:mfenced>
+ <m:mn> <xsl:value-of select="@base"/> </m:mn>
+ </m:msub>
+ </xsl:when>
+ <xsl:when test="@type='polar' and not(@base) and child::m:sep[1]">
+ <m:mrow>
+ <m:mo>Polar</m:mo>
+ <m:mfenced separators=",">
+ <m:mn> <xsl:apply-templates select="text()[1]" mode = "semantics"/> </m:mn>
+ <m:mn> <xsl:apply-templates select="text()[2]" mode = "semantics"/> </m:mn>
+ </m:mfenced>
+ </m:mrow>
+ </xsl:when>
+ <xsl:when test="@type='polar' and @base and child::m:sep[1]">
+ <m:msub>
+ <m:mrow>
+ <m:mo>Polar</m:mo>
+ <m:mfenced separators=",">
+ <m:mn> <xsl:apply-templates select="text()[1]" mode = "semantics"/> </m:mn>
+ <m:mn> <xsl:apply-templates select="text()[2]" mode = "semantics"/> </m:mn>
+ </m:mfenced>
+ </m:mrow>
+ <m:mn> <xsl:value-of select="@base"/> </m:mn>
+ </m:msub>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mn>
+ <xsl:call-template name="insert"/>
+ <xsl:apply-templates mode = "semantics"/>
+ </m:mn>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:ci">
+ <xsl:choose>
+ <xsl:when test="@type='vector' or @type=matrix or @type=set">
+ <m:mi fontweight="bold"> <xsl:apply-templates mode = "semantics"/> </m:mi>
+ </xsl:when>
+ <xsl:otherwise>
+<!-- HELM: ci could not contain MathML presentation
+ <m:mi>
+ <xsl:call-template name="insert"/>
+ <xsl:apply-templates mode = "semantics"/>
+ </m:mi>
+-->
+ <xsl:choose>
+ <!-- HELM: or the opposite test <xsl:when test="*[1]"> -->
+ <xsl:when test="child::text()">
+ <m:mi>
+ <xsl:call-template name="insert"/>
+ <xsl:apply-templates mode = "semantics"/>
+ </m:mi>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:copy-of select="*"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+
+<xsl:template match = "m:csymbol">
+ <xsl:choose>
+ <xsl:when test="*[1]">
+ <xsl:copy-of select = "*"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mo> <xsl:apply-templates mode = "semantics"/> </m:mo>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+
+<!-- BASIC CONTENT ELEMENTS -->
+
+<xsl:template match = "m:apply[m:fn[1]]">
+ <m:mrow>
+ <xsl:apply-templates select = "m:fn[1]" mode = "semantics"/>
+ <m:mfenced separators=",">
+ <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
+ </m:mfenced>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:fn">
+ <xsl:apply-templates select = "*[1]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
+ </xsl:apply-templates>
+</xsl:template>
+
+<xsl:template match = "m:interval">
+ <xsl:choose>
+ <xsl:when test="@closure='closed'">
+ <m:mfenced open="[" close="]" separators=",">
+ <xsl:apply-templates mode = "semantics"/>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="@closure='open'">
+ <m:mfenced separators=",">
+ <xsl:apply-templates mode = "semantics"/>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="@closure='open-closed'">
+ <m:mfenced open="(" close="]" separators=",">
+ <xsl:apply-templates mode = "semantics"/>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="@closure='closed-open'">
+ <m:mfenced open="[" close=")" separators=",">
+ <xsl:apply-templates mode = "semantics"/>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mfenced open="[" close="]" separators=",">
+ <xsl:apply-templates mode = "semantics"/>
+ </m:mfenced>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:*[1][self::m:apply[m:inverse[1]]]]">
+ <m:mrow>
+ <xsl:apply-templates select = "*[1]" mode = "semantics"/>
+ <m:mfenced separators=",">
+ <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
+ </m:mfenced>
+ </m:mrow>
+</xsl:template>
+
+<!-- HELM: these "semantical" Transformations are REALLY questionable.
+ Andrea -->
+
+<xsl:template match = "m:apply[*[1][self::m:inverse]]">
+ <xsl:choose>
+ <xsl:when test="*[2]=m:exp">
+ <m:mo>ln</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:ln | m:log">
+ <m:mo>exp</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:sin">
+ <m:mo>arcsin</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:cos">
+ <m:mo>arccos</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:tan">
+ <m:mo>arctan</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:sec">
+ <m:mo>arcsec</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:csc">
+ <m:mo>arccsc</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:cot">
+ <m:mo>arccot</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:sinh">
+ <m:mo>arcsinh</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:cosh">
+ <m:mo>arccosh</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:tanh">
+ <m:mo>arctanh</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:sech">
+ <m:mo>arcsech</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:csch">
+ <m:mo>arccsch</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:coth">
+ <m:mo>arccoth</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:arcsin">
+ <m:mo>sin</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:arccos">
+ <m:mo>cos</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:arctan">
+ <m:mo>tan</m:mo>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:msup>
+ <xsl:apply-templates select = "*[2]" mode = "semantics"/>
+ <m:mfenced>
+ <m:mn>-1</m:mn>
+ </m:mfenced>
+ </m:msup>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:sep"/>
+
+<xsl:template match = "m:condition">
+ <xsl:choose>
+ <xsl:when test="parent::m:apply[m:forall[1]]"/>
+ <xsl:otherwise>
+ <xsl:if test="not(*[2])">
+ <xsl:apply-templates mode = "semantics"/>
+ </xsl:if>
+ <xsl:if test="*[2]">
+ <m:mrow>
+ <xsl:apply-templates mode = "semantics"/>
+ </m:mrow>
+ </xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:declare"/>
+
+<xsl:template match = "m:lambda">
+ <m:mrow>
+ <m:mo> Λ </m:mo>
+ <m:mfenced separators=",">
+ <xsl:for-each select = "*">
+ <xsl:choose>
+ <xsl:when test="self::m:ci or self::m:cn">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mrow>
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </m:mrow>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </m:mfenced>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:*[1][self::m:apply[m:compose[1]]]]">
+ <m:mrow>
+ <xsl:apply-templates select = "*[1]" mode = "semantics"/>
+ <m:mfenced separators=",">
+ <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
+ </m:mfenced>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[*[1][self::m:compose]]">
+ <m:mfenced separators="">
+ <xsl:apply-templates select = "m:*[2][self::m:ci[@type='fn'] | self::m:fn]" mode="semantics"/>
+ <xsl:for-each select = "m:*[position()>2][self::m:ci[@type='fn'] | self::m:fn]">
+ <m:mo> <xsl:call-template name="insert2"/> <mchar name="SmallCircle"/> </m:mo>
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+</xsl:template>
+
+<xsl:template match = "m:ident">
+ <m:mo>id</m:mo>
+</xsl:template>
+
+
+<!-- ARITHMETIC, ALGEBRA & LOGIC -->
+
+<xsl:template match = "m:apply[m:quotient[1]]">
+ <m:mfenced open="⌊" close="⌋" separators="">
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
+ </xsl:apply-templates>
+ <m:mo><xsl:call-template name="insert1"/>/</m:mo>
+ <xsl:apply-templates select="*[3]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ </m:mfenced>
+</xsl:template>
+
+<xsl:template match = "m:apply[*[1][self::m:exp]]">
+ <m:msup>
+ <m:mo>e</m:mo>
+ <xsl:apply-templates select = "*[2]" mode = "semantics"/>
+ </m:msup>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:factorial[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select = "*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ <m:mo><xsl:call-template name="insert1"/>!</m:mo>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:max[1] | m:min[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:if test="*[2]=m:bvar">
+ <m:munder>
+ <xsl:if test="*[1]=m:max">
+ <m:mo><xsl:call-template name="insert1"/>max</m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:min">
+ <m:mo>min</m:mo>
+ </xsl:if>
+ <xsl:apply-templates select="*[2]" mode = "semantics"/>
+ </m:munder>
+ <xsl:if test="*[3]=m:condition">
+ <m:mfenced open="{{" close="}}" separators="">
+ <m:mfenced open="" close="" separators=",">
+ <xsl:for-each select = "*[position()>3]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ <m:mo>|</m:mo>
+ <xsl:apply-templates select="*[3]" mode = "semantics"/>
+ </m:mfenced>
+ </xsl:if>
+ <xsl:if test="not(*[3]=m:condition)">
+ <m:mfenced open="{{" close="}}" separators=",">
+ <xsl:for-each select = "*[position()>2]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ </xsl:if>
+ </xsl:if>
+ <xsl:if test="*[2]=m:condition">
+ <xsl:if test="*[1]=m:max">
+ <m:mo>max</m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:min">
+ <m:mo>min</m:mo>
+ </xsl:if>
+ <m:mfenced open="{{" close="}}" separators="">
+ <xsl:if test="*[3]">
+ <m:mfenced open="" close="" separators=",">
+ <xsl:for-each select = "*[position()>2]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ <m:mo>|</m:mo>
+ </xsl:if>
+ <xsl:apply-templates select="*[2]" mode = "semantics"/>
+ </m:mfenced>
+ </xsl:if>
+ <xsl:if test="not(*[2]=m:condition) and not(*[2]=m:bvar)">
+ <xsl:if test="*[1]=m:max">
+ <m:mo>max</m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:min">
+ <m:mo><xsl:call-template name="insert1"/>min</m:mo>
+ </xsl:if>
+ <m:mfenced open="{{" close="}}" separators=",">
+ <xsl:for-each select = "*[position()>1]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ </xsl:if>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:minus[1]]">
+ <xsl:param name="IN_PREC" select="$NO_PREC"/>
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:choose>
+ <xsl:when test="$IN_PREC > $MINUS_PREC or $IN_PREC=$MINUS_PREC and $PARAM=$PAR_SAME">
+ <m:mfenced separators="">
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="minus">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAR_YES"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="$IN_PREC > $NO_PREC and $IN_PREC < $FUNCTION_PREC and not($SEM_SW=2)">
+ <xsl:apply-templates select="." mode="minus">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="minus">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mrow>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:minus[1]]" mode="minus">
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:if test="not(*[3])">
+ <m:mo><xsl:call-template name="insert1"/>-</m:mo>
+ <xsl:apply-templates select="*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$NEG_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ </xsl:if>
+ <xsl:if test="*[3]">
+ <xsl:apply-templates select="*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$MINUS_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <m:mo><xsl:call-template name="insert1"/>-</m:mo>
+ <xsl:apply-templates select="*[3]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$MINUS_PREC"/>
+ <xsl:with-param name="PARAM" select="$PAR_SAME"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:plus[1]]">
+ <xsl:param name="IN_PREC" select="$NO_PREC"/>
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:choose>
+ <xsl:when test="$IN_PREC > $PLUS_PREC or $IN_PREC=$PLUS_PREC and $PARAM=$PAR_SAME">
+ <m:mfenced separators="">
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="plus">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAR_YES"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="$IN_PREC > $NO_PREC and $IN_PREC < $FUNCTION_PREC and not($SEM_SW=2)">
+ <xsl:apply-templates select="." mode="plus">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="plus">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mrow>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:plus[1]]" mode="plus">
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:if test="*[2]">
+ <xsl:apply-templates select="*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$PLUS_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <xsl:for-each select = "*[position()>2]">
+ <xsl:choose>
+ <xsl:when test=". < 0">
+ <m:mo>-</m:mo>
+ <m:mn> <xsl:value-of select="-."/> </m:mn>
+ </xsl:when>
+ <xsl:when test="self::m:apply[m:minus[1]] and not(*[3])">
+ <xsl:apply-templates select="." mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$PLUS_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mo><xsl:call-template name="insert2"/>+</m:mo>
+ <xsl:apply-templates select="." mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$PLUS_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:power[1]]">
+ <xsl:choose>
+ <xsl:when test="*[2]=m:apply[m:ln[1] | m:log[1] | m:abs[1] | m:gcd[1] | m:sin[1] | m:cos[1] | m:tan[1] | m:sec[1] | m:csc[1] | m:cot[1] | m:sinh[1] | m:cosh[1] | m:tanh[1] | m:sech[1] | m:csch[1] | m:coth[1] | m:arcsin[1] | m:arccos[1] | m:arctan[1]]">
+ <xsl:apply-templates select="*[2]" mode = "semantics"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:msup>
+ <xsl:apply-templates select = "*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ <xsl:apply-templates select = "*[3]" mode = "semantics"/>
+ </m:msup>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:rem[1] | m:divide[1]]">
+ <xsl:param name="IN_PREC" select="$NO_PREC"/>
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:choose>
+ <xsl:when test="$IN_PREC > $DIV_PREC or $IN_PREC=$DIV_PREC and $PARAM=$PAR_SAME">
+ <m:mfenced separators="">
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="remdiv">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAR_YES"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="$IN_PREC > $NO_PREC and $IN_PREC < $FUNCTION_PREC and not($SEM_SW=2)">
+ <xsl:apply-templates select="." mode="remdiv">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="remdiv">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mrow>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:rem[1] | m:divide[1]]" mode="remdiv">
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:apply-templates select = "*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$DIV_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <xsl:if test="m:rem">
+ <m:mo><xsl:call-template name="insert1"/>%</m:mo>
+ </xsl:if>
+ <xsl:if test="m:divide">
+ <m:mo><xsl:call-template name="insert1"/>/</m:mo>
+ </xsl:if>
+ <xsl:apply-templates select = "*[3]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$DIV_PREC"/>
+ <xsl:with-param name="PARAM" select="$PAR_SAME"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:times[1]]">
+ <xsl:param name="IN_PREC" select="$NO_PREC"/>
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:choose>
+ <xsl:when test="$IN_PREC > $MUL_PREC or $IN_PREC=$MUL_PREC and $PARAM=$PAR_SAME">
+ <m:mfenced separators="">
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="times">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAR_YES"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="$IN_PREC > $NO_PREC and $IN_PREC < $FUNCTION_PREC and not($SEM_SW=2)">
+ <xsl:apply-templates select="." mode="times">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="times">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mrow>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:times[1]]" mode="times">
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:apply-templates select="*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$MUL_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <xsl:if test="*[3]">
+ <xsl:for-each select = "*[position()>2]">
+<!-- HELM: to distinguish between * and the application -->
+<!-- <m:mo><xsl:call-template name="insert2"/>
+ <mchar name="InvisibleTimes"/> </m:mo> -->
+ <m:mo><xsl:call-template name="insert2"/>*</m:mo>
+ <xsl:apply-templates select="." mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$MUL_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ </xsl:for-each>
+ </xsl:if>
+</xsl:template>
+
+
+<xsl:template match = "m:apply[m:root[1]]">
+ <m:msqrt>
+ <xsl:call-template name="insert1"/>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:if test="*[2]=m:degree">
+ <xsl:apply-templates select="*[3]" mode = "semantics"/>
+ <xsl:apply-templates select="*[2]" mode = "semantics"/>
+ </xsl:if>
+ <xsl:if test="not(*[2]=m:degree)">
+ <xsl:apply-templates select="*[2]" mode = "semantics"/>
+ <m:mn>2</m:mn>
+ </xsl:if>
+ </m:msqrt>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:gcd[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:if test="not(parent::m:apply[m:power[1]])">
+ <m:mo><xsl:call-template name="insert1"/>gcd</m:mo>
+ </xsl:if>
+ <xsl:if test="parent::m:apply[m:power[1]]">
+ <m:msup>
+ <m:mo><xsl:call-template name="insert1"/>gcd</m:mo>
+ <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
+ </m:msup>
+ </xsl:if>
+ <m:mfenced separators=",">
+ <xsl:for-each select = "*[position()>1]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:and[1]]">
+ <xsl:param name="IN_PREC" select="$NO_PREC"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:choose>
+ <xsl:when test="$IN_PREC > $AND_PREC">
+ <m:mfenced separators="">
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="and">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAR_YES"/>
+ </xsl:apply-templates>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="$IN_PREC > $NO_PREC and $IN_PREC < $FUNCTION_PREC and not($SEM_SW=2)">
+ <xsl:apply-templates select="." mode="and">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="and">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mrow>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:and[1]]" mode="and">
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:apply-templates select="*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$AND_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <xsl:for-each select = "*[position()>2]">
+ <m:mo><xsl:call-template name="insert2"/> <mchar name="wedge"/> </m:mo>
+ <xsl:apply-templates select="." mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$AND_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:or[1]]">
+ <xsl:param name="IN_PREC" select="$NO_PREC"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:choose>
+ <xsl:when test="$IN_PREC > $OR_PREC">
+ <m:mfenced separators="">
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="or">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAR_YES"/>
+ </xsl:apply-templates>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="$IN_PREC > $NO_PREC and $IN_PREC < $FUNCTION_PREC and not($SEM_SW=2)">
+ <xsl:apply-templates select="." mode="or">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="or">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mrow>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:or[1]]" mode="or">
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:apply-templates select="*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$OR_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <xsl:for-each select = "*[position()>2]">
+ <m:mo><xsl:call-template name="insert2"/> <mchar name="vee"/> </m:mo>
+ <xsl:apply-templates select="." mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$OR_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:xor[1]]">
+ <xsl:param name="IN_PREC" select="$NO_PREC"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:choose>
+ <xsl:when test="$IN_PREC > $XOR_PREC">
+ <m:mfenced separators="">
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="xor">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAR_YES"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="$IN_PREC > $NO_PREC and $IN_PREC < $FUNCTION_PREC and not($SEM_SW=2)">
+ <xsl:apply-templates select="." mode="xor">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="xor">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mrow>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:xor[1]]" mode="xor">
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:apply-templates select="*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$XOR_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <xsl:for-each select = "*[position()>2]">
+ <m:mo><xsl:call-template name="insert2"/> <mchar name="xor"/> </m:mo>
+ <xsl:apply-templates select="." mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$XOR_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:not[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <m:mo><xsl:call-template name="insert1"/>not</m:mo>
+ <xsl:apply-templates select = "*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
+ </xsl:apply-templates>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:forall[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <m:mo><xsl:call-template name="insert1"/>for all</m:mo>
+ <m:mfenced separators=",">
+ <xsl:for-each select = "m:bvar">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ <xsl:if test="m:condition">
+ <m:mo>:</m:mo>
+ <xsl:apply-templates select = "m:condition/*" mode = "semantics"/>
+ <m:mo>,</m:mo>
+ </xsl:if>
+ <xsl:apply-templates select = "*[position()>1 and not(self::m:bvar) and not(self::m:condition)]" mode = "semantics"/>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:exists[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <m:mo><xsl:call-template name="insert1"/> <mchar name="Exists"/> </m:mo>
+ <m:mfenced separators=",">
+ <xsl:for-each select = "m:bvar">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ <xsl:if test="m:condition">
+ <m:mo>,</m:mo>
+ <xsl:apply-templates select = "m:condition/*" mode = "semantics"/>
+ </xsl:if>
+ <m:mo>:</m:mo>
+ <xsl:apply-templates select = "*[position()>1 and not(self::m:bvar) and not(self::m:condition)]" mode = "semantics"/>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:abs[1]]">
+ <xsl:if test="not(parent::m:apply[m:power[1]])">
+ <m:mfenced open="|" close="|" separators="">
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
+ </m:mfenced>
+ </xsl:if>
+ <xsl:if test="parent::m:apply[m:power[1]]">
+ <m:msup>
+ <m:mfenced open="|" close="|" separators="">
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
+ </m:mfenced>
+ <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
+ </m:msup>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:conjugate[1]]">
+ <m:mover>
+ <m:mrow>
+ <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
+ </m:mrow>
+ <m:mo><xsl:call-template name="insert1"/> <mchar name="UnderBar"/> </m:mo>
+ </m:mover>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:arg[1] | m:real[1] | m:imaginary[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:choose>
+ <xsl:when test="m:arg">
+ <m:mo><xsl:call-template name="insert1"/>arg</m:mo>
+ </xsl:when>
+ <xsl:when test="m:real">
+ <m:mo><xsl:call-template name="insert1"/>Real</m:mo>
+ </xsl:when>
+ <xsl:when test="m:imaginary">
+ <m:mo><xsl:call-template name="insert1"/>Imaginary</m:mo>
+ </xsl:when>
+ </xsl:choose>
+ <m:mfenced separators="">
+ <xsl:apply-templates select = "*[2]" mode = "semantics"/>
+ </m:mfenced>
+ </m:mrow>
+</xsl:template>
+
+
+<!-- RELATIONS -->
+
+<xsl:template match = "m:apply[m:neq | m:approx | m:tendsto | m:implies | m:in | m:notin | m:notsubset | m:notprsubset | m:subset | m:prsubset | m:eq | m:gt | m:lt | m:geq | m:leq | m:equivalent]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:if test="*[1]=m:neq or *[1]=m:approx or *[1]=m:tendsto or *[1]=m:implies or *[1]=m:in or *[1]=m:notin or *[1]=m:notsubset or *[1]=m:notprsubset">
+ <xsl:apply-templates select = "*[2]" mode = "semantics"/>
+ <xsl:if test="*[1]=m:neq">
+ <m:mo><xsl:call-template name="insert1"/> <mchar name="NotEqual"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:approx">
+ <m:mo><xsl:call-template name="insert1"/> <mchar name="approxeq"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:tendsto">
+ <m:mo><xsl:call-template name="insert1"/> <mchar name="RightArrow"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:implies">
+ <m:mo><xsl:call-template name="insert1"/> <mchar name="DoubleRightArrow"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:in">
+ <m:mo><xsl:call-template name="insert1"/>
+ <mchar name="Element"/>
+ </m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:notin">
+ <m:mo><xsl:call-template name="insert1"/> <mchar name="NotElement"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:notsubset">
+ <m:mo> <xsl:call-template name="insert1"/> <mchar name="NotSubset"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:notprsubset">
+ <m:mo> <xsl:call-template name="insert1"/> <mchar name="NotSubsetEqual"/> </m:mo>
+ </xsl:if>
+ <xsl:apply-templates select = "*[3]" mode = "semantics"/>
+ <xsl:if test="*[1]=m:tendsto and m:tendsto[1][@type='below']">
+ <m:mo><xsl:call-template name="insert1"/>-</m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:tendsto and m:tendsto[1][@type='above']">
+ <m:mo><xsl:call-template name="insert1"/>+</m:mo>
+ </xsl:if>
+ </xsl:if>
+ <xsl:if test="*[1]=m:subset or *[1]=m:prsubset or *[1]=m:eq or *[1]=m:gt or *[1]=m:lt or *[1]=m:geq or *[1]=m:leq or *[1]=m:equivalent">
+ <xsl:apply-templates select = "*[2]" mode="semantics"/>
+ <xsl:for-each select = "*[position()>2]">
+ <xsl:if test="../*[self::m:subset][1]">
+ <m:mo> <xsl:call-template name="insert2"/> <mchar name="SubsetEqual"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="../*[self::m:prsubset][1]">
+ <m:mo> <xsl:call-template name="insert2"/><mchar name="subset"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="../*[self::m:eq][1]">
+ <m:mo><xsl:call-template name="insert2"/>=</m:mo>
+ </xsl:if>
+ <xsl:if test="../*[self::m:gt][1]">
+ <m:mo><xsl:call-template name="insert2"/>></m:mo>
+ </xsl:if>
+ <xsl:if test="../*[self::m:lt][1]">
+ <m:mo><xsl:call-template name="insert2"/><</m:mo>
+ </xsl:if>
+ <xsl:if test="../*[self::m:geq][1]">
+ <m:mo><xsl:call-template name="insert2"/> <mchar name="geq"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="../*[self::m:leq][1]">
+ <m:mo><xsl:call-template name="insert2"/> <mchar name="leq"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="../*[self::m:equivalent][1]">
+ <m:mo><xsl:call-template name="insert2"/> <mchar name="Congruent"/> </m:mo>
+ </xsl:if>
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </xsl:if>
+ </m:mrow>
+</xsl:template>
+
+
+<!-- CALCULUS -->
+
+<xsl:template match = "m:apply[*[1][self::m:ln]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:choose>
+ <xsl:when test="parent::m:apply[m:power[1]]">
+ <m:msup>
+ <m:mo><xsl:call-template name="insert1"/>ln</m:mo>
+ <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
+ </m:msup>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mo><xsl:call-template name="insert1"/>ln</m:mo>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:apply-templates select = "*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
+ </xsl:apply-templates>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:log[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:choose>
+ <xsl:when test="parent::m:apply[m:power[1]]">
+ <xsl:if test="not(*[2]=m:logbase)">
+ <m:msup>
+ <m:mo><xsl:call-template name="insert1"/>log</m:mo>
+ <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
+ </m:msup>
+ </xsl:if>
+ <xsl:if test="*[2]=m:logbase">
+ <m:msubsup>
+ <m:mo><xsl:call-template name="insert1"/>log</m:mo>
+ <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
+ <xsl:apply-templates select = "m:logbase" mode = "semantics"/>
+ </m:msubsup>
+ </xsl:if>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:if test="not(*[2]=m:logbase)">
+ <m:mo><xsl:call-template name="insert1"/>log</m:mo>
+ </xsl:if>
+ <xsl:if test="*[2]=m:logbase">
+ <m:msub>
+ <m:mo><xsl:call-template name="insert1"/>log</m:mo>
+ <xsl:apply-templates select = "m:logbase" mode = "semantics"/>
+ </m:msub>
+ </xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:if test="*[2]=m:logbase">
+ <xsl:apply-templates select = "*[3]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
+ </xsl:apply-templates>
+ </xsl:if>
+ <xsl:if test="not(*[2]=m:logbase)">
+ <xsl:apply-templates select = "*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
+ </xsl:apply-templates>
+ </xsl:if>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:diff[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:if test="*[2]=m:bvar and m:bvar[*[2]=m:degree]">
+ <m:mfrac><xsl:call-template name="insert1"/>
+ <m:msup>
+ <m:mo>d</m:mo>
+ <xsl:apply-templates select = "m:bvar/m:degree" mode = "semantics"/>
+ </m:msup>
+ <m:mrow>
+ <m:mo>d</m:mo>
+ <m:msup>
+ <xsl:apply-templates select = "m:bvar/*[1]" mode = "semantics"/>
+ <xsl:apply-templates select = "m:bvar/m:degree" mode = "semantics"/>
+ </m:msup>
+ </m:mrow>
+ </m:mfrac>
+ </xsl:if>
+ <xsl:if test="*[2]=m:bvar and not(m:bvar[*[2]=m:degree])">
+ <m:mfrac><xsl:call-template name="insert1"/>
+ <m:mo>d</m:mo>
+ <m:mrow>
+ <m:mo>d</m:mo>
+ <xsl:apply-templates select = "m:bvar/*[1]" mode = "semantics"/>
+ </m:mrow>
+ </m:mfrac>
+ </xsl:if>
+ <xsl:apply-templates select = "*[3]" mode = "semantics"/>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:partialdiff[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:for-each select = "m:bvar">
+ <xsl:if test="*[last()]=m:degree">
+ <m:mfrac><xsl:call-template name="insert1"/>
+ <m:msup>
+ <m:mo>d</m:mo>
+ <xsl:apply-templates select = "m:degree" mode = "semantics"/>
+ </m:msup>
+ <m:mrow>
+ <m:mo>d</m:mo>
+ <m:msup>
+ <xsl:apply-templates select = "*[1]" mode = "semantics"/>
+ <xsl:apply-templates select = "m:degree" mode = "semantics"/>
+ </m:msup>
+ </m:mrow>
+ </m:mfrac>
+ </xsl:if>
+ <xsl:if test="not(*[last()]=m:degree)">
+ <m:mfrac><xsl:call-template name="insert1"/>
+ <m:mo>d</m:mo>
+ <m:mrow>
+ <m:mo>d</m:mo>
+ <xsl:apply-templates select = "*[1]" mode = "semantics"/>
+ </m:mrow>
+ </m:mfrac>
+ </xsl:if>
+ </xsl:for-each>
+ <xsl:apply-templates select = "*[last()]" mode = "semantics"/>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:lowlimit | m:uplimit | m:bvar | m:degree | m:logbase">
+ <xsl:apply-templates mode = "semantics"/>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:divergence[1] | m:grad[1] | m:curl[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:if test="*[1]=m:divergence">
+ <m:mo><xsl:call-template name="insert1"/>div</m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:grad">
+ <m:mo><xsl:call-template name="insert1"/>grad</m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:curl">
+ <m:mo><xsl:call-template name="insert1"/>curl</m:mo>
+ </xsl:if>
+ <xsl:choose>
+ <xsl:when test="*[2]=m:ci">
+ <xsl:apply-templates select = "*[2]" mode = "semantics"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mfenced separators="">
+ <xsl:apply-templates select = "*[2]" mode = "semantics"/>
+ </m:mfenced>
+ </xsl:otherwise>
+ </xsl:choose>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:laplacian[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <m:msup><xsl:call-template name="insert1"/>
+ <m:mo> Δ </m:mo>
+ <m:mn>2</m:mn>
+ </m:msup>
+ <xsl:apply-templates select = "*[2]" mode = "semantics"/>
+ </m:mrow>
+</xsl:template>
+
+
+<!-- SET THEORY -->
+
+<xsl:template match = "m:set | m:list">
+ <m:mfenced open="{{" close="}}" separators="">
+ <xsl:call-template name="insert_xref"/>
+ <xsl:if test="*[1]=m:bvar and *[2]=m:condition">
+ <xsl:apply-templates select="m:bvar" mode = "semantics"/>
+ <m:mo>|</m:mo>
+ <xsl:apply-templates select="m:condition" mode = "semantics"/>
+ </xsl:if>
+ <xsl:if test="*[1]=m:condition and not(child::m:bvar)">
+ <m:mfenced open="" close="" separators=",">
+ <xsl:for-each select = "*[not(self::m:condition) and not(self::m:bvar)]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ <m:mo>|</m:mo>
+ <xsl:apply-templates select="m:condition" mode = "semantics"/>
+ </xsl:if>
+ <xsl:if test="not(child::m:bvar) and not(child::m:condition)">
+ <m:mfenced open="" close="" separators=",">
+ <xsl:for-each select = "*">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ </xsl:if>
+ </m:mfenced>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:union[1]]">
+ <xsl:param name="IN_PREC" select="$NO_PREC"/>
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:choose>
+ <xsl:when test="$IN_PREC > $UNION_PREC or $IN_PREC=$UNION_PREC and $PARAM=$PAR_SAME">
+ <m:mfenced separators="" helm:xref="{@helm:xref}">
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="union">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="$IN_PREC > $NO_PREC and $IN_PREC < $FUNCTION_PREC and not($SEM_SW=2)">
+ <xsl:apply-templates select="." mode="union">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="union">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mrow>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:union[1]]" mode="union">
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:apply-templates select = "*[2]" mode="semantics">
+ <xsl:with-param name="IN_PREC" select="$UNION_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <xsl:for-each select = "*[position()>2]">
+ <m:mo><xsl:call-template name="insert2"/> <mchar name="Union"/> </m:mo>
+ <xsl:apply-templates select = "." mode="semantics">
+ <xsl:with-param name="IN_PREC" select="$UNION_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:intersect[1]]">
+ <xsl:param name="IN_PREC" select="$NO_PREC"/>
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:choose>
+ <xsl:when test="$IN_PREC > $INTERSECT_PREC">
+ <m:mfenced separators="" helm:xref="{@helm:xref}">
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="intersect">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="$IN_PREC > $NO_PREC and $IN_PREC < $FUNCTION_PREC and not($SEM_SW=2)">
+ <xsl:apply-templates select="." mode="intersect">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="intersect">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mrow>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:intersect[1]]" mode="intersect">
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:apply-templates select = "*[2]" mode="semantics">
+ <xsl:with-param name="IN_PREC" select="$INTERSECT_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <xsl:for-each select = "*[position()>2]">
+ <m:mo><xsl:call-template name="insert2"/> <mchar name="Intersection"/> </m:mo>
+ <xsl:apply-templates select = "." mode="semantics">
+ <xsl:with-param name="IN_PREC" select="$INTERSECT_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:setdiff[1]]">
+ <xsl:param name="IN_PREC" select="$NO_PREC"/>
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:choose>
+ <xsl:when test="$IN_PREC > $SETDIFF_PREC or $IN_PREC=$SETDIFF_PREC and $PARAM=$PAR_SAME">
+ <m:mfenced separators="">
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="setdiff">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="$IN_PREC > $NO_PREC and $IN_PREC < $FUNCTION_PREC and not($SEM_SW=2)">
+ <xsl:apply-templates select="." mode="setdiff">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="setdiff">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mrow>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:setdiff[1]]" mode="setdiff">
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:apply-templates select = "*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$SETDIFF_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <m:mo><xsl:call-template name="insert1"/>\</m:mo>
+ <xsl:apply-templates select = "*[3]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$SETDIFF_PREC"/>
+ <xsl:with-param name="PARAM" select="$PAR_SAME"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:card[1]]">
+ <m:mfenced open="|" close="|" separators=",">
+ <xsl:call-template name="insert_xref"/>
+ <xsl:for-each select = "*[position()>1]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+</xsl:template>
+
+
+<!-- SEQUENCES AND SERIES -->
+
+<xsl:template match = "m:apply[m:sum[1] | m:product[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:choose>
+ <xsl:when test="*[2]=m:bvar and m:lowlimit and m:uplimit">
+ <m:munderover>
+ <xsl:if test="*[1]=m:sum">
+ <m:mo><xsl:call-template name="insert1"/> <mchar name="Sum"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:product">
+ <m:mo><xsl:call-template name="insert1"/> <mchar name="Product"/> </m:mo>
+ </xsl:if>
+ <m:mrow>
+ <xsl:apply-templates select = "*[2]" mode = "semantics"/>
+ <m:mo>=</m:mo>
+ <xsl:apply-templates select = "m:lowlimit" mode = "semantics"/>
+ </m:mrow>
+ <xsl:apply-templates select = "m:uplimit" mode = "semantics"/>
+ </m:munderover>
+ <xsl:apply-templates select = "*[5]" mode = "semantics"/>
+ </xsl:when>
+ <xsl:when test="*[2]=m:bvar and *[3]=m:condition">
+ <m:munder>
+ <xsl:if test="*[1]=m:sum">
+ <m:mo><xsl:call-template name="insert1"/> <mchar name="Sum"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:product">
+ <m:mo><xsl:call-template name="insert1"/> <mchar name="Product"/> </m:mo>
+ </xsl:if>
+ <xsl:apply-templates select = "*[3]" mode = "semantics"/>
+ </m:munder>
+ <xsl:apply-templates select = "*[4]" mode = "semantics"/>
+ </xsl:when>
+ </xsl:choose>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:limit[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <m:munder>
+ <m:mo><xsl:call-template name="insert1"/>lim</m:mo>
+ <m:mrow>
+ <xsl:if test="*[2]=m:bvar and *[3]=m:lowlimit">
+ <xsl:apply-templates select = "*[2]" mode = "semantics"/>
+ <m:mo> <mchar name="RightArrow"/> </m:mo>
+ <xsl:apply-templates select = "*[3]" mode = "semantics"/>
+ </xsl:if>
+ <xsl:if test="*[2]=m:bvar and *[3]=m:condition">
+ <xsl:apply-templates select = "*[3]" mode = "semantics"/>
+ </xsl:if>
+ </m:mrow>
+ </m:munder>
+ <xsl:apply-templates select = "*[4]" mode = "semantics"/>
+ </m:mrow>
+</xsl:template>
+
+
+<!-- TRIGONOMETRY -->
+
+<xsl:template match = "m:apply[*[1][self::m:sin | self::m:cos | self::m:tan | self::m:sec | self::m:csc | self::m:cot | self::m:sinh | self::m:cosh | self::m:tanh | self::m:sech | self::m:csch | self::m:coth | self::m:arcsin | self::m:arccos | self::m:arctan]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:if test="not(parent::m:apply[m:power[1]])">
+ <xsl:apply-templates select = "*[1]" mode = "trigonometry"/>
+ </xsl:if>
+ <xsl:if test="parent::m:apply[m:power[1]]">
+ <m:msup>
+ <xsl:apply-templates select = "*[1]" mode = "trigonometry"/>
+ <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
+ </m:msup>
+ </xsl:if>
+ <xsl:apply-templates select = "*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:*" mode = "trigonometry">
+ <xsl:choose>
+ <xsl:when test="self::m:sin">
+ <m:mo>sin</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:cos">
+ <m:mo>cos</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:tan">
+ <m:mo>tan</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:sec">
+ <m:mo>sec</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:csc">
+ <m:mo>csc</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:cot">
+ <m:mo>cot</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:sinh">
+ <m:mo>sinh</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:cosh">
+ <m:mo>cosh</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:tanh">
+ <m:mo>tanh</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:sech">
+ <m:mo>sech</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:csch">
+ <m:mo>csch</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:coth">
+ <m:mo>coth</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:arcsin">
+ <m:mo>arcsin</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:arccos">
+ <m:mo>arccos</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:arctan">
+ <m:mo>arctan</m:mo>
+ </xsl:when>
+ </xsl:choose>
+</xsl:template>
+
+
+<!-- STATISTICS -->
+
+<xsl:template match = "m:apply[m:mean[1]]">
+ <m:mfenced open="<" close=">" separators=",">
+ <xsl:call-template name="insert_xref"/>
+ <xsl:for-each select = "*[position()>1]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:sdev[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <m:mo><xsl:call-template name="insert1"/> σ </m:mo>
+ <m:mfenced separators=",">
+ <xsl:for-each select = "*[position()>1]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:variance[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <m:mo><xsl:call-template name="insert1"/> σ </m:mo>
+ <m:msup>
+ <m:mfenced separators=",">
+ <xsl:for-each select = "*[position()>1]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ <m:mn>2</m:mn>
+ </m:msup>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:median[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <m:mo><xsl:call-template name="insert1"/>median</m:mo>
+ <m:mfenced separators=",">
+ <xsl:for-each select = "*[position()>1]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:mode[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <m:mo><xsl:call-template name="insert1"/>mode</m:mo>
+ <m:mfenced separators=",">
+ <xsl:for-each select = "*[position()>1]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:moment[1]]">
+ <xsl:call-template name="insert_xref"/>
+ <m:mfenced open="<" close=">" separators="">
+ <xsl:if test="*[2]=m:degree">
+ <m:msup>
+ <xsl:apply-templates select="*[3]" mode = "semantics"/>
+ <xsl:apply-templates select="*[2]" mode = "semantics"/>
+ </m:msup>
+ </xsl:if>
+ <xsl:if test="not(*[2]=m:degree)">
+ <xsl:for-each select = "*[position()>1]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </xsl:if>
+ </m:mfenced>
+</xsl:template>
+
+
+<!-- LINEAR ALGEBRA -->
+
+<xsl:template match="m:vector">
+ <m:mfenced separators="">
+ <m:mtable>
+ <xsl:for-each select="*">
+ <m:mtd>
+ <xsl:apply-templates select="." mode = "semantics"/>
+ </m:mtd>
+ </xsl:for-each>
+ </m:mtable>
+ </m:mfenced>
+</xsl:template>
+
+<xsl:template match = "m:matrix">
+ <m:mfenced separators="">
+ <m:mtable>
+ <xsl:apply-templates mode = "semantics"/>
+ </m:mtable>
+ </m:mfenced>
+</xsl:template>
+
+<xsl:template match = "m:matrixrow">
+ <m:mtr>
+ <xsl:for-each select="*">
+ <m:mtd>
+ <xsl:apply-templates select="." mode = "semantics"/>
+ </m:mtd>
+ </xsl:for-each>
+ </m:mtr>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:determinant[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <m:mo><xsl:call-template name="insert1"/>det</m:mo>
+ <xsl:apply-templates select = "*[2]" mode = "semantics"/>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:transpose[1]]">
+ <m:msup>
+ <xsl:apply-templates select = "*[2]" mode = "semantics"/>
+ <m:mo>T</m:mo>
+ </m:msup>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:selector[1]]">
+ <xsl:if test="*[2]=m:matrix and *[3]=m:cn">
+ <xsl:variable name="m" select = "*[3]"/>
+ <xsl:choose>
+ <xsl:when test="*[4]=m:cn">
+ <xsl:variable name="n" select = "*[4]"/>
+ <xsl:copy-of select = "m:matrix/*[position()=$m]/*[position()=$n]"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:copy-of select = "m:matrix/*[position()=$m]"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:if>
+ <xsl:if test="(*[2]=m:vector or *[2]=m:list) and *[3]=m:cn">
+ <xsl:variable name="m" select = "*[3]"/>
+ <xsl:copy-of select = "*[2]/*[position()=$m]"/>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:vectorproduct[1] | m:scalarproduct[1] | m:outerproduct[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="*[2]" mode = "semantics"/>
+ <xsl:choose>
+ <xsl:when test="m:vectorproduct[1]">
+ <m:mo><xsl:call-template name="insert1"/> <mchar name="Cross"/> </m:mo>
+ </xsl:when>
+ <xsl:when test="m:scalarproduct[1] | m:outerproduct[1]">
+ <m:mo><xsl:call-template name="insert1"/>.</m:mo>
+ </xsl:when>
+ </xsl:choose>
+ <xsl:apply-templates select="*[3]" mode = "semantics"/>
+ </m:mrow>
+</xsl:template>
+
+</xsl:stylesheet>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null
+<?xml version="1.0"?>
+
+<!--***********************************************************************-->
+<!-- Extension to the XSLT version 0.07 of MathML content to presentation: -->
+<!-- First draft: February 19 2000, Andrea Asperti, Irene Schena -->
+<!-- Revised: March 3 2000, Irene Schena -->
+<!-- Revised: March 15 2000, Claudio Sacerdoti Coen, Irene Schena -->
+<!-- Revised: March 21 2000, Irene Schena -->
+<!--***********************************************************************-->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:m="http://www.w3.org/1998/Math/MathML"
+ xmlns:helm="http://www.cs.unibo.it/helm">
+
+<xsl:import href="mml2mmlv1_0.xsl"/>
+
+<!--***********************************************************************-->
+<!-- Parameter affecting line-breaking -->
+<!--***********************************************************************-->
+
+<xsl:variable name="framewidth" select="35"/>
+
+<!--***********************************************************************-->
+<!-- Gli oggetti sono stampati come mtext all'interno di una marca toplevel-->
+<!-- math ma al di fuori di semantics. Ora vi sono tanti semantics quanti -->
+<!-- sono i termini: la presentation per un termine e' generata come primo -->
+<!-- figlio di un semantics e l'originario content viene inserito nel -->
+<!-- nel secondo figlio di semantics, annotation-xml -->
+<!--***********************************************************************-->
+
+<!--**********************-->
+<!-- OBJECTS -->
+<!--**********************-->
+
+<xsl:template match="/">
+ <xsl:processing-instruction name="cocoon-format">type="text/xhtml"</xsl:processing-instruction>
+ <xsl:apply-templates select="*"/>
+</xsl:template>
+
+<!-- DEFINITION -->
+
+<xsl:template match="Definition">
+ <m:math>
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left" helm:xref="{@helm:xref}">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mtext>DEFINITION <xsl:value-of select="@name"/>(<xsl:if test="string(./Params) != """><xsl:value-of select="Params"/></xsl:if>) OF TYPE</m:mtext>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
+ <xsl:apply-templates select="type/*[1]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mtext>AS</m:mtext>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
+ <xsl:apply-templates select="body/*[1]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </m:math>
+</xsl:template>
+
+<!-- AXIOM -->
+
+<xsl:template match="Axiom">
+ <m:math>
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left" helm:xref="{@helm:xref}">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mtext>AXIOM <xsl:value-of select="@name"/>(<xsl:if test="string(./Params) != """><xsl:value-of select="Params"/></xsl:if>) OF TYPE</m:mtext>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
+ <xsl:apply-templates select="type/*[1]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </m:math>
+</xsl:template>
+
+<!-- UNFINISHED PROOF -->
+
+<xsl:template match="CurrentProof">
+ <m:math>
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left" helm:xref="{@helm:xref}">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mtext>UNFINISHED PROOF <xsl:value-of select="@name"/>(<xsl:if test="string(./Params) != """><xsl:value-of select="Params"/></xsl:if>)</m:mtext>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mtext>THESIS:</m:mtext>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
+ <xsl:apply-templates select="type/*[1]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mtext>CONJECTURES:</m:mtext>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <xsl:for-each select="Conjecture">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
+ <m:mtext><xsl:value-of select="./@no"/>:</m:mtext>
+ <xsl:apply-templates select="./*[1]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </xsl:for-each>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mtext>CORRESPONDING PROOF:</m:mtext>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
+ <xsl:apply-templates select="body/*[1]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </m:math>
+</xsl:template>
+
+<!-- MUTUAL INDUCTIVE DEFINITION -->
+
+<xsl:template match="InductiveDefinition">
+ <m:math>
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left" helm:xref="{@helm:xref}">
+ <xsl:for-each select="InductiveType">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <xsl:choose>
+ <xsl:when test="position() = 1">
+ <xsl:choose>
+ <xsl:when test="string(./@inductive) = "true"">
+ <m:mtext>INDUCTIVE DEFINITION</m:mtext>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mtext>COINDUCTIVE DEFINITION</m:mtext>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mtext>AND</m:mtext>
+ </xsl:otherwise>
+ </xsl:choose>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <m:mtext><xsl:value-of select="./@name"/>(<xsl:if test="string(../Params) != """><xsl:value-of select="../Params"/></xsl:if>)</m:mtext>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
+ <m:mtext>[</m:mtext>
+ <xsl:choose>
+ <xsl:when test="string(../Param) != """>
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <xsl:for-each select="../Param">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mi><xsl:value-of select="./@name"/></m:mi>
+ <m:mo>:</m:mo>
+ <xsl:apply-templates select="*"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </xsl:for-each>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mtext>]</m:mtext>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mtext>]</m:mtext>
+ </xsl:otherwise>
+ </xsl:choose>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mtext>OF ARITY</m:mtext>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
+ <xsl:apply-templates select="./arity/*[1]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mtext>BUILT FROM</m:mtext>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <xsl:for-each select="./Constructor">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <xsl:choose>
+ <xsl:when test="position() = 1">
+ <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mtext>|</m:mtext>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ </xsl:otherwise>
+ </xsl:choose>
+ <m:mtext><xsl:value-of select="./@name"/> OF</m:mtext>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <xsl:apply-templates select="./*[1]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </xsl:for-each>
+ </xsl:for-each>
+ </m:mtable>
+ </m:math>
+</xsl:template>
+
+<!-- VARIABLE -->
+
+<xsl:template match="Variable">
+ <m:math>
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left" helm:xref="{@helm:xref}">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mtext>VARIABLE <xsl:value-of select="@name"/> OF TYPE</m:mtext>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
+ <xsl:apply-templates select="type/*[1]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </m:math>
+</xsl:template>
+
+<!--**********************-->
+<!-- TERMS -->
+<!--**********************-->
+
+<xsl:template match="m:bvar">
+ <xsl:choose>
+ <xsl:when test="m:type">
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="m:ci" mode="charcount"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$charlength >= $framewidth">
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <m:mtr>
+ <m:mtd>
+ <xsl:apply-templates select="m:ci"/>
+ <m:mo>:</m:mo>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <xsl:apply-templates select="m:type"/>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="m:ci"/>
+ <m:mo>:</m:mo>
+ <xsl:apply-templates select="m:type"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="m:ci"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+
+<!-- CSYMBOL -->
+
+<xsl:template match="m:apply[m:csymbol]">
+ <xsl:variable name="name"><xsl:value-of select="m:csymbol"/></xsl:variable>
+ <xsl:variable name="charlength"><xsl:apply-templates select="m:csymbol" mode="charcount"/></xsl:variable>
+ <m:mrow>
+ <xsl:if test="@helm:xref">
+ <xsl:attribute name="helm:xref"><xsl:value-of select="@helm:xref"/></xsl:attribute>
+ </xsl:if>
+ <xsl:choose>
+ <xsl:when test="$name='prod'">
+ <xsl:choose>
+ <xsl:when test="$charlength >= $framewidth">
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <m:mtr>
+ <m:mtd>
+ <m:mo color="Blue">Π</m:mo>
+ <xsl:apply-templates select="m:bvar"/>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo>.</m:mo>
+ <xsl:apply-templates select="*[position()=3]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mo color="Blue">Π</m:mo>
+ <xsl:apply-templates select="m:bvar/m:ci"/>
+ <m:mo>:</m:mo>
+ <xsl:apply-templates select="m:bvar/m:type"/>
+ <m:mo>.</m:mo>
+ <xsl:apply-templates select="*[position()=3]"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:when test="$name='arrow'">
+ <xsl:choose>
+ <xsl:when test="$charlength >= $framewidth">
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo stretchy="false">(</m:mo>
+ <xsl:apply-templates select="*[position()=2]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo color="Blue">→</m:mo>
+ <xsl:apply-templates select="*[position()=3]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo stretchy="false">)</m:mo>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mo stretchy="false">(</m:mo>
+ <xsl:apply-templates select="*[position()=2]"/>
+ <m:mo color="Blue">→</m:mo>
+ <xsl:apply-templates select="*[position()=3]"/>
+ <m:mo stretchy="false">)</m:mo>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:when test="$name='app'">
+ <xsl:choose>
+ <xsl:when test="$charlength >= $framewidth">
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo stretchy="false">(</m:mo>
+ <xsl:apply-templates select="*[position()=2]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <xsl:for-each select="*[position()>2]">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mphantom><m:mtext>(</m:mtext></m:mphantom>
+ <xsl:apply-templates select="."/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </xsl:for-each>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo stretchy="false">)</m:mo>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mo stretchy="false">(</m:mo>
+ <xsl:apply-templates select="*[position()=2]"/>
+ <xsl:for-each select="*[position()>2]">
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <xsl:apply-templates select="."/>
+ </xsl:for-each>
+ <m:mo stretchy="false">)</m:mo>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:when test="$name='cast'">
+ <xsl:choose>
+ <xsl:when test="$charlength >= $framewidth">
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo stretchy="false">(</m:mo>
+ <xsl:apply-templates select="*[position()=2]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo color="Maroon">:></m:mo>
+ <xsl:apply-templates select="*[position()=3]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo stretchy="false">)</m:mo>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mo stretchy="false">(</m:mo>
+ <xsl:apply-templates select="*[position()=2]"/>
+ <m:mo color="Maroon">:></m:mo>
+ <xsl:apply-templates select="*[position()=3]"/>
+ <m:mo stretchy="false">)</m:mo>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:when test="$name='Prop'">
+ <m:mo>Prop</m:mo>
+ </xsl:when>
+ <xsl:when test="$name='Set'">
+ <m:mo>Set</m:mo>
+ </xsl:when>
+ <xsl:when test="$name='Type'">
+ <m:mo>Type</m:mo>
+ </xsl:when>
+ <xsl:when test="$name='mutcase'">
+ <xsl:choose>
+ <xsl:when test="$charlength >= $framewidth">
+ <xsl:variable name="charlength"><xsl:apply-templates select="*[position()=2]" mode="charcount"><xsl:with-param name="nosibling" select="1"/></xsl:apply-templates></xsl:variable>
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo><</m:mo>
+ <xsl:apply-templates select="*[position()=2]"/>
+ <xsl:if test="$framewidth > $charlength">
+ <m:mo>></m:mo>
+ <m:mo>CASES</m:mo>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <xsl:apply-templates select="*[position()=3]"/>
+ </xsl:if>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <xsl:if test="$charlength >= $framewidth">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo>></m:mo>
+ <m:mo>CASES</m:mo>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <xsl:apply-templates select="*[position()=3]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </xsl:if>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo>OF</m:mo>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <xsl:for-each select="*[position() mod 2 = 0 and position()>3]">
+ <xsl:variable name="charlength"><xsl:apply-templates select="." mode="charcount"><xsl:with-param name="nosibling" select="1"/></xsl:apply-templates></xsl:variable>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <xsl:choose>
+ <xsl:when test="position() = 1">
+ <m:mphantom><m:mtext>|</m:mtext></m:mphantom>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mo stretchy="false">|</m:mo>
+ </xsl:otherwise>
+ </xsl:choose>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <xsl:apply-templates select="."/>
+ <xsl:if test="$framewidth > $charlength">
+ <m:mo color="Green">⇒</m:mo>
+ <xsl:apply-templates select="following-sibling::*[position()= 1]"/>
+ </xsl:if>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <xsl:if test="$charlength >= $framewidth">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mphantom><m:mtext>|_</m:mtext></m:mphantom>
+ <m:mo color="Green">⇒</m:mo>
+ <xsl:apply-templates select="following-sibling::*[position()= 1]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </xsl:if>
+ </xsl:for-each>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo>END</m:mo>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mo><</m:mo><xsl:apply-templates select="*[position()=2]"/><m:mo>></m:mo>
+ <m:mo>CASES</m:mo>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <xsl:apply-templates select="*[position()=3]"/>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <m:mo>OF</m:mo>
+ <xsl:for-each select="*[position() mod 2 = 0 and position()>3]">
+ <xsl:choose>
+ <xsl:when test="position() != 1">
+ <m:mo stretchy="false">|</m:mo>
+ </xsl:when>
+ </xsl:choose>
+ <xsl:apply-templates select="."/>
+ <m:mo color="Green">⇒</m:mo>
+ <xsl:apply-templates select="following-sibling::*[position()= 1]"/>
+ </xsl:for-each>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <m:mo>END</m:mo>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:when test="$name='fix'">
+ <xsl:choose>
+ <xsl:when test="$charlength >= $framewidth">
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo>FIX</m:mo>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <m:mi><xsl:value-of select="m:ci"/></m:mi>
+ <m:mo stretchy="false">{</m:mo>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <xsl:for-each select="m:bvar">
+ <xsl:variable name="charlength"><xsl:apply-templates select="m:type" mode="charcount"><xsl:with-param name="nosibling" select="1"/></xsl:apply-templates></xsl:variable>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mi><xsl:value-of select="m:ci"/></m:mi>
+ <m:mo>:</m:mo>
+ <xsl:if test="$framewidth > $charlength">
+ <xsl:apply-templates select="m:type"/>
+ </xsl:if>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <xsl:if test="$charlength >= $framewidth">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mphantom><m:mtext>:=</m:mtext></m:mphantom>
+ <xsl:apply-templates select="m:type"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </xsl:if>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo>:=</m:mo>
+ <xsl:apply-templates select="following-sibling::*[position()=1]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </xsl:for-each>
+ </m:mtable>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo stretchy="false">}</m:mo>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mo>FIX</m:mo>
+ <m:mi><xsl:value-of select="m:ci"/></m:mi>
+ <m:mo stretchy="false">{</m:mo>
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <xsl:for-each select="m:bvar">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mi><xsl:value-of select="m:ci"/></m:mi>
+ <m:mo>:</m:mo>
+ <xsl:apply-templates select="m:type"/>
+ <m:mo>:=</m:mo>
+ <xsl:apply-templates select="following-sibling::*[position() = 1]"/>
+ <xsl:if test="position()=last()">
+ <m:mo stretchy="false">}</m:mo>
+ </xsl:if>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </xsl:for-each>
+ </m:mtable>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:when test="$name='cofix'">
+ <xsl:choose>
+ <xsl:when test="$charlength >= $framewidth">
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo>COFIX</m:mo>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <m:mi><xsl:value-of select="m:ci"/></m:mi>
+ <m:mo stretchy="false">{</m:mo>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <xsl:for-each select="m:bvar">
+ <xsl:variable name="charlength"><xsl:apply-templates select="m:type" mode="charcount"><xsl:with-param name="nosibling" select="1"/></xsl:apply-templates></xsl:variable>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mi><xsl:value-of select="m:ci"/></m:mi>
+ <m:mo>:</m:mo>
+ <xsl:if test="$framewidth > $charlength">
+ <xsl:apply-templates select="m:type"/>
+ </xsl:if>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <xsl:if test="$charlength >= $framewidth">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mphantom><m:mtext>:=</m:mtext></m:mphantom>
+ <xsl:apply-templates select="m:type"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </xsl:if>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo>:=</m:mo>
+ <xsl:apply-templates select="following-sibling::*[position() = 1]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </xsl:for-each>
+ </m:mtable>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo stretchy="false">}</m:mo>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mo>COFIX</m:mo>
+ <m:mi><xsl:value-of select="m:ci"/></m:mi>
+ <m:mo stretchy="false">{</m:mo>
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <xsl:for-each select="m:bvar">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mi><xsl:value-of select="m:ci"/></m:mi>
+ <m:mo>:</m:mo>
+ <xsl:apply-templates select="m:type"/>
+ <m:mo>:=</m:mo>
+ <xsl:apply-templates select="following-sibling::*[position() = 1]"/>
+ <xsl:if test="position()=last()">
+ <m:mo stretchy="false">}</m:mo>
+ </xsl:if>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </xsl:for-each>
+ </m:mtable>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <!-- ***************************************** -->
+ <!-- *********** PROOF ELEMENTS ************** -->
+ <!-- ***************************************** -->
+ <xsl:when test="$name='proof'">
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <xsl:apply-templates select="*[position()=2]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mtext color="Maroon">we proved </m:mtext>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <xsl:apply-templates select="*[position()=3]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </xsl:when>
+ <xsl:when test="$name='letin'">
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <!-- <xsl:for-each select="APPLY[m:csymbol and (string(m:csymbol)='let')]"> -->
+ <xsl:for-each select="*[(last() > position()) and (position()>1)]">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <xsl:apply-templates select="."/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </xsl:for-each>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <xsl:apply-templates select="*[position()=last()]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </xsl:when>
+ <xsl:when test="$name='let'">
+ <m:mtext>(</m:mtext>
+ <xsl:apply-templates select="m:ci"/>
+ <m:mtext>) </m:mtext>
+ <xsl:apply-templates select="*[3]"/>
+ </xsl:when>
+ <xsl:when test="$name='thread'">
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <xsl:choose>
+ <xsl:when test="name(*[last()])='m:apply'">
+ <xsl:apply-templates select="*[last()]"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mtext>Consider </m:mtext>
+ <xsl:apply-templates select="*[last()]"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <xsl:apply-templates mode="thread" select="*[(last()-2)]"/>
+ </m:mtable>
+ </xsl:when>
+ <xsl:when test="$name='rewrite_and_apply'">
+ <m:mtable>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mtext>Rewrite</m:mtext>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <xsl:apply-templates select="*[2]/*[2]"/>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <m:mtext>with</m:mtext>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <xsl:apply-templates select="*[2]/*[3]"/>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <m:mtext>by</m:mtext>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <xsl:apply-templates select="*[2]/*[4]"/>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <m:mtext>in</m:mtext>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <xsl:apply-templates select="*[3]"/>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <m:mtext>and apply to</m:mtext>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <xsl:apply-templates select="*[position()>3]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </xsl:when>
+ <xsl:when test="$name='and_ind'">
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <xsl:choose>
+ <xsl:when test="name(*[2])='m:apply'">
+ <xsl:apply-templates select="*[2]"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mtext>Consider </m:mtext>
+ <xsl:apply-templates select="*[2]"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mtext>In particular, we have</m:mtext>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mtext>(</m:mtext>
+ <xsl:apply-templates select="*[3]"/>
+ <m:mtext>)</m:mtext>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <xsl:apply-templates select="*[4]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mtext>(</m:mtext>
+ <xsl:apply-templates select="*[5]"/>
+ <m:mtext>)</m:mtext>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <xsl:apply-templates select="*[6]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <xsl:apply-templates select="*[7]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </xsl:when>
+ <xsl:when test="$name='or_ind'">
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <xsl:choose>
+ <xsl:when test="name(*[2])='m:apply'">
+ <xsl:apply-templates select="*[2]"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mtext>Consider</m:mtext>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <xsl:apply-templates select="*[2]"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mtext>We prove</m:mtext>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <xsl:apply-templates select="*[3]"/>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <m:mtext>by cases:</m:mtext>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mtext>*</m:mtext>
+ <xsl:apply-templates select="*[4]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mtext>*</m:mtext>
+ <xsl:apply-templates select="*[5]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:ci>ERROR</m:ci>
+ </xsl:otherwise>
+ </xsl:choose>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match="*" mode="thread">
+ <xsl:variable name="name"><xsl:value-of select="following-sibling::*[position()=1]/m:csymbol"/></xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$name='rw_step'">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mtext>Rewrite</m:mtext>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <xsl:apply-templates select="following-sibling::*[position()=1]/*[2]"/>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <m:mtext>with</m:mtext>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <xsl:apply-templates select="following-sibling::*[position()=1]/*[3]"/>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <m:mtext>by</m:mtext>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <xsl:apply-templates select="following-sibling::*[position()=1]/*[4]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mtext color="Maroon">we get</m:mtext>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <xsl:apply-templates select="."/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <xsl:apply-templates select="following-sibling::*[position()=1]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mtext color="Maroon">we get</m:mtext>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <xsl:apply-templates select="."/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:apply-templates mode="thread" select="preceding-sibling::*[position()=2]"/>
+</xsl:template>
+
+
+<!-- LAMBDA -->
+
+<xsl:template match="m:lambda">
+ <xsl:variable name="charlength"><xsl:apply-templates select="*[position()=1]" mode="charcount"/></xsl:variable>
+ <m:mrow helm:xref="{@helm:xref}">
+ <xsl:choose>
+ <xsl:when test="$charlength >= $framewidth">
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <m:mtr>
+ <m:mtd>
+ <m:mo color="Red">λ</m:mo>
+ <xsl:apply-templates select="m:bvar"/>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo>.</m:mo>
+ <xsl:apply-templates select="*[position()=2]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mo color="Red">λ</m:mo>
+ <xsl:apply-templates select="m:bvar/m:ci"/>
+ <m:mo>:</m:mo>
+ <xsl:apply-templates select="m:bvar/m:type"/>
+ <m:mo>.</m:mo>
+ <xsl:apply-templates select="*[position()=2]"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </m:mrow>
+</xsl:template>
+
+<!-- *********************************** -->
+<!-- BASE SET OF MATHML CONTENT ELEMENTS -->
+<!-- *********************************** -->
+
+<!-- Logic -->
+
+<xsl:template match = "m:apply[m:eq[1]]">
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="*[1]" mode="charcount"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$charlength >= $framewidth">
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <xsl:if test="@helm:xref">
+ <xsl:attribute name="helm:xref">
+ <xsl:value-of select="@helm:xref"/>
+ </xsl:attribute>
+ </xsl:if>
+ <m:mtr>
+ <m:mtd>
+ <m:mo stretchy="false">(</m:mo>
+ <xsl:apply-templates select="*[position()=2]"/>
+ </m:mtd>
+ </m:mtr>
+ <xsl:for-each select = "*[position()>2]">
+ <m:mtr>
+ <m:mtd>
+ <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
+ <m:mo helm:xref="m:in/@helm:xref">
+ =
+ </m:mo>
+ <xsl:apply-templates select="."/>
+ </m:mtd>
+ </m:mtr>
+ </xsl:for-each>
+ <m:mtr>
+ <m:mtd>
+ <m:mo stretchy="false">)</m:mo>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+
+<xsl:template match = "m:apply[m:and[1]|m:or[1]
+ |m:geq[1]|m:leq[1]|m:gt[1]|m:lt[1]
+ |m:in[1]|m:intesect[1]|m:union[1]|m:subset[1]
+ |m:prsubset|m:setdiff[1]]">
+ <xsl:variable name="symbol">
+ <xsl:choose>
+ <xsl:when test="m:and[1]">
+ <xsl:value-of select="'wedge'"/>
+ </xsl:when>
+ <xsl:when test="m:or[1]">
+ <xsl:value-of select="'vee'"/>
+ </xsl:when>
+ <xsl:when test="m:geq[1]">
+ <xsl:value-of select="'geq'"/>
+ </xsl:when>
+ <xsl:when test="m:leq[1]">
+ <xsl:value-of select="'leq'"/>
+ </xsl:when>
+ <xsl:when test="m:gt[1]">
+ <xsl:value-of select="'gt'"/>
+ </xsl:when>
+ <xsl:when test="m:lt[1]">
+ <xsl:value-of select="'lt'"/>
+ </xsl:when>
+ <xsl:when test="m:eq[1]">
+ <xsl:value-of select="'Equal'"/>
+ </xsl:when>
+ <xsl:when test="m:in[1]">
+ <xsl:value-of select="'Element'"/>
+ </xsl:when>
+ <xsl:when test="m:subset[1]">
+ <xsl:value-of select="'SubsetEqual'"/>
+ </xsl:when>
+ <xsl:when test="m:prsubset[1]">
+ <xsl:value-of select="'subset'"/>
+ </xsl:when>
+ <xsl:when test="m:intersect[1]">
+ <xsl:value-of select="'Intersection'"/>
+ </xsl:when>
+ <xsl:when test="m:union[1]">
+ <xsl:value-of select="'Union'"/>
+ </xsl:when>
+ <xsl:when test="m:setdiff[1]">
+ <xsl:value-of select="'Backslash'"/>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="*[1]" mode="charcount"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$charlength >= $framewidth">
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <xsl:if test="@helm:xref">
+ <xsl:attribute name="helm:xref">
+ <xsl:value-of select="@helm:xref"/>
+ </xsl:attribute>
+ </xsl:if>
+ <m:mtr>
+ <m:mtd>
+ <m:mo stretchy="false">(</m:mo>
+ <xsl:apply-templates select="*[position()=2]"/>
+ </m:mtd>
+ </m:mtr>
+ <xsl:for-each select = "*[position()>2]">
+ <m:mtr>
+ <m:mtd>
+ <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
+ <m:mo helm:xref="{*[1]/@helm:xref}">
+ <m:mchar name="{$symbol}"/>
+ </m:mo>
+ <xsl:apply-templates select="."/>
+ </m:mtd>
+ </m:mtr>
+ </xsl:for-each>
+ <m:mtr>
+ <m:mtd>
+ <m:mo stretchy="false">)</m:mo>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:set">
+ <xsl:choose>
+ <xsl:when test="count(child::*) = 0">
+ <m:mi>
+ <m:mchar name="emptyset"/>
+ </m:mi>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="*[1]" mode="charcount"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$charlength >= $framewidth">
+ <xsl:choose>
+ <xsl:when test="name(*[1]) = 'm:bvar'">
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <m:mtr>
+ <m:mtd>
+ <m:mo stretchy="false">{</m:mo>
+ <xsl:apply-templates select="*[position()=1]"/>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mphantom><m:mtext>{</m:mtext></m:mphantom>
+ <m:mo stretchy="false">|</m:mo>
+ <xsl:apply-templates select="m:condition/*[1]"/>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mo stretchy="false">}</m:mo>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <m:mtr>
+ <m:mtd>
+ <m:mo stretchy="false">{</m:mo>
+ <xsl:apply-templates select="*[position()=1]"/>
+ <xsl:if test="position() != last()">
+ <mo>,</mo>
+ </xsl:if>
+ </m:mtd>
+ </m:mtr>
+ <xsl:for-each select = "*[position()>2]">
+ <m:mtr>
+ <m:mtd>
+ <m:mphantom><m:mtext>{</m:mtext></m:mphantom>
+ <xsl:apply-templates select="."/>
+ <xsl:if test="position() != last()">
+ <mo>,</mo>
+ </xsl:if>
+ </m:mtd>
+ </m:mtr>
+ </xsl:for-each>
+ <m:mtr>
+ <m:mtd>
+ <m:mo stretchy="false">}</m:mo>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:card[1]]">
+ <m:mo stretchy="false">|</m:mo>
+ <xsl:apply-templates select="*[2]"/>
+ <m:mo stretchy="false">|</m:mo>
+</xsl:template>
+
+<!-- *********************************** -->
+<!-- PROOF ELEMENTS -->
+<!-- *********************************** -->
+
+
+
+<!--**********************-->
+<!-- COUNTING -->
+<!--**********************-->
+
+<xsl:template match="m:cn|m:and|m:or|m:not|m:exists|m:eq|m:lt|m:leq|m:gt|m:geq
+ |m:in|m:notin|m:intersect|m:union|m:subset|m:prsubset|m:card|m:setdiff
+ |m:plus|m:minus|m:times" mode="charcount">
+<xsl:param name="incurrent_length" select="0"/>
+ <xsl:choose>
+ <xsl:when test="$framewidth > ($incurrent_length + 3 + string-length())">
+ <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>
+ <xsl:choose>
+ <xsl:when test="string($siblength) = """>
+ <xsl:value-of select="$incurrent_length + 3 + string-length()"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="number($siblength)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$incurrent_length + 3 + string-length()"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="m:ci|m:csymbol" mode="charcount">
+<xsl:param name="incurrent_length" select="0"/>
+<xsl:param name="nosibling" select="0"/>
+ <xsl:choose>
+ <xsl:when test="$framewidth > ($incurrent_length + string-length()) and ($nosibling = 0)">
+ <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>
+ <xsl:choose>
+ <xsl:when test="string($siblength) = """>
+ <xsl:value-of select="$incurrent_length + string-length()"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="number($siblength)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$incurrent_length + string-length()"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="*" mode="charcount">
+<xsl:param name="incurrent_length" select="0"/>
+<xsl:param name="nosibling" select="0"/>
+ <xsl:choose>
+ <xsl:when test="count(child::*) = 0">
+ <xsl:value-of select="$incurrent_length"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <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>
+ <xsl:choose>
+ <xsl:when test="$framewidth > number($childlength) and ($nosibling = 0)">
+ <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>
+ <xsl:choose>
+ <xsl:when test="string($siblength) = """>
+ <xsl:value-of select="number($childlength)"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="number($siblength)"/>
+ </xsl:otherwise>
+ </xsl:choose>>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="number($childlength)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+</xsl:stylesheet>
+
--- /dev/null
+<?xml version="1.0"?>
+
+<!--******************************************************************-->
+<!-- XSLT version 0.1 of CIC objects to objects and MathML content: -->
+<!-- First draft: March 21 2000, Irene Schena -->
+<!--******************************************************************-->
+
+<!--******************************************************************-->
+<!-- MANCA: gestione annotation e linking -->
+<!--******************************************************************-->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:m="http://www.w3.org/1998/Math/MathML"
+ xmlns:helm="http://www.cs.unibo.it/helm">
+
+<xsl:import href="content.xsl"/>
+
+<!-- ROOT -->
+
+<xsl:template match="cicxml">
+ <xsl:variable name="url"><xsl:value-of select="@baseurl"/></xsl:variable>
+ <xsl:variable name="stylesheet"><xsl:value-of select="@stylesheet"/></xsl:variable>
+ <xsl:processing-instruction name="cocoon-format">type="text/xml"</xsl:processing-instruction>
+ <xsl:processing-instruction name="xml-stylesheet">href="<xsl:value-of select='concat($url,$stylesheet)'/>" type="text/xsl"</xsl:processing-instruction>
+ <xsl:processing-instruction name="cocoon-process">type="xslt"</xsl:processing-instruction>
+ <xsl:apply-templates select="*[1]"/>
+</xsl:template>
+
+<!-- CIC OBJECTS -->
+
+<xsl:template match="Definition" mode="noannot">
+ <Definition name="{@name}" helm:xref="{@id}">
+ <xsl:if test="string(@params) != """>
+ <Params>
+ <xsl:value-of select="@params"/>
+ </Params>
+ </xsl:if>
+<!-- <xsl:choose>
+ <xsl:when test="$showproof=0">
+ <body>
+ <m:mi>Here</m:mi>
+ </body>
+ </xsl:when>
+ <xsl:otherwise>
+ <body>
+ <xsl:apply-templates select="body"/>
+ </body>
+ </xsl:otherwise>
+ </xsl:choose> -->
+ <body>
+ <xsl:apply-templates select="body"/>
+ </body>
+ <type>
+ <xsl:apply-templates select="type"/>
+ </type>
+ </Definition>
+</xsl:template>
+
+<xsl:template match="Axiom" mode="noannot">
+ <Axiom name="{@name}" helm:xref="{@id}">
+ <xsl:if test="string(@params) != """>
+ <Params>
+ <xsl:value-of select="@params"/>
+ </Params>
+ </xsl:if>
+ <type>
+ <xsl:apply-templates select="type"/>
+ </type>
+ </Axiom>
+</xsl:template>
+
+<xsl:template match="CurrentProof" mode="noannot">
+ <CurrentProof name="{@name}" helm:xref="{@id}">
+ <xsl:for-each select="Conjecture">
+ <Conjecture no="./{@no}">
+ <xsl:apply-templates select="."/>
+ </Conjecture>
+ </xsl:for-each>
+ <body>
+ <xsl:apply-templates select="body"/>
+ </body>
+ <type>
+ <xsl:apply-templates select="type"/>
+ </type>
+ </CurrentProof>
+</xsl:template>
+
+<xsl:template match="InductiveDefinition" mode="noannot">
+ <InductiveDefinition helm:xref="{@id}">
+ <xsl:if test="string(@params) != """>
+ <Params>
+ <xsl:value-of select="@params"/>
+ </Params>
+ </xsl:if>
+ <xsl:if test="string(@noParams) != 0">
+ <xsl:apply-templates select="InductiveType/arity/*[1]" mode="abstparams">
+ <xsl:with-param name="noparams" select="@noParams"/>
+ </xsl:apply-templates>
+ </xsl:if>
+ <xsl:for-each select="InductiveType">
+ <InductiveType name="{./@name}" inductive="{./@inductive}">
+ <arity>
+ <xsl:apply-templates select="./arity/*[1]" mode="abstparams">
+ <xsl:with-param name="noparams" select="../@noParams"/>
+ <xsl:with-param name="target" select="1"/>
+ </xsl:apply-templates>
+ </arity>
+ <xsl:for-each select="./Constructor">
+ <Constructor name="{./@name}">
+ <xsl:apply-templates select="./*[1]" mode="abstparams">
+ <xsl:with-param name="noparams" select="../../@noParams"/>
+ <xsl:with-param name="target" select="1"/>
+ </xsl:apply-templates>
+ </Constructor>
+ </xsl:for-each>
+ </InductiveType>
+ </xsl:for-each>
+ </InductiveDefinition>
+</xsl:template>
+
+<xsl:template match="Variable" mode="noannot">
+ <Variable name="{@name}" helm:xref="{@id}">
+ <type>
+ <xsl:apply-templates select="type"/>
+ </type>
+ </Variable>
+</xsl:template>
+
+<!--*******************************************-->
+<!-- ABSTRACTING PARAMETERS AND COUNTING -->
+<!--*******************************************-->
+<!-- Si dimentica i CAST dei termini che astrae. Nel caso dell'astrazione -->
+<!-- dei lambda dei pattern del CASE, qualora i lambda non si trovino -->
+<!-- nella forma weak-head, astrae solo i lambda che trova e restituisce -->
+<!-- un corpo depurato da tutti i primi cast che precedono il termine -->
+<!-- restituito. -->
+
+<xsl:template match="*" mode="abstparams">
+<xsl:param name="noparams" select="0"/>
+<xsl:param name="target" select="0"/>
+<xsl:param name="binder">PROD</xsl:param>
+ <xsl:choose>
+ <xsl:when test="($noparams != 0) and ((name(.)=string($binder)) or (name(.)="CAST"))">
+ <xsl:choose>
+ <xsl:when test="name(.) = string($binder)">
+ <xsl:if test="$target = 0">
+ <xsl:choose>
+ <xsl:when test="string($binder) = "LAMBDA"">
+ <m:ci>
+ <xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="target/@binder"/></xsl:with-param></xsl:call-template>
+ </m:ci>
+ </xsl:when>
+ <xsl:otherwise>
+ <Param name="{target/@binder}">
+ <xsl:apply-templates select="source" mode="noannot"/>
+ </Param>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:if>
+ <xsl:apply-templates select="target/*[1]" mode="abstparams">
+ <xsl:with-param name="noparams" select="$noparams - 1"/>
+ <xsl:with-param name="target" select="$target"/>
+ <xsl:with-param name="binder" select="$binder"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="term/*[1]" mode="abstparams">
+ <xsl:with-param name="noparams" select="$noparams"/>
+ <xsl:with-param name="target" select="$target"/>
+ <xsl:with-param name="binder" select="$binder"/>
+ </xsl:apply-templates>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:choose>
+ <xsl:when test="($target = 1) and ($noparams != 0)">
+ <m:apply>
+ <m:csymbol>app</m:csymbol>
+ <xsl:apply-templates select="." mode="noannot"/>
+ <xsl:call-template name="printparam"><xsl:with-param name="noleft" select="$noparams"/></xsl:call-template>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:choose>
+ <xsl:when test="$noparams != 0">
+ <xsl:call-template name="printparam"><xsl:with-param name="noleft" select="$noparams"/></xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:if test="$target = 1">
+ <xsl:apply-templates select="." mode="noannot"/>
+ </xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name="printparam">
+<xsl:param name="noleft" select="0"/>
+<xsl:param name="number" select="1"/>
+ <xsl:if test="$noleft != 0">
+ <m:ci><xsl:call-template name="insert_subscript"><xsl:with-param name="node_value">$<xsl:value-of select="$number"/></xsl:with-param></xsl:call-template></m:ci>
+ <xsl:call-template name="printparam"><xsl:with-param name="noleft" select="$noleft - 1"/><xsl:with-param name="number" select="$number + 1"/></xsl:call-template>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template match="*" mode="counting">
+<xsl:param name="noparams" select="0"/>
+<xsl:param name="count" select="0"/>
+ <xsl:choose>
+ <xsl:when test="name(.) = "PROD"">
+ <xsl:apply-templates select="target/*[1]" mode="counting">
+ <xsl:with-param name="noparams" select="$noparams"/>
+ <xsl:with-param name="count" select="$count + 1"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:when test="name(.) = "CAST"">
+ <xsl:apply-templates select="term/*[1]" mode="counting">
+ <xsl:with-param name="noparams" select="$noparams"/>
+ <xsl:with-param name="count" select="$count"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$count - $noparams"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+</xsl:stylesheet>
--- /dev/null
+<?xml version="1.0"?>
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:m="http://www.w3.org/1998/Math/MathML">
+
+<!--***********************************************************************-->
+<!-- auxiliary functions -->
+<!-- HELM Group: Asperti, Padovani, Sacerdoti, Schena -->
+<!--***********************************************************************-->
+
+<!--***********************************************************************-->
+<!-- get the name from a URI -->
+<!--***********************************************************************-->
+
+<!-- CSC: PROBLEMA: URI CHE NON CONTENGONO / ED INIZIANO CON cic: -->
+<xsl:template name="name_of_uri">
+ <xsl:param name="uri" select=""""/>
+ <xsl:variable name="suffix" select="substring-after($uri, "/")"/>
+ <xsl:choose>
+ <xsl:when test="$suffix = """>
+ <!-- CSC: PROBLEMA: .con PUO' APPARIRE ALL'INTERNO DELLE URI ===>
+ SCRIVERE UNA FUNZIONE RICORSIVA CHE RISOLVA -->
+ <xsl:value-of select="substring-before($uri,".con")"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="name_of_uri">
+ <xsl:with-param name="uri" select="$suffix"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!--***********************************************************************-->
+<!-- erase common prefix from two uris -->
+<!--***********************************************************************-->
+
+<xsl:template name="common_prefix">
+ <xsl:param name="first_uri" select=""""/>
+ <xsl:param name="second_uri" select=""""/>
+ <xsl:choose>
+ <xsl:when test="(substring-before($first_uri,"/") =
+ substring-before($second_uri,"/") and
+ substring-after($second_uri,"/") != "")">
+ <xsl:call-template name="common_prefix">
+ <xsl:with-param
+ name="first_uri" select="substring-after($first_uri,"/")"/>
+ <xsl:with-param
+ name="second_uri" select="substring-after($second_uri,"/")"/> </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="slash_counting">
+ <xsl:with-param name="uri" select="$second_uri"/>
+ <xsl:with-param name="counter" select="0"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name="slash_counting">
+ <xsl:param name="uri" select=""""/>
+ <xsl:param name="counter" select="0"/>
+ <xsl:choose>
+ <xsl:when test="(substring-after($uri,"/") != "")">
+ <xsl:call-template name="slash_counting">
+ <xsl:with-param
+ name="uri" select="substring-after($uri,"/")"/>
+ <xsl:with-param
+ name="counter" select="$counter +1"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$counter"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name="blank_counting">
+ <xsl:param name="string" select=""""/>
+ <xsl:param name="counter" select="0"/>
+ <xsl:choose>
+ <xsl:when test="(substring-after($string," ") != "")">
+ <xsl:call-template name="blank_counting">
+ <xsl:with-param
+ name="string" select="substring-after($string," ")"/>
+ <xsl:with-param
+ name="counter" select="$counter +1"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$counter + 1"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name="double_point_counting">
+ <xsl:param name="string" select=""""/>
+ <xsl:param name="counter" select="0"/>
+ <xsl:choose>
+ <xsl:when test="(substring-after($string,":") != "")">
+ <xsl:call-template name="double_point_counting">
+ <xsl:with-param
+ name="string" select="substring-after($string,":")"/>
+ <xsl:with-param
+ name="counter" select="$counter +1"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$counter"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name="min">
+ <xsl:param name="string" select=""""/>
+ <xsl:param name="counter" select="0"/>
+ <xsl:choose>
+ <xsl:when test="contains($string,concat($counter,":"))
+ or (0 > $counter)">
+ <xsl:value-of select="$counter"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="min">
+ <xsl:with-param
+ name="string" select="$string"/>
+ <xsl:with-param
+ name="counter" select="$counter -1"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name="get_no_params">
+ <xsl:param name="first_uri" select=""""/>
+ <xsl:param name="second_uri" select=""""/>
+ <xsl:variable name="offset">
+ <xsl:call-template name="common_prefix">
+ <xsl:with-param name="first_uri" select="$first_uri"/>
+ <xsl:with-param name="second_uri" select="$second_uri"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$offset > 0">
+ <xsl:variable name="params">
+ <xsl:value-of
+ select="document(concat(string($absPath),$second_uri))/*/@params"/>
+ </xsl:variable>
+ <xsl:variable name="minimum">
+ <xsl:call-template name="min">
+ <xsl:with-param name="string" select="$params"/>
+ <xsl:with-param name="counter" select="$offset - 1"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="0 > $minimum">
+ 0
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:variable name="relevant_params">
+ <!-- the blank after : in the next line is essential -->
+ <xsl:value-of
+ select="substring-after($params,concat($minimum,": "))"/>
+ </xsl:variable>
+ <xsl:variable name="tokens">
+ <xsl:call-template name="blank_counting">
+ <xsl:with-param name="string" select="$relevant_params"/>
+ <xsl:with-param name="counter" select="0"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="separators">
+ <xsl:call-template name="double_point_counting">
+ <xsl:with-param name="string" select="$relevant_params"/>
+ <xsl:with-param name="counter" select="0"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:value-of select="$tokens - $separators"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ 0
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+
+<!--***********************************************************************-->
+<!-- Insert a subscript if there is a number at the end of a ci element -->
+<!--***********************************************************************-->
+
+<xsl:template name="insert_subscript">
+<xsl:param name="node_value" select=""""/>
+<xsl:param name="current_pos" select="1"/>
+<xsl:param name="start_pos" select="0"/>
+ <xsl:choose>
+ <xsl:when test="$current_pos <= string-length(string($node_value))">
+ <xsl:variable name="current_char"><xsl:value-of select="substring(string($node_value),$current_pos,1)"/></xsl:variable>
+ <xsl:choose>
+ <xsl:when test="(string($current_char) != "0") and (string($current_char) != "1") and (string($current_char) != "2") and (string($current_char) != "3") and (string($current_char) != "4") and (string($current_char) != "5") and (string($current_char) != "6") and (string($current_char) != "7") and (string($current_char) != "8") and (string($current_char) != "9")">
+ <xsl:choose>
+ <xsl:when test="$start_pos != 0">
+ <xsl:call-template name="insert_subscript"><xsl:with-param name="node_value" select="$node_value"/><xsl:with-param name="current_pos" select="$current_pos + 1"/><xsl:with-param name="start_pos" select="0"/></xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="insert_subscript"><xsl:with-param name="node_value" select="$node_value"/><xsl:with-param name="current_pos" select="$current_pos + 1"/><xsl:with-param name="start_pos" select="$start_pos"/></xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:choose>
+ <xsl:when test="$start_pos = 0">
+ <xsl:call-template name="insert_subscript"><xsl:with-param name="node_value" select="$node_value"/><xsl:with-param name="current_pos" select="$current_pos + 1"/><xsl:with-param name="start_pos" select="$current_pos"/></xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="insert_subscript"><xsl:with-param name="node_value" select="$node_value"/><xsl:with-param name="current_pos" select="$current_pos + 1"/><xsl:with-param name="start_pos" select="$start_pos"/></xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:choose>
+ <xsl:when test="$start_pos != 0">
+ <m:msub>
+ <m:mi><xsl:value-of select="substring(string($node_value),1,$start_pos -1)"/></m:mi>
+ <m:mn><xsl:value-of select="substring(string($node_value),$start_pos)"/></m:mn>
+ </m:msub>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$node_value"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+
+</xsl:stylesheet>
+
+
+
+
+
+
--- /dev/null
+<?xml version="1.0"?>
+
+<!--******************************************************************-->
+<!-- Basic Logic -->
+<!-- First draft: April 3 2000 -->
+<!-- HELM Group: Asperti, Padovani, Sacerdoti, Schena -->
+<!--******************************************************************-->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:m="http://www.w3.org/1998/Math/MathML"
+ xmlns:helm="http://www.cs.unibo.it/helm">
+
+<!--******************************************************************-->
+<!-- Variable containing the absolute path of the CIC file -->
+<!--******************************************************************-->
+
+<xsl:variable name="absPath">http://localhost:8081/getciconly?uri=</xsl:variable>
+
+<!-- ************************* LOGIC *********************************-->
+
+<!-- Proof objects -->
+
+<!-- <xsl:key name="typeid" use="@id" match="TYPE"/> -->
+
+<xsl:template match="LAMBDA|PROD|CAST|REL|SORT|APPLY|VAR|META|CONST|MUTIND|MUTCONSTRUCT|MUTCASE|FIX|COFIX" mode="noannot">
+ <xsl:choose>
+ <xsl:when test="@id">
+ <xsl:variable name="id" select="@id"/>
+ <xsl:choose>
+ <!-- <xsl:when test="//ALLTYPES and key('typeid',@id)"> -->
+ <xsl:when test="//ALLTYPES/TYPE[@id=$id]">
+ <xsl:choose>
+ <xsl:when test="name()= 'APPLY' and CONST[
+ attribute::uri='cic:/coq/INIT/Logic_Type/eqT_ind.con' or
+ attribute::uri='cic:/coq/ZARITH/auxiliary/eqT_ind_r.con'] and count(child::*) = 7">
+ <m:apply helm:xref="{@id}">
+ <m:csymbol>thread</m:csymbol>
+ <xsl:apply-templates mode="pure" select="//ALLTYPES/TYPE[@id=$id]"/>
+ <m:apply>
+ <m:csymbol>rw_step</m:csymbol>
+ <xsl:apply-templates mode="pure" select="*[3]"/>
+ <xsl:apply-templates mode="pure" select="*[6]"/>
+ <xsl:apply-templates mode="pure" select="*[7]"/>
+ </m:apply>
+ <xsl:apply-templates mode="thread" select="*[5]"/>
+ </m:apply>
+ </xsl:when>
+ <!-- aggiungere la verifica dell'esistenza dei lambda per and_ind -->
+ <xsl:when test="name()= 'APPLY' and CONST[
+ attribute::uri='cic:/coq/INIT/Logic/Conjunction/and_ind.con']
+ and count(child::*) = 6">
+ <m:apply helm:xref="{@id}">
+ <m:csymbol>and_ind</m:csymbol>
+ <xsl:apply-templates mode="noannot" select="*[6]"/>
+ <m:ci><xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="*[5]/target/@binder"/></xsl:with-param></xsl:call-template></m:ci>
+ <xsl:apply-templates mode="pure" select="*[5]/source/*"/>
+ <m:ci><xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="*[5]/target/LAMBDA/target/@binder"/></xsl:with-param></xsl:call-template></m:ci>
+ <xsl:apply-templates mode="pure" select="*[5]/target/LAMBDA/source/*"/>
+ <xsl:apply-templates mode="noannot" select="*[5]/target/LAMBDA/target/*"/>
+ </m:apply>
+ </xsl:when>
+ <xsl:when test="name()= 'APPLY' and CONST[
+ attribute::uri='cic:/coq/INIT/Logic/Disjunction/or_ind.con']
+ and count(child::*) = 7">
+ <m:apply helm:xref="{@id}">
+ <m:csymbol>or_ind</m:csymbol>
+ <xsl:apply-templates mode="noannot" select="*[7]"/>
+ <xsl:apply-templates mode="pure" select="//ALLTYPES/TYPE[@id=$id]"/>
+ <xsl:apply-templates mode="pure" select="*[5]"/>
+ <xsl:apply-templates mode="pure" select="*[6]"/>
+ </m:apply>
+ </xsl:when>
+ <xsl:when test="count(*[@id = //ALLTYPES/TYPE/@id]) = 1">
+ <m:apply helm:xref="{@id}">
+ <m:csymbol>thread</m:csymbol>
+ <xsl:apply-templates mode="pure" select="//ALLTYPES/TYPE[@id=$id]"/>
+ <m:apply>
+ <m:csymbol>app</m:csymbol>
+ <xsl:apply-templates mode="copy-of-no-prop" select="*[1]"/>
+ </m:apply>
+ <xsl:apply-templates mode="thread" select="*[@id = //ALLTYPES/TYPE/@id]"/>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:apply helm:xref="{@id}">
+ <m:csymbol>proof</m:csymbol>
+ <xsl:apply-templates select="." mode="pure"/>
+ <!-- <xsl:apply-templates select="key('typeid',@id)" mode="pure"/> -->
+ <xsl:apply-templates select="//ALLTYPES/TYPE[@id=$id]" mode="pure"/>
+ </m:apply>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="." mode="pure"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="." mode="pure"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="*" mode="copy-of-no-prop">
+ <xsl:choose>
+ <xsl:when test="@id = //ALLTYPES/TYPE/@id">
+ <m:ci>previous</m:ci>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="." mode="pure"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:apply-templates mode="copy-of-no-prop" select="following-sibling::*[1]"/>
+</xsl:template>
+
+<xsl:template match="*" mode="thread">
+ <xsl:choose>
+ <xsl:when test="name()= 'APPLY' and CONST[
+ attribute::uri='cic:/coq/INIT/Logic_Type/eqT_ind.con' or
+ attribute::uri='cic:/coq/ZARITH/auxiliary/eqT_ind_r.con'] and count(child::*) = 7">
+ <xsl:variable name="id" select="@id"/>
+ <xsl:apply-templates mode="pure" select="//ALLTYPES/TYPE[@id=$id]"/>
+ <m:apply>
+ <m:csymbol>rw_step</m:csymbol>
+ <xsl:apply-templates mode="pure" select="*[3]"/>
+ <xsl:apply-templates mode="pure" select="*[6]"/>
+ <xsl:apply-templates mode="pure" select="*[7]"/>
+ </m:apply>
+ <xsl:apply-templates mode="thread" select="*[5]"/>
+ </xsl:when>
+<!--**** Patch temporanea, per il problema dei threads ***-->
+<xsl:when test="(name()= 'APPLY' and CONST[
+ attribute::uri='cic:/coq/INIT/Logic/Conjunction/and_ind.con']
+ and count(child::*) = 6) or
+(name()= 'APPLY' and CONST[
+ attribute::uri='cic:/coq/INIT/Logic/Disjunction/or_ind.con']
+ and count(child::*) = 7)">
+ <xsl:apply-templates mode="noannot" select="."/>
+</xsl:when>
+<!--**** Fine Patch temporanea, per il problema dei threads ***-->
+ <xsl:when test="count(*[@id = //ALLTYPES/TYPE/@id]) = 1">
+ <xsl:variable name="id" select="@id"/>
+ <m:apply helm:xref="{@id}">
+ <m:csymbol>thread</m:csymbol>
+ <xsl:apply-templates mode="pure" select="//ALLTYPES/TYPE[@id=$id]"/>
+ <m:apply>
+ <m:csymbol>app</m:csymbol>
+ <xsl:apply-templates mode="copy-of-no-prop" select="*[1]"/>
+ </m:apply>
+ <xsl:apply-templates mode="thread" select="*[@id = //ALLTYPES/TYPE/@id]"/>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates mode="noannot" select="."/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+
+<!-- Basic proof operators -->
+
+<!-- non del tutto soddisfacente, ma .... -->
+<xsl:template match="APPLY[CONST[
+ attribute::uri='cic:/coq/INIT/Logic_Type/eqT_ind.con' or
+ attribute::uri='cic:/coq/ZARITH/auxiliary/eqT_ind_r.con']]" mode="appflat">
+ <xsl:choose>
+ <xsl:when test="count(child::*) > 7">
+ <xsl:variable name="id" select="@id"/>
+ <xsl:variable name="ideqp" select="*[7]/@id"/>
+ <xsl:variable name="idsubp" select="*[5]/@id"/>
+ <xsl:variable name="leteqp" select="boolean(//ALLTYPES/TYPE[@id=$ideqp])"/>
+ <xsl:variable name="letsubp" select="boolean(//ALLTYPES/TYPE[@id=$idsubp])"/>
+ <m:apply helm:xref="{@id}">
+ <m:csymbol>rewrite_and_apply</m:csymbol>
+ <m:apply>
+ <m:csymbol>rw_step</m:csymbol>
+ <xsl:apply-templates mode="pure" select="*[3]"/>
+ <xsl:apply-templates mode="pure" select="*[6]"/>
+ <xsl:choose>
+ <xsl:when test="$leteqp">
+ <xsl:choose>
+ <xsl:when test="$letsubp">
+ <m:ci>
+ <xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="'h2'"/></xsl:with-param></xsl:call-template>
+ </m:ci>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:ci>
+ <xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="'h1'"/></xsl:with-param></xsl:call-template>
+ </m:ci>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates mode="pure" select="*[7]"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </m:apply>
+ <xsl:choose>
+ <xsl:when test="$letsubp">
+ <m:ci>
+ <xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="'h1'"/></xsl:with-param></xsl:call-template>
+ </m:ci>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates mode="pure" select="*[5]"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:apply-templates mode="flat" select="*[8]">
+ <xsl:with-param name="n">
+ <xsl:value-of select="1+$letsubp+$leteqp"/>
+ </xsl:with-param>
+ </xsl:apply-templates>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:apply helm:xref="{@id}">
+ <m:csymbol>app</m:csymbol>
+ <xsl:apply-templates mode="flat" select="*[1]"/>
+ </m:apply>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="APPLY[CONST[
+ attribute::uri='cic:/coq/INIT/Logic/Conjunction/and_ind.con']]" mode="appflat">
+ <xsl:choose>
+ <xsl:when test="count(child::*) > 4">
+ <m:apply helm:xref="{@id}">
+ <m:csymbol>app</m:csymbol>
+ <xsl:apply-templates mode="pure" select="*[1]"/>
+ <m:ci>*</m:ci>
+ <m:ci>*</m:ci>
+ <m:ci>*</m:ci>
+ <xsl:apply-templates mode="flat" select="*[5]"/>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:apply helm:xref="{@id}">
+ <m:csymbol>app</m:csymbol>
+ <xsl:apply-templates mode="flat" select="*[1]"/>
+ </m:apply>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+
+</xsl:stylesheet>
+
+
+
+
+
+
--- /dev/null
+<?xml version="1.0"?>
+
+<!--******************************************************************-->
+<!-- Reals -->
+<!-- First draft: April 3 2000 -->
+<!-- HELM Group: Asperti, Padovani, Sacerdoti, Schena -->
+<!--******************************************************************-->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:m="http://www.w3.org/1998/Math/MathML"
+ xmlns:helm="http://www.cs.unibo.it/helm"
+ xmlns:xlink="http://www.w3.org/1999/xlink">
+
+<!--******************************************************************-->
+<!-- Variable containing the absolute path of the CIC file -->
+<!--******************************************************************-->
+
+<xsl:variable name="absPath">http://localhost:8081/getciconly?uri=</xsl:variable>
+
+<!-- ************************* LOGIC *********************************-->
+
+<!-- REALS -->
+
+<!--
+<xsl:template match="CONST[attribute::uri='cic:/coq/REALS/Raxioms/R.con']" mode="pure">
+ <m:reals/>
+</xsl:template>
+-->
+
+<!-- 0 e 1 -->
+
+<xsl:template match="CONST[attribute::uri='cic:/coq/REALS/Raxioms/R0.con']" mode="pure">
+ <m:cn definitionURL="{@uri}" helm:xref="{@id}">0</m:cn>
+</xsl:template>
+
+<xsl:template match="CONST[attribute::uri='cic:/coq/REALS/Raxioms/R1.con']" mode="pure">
+ <m:cn definitionURL="{@uri}" helm:xref="{@id}">1</m:cn>
+</xsl:template>
+
+
+
+<!-- Unary Operations -->
+
+<xsl:template match="APPLY[CONST[
+ attribute::uri='cic:/coq/REALS/Raxioms/Ropp.con' or
+ attribute::uri='cic:/coq/REALS/Rbasic_fun/Rabsolu.con' or
+ attribute::uri='cic:/coq/REALS/Rfunctions/fact.con' or
+ attribute::uri='cic:/coq/REALS/Rbase/Rsqr.con']]" mode="pure">
+ <xsl:choose>
+ <xsl:when test="count(child::*) = 2">
+ <xsl:variable name="elem">
+ <xsl:choose>
+ <xsl:when test="CONST/@uri='cic:/coq/REALS/Raxioms/Ropp.con'">
+ <xsl:value-of select="'minus'"/>
+ </xsl:when>
+ <xsl:when test="CONST/@uri='cic:/coq/REALS/Rbasic_fun/Rabsolu.con'">
+ <xsl:value-of select="'abs'"/>
+ </xsl:when>
+ <xsl:when test="CONST/@uri='cic:/coq/REALS/Rfunctions/fact.con'">
+ <xsl:value-of select="'factorial'"/>
+ </xsl:when>
+ <xsl:when test="CONST/@uri='cic:/coq/REALS/Rbase/Rsqr.con'">
+ <xsl:value-of select="'root'"/>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:variable>
+ <m:apply helm:xref="{@id}">
+ <xsl:element name="{concat('m:',$elem)}">
+ <xsl:attribute name="definitionURL">
+ <xsl:value-of select="CONST/@uri"/>
+ </xsl:attribute>
+ <xsl:attribute name="helm:xref">
+ <xsl:value-of select="CONST/@id"/>
+ </xsl:attribute>
+ </xsl:element>
+ <xsl:apply-templates select="*[2]" mode="noannot"/>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="APPLY[CONST[
+ attribute::uri='cic:/coq/REALS/Raxioms/Rinv.con']]" mode="pure">
+ <xsl:choose>
+ <xsl:when test="count(child::*) = 2">
+ <m:apply helm:xref="{@id}">
+ <m:power/>
+ <xsl:apply-templates select="*[2]" mode="noannot"/>
+ <m:apply>
+ <m:minus>
+ <xsl:attribute name="definitionURL">
+ <xsl:value-of select="CONST/@uri"/>
+ </xsl:attribute>
+ </m:minus>
+ <xsl:attribute name="helm:xref">
+ <xsl:value-of select="CONST/@id"/>
+ </xsl:attribute>
+ <m:cn>1</m:cn>
+ </m:apply>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- Binary Operations and Relations -->
+
+<xsl:template match="APPLY[CONST[
+ attribute::uri='cic:/coq/REALS/Raxioms/Rplus.con' or
+ attribute::uri='cic:/coq/REALS/Raxioms/Rminus.con' or
+ attribute::uri='cic:/coq/REALS/Raxioms/Rmult.con' or
+ attribute::uri='cic:/coq/REALS/Raxioms/Rle.con' or
+ attribute::uri='cic:/coq/REALS/Raxioms/Rlt.con' or
+ attribute::uri='cic:/coq/REALS/Raxioms/Rge.con' or
+ attribute::uri='cic:/coq/REALS/Raxioms/Rgt.con' or
+ attribute::uri='cic:/coq/REALS/Rbasic_fun/Rmin.con' or
+ attribute::uri='cic:/coq/REALS/Rfunctions/pow.con']]" mode="pure">
+ <xsl:choose>
+ <xsl:when test="count(child::*) = 3">
+ <xsl:variable name="elem">
+ <xsl:choose>
+ <xsl:when test="CONST/@uri='cic:/coq/REALS/Raxioms/Rplus.con'">
+ <xsl:value-of select="'plus'"/>
+ </xsl:when>
+ <xsl:when test="CONST/@uri='cic:/coq/REALS/Raxioms/Rminus.con'">
+ <xsl:value-of select="'minus'"/>
+ </xsl:when>
+ <xsl:when test="CONST/@uri='cic:/coq/REALS/Raxioms/Rmult.con'">
+ <xsl:value-of select="'times'"/>
+ </xsl:when>
+ <xsl:when test="CONST/@uri='cic:/coq/REALS/Raxioms/Rle.con'">
+ <xsl:value-of select="'leq'"/>
+ </xsl:when>
+ <xsl:when test="CONST/@uri='cic:/coq/REALS/Raxioms/Rlt.con'">
+ <xsl:value-of select="'lt'"/>
+ </xsl:when>
+ <xsl:when test="CONST/@uri='cic:/coq/REALS/Raxioms/Rge.con'">
+ <xsl:value-of select="'geq'"/>
+ </xsl:when>
+ <xsl:when test="CONST/@uri='cic:/coq/REALS/Raxioms/Rgt.con'">
+ <xsl:value-of select="'gt'"/>
+ </xsl:when>
+ <xsl:when test="CONST/@uri='cic:/coq/REALS/Rbasic_fun/Rmin.con'">
+ <xsl:value-of select="'min'"/>
+ </xsl:when>
+ <xsl:when test="CONST/@uri='cic:/coq/REALS/Rfunctions/pow.con'">
+ <xsl:value-of select="'power'"/>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:variable>
+ <m:apply helm:xref="{@id}">
+ <xsl:element name="{concat('m:',$elem)}">
+ <xsl:attribute name="definitionURL">
+ <xsl:value-of select="CONST/@uri"/>
+ </xsl:attribute>
+ <xsl:attribute name="helm:xref">
+ <xsl:value-of select="CONST/@id"/>
+ </xsl:attribute>
+ </xsl:element>
+ <xsl:apply-templates select="*[2]" mode="noannot"/>
+ <xsl:apply-templates select="*[3]" mode="noannot"/>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- LIMIT -->
+
+<xsl:template match="APPLY[CONST[
+ attribute::uri='cic:/coq/REALS/Rlimit/limit1_in.con']]" mode="pure">
+ <xsl:choose>
+ <xsl:when test="count(child::*) = 5">
+ <m:apply>
+ <m:eq/>
+ <xsl:choose>
+ <xsl:when test="name(*[2]) = 'LAMBDA'">
+ <m:apply helm:xref="{@id}">
+ <m:limit>
+ <xsl:attribute name="definitionURL">
+ <xsl:value-of select="CONST/@uri"/>
+ </xsl:attribute>
+ <xsl:attribute name="helm:xref">
+ <xsl:value-of select="CONST/@id"/>
+ </xsl:attribute>
+ </m:limit>
+ <m:bvar>
+ <m:ci><xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="LAMBDA/target/@binder"/></xsl:with-param></xsl:call-template></m:ci>
+ </m:bvar>
+ <m:lowlimit>
+ <xsl:apply-templates select="*[5]" mode="noannot"/>
+ </m:lowlimit>
+ <xsl:apply-templates select="*[2]/target" mode="noannot"/>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:apply helm:xref="{@id}">
+ <m:limit/>
+ <m:bvar>
+ <m:ci>$x</m:ci>
+ </m:bvar>
+ <m:lowlimit>
+ <xsl:apply-templates select="*[5]" mode="noannot"/>
+ </m:lowlimit>
+ <m:apply>
+ <m:csymbol>app</m:csymbol>
+ <xsl:apply-templates select="*[2]" mode="noannot"/>
+ <m:ci>$x</m:ci>
+ </m:apply>
+ </m:apply>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:apply-templates select="*[4]" mode="noannot"/>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- DIFFERENTIATION -->
+
+<xsl:template match="APPLY[CONST[
+ attribute::uri='cic:/coq/REALS/Rderiv/D_in.con']]" mode="pure">
+ <xsl:choose>
+ <xsl:when test="count(child::*) = 4">
+ <m:apply>
+ <m:eq/>
+ <xsl:choose>
+ <xsl:when test="name(*[2]) = 'LAMBDA'">
+ <m:apply helm:xref="{@id}">
+ <m:diff >
+ <xsl:attribute name="definitionURL">
+ <xsl:value-of select="CONST/@uri"/>
+ </xsl:attribute>
+ <xsl:attribute name="helm:xref">
+ <xsl:value-of select="CONST/@id"/>
+ </xsl:attribute>
+ </m:diff>
+ <m:bvar>
+ <m:ci><xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="LAMBDA[1]/target/@binder"/></xsl:with-param></xsl:call-template></m:ci>
+ </m:bvar>
+ <xsl:apply-templates select="*[2]/target" mode="noannot"/>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:apply helm:xref="{@id}">
+ <m:diff/>
+ <m:bvar>
+ <m:ci>$x</m:ci>
+ </m:bvar>
+ <m:apply>
+ <m:csymbol>app</m:csymbol>
+ <xsl:apply-templates select="*[2]" mode="noannot"/>
+ <m:ci>$x</m:ci>
+ </m:apply>
+ </m:apply>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:apply-templates select="*[4]" mode="noannot"/>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+</xsl:stylesheet>
--- /dev/null
+<?xml version="1.0"?>
+
+
+<xsl:stylesheet version="0.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+<xsl:output method="html"/>
+
+
+<!--******************************************************************-->
+<!-- Variable containing the absolute path of the CIC file -->
+<!--******************************************************************-->
+
+<xsl:variable name="absPath">http://localhost:8081/getciconly?uri=</xsl:variable>
+
+<xsl:template match="/">
+ <html>
+ <head></head>
+ <body>
+ <xsl:apply-templates select="Theory"/>
+ </body>
+ </html>
+</xsl:template>
+
+
+<!-- CIC TERMS -->
+
+
+
+<xsl:template match="MUTIND[string(@uri)='cic:/coq/INIT/Logic/Equality/eq.ind']" mode="search" >
+<!-- <xsl:param name="current_uri" select=""/> -->
+<!-- <h1><xsl:value-of select="string(@uri)"/></h1> -->
+<!-- <xsl:if test="string(@uri)='cic:/coq/INIT/Logic/Equality/eq.ind'"> -->
+ <xsl:value-of select="$current_uri"/><BR/>
+<!-- </xsl:if> -->
+</xsl:template>
+
+<!-- AGGIUNGERE cic: alle uri nei file Theory -->
+
+<xsl:template match="Theory">
+<!-- <xsl:param name="current_uri" select=""/> -->
+ <xsl:apply-templates>
+ <xsl:with-param name="current_uri" select="string(@uri)"/>
+ </xsl:apply-templates>
+</xsl:template>
+
+<xsl:template match="VARIABLE">
+<!-- <xsl:param name="current_uri" select=""/> -->
+<xsl:variable name="found"
+ select="boolean(document(concat(string($absPath),string($current_uri),"/",string(@uri)))//MUTIND[string(@uri)='cic:/coq/INIT/Logic/Equality/eq.ind'])"/>
+<xsl:if test="$found">
+ <xsl:value-of select="concat(string($current_uri),"/",string(@uri),".xml")"/><BR/>
+</xsl:if>
+
+<!-- <xsl:with-param name="current_uri" select="concat(string($absPath),string($current_uri),"/",string(@uri))"/>
+ </xsl:apply-templates> -->
+</xsl:template>
+
+<xsl:template match="DEFINITION">
+<!-- <xsl:param name="current_uri" select=""/> -->
+<!-- <xsl:apply-templates select="document(concat(string($absPath),string($current_uri),"/",string(@uri)))" mode="search">
+ <xsl:with-param name="current_uri" select="concat(string($absPath),string($current_uri),"/",string(@uri))"/>
+ </xsl:apply-templates> -->
+<xsl:variable name="found"
+ select="boolean(document(concat(string($absPath),string($current_uri),"/",string(@uri)))//MUTIND[string(@uri)='cic:/coq/INIT/Logic/Equality/eq.ind'])"/>
+<xsl:if test="$found">
+ <xsl:value-of select="concat(string($current_uri),"/",string(@uri),".xml")"/><BR/>
+</xsl:if>
+</xsl:template>
+
+<xsl:template match="THEOREM">
+<!-- <xsl:param name="current_uri" select=""/> -->
+<!-- <xsl:apply-templates select="document(concat(string($absPath),string($current_uri),"/",string(@uri)))" mode="search">
+ <xsl:with-param name="current_uri" select="concat(string($absPath),string($current_uri),"/",string(@uri))"/>
+ </xsl:apply-templates> -->
+<xsl:variable name="found"
+ select="boolean(document(concat(string($absPath),string($current_uri),"/",string(@uri)))//MUTIND[string(@uri)='cic:/coq/INIT/Logic/Equality/eq.ind'])"/>
+<xsl:if test="$found">
+ <xsl:value-of select="concat(string($current_uri),"/",string(@uri),".xml")"/><BR/>
+</xsl:if>
+</xsl:template>
+
+
+<xsl:template match="SECTION">
+<!-- <xsl:param name="current_uri" select=""/> -->
+ <xsl:apply-templates>
+ <xsl:with-param name="current_uri" select="concat($current_uri,"/",string(@uri))"/>
+ </xsl:apply-templates>
+
+</xsl:template>
+
+</xsl:stylesheet>
--- /dev/null
+<?xml version="1.0"?>
+
+<!--***********************************************************************-->
+<!-- XSLT version 0.1 of the stylesheet to accomplish the right inclusion -->
+<!-- of the content stylesheets: -->
+<!-- First draft: May 26 2000, Claudio Sacerdoti Coen, Irene Schena -->
+<!--***********************************************************************-->
+
+<!-- Schema of stylesheet precedences (from highest to lowest): -->
+<!-- proofs.xsl-> reals.xsl-> set -> basic -> annotatedcont -->
+<!-- because annotatedcont is imported and has lower precendence than -->
+<!-- the templates of rootcontent (i.e. the templates of set and basic). -->
+<!-- annotatedcont -> objcontent -> content -->
+<!-- because annotatedcont generates an import precedence tree. -->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+
+<xsl:import href="annotatedcont.xsl"/>
+<xsl:key name="id" use="@id" match="LAMBDA|PROD|CAST|REL|SORT|APPLY|VAR|META|CONST|MUTIND|MUTCONSTRUCT|MUTCASE|FIX|COFIX|Definition|Axiom|CurrentProof|InductiveDefinition|Variable"/>
+<xsl:include href="basic.xsl"/>
+<xsl:include href="set.xsl"/>
+<xsl:include href="reals.xsl"/>
+<xsl:include href="proofs.xsl"/>
+
+<xsl:variable name="showproof" select="0"/>
+</xsl:stylesheet>
+
+
+
--- /dev/null
+<?xml version="1.0"?>
+
+<!--***********************************************************************-->
+<!-- XSLT version 0.1 of the stylesheet to accomplish the right inclusion -->
+<!-- of the theory content stylesheets: -->
+<!-- First draft: May 26 2000, Claudio Sacerdoti Coen, Irene Schena -->
+<!-- November 15 2000, Irene Schena -->
+<!--***********************************************************************-->
+
+<!-- Schema of stylesheet precedences (from highest to lowest): -->
+<!-- theory_content -> rootcontent.xsl -->
+<!-- because theory_content is included and has higher precendence than -->
+<!-- the templates of rootcontent which are imported. -->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+<xsl:import href="rootcontent.xsl"/>
+<xsl:include href="theory_content.xsl"/>
+
+</xsl:stylesheet>
+
+
+
+
+
--- /dev/null
+<?xml version="1.0"?>
+
+<!--******************************************************************-->
+<!-- Basic Set Theory -->
+<!-- First draft: April 3 2000 -->
+<!-- HELM Group: Asperti, Padovani, Sacerdoti, Schena -->
+<!--******************************************************************-->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:m="http://www.w3.org/1998/Math/MathML"
+ xmlns:helm="http://www.cs.unibo.it/helm">
+
+<!--******************************************************************-->
+<!-- Variable containing the absolute path of the CIC file -->
+<!--******************************************************************-->
+
+<xsl:variable name="absPath">http://localhost:8081/getciconly?uri=</xsl:variable>
+
+<!-- ************************* LOGIC *********************************-->
+
+
+
+<xsl:template match="*" mode="set">
+ <xsl:choose>
+ <xsl:when test="name() = 'LAMBDA'">
+ <m:set>
+ <m:bvar>
+ <m:ci>
+ <xsl:call-template name="insert_subscript"><xsl:with-param name="node_value"><xsl:value-of select="target/@binder"/></xsl:with-param></xsl:call-template>
+ </m:ci>
+ <m:type>
+ <xsl:apply-templates select="source" mode="noannot"/>
+ </m:type>
+ </m:bvar>
+ <m:condition>
+ <xsl:apply-templates select="target" mode="noannot"/>
+ </m:condition>
+ </m:set>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="." mode="noannot"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+
+<!-- IN -->
+
+<xsl:template match="APPLY[CONST[attribute::uri='cic:/coq/SETS/Ensembles/Ensembles/In.con']]" mode="pure">
+ <xsl:variable name="no_params">
+ <xsl:call-template name="get_no_params">
+ <xsl:with-param name="first_uri" select="/cicxml/@uri"/>
+ <xsl:with-param name="second_uri" select="CONST/@uri"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="(count(child::*) - number($no_params)) = 3">
+ <m:apply helm:xref="{@id}">
+ <m:in definitionURL="{CONST/@uri}" helm:xref="{CONST/@id}"/>
+ <xsl:apply-templates select="*[3+$no_params]" mode="noannot"/>
+ <!-- <xsl:apply-templates select="*[2+$no_params]" mode="noannot"/> -->
+ <xsl:apply-templates select="*[2+$no_params]" mode="set" />
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+
+<!-- NOT-IN -->
+<!-- NOT ha no parameters -->
+<xsl:template match="APPLY[CONST[attribute::uri='cic:/coq/INIT/Logic/not.con']
+and (count(child::*) = 2) and APPLY[CONST[attribute::uri='cic:/coq/SETS/Ensembles/Ensembles/In.con']]]" mode="pure">
+ <xsl:variable name="no_params">
+ <xsl:call-template name="get_no_params">
+ <xsl:with-param name="first_uri" select="/cicxml/@uri"/>
+ <xsl:with-param name="second_uri" select="APPLY/CONST/@uri"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="(count(APPLY/child::*) - number($no_params)) = 3">
+ <m:apply helm:xref="{@id}">
+ <m:notin/>
+ <xsl:apply-templates select="*[2]/*[3+$no_params]" mode="noannot"/>
+ <!-- <xsl:apply-templates select="*[2]/*[2+$no_params]" mode="noannot"/> -->
+ <xsl:apply-templates select="*[2]/*[2+$no_params]" mode="set"/>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- EMPTY SET -->
+
+<xsl:template match="APPLY[MUTIND[attribute::uri='cic:/coq/SETS/Ensembles/Ensembles/Empty_set.ind']]" mode="pure">
+ <xsl:variable name="no_params">
+ <xsl:call-template name="get_no_params">
+ <xsl:with-param name="first_uri" select="/cicxml/@uri"/>
+ <xsl:with-param name="second_uri" select="MUTIND/@uri"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="(count(child::*) - number($no_params)) = 1">
+ <m:set definitionURL="{MUTIND/@uri}" helm:xref="{@id}">
+ </m:set>
+ </xsl:when>
+ <xsl:when test="(count(child::*) - number($no_params)) = 2">
+ <m:apply helm:xref="{@id}">
+ <m:in definitionURL="cic:/coq/SETS/Ensembles/Ensembles/In.con"/>
+ <xsl:apply-templates select="*[2+$no_params]" mode="noannot"/>
+ <m:set definitionURL="{MUTIND/@uri}" helm:xref="{@id}">
+ </m:set>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- SINGLETON -->
+
+<xsl:template match="APPLY[MUTIND[attribute::uri='cic:/coq/SETS/Ensembles/Ensembles/Singleton.ind']]" mode="pure">
+ <xsl:variable name="no_params">
+ <xsl:call-template name="get_no_params">
+ <xsl:with-param name="first_uri" select="/cicxml/@uri"/>
+ <xsl:with-param name="second_uri" select="MUTIND/@uri"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="(count(child::*) - number($no_params)) = 2">
+ <m:set definitionURL="{MUTIND/@uri}" helm:xref="{@id}">
+ <xsl:apply-templates select="*[2+$no_params]" mode="noannot"/>
+ </m:set>
+ </xsl:when>
+ <xsl:when test="(count(child::*) - number($no_params)) = 3">
+ <m:apply helm:xref="{@id}">
+ <m:in definitionURL="cic:/coq/SETS/Ensembles/Ensembles/In.con"/>
+ <xsl:apply-templates select="*[3+$no_params]" mode="noannot"/>
+ <m:set definitionURL="{MUTIND/@uri}">
+ <xsl:apply-templates select="*[2+$no_params]" mode="noannot"/>
+ </m:set>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- COUPLE -->
+
+<xsl:template match="APPLY[MUTIND[attribute::uri='cic:/coq/SETS/Ensembles/Ensembles/Couple.ind']]" mode="pure">
+ <xsl:variable name="no_params">
+ <xsl:call-template name="get_no_params">
+ <xsl:with-param name="first_uri" select="/cicxml/@uri"/>
+ <xsl:with-param name="second_uri" select="MUTIND/@uri"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="(count(child::*) - number($no_params)) = 3">
+ <m:set definitionURL="{MUTIND/@uri}" helm:xref="{@id}">
+ <xsl:apply-templates select="*[2+$no_params]" mode="noannot"/>
+ <xsl:apply-templates select="*[3+$no_params]" mode="noannot"/>
+ </m:set>
+ </xsl:when>
+ <xsl:when test="(count(child::*) - number($no_params)) = 4">
+ <m:apply helm:xref="{@id}">
+ <m:in definitionURL="cic:/coq/SETS/Ensembles/Ensembles/In.con"/>
+ <xsl:apply-templates select="*[4+$no_params]" mode="noannot"/>
+ <m:set definitionURL="{MUTIND/@uri}">
+ <xsl:apply-templates select="*[2+$no_params]" mode="noannot"/>
+ <xsl:apply-templates select="*[3+$no_params]" mode="noannot"/>
+ </m:set>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- TRIPLE -->
+
+<xsl:template match="APPLY[MUTIND[attribute::uri='cic:/coq/SETS/Ensembles/Ensembles/Triple.ind'] and (count(child::*) = 5)]" mode="pure">
+ <xsl:variable name="no_params">
+ <xsl:call-template name="get_no_params">
+ <xsl:with-param name="first_uri" select="/cicxml/@uri"/>
+ <xsl:with-param name="second_uri" select="MUTIND/@uri"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="(count(child::*) - number($no_params)) = 4">
+ <m:set definitionURL="{MUTIND/@uri}" helm:xref="{@id}">
+ <xsl:apply-templates select="*[2+$no_params]" mode="noannot"/>
+ <xsl:apply-templates select="*[3+$no_params]" mode="noannot"/>
+ <xsl:apply-templates select="*[4+$no_params]" mode="noannot"/>
+ </m:set>
+ </xsl:when>
+ <xsl:when test="(count(child::*) - number($no_params)) = 5">
+ <m:apply helm:xref="{@id}">
+ <m:in definitionURL="cic:/coq/SETS/Ensembles/Ensembles/In.con"/>
+ <xsl:apply-templates select="*[5+$no_params]" mode="noannot"/>
+ <m:set definitionURL="{MUTIND/@uri}">
+ <xsl:apply-templates select="*[2+$no_params]" mode="noannot"/>
+ <xsl:apply-templates select="*[3+$no_params]" mode="noannot"/>
+ <xsl:apply-templates select="*[4+$no_params]" mode="noannot"/>
+ </m:set>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- INTERSECTION -->
+
+<xsl:template match="APPLY[MUTIND[attribute::uri='cic:/coq/SETS/Ensembles/Ensembles/Intersection.ind']]" mode="pure">
+ <xsl:variable name="no_params">
+ <xsl:call-template name="get_no_params">
+ <xsl:with-param name="first_uri" select="/cicxml/@uri"/>
+ <xsl:with-param name="second_uri" select="MUTIND/@uri"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="(count(child::*) - number($no_params)) = 3">
+ <m:apply helm:xref="{@id}">
+ <m:intersect definitionURL="{MUTIND/@uri}" helm:xref="{MUTIND/@id}"/>
+ <xsl:apply-templates select="*[2+$no_params]" mode="set"/>
+ <xsl:apply-templates select="*[3+$no_params]" mode="set"/>
+ </m:apply>
+ </xsl:when>
+ <xsl:when test="(count(child::*) - number($no_params)) = 4">
+ <m:apply helm:xref="{@id}">
+ <m:in/>
+ <xsl:apply-templates select="*[4+$no_params]" mode="noannot"/>
+ <m:apply>
+ <m:intersect definitionURL="{MUTIND/@uri}" helm:xref="{MUTIND/@id}"/>
+ <xsl:apply-templates select="*[2+$no_params]" mode="set"/>
+ <xsl:apply-templates select="*[3+$no_params]" mode="set"/>
+ </m:apply>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+
+<!-- UNION -->
+
+<xsl:template match="APPLY[MUTIND[attribute::uri='cic:/coq/SETS/Ensembles/Ensembles/Union.ind']]" mode="pure">
+ <xsl:variable name="no_params">
+ <xsl:call-template name="get_no_params">
+ <xsl:with-param name="first_uri" select="/cicxml/@uri"/>
+ <xsl:with-param name="second_uri" select="MUTIND/@uri"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="(count(child::*) - number($no_params)) = 3">
+ <m:apply helm:xref="{@id}">
+ <m:union definitionURL="{MUTIND/@uri}" helm:xref="{MUTIND/@id}"/>
+ <xsl:apply-templates select="*[2+$no_params]" mode="set"/>
+ <xsl:apply-templates select="*[3+$no_params]" mode="set"/>
+ </m:apply>
+ </xsl:when>
+ <xsl:when test="(count(child::*) - number($no_params)) = 4">
+ <m:apply helm:xref="{@id}">
+ <m:in/>
+ <xsl:apply-templates select="*[4+$no_params]" mode="noannot"/>
+ <m:apply>
+ <m:union definitionURL="{MUTIND/@uri}" helm:xref="{MUTIND/@id}"/>
+ <xsl:apply-templates select="*[2+$no_params]" mode="set"/>
+ <xsl:apply-templates select="*[3+$no_params]" mode="set"/>
+ </m:apply>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- INCLUDED -->
+
+<xsl:template match="APPLY[CONST[attribute::uri='cic:/coq/SETS/Ensembles/Ensembles/Included.con']]" mode="pure">
+ <xsl:variable name="no_params">
+ <xsl:call-template name="get_no_params">
+ <xsl:with-param name="first_uri" select="/cicxml/@uri"/>
+ <xsl:with-param name="second_uri" select="CONST/@uri"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="(count(child::*) - number($no_params)) = 3">
+ <m:apply helm:xref="{@id}">
+ <m:subset definitionURL="{CONST/@uri}" helm:xref="{CONST/@id}"/>
+ <xsl:apply-templates select="*[2+$no_params]" mode="set"/>
+ <xsl:apply-templates select="*[3+$no_params]" mode="set"/>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- STRICTLY INCLUDED -->
+
+<xsl:template match="APPLY[CONST[attribute::uri='cic:/coq/SETS/Ensembles/Ensembles/Strict_Included.con']]" mode="pure">
+ <xsl:variable name="no_params">
+ <xsl:call-template name="get_no_params">
+ <xsl:with-param name="first_uri" select="/cicxml/@uri"/>
+ <xsl:with-param name="second_uri" select="CONST/@uri"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="(count(child::*) - number($no_params)) = 3">
+ <m:apply helm:xref="{@id}">
+ <m:prsubset definitionURL="{CONST/@uri}" helm:xref="{CONST/@id}"/>
+ <xsl:apply-templates select="*[2+$no_params]" mode="set"/>
+ <xsl:apply-templates select="*[3+$no_params]" mode="set"/>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- SET-DIFF -->
+
+<xsl:template match="APPLY[CONST[attribute::uri='cic:/coq/SETS/Ensembles/Ensembles/Setminus.con']]" mode="pure">
+ <xsl:variable name="no_params">
+ <xsl:call-template name="get_no_params">
+ <xsl:with-param name="first_uri" select="/cicxml/@uri"/>
+ <xsl:with-param name="second_uri" select="CONST/@uri"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="(count(child::*) - number($no_params)) = 3">
+ <m:apply helm:xref="{@id}">
+ <m:setdiff definitionURL="{CONST/@uri}" helm:xref="{CONST/@id}"/>
+ <xsl:apply-templates select="*[2+$no_params]" mode="set"/>
+ <xsl:apply-templates select="*[3+$no_params]" mode="set"/>
+ </m:apply>
+ </xsl:when>
+ <xsl:when test="(count(child::*) - number($no_params)) = 4">
+ <m:apply helm:xref="{@id}">
+ <m:in/>
+ <xsl:apply-templates select="*[4+$no_params]" mode="noannot"/>
+ <m:apply>
+ <m:setdiff definitionURL="{CONST/@uri}" helm:xref="{CONST/@id}"/>
+ <xsl:apply-templates select="*[2+$no_params]" mode="set"/>
+ <xsl:apply-templates select="*[3+$no_params]" mode="set"/>
+ </m:apply>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- ADD-ELEM -->
+
+<xsl:template match="APPLY[CONST[attribute::uri='cic:/coq/SETS/Ensembles/Ensembles/Add.con']]" mode="pure">
+ <xsl:variable name="no_params">
+ <xsl:call-template name="get_no_params">
+ <xsl:with-param name="first_uri" select="/cicxml/@uri"/>
+ <xsl:with-param name="second_uri" select="CONST/@uri"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="(count(child::*) - number($no_params)) = 3">
+ <m:apply helm:xref="{@id}">
+ <m:union definitionURL="{CONST/@uri}" helm:xref="{CONST/@id}"/>
+ <xsl:apply-templates select="*[2+$no_params]" mode="set"/>
+ <m:set>
+ <xsl:apply-templates select="*[3+$no_params]" mode="noannot"/>
+ </m:set>
+ </m:apply>
+ </xsl:when>
+ <xsl:when test="(count(child::*) - number($no_params)) = 4">
+ <m:apply helm:xref="{@id}">
+ <m:in/>
+ <xsl:apply-templates select="*[4+$no_params]" mode="noannot"/>
+ <m:apply>
+ <m:union definitionURL="{CONST/@uri}" helm:xref="{CONST/@id}"/>
+ <xsl:apply-templates select="*[2+$no_params]" mode="set"/>
+ <m:set>
+ <xsl:apply-templates select="*[3+$no_params]" mode="noannot"/>
+ </m:set>
+ </m:apply>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- SUBTRACT-ELEM -->
+
+<xsl:template match="APPLY[CONST[attribute::uri='cic:/coq/SETS/Ensembles/Ensembles/Subtract.con']]" mode="pure">
+ <xsl:variable name="no_params">
+ <xsl:call-template name="get_no_params">
+ <xsl:with-param name="first_uri" select="/cicxml/@uri"/>
+ <xsl:with-param name="second_uri" select="CONST/@uri"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="(count(child::*) - number($no_params)) = 3">
+ <m:apply helm:xref="{@id}">
+ <m:setdiff definitionURL="{CONST/@uri}" helm:xref="{CONST/@id}"/>
+ <xsl:apply-templates select="*[2+$no_params]" mode="set"/>
+ <m:set>
+ <xsl:apply-templates select="*[3+$no_params]" mode="noannot"/>
+ </m:set>
+ </m:apply>
+ </xsl:when>
+ <xsl:when test="(count(child::*) - number($no_params)) = 4">
+ <m:apply helm:xref="{@id}">
+ <m:in/>
+ <xsl:apply-templates select="*[4+$no_params]" mode="noannot"/>
+ <m:apply>
+ <m:setdiff definitionURL="{CONST/@uri}" helm:xref="{CONST/@id}"/>
+ <xsl:apply-templates select="*[2+$no_params]" mode="set"/>
+ <m:set>
+ <xsl:apply-templates select="*[3+$no_params]" mode="noannot"/>
+ </m:set>
+ </m:apply>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- CARD -->
+
+<xsl:template match="APPLY[MUTIND[attribute::uri='cic:/coq/SETS/Finite_sets/Ensembles_finis/cardinal.ind']]" mode="pure">
+ <xsl:variable name="no_params">
+ <xsl:call-template name="get_no_params">
+ <xsl:with-param name="first_uri" select="/cicxml/@uri"/>
+ <xsl:with-param name="second_uri" select="MUTIND/@uri"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="(count(child::*) - number($no_params)) = 3">
+ <m:apply helm:xref="{@id}">
+ <m:eq/>
+ <m:apply>
+ <m:card definitionURL="{MUTIND/@uri}" helm:xref="{MUTIND/@id}"/>
+ <xsl:apply-templates select="*[2+$no_params]" mode="set"/>
+ </m:apply>
+ <xsl:apply-templates select="*[3+$no_params]" mode="noannot"/>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+</xsl:stylesheet>
--- /dev/null
+<?xml version="1.0"?>
+
+<!--***********************************************************************-->
+<!-- XSLT version 0.1 of annotated MathML content to MathML presentation: -->
+<!-- First draft: March 29 2000, Claudio Sacerdoti Coen, Irene Schena -->
+<!--***********************************************************************-->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:m="http://www.w3.org/1998/Math/MathML"
+ xmlns:helm="http://www.cs.unibo.it/helm">
+
+<xsl:import href="objcontent.xsl"/>
+
+<xsl:key name="id" use="@id" match="LAMBDA|PROD|CAST|REL|SORT|APPLY|VAR|META|CONST|MUTIND|MUTCONSTRUCT|MUTCASE|FIX|COFIX|Definition|Axiom|CurrentProof|InductiveDefinition|Variable"/>
+
+<xsl:key name="annid" use="@of" match="Annotation"/>
+
+<xsl:template match="Definition|Axiom|CurrentProof|InductiveDefinition|Variable">
+ <xsl:choose>
+ <xsl:when test="key('annid',@id)">
+ <annotation helm:xref="{@id}">
+ <xsl:apply-templates select="key('annid',@id)"/>
+ </annotation>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="." mode="noannot"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="LAMBDA|PROD|CAST|REL|SORT|APPLY|VAR|META|CONST|MUTIND|MUTCONSTRUCT|MUTCASE|FIX|COFIX">
+ <xsl:choose>
+ <xsl:when test="key('annid',@id)">
+ <annotation helm:xref="{@id}">
+ <xsl:apply-templates select="key('annid',@id)"/>
+ </annotation>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:math>
+ <xsl:apply-templates select="." mode="noannot"/>
+ </m:math>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="node">
+ <xsl:variable name="id" select="@id"/>
+ <xsl:apply-templates select="key('id',$id)"/>
+</xsl:template>
+
+<xsl:template match="attribute">
+ <xsl:variable name="id" select="@id"/>
+ <xsl:variable name="name" select="@name"/>
+ <xsl:variable name="child" select="@child"/>
+ <xsl:variable name="grandchild" select="@grandchild"/>
+ <xsl:choose>
+ <xsl:when test="$child">
+ <xsl:choose>
+ <xsl:when test="$grandchild">
+ <xsl:value-of select="key('id',$id)/*[position() = $child]/*[position() = $grandchild]/attribute::*[name() = $name]"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="key('id',$id)/*[position() = $child]/attribute::*[name() = $name]"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="key('id',$id)/attribute::*[name() = $name]"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+</xsl:stylesheet>
--- /dev/null
+<?xml version="1.0"?>
+
+<!--***********************************************************************-->
+<!-- XSLT version 0.1 of annotated MathML content to MathML presentation: -->
+<!-- First draft: March 29 2000, Claudio Sacerdoti Coen, Irene Schena -->
+<!--***********************************************************************-->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:m="http://www.w3.org/1998/Math/MathML"
+ xmlns:helm="http://www.cs.unibo.it/helm">
+
+<xsl:import href="mmlextension.xsl"/>
+
+<!-- ANNOTATION -->
+
+<xsl:template match="annotation">
+ <xsl:choose>
+ <xsl:when test=". = /">
+ <m:math><m:mrow helm:xref="{@helm:xref}"><xsl:apply-templates/></m:mrow></m:math>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mrow helm:xref="{@helm:xref}"><xsl:apply-templates/></m:mrow>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="text()">
+ <xsl:variable name="text" select="normalize-space(.)"/>
+ <xsl:if test="$text != ''">
+ <m:mtext><xsl:value-of select="$text"/></m:mtext>
+ </xsl:if>
+</xsl:template>
+
+</xsl:stylesheet>
--- /dev/null
+<?xml version="1.0"?>
+
+<!--******************************************************************-->
+<!-- Basic Logic -->
+<!-- First draft: April 3 2000 -->
+<!-- HELM Group: Asperti, Padovani, Sacerdoti, Schena -->
+<!--******************************************************************-->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:m="http://www.w3.org/1998/Math/MathML"
+ xmlns:helm="http://www.cs.unibo.it/helm">
+
+<!--******************************************************************-->
+<!-- Variable containing the absolute path of the CIC file -->
+<!--******************************************************************-->
+
+<xsl:variable name="absPath">http://localhost:8081/get?url=</xsl:variable>
+
+<!-- ************************* LOGIC *********************************-->
+
+<!-- AND -->
+
+<xsl:template match="APPLY[MUTIND[attribute::uri='cic:/coq/INIT/Logic/Conjunction/and.ind'] and (count(child::*) = 3)]" mode="noannot">
+ <m:apply helm:xref="{@id}">
+ <m:and definitionURL="{MUTIND/@uri}" helm:xref="{MUTIND/@id}"/>
+ <xsl:apply-templates select="*[2]" mode="noannot"/>
+ <xsl:apply-templates select="*[3]" mode="noannot"/>
+ </m:apply>
+</xsl:template>
+
+<!-- OR -->
+
+<xsl:template match="APPLY[MUTIND[attribute::uri='cic:/coq/INIT/Logic/Disjunction/or.ind'] and (count(child::*) = 3)]" mode="noannot">
+ <m:apply helm:xref="{@id}">
+ <m:or definitionURL="{MUTIND/@uri}" helm:xref="{MUTIND/@id}"/>
+ <xsl:apply-templates select="*[2]" mode="noannot"/>
+ <xsl:apply-templates select="*[3]" mode="noannot"/>
+ </m:apply>
+</xsl:template>
+
+<!-- NOT -->
+
+<xsl:template match="APPLY[CONST[attribute::uri='cic:/coq/INIT/Logic/not.con'] and (count(child::*) = 2)]" mode="noannot">
+ <m:apply helm:xref="{@id}">
+ <m:not definitionURL="{CONST/@uri}" helm:xref="{MUTIND/@id}"/>
+ <xsl:apply-templates select="*[2]" mode="noannot"/>
+ </m:apply>
+</xsl:template>
+
+<!-- IFF -->
+<!--
+<xsl:template match="APPLY[CONST[attribute::uri='cic:/coq/INIT/Logic/Equivalence/iff.ind'] and (count(child::*) = 3)]" mode="noannot">
+ <m:apply helm:xref="{@id}">
+ <m:iff definitionURL="{CONST/@uri}" helm:xref="{CONST/@id}"/>
+ <xsl:apply-templates select="*[2]" mode="noannot"/>
+ <xsl:apply-templates select="*[3]" mode="noannot"/>
+ </m:apply>
+</xsl:template>
+-->
+
+<!-- EXISTS -->
+
+<xsl:template match="APPLY[MUTIND[attribute::uri='cic:/coq/INIT/Logic/First_order_quantifiers/ex.ind' or attribute::uri='cic:/coq/INIT/Logic_Type/exT.ind'] and (count(child::*) = 3)]" mode="noannot">
+ <m:apply helm:xref="{@id}">
+ <m:exists definitionURL="{MUTIND/@uri}" helm:xref="{MUTIND/@id}"/>
+ <xsl:choose>
+ <xsl:when test="name(*[3]) = 'LAMBDA'">
+ <m:bvar>
+ <m:ci><xsl:value-of select="LAMBDA/target/@binder"/></m:ci>
+ </m:bvar>
+ <xsl:apply-templates select="LAMBDA/target" mode="noannot"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:bvar>
+ <m:ci>$x</m:ci>
+ </m:bvar>
+ <m:apply>
+ <m:csymbol>app</m:csymbol>
+ <xsl:apply-templates select="*[3]" mode="noannot"/>
+ <m:ci>$x</m:ci>
+ </m:apply>
+ </xsl:otherwise>
+ </xsl:choose>
+ </m:apply>
+</xsl:template>
+
+<xsl:template match="APPLY[MUTIND[attribute::uri='cic:/coq/INIT/Logic/First_order_quantifiers/ex2.ind' or attribute::uri='cic:/coq/INIT/Logic_Type/exT2.ind'] and (count(child::*) = 4)]" mode="noannot">
+ <m:apply helm:xref="{@id}">
+ <m:exists definitionURL="{MUTIND/@uri}" helm:xref="{MUTIND/@id}"/>
+ <xsl:choose>
+ <xsl:when test="name(*[3]) = 'LAMBDA'">
+ <xsl:variable name="bvarname" select="*[3]/target/@binder"/>
+ <m:bvar>
+ <m:ci><xsl:value-of select="$bvarname"/></m:ci>
+ </m:bvar>
+ <m:condition>
+ <xsl:apply-templates select="LAMBDA[1]/target" mode="noannot"/>
+ </m:condition>
+ <xsl:choose>
+ <xsl:when test="(name(*[4]) = 'LAMBDA') and
+ ($bvarname = *[4]/target/@binder)">
+ <xsl:apply-templates select="LAMBDA[2]/target" mode="noannot"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:apply>
+ <m:csymbol>app</m:csymbol>
+ <xsl:apply-templates select="*[4]" mode="noannot"/>
+ <m:ci><xsl:value-of select="$bvarname"/></m:ci>
+ </m:apply>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:choose>
+ <xsl:when test="name(*[4]) = 'LAMBDA'">
+ <xsl:variable name="bvarname" select="*[4]/target/@binder"/>
+ <m:bvar>
+ <m:ci><xsl:value-of select="$bvarname"/></m:ci>
+ </m:bvar>
+ <m:condition>
+ <m:apply>
+ <m:csymbol>app</m:csymbol>
+ <xsl:apply-templates select="*[3]" mode="noannot"/>
+ <m:ci><xsl:value-of select="$bvarname"/></m:ci>
+ </m:apply>
+ </m:condition>
+ <xsl:apply-templates select="*[4]/target" mode="noannot"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:bvar>
+ <m:ci>x</m:ci>
+ </m:bvar>
+ <m:condition>
+ <m:apply>
+ <m:csymbol>app</m:csymbol>
+ <xsl:apply-templates select="*[3]" mode="noannot"/>
+ <m:ci>x</m:ci>
+ </m:apply>
+ </m:condition>
+ <m:apply>
+ <m:csymbol>app</m:csymbol>
+ <xsl:apply-templates select="*[4]" mode="noannot"/>
+ <m:ci>x</m:ci>
+ </m:apply>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ </m:apply>
+</xsl:template>
+
+<!-- EQUALITY -->
+
+<xsl:template match="APPLY[MUTIND[attribute::uri='cic:/coq/INIT/Logic/Equality/eq.ind'] and (count(child::*) = 4)]" mode="noannot">
+ <m:apply helm:xref="{@id}">
+ <m:eq definitionURL="{MUTIND/@uri}" helm:xref="{MUTIND/@id}"/>
+ <xsl:apply-templates select="*[3]" mode="noannot"/>
+ <xsl:apply-templates select="*[4]" mode="noannot"/>
+ </m:apply>
+</xsl:template>
+
+
+<!-- TYPE EQUALITY -->
+
+<xsl:template match="APPLY[MUTIND[attribute::uri='cic:/coq/INIT/Logic_Type/eqT.ind'] and (count(child::*) = 4)]" mode="noannot">
+ <m:apply helm:xref="{@id}">
+ <m:eq definitionURL="{MUTIND/@uri}" helm:xref="{MUTIND/@id}"/>
+ <xsl:apply-templates select="*[3]" mode="noannot"/>
+ <xsl:apply-templates select="*[4]" mode="noannot"/>
+ </m:apply>
+</xsl:template>
+
+<!-- NOT-EQ -->
+<!-- NOT and EQ have no parameters -->
+<xsl:template match="APPLY[CONST[attribute::uri='cic:/coq/INIT/Logic/not.con']
+and (count(child::*) = 2) and APPLY[MUTIND[attribute::uri='cic:/coq/INIT/Logic/Equality/eq.ind']]]" mode="noannot">
+ <xsl:choose>
+ <xsl:when test="count(APPLY/child::*) = 4">
+ <m:apply helm:xref="{@id}">
+ <m:neq/>
+ <xsl:apply-templates select="*[2]/*[3]" mode="noannot"/>
+ <xsl:apply-templates select="*[2]/*[4]" mode="set"/>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- NOT-EQT -->
+<xsl:template match="APPLY[CONST[attribute::uri='cic:/coq/INIT/Logic/not.con']
+and (count(child::*) = 2) and APPLY[MUTIND[attribute::uri='cic:/coq/INIT/Logic_Type/eqT.ind']]]" mode="noannot">
+ <xsl:choose>
+ <xsl:when test="count(APPLY/child::*) = 4">
+ <m:apply helm:xref="{@id}">
+ <m:neq/>
+ <xsl:apply-templates select="*[2]/*[3]" mode="noannot"/>
+ <xsl:apply-templates select="*[2]/*[4]" mode="set"/>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- ************************ DATATYPES ******************************* -->
+
+<!-- no datatypes in MathML content -->
+
+
+<!-- *************************** PEANO ********************************* -->
+
+<xsl:template match="APPLY[MUTIND[attribute::uri='cic:/coq/INIT/Peano/le.ind'] and (count(child::*) = 3)]" mode="noannot">
+ <m:apply helm:xref="{@id}">
+ <m:leq definitionURL="{MUTIND/@uri}" helm:xref="{MUTIND/@id}"/>
+ <xsl:apply-templates select="*[2]" mode="noannot"/>
+ <xsl:apply-templates select="*[3]" mode="noannot"/>
+ </m:apply>
+</xsl:template>
+
+<xsl:template match="APPLY[CONST[attribute::uri='cic:/coq/INIT/Peano/lt.con'] and (count(child::*) = 3)]" mode="noannot">
+ <m:apply helm:xref="{@id}">
+ <m:lt definitionURL="{CONST/@uri}" helm:xref="{CONST/@id}"/>
+ <xsl:apply-templates select="*[2]" mode="noannot"/>
+ <xsl:apply-templates select="*[3]" mode="noannot"/>
+ </m:apply>
+</xsl:template>
+
+<xsl:template match="APPLY[CONST[attribute::uri='cic:/coq/INIT/Peano/ge.con'] and (count(child::*) = 3)]" mode="noannot">
+ <m:apply helm:xref="{@id}">
+ <m:geq definitionURL="{CONST/@uri}" helm:xref="{CONST/@id}"/>
+ <xsl:apply-templates select="*[2]" mode="noannot"/>
+ <xsl:apply-templates select="*[3]" mode="noannot"/>
+ </m:apply>
+</xsl:template>
+
+<xsl:template match="APPLY[CONST[attribute::uri='cic:/coq/INIT/Peano/gt.con'] and (count(child::*) = 3)]" mode="noannot">
+ <m:apply helm:xref="{@id}">
+ <m:gt definitionURL="{CONST/@uri}" helm:xref="{CONST/@id}"/>
+ <xsl:apply-templates select="*[2]" mode="noannot"/>
+ <xsl:apply-templates select="*[3]" mode="noannot"/>
+ </m:apply>
+</xsl:template>
+
+</xsl:stylesheet>
+
+
+
+
+
+
--- /dev/null
+<?xml version="1.0"?>
+
+<!--******************************************************************-->
+<!-- XSLT version 0.1 of CIC objects to MathML content: -->
+<!-- First draft: February 14 2000, Andrea Asperti, Irene Schena -->
+<!-- Revised: March 3 2000, Irene Schena -->
+<!-- Revised: March 10 2000, Irene Schena -->
+<!-- Revised: March 15 2000, Claudio Sacerdoti Coen, Irene Schena -->
+<!--******************************************************************-->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:m="http://www.w3.org/1998/Math/MathML"
+ xmlns:helm="http://www.cs.unibo.it/helm">
+
+<xsl:include href="params.xsl"/>
+
+<!--<xsl:output
+ method="xml"
+ version="1.0"
+ encoding="ISO-8859-1"
+ omit-xml-declaration="no"
+ standalone="no"
+ doctype-public="http://www.w3.org/TR/REC-MathML"
+ indent="yes"
+ media-type="text/mathml" /> -->
+
+<!-- DA FARE:
+1)risolvere nella fase di pre-processing le uri relative, settando l'attributo
+definitionURL dell'oggetto corrispondente (alcuni punteranno a nulla! -quelli
+che non hanno il file di definizione corrispondente-); [le uri assolute hanno
+la forma cic:/.../ in definitionURL e questo schema di uri verra' risolto da
+Amaya o da chi di dovere in /really_very_local/helm/PARSER/example/.../]
+2)aggiungere nei file xml gli ID, affinche' nello stylesheet si setti
+l'attributo xref di ogni oggetto per puntare (tramite ID) al suo corrispondente
+della rappresentazione interna.
+-->
+
+<!--******************************************************************-->
+<!-- Variable containing the absolute path of the CIC file -->
+<!--******************************************************************-->
+
+<xsl:variable name="absPath">http://localhost:8081/get?url=</xsl:variable>
+
+<!-- CIC TERMS -->
+
+<xsl:template match="LAMBDA" mode="noannot">
+ <m:lambda helm:xref="{@id}">
+ <m:bvar>
+ <m:ci>
+ <xsl:value-of select="target/@binder"/>
+ </m:ci>
+ <m:type>
+ <xsl:apply-templates select="source/*[1]" mode="noannot"/>
+ </m:type>
+ </m:bvar>
+ <xsl:apply-templates select="target/*[1]" mode="noannot"/>
+ </m:lambda>
+</xsl:template>
+
+<xsl:template match="PROD" mode="noannot">
+ <m:apply helm:xref="{@id}">
+ <xsl:choose>
+ <xsl:when test="string(target/@binder)= """>
+ <m:csymbol>arrow</m:csymbol>
+ <xsl:apply-templates select="source/*[1]" mode="noannot"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:csymbol>prod</m:csymbol>
+ <m:bvar>
+ <m:ci>
+ <xsl:value-of select="target/@binder"/>
+ </m:ci>
+ <m:type>
+ <xsl:apply-templates select="source/*[1]" mode="noannot"/>
+ </m:type>
+ </m:bvar>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:apply-templates select="target/*[1]" mode="noannot"/>
+ </m:apply>
+</xsl:template>
+
+<xsl:template match="CAST" mode="noannot">
+ <m:apply helm:xref="{@id}">
+ <m:csymbol>cast</m:csymbol>
+ <xsl:apply-templates mode="noannot" select="*/*"/>
+ </m:apply>
+</xsl:template>
+
+<xsl:template match="REL" mode="noannot">
+ <m:ci helm:xref="{@id}">
+ <xsl:value-of select="@binder"/>
+ </m:ci>
+</xsl:template>
+
+<xsl:template match="SORT" mode="noannot">
+ <m:apply helm:xref="{@id}">
+ <m:csymbol>
+ <xsl:value-of select="@value"/>
+ </m:csymbol>
+ </m:apply>
+</xsl:template>
+
+<xsl:template match="APPLY" mode="noannot">
+ <m:apply helm:xref="{@id}">
+ <m:csymbol>app</m:csymbol>
+ <xsl:apply-templates mode="noannot" select="*"/>
+ </m:apply>
+</xsl:template>
+
+<xsl:template match="VAR" mode="noannot">
+ <m:ci helm:xref="{@id}">
+ <xsl:value-of select="substring-after(@relUri,",")"/>
+ </m:ci>
+</xsl:template>
+
+<xsl:template match="META" mode="noannot">
+ <m:ci helm:xref="{@id}">
+ <xsl:value-of select="@no"/>
+ </m:ci>
+</xsl:template>
+
+<xsl:template match="CONST" mode="noannot">
+ <m:ci definitionURL="{@uri}" helm:xref="{@id}">
+ <xsl:call-template name="name_of_uri">
+ <xsl:with-param name="uri" select="@uri"/>
+ </xsl:call-template>
+ <!-- <xsl:value-of select="document(concat(string($absPath),@uri))/*/@name"/> -->
+ </m:ci>
+</xsl:template>
+
+<xsl:template match="MUTIND" mode="noannot">
+ <m:ci definitionURL="{@uri}" helm:xref="{@id}">
+ <xsl:variable name="index"><xsl:value-of select="@noType"/></xsl:variable>
+ <xsl:value-of select="document(concat(string($absPath),@uri))/InductiveDefinition/InductiveType[position()=number($index)+1]/@name"/>
+ </m:ci>
+</xsl:template>
+
+<xsl:template match="MUTCONSTRUCT" mode="noannot">
+ <m:ci definitionURL="{@uri}" helm:xref="{@id}">
+ <xsl:variable name="Tindex"><xsl:value-of select="@noType"/></xsl:variable>
+ <xsl:variable name="Cindex"><xsl:value-of select="@noConstr"/></xsl:variable>
+ <xsl:value-of select="document(concat(string($absPath),@uri))/InductiveDefinition/InductiveType[position()=number($Tindex)+1]/Constructor[position()=number($Cindex)]/@name"/>
+ </m:ci>
+</xsl:template>
+
+<xsl:template match="MUTCASE" mode="noannot">
+ <xsl:variable name="Tindex"><xsl:value-of select="@noType"/></xsl:variable>
+ <xsl:variable name="Turi"><xsl:value-of select="@uriType"/></xsl:variable>
+ <m:apply helm:xref="{@id}">
+ <m:csymbol>mutcase</m:csymbol>
+ <xsl:apply-templates select="patternsType/*[1]" mode="noannot"/>
+ <xsl:apply-templates select="inductiveTerm/*[1]" mode="noannot"/>
+ <xsl:variable name="nop"><xsl:value-of select="document(concat(string($absPath),$Turi))/InductiveDefinition/@noParams"/></xsl:variable>
+ <xsl:for-each select="pattern">
+ <xsl:variable name="pos" select="position()"/>
+ <xsl:variable name="nopar"><xsl:apply-templates select="document(concat(string($absPath),$Turi))/InductiveDefinition/InductiveType[position()=number($Tindex)+1]/Constructor[position()=number($pos)]/*[1]" mode="counting"><xsl:with-param name="noparams" select="$nop"/></xsl:apply-templates></xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$nopar = 0">
+ <m:ci>
+ <xsl:value-of select="document(concat(string($absPath),$Turi))/InductiveDefinition/InductiveType[position()=number($Tindex)+1]/Constructor[position()=number($pos)]/@name"/>
+ </m:ci>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:apply>
+ <m:csymbol>app</m:csymbol>
+ <m:ci>
+ <xsl:value-of select="document(concat(string($absPath),$Turi))/InductiveDefinition/InductiveType[position()=number($Tindex)+1]/Constructor[position()=number($pos)]/@name"/>
+ </m:ci>
+ <xsl:apply-templates select="./*[1]" mode="abstparams"><xsl:with-param name="noparams" select="$nopar"/><xsl:with-param name="binder">LAMBDA</xsl:with-param></xsl:apply-templates>
+ </m:apply>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:apply-templates select="./*[1]" mode="abstparams"><xsl:with-param name="noparams" select="$nopar"/><xsl:with-param name="target" select="1"/><xsl:with-param name="binder">LAMBDA</xsl:with-param></xsl:apply-templates>
+ </xsl:for-each>
+ </m:apply>
+</xsl:template>
+
+<xsl:template match="FIX" mode="noannot">
+ <m:apply helm:xref="{@id}">
+ <xsl:variable name="findex"><xsl:value-of select="@noFun"/></xsl:variable>
+ <m:csymbol>fix</m:csymbol>
+ <m:ci><xsl:value-of select="FixFunction[position()=number($findex)+1]/@name"/></m:ci>
+ <xsl:apply-templates mode="noannot" select="*"/>
+ </m:apply>
+</xsl:template>
+
+<xsl:template match="COFIX" mode="noannot">
+ <m:apply helm:xref="{@id}">
+ <xsl:variable name="findex"><xsl:value-of select="@noFun"/></xsl:variable>
+ <m:csymbol>cofix</m:csymbol>
+ <m:ci><xsl:value-of select="CofixFunction[position()=number($findex)+1]/@name"/></m:ci>
+ <xsl:apply-templates mode="noannot" select="*"/>
+ </m:apply>
+</xsl:template>
+
+<!-- ELEMENTS OF CIC TERMS -->
+
+<xsl:template match="FixFunction" mode="noannot">
+ <m:bvar>
+ <m:ci><xsl:value-of select="@name"/></m:ci>
+ <m:type><xsl:apply-templates select="type/*[1]" mode="noannot"/></m:type>
+ </m:bvar>
+ <xsl:apply-templates select="body/*[1]" mode="noannot"/>
+</xsl:template>
+
+<xsl:template match="CofixFunction" mode="noannot">
+ <m:bvar>
+ <m:ci><xsl:value-of select="@name"/></m:ci>
+ <m:type><xsl:apply-templates select="type/*[1]" mode="noannot"/></m:type>
+ </m:bvar>
+ <xsl:apply-templates select="body/*[1]" mode="noannot"/>
+</xsl:template>
+
+</xsl:stylesheet>
--- /dev/null
+<?xml version="1.0"?>
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:m="http://www.w3.org/1998/Math/MathML">
+
+<!--***********************************************************************-->
+<!-- From MathML content to HTML -->
+<!-- HELM Group: Asperti, Padovani, Sacerdoti, Schena -->
+<!--***********************************************************************-->
+
+
+<xsl:include href="html_init.xsl"/>
+<xsl:include href="html_set.xsl"/>
+<xsl:include href="html_reals.xsl"/>
+
+
+<!-- <xsl:variable name="absPath">http://localhost:8081/get?url=</xsl:variable>-->
+<xsl:variable name="header" select="document('http://localhost:8081/conf')/html_link"/>
+
+<xsl:variable name="showcast" select="0"/>
+
+
+<!--***********************************************************************-->
+<!-- HTML Head and Body -->
+<!--***********************************************************************-->
+
+<xsl:output method="html"/>
+
+<xsl:variable name="framewidth" select="36"/>
+
+<xsl:template match="/">
+ <xsl:param name="current_indent" select="0"/>
+ <html>
+ <head></head>
+ <body>
+ <xsl:apply-templates>
+ <xsl:with-param name="current_indent" select="0"/>
+ </xsl:apply-templates>
+ </body>
+ </html>
+</xsl:template>
+
+<!--***********************************************************************-->
+<!-- Indentation -->
+<!--***********************************************************************-->
+
+<xsl:template name="make_indent">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:if test="$current_indent > 0">
+ <xsl:text> </xsl:text>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent - 1"/>
+ </xsl:call-template>
+ </xsl:if>
+</xsl:template>
+
+<!-- Syntactic Sugar -->
+
+<xsl:template match="m:type">
+<xsl:param name="current_indent" select="0"/>
+<xsl:apply-templates>
+ <xsl:with-param name="current_indent"
+ select="$current_indent"/>
+</xsl:apply-templates>
+</xsl:template>
+
+<xsl:template match="m:condition">
+<xsl:param name="current_indent" select="0"/>
+<xsl:apply-templates>
+ <xsl:with-param name="current_indent"
+ select="$current_indent"/>
+</xsl:apply-templates>
+</xsl:template>
+
+<xsl:template match="m:math">
+<xsl:param name="current_indent" select="0"/>
+<xsl:apply-templates>
+ <xsl:with-param name="current_indent"
+ select="$current_indent"/>
+</xsl:apply-templates>
+</xsl:template>
+
+<!-- CSYMBOL -->
+
+<xsl:template match="m:apply[m:csymbol]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="name">
+ <xsl:value-of select="m:csymbol"/>
+ </xsl:variable>
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="m:csymbol" mode="charcount"/>
+ </xsl:variable>
+ <!-- <xsl:value-of select="$current_indent"/> -->
+ <!-- <xsl:value-of select="$charlength"/> -->
+ <xsl:choose>
+ <xsl:when test="$name='prod'">
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <!-- Π -->
+ <FONT FACE="symbol" SIZE="+2" color="blue">P</FONT>
+ <xsl:apply-templates select="m:bvar/m:ci"/>
+ <xsl:text>:</xsl:text>
+ <xsl:apply-templates select="m:bvar/m:type">
+ <xsl:with-param name="current_indent"
+ select="$current_indent + 2 + string-length(m:bvar/m:ci)"/>
+ </xsl:apply-templates><BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <xsl:text>.</xsl:text>
+ <xsl:apply-templates select="*[position()=3]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- Π -->
+ <FONT FACE="symbol" SIZE="+2" color="blue">P</FONT>
+ <xsl:apply-templates select="m:bvar/m:ci"/>
+ <xsl:text>:</xsl:text>
+ <xsl:apply-templates select="m:bvar/m:type"/>
+ <xsl:text>.</xsl:text>
+ <xsl:apply-templates select="*[position()=3]"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:when test="$name='arrow'">
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[position()=2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <!-- -> -->
+ <FONT FACE="symbol" SIZE="+2" color="blue">®</FONT>
+ <xsl:apply-templates select="*[position()=3]">
+ <xsl:with-param name="current_indent" select="$current_indent + 5"/>
+ </xsl:apply-templates>
+ <xsl:text>)</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[position()=2]"/>
+ <!-- -> -->
+ <FONT FACE="symbol" SIZE="+2" color="blue">®</FONT>
+ <xsl:apply-templates select="*[position()=3]"/>
+ <xsl:text>)</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:when test="$name='app'">
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[position()=2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <xsl:for-each select="*[position()>2]">
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <xsl:apply-templates select=".">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ </xsl:for-each>
+ <xsl:text>)</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[position()=2]"/>
+ <xsl:for-each select="*[position()>2]">
+ <xsl:text> </xsl:text>
+ <xsl:apply-templates select="."/>
+ </xsl:for-each>
+ <xsl:text>)</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:when test="$name='cast'">
+ <xsl:choose>
+ <xsl:when test="$showcast = 1">
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[position()=2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates><BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/> </xsl:call-template>
+ <xsl:text>:></xsl:text>
+ <xsl:apply-templates select="*[position()=3]">
+ <xsl:with-param name="current_indent" select="$current_indent + 3"/>
+ </xsl:apply-templates>
+ <xsl:text>)</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[position()=2]"/>
+ <xsl:text>:></xsl:text>
+ <xsl:apply-templates select="*[position()=3]"/>
+ <xsl:text>)</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="*[position()=2]">
+ <xsl:with-param name="current_indent" select="$current_indent"/>
+ </xsl:apply-templates>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:when test="$name='Prop'">
+ <xsl:text>Prop</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name='Set'">
+ <xsl:text>Set</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name='Type'">
+ <xsl:text>Type</xsl:text>
+ </xsl:when>
+ <xsl:when test="$name='mutcase'">
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <xsl:text><</xsl:text>
+ <xsl:apply-templates select="*[position()=2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <xsl:text>> </xsl:text>
+ <xsl:text>CASE </xsl:text>
+ <xsl:apply-templates select="*[position()=3]">
+ <xsl:with-param name="current_indent" select="$current_indent + 8"/>
+ </xsl:apply-templates>
+ <xsl:text> OF </xsl:text>
+ <xsl:for-each select="*[position() mod 2 = 0 and position()>3]">
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <xsl:choose>
+ <xsl:when test="position() = 1">
+ <xsl:text>  </xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>| </xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:apply-templates select="."/>
+ <FONT FACE="symbol" SIZE="+2" color="green">Þ</FONT>
+ <xsl:apply-templates select="following-sibling::*[position()= 1]">
+ <xsl:with-param name="current_indent" select="$current_indent + 4 + string-length()"/>
+ </xsl:apply-templates>
+ </xsl:for-each>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text><</xsl:text>
+ <xsl:apply-templates select="*[position()=2]"/>
+ <xsl:text>> </xsl:text>
+ <xsl:text>CASE </xsl:text>
+ <xsl:apply-templates select="*[position()=3]"/>
+ <xsl:text> OF </xsl:text>
+ <xsl:for-each select="*[position() mod 2 = 0 and position()>3]">
+ <xsl:choose>
+ <xsl:when test="not(position() = 1)">
+ <xsl:text> | </xsl:text>
+ </xsl:when>
+ </xsl:choose>
+ <xsl:apply-templates select="."/>
+ <FONT FACE="symbol" SIZE="+2" color="green">Þ</FONT>
+ <xsl:apply-templates select="following-sibling::*[position()= 1]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2 + string-length()"/>
+ </xsl:apply-templates>
+ </xsl:for-each>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:when test="$name='fix'">
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <xsl:text>FIX</xsl:text>
+ <xsl:value-of select="m:ci"/>
+ <xsl:text>{</xsl:text>
+ <xsl:for-each select="m:bvar">
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <xsl:value-of select="m:ci"/>
+ <xsl:text>:</xsl:text>
+ <xsl:apply-templates select="m:type">
+ <xsl:with-param name="current_indent"
+ select="$current_indent + 5 + string-length(m:ci)"/>
+ </xsl:apply-templates>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <xsl:text>:=</xsl:text>
+ <xsl:apply-templates select="following-sibling::*[position() = 1]">
+ <xsl:with-param name="current_indent" select="$current_indent +2"/>
+ </xsl:apply-templates>
+ </xsl:for-each>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <xsl:text>}</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>FIX</xsl:text>
+ <xsl:value-of select="m:ci"/>
+ <xsl:text>{</xsl:text>
+ <xsl:for-each select="m:bvar">
+ <xsl:value-of select="m:ci"/>
+ <xsl:text>:</xsl:text>
+ <xsl:apply-templates select="m:type"/>
+ <xsl:text>:=</xsl:text>
+ <xsl:apply-templates select="following-sibling::*[position() = 1]"/>
+ <xsl:choose>
+ <xsl:when test="position()=last()">
+ <xsl:text>}</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:when test="$name='cofix'">
+ <xsl:choose>
+ <xsl:when test="($charlength + 10) > $framewidth">
+ <xsl:text>COFIX</xsl:text>
+ <xsl:value-of select="m:ci"/>
+ <xsl:text>{</xsl:text>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <xsl:for-each select="m:bvar">
+ <xsl:value-of select="m:ci"/>
+ <xsl:text>:</xsl:text>
+ <xsl:apply-templates select="m:type">
+ <xsl:with-param name="current_indent"
+ select="$current_indent + 5 + string-length(m:ci)"/>
+ </xsl:apply-templates>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <xsl:text>:=</xsl:text>
+ <xsl:apply-templates select="following-sibling::*[position() = 1]">
+ <xsl:with-param name="current_indent" select="$current_indent + 3"/>
+ </xsl:apply-templates>
+
+ </xsl:for-each>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <xsl:text>}</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>COFIX</xsl:text>
+ <xsl:value-of select="m:ci"/>
+ <xsl:text>{</xsl:text>
+ <xsl:for-each select="m:bvar">
+ <xsl:value-of select="m:ci"/>
+ <xsl:text>:</xsl:text>
+ <xsl:apply-templates select="m:type"/>
+ <xsl:text>:=</xsl:text>
+ <xsl:apply-templates select="following-sibling::*[position() = 1]"/>
+ <xsl:choose>
+ <xsl:when test="position()=last()">
+ <xsl:text>}</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ </xsl:choose>
+ <!-- </m:mrow> -->
+</xsl:template>
+
+<!-- LAMBDA -->
+
+<xsl:template match="m:lambda">
+<xsl:param name="current_indent" select="0"/>
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="*[position()=1]" mode="charcount"/>
+ <!-- <xsl:apply-templates select="." mode="charcount"/> -->
+ </xsl:variable>
+ <!-- <xsl:value-of select="$charlength"/> -->
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <!-- λ -->
+ <FONT FACE="symbol" SIZE="+2" color="red">l</FONT>
+ <xsl:apply-templates select="m:bvar/m:ci"/>
+ <xsl:text>:</xsl:text>
+ <xsl:apply-templates select="m:bvar/m:type">
+ <xsl:with-param name="current_indent"
+ select="$current_indent + 2 + string-length(m:bvar/m:ci)"/>
+ </xsl:apply-templates><BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <xsl:text>.</xsl:text>
+ <xsl:apply-templates select="*[position()=2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- λ -->
+ <FONT FACE="symbol" SIZE="+2" color="red">l</FONT>
+ <xsl:apply-templates select="m:bvar/m:ci"/>
+ <xsl:text>:</xsl:text>
+ <xsl:apply-templates select="m:bvar/m:type"/>
+ <xsl:text>.</xsl:text>
+ <xsl:apply-templates select="*[position()=2]"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- href -->
+<xsl:template match="m:ci">
+ <xsl:choose>
+ <xsl:when test="boolean(@definitionURL)">
+<!-- CSC: non bisogna piu' utilizzare la url, bensi' la uri -->
+<!-- <xsl:variable name="url">
+ <xsl:value-of select="concat(string($absPath),
+ @definitionURL)"/>
+ </xsl:variable>-->
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string(@definitionURL))"/>
+ </xsl:attribute>
+ <xsl:apply-templates/>
+ </a>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="."/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- COUNTING -->
+
+<xsl:template match="m:ci|m:csymbol" mode="charcount">
+<xsl:param name="incurrent_length" select="0"/>
+ <xsl:choose>
+ <xsl:when test="$framewidth >= ($incurrent_length + string-length())">
+ <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>
+ <xsl:choose>
+ <xsl:when test="string($siblength) = """>
+ <xsl:value-of select="$incurrent_length + string-length()"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="number($siblength)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$incurrent_length + string-length()"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="*" mode="charcount">
+ <xsl:param name="incurrent_length" select="0"/>
+ <xsl:choose>
+ <xsl:when test="count(child::*) = 0">
+ <xsl:value-of select="$incurrent_length"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:variable name="childlength"><xsl:apply-templates select="*[position()=1]" mode="charcount"><xsl:with-param name="incurrent_length" select="$incurrent_length"/></xsl:apply-templates></xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$framewidth >= number($childlength)">
+ <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>
+ <xsl:choose>
+ <xsl:when test="string($siblength) = """>
+ <xsl:value-of select="number($childlength)"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="number($siblength)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="number($childlength)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+
+<!--***********************************************************************-->
+<!-- OBJECTS -->
+<!--***********************************************************************-->
+
+<!-- DEFINITION -->
+
+<xsl:template match="Definition">
+<xsl:param name="current_indent" select="0"/>
+<p>
+DEFINITION <xsl:value-of select="@name"/>(<xsl:if test="string(./Params) != """><xsl:value-of select="Params"/></xsl:if>)<BR/>
+TYPE =<BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 7"/>
+ </xsl:call-template>
+ <xsl:apply-templates select="type/*[1]">
+ <xsl:with-param name="current_indent" select="$current_indent + 7"/>
+ </xsl:apply-templates><BR/>
+BODY =<BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 7"/>
+ </xsl:call-template>
+ <xsl:apply-templates select="body/*[1]">
+ <xsl:with-param name="current_indent" select="$current_indent + 7"/>
+ </xsl:apply-templates>
+</p>
+</xsl:template>
+
+<!-- AXIOM -->
+
+<xsl:template match="Axiom">
+<xsl:param name="current_indent" select="0"/>
+<p>
+AXIOM <xsl:value-of select="@name"/>(<xsl:if test="string(./Params) != """><xsl:value-of select="Params"/></xsl:if>)<BR/>
+TYPE = <xsl:apply-templates select="type/*[1]">
+ <xsl:with-param name="current_indent" select="$current_indent + 7"/>
+ </xsl:apply-templates>
+</p>
+</xsl:template>
+
+<!-- UNFINISHED PROOF -->
+
+<xsl:template match="CurrentProof">
+<xsl:param name="current_indent" select="0"/>
+<p>
+UNFINISHED PROOF <xsl:value-of select="@name"/>(<xsl:if test="string(./Params) != """><xsl:value-of select="Params"/></xsl:if>)<BR/>
+THESIS: <xsl:apply-templates select="type/*[1]">
+ <xsl:with-param name="current_indent" select="$current_indent + 8"/>
+ </xsl:apply-templates><BR/>
+CONJECTURES:
+ <xsl:for-each select="Conjecture">
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 8"/>
+ </xsl:call-template>
+ <xsl:value-of select="./@no"/> :
+ <xsl:apply-templates select="./*[1]">
+ <xsl:with-param name="current_indent" select="$current_indent + 11"/>
+ </xsl:apply-templates>
+ </xsl:for-each>
+ <BR/>
+PROOF:
+ <xsl:apply-templates select="body/*[1]">
+ <xsl:with-param name="current_indent" select="$current_indent + 8"/>
+ </xsl:apply-templates>
+</p>
+</xsl:template>
+
+<!-- MUTUAL INDUCTIVE DEFINITION -->
+
+<xsl:template match="InductiveDefinition">
+<xsl:param name="current_indent" select="0"/>
+<p>
+ <xsl:for-each select="InductiveType">
+ <xsl:choose>
+ <xsl:when test="position() = 1">
+ <xsl:choose>
+ <xsl:when test="string(./@inductive) = "true"">
+ INDUCTIVE DEFINITION
+ </xsl:when>
+ <xsl:otherwise>
+ COINDUCTIVE DEFINITION
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ AND
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:value-of select="./@name"/>(<xsl:if test="string(../Params) != """><xsl:value-of select="../Params"/></xsl:if>)
+ [
+ <xsl:if test="string(../Param) != """>
+ <xsl:for-each select="../Param">
+ <xsl:value-of select="./@name"/>
+ :
+ <xsl:apply-templates select="*"/>
+ </xsl:for-each>
+ </xsl:if>
+ ] <BR/>
+ OF ARITY
+ <xsl:apply-templates select="./arity/*[1]">
+ <xsl:with-param name="current_indent" select="$current_indent + 9"/>
+ </xsl:apply-templates> <BR/>
+ BUILT FROM:
+ <xsl:for-each select="./Constructor">
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 3"/>
+ </xsl:call-template>
+ <xsl:choose>
+ <xsl:when test="position() = 1">
+ <xsl:text>  </xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>| </xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:value-of select="./@name"/>
+ <xsl:text>: </xsl:text>
+ <xsl:apply-templates select="./*[1]">
+ <xsl:with-param name="current_indent" select="$current_indent + string-length(./@name) + 4"/>
+ </xsl:apply-templates>
+ </xsl:for-each>
+ </xsl:for-each>
+</p>
+</xsl:template>
+
+<!-- VARIABLE -->
+
+<xsl:template match="Variable">
+<xsl:param name="current_indent" select="0"/>
+<p>
+VARIABLE <xsl:value-of select="@name"/><BR/>
+TYPE = <xsl:apply-templates select="type/*[1]">
+ <xsl:with-param name="current_indent" select="$current_indent + 7"/>
+ </xsl:apply-templates>
+</p>
+</xsl:template>
+
+<!--***********************************************************************-->
+<!-- SECTIONS -->
+<!--***********************************************************************-->
+
+<!-- SECTION -->
+
+<xsl:template match="SECTION">
+<xsl:param name="current_indent" select="0"/>
+ <h1>BEGIN OF SECTION</h1>
+ <xsl:apply-templates/>
+ <h1>END OF SECTION</h1>
+</xsl:template>
+
+</xsl:stylesheet>
--- /dev/null
+<?xml version="1.0"?>
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:m="http://www.w3.org/1998/Math/MathML">
+
+<!--***********************************************************************-->
+<!-- INIT style for HTML -->
+<!-- HELM Group: Asperti, Padovani, Sacerdoti, Schena -->
+<!--***********************************************************************-->
+
+<xsl:variable name="absPath">http://localhost:8081/get?url=</xsl:variable>
+
+
+<!-- BASIC OPERATORS -->
+
+ <xsl:template match="m:apply[m:and|m:or|m:eq|m:neq|m:leq|m:lt
+ |m:geq|m:gt|m:plus|m:times]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="*[1]/@definitionURL"/>
+ </xsl:variable>
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="*[1]" mode="charcount"/>
+ </xsl:variable>
+ <xsl:variable name="symbol">
+ <xsl:choose>
+ <xsl:when test="m:and">
+ <xsl:value-of select="'Ù'"/>
+ </xsl:when>
+ <xsl:when test="m:or">
+ <xsl:value-of select="'Ú'"/>
+ </xsl:when>
+ <xsl:when test="m:eq">
+ <xsl:value-of select="'='"/>
+ </xsl:when>
+ <xsl:when test="m:neq">
+ <xsl:value-of select="'¹'"/>
+ </xsl:when>
+ <xsl:when test="m:leq">
+ <xsl:value-of select="'£'"/>
+ </xsl:when>
+ <xsl:when test="m:lt">
+ <xsl:value-of select="'<'"/>
+ </xsl:when>
+ <xsl:when test="m:geq">
+ <xsl:value-of select="'³'"/>
+ </xsl:when>
+ <xsl:when test="m:gt">
+ <xsl:value-of select="'>'"/>
+ </xsl:when>
+ <xsl:when test="m:plus">
+ <xsl:value-of select="'+'"/>
+ </xsl:when>
+ <xsl:when test="m:times">
+ <xsl:value-of select="'*'"/>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <FONT FACE="symbol" color="blue">
+ <xsl:value-of select="$symbol"/>
+ </FONT>
+ </a>
+ <xsl:apply-templates select="*[3]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <xsl:text>)</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[2]"/>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <FONT FACE="symbol" color="blue">
+ <xsl:value-of select="$symbol"/>
+ </FONT>
+ </a>
+ <xsl:apply-templates select="*[3]"/>
+ <xsl:text>)</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+<!-- MINUS (can be unary!) -->
+
+<xsl:template match="m:apply[m:minus]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="*[1]/@definitionURL"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="count(child::*)=2">
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <xsl:text>-</xsl:text>
+ </a>
+ <xsl:apply-templates select="*[2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 1"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="*[1]" mode="charcount"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <xsl:text>-</xsl:text>
+ </a>
+ <xsl:apply-templates select="*[3]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <xsl:text>)</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[2]"/>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <xsl:text>-</xsl:text>
+ </a>
+ <xsl:apply-templates select="*[3]"/>
+ <xsl:text>)</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+<!-- NOT -->
+
+ <xsl:template match="m:apply[m:not]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="m:not/@definitionURL"/>
+ </xsl:variable>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <FONT FACE="symbol" color="blue">Ø</FONT>
+ </a>
+ <xsl:apply-templates select="*[2]"/>
+ </xsl:template>
+
+<!-- EXISTS -->
+
+ <xsl:template match="m:apply[m:exists]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="m:exists/@definitionURL"/>
+ </xsl:variable>
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="m:exists" mode="charcount"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <FONT FACE="symbol" color="blue">$</FONT>
+ </a>
+ <xsl:apply-templates select="m:bvar/m:ci"/>
+ <xsl:text>:</xsl:text>
+ <xsl:apply-templates select="m:condition">
+ <xsl:with-param name="current_indent" select="$current_indent + 2 +
+ string-length(bvar/ci)"/>
+ </xsl:apply-templates>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <xsl:text>.</xsl:text>
+ <xsl:apply-templates select="*[last()]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <FONT FACE="symbol" color="blue">$</FONT>
+ </a>
+ <xsl:apply-templates select="m:bvar/m:ci"/>
+ <xsl:text>:</xsl:text>
+ <xsl:apply-templates select="m:condition"/>
+ <xsl:text>.</xsl:text>
+ <xsl:apply-templates select="*[last()]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+
+
+
+<!-- COUNTING -->
+
+<xsl:template match="m:cn|m:and|m:or|m:not|m:exists|m:eq|m:neq
+ |m:lt|m:leq|m:gt|m:geq|m:plus|m:minus|m:times" mode="charcount">
+<xsl:param name="incurrent_length" select="0"/>
+ <xsl:choose>
+ <xsl:when test="$framewidth >= ($incurrent_length + string-length())">
+ <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>
+ <xsl:choose>
+ <xsl:when test="string($siblength) = """>
+ <xsl:value-of select="$incurrent_length + string-length()"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="number($siblength)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$incurrent_length + string-length()"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+</xsl:stylesheet>
+
+
--- /dev/null
+<?xml version="1.0"?>
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:m="http://www.w3.org/1998/Math/MathML">
+
+<!--***********************************************************************-->
+<!-- INIT style for HTML -->
+<!-- HELM Group: Asperti, Padovani, Sacerdoti, Schena -->
+<!--***********************************************************************-->
+
+<xsl:variable name="absPath">http://localhost:8081/get?url=</xsl:variable>
+
+<!-- LIMIT -->
+
+<xsl:template match="m:apply[m:limit]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="m:limit/@definitionURL"/>
+ </xsl:variable>
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="m:limit" mode="charcount"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <xsl:text>lim</xsl:text>
+ </a>
+ <SUB>
+ <xsl:apply-templates select="m:bvar/m:ci"/>
+ <FONT FACE="symbol" color="blue">®</FONT>
+ <xsl:apply-templates select="m:lowlimit"/>
+ </SUB>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 5"/>
+ </xsl:call-template>
+ <xsl:apply-templates select="*[4]">
+ <xsl:with-param name="current_indent" select="$current_indent + 5"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <xsl:text>lim</xsl:text>
+ </a>
+ <SUB>
+ <xsl:apply-templates select="m:bvar/m:ci"/>
+ <FONT FACE="symbol" color="blue">®</FONT>
+ <xsl:apply-templates select="m:lowlimit"/>
+ </SUB>
+ <xsl:apply-templates select="*[4]">
+ <xsl:with-param name="current_indent" select="$current_indent + 5"/>
+ </xsl:apply-templates>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+<!-- DIFFERENTIATION -->
+
+<xsl:template match="m:apply[m:diff]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="m:diff/@definitionURL"/>
+ </xsl:variable>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <SUP>d</SUP>
+ <xsl:text>/</xsl:text>
+ <SUB>
+ <xsl:text>d</xsl:text>
+ <xsl:value-of select="m:bvar/m:ci"/>
+ </SUB>
+ </a>
+ <xsl:apply-templates select="*[3]">
+ <xsl:with-param name="current_indent" select="$current_indent + 5"/>
+ </xsl:apply-templates>
+ </xsl:template>
+
+<!-- ABSOLUTE VALUE -->
+<xsl:template match="m:apply[m:abs]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="m:abs/@definitionURL"/>
+ </xsl:variable>
+ <xsl:text>|</xsl:text>
+ <xsl:apply-templates select="*[2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <xsl:text>|</xsl:text>
+ </xsl:template>
+
+<!-- FACTORIAL -->
+
+<xsl:template match="m:apply[m:fact]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="m:abs/@definitionURL"/>
+ </xsl:variable>
+ <xsl:apply-templates select="*[2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <xsl:text>!</xsl:text>
+ </xsl:template>
+
+<!-- SQUARE ROOT -->
+
+<xsl:template match="m:apply[m:root]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="m:abs/@definitionURL"/>
+ </xsl:variable>
+ <xsl:text>(sqr</xsl:text>
+ <xsl:apply-templates select="*[2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 5"/>
+ </xsl:apply-templates>
+ <xsl:text>)</xsl:text>
+ </xsl:template>
+
+<!-- POWER -->
+
+<xsl:template match="m:apply[m:power]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="m:power/@definitionURL"/>
+ </xsl:variable>
+ <xsl:apply-templates select="*[2]"/>
+ <SUP>
+ <xsl:apply-templates select="*[3]"/>
+ </SUP>
+ </xsl:template>
+
+<!-- MIN and MAX (binari: estendere) -->
+
+ <xsl:template match="m:apply[m:min|m:max]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="*[1]/@definitionURL"/>
+ </xsl:variable>
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="*[1]" mode="charcount"/>
+ </xsl:variable>
+ <xsl:variable name="symbol">
+ <xsl:choose>
+ <xsl:when test="m:min">
+ <xsl:value-of select="'min'"/>
+ </xsl:when>
+ <xsl:when test="m:max">
+ <xsl:value-of select="'max'"/>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <xsl:value-of select="$symbol"/>
+ </a>
+ <xsl:text>{</xsl:text>
+ <xsl:apply-templates select="*[2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <xsl:text>,</xsl:text>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 5"/>
+ </xsl:call-template>
+ <xsl:apply-templates select="*[3]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <xsl:text>}</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <xsl:value-of select="$symbol"/>
+ </a>
+ <xsl:text>{</xsl:text>
+ <xsl:apply-templates select="*[2]"/>
+ <xsl:text>, </xsl:text>
+ <xsl:apply-templates select="*[3]"/>
+ <xsl:text>}</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+<!-- COUNTING -->
+
+<xsl:template match="m:abs|m:fact|m:root
+ |m:limit|m:diff|m:min|m:max" mode="charcount">
+<xsl:param name="incurrent_length" select="0"/>
+ <xsl:choose>
+ <xsl:when test="$framewidth >= ($incurrent_length + string-length())">
+ <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>
+ <xsl:choose>
+ <xsl:when test="string($siblength) = """>
+ <xsl:value-of select="$incurrent_length + string-length()"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="number($siblength)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$incurrent_length + string-length()"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+</xsl:stylesheet>
+
+
+
+
+
+
+
--- /dev/null
+<?xml version="1.0"?>
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:m="http://www.w3.org/1998/Math/MathML">
+
+<!--***********************************************************************-->
+<!-- INIT style for HTML -->
+<!-- HELM Group: Asperti, Padovani, Sacerdoti, Schena -->
+<!--***********************************************************************-->
+
+<xsl:variable name="absPath">http://localhost:8081/get?url=</xsl:variable>
+
+<!-- IN -->
+
+ <xsl:template match="m:apply[m:in]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="m:in/@definitionURL"/>
+ </xsl:variable>
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="m:in" mode="charcount"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <FONT FACE="symbol" SIZE="+2" color="blue">Î</FONT>
+ </a>
+ <xsl:apply-templates select="*[3]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <xsl:text>)</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[2]"/>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <FONT FACE="symbol" SIZE="+2" color="blue">Î</FONT>
+ </a>
+ <xsl:apply-templates select="*[3]"/>
+ <xsl:text>)</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+<!-- NOTIN -->
+
+ <xsl:template match="m:apply[m:notin]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="m:notin/@definitionURL"/>
+ </xsl:variable>
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="m:notin" mode="charcount"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <FONT FACE="symbol" SIZE="+2" color="blue">Ï</FONT>
+ <xsl:apply-templates select="*[3]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <xsl:text>)</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[2]"/>
+ <FONT FACE="symbol" SIZE="+2" color="blue">Ï</FONT>
+ <xsl:apply-templates select="*[3]"/>
+ <xsl:text>)</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+<!-- SET -->
+
+ <xsl:template match="m:set">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="concat(string($absPath), @definitionURL)"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="count(child::*) = 0">
+ <FONT FACE="symbol" color="blue">Æ</FONT>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="." mode="charcount"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="name(*[1]) = 'm:bvar'">
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <xsl:text>{</xsl:text>
+ <xsl:apply-templates select="m:bvar/m:ci"/>
+ <xsl:text>:</xsl:text>
+ <xsl:apply-templates select="m:bvar/m:type">
+ <xsl:with-param name="current_indent"
+ select="$current_indent + 2 + string-length(m:bvar/m:ci)"/>
+ </xsl:apply-templates><BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <xsl:text>|</xsl:text>
+ <xsl:apply-templates select="m:condition">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <xsl:text>}</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>{</xsl:text>
+ <xsl:apply-templates select="m:bvar/m:ci"/>
+ <xsl:text>:</xsl:text>
+ <xsl:apply-templates select="m:bvar/m:type"/>
+ <xsl:text>|</xsl:text>
+ <xsl:apply-templates select="*[position()=2]"/>
+ <xsl:text>}</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <xsl:text>{</xsl:text>
+ <xsl:apply-templates select="*[position()=1]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <xsl:for-each select="*[position()>1]">
+ <xsl:text>,</xsl:text>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <xsl:apply-templates select=".">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ </xsl:for-each>
+ <xsl:text>}</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>{</xsl:text>
+ <xsl:for-each select="*">
+ <xsl:apply-templates select="."/>
+ <xsl:choose>
+ <xsl:when test="position() = last()">
+ <xsl:text>}</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>,</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+
+<!-- INTERSECTION -->
+
+<xsl:template match="m:apply[m:intersect]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="m:intersect/@definitionURL"/>
+ </xsl:variable>
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="m:intersect" mode="charcount"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <FONT FACE="symbol" SIZE="+2" color="blue">Ç</FONT>
+ </a>
+ <xsl:apply-templates select="*[3]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <xsl:text>)</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[2]"/>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <FONT FACE="symbol" SIZE="+2" color="blue">Ç</FONT>
+ </a>
+ <xsl:apply-templates select="*[3]"/>
+ <xsl:text>)</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+<!-- UNION -->
+
+<xsl:template match="m:apply[m:union]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="m:union/@definitionURL"/>
+ </xsl:variable>
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="m:union" mode="charcount"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <FONT FACE="symbol" SIZE="+2" color="blue">È</FONT>
+ </a>
+ <xsl:apply-templates select="*[3]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <xsl:text>)</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[2]"/>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <FONT FACE="symbol" SIZE="+2" color="blue">È</FONT>
+ </a>
+ <xsl:apply-templates select="*[3]"/>
+ <xsl:text>)</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+<!-- SUBSET -->
+<xsl:template match="m:apply[m:subset]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="m:subset/@definitionURL"/>
+ </xsl:variable>
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="m:subset" mode="charcount"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <FONT FACE="symbol" SIZE="+2" color="blue">Í</FONT>
+ </a>
+ <xsl:apply-templates select="*[3]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <xsl:text>)</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[2]"/>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <FONT FACE="symbol" SIZE="+2" color="blue">Í</FONT>
+ </a>
+ <xsl:apply-templates select="*[3]"/>
+ <xsl:text>)</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+<!-- PRSUBSET -->
+<xsl:template match="m:apply[m:prsubset]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="m:prsubset/@definitionURL"/>
+ </xsl:variable>
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="m:prsubset" mode="charcount"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <FONT FACE="symbol" SIZE="+2" color="blue">Ì</FONT>
+ </a>
+ <xsl:apply-templates select="*[3]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <xsl:text>)</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[2]"/>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <FONT FACE="symbol" SIZE="+2" color="blue">Ì</FONT>
+ </a>
+ <xsl:apply-templates select="*[3]"/>
+ <xsl:text>)</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+
+<!-- SETDIFF -->
+
+<xsl:template match="m:apply[m:setdiff]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="m:setdiff/@definitionURL"/>
+ </xsl:variable>
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="m:setdiff" mode="charcount"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$charlength > $framewidth">
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <BR/>
+ <xsl:call-template name="make_indent">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:call-template>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <xsl:text>/</xsl:text>
+ </a>
+ <xsl:apply-templates select="*[3]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <xsl:text>)</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>(</xsl:text>
+ <xsl:apply-templates select="*[2]"/>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat(string($header),string($uri))"/>
+ </xsl:attribute>
+ <xsl:text>/</xsl:text>
+ </a>
+ <xsl:apply-templates select="*[3]"/>
+ <xsl:text>)</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+<!-- CARD -->
+<xsl:template match="m:apply[m:card]">
+ <xsl:param name="current_indent" select="0"/>
+ <xsl:param name="width" select="$framewidth"/>
+ <xsl:variable name="uri">
+ <xsl:value-of select="m:card/@definitionURL"/>
+ </xsl:variable>
+ <xsl:text>|</xsl:text>
+ <xsl:apply-templates select="*[2]">
+ <xsl:with-param name="current_indent" select="$current_indent + 2"/>
+ </xsl:apply-templates>
+ <xsl:text>|</xsl:text>
+ </xsl:template>
+
+<!-- COUNTING -->
+
+<xsl:template match="m:in|m:notin|m:intersect|m:union
+ |m:subset|m:prsubset|m:setdiff|m:card" mode="charcount">
+<xsl:param name="incurrent_length" select="0"/>
+ <xsl:choose>
+ <xsl:when test="$framewidth >= ($incurrent_length + string-length())">
+ <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>
+ <xsl:choose>
+ <xsl:when test="string($siblength) = """>
+ <xsl:value-of select="$incurrent_length + string-length()"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="number($siblength)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$incurrent_length + string-length()"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+</xsl:stylesheet>
+
+
+
+
+
+
+
--- /dev/null
+<?xml version="1.0"?>
+
+<!-- ====================================================== -->
+<!-- XSL Transform of MathML content to MathML presentation -->
+<!-- By Igor Rodionov, Computer Science Department of -->
+<!-- the University of Western Ontario, London, Canada -->
+<!-- Complies with the W3C Working Draft from Dec.3, 1999 -->
+<!-- Version x.xx from Feb. 18, 2000 -->
+<!-- Comments to: igor@csd.uwo.ca -->
+<!-- -->
+<!-- (C) Copyright 1999, 2000 Symbolic Computation -->
+<!-- Laboratory, University of Western Ontario. -->
+<!-- ====================================================== -->
+
+<!-- ====================================================== -->
+<!-- May 11, 2000 - HELM group: -->
+<!-- Added the namespace prefix to all the output elements -->
+<!-- Changed the mml prefix into m -->
+<!-- Swapped math element out of the semantic element -->
+<!-- Added the declaration of the xlink namespace -->
+<!-- ====================================================== -->
+
+<xsl:stylesheet id="mml2mml"
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:m="http://www.w3.org/1998/Math/MathML"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:helm="http://www.cs.unibo.it/helm">
+
+<xsl:output method="xml" indent="yes" encoding="iso-8859-1"/>
+
+<!-- ***************************************************** -->
+<!-- Parameters affectin' stylesheet's run-time behavior -->
+<!-- ***************************************************** -->
+
+<!-- SEM_SW: -1 - strip off all semantics
+ 0 - pass semantics "as is" (default)
+ 1 - add semantics at top level only
+ 2 - add semantics at all levels
+ 3 - semantics at top level with cross-references
+-->
+<!-- HELM: SEM_SW was 0 -->
+<xsl:param name="SEM_SW" select="1"/>
+
+<!-- Miscellaneous Variable Definitions -->
+
+<xsl:variable name="NO" select="0"/>
+<xsl:variable name="YES" select="1"/>
+<xsl:variable name="PAR_NO" select="-7"/>
+<xsl:variable name="PAR_YES" select="-5"/>
+<xsl:variable name="PAR_SAME" select="-3"/>
+<xsl:variable name="NO_PARAM" select="-1"/>
+
+<!-- Operator Precedence Definitions -->
+
+<xsl:variable name="NO_PREC" select="0"/>
+<xsl:variable name="UNION_PREC" select="1"/>
+<xsl:variable name="SETDIFF_PREC" select="1"/>
+<xsl:variable name="INTERSECT_PREC" select="3"/>
+<xsl:variable name="OR_PREC" select="5"/>
+<xsl:variable name="XOR_PREC" select="5"/>
+<xsl:variable name="AND_PREC" select="7"/>
+<xsl:variable name="PLUS_PREC" select="9"/>
+<xsl:variable name="MINUS_PREC" select="9"/>
+<xsl:variable name="MUL_PREC" select="11"/>
+<xsl:variable name="DIV_PREC" select="11"/>
+<xsl:variable name="NEG_PREC" select="13"/>
+<xsl:variable name="FUNCTION_PREC" select="99"/>
+
+<!-- AUXILIARY FUNCTIONS FOR BACKWARD POINTERS AND REFS (by andrea) -->
+
+<xsl:template name = "insert_xref">
+ <xsl:if test="@helm:xref">
+ <xsl:attribute name="helm:xref">
+ <xsl:value-of select="@helm:xref"/>
+ </xsl:attribute>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template name = "insert">
+ <xsl:if test="@definitionURL">
+ <xsl:attribute name="xlink:href">
+ <xsl:value-of select="@definitionURL"/>
+ </xsl:attribute>
+ </xsl:if>
+ <xsl:if test="@helm:xref">
+ <xsl:attribute name="helm:xref">
+ <xsl:value-of select="@helm:xref"/>
+ </xsl:attribute>
+ </xsl:if>
+</xsl:template>
+
+<!-- for use inside m:apply -->
+<xsl:template name = "insert1">
+ <xsl:if test="*[1]/@definitionURL">
+ <xsl:attribute name="xlink:href">
+ <xsl:value-of select="*[1]/@definitionURL"/>
+ </xsl:attribute>
+ </xsl:if>
+ <xsl:if test="*[1]/@helm:xref">
+ <xsl:attribute name="helm:xref">
+ <xsl:value-of select="*[1]/@helm:xref"/>
+ </xsl:attribute>
+ </xsl:if>
+</xsl:template>
+
+<!-- For use inside "for-each" -->
+<xsl:template name = "insert2">
+ <xsl:if test="../*[1]/@definitionURL">
+ <xsl:attribute name="xlink:href">
+ <xsl:value-of select="../*[1]/@definitionURL"/>
+ </xsl:attribute>
+ </xsl:if>
+ <xsl:if test="../*[1]/@helm:xref">
+ <xsl:attribute name="helm:xref">
+ <xsl:value-of select="../*[1]/@helm:xref"/>
+ </xsl:attribute>
+ </xsl:if>
+</xsl:template>
+
+<!-- THE TOPMOST ELEMENT: MATH -->
+
+<xsl:template match = "m:math">
+ <xsl:choose>
+ <xsl:when test="$SEM_SW>0">
+<!-- HELM: deleted math (we have already inserted at object level) -->
+ <!--<m:math>-->
+ <m:semantics>
+ <xsl:apply-templates mode = "semantics"/>
+ <m:annotation-xml encoding="MathML">
+ <xsl:copy-of select = "*"/>
+ </m:annotation-xml>
+ </m:semantics>
+ <!--</m:math>-->
+ </xsl:when>
+ <xsl:otherwise>
+ <!--<m:math>-->
+ <xsl:apply-templates mode = "semantics"/>
+ <!--</m:math>-->
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- SEMANTICS -->
+
+<xsl:template match = "m:*" mode = "semantics">
+ <xsl:param name="IN_PREC" select="$NO_PREC"/>
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:choose>
+ <xsl:when test="$SEM_SW=-1 and self::m:semantics">
+ <xsl:apply-templates select="*[1]">
+ <xsl:with-param name="IN_PREC" select="$IN_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:when test="$SEM_SW=0 and self::m:semantics">
+ <m:semantics>
+ <xsl:apply-templates select="*[1]">
+ <xsl:with-param name="IN_PREC" select="$IN_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <xsl:copy-of select="m:annotation-xml"/>
+ </m:semantics>
+ </xsl:when>
+ <xsl:when test="$SEM_SW=2">
+ <m:semantics>
+ <xsl:choose>
+ <xsl:when test="self::m:semantics">
+ <xsl:apply-templates select="*[1]">
+ <xsl:with-param name="IN_PREC" select="$IN_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <xsl:copy-of select="m:annotation-xml"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select=".">
+ <xsl:with-param name="IN_PREC" select="$IN_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <m:annotation-xml encoding="MathML">
+ <xsl:copy-of select="."/>
+ </m:annotation-xml>
+ </xsl:otherwise>
+ </xsl:choose>
+ </m:semantics>
+ </xsl:when>
+ <xsl:when test="$SEM_SW=3 and @id">
+ <m:mrow idref="{@id}">
+ <xsl:apply-templates select=".">
+ <xsl:with-param name="IN_PREC" select="$IN_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mrow>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select=".">
+ <xsl:with-param name="IN_PREC" select="$IN_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:semantics">
+ <xsl:apply-templates select="*[1]" mode = "semantics"/>
+</xsl:template>
+
+
+<!-- BASIC ELEMENTS -->
+
+<xsl:template match = "m:cn">
+ <xsl:param name="IN_PREC" select="$NO_PREC"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:choose>
+ <xsl:when test=". < 0 and $IN_PREC > 0 and $PAREN=$PAR_NO and $PAR_NO_IGNORE=$NO">
+ <m:mfenced separators="">
+ <xsl:apply-templates select="." mode="cn"/>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="." mode="cn"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:cn" mode="cn">
+ <xsl:choose>
+ <xsl:when test="@base and (not(@type) or @type='integer' or @type='real')">
+ <m:msub>
+ <m:mn> <xsl:apply-templates mode = "semantics"/> </m:mn>
+ <m:mn> <xsl:value-of select="@base"/> </m:mn>
+ </m:msub>
+ </xsl:when>
+ <xsl:when test="@type='complex' and not(@base) and child::m:sep[1]">
+ <m:mfenced separators="">
+ <m:mn> <xsl:apply-templates select="text()[1]" mode = "semantics"/> </m:mn>
+ <xsl:if test="text()[2] < 0">
+ <m:mo>-</m:mo>
+ <m:mn> <xsl:value-of select="-text()[2]"/> </m:mn>
+ </xsl:if>
+ <xsl:if test="not(text()[2] < 0)">
+ <m:mo>+</m:mo>
+ <xsl:apply-templates select="text()[2]" mode = "semantics"/>
+ </xsl:if>
+ <m:mo> <mchar name="InvisibleTimes"/> </m:mo>
+ <m:mo>i</m:mo>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="@type='complex' and @base and child::m:sep[1]">
+ <m:msub>
+ <m:mfenced separators="">
+ <m:mn> <xsl:apply-templates select="text()[1]" mode = "semantics"/> </m:mn>
+ <xsl:if test="text()[2] < 0">
+ <m:mo>-</m:mo>
+ <m:mn> <xsl:value-of select="-text()[2]"/> </m:mn>
+ </xsl:if>
+ <xsl:if test="not(text()[2] < 0)">
+ <m:mo>+</m:mo>
+ <m:mn> <xsl:apply-templates select="text()[2]" mode = "semantics"/> </m:mn>
+ </xsl:if>
+ <m:mo> <mchar name="InvisibleTimes"/> </m:mo>
+ <m:mo>i</m:mo>
+ </m:mfenced>
+ <m:mn> <xsl:value-of select="@base"/> </m:mn>
+ </m:msub>
+ </xsl:when>
+ <xsl:when test="@type='rational' and not(@base) and child::m:sep[1]">
+ <m:mrow>
+ <m:mn> <xsl:apply-templates select="text()[1]" mode = "semantics"/> </m:mn>
+ <m:mo>/</m:mo>
+ <m:mn> <xsl:apply-templates select="text()[2]" mode = "semantics"/> </m:mn>
+ </m:mrow>
+ </xsl:when>
+ <xsl:when test="@type='rational' and @base and child::m:sep[1]">
+ <m:msub>
+ <m:mfenced separators="">
+ <m:mn> <xsl:apply-templates select="text()[1]" mode = "semantics"/> </m:mn>
+ <m:mo>/</m:mo>
+ <m:mn> <xsl:apply-templates select="text()[2]" mode = "semantics"/> </m:mn>
+ </m:mfenced>
+ <m:mn> <xsl:value-of select="@base"/> </m:mn>
+ </m:msub>
+ </xsl:when>
+ <xsl:when test="@type='polar' and not(@base) and child::m:sep[1]">
+ <m:mrow>
+ <m:mo>Polar</m:mo>
+ <m:mfenced separators=",">
+ <m:mn> <xsl:apply-templates select="text()[1]" mode = "semantics"/> </m:mn>
+ <m:mn> <xsl:apply-templates select="text()[2]" mode = "semantics"/> </m:mn>
+ </m:mfenced>
+ </m:mrow>
+ </xsl:when>
+ <xsl:when test="@type='polar' and @base and child::m:sep[1]">
+ <m:msub>
+ <m:mrow>
+ <m:mo>Polar</m:mo>
+ <m:mfenced separators=",">
+ <m:mn> <xsl:apply-templates select="text()[1]" mode = "semantics"/> </m:mn>
+ <m:mn> <xsl:apply-templates select="text()[2]" mode = "semantics"/> </m:mn>
+ </m:mfenced>
+ </m:mrow>
+ <m:mn> <xsl:value-of select="@base"/> </m:mn>
+ </m:msub>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mn>
+ <xsl:call-template name="insert"/>
+ <xsl:apply-templates mode = "semantics"/>
+ </m:mn>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:ci">
+ <xsl:choose>
+ <xsl:when test="@type='vector' or @type=matrix or @type=set">
+ <m:mi fontweight="bold"> <xsl:apply-templates mode = "semantics"/> </m:mi>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mi>
+ <xsl:call-template name="insert"/>
+ <xsl:apply-templates mode = "semantics"/>
+ </m:mi>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:csymbol">
+ <xsl:choose>
+ <xsl:when test="*[1]">
+ <xsl:copy-of select = "*"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mo> <xsl:apply-templates mode = "semantics"/> </m:mo>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+
+<!-- BASIC CONTENT ELEMENTS -->
+
+<xsl:template match = "m:apply[m:fn[1]]">
+ <m:mrow>
+ <xsl:apply-templates select = "m:fn[1]" mode = "semantics"/>
+ <m:mfenced separators=",">
+ <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
+ </m:mfenced>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:fn">
+ <xsl:apply-templates select = "*[1]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
+ </xsl:apply-templates>
+</xsl:template>
+
+<xsl:template match = "m:interval">
+ <xsl:choose>
+ <xsl:when test="@closure='closed'">
+ <m:mfenced open="[" close="]" separators=",">
+ <xsl:apply-templates mode = "semantics"/>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="@closure='open'">
+ <m:mfenced separators=",">
+ <xsl:apply-templates mode = "semantics"/>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="@closure='open-closed'">
+ <m:mfenced open="(" close="]" separators=",">
+ <xsl:apply-templates mode = "semantics"/>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="@closure='closed-open'">
+ <m:mfenced open="[" close=")" separators=",">
+ <xsl:apply-templates mode = "semantics"/>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mfenced open="[" close="]" separators=",">
+ <xsl:apply-templates mode = "semantics"/>
+ </m:mfenced>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:*[1][self::m:apply[m:inverse[1]]]]">
+ <m:mrow>
+ <xsl:apply-templates select = "*[1]" mode = "semantics"/>
+ <m:mfenced separators=",">
+ <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
+ </m:mfenced>
+ </m:mrow>
+</xsl:template>
+
+<!-- These "semantical" Transformations are REALLY questionable.
+ Andrea -->
+
+<xsl:template match = "m:apply[*[1][self::m:inverse]]">
+ <xsl:choose>
+ <xsl:when test="*[2]=m:exp">
+ <m:mo>ln</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:ln | m:log">
+ <m:mo>exp</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:sin">
+ <m:mo>arcsin</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:cos">
+ <m:mo>arccos</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:tan">
+ <m:mo>arctan</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:sec">
+ <m:mo>arcsec</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:csc">
+ <m:mo>arccsc</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:cot">
+ <m:mo>arccot</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:sinh">
+ <m:mo>arcsinh</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:cosh">
+ <m:mo>arccosh</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:tanh">
+ <m:mo>arctanh</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:sech">
+ <m:mo>arcsech</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:csch">
+ <m:mo>arccsch</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:coth">
+ <m:mo>arccoth</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:arcsin">
+ <m:mo>sin</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:arccos">
+ <m:mo>cos</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:arctan">
+ <m:mo>tan</m:mo>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:msup>
+ <xsl:apply-templates select = "*[2]" mode = "semantics"/>
+ <m:mfenced>
+ <m:mn>-1</m:mn>
+ </m:mfenced>
+ </m:msup>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:sep"/>
+
+<xsl:template match = "m:condition">
+ <xsl:choose>
+ <xsl:when test="parent::m:apply[m:forall[1]]"/>
+ <xsl:otherwise>
+ <xsl:if test="not(*[2])">
+ <xsl:apply-templates mode = "semantics"/>
+ </xsl:if>
+ <xsl:if test="*[2]">
+ <m:mrow>
+ <xsl:apply-templates mode = "semantics"/>
+ </m:mrow>
+ </xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:declare"/>
+
+<xsl:template match = "m:lambda">
+ <m:mrow>
+ <m:mo> Λ </m:mo>
+ <m:mfenced separators=",">
+ <xsl:for-each select = "*">
+ <xsl:choose>
+ <xsl:when test="self::m:ci or self::m:cn">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mrow>
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </m:mrow>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </m:mfenced>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:*[1][self::m:apply[m:compose[1]]]]">
+ <m:mrow>
+ <xsl:apply-templates select = "*[1]" mode = "semantics"/>
+ <m:mfenced separators=",">
+ <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
+ </m:mfenced>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[*[1][self::m:compose]]">
+ <m:mfenced separators="">
+ <xsl:apply-templates select = "m:*[2][self::m:ci[@type='fn'] | self::m:fn]" mode="semantics"/>
+ <xsl:for-each select = "m:*[position()>2][self::m:ci[@type='fn'] | self::m:fn]">
+ <m:mo> <xsl:call-template name="insert2"/> <mchar name="SmallCircle"/> </m:mo>
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+</xsl:template>
+
+<xsl:template match = "m:ident">
+ <m:mo>id</m:mo>
+</xsl:template>
+
+
+<!-- ARITHMETIC, ALGEBRA & LOGIC -->
+
+<xsl:template match = "m:apply[m:quotient[1]]">
+ <m:mfenced open="⌊" close="⌋" separators="">
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
+ </xsl:apply-templates>
+ <m:mo><xsl:call-template name="insert1"/>/</m:mo>
+ <xsl:apply-templates select="*[3]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ </m:mfenced>
+</xsl:template>
+
+<xsl:template match = "m:apply[*[1][self::m:exp]]">
+ <m:msup>
+ <m:mo>e</m:mo>
+ <xsl:apply-templates select = "*[2]" mode = "semantics"/>
+ </m:msup>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:factorial[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select = "*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ <m:mo><xsl:call-template name="insert1"/>!</m:mo>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:max[1] | m:min[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:if test="*[2]=m:bvar">
+ <m:munder>
+ <xsl:if test="*[1]=m:max">
+ <m:mo><xsl:call-template name="insert1"/>max</m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:min">
+ <m:mo>min</m:mo>
+ </xsl:if>
+ <xsl:apply-templates select="*[2]" mode = "semantics"/>
+ </m:munder>
+ <xsl:if test="*[3]=m:condition">
+ <m:mfenced open="{{" close="}}" separators="">
+ <m:mfenced open="" close="" separators=",">
+ <xsl:for-each select = "*[position()>3]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ <m:mo>|</m:mo>
+ <xsl:apply-templates select="*[3]" mode = "semantics"/>
+ </m:mfenced>
+ </xsl:if>
+ <xsl:if test="not(*[3]=m:condition)">
+ <m:mfenced open="{{" close="}}" separators=",">
+ <xsl:for-each select = "*[position()>2]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ </xsl:if>
+ </xsl:if>
+ <xsl:if test="*[2]=m:condition">
+ <xsl:if test="*[1]=m:max">
+ <m:mo>max</m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:min">
+ <m:mo>min</m:mo>
+ </xsl:if>
+ <m:mfenced open="{{" close="}}" separators="">
+ <xsl:if test="*[3]">
+ <m:mfenced open="" close="" separators=",">
+ <xsl:for-each select = "*[position()>2]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ <m:mo>|</m:mo>
+ </xsl:if>
+ <xsl:apply-templates select="*[2]" mode = "semantics"/>
+ </m:mfenced>
+ </xsl:if>
+ <xsl:if test="not(*[2]=m:condition) and not(*[2]=m:bvar)">
+ <xsl:if test="*[1]=m:max">
+ <m:mo>max</m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:min">
+ <m:mo><xsl:call-template name="insert1"/>min</m:mo>
+ </xsl:if>
+ <m:mfenced open="{{" close="}}" separators=",">
+ <xsl:for-each select = "*[position()>1]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ </xsl:if>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:minus[1]]">
+ <xsl:param name="IN_PREC" select="$NO_PREC"/>
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:choose>
+ <xsl:when test="$IN_PREC > $MINUS_PREC or $IN_PREC=$MINUS_PREC and $PARAM=$PAR_SAME">
+ <m:mfenced separators="">
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="minus">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAR_YES"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="$IN_PREC > $NO_PREC and $IN_PREC < $FUNCTION_PREC and not($SEM_SW=2)">
+ <xsl:apply-templates select="." mode="minus">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="minus">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mrow>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:minus[1]]" mode="minus">
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:if test="not(*[3])">
+ <m:mo><xsl:call-template name="insert1"/>-</m:mo>
+ <xsl:apply-templates select="*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$NEG_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ </xsl:if>
+ <xsl:if test="*[3]">
+ <xsl:apply-templates select="*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$MINUS_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <m:mo><xsl:call-template name="insert1"/>-</m:mo>
+ <xsl:apply-templates select="*[3]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$MINUS_PREC"/>
+ <xsl:with-param name="PARAM" select="$PAR_SAME"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:plus[1]]">
+ <xsl:param name="IN_PREC" select="$NO_PREC"/>
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:choose>
+ <xsl:when test="$IN_PREC > $PLUS_PREC or $IN_PREC=$PLUS_PREC and $PARAM=$PAR_SAME">
+ <m:mfenced separators="">
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="plus">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAR_YES"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="$IN_PREC > $NO_PREC and $IN_PREC < $FUNCTION_PREC and not($SEM_SW=2)">
+ <xsl:apply-templates select="." mode="plus">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="plus">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mrow>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:plus[1]]" mode="plus">
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:if test="*[2]">
+ <xsl:apply-templates select="*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$PLUS_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <xsl:for-each select = "*[position()>2]">
+ <xsl:choose>
+ <xsl:when test=". < 0">
+ <m:mo>-</m:mo>
+ <m:mn> <xsl:value-of select="-."/> </m:mn>
+ </xsl:when>
+ <xsl:when test="self::m:apply[m:minus[1]] and not(*[3])">
+ <xsl:apply-templates select="." mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$PLUS_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mo><xsl:call-template name="insert2"/>+</m:mo>
+ <xsl:apply-templates select="." mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$PLUS_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:power[1]]">
+ <xsl:choose>
+ <xsl:when test="*[2]=m:apply[m:ln[1] | m:log[1] | m:abs[1] | m:gcd[1] | m:sin[1] | m:cos[1] | m:tan[1] | m:sec[1] | m:csc[1] | m:cot[1] | m:sinh[1] | m:cosh[1] | m:tanh[1] | m:sech[1] | m:csch[1] | m:coth[1] | m:arcsin[1] | m:arccos[1] | m:arctan[1]]">
+ <xsl:apply-templates select="*[2]" mode = "semantics"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:msup>
+ <xsl:apply-templates select = "*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ <xsl:apply-templates select = "*[3]" mode = "semantics"/>
+ </m:msup>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:rem[1] | m:divide[1]]">
+ <xsl:param name="IN_PREC" select="$NO_PREC"/>
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:choose>
+ <xsl:when test="$IN_PREC > $DIV_PREC or $IN_PREC=$DIV_PREC and $PARAM=$PAR_SAME">
+ <m:mfenced separators="">
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="remdiv">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAR_YES"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="$IN_PREC > $NO_PREC and $IN_PREC < $FUNCTION_PREC and not($SEM_SW=2)">
+ <xsl:apply-templates select="." mode="remdiv">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="remdiv">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mrow>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:rem[1] | m:divide[1]]" mode="remdiv">
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:apply-templates select = "*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$DIV_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <xsl:if test="m:rem">
+ <m:mo><xsl:call-template name="insert1"/>%</m:mo>
+ </xsl:if>
+ <xsl:if test="m:divide">
+ <m:mo><xsl:call-template name="insert1"/>/</m:mo>
+ </xsl:if>
+ <xsl:apply-templates select = "*[3]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$DIV_PREC"/>
+ <xsl:with-param name="PARAM" select="$PAR_SAME"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:times[1]]">
+ <xsl:param name="IN_PREC" select="$NO_PREC"/>
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:choose>
+ <xsl:when test="$IN_PREC > $MUL_PREC or $IN_PREC=$MUL_PREC and $PARAM=$PAR_SAME">
+ <m:mfenced separators="">
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="times">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAR_YES"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="$IN_PREC > $NO_PREC and $IN_PREC < $FUNCTION_PREC and not($SEM_SW=2)">
+ <xsl:apply-templates select="." mode="times">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="times">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mrow>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:times[1]]" mode="times">
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:apply-templates select="*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$MUL_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <xsl:if test="*[3]">
+ <xsl:for-each select = "*[position()>2]">
+<!-- MODIFICA PROVVISORIA -->
+<!-- <m:mo><xsl:call-template name="insert2"/>
+ <mchar name="InvisibleTimes"/> </m:mo> -->
+ <m:mo><xsl:call-template name="insert2"/>*</m:mo>
+ <xsl:apply-templates select="." mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$MUL_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ </xsl:for-each>
+ </xsl:if>
+</xsl:template>
+
+<!-- COMMENTO : dove metto la uri della definizione di radice ???? -->
+
+<xsl:template match = "m:apply[m:root[1]]">
+ <m:msqrt>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:if test="*[2]=m:degree">
+ <xsl:apply-templates select="*[3]" mode = "semantics"/>
+ <xsl:apply-templates select="*[2]" mode = "semantics"/>
+ </xsl:if>
+ <xsl:if test="not(*[2]=m:degree)">
+ <xsl:apply-templates select="*[2]" mode = "semantics"/>
+ <m:mn>2</m:mn>
+ </xsl:if>
+ </m:msqrt>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:gcd[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:if test="not(parent::m:apply[m:power[1]])">
+ <m:mo><xsl:call-template name="insert1"/>gcd</m:mo>
+ </xsl:if>
+ <xsl:if test="parent::m:apply[m:power[1]]">
+ <m:msup>
+ <m:mo><xsl:call-template name="insert1"/>gcd</m:mo>
+ <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
+ </m:msup>
+ </xsl:if>
+ <m:mfenced separators=",">
+ <xsl:for-each select = "*[position()>1]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:and[1]]">
+ <xsl:param name="IN_PREC" select="$NO_PREC"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:choose>
+ <xsl:when test="$IN_PREC > $AND_PREC">
+ <m:mfenced separators="">
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="and">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAR_YES"/>
+ </xsl:apply-templates>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="$IN_PREC > $NO_PREC and $IN_PREC < $FUNCTION_PREC and not($SEM_SW=2)">
+ <xsl:apply-templates select="." mode="and">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="and">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mrow>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:and[1]]" mode="and">
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:apply-templates select="*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$AND_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <xsl:for-each select = "*[position()>2]">
+ <m:mo><xsl:call-template name="insert2"/> <mchar name="wedge"/> </m:mo>
+ <xsl:apply-templates select="." mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$AND_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:or[1]]">
+ <xsl:param name="IN_PREC" select="$NO_PREC"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:choose>
+ <xsl:when test="$IN_PREC > $OR_PREC">
+ <m:mfenced separators="">
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="or">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAR_YES"/>
+ </xsl:apply-templates>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="$IN_PREC > $NO_PREC and $IN_PREC < $FUNCTION_PREC and not($SEM_SW=2)">
+ <xsl:apply-templates select="." mode="or">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="or">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mrow>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:or[1]]" mode="or">
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:apply-templates select="*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$OR_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <xsl:for-each select = "*[position()>2]">
+ <m:mo><xsl:call-template name="insert2"/> <mchar name="vee"/> </m:mo>
+ <xsl:apply-templates select="." mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$OR_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:xor[1]]">
+ <xsl:param name="IN_PREC" select="$NO_PREC"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:choose>
+ <xsl:when test="$IN_PREC > $XOR_PREC">
+ <m:mfenced separators="">
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="xor">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAR_YES"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="$IN_PREC > $NO_PREC and $IN_PREC < $FUNCTION_PREC and not($SEM_SW=2)">
+ <xsl:apply-templates select="." mode="xor">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="xor">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mrow>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:xor[1]]" mode="xor">
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:apply-templates select="*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$XOR_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <xsl:for-each select = "*[position()>2]">
+ <m:mo><xsl:call-template name="insert2"/> <mchar name="xor"/> </m:mo>
+ <xsl:apply-templates select="." mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$XOR_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:not[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <m:mo><xsl:call-template name="insert1"/>not</m:mo>
+ <xsl:apply-templates select = "*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
+ </xsl:apply-templates>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:forall[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <m:mo><xsl:call-template name="insert1"/>for all</m:mo>
+ <m:mfenced separators=",">
+ <xsl:for-each select = "m:bvar">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ <xsl:if test="m:condition">
+ <m:mo>:</m:mo>
+ <xsl:apply-templates select = "m:condition/*" mode = "semantics"/>
+ <m:mo>,</m:mo>
+ </xsl:if>
+ <xsl:apply-templates select = "*[position()>1 and not(self::m:bvar) and not(self::m:condition)]" mode = "semantics"/>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:exists[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <m:mo><xsl:call-template name="insert1"/> <mchar name="Exists"/> </m:mo>
+ <m:mfenced separators=",">
+ <xsl:for-each select = "m:bvar">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ <xsl:if test="m:condition">
+ <m:mo>,</m:mo>
+ <xsl:apply-templates select = "m:condition/*" mode = "semantics"/>
+ </xsl:if>
+ <m:mo>:</m:mo>
+ <xsl:apply-templates select = "*[position()>1 and not(self::m:bvar) and not(self::m:condition)]" mode = "semantics"/>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:abs[1]]">
+ <xsl:if test="not(parent::m:apply[m:power[1]])">
+ <m:mfenced open="|" close="|" separators="">
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
+ </m:mfenced>
+ </xsl:if>
+ <xsl:if test="parent::m:apply[m:power[1]]">
+ <m:msup>
+ <m:mfenced open="|" close="|" separators="">
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
+ </m:mfenced>
+ <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
+ </m:msup>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:conjugate[1]]">
+ <m:mover>
+ <m:mrow>
+ <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
+ </m:mrow>
+ <m:mo><xsl:call-template name="insert1"/> <mchar name="UnderBar"/> </m:mo>
+ </m:mover>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:arg[1] | m:real[1] | m:imaginary[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:choose>
+ <xsl:when test="m:arg">
+ <m:mo><xsl:call-template name="insert1"/>arg</m:mo>
+ </xsl:when>
+ <xsl:when test="m:real">
+ <m:mo><xsl:call-template name="insert1"/>Real</m:mo>
+ </xsl:when>
+ <xsl:when test="m:imaginary">
+ <m:mo><xsl:call-template name="insert1"/>Imaginary</m:mo>
+ </xsl:when>
+ </xsl:choose>
+ <m:mfenced separators="">
+ <xsl:apply-templates select = "*[2]" mode = "semantics"/>
+ </m:mfenced>
+ </m:mrow>
+</xsl:template>
+
+
+<!-- RELATIONS -->
+
+<xsl:template match = "m:apply[m:neq | m:approx | m:tendsto | m:implies | m:in | m:notin | m:notsubset | m:notprsubset | m:subset | m:prsubset | m:eq | m:gt | m:lt | m:geq | m:leq | m:equivalent]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:if test="*[1]=m:neq or *[1]=m:approx or *[1]=m:tendsto or *[1]=m:implies or *[1]=m:in or *[1]=m:notin or *[1]=m:notsubset or *[1]=m:notprsubset">
+ <xsl:apply-templates select = "*[2]" mode = "semantics"/>
+ <xsl:if test="*[1]=m:neq">
+ <m:mo><xsl:call-template name="insert1"/> <mchar name="NotEqual"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:approx">
+ <m:mo><xsl:call-template name="insert1"/> <mchar name="approxeq"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:tendsto">
+ <m:mo><xsl:call-template name="insert1"/> <mchar name="RightArrow"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:implies">
+ <m:mo><xsl:call-template name="insert1"/> <mchar name="DoubleRightArrow"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:in">
+ <m:mo><xsl:call-template name="insert1"/>
+ <mchar name="Element"/>
+ </m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:notin">
+ <m:mo><xsl:call-template name="insert1"/> <mchar name="NotElement"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:notsubset">
+ <m:mo> <xsl:call-template name="insert1"/> <mchar name="NotSubset"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:notprsubset">
+ <m:mo> <xsl:call-template name="insert1"/> <mchar name="NotSubsetEqual"/> </m:mo>
+ </xsl:if>
+ <xsl:apply-templates select = "*[3]" mode = "semantics"/>
+ <xsl:if test="*[1]=m:tendsto and m:tendsto[1][@type='below']">
+ <m:mo><xsl:call-template name="insert1"/>-</m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:tendsto and m:tendsto[1][@type='above']">
+ <m:mo><xsl:call-template name="insert1"/>+</m:mo>
+ </xsl:if>
+ </xsl:if>
+ <xsl:if test="*[1]=m:subset or *[1]=m:prsubset or *[1]=m:eq or *[1]=m:gt or *[1]=m:lt or *[1]=m:geq or *[1]=m:leq or *[1]=m:equivalent">
+ <xsl:apply-templates select = "*[2]" mode="semantics"/>
+ <xsl:for-each select = "*[position()>2]">
+ <xsl:if test="../*[self::m:subset][1]">
+ <m:mo> <xsl:call-template name="insert2"/> <mchar name="SubsetEqual"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="../*[self::m:prsubset][1]">
+ <m:mo> <xsl:call-template name="insert2"/><mchar name="subset"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="../*[self::m:eq][1]">
+ <m:mo><xsl:call-template name="insert2"/>=</m:mo>
+ </xsl:if>
+ <xsl:if test="../*[self::m:gt][1]">
+ <m:mo><xsl:call-template name="insert2"/>></m:mo>
+ </xsl:if>
+ <xsl:if test="../*[self::m:lt][1]">
+ <m:mo><xsl:call-template name="insert2"/><</m:mo>
+ </xsl:if>
+ <xsl:if test="../*[self::m:geq][1]">
+ <m:mo><xsl:call-template name="insert2"/> <mchar name="geq"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="../*[self::m:leq][1]">
+ <m:mo><xsl:call-template name="insert2"/> <mchar name="leq"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="../*[self::m:equivalent][1]">
+ <m:mo><xsl:call-template name="insert2"/> <mchar name="Congruent"/> </m:mo>
+ </xsl:if>
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </xsl:if>
+ </m:mrow>
+</xsl:template>
+
+
+<!-- CALCULUS -->
+
+<xsl:template match = "m:apply[*[1][self::m:ln]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:choose>
+ <xsl:when test="parent::m:apply[m:power[1]]">
+ <m:msup>
+ <m:mo><xsl:call-template name="insert1"/>ln</m:mo>
+ <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
+ </m:msup>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mo><xsl:call-template name="insert1"/>ln</m:mo>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:apply-templates select = "*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
+ </xsl:apply-templates>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:log[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:choose>
+ <xsl:when test="parent::m:apply[m:power[1]]">
+ <xsl:if test="not(*[2]=m:logbase)">
+ <m:msup>
+ <m:mo><xsl:call-template name="insert1"/>log</m:mo>
+ <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
+ </m:msup>
+ </xsl:if>
+ <xsl:if test="*[2]=m:logbase">
+ <m:msubsup>
+ <m:mo><xsl:call-template name="insert1"/>log</m:mo>
+ <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
+ <xsl:apply-templates select = "m:logbase" mode = "semantics"/>
+ </m:msubsup>
+ </xsl:if>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:if test="not(*[2]=m:logbase)">
+ <m:mo><xsl:call-template name="insert1"/>log</m:mo>
+ </xsl:if>
+ <xsl:if test="*[2]=m:logbase">
+ <m:msub>
+ <m:mo><xsl:call-template name="insert1"/>log</m:mo>
+ <xsl:apply-templates select = "m:logbase" mode = "semantics"/>
+ </m:msub>
+ </xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:if test="*[2]=m:logbase">
+ <xsl:apply-templates select = "*[3]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
+ </xsl:apply-templates>
+ </xsl:if>
+ <xsl:if test="not(*[2]=m:logbase)">
+ <xsl:apply-templates select = "*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
+ </xsl:apply-templates>
+ </xsl:if>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:diff[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:if test="*[2]=m:bvar and m:bvar[*[2]=m:degree]">
+ <m:mfrac><xsl:call-template name="insert1"/>
+ <m:msup>
+ <m:mo>d</m:mo>
+ <xsl:apply-templates select = "m:bvar/m:degree" mode = "semantics"/>
+ </m:msup>
+ <m:mrow>
+ <m:mo>d</m:mo>
+ <m:msup>
+ <xsl:apply-templates select = "m:bvar/*[1]" mode = "semantics"/>
+ <xsl:apply-templates select = "m:bvar/m:degree" mode = "semantics"/>
+ </m:msup>
+ </m:mrow>
+ </m:mfrac>
+ </xsl:if>
+ <xsl:if test="*[2]=m:bvar and not(m:bvar[*[2]=m:degree])">
+ <m:mfrac><xsl:call-template name="insert1"/>
+ <m:mo>d</m:mo>
+ <m:mrow>
+ <m:mo>d</m:mo>
+ <xsl:apply-templates select = "m:bvar/*[1]" mode = "semantics"/>
+ </m:mrow>
+ </m:mfrac>
+ </xsl:if>
+ <xsl:apply-templates select = "*[3]" mode = "semantics"/>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:partialdiff[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:for-each select = "m:bvar">
+ <xsl:if test="*[last()]=m:degree">
+ <m:mfrac><xsl:call-template name="insert1"/>
+ <m:msup>
+ <m:mo>d</m:mo>
+ <xsl:apply-templates select = "m:degree" mode = "semantics"/>
+ </m:msup>
+ <m:mrow>
+ <m:mo>d</m:mo>
+ <m:msup>
+ <xsl:apply-templates select = "*[1]" mode = "semantics"/>
+ <xsl:apply-templates select = "m:degree" mode = "semantics"/>
+ </m:msup>
+ </m:mrow>
+ </m:mfrac>
+ </xsl:if>
+ <xsl:if test="not(*[last()]=m:degree)">
+ <m:mfrac><xsl:call-template name="insert1"/>
+ <m:mo>d</m:mo>
+ <m:mrow>
+ <m:mo>d</m:mo>
+ <xsl:apply-templates select = "*[1]" mode = "semantics"/>
+ </m:mrow>
+ </m:mfrac>
+ </xsl:if>
+ </xsl:for-each>
+ <xsl:apply-templates select = "*[last()]" mode = "semantics"/>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:lowlimit | m:uplimit | m:bvar | m:degree | m:logbase">
+ <xsl:apply-templates mode = "semantics"/>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:divergence[1] | m:grad[1] | m:curl[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:if test="*[1]=m:divergence">
+ <m:mo><xsl:call-template name="insert1"/>div</m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:grad">
+ <m:mo><xsl:call-template name="insert1"/>grad</m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:curl">
+ <m:mo><xsl:call-template name="insert1"/>curl</m:mo>
+ </xsl:if>
+ <xsl:choose>
+ <xsl:when test="*[2]=m:ci">
+ <xsl:apply-templates select = "*[2]" mode = "semantics"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mfenced separators="">
+ <xsl:apply-templates select = "*[2]" mode = "semantics"/>
+ </m:mfenced>
+ </xsl:otherwise>
+ </xsl:choose>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:laplacian[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <m:msup><xsl:call-template name="insert1"/>
+ <m:mo> Δ </m:mo>
+ <m:mn>2</m:mn>
+ </m:msup>
+ <xsl:apply-templates select = "*[2]" mode = "semantics"/>
+ </m:mrow>
+</xsl:template>
+
+
+<!-- SET THEORY -->
+
+<xsl:template match = "m:set | m:list">
+ <m:mfenced open="{{" close="}}" separators="">
+ <xsl:call-template name="insert_xref"/>
+ <xsl:if test="*[1]=m:bvar and *[2]=m:condition">
+ <xsl:apply-templates select="m:bvar" mode = "semantics"/>
+ <m:mo>|</m:mo>
+ <xsl:apply-templates select="m:condition" mode = "semantics"/>
+ </xsl:if>
+ <xsl:if test="*[1]=m:condition and not(child::m:bvar)">
+ <m:mfenced open="" close="" separators=",">
+ <xsl:for-each select = "*[not(self::m:condition) and not(self::m:bvar)]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ <m:mo>|</m:mo>
+ <xsl:apply-templates select="m:condition" mode = "semantics"/>
+ </xsl:if>
+ <xsl:if test="not(child::m:bvar) and not(child::m:condition)">
+ <m:mfenced open="" close="" separators=",">
+ <xsl:for-each select = "*">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ </xsl:if>
+ </m:mfenced>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:union[1]]">
+ <xsl:param name="IN_PREC" select="$NO_PREC"/>
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:choose>
+ <xsl:when test="$IN_PREC > $UNION_PREC or $IN_PREC=$UNION_PREC and $PARAM=$PAR_SAME">
+ <m:mfenced separators="" helm:xref="{@helm:xref}">
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="union">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="$IN_PREC > $NO_PREC and $IN_PREC < $FUNCTION_PREC and not($SEM_SW=2)">
+ <xsl:apply-templates select="." mode="union">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="union">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mrow>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:union[1]]" mode="union">
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:apply-templates select = "*[2]" mode="semantics">
+ <xsl:with-param name="IN_PREC" select="$UNION_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <xsl:for-each select = "*[position()>2]">
+ <m:mo><xsl:call-template name="insert2"/> <mchar name="Union"/> </m:mo>
+ <xsl:apply-templates select = "." mode="semantics">
+ <xsl:with-param name="IN_PREC" select="$UNION_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:intersect[1]]">
+ <xsl:param name="IN_PREC" select="$NO_PREC"/>
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:choose>
+ <xsl:when test="$IN_PREC > $INTERSECT_PREC">
+ <m:mfenced separators="" helm:xref="{@helm:xref}">
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="intersect">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="$IN_PREC > $NO_PREC and $IN_PREC < $FUNCTION_PREC and not($SEM_SW=2)">
+ <xsl:apply-templates select="." mode="intersect">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="intersect">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mrow>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:intersect[1]]" mode="intersect">
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:apply-templates select = "*[2]" mode="semantics">
+ <xsl:with-param name="IN_PREC" select="$INTERSECT_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <xsl:for-each select = "*[position()>2]">
+ <m:mo><xsl:call-template name="insert2"/> <mchar name="Intersection"/> </m:mo>
+ <xsl:apply-templates select = "." mode="semantics">
+ <xsl:with-param name="IN_PREC" select="$INTERSECT_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:setdiff[1]]">
+ <xsl:param name="IN_PREC" select="$NO_PREC"/>
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:choose>
+ <xsl:when test="$IN_PREC > $SETDIFF_PREC or $IN_PREC=$SETDIFF_PREC and $PARAM=$PAR_SAME">
+ <m:mfenced separators="">
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="setdiff">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="$IN_PREC > $NO_PREC and $IN_PREC < $FUNCTION_PREC and not($SEM_SW=2)">
+ <xsl:apply-templates select="." mode="setdiff">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="." mode="setdiff">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mrow>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:setdiff[1]]" mode="setdiff">
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:apply-templates select = "*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$SETDIFF_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <m:mo><xsl:call-template name="insert1"/>\</m:mo>
+ <xsl:apply-templates select = "*[3]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$SETDIFF_PREC"/>
+ <xsl:with-param name="PARAM" select="$PAR_SAME"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:card[1]]">
+ <m:mfenced open="|" close="|" separators=",">
+ <xsl:call-template name="insert_xref"/>
+ <xsl:for-each select = "*[position()>1]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+</xsl:template>
+
+
+<!-- SEQUENCES AND SERIES -->
+
+<xsl:template match = "m:apply[m:sum[1] | m:product[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:choose>
+ <xsl:when test="*[2]=m:bvar and m:lowlimit and m:uplimit">
+ <m:munderover>
+ <xsl:if test="*[1]=m:sum">
+ <m:mo><xsl:call-template name="insert1"/> <mchar name="Sum"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:product">
+ <m:mo><xsl:call-template name="insert1"/> <mchar name="Product"/> </m:mo>
+ </xsl:if>
+ <m:mrow>
+ <xsl:apply-templates select = "*[2]" mode = "semantics"/>
+ <m:mo>=</m:mo>
+ <xsl:apply-templates select = "m:lowlimit" mode = "semantics"/>
+ </m:mrow>
+ <xsl:apply-templates select = "m:uplimit" mode = "semantics"/>
+ </m:munderover>
+ <xsl:apply-templates select = "*[5]" mode = "semantics"/>
+ </xsl:when>
+ <xsl:when test="*[2]=m:bvar and *[3]=m:condition">
+ <m:munder>
+ <xsl:if test="*[1]=m:sum">
+ <m:mo><xsl:call-template name="insert1"/> <mchar name="Sum"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:product">
+ <m:mo><xsl:call-template name="insert1"/> <mchar name="Product"/> </m:mo>
+ </xsl:if>
+ <xsl:apply-templates select = "*[3]" mode = "semantics"/>
+ </m:munder>
+ <xsl:apply-templates select = "*[4]" mode = "semantics"/>
+ </xsl:when>
+ </xsl:choose>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:limit[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <m:munder>
+ <m:mo><xsl:call-template name="insert1"/>lim</m:mo>
+ <m:mrow>
+ <xsl:if test="*[2]=m:bvar and *[3]=m:lowlimit">
+ <xsl:apply-templates select = "*[2]" mode = "semantics"/>
+ <m:mo> <mchar name="RightArrow"/> </m:mo>
+ <xsl:apply-templates select = "*[3]" mode = "semantics"/>
+ </xsl:if>
+ <xsl:if test="*[2]=m:bvar and *[3]=m:condition">
+ <xsl:apply-templates select = "*[3]" mode = "semantics"/>
+ </xsl:if>
+ </m:mrow>
+ </m:munder>
+ <xsl:apply-templates select = "*[4]" mode = "semantics"/>
+ </m:mrow>
+</xsl:template>
+
+
+<!-- TRIGONOMETRY -->
+
+<xsl:template match = "m:apply[*[1][self::m:sin | self::m:cos | self::m:tan | self::m:sec | self::m:csc | self::m:cot | self::m:sinh | self::m:cosh | self::m:tanh | self::m:sech | self::m:csch | self::m:coth | self::m:arcsin | self::m:arccos | self::m:arctan]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:if test="not(parent::m:apply[m:power[1]])">
+ <xsl:apply-templates select = "*[1]" mode = "trigonometry"/>
+ </xsl:if>
+ <xsl:if test="parent::m:apply[m:power[1]]">
+ <m:msup>
+ <xsl:apply-templates select = "*[1]" mode = "trigonometry"/>
+ <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
+ </m:msup>
+ </xsl:if>
+ <xsl:apply-templates select = "*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:*" mode = "trigonometry">
+ <xsl:choose>
+ <xsl:when test="self::m:sin">
+ <m:mo>sin</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:cos">
+ <m:mo>cos</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:tan">
+ <m:mo>tan</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:sec">
+ <m:mo>sec</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:csc">
+ <m:mo>csc</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:cot">
+ <m:mo>cot</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:sinh">
+ <m:mo>sinh</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:cosh">
+ <m:mo>cosh</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:tanh">
+ <m:mo>tanh</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:sech">
+ <m:mo>sech</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:csch">
+ <m:mo>csch</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:coth">
+ <m:mo>coth</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:arcsin">
+ <m:mo>arcsin</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:arccos">
+ <m:mo>arccos</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:arctan">
+ <m:mo>arctan</m:mo>
+ </xsl:when>
+ </xsl:choose>
+</xsl:template>
+
+
+<!-- STATISTICS -->
+
+<xsl:template match = "m:apply[m:mean[1]]">
+ <m:mfenced open="<" close=">" separators=",">
+ <xsl:call-template name="insert_xref"/>
+ <xsl:for-each select = "*[position()>1]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:sdev[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <m:mo><xsl:call-template name="insert1"/> σ </m:mo>
+ <m:mfenced separators=",">
+ <xsl:for-each select = "*[position()>1]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:variance[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <m:mo><xsl:call-template name="insert1"/> σ </m:mo>
+ <m:msup>
+ <m:mfenced separators=",">
+ <xsl:for-each select = "*[position()>1]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ <m:mn>2</m:mn>
+ </m:msup>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:median[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <m:mo><xsl:call-template name="insert1"/>median</m:mo>
+ <m:mfenced separators=",">
+ <xsl:for-each select = "*[position()>1]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:mode[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <m:mo><xsl:call-template name="insert1"/>mode</m:mo>
+ <m:mfenced separators=",">
+ <xsl:for-each select = "*[position()>1]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:moment[1]]">
+ <xsl:call-template name="insert_xref"/>
+ <m:mfenced open="<" close=">" separators="">
+ <xsl:if test="*[2]=m:degree">
+ <m:msup>
+ <xsl:apply-templates select="*[3]" mode = "semantics"/>
+ <xsl:apply-templates select="*[2]" mode = "semantics"/>
+ </m:msup>
+ </xsl:if>
+ <xsl:if test="not(*[2]=m:degree)">
+ <xsl:for-each select = "*[position()>1]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </xsl:if>
+ </m:mfenced>
+</xsl:template>
+
+
+<!-- LINEAR ALGEBRA -->
+
+<xsl:template match="m:vector">
+ <m:mfenced separators="">
+ <m:mtable>
+ <xsl:for-each select="*">
+ <m:mtd>
+ <xsl:apply-templates select="." mode = "semantics"/>
+ </m:mtd>
+ </xsl:for-each>
+ </m:mtable>
+ </m:mfenced>
+</xsl:template>
+
+<xsl:template match = "m:matrix">
+ <m:mfenced separators="">
+ <m:mtable>
+ <xsl:apply-templates mode = "semantics"/>
+ </m:mtable>
+ </m:mfenced>
+</xsl:template>
+
+<xsl:template match = "m:matrixrow">
+ <m:mtr>
+ <xsl:for-each select="*">
+ <m:mtd>
+ <xsl:apply-templates select="." mode = "semantics"/>
+ </m:mtd>
+ </xsl:for-each>
+ </m:mtr>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:determinant[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <m:mo><xsl:call-template name="insert1"/>det</m:mo>
+ <xsl:apply-templates select = "*[2]" mode = "semantics"/>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:transpose[1]]">
+ <m:msup>
+ <xsl:apply-templates select = "*[2]" mode = "semantics"/>
+ <m:mo>T</m:mo>
+ </m:msup>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:selector[1]]">
+ <xsl:if test="*[2]=m:matrix and *[3]=m:cn">
+ <xsl:variable name="m" select = "*[3]"/>
+ <xsl:choose>
+ <xsl:when test="*[4]=m:cn">
+ <xsl:variable name="n" select = "*[4]"/>
+ <xsl:copy-of select = "m:matrix/*[position()=$m]/*[position()=$n]"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:copy-of select = "m:matrix/*[position()=$m]"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:if>
+ <xsl:if test="(*[2]=m:vector or *[2]=m:list) and *[3]=m:cn">
+ <xsl:variable name="m" select = "*[3]"/>
+ <xsl:copy-of select = "*[2]/*[position()=$m]"/>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:vectorproduct[1] | m:scalarproduct[1] | m:outerproduct[1]]">
+ <m:mrow>
+ <xsl:call-template name="insert_xref"/>
+ <xsl:apply-templates select="*[2]" mode = "semantics"/>
+ <xsl:choose>
+ <xsl:when test="m:vectorproduct[1]">
+ <m:mo><xsl:call-template name="insert1"/> <mchar name="Cross"/> </m:mo>
+ </xsl:when>
+ <xsl:when test="m:scalarproduct[1] | m:outerproduct[1]">
+ <m:mo><xsl:call-template name="insert1"/>.</m:mo>
+ </xsl:when>
+ </xsl:choose>
+ <xsl:apply-templates select="*[3]" mode = "semantics"/>
+ </m:mrow>
+</xsl:template>
+
+</xsl:stylesheet>
--- /dev/null
+<?xml version="1.0"?>
+
+<!-- ====================================================== -->
+<!-- XSL Transform of MathML content to MathML presentation -->
+<!-- By Igor Rodionov, Computer Science Department of -->
+<!-- the University of Western Ontario, London, Canada -->
+<!-- Complies with the W3C Working Draft from Dec.3, 1999 -->
+<!-- Version x.xx from Feb. 18, 2000 -->
+<!-- Comments to: igor@csd.uwo.ca -->
+<!-- -->
+<!-- (C) Copyright 1999, 2000 Symbolic Computation -->
+<!-- Laboratory, University of Western Ontario. -->
+<!-- ====================================================== -->
+
+<!-- ====================================================== -->
+<!-- May 11, 2000 - HELM group: -->
+<!-- Added the namespace prefix to all the output elements -->
+<!-- Changed the mml prefix into m -->
+<!-- Swapped math element out of the semantic element -->
+<!-- Added the declaration of the xlink namespace -->
+<!-- ====================================================== -->
+
+<xsl:stylesheet id="mml2mml"
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:m="http://www.w3.org/1998/Math/MathML"
+ xmlns:xlink="http://www.w3.org/1999/xlink">
+
+<xsl:output method="xml" indent="yes" encoding="iso-8859-1"/>
+
+<!-- ***************************************************** -->
+<!-- Parameters affectin' stylesheet's run-time behavior -->
+<!-- ***************************************************** -->
+
+<!-- SEM_SW: -1 - strip off all semantics
+ 0 - pass semantics "as is" (default)
+ 1 - add semantics at top level only
+ 2 - add semantics at all levels
+ 3 - semantics at top level with cross-references
+-->
+<!-- HELM: SEM_SW was 0 -->
+<xsl:param name="SEM_SW" select="1"/>
+
+<!-- Miscellaneous Variable Definitions -->
+
+<xsl:variable name="NO" select="0"/>
+<xsl:variable name="YES" select="1"/>
+<xsl:variable name="PAR_NO" select="-7"/>
+<xsl:variable name="PAR_YES" select="-5"/>
+<xsl:variable name="PAR_SAME" select="-3"/>
+<xsl:variable name="NO_PARAM" select="-1"/>
+
+<!-- Operator Precedence Definitions -->
+
+<xsl:variable name="NO_PREC" select="0"/>
+<xsl:variable name="UNION_PREC" select="1"/>
+<xsl:variable name="SETDIFF_PREC" select="1"/>
+<xsl:variable name="INTERSECT_PREC" select="3"/>
+<xsl:variable name="OR_PREC" select="5"/>
+<xsl:variable name="XOR_PREC" select="5"/>
+<xsl:variable name="AND_PREC" select="7"/>
+<xsl:variable name="PLUS_PREC" select="9"/>
+<xsl:variable name="MINUS_PREC" select="9"/>
+<xsl:variable name="MUL_PREC" select="11"/>
+<xsl:variable name="DIV_PREC" select="11"/>
+<xsl:variable name="NEG_PREC" select="13"/>
+<xsl:variable name="FUNCTION_PREC" select="99"/>
+
+
+<!-- THE TOPMOST ELEMENT: MATH -->
+
+<xsl:template match = "m:math">
+ <xsl:choose>
+ <xsl:when test="$SEM_SW>0">
+<!-- HELM: deleted math (we have already inserted at object level) -->
+ <!--<m:math>-->
+ <m:semantics>
+ <xsl:apply-templates mode = "semantics"/>
+ <m:annotation-xml encoding="MathML">
+ <xsl:copy-of select = "*"/>
+ </m:annotation-xml>
+ </m:semantics>
+ <!--</m:math>-->
+ </xsl:when>
+ <xsl:otherwise>
+ <!--<m:math>-->
+ <xsl:apply-templates mode = "semantics"/>
+ <!--</m:math>-->
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- SEMANTICS -->
+
+<xsl:template match = "m:*" mode = "semantics">
+ <xsl:param name="IN_PREC" select="$NO_PREC"/>
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:choose>
+ <xsl:when test="$SEM_SW=-1 and self::m:semantics">
+ <xsl:apply-templates select="*[1]">
+ <xsl:with-param name="IN_PREC" select="$IN_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:when test="$SEM_SW=0 and self::m:semantics">
+ <m:semantics>
+ <xsl:apply-templates select="*[1]">
+ <xsl:with-param name="IN_PREC" select="$IN_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <xsl:copy-of select="m:annotation-xml"/>
+ </m:semantics>
+ </xsl:when>
+ <xsl:when test="$SEM_SW=2">
+ <m:semantics>
+ <xsl:choose>
+ <xsl:when test="self::m:semantics">
+ <xsl:apply-templates select="*[1]">
+ <xsl:with-param name="IN_PREC" select="$IN_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <xsl:copy-of select="m:annotation-xml"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select=".">
+ <xsl:with-param name="IN_PREC" select="$IN_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <m:annotation-xml encoding="MathML">
+ <xsl:copy-of select="."/>
+ </m:annotation-xml>
+ </xsl:otherwise>
+ </xsl:choose>
+ </m:semantics>
+ </xsl:when>
+ <xsl:when test="$SEM_SW=3 and @id">
+ <m:mrow idref="{@id}">
+ <xsl:apply-templates select=".">
+ <xsl:with-param name="IN_PREC" select="$IN_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mrow>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select=".">
+ <xsl:with-param name="IN_PREC" select="$IN_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:semantics">
+ <xsl:apply-templates select="*[1]" mode = "semantics"/>
+</xsl:template>
+
+
+<!-- BASIC ELEMENTS -->
+
+<xsl:template match = "m:cn">
+ <xsl:param name="IN_PREC" select="$NO_PREC"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:choose>
+ <xsl:when test=". < 0 and $IN_PREC > 0 and $PAREN=$PAR_NO and $PAR_NO_IGNORE=$NO">
+ <m:mfenced separators="">
+ <xsl:apply-templates select="." mode="cn"/>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="." mode="cn"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:cn" mode="cn">
+ <xsl:choose>
+ <xsl:when test="@base and (not(@type) or @type='integer' or @type='real')">
+ <m:msub>
+ <m:mn> <xsl:apply-templates mode = "semantics"/> </m:mn>
+ <m:mn> <xsl:value-of select="@base"/> </m:mn>
+ </m:msub>
+ </xsl:when>
+ <xsl:when test="@type='complex' and not(@base) and child::m:sep[1]">
+ <m:mfenced separators="">
+ <m:mn> <xsl:apply-templates select="text()[1]" mode = "semantics"/> </m:mn>
+ <xsl:if test="text()[2] < 0">
+ <m:mo>-</m:mo>
+ <m:mn> <xsl:value-of select="-text()[2]"/> </m:mn>
+ </xsl:if>
+ <xsl:if test="not(text()[2] < 0)">
+ <m:mo>+</m:mo>
+ <xsl:apply-templates select="text()[2]" mode = "semantics"/>
+ </xsl:if>
+ <m:mo> <mchar name="InvisibleTimes"/> </m:mo>
+ <m:mo>i</m:mo>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="@type='complex' and @base and child::m:sep[1]">
+ <m:msub>
+ <m:mfenced separators="">
+ <m:mn> <xsl:apply-templates select="text()[1]" mode = "semantics"/> </m:mn>
+ <xsl:if test="text()[2] < 0">
+ <m:mo>-</m:mo>
+ <m:mn> <xsl:value-of select="-text()[2]"/> </m:mn>
+ </xsl:if>
+ <xsl:if test="not(text()[2] < 0)">
+ <m:mo>+</m:mo>
+ <m:mn> <xsl:apply-templates select="text()[2]" mode = "semantics"/> </m:mn>
+ </xsl:if>
+ <m:mo> <mchar name="InvisibleTimes"/> </m:mo>
+ <m:mo>i</m:mo>
+ </m:mfenced>
+ <m:mn> <xsl:value-of select="@base"/> </m:mn>
+ </m:msub>
+ </xsl:when>
+ <xsl:when test="@type='rational' and not(@base) and child::m:sep[1]">
+ <m:mrow>
+ <m:mn> <xsl:apply-templates select="text()[1]" mode = "semantics"/> </m:mn>
+ <m:mo>/</m:mo>
+ <m:mn> <xsl:apply-templates select="text()[2]" mode = "semantics"/> </m:mn>
+ </m:mrow>
+ </xsl:when>
+ <xsl:when test="@type='rational' and @base and child::m:sep[1]">
+ <m:msub>
+ <m:mfenced separators="">
+ <m:mn> <xsl:apply-templates select="text()[1]" mode = "semantics"/> </m:mn>
+ <m:mo>/</m:mo>
+ <m:mn> <xsl:apply-templates select="text()[2]" mode = "semantics"/> </m:mn>
+ </m:mfenced>
+ <m:mn> <xsl:value-of select="@base"/> </m:mn>
+ </m:msub>
+ </xsl:when>
+ <xsl:when test="@type='polar' and not(@base) and child::m:sep[1]">
+ <m:mrow>
+ <m:mo>Polar</m:mo>
+ <m:mfenced separators=",">
+ <m:mn> <xsl:apply-templates select="text()[1]" mode = "semantics"/> </m:mn>
+ <m:mn> <xsl:apply-templates select="text()[2]" mode = "semantics"/> </m:mn>
+ </m:mfenced>
+ </m:mrow>
+ </xsl:when>
+ <xsl:when test="@type='polar' and @base and child::m:sep[1]">
+ <m:msub>
+ <m:mrow>
+ <m:mo>Polar</m:mo>
+ <m:mfenced separators=",">
+ <m:mn> <xsl:apply-templates select="text()[1]" mode = "semantics"/> </m:mn>
+ <m:mn> <xsl:apply-templates select="text()[2]" mode = "semantics"/> </m:mn>
+ </m:mfenced>
+ </m:mrow>
+ <m:mn> <xsl:value-of select="@base"/> </m:mn>
+ </m:msub>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mn> <xsl:apply-templates mode = "semantics"/> </m:mn>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:ci">
+ <xsl:choose>
+ <xsl:when test="@type='vector' or @type=matrix or @type=set">
+ <m:mi fontweight="bold"> <xsl:apply-templates mode = "semantics"/> </m:mi>
+ </xsl:when>
+ <xsl:otherwise>
+<!-- HELM: aggiunta choose temporanea per HREF invece di:
+<m:mi> <xsl:apply-templates mode = "semantics"/> </m:mi>-->
+ <xsl:choose>
+ <xsl:when test="string(@definitionURL) = """>
+ <m:mi> <xsl:apply-templates mode = "semantics"/> </m:mi>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mi xlink:href="{@definitionURL}"> <xsl:apply-templates mode = "semantics"/> </m:mi>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:csymbol">
+ <xsl:choose>
+ <xsl:when test="*[1]">
+ <xsl:copy-of select = "*"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mo> <xsl:apply-templates mode = "semantics"/> </m:mo>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+
+<!-- BASIC CONTENT ELEMENTS -->
+
+<xsl:template match = "m:apply[m:fn[1]]">
+ <m:mrow>
+ <xsl:apply-templates select = "m:fn[1]" mode = "semantics"/>
+ <m:mfenced separators=",">
+ <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
+ </m:mfenced>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:fn">
+ <xsl:apply-templates select = "*[1]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
+ </xsl:apply-templates>
+</xsl:template>
+
+<xsl:template match = "m:interval">
+ <xsl:choose>
+ <xsl:when test="@closure='closed'">
+ <m:mfenced open="[" close="]" separators=",">
+ <xsl:apply-templates mode = "semantics"/>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="@closure='open'">
+ <m:mfenced separators=",">
+ <xsl:apply-templates mode = "semantics"/>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="@closure='open-closed'">
+ <m:mfenced open="(" close="]" separators=",">
+ <xsl:apply-templates mode = "semantics"/>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="@closure='closed-open'">
+ <m:mfenced open="[" close=")" separators=",">
+ <xsl:apply-templates mode = "semantics"/>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mfenced open="[" close="]" separators=",">
+ <xsl:apply-templates mode = "semantics"/>
+ </m:mfenced>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:*[1][self::m:apply[m:inverse[1]]]]">
+ <m:mrow>
+ <xsl:apply-templates select = "*[1]" mode = "semantics"/>
+ <m:mfenced separators=",">
+ <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
+ </m:mfenced>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[*[1][self::m:inverse]]">
+ <xsl:choose>
+ <xsl:when test="*[2]=m:exp">
+ <m:mo>ln</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:ln | m:log">
+ <m:mo>exp</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:sin">
+ <m:mo>arcsin</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:cos">
+ <m:mo>arccos</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:tan">
+ <m:mo>arctan</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:sec">
+ <m:mo>arcsec</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:csc">
+ <m:mo>arccsc</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:cot">
+ <m:mo>arccot</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:sinh">
+ <m:mo>arcsinh</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:cosh">
+ <m:mo>arccosh</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:tanh">
+ <m:mo>arctanh</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:sech">
+ <m:mo>arcsech</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:csch">
+ <m:mo>arccsch</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:coth">
+ <m:mo>arccoth</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:arcsin">
+ <m:mo>sin</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:arccos">
+ <m:mo>cos</m:mo>
+ </xsl:when>
+ <xsl:when test="*[2]=m:arctan">
+ <m:mo>tan</m:mo>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:msup>
+ <xsl:apply-templates select = "*[2]" mode = "semantics"/>
+ <m:mfenced>
+ <m:mn>-1</m:mn>
+ </m:mfenced>
+ </m:msup>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:sep"/>
+
+<xsl:template match = "m:condition">
+ <xsl:choose>
+ <xsl:when test="parent::m:apply[m:forall[1]]"/>
+ <xsl:otherwise>
+ <xsl:if test="not(*[2])">
+ <xsl:apply-templates mode = "semantics"/>
+ </xsl:if>
+ <xsl:if test="*[2]">
+ <m:mrow>
+ <xsl:apply-templates mode = "semantics"/>
+ </m:mrow>
+ </xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:declare"/>
+
+<xsl:template match = "m:lambda">
+ <m:mrow>
+ <m:mo> Λ </m:mo>
+ <m:mfenced separators=",">
+ <xsl:for-each select = "*">
+ <xsl:choose>
+ <xsl:when test="self::m:ci or self::m:cn">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mrow>
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </m:mrow>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </m:mfenced>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:*[1][self::m:apply[m:compose[1]]]]">
+ <m:mrow>
+ <xsl:apply-templates select = "*[1]" mode = "semantics"/>
+ <m:mfenced separators=",">
+ <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
+ </m:mfenced>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[*[1][self::m:compose]]">
+ <m:mfenced separators="">
+ <xsl:apply-templates select = "m:*[2][self::m:ci[@type='fn'] | self::m:fn]" mode="semantics"/>
+ <xsl:for-each select = "m:*[position()>2][self::m:ci[@type='fn'] | self::m:fn]">
+ <m:mo> <mchar name="SmallCircle"/> </m:mo>
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+</xsl:template>
+
+<xsl:template match = "m:ident">
+ <m:mo>id</m:mo>
+</xsl:template>
+
+
+<!-- ARITHMETIC, ALGEBRA & LOGIC -->
+
+<xsl:template match = "m:apply[m:quotient[1]]">
+ <m:mfenced open="⌊" close="⌋" separators="">
+ <xsl:apply-templates select="*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
+ </xsl:apply-templates>
+ <m:mo>/</m:mo>
+ <xsl:apply-templates select="*[3]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ </m:mfenced>
+</xsl:template>
+
+<xsl:template match = "m:apply[*[1][self::m:exp]]">
+ <m:msup>
+ <m:mo>e</m:mo>
+ <xsl:apply-templates select = "*[2]" mode = "semantics"/>
+ </m:msup>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:factorial[1]]">
+ <m:mrow>
+ <xsl:apply-templates select = "*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ <m:mo>!</m:mo>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:max[1] | m:min[1]]">
+ <m:mrow>
+ <xsl:if test="*[2]=m:bvar">
+ <m:munder>
+ <xsl:if test="*[1]=m:max">
+ <m:mo>max</m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:min">
+ <m:mo>min</m:mo>
+ </xsl:if>
+ <xsl:apply-templates select="*[2]" mode = "semantics"/>
+ </m:munder>
+ <xsl:if test="*[3]=m:condition">
+ <m:mfenced open="{{" close="}}" separators="">
+ <m:mfenced open="" close="" separators=",">
+ <xsl:for-each select = "*[position()>3]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ <m:mo>|</m:mo>
+ <xsl:apply-templates select="*[3]" mode = "semantics"/>
+ </m:mfenced>
+ </xsl:if>
+ <xsl:if test="not(*[3]=m:condition)">
+ <m:mfenced open="{{" close="}}" separators=",">
+ <xsl:for-each select = "*[position()>2]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ </xsl:if>
+ </xsl:if>
+ <xsl:if test="*[2]=m:condition">
+ <xsl:if test="*[1]=m:max">
+ <m:mo>max</m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:min">
+ <m:mo>min</m:mo>
+ </xsl:if>
+ <m:mfenced open="{{" close="}}" separators="">
+ <xsl:if test="*[3]">
+ <m:mfenced open="" close="" separators=",">
+ <xsl:for-each select = "*[position()>2]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ <m:mo>|</m:mo>
+ </xsl:if>
+ <xsl:apply-templates select="*[2]" mode = "semantics"/>
+ </m:mfenced>
+ </xsl:if>
+ <xsl:if test="not(*[2]=m:condition) and not(*[2]=m:bvar)">
+ <xsl:if test="*[1]=m:max">
+ <m:mo>max</m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:min">
+ <m:mo>min</m:mo>
+ </xsl:if>
+ <m:mfenced open="{{" close="}}" separators=",">
+ <xsl:for-each select = "*[position()>1]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ </xsl:if>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:minus[1]]">
+ <xsl:param name="IN_PREC" select="$NO_PREC"/>
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:choose>
+ <xsl:when test="$IN_PREC > $MINUS_PREC or $IN_PREC=$MINUS_PREC and $PARAM=$PAR_SAME">
+ <m:mfenced separators="">
+ <xsl:apply-templates select="." mode="minus">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAR_YES"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="$IN_PREC > $NO_PREC and $IN_PREC < $FUNCTION_PREC and not($SEM_SW=2)">
+ <xsl:apply-templates select="." mode="minus">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mrow>
+ <xsl:apply-templates select="." mode="minus">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mrow>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:minus[1]]" mode="minus">
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:if test="not(*[3])">
+ <m:mo>-</m:mo>
+ <xsl:apply-templates select="*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$NEG_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ </xsl:if>
+ <xsl:if test="*[3]">
+ <xsl:apply-templates select="*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$MINUS_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <m:mo>-</m:mo>
+ <xsl:apply-templates select="*[3]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$MINUS_PREC"/>
+ <xsl:with-param name="PARAM" select="$PAR_SAME"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:plus[1]]">
+ <xsl:param name="IN_PREC" select="$NO_PREC"/>
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:choose>
+ <xsl:when test="$IN_PREC > $PLUS_PREC or $IN_PREC=$PLUS_PREC and $PARAM=$PAR_SAME">
+ <m:mfenced separators="">
+ <xsl:apply-templates select="." mode="plus">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAR_YES"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="$IN_PREC > $NO_PREC and $IN_PREC < $FUNCTION_PREC and not($SEM_SW=2)">
+ <xsl:apply-templates select="." mode="plus">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mrow>
+ <xsl:apply-templates select="." mode="plus">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mrow>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:plus[1]]" mode="plus">
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:if test="*[2]">
+ <xsl:apply-templates select="*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$PLUS_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <xsl:for-each select = "*[position()>2]">
+ <xsl:choose>
+ <xsl:when test=". < 0">
+ <m:mo>-</m:mo>
+ <m:mn> <xsl:value-of select="-."/> </m:mn>
+ </xsl:when>
+ <xsl:when test="self::m:apply[m:minus[1]] and not(*[3])">
+ <xsl:apply-templates select="." mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$PLUS_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mo>+</m:mo>
+ <xsl:apply-templates select="." mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$PLUS_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:power[1]]">
+ <xsl:choose>
+ <xsl:when test="*[2]=m:apply[m:ln[1] | m:log[1] | m:abs[1] | m:gcd[1] | m:sin[1] | m:cos[1] | m:tan[1] | m:sec[1] | m:csc[1] | m:cot[1] | m:sinh[1] | m:cosh[1] | m:tanh[1] | m:sech[1] | m:csch[1] | m:coth[1] | m:arcsin[1] | m:arccos[1] | m:arctan[1]]">
+ <xsl:apply-templates select="*[2]" mode = "semantics"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:msup>
+ <xsl:apply-templates select = "*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ <xsl:apply-templates select = "*[3]" mode = "semantics"/>
+ </m:msup>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:rem[1] | m:divide[1]]">
+ <xsl:param name="IN_PREC" select="$NO_PREC"/>
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:choose>
+ <xsl:when test="$IN_PREC > $DIV_PREC or $IN_PREC=$DIV_PREC and $PARAM=$PAR_SAME">
+ <m:mfenced separators="">
+ <xsl:apply-templates select="." mode="remdiv">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAR_YES"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="$IN_PREC > $NO_PREC and $IN_PREC < $FUNCTION_PREC and not($SEM_SW=2)">
+ <xsl:apply-templates select="." mode="remdiv">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mrow>
+ <xsl:apply-templates select="." mode="remdiv">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mrow>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:rem[1] | m:divide[1]]" mode="remdiv">
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:apply-templates select = "*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$DIV_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <xsl:if test="m:rem">
+ <m:mo>%</m:mo>
+ </xsl:if>
+ <xsl:if test="m:divide">
+ <m:mo>/</m:mo>
+ </xsl:if>
+ <xsl:apply-templates select = "*[3]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$DIV_PREC"/>
+ <xsl:with-param name="PARAM" select="$PAR_SAME"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:times[1]]">
+ <xsl:param name="IN_PREC" select="$NO_PREC"/>
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:choose>
+ <xsl:when test="$IN_PREC > $MUL_PREC or $IN_PREC=$MUL_PREC and $PARAM=$PAR_SAME">
+ <m:mfenced separators="">
+ <xsl:apply-templates select="." mode="times">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAR_YES"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="$IN_PREC > $NO_PREC and $IN_PREC < $FUNCTION_PREC and not($SEM_SW=2)">
+ <xsl:apply-templates select="." mode="times">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mrow>
+ <xsl:apply-templates select="." mode="times">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mrow>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:times[1]]" mode="times">
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:apply-templates select="*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$MUL_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <xsl:if test="*[3]">
+ <xsl:for-each select = "*[position()>2]">
+ <m:mo> <mchar name="InvisibleTimes"/> </m:mo>
+ <xsl:apply-templates select="." mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$MUL_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ </xsl:for-each>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:root[1]]">
+ <m:msqrt>
+ <xsl:if test="*[2]=m:degree">
+ <xsl:apply-templates select="*[3]" mode = "semantics"/>
+ <xsl:apply-templates select="*[2]" mode = "semantics"/>
+ </xsl:if>
+ <xsl:if test="not(*[2]=m:degree)">
+ <xsl:apply-templates select="*[2]" mode = "semantics"/>
+ <m:mn>2</m:mn>
+ </xsl:if>
+ </m:msqrt>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:gcd[1]]">
+ <m:mrow>
+ <xsl:if test="not(parent::m:apply[m:power[1]])">
+ <m:mo>gcd</m:mo>
+ </xsl:if>
+ <xsl:if test="parent::m:apply[m:power[1]]">
+ <m:msup>
+ <m:mo>gcd</m:mo>
+ <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
+ </m:msup>
+ </xsl:if>
+ <m:mfenced separators=",">
+ <xsl:for-each select = "*[position()>1]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:and[1]]">
+ <xsl:param name="IN_PREC" select="$NO_PREC"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:choose>
+ <xsl:when test="$IN_PREC > $AND_PREC">
+ <m:mfenced separators="">
+ <xsl:apply-templates select="." mode="and">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAR_YES"/>
+ </xsl:apply-templates>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="$IN_PREC > $NO_PREC and $IN_PREC < $FUNCTION_PREC and not($SEM_SW=2)">
+ <xsl:apply-templates select="." mode="and">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mrow>
+ <xsl:apply-templates select="." mode="and">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mrow>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:and[1]]" mode="and">
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:apply-templates select="*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$AND_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <xsl:for-each select = "*[position()>2]">
+ <m:mo> <mchar name="wedge"/> </m:mo>
+ <xsl:apply-templates select="." mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$AND_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:or[1]]">
+ <xsl:param name="IN_PREC" select="$NO_PREC"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:choose>
+ <xsl:when test="$IN_PREC > $OR_PREC">
+ <m:mfenced separators="">
+ <xsl:apply-templates select="." mode="or">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAR_YES"/>
+ </xsl:apply-templates>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="$IN_PREC > $NO_PREC and $IN_PREC < $FUNCTION_PREC and not($SEM_SW=2)">
+ <xsl:apply-templates select="." mode="or">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mrow>
+ <xsl:apply-templates select="." mode="or">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mrow>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:or[1]]" mode="or">
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:apply-templates select="*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$OR_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <xsl:for-each select = "*[position()>2]">
+ <m:mo> <mchar name="vee"/> </m:mo>
+ <xsl:apply-templates select="." mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$OR_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:xor[1]]">
+ <xsl:param name="IN_PREC" select="$NO_PREC"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:choose>
+ <xsl:when test="$IN_PREC > $XOR_PREC">
+ <m:mfenced separators="">
+ <xsl:apply-templates select="." mode="xor">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAR_YES"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="$IN_PREC > $NO_PREC and $IN_PREC < $FUNCTION_PREC and not($SEM_SW=2)">
+ <xsl:apply-templates select="." mode="xor">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mrow>
+ <xsl:apply-templates select="." mode="xor">
+ <xsl:with-param name="PARAM" select="$IN_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mrow>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:xor[1]]" mode="xor">
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:apply-templates select="*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$XOR_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <xsl:for-each select = "*[position()>2]">
+ <m:mo> <mchar name="xor"/> </m:mo>
+ <xsl:apply-templates select="." mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$XOR_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:not[1]]">
+ <m:mrow>
+ <m:mo>not</m:mo>
+ <xsl:apply-templates select = "*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
+ </xsl:apply-templates>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:forall[1]]">
+ <m:mrow>
+ <m:mo>for all</m:mo>
+ <m:mfenced separators=",">
+ <xsl:for-each select = "m:bvar">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ <xsl:if test="m:condition">
+ <m:mo>:</m:mo>
+ <xsl:apply-templates select = "m:condition/*" mode = "semantics"/>
+ <m:mo>,</m:mo>
+ </xsl:if>
+ <xsl:apply-templates select = "*[position()>1 and not(self::m:bvar) and not(self::m:condition)]" mode = "semantics"/>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:exists[1]]">
+ <m:mrow>
+ <m:mo> <mchar name="Exists"/> </m:mo>
+ <m:mfenced separators=",">
+ <xsl:for-each select = "m:bvar">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ <xsl:if test="m:condition">
+ <m:mo>,</m:mo>
+ <xsl:apply-templates select = "m:condition/*" mode = "semantics"/>
+ </xsl:if>
+ <m:mo>:</m:mo>
+ <xsl:apply-templates select = "*[position()>1 and not(self::m:bvar) and not(self::m:condition)]" mode = "semantics"/>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:abs[1]]">
+ <xsl:if test="not(parent::m:apply[m:power[1]])">
+ <m:mfenced open="|" close="|" separators="">
+ <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
+ </m:mfenced>
+ </xsl:if>
+ <xsl:if test="parent::m:apply[m:power[1]]">
+ <m:msup>
+ <m:mfenced open="|" close="|" separators="">
+ <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
+ </m:mfenced>
+ <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
+ </m:msup>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:conjugate[1]]">
+ <m:mover>
+ <m:mrow>
+ <xsl:apply-templates select = "*[position()>1]" mode = "semantics"/>
+ </m:mrow>
+ <m:mo> <mchar name="UnderBar"/> </m:mo>
+ </m:mover>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:arg[1] | m:real[1] | m:imaginary[1]]">
+ <m:mrow>
+ <xsl:choose>
+ <xsl:when test="m:arg">
+ <m:mo>arg</m:mo>
+ </xsl:when>
+ <xsl:when test="m:real">
+ <m:mo>Real</m:mo>
+ </xsl:when>
+ <xsl:when test="m:imaginary">
+ <m:mo>Imaginary</m:mo>
+ </xsl:when>
+ </xsl:choose>
+ <m:mfenced separators="">
+ <xsl:apply-templates select = "*[2]" mode = "semantics"/>
+ </m:mfenced>
+ </m:mrow>
+</xsl:template>
+
+
+<!-- RELATIONS -->
+
+<xsl:template match = "m:apply[m:neq | m:approx | m:tendsto | m:implies | m:in | m:notin | m:notsubset | m:notprsubset | m:subset | m:prsubset | m:eq | m:gt | m:lt | m:geq | m:leq | m:equivalent]">
+ <m:mrow>
+ <xsl:if test="*[1]=m:neq or *[1]=m:approx or *[1]=m:tendsto or *[1]=m:implies or *[1]=m:in or *[1]=m:notin or *[1]=m:notsubset or *[1]=m:notprsubset">
+ <xsl:apply-templates select = "*[2]" mode = "semantics"/>
+ <xsl:if test="*[1]=m:neq">
+ <m:mo> <mchar name="NotEqual"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:approx">
+ <m:mo> <mchar name="approxeq"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:tendsto">
+ <m:mo> <mchar name="RightArrow"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:implies">
+ <m:mo> <mchar name="DoubleRightArrow"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:in">
+ <m:mo> <mchar name="Element"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:notin">
+ <m:mo> <mchar name="NotElement"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:notsubset">
+ <m:mo> <mchar name="NotSubset"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:notprsubset">
+ <m:mo> <mchar name="NotSubsetEqual"/> </m:mo>
+ </xsl:if>
+ <xsl:apply-templates select = "*[3]" mode = "semantics"/>
+ <xsl:if test="*[1]=m:tendsto and m:tendsto[1][@type='below']">
+ <m:mo>-</m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:tendsto and m:tendsto[1][@type='above']">
+ <m:mo>+</m:mo>
+ </xsl:if>
+ </xsl:if>
+ <xsl:if test="*[1]=m:subset or *[1]=m:prsubset or *[1]=m:eq or *[1]=m:gt or *[1]=m:lt or *[1]=m:geq or *[1]=m:leq or *[1]=m:equivalent">
+ <xsl:apply-templates select = "*[2]" mode="semantics"/>
+ <xsl:for-each select = "*[position()>2]">
+ <xsl:if test="../*[self::m:subset][1]">
+ <m:mo> <mchar name="SubsetEqual"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="../*[self::m:prsubset][1]">
+ <m:mo> <mchar name="subset"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="../*[self::m:eq][1]">
+ <m:mo>=</m:mo>
+ </xsl:if>
+ <xsl:if test="../*[self::m:gt][1]">
+ <m:mo>></m:mo>
+ </xsl:if>
+ <xsl:if test="../*[self::m:lt][1]">
+ <m:mo><</m:mo>
+ </xsl:if>
+ <xsl:if test="../*[self::m:geq][1]">
+ <m:mo> <mchar name="geq"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="../*[self::m:leq][1]">
+ <m:mo> <mchar name="leq"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="../*[self::m:equivalent][1]">
+ <m:mo> <mchar name="Congruent"/> </m:mo>
+ </xsl:if>
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </xsl:if>
+ </m:mrow>
+</xsl:template>
+
+
+<!-- CALCULUS -->
+
+<xsl:template match = "m:apply[*[1][self::m:ln]]">
+ <m:mrow>
+ <xsl:choose>
+ <xsl:when test="parent::m:apply[m:power[1]]">
+ <m:msup>
+ <m:mo>ln</m:mo>
+ <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
+ </m:msup>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mo>ln</m:mo>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:apply-templates select = "*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
+ </xsl:apply-templates>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:log[1]]">
+ <m:mrow>
+ <xsl:choose>
+ <xsl:when test="parent::m:apply[m:power[1]]">
+ <xsl:if test="not(*[2]=m:logbase)">
+ <m:msup>
+ <m:mo>log</m:mo>
+ <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
+ </m:msup>
+ </xsl:if>
+ <xsl:if test="*[2]=m:logbase">
+ <m:msubsup>
+ <m:mo>log</m:mo>
+ <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
+ <xsl:apply-templates select = "m:logbase" mode = "semantics"/>
+ </m:msubsup>
+ </xsl:if>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:if test="not(*[2]=m:logbase)">
+ <m:mo>log</m:mo>
+ </xsl:if>
+ <xsl:if test="*[2]=m:logbase">
+ <m:msub>
+ <m:mo>log</m:mo>
+ <xsl:apply-templates select = "m:logbase" mode = "semantics"/>
+ </m:msub>
+ </xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:if test="*[2]=m:logbase">
+ <xsl:apply-templates select = "*[3]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
+ </xsl:apply-templates>
+ </xsl:if>
+ <xsl:if test="not(*[2]=m:logbase)">
+ <xsl:apply-templates select = "*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
+ </xsl:apply-templates>
+ </xsl:if>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:diff[1]]">
+ <m:mrow>
+ <xsl:if test="*[2]=m:bvar and m:bvar[*[2]=m:degree]">
+ <m:mfrac>
+ <m:msup>
+ <m:mo>d</m:mo>
+ <xsl:apply-templates select = "m:bvar/m:degree" mode = "semantics"/>
+ </m:msup>
+ <m:mrow>
+ <m:mo>d</m:mo>
+ <m:msup>
+ <xsl:apply-templates select = "m:bvar/*[1]" mode = "semantics"/>
+ <xsl:apply-templates select = "m:bvar/m:degree" mode = "semantics"/>
+ </m:msup>
+ </m:mrow>
+ </m:mfrac>
+ </xsl:if>
+ <xsl:if test="*[2]=m:bvar and not(m:bvar[*[2]=m:degree])">
+ <m:mfrac>
+ <m:mo>d</m:mo>
+ <m:mrow>
+ <m:mo>d</m:mo>
+ <xsl:apply-templates select = "m:bvar/*[1]" mode = "semantics"/>
+ </m:mrow>
+ </m:mfrac>
+ </xsl:if>
+ <xsl:apply-templates select = "*[3]" mode = "semantics"/>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:partialdiff[1]]">
+ <m:mrow>
+ <xsl:for-each select = "m:bvar">
+ <xsl:if test="*[last()]=m:degree">
+ <m:mfrac>
+ <m:msup>
+ <m:mo>d</m:mo>
+ <xsl:apply-templates select = "m:degree" mode = "semantics"/>
+ </m:msup>
+ <m:mrow>
+ <m:mo>d</m:mo>
+ <m:msup>
+ <xsl:apply-templates select = "*[1]" mode = "semantics"/>
+ <xsl:apply-templates select = "m:degree" mode = "semantics"/>
+ </m:msup>
+ </m:mrow>
+ </m:mfrac>
+ </xsl:if>
+ <xsl:if test="not(*[last()]=m:degree)">
+ <m:mfrac>
+ <m:mo>d</m:mo>
+ <m:mrow>
+ <m:mo>d</m:mo>
+ <xsl:apply-templates select = "*[1]" mode = "semantics"/>
+ </m:mrow>
+ </m:mfrac>
+ </xsl:if>
+ </xsl:for-each>
+ <xsl:apply-templates select = "*[last()]" mode = "semantics"/>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:lowlimit | m:uplimit | m:bvar | m:degree | m:logbase">
+ <xsl:apply-templates mode = "semantics"/>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:divergence[1] | m:grad[1] | m:curl[1]]">
+ <m:mrow>
+ <xsl:if test="*[1]=m:divergence">
+ <m:mo>div</m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:grad">
+ <m:mo>grad</m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:curl">
+ <m:mo>curl</m:mo>
+ </xsl:if>
+ <xsl:choose>
+ <xsl:when test="*[2]=m:ci">
+ <xsl:apply-templates select = "*[2]" mode = "semantics"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mfenced separators="">
+ <xsl:apply-templates select = "*[2]" mode = "semantics"/>
+ </m:mfenced>
+ </xsl:otherwise>
+ </xsl:choose>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:laplacian[1]]">
+ <m:mrow>
+ <m:msup>
+ <m:mo> Δ </m:mo>
+ <m:mn>2</m:mn>
+ </m:msup>
+ <xsl:apply-templates select = "*[2]" mode = "semantics"/>
+ </m:mrow>
+</xsl:template>
+
+
+<!-- SET THEORY -->
+
+<xsl:template match = "m:set | m:list">
+ <m:mfenced open="{{" close="}}" separators="">
+ <xsl:if test="*[1]=m:bvar and *[2]=m:condition">
+ <xsl:apply-templates select="m:bvar" mode = "semantics"/>
+ <m:mo>|</m:mo>
+ <xsl:apply-templates select="m:condition" mode = "semantics"/>
+ </xsl:if>
+ <xsl:if test="*[1]=m:condition and not(child::m:bvar)">
+ <m:mfenced open="" close="" separators=",">
+ <xsl:for-each select = "*[not(self::m:condition) and not(self::m:bvar)]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ <m:mo>|</m:mo>
+ <xsl:apply-templates select="m:condition" mode = "semantics"/>
+ </xsl:if>
+ <xsl:if test="not(child::m:bvar) and not(child::m:condition)">
+ <m:mfenced open="" close="" separators=",">
+ <xsl:for-each select = "*">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ </xsl:if>
+ </m:mfenced>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:union[1]]">
+ <xsl:param name="IN_PREC" select="$NO_PREC"/>
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:choose>
+ <xsl:when test="$IN_PREC > $UNION_PREC or $IN_PREC=$UNION_PREC and $PARAM=$PAR_SAME">
+ <m:mfenced separators="">
+ <xsl:apply-templates select="." mode="union">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="$IN_PREC > $NO_PREC and $IN_PREC < $FUNCTION_PREC and not($SEM_SW=2)">
+ <xsl:apply-templates select="." mode="union">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mrow>
+ <xsl:apply-templates select="." mode="union">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mrow>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:union[1]]" mode="union">
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:apply-templates select = "*[2]" mode="semantics">
+ <xsl:with-param name="IN_PREC" select="$UNION_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <xsl:for-each select = "*[position()>2]">
+ <m:mo> <mchar name="Union"/> </m:mo>
+ <xsl:apply-templates select = "." mode="semantics">
+ <xsl:with-param name="IN_PREC" select="$UNION_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:intersect[1]]">
+ <xsl:param name="IN_PREC" select="$NO_PREC"/>
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:choose>
+ <xsl:when test="$IN_PREC > $INTERSECT_PREC">
+ <m:mfenced separators="">
+ <xsl:apply-templates select="." mode="intersect">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="$IN_PREC > $NO_PREC and $IN_PREC < $FUNCTION_PREC and not($SEM_SW=2)">
+ <xsl:apply-templates select="." mode="intersect">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mrow>
+ <xsl:apply-templates select="." mode="intersect">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mrow>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:intersect[1]]" mode="intersect">
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:apply-templates select = "*[2]" mode="semantics">
+ <xsl:with-param name="IN_PREC" select="$INTERSECT_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <xsl:for-each select = "*[position()>2]">
+ <m:mo> <mchar name="Intersection"/> </m:mo>
+ <xsl:apply-templates select = "." mode="semantics">
+ <xsl:with-param name="IN_PREC" select="$INTERSECT_PREC"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:setdiff[1]]">
+ <xsl:param name="IN_PREC" select="$NO_PREC"/>
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:choose>
+ <xsl:when test="$IN_PREC > $SETDIFF_PREC or $IN_PREC=$SETDIFF_PREC and $PARAM=$PAR_SAME">
+ <m:mfenced separators="">
+ <xsl:apply-templates select="." mode="setdiff">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mfenced>
+ </xsl:when>
+ <xsl:when test="$IN_PREC > $NO_PREC and $IN_PREC < $FUNCTION_PREC and not($SEM_SW=2)">
+ <xsl:apply-templates select="." mode="setdiff">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mrow>
+ <xsl:apply-templates select="." mode="setdiff">
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ </m:mrow>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:setdiff[1]]" mode="setdiff">
+ <xsl:param name="PARAM" select="$NO_PARAM"/>
+ <xsl:param name="PAREN" select="$PAR_NO"/>
+ <xsl:param name="PAR_NO_IGNORE" select="$YES"/>
+ <xsl:apply-templates select = "*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$SETDIFF_PREC"/>
+ <xsl:with-param name="PARAM" select="$PARAM"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$PAR_NO_IGNORE"/>
+ </xsl:apply-templates>
+ <m:mo>\</m:mo>
+ <xsl:apply-templates select = "*[3]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$SETDIFF_PREC"/>
+ <xsl:with-param name="PARAM" select="$PAR_SAME"/>
+ <xsl:with-param name="PAREN" select="$PAREN"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:card[1]]">
+ <m:mfenced open="|" close="|" separators=",">
+ <xsl:for-each select = "*[position()>1]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+</xsl:template>
+
+
+<!-- SEQUENCES AND SERIES -->
+
+<xsl:template match = "m:apply[m:sum[1] | m:product[1]]">
+ <m:mrow>
+ <xsl:choose>
+ <xsl:when test="*[2]=m:bvar and m:lowlimit and m:uplimit">
+ <m:munderover>
+ <xsl:if test="*[1]=m:sum">
+ <m:mo> <mchar name="Sum"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:product">
+ <m:mo> <mchar name="Product"/> </m:mo>
+ </xsl:if>
+ <m:mrow>
+ <xsl:apply-templates select = "*[2]" mode = "semantics"/>
+ <m:mo>=</m:mo>
+ <xsl:apply-templates select = "m:lowlimit" mode = "semantics"/>
+ </m:mrow>
+ <xsl:apply-templates select = "m:uplimit" mode = "semantics"/>
+ </m:munderover>
+ <xsl:apply-templates select = "*[5]" mode = "semantics"/>
+ </xsl:when>
+ <xsl:when test="*[2]=m:bvar and *[3]=m:condition">
+ <m:munder>
+ <xsl:if test="*[1]=m:sum">
+ <m:mo> <mchar name="Sum"/> </m:mo>
+ </xsl:if>
+ <xsl:if test="*[1]=m:product">
+ <m:mo> <mchar name="Product"/> </m:mo>
+ </xsl:if>
+ <xsl:apply-templates select = "*[3]" mode = "semantics"/>
+ </m:munder>
+ <xsl:apply-templates select = "*[4]" mode = "semantics"/>
+ </xsl:when>
+ </xsl:choose>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:limit[1]]">
+ <m:mrow>
+ <m:munder>
+ <m:mo>lim</m:mo>
+ <m:mrow>
+ <xsl:if test="*[2]=m:bvar and *[3]=m:lowlimit">
+ <xsl:apply-templates select = "*[2]" mode = "semantics"/>
+ <m:mo> <mchar name="RightArrow"/> </m:mo>
+ <xsl:apply-templates select = "*[3]" mode = "semantics"/>
+ </xsl:if>
+ <xsl:if test="*[2]=m:bvar and *[3]=m:condition">
+ <xsl:apply-templates select = "*[3]" mode = "semantics"/>
+ </xsl:if>
+ </m:mrow>
+ </m:munder>
+ <xsl:apply-templates select = "*[4]" mode = "semantics"/>
+ </m:mrow>
+</xsl:template>
+
+
+<!-- TRIGONOMETRY -->
+
+<xsl:template match = "m:apply[*[1][self::m:sin | self::m:cos | self::m:tan | self::m:sec | self::m:csc | self::m:cot | self::m:sinh | self::m:cosh | self::m:tanh | self::m:sech | self::m:csch | self::m:coth | self::m:arcsin | self::m:arccos | self::m:arctan]]">
+ <m:mrow>
+ <xsl:if test="not(parent::m:apply[m:power[1]])">
+ <xsl:apply-templates select = "*[1]" mode = "trigonometry"/>
+ </xsl:if>
+ <xsl:if test="parent::m:apply[m:power[1]]">
+ <m:msup>
+ <xsl:apply-templates select = "*[1]" mode = "trigonometry"/>
+ <xsl:apply-templates select = "../*[3]" mode = "semantics"/>
+ </m:msup>
+ </xsl:if>
+ <xsl:apply-templates select = "*[2]" mode = "semantics">
+ <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
+ <xsl:with-param name="PAR_NO_IGNORE" select="$NO"/>
+ </xsl:apply-templates>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:*" mode = "trigonometry">
+ <xsl:choose>
+ <xsl:when test="self::m:sin">
+ <m:mo>sin</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:cos">
+ <m:mo>cos</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:tan">
+ <m:mo>tan</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:sec">
+ <m:mo>sec</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:csc">
+ <m:mo>csc</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:cot">
+ <m:mo>cot</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:sinh">
+ <m:mo>sinh</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:cosh">
+ <m:mo>cosh</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:tanh">
+ <m:mo>tanh</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:sech">
+ <m:mo>sech</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:csch">
+ <m:mo>csch</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:coth">
+ <m:mo>coth</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:arcsin">
+ <m:mo>arcsin</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:arccos">
+ <m:mo>arccos</m:mo>
+ </xsl:when>
+ <xsl:when test="self::m:arctan">
+ <m:mo>arctan</m:mo>
+ </xsl:when>
+ </xsl:choose>
+</xsl:template>
+
+
+<!-- STATISTICS -->
+
+<xsl:template match = "m:apply[m:mean[1]]">
+ <m:mfenced open="<" close=">" separators=",">
+ <xsl:for-each select = "*[position()>1]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:sdev[1]]">
+ <m:mrow>
+ <m:mo> σ </m:mo>
+ <m:mfenced separators=",">
+ <xsl:for-each select = "*[position()>1]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:variance[1]]">
+ <m:mrow>
+ <m:mo> σ </m:mo>
+ <m:msup>
+ <m:mfenced separators=",">
+ <xsl:for-each select = "*[position()>1]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ <m:mn>2</m:mn>
+ </m:msup>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:median[1]]">
+ <m:mrow>
+ <m:mo>median</m:mo>
+ <m:mfenced separators=",">
+ <xsl:for-each select = "*[position()>1]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:mode[1]]">
+ <m:mrow>
+ <m:mo>mode</m:mo>
+ <m:mfenced separators=",">
+ <xsl:for-each select = "*[position()>1]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </m:mfenced>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:moment[1]]">
+ <m:mfenced open="<" close=">" separators="">
+ <xsl:if test="*[2]=m:degree">
+ <m:msup>
+ <xsl:apply-templates select="*[3]" mode = "semantics"/>
+ <xsl:apply-templates select="*[2]" mode = "semantics"/>
+ </m:msup>
+ </xsl:if>
+ <xsl:if test="not(*[2]=m:degree)">
+ <xsl:for-each select = "*[position()>1]">
+ <xsl:apply-templates select = "." mode="semantics"/>
+ </xsl:for-each>
+ </xsl:if>
+ </m:mfenced>
+</xsl:template>
+
+
+<!-- LINEAR ALGEBRA -->
+
+<xsl:template match="m:vector">
+ <m:mfenced separators="">
+ <m:mtable>
+ <xsl:for-each select="*">
+ <m:mtd>
+ <xsl:apply-templates select="." mode = "semantics"/>
+ </m:mtd>
+ </xsl:for-each>
+ </m:mtable>
+ </m:mfenced>
+</xsl:template>
+
+<xsl:template match = "m:matrix">
+ <m:mfenced separators="">
+ <m:mtable>
+ <xsl:apply-templates mode = "semantics"/>
+ </m:mtable>
+ </m:mfenced>
+</xsl:template>
+
+<xsl:template match = "m:matrixrow">
+ <m:mtr>
+ <xsl:for-each select="*">
+ <m:mtd>
+ <xsl:apply-templates select="." mode = "semantics"/>
+ </m:mtd>
+ </xsl:for-each>
+ </m:mtr>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:determinant[1]]">
+ <m:mrow>
+ <m:mo>det</m:mo>
+ <xsl:apply-templates select = "*[2]" mode = "semantics"/>
+ </m:mrow>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:transpose[1]]">
+ <m:msup>
+ <xsl:apply-templates select = "*[2]" mode = "semantics"/>
+ <m:mo>T</m:mo>
+ </m:msup>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:selector[1]]">
+ <xsl:if test="*[2]=m:matrix and *[3]=m:cn">
+ <xsl:variable name="m" select = "*[3]"/>
+ <xsl:choose>
+ <xsl:when test="*[4]=m:cn">
+ <xsl:variable name="n" select = "*[4]"/>
+ <xsl:copy-of select = "m:matrix/*[position()=$m]/*[position()=$n]"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:copy-of select = "m:matrix/*[position()=$m]"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:if>
+ <xsl:if test="(*[2]=m:vector or *[2]=m:list) and *[3]=m:cn">
+ <xsl:variable name="m" select = "*[3]"/>
+ <xsl:copy-of select = "*[2]/*[position()=$m]"/>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:vectorproduct[1] | m:scalarproduct[1] | m:outerproduct[1]]">
+ <m:mrow>
+ <xsl:apply-templates select="*[2]" mode = "semantics"/>
+ <xsl:choose>
+ <xsl:when test="m:vectorproduct[1]">
+ <m:mo> <mchar name="Cross"/> </m:mo>
+ </xsl:when>
+ <xsl:when test="m:scalarproduct[1] | m:outerproduct[1]">
+ <m:mo>.</m:mo>
+ </xsl:when>
+ </xsl:choose>
+ <xsl:apply-templates select="*[3]" mode = "semantics"/>
+ </m:mrow>
+</xsl:template>
+
+</xsl:stylesheet>
--- /dev/null
+<?xml version="1.0"?>
+
+<!--***********************************************************************-->
+<!-- Extension to the XSLT version 0.07 of MathML content to presentation: -->
+<!-- First draft: February 19 2000, Andrea Asperti, Irene Schena -->
+<!-- Revised: March 3 2000, Irene Schena -->
+<!-- Revised: March 15 2000, Claudio Sacerdoti Coen, Irene Schena -->
+<!-- Revised: March 21 2000, Irene Schena -->
+<!--***********************************************************************-->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:m="http://www.w3.org/1998/Math/MathML"
+ xmlns:helm="http://www.cs.unibo.it/helm">
+
+<xsl:import href="mml2mmlv1_0.xsl"/>
+
+<!--***********************************************************************-->
+<!-- Parameter affecting line-breaking -->
+<!--***********************************************************************-->
+
+<xsl:variable name="framewidth" select="30"/>
+
+<!--***********************************************************************-->
+<!-- Gli oggetti sono stampati come mtext all'interno di una marca toplevel-->
+<!-- math ma al di fuori di semantics. Ora vi sono tanti semantics quanti -->
+<!-- sono i termini: la presentation per un termine e' generata come primo -->
+<!-- figlio di un semantics e l'originario content viene inserito nel -->
+<!-- nel secondo figlio di semantics, annotation-xml -->
+<!--***********************************************************************-->
+
+<!--**********************-->
+<!-- OBJECTS -->
+<!--**********************-->
+
+<xsl:template match="/">
+ <xsl:processing-instruction name="cocoon-format">type="text/xhtml"</xsl:processing-instruction>
+ <xsl:apply-templates select="*"/>
+</xsl:template>
+
+<!-- DEFINITION -->
+
+<xsl:template match="Definition">
+ <m:math>
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left" helm:xref="{@helm:xref}">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mtext>DEFINITION <xsl:value-of select="@name"/>(<xsl:if test="string(./Params) != """><xsl:value-of select="Params"/></xsl:if>) OF TYPE</m:mtext>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
+ <xsl:apply-templates select="type/*[1]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mtext>AS</m:mtext>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
+ <xsl:apply-templates select="body/*[1]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </m:math>
+</xsl:template>
+
+<!-- AXIOM -->
+
+<xsl:template match="Axiom">
+ <m:math>
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left" helm:xref="{@helm:xref}">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mtext>AXIOM <xsl:value-of select="@name"/>(<xsl:if test="string(./Params) != """><xsl:value-of select="Params"/></xsl:if>) OF TYPE</m:mtext>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
+ <xsl:apply-templates select="type/*[1]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </m:math>
+</xsl:template>
+
+<!-- UNFINISHED PROOF -->
+
+<xsl:template match="CurrentProof">
+ <m:math>
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left" helm:xref="{@helm:xref}">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mtext>UNFINISHED PROOF <xsl:value-of select="@name"/>(<xsl:if test="string(./Params) != """><xsl:value-of select="Params"/></xsl:if>)</m:mtext>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mtext>THESIS:</m:mtext>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
+ <xsl:apply-templates select="type/*[1]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mtext>CONJECTURES:</m:mtext>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <xsl:for-each select="Conjecture">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
+ <m:mtext><xsl:value-of select="./@no"/>:</m:mtext>
+ <xsl:apply-templates select="./*[1]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </xsl:for-each>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mtext>CORRESPONDING PROOF:</m:mtext>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
+ <xsl:apply-templates select="body/*[1]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </m:math>
+</xsl:template>
+
+<!-- MUTUAL INDUCTIVE DEFINITION -->
+
+<xsl:template match="InductiveDefinition">
+ <m:math>
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left" helm:xref="{@helm:xref}">
+ <xsl:for-each select="InductiveType">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <xsl:choose>
+ <xsl:when test="position() = 1">
+ <xsl:choose>
+ <xsl:when test="string(./@inductive) = "true"">
+ <m:mtext>INDUCTIVE DEFINITION</m:mtext>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mtext>COINDUCTIVE DEFINITION</m:mtext>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mtext>AND</m:mtext>
+ </xsl:otherwise>
+ </xsl:choose>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <m:mtext><xsl:value-of select="./@name"/>(<xsl:if test="string(../Params) != """><xsl:value-of select="../Params"/></xsl:if>)</m:mtext>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
+ <m:mtext>[</m:mtext>
+ <xsl:choose>
+ <xsl:when test="string(../Param) != """>
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <xsl:for-each select="../Param">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mi><xsl:value-of select="./@name"/></m:mi>
+ <m:mo>:</m:mo>
+ <xsl:apply-templates select="*"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </xsl:for-each>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mtext>]</m:mtext>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mtext>]</m:mtext>
+ </xsl:otherwise>
+ </xsl:choose>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mtext>OF ARITY</m:mtext>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
+ <xsl:apply-templates select="./arity/*[1]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mtext>BUILT FROM</m:mtext>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <xsl:for-each select="./Constructor">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <xsl:choose>
+ <xsl:when test="position() = 1">
+ <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mtext>|</m:mtext>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ </xsl:otherwise>
+ </xsl:choose>
+ <m:mtext><xsl:value-of select="./@name"/> OF</m:mtext>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <xsl:apply-templates select="./*[1]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </xsl:for-each>
+ </xsl:for-each>
+ </m:mtable>
+ </m:math>
+</xsl:template>
+
+<!-- VARIABLE -->
+
+<xsl:template match="Variable">
+ <m:math>
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left" helm:xref="{@helm:xref}">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mtext>VARIABLE <xsl:value-of select="@name"/> OF TYPE</m:mtext>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
+ <xsl:apply-templates select="type/*[1]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </m:math>
+</xsl:template>
+
+<!--**********************-->
+<!-- TERMS -->
+<!--**********************-->
+
+<xsl:template match="m:bvar">
+ <xsl:choose>
+ <xsl:when test="m:type">
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="m:ci" mode="charcount"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$charlength >= $framewidth">
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <m:mtr>
+ <m:mtd>
+ <xsl:apply-templates select="m:ci"/>
+ <m:mo>:</m:mo>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <xsl:apply-templates select="m:type"/>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="m:ci"/>
+ <m:mo>:</m:mo>
+ <xsl:apply-templates select="m:type"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="m:ci"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+
+<!-- CSYMBOL -->
+
+<xsl:template match="m:apply[m:csymbol]">
+ <xsl:variable name="name"><xsl:value-of select="m:csymbol"/></xsl:variable>
+ <xsl:variable name="charlength"><xsl:apply-templates select="m:csymbol" mode="charcount"/></xsl:variable>
+ <m:mrow>
+ <xsl:if test="@helm:xref">
+ <xsl:attribute name="helm:xref"><xsl:value-of select="@helm:xref"/></xsl:attribute>
+ </xsl:if>
+ <xsl:choose>
+ <xsl:when test="$name='prod'">
+ <xsl:choose>
+ <xsl:when test="$charlength >= $framewidth">
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <m:mtr>
+ <m:mtd>
+ <m:mo color="Blue">Π</m:mo>
+ <xsl:apply-templates select="m:bvar"/>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo>.</m:mo>
+ <xsl:apply-templates select="*[position()=3]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mo color="Blue">Π</m:mo>
+ <xsl:apply-templates select="m:bvar/m:ci"/>
+ <m:mo>:</m:mo>
+ <xsl:apply-templates select="m:bvar/m:type"/>
+ <m:mo>.</m:mo>
+ <xsl:apply-templates select="*[position()=3]"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:when test="$name='arrow'">
+ <xsl:choose>
+ <xsl:when test="$charlength >= $framewidth">
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo stretchy="false">(</m:mo>
+ <xsl:apply-templates select="*[position()=2]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo color="Blue">→</m:mo>
+ <xsl:apply-templates select="*[position()=3]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo stretchy="false">)</m:mo>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mo stretchy="false">(</m:mo>
+ <xsl:apply-templates select="*[position()=2]"/>
+ <m:mo color="Blue">→</m:mo>
+ <xsl:apply-templates select="*[position()=3]"/>
+ <m:mo stretchy="false">)</m:mo>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:when test="$name='app'">
+ <xsl:choose>
+ <xsl:when test="$charlength >= $framewidth">
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo stretchy="false">(</m:mo>
+ <xsl:apply-templates select="*[position()=2]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <xsl:for-each select="*[position()>2]">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mphantom><m:mtext>(</m:mtext></m:mphantom>
+ <xsl:apply-templates select="."/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </xsl:for-each>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo stretchy="false">)</m:mo>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mo stretchy="false">(</m:mo>
+ <xsl:apply-templates select="*[position()=2]"/>
+ <xsl:for-each select="*[position()>2]">
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <xsl:apply-templates select="."/>
+ </xsl:for-each>
+ <m:mo stretchy="false">)</m:mo>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:when test="$name='cast'">
+ <xsl:choose>
+ <xsl:when test="$charlength >= $framewidth">
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo stretchy="false">(</m:mo>
+ <xsl:apply-templates select="*[position()=2]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo color="Yellow">:></m:mo>
+ <xsl:apply-templates select="*[position()=3]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo stretchy="false">)</m:mo>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mo stretchy="false">(</m:mo>
+ <xsl:apply-templates select="*[position()=2]"/>
+ <m:mo color="Yellow">:></m:mo>
+ <xsl:apply-templates select="*[position()=3]"/>
+ <m:mo stretchy="false">)</m:mo>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:when test="$name='Prop'">
+ <m:mo>Prop</m:mo>
+ </xsl:when>
+ <xsl:when test="$name='Set'">
+ <m:mo>Set</m:mo>
+ </xsl:when>
+ <xsl:when test="$name='Type'">
+ <m:mo>Type</m:mo>
+ </xsl:when>
+ <xsl:when test="$name='mutcase'">
+ <xsl:choose>
+ <xsl:when test="$charlength >= $framewidth">
+ <xsl:variable name="charlength"><xsl:apply-templates select="*[position()=2]" mode="charcount"><xsl:with-param name="nosibling" select="1"/></xsl:apply-templates></xsl:variable>
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo><</m:mo>
+ <xsl:apply-templates select="*[position()=2]"/>
+ <xsl:if test="$framewidth > $charlength">
+ <m:mo>></m:mo>
+ <m:mo>CASES</m:mo>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <xsl:apply-templates select="*[position()=3]"/>
+ </xsl:if>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <xsl:if test="$charlength >= $framewidth">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo>></m:mo>
+ <m:mo>CASES</m:mo>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <xsl:apply-templates select="*[position()=3]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </xsl:if>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo>OF</m:mo>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <xsl:for-each select="*[position() mod 2 = 0 and position()>3]">
+ <xsl:variable name="charlength"><xsl:apply-templates select="." mode="charcount"><xsl:with-param name="nosibling" select="1"/></xsl:apply-templates></xsl:variable>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <xsl:choose>
+ <xsl:when test="position() = 1">
+ <m:mphantom><m:mtext>|</m:mtext></m:mphantom>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mo stretchy="false">|</m:mo>
+ </xsl:otherwise>
+ </xsl:choose>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <xsl:apply-templates select="."/>
+ <xsl:if test="$framewidth > $charlength">
+ <m:mo color="Green">⇒</m:mo>
+ <xsl:apply-templates select="following-sibling::*[position()= 1]"/>
+ </xsl:if>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <xsl:if test="$charlength >= $framewidth">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mphantom><m:mtext>|_</m:mtext></m:mphantom>
+ <m:mo color="Green">⇒</m:mo>
+ <xsl:apply-templates select="following-sibling::*[position()= 1]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </xsl:if>
+ </xsl:for-each>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo>END</m:mo>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mo><</m:mo><xsl:apply-templates select="*[position()=2]"/><m:mo>></m:mo>
+ <m:mo>CASES</m:mo>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <xsl:apply-templates select="*[position()=3]"/>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <m:mo>OF</m:mo>
+ <xsl:for-each select="*[position() mod 2 = 0 and position()>3]">
+ <xsl:choose>
+ <xsl:when test="position() != 1">
+ <m:mo stretchy="false">|</m:mo>
+ </xsl:when>
+ </xsl:choose>
+ <xsl:apply-templates select="."/>
+ <m:mo color="Green">⇒</m:mo>
+ <xsl:apply-templates select="following-sibling::*[position()= 1]"/>
+ </xsl:for-each>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <m:mo>END</m:mo>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:when test="$name='fix'">
+ <xsl:choose>
+ <xsl:when test="$charlength >= $framewidth">
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo>FIX</m:mo>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <m:mi><xsl:value-of select="m:ci"/></m:mi>
+ <m:mo stretchy="false">{</m:mo>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <xsl:for-each select="m:bvar">
+ <xsl:variable name="charlength"><xsl:apply-templates select="m:type" mode="charcount"><xsl:with-param name="nosibling" select="1"/></xsl:apply-templates></xsl:variable>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mi><xsl:value-of select="m:ci"/></m:mi>
+ <m:mo>:</m:mo>
+ <xsl:if test="$framewidth > $charlength">
+ <xsl:apply-templates select="m:type"/>
+ </xsl:if>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <xsl:if test="$charlength >= $framewidth">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mphantom><m:mtext>:=</m:mtext></m:mphantom>
+ <xsl:apply-templates select="m:type"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </xsl:if>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo>:=</m:mo>
+ <xsl:apply-templates select="following-sibling::*[position()=1]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </xsl:for-each>
+ </m:mtable>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo stretchy="false">}</m:mo>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mo>FIX</m:mo>
+ <m:mi><xsl:value-of select="m:ci"/></m:mi>
+ <m:mo stretchy="false">{</m:mo>
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <xsl:for-each select="m:bvar">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mi><xsl:value-of select="m:ci"/></m:mi>
+ <m:mo>:</m:mo>
+ <xsl:apply-templates select="m:type"/>
+ <m:mo>:=</m:mo>
+ <xsl:apply-templates select="following-sibling::*[position() = 1]"/>
+ <xsl:if test="position()=last()">
+ <m:mo stretchy="false">}</m:mo>
+ </xsl:if>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </xsl:for-each>
+ </m:mtable>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:when test="$name='cofix'">
+ <xsl:choose>
+ <xsl:when test="$charlength >= $framewidth">
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo>COFIX</m:mo>
+ <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
+ <m:mi><xsl:value-of select="m:ci"/></m:mi>
+ <m:mo stretchy="false">{</m:mo>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <xsl:for-each select="m:bvar">
+ <xsl:variable name="charlength"><xsl:apply-templates select="m:type" mode="charcount"><xsl:with-param name="nosibling" select="1"/></xsl:apply-templates></xsl:variable>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mi><xsl:value-of select="m:ci"/></m:mi>
+ <m:mo>:</m:mo>
+ <xsl:if test="$framewidth > $charlength">
+ <xsl:apply-templates select="m:type"/>
+ </xsl:if>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <xsl:if test="$charlength >= $framewidth">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mphantom><m:mtext>:=</m:mtext></m:mphantom>
+ <xsl:apply-templates select="m:type"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </xsl:if>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo>:=</m:mo>
+ <xsl:apply-templates select="following-sibling::*[position() = 1]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </xsl:for-each>
+ </m:mtable>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo stretchy="false">}</m:mo>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mo>COFIX</m:mo>
+ <m:mi><xsl:value-of select="m:ci"/></m:mi>
+ <m:mo stretchy="false">{</m:mo>
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <xsl:for-each select="m:bvar">
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mi><xsl:value-of select="m:ci"/></m:mi>
+ <m:mo>:</m:mo>
+ <xsl:apply-templates select="m:type"/>
+ <m:mo>:=</m:mo>
+ <xsl:apply-templates select="following-sibling::*[position() = 1]"/>
+ <xsl:if test="position()=last()">
+ <m:mo stretchy="false">}</m:mo>
+ </xsl:if>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </xsl:for-each>
+ </m:mtable>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ </xsl:choose>
+ </m:mrow>
+</xsl:template>
+
+<!-- LAMBDA -->
+
+<xsl:template match="m:lambda">
+ <xsl:variable name="charlength"><xsl:apply-templates select="*[position()=1]" mode="charcount"/></xsl:variable>
+ <m:mrow helm:xref="{@helm:xref}">
+ <xsl:choose>
+ <xsl:when test="$charlength >= $framewidth">
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <m:mtr>
+ <m:mtd>
+ <m:mo color="Red">λ</m:mo>
+ <xsl:apply-templates select="m:bvar"/>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mrow>
+ <m:mo>.</m:mo>
+ <xsl:apply-templates select="*[position()=2]"/>
+ </m:mrow>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mo color="Red">λ</m:mo>
+ <xsl:apply-templates select="m:bvar/m:ci"/>
+ <m:mo>:</m:mo>
+ <xsl:apply-templates select="m:bvar/m:type"/>
+ <m:mo>.</m:mo>
+ <xsl:apply-templates select="*[position()=2]"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </m:mrow>
+</xsl:template>
+
+<!-- *********************************** -->
+<!-- BASE SET OF MATHML CONTENT ELEMENTS -->
+<!-- *********************************** -->
+
+<!-- Logic -->
+
+<xsl:template match = "m:apply[m:eq[1]]">
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="*[1]" mode="charcount"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$charlength >= $framewidth">
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <xsl:if test="@helm:xref">
+ <xsl:attribute name="helm:xref">
+ <xsl:value-of select="@helm:xref"/>
+ </xsl:attribute>
+ </xsl:if>
+ <m:mtr>
+ <m:mtd>
+ <m:mo stretchy="false">(</m:mo>
+ <xsl:apply-templates select="*[position()=2]"/>
+ </m:mtd>
+ </m:mtr>
+ <xsl:for-each select = "*[position()>2]">
+ <m:mtr>
+ <m:mtd>
+ <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
+ <m:mo helm:xref="m:in/@helm:xref">
+ =
+ </m:mo>
+ <xsl:apply-templates select="."/>
+ </m:mtd>
+ </m:mtr>
+ </xsl:for-each>
+ <m:mtr>
+ <m:mtd>
+ <m:mo stretchy="false">)</m:mo>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+
+<xsl:template match = "m:apply[m:and[1]|m:or[1]
+ |m:geq[1]|m:leq[1]|m:gt[1]|m:lt[1]
+ |m:in[1]|m:intesect[1]|m:union[1]|m:subset[1]
+ |m:prsubset|m:setdiff[1]]">
+ <xsl:variable name="symbol">
+ <xsl:choose>
+ <xsl:when test="m:and[1]">
+ <xsl:value-of select="'wedge'"/>
+ </xsl:when>
+ <xsl:when test="m:or[1]">
+ <xsl:value-of select="'vee'"/>
+ </xsl:when>
+ <xsl:when test="m:geq[1]">
+ <xsl:value-of select="'geq'"/>
+ </xsl:when>
+ <xsl:when test="m:leq[1]">
+ <xsl:value-of select="'leq'"/>
+ </xsl:when>
+ <xsl:when test="m:gt[1]">
+ <xsl:value-of select="'gt'"/>
+ </xsl:when>
+ <xsl:when test="m:lt[1]">
+ <xsl:value-of select="'lt'"/>
+ </xsl:when>
+ <xsl:when test="m:eq[1]">
+ <xsl:value-of select="'Equal'"/>
+ </xsl:when>
+ <xsl:when test="m:in[1]">
+ <xsl:value-of select="'Element'"/>
+ </xsl:when>
+ <xsl:when test="m:subset[1]">
+ <xsl:value-of select="'SubsetEqual'"/>
+ </xsl:when>
+ <xsl:when test="m:prsubset[1]">
+ <xsl:value-of select="'subset'"/>
+ </xsl:when>
+ <xsl:when test="m:intersect[1]">
+ <xsl:value-of select="'Intersection'"/>
+ </xsl:when>
+ <xsl:when test="m:union[1]">
+ <xsl:value-of select="'Union'"/>
+ </xsl:when>
+ <xsl:when test="m:setdiff[1]">
+ <xsl:value-of select="'Backslash'"/>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="*[1]" mode="charcount"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$charlength >= $framewidth">
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <xsl:if test="@helm:xref">
+ <xsl:attribute name="helm:xref">
+ <xsl:value-of select="@helm:xref"/>
+ </xsl:attribute>
+ </xsl:if>
+ <m:mtr>
+ <m:mtd>
+ <m:mo stretchy="false">(</m:mo>
+ <xsl:apply-templates select="*[position()=2]"/>
+ </m:mtd>
+ </m:mtr>
+ <xsl:for-each select = "*[position()>2]">
+ <m:mtr>
+ <m:mtd>
+ <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
+ <m:mo helm:xref="{*[1]/@helm:xref}">
+ <m:mchar name="{$symbol}"/>
+ </m:mo>
+ <xsl:apply-templates select="."/>
+ </m:mtd>
+ </m:mtr>
+ </xsl:for-each>
+ <m:mtr>
+ <m:mtd>
+ <m:mo stretchy="false">)</m:mo>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:set">
+ <xsl:choose>
+ <xsl:when test="count(child::*) = 0">
+ <m:mo>
+ <m:mchar name="EmptySet"/>
+ </m:mo>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:variable name="charlength">
+ <xsl:apply-templates select="*[1]" mode="charcount"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$charlength >= $framewidth">
+ <xsl:choose>
+ <xsl:when test="name(*[1]) = 'm:bvar'">
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <m:mtr>
+ <m:mtd>
+ <m:mo stretchy="false">{</m:mo>
+ <xsl:apply-templates select="*[position()=1]"/>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mphantom><m:mtext>{</m:mtext></m:mphantom>
+ <m:mo stretchy="false">|</m:mo>
+ <xsl:apply-templates select="m:condition/*[1]"/>
+ </m:mtd>
+ </m:mtr>
+ <m:mtr>
+ <m:mtd>
+ <m:mo stretchy="false">}</m:mo>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:mtable align="baseline 1" equalrows="false" columnalign="left">
+ <m:mtr>
+ <m:mtd>
+ <m:mo stretchy="false">{</m:mo>
+ <xsl:apply-templates select="*[position()=1]"/>
+ <xsl:if test="position() != last()">
+ <mo>,</mo>
+ </xsl:if>
+ </m:mtd>
+ </m:mtr>
+ <xsl:for-each select = "*[position()>2]">
+ <m:mtr>
+ <m:mtd>
+ <m:mphantom><m:mtext>{</m:mtext></m:mphantom>
+ <xsl:apply-templates select="."/>
+ <xsl:if test="position() != last()">
+ <mo>,</mo>
+ </xsl:if>
+ </m:mtd>
+ </m:mtr>
+ </xsl:for-each>
+ <m:mtr>
+ <m:mtd>
+ <m:mo stretchy="false">}</m:mo>
+ </m:mtd>
+ </m:mtr>
+ </m:mtable>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match = "m:apply[m:card[1]]">
+ <m:mo stretchy="false">|</m:mo>
+ <xsl:apply-templates select="*[2]"/>
+ <m:mo stretchy="false">|</m:mo>
+</xsl:template>
+
+<!--**********************-->
+<!-- COUNTING -->
+<!--**********************-->
+
+<xsl:template match="m:and|m:or|m:not|m:exists|m:eq|m:lt|m:leq|m:gt|m:geq
+ |m:in|m:notin|m:intersect|m:union|m:subset|m:prsubset|m:card|m:setdiff" mode="charcount">
+<xsl:param name="incurrent_length" select="0"/>
+ <xsl:choose>
+ <xsl:when test="$framewidth > ($incurrent_length + 3 + string-length())">
+ <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>
+ <xsl:choose>
+ <xsl:when test="string($siblength) = """>
+ <xsl:value-of select="$incurrent_length + 3 + string-length()"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="number($siblength)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$incurrent_length + 3 + string-length()"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="m:ci|m:csymbol" mode="charcount">
+<xsl:param name="incurrent_length" select="0"/>
+<xsl:param name="nosibling" select="0"/>
+ <xsl:choose>
+ <xsl:when test="$framewidth > ($incurrent_length + string-length()) and ($nosibling = 0)">
+ <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>
+ <xsl:choose>
+ <xsl:when test="string($siblength) = """>
+ <xsl:value-of select="$incurrent_length + string-length()"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="number($siblength)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$incurrent_length + string-length()"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="*" mode="charcount">
+<xsl:param name="incurrent_length" select="0"/>
+<xsl:param name="nosibling" select="0"/>
+ <xsl:choose>
+ <xsl:when test="count(child::*) = 0">
+ <xsl:value-of select="$incurrent_length"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <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>
+ <xsl:choose>
+ <xsl:when test="$framewidth > number($childlength) and ($nosibling = 0)">
+ <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>
+ <xsl:choose>
+ <xsl:when test="string($siblength) = """>
+ <xsl:value-of select="number($childlength)"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="number($siblength)"/>
+ </xsl:otherwise>
+ </xsl:choose>>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="number($childlength)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+</xsl:stylesheet>
+
--- /dev/null
+<?xml version="1.0"?>
+
+<!--******************************************************************-->
+<!-- XSLT version 0.1 of CIC objects to objects and MathML content: -->
+<!-- First draft: March 21 2000, Irene Schena -->
+<!--******************************************************************-->
+
+<!--******************************************************************-->
+<!-- MANCA: gestione annotation e linking -->
+<!--******************************************************************-->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:m="http://www.w3.org/1998/Math/MathML"
+ xmlns:helm="http://www.cs.unibo.it/helm">
+
+<xsl:import href="content.xsl"/>
+
+<!-- ROOT -->
+
+<xsl:template match="cicxml">
+ <xsl:variable name="url"><xsl:value-of select="@baseurl"/></xsl:variable>
+ <xsl:variable name="stylesheet"><xsl:value-of select="@stylesheet"/></xsl:variable>
+ <xsl:processing-instruction name="cocoon-format">type="text/xml"</xsl:processing-instruction>
+ <xsl:processing-instruction name="xml-stylesheet">href="<xsl:value-of select='concat($url,$stylesheet)'/>" type="text/xsl"</xsl:processing-instruction>
+ <xsl:processing-instruction name="cocoon-process">type="xslt"</xsl:processing-instruction>
+ <xsl:apply-templates select="*[1]"/>
+</xsl:template>
+
+<!-- CIC OBJECTS -->
+
+<xsl:template match="Definition" mode="noannot">
+ <Definition name="{@name}" helm:xref="{@id}">
+ <xsl:if test="string(@params) != """>
+ <Params>
+ <xsl:value-of select="@params"/>
+ </Params>
+ </xsl:if>
+<!-- <xsl:choose>
+ <xsl:when test="$showproof=0">
+ <body>
+ <m:mi>Here</m:mi>
+ </body>
+ </xsl:when>
+ <xsl:otherwise>
+ <body>
+ <xsl:apply-templates select="body"/>
+ </body>
+ </xsl:otherwise>
+ </xsl:choose> -->
+ <body>
+ <xsl:apply-templates select="body"/>
+ </body>
+ <type>
+ <xsl:apply-templates select="type"/>
+ </type>
+ </Definition>
+</xsl:template>
+
+<xsl:template match="Axiom" mode="noannot">
+ <Axiom name="{@name}" helm:xref="{@id}">
+ <xsl:if test="string(@params) != """>
+ <Params>
+ <xsl:value-of select="@params"/>
+ </Params>
+ </xsl:if>
+ <type>
+ <xsl:apply-templates select="type"/>
+ </type>
+ </Axiom>
+</xsl:template>
+
+<xsl:template match="CurrentProof" mode="noannot">
+ <CurrentProof name="{@name}" helm:xref="{@id}">
+ <xsl:for-each select="Conjecture">
+ <Conjecture no="./{@no}">
+ <xsl:apply-templates select="."/>
+ </Conjecture>
+ </xsl:for-each>
+ <body>
+ <xsl:apply-templates select="body"/>
+ </body>
+ <type>
+ <xsl:apply-templates select="type"/>
+ </type>
+ </CurrentProof>
+</xsl:template>
+
+<xsl:template match="InductiveDefinition" mode="noannot">
+ <InductiveDefinition helm:xref="{@id}">
+ <xsl:if test="string(@params) != """>
+ <Params>
+ <xsl:value-of select="@params"/>
+ </Params>
+ </xsl:if>
+ <xsl:if test="string(@noParams) != 0">
+ <xsl:apply-templates select="InductiveType/arity/*[1]" mode="abstparams">
+ <xsl:with-param name="noparams" select="@noParams"/>
+ </xsl:apply-templates>
+ </xsl:if>
+ <xsl:for-each select="InductiveType">
+ <InductiveType name="{./@name}" inductive="{./@inductive}">
+ <arity>
+ <xsl:apply-templates select="./arity/*[1]" mode="abstparams">
+ <xsl:with-param name="noparams" select="../@noParams"/>
+ <xsl:with-param name="target" select="1"/>
+ </xsl:apply-templates>
+ </arity>
+ <xsl:for-each select="./Constructor">
+ <Constructor name="{./@name}">
+ <xsl:apply-templates select="./*[1]" mode="abstparams">
+ <xsl:with-param name="noparams" select="../../@noParams"/>
+ <xsl:with-param name="target" select="1"/>
+ </xsl:apply-templates>
+ </Constructor>
+ </xsl:for-each>
+ </InductiveType>
+ </xsl:for-each>
+ </InductiveDefinition>
+</xsl:template>
+
+<xsl:template match="Variable" mode="noannot">
+ <Variable name="{@name}" helm:xref="{@id}">
+ <type>
+ <xsl:apply-templates select="type"/>
+ </type>
+ </Variable>
+</xsl:template>
+
+<!--*******************************************-->
+<!-- ABSTRACTING PARAMETERS AND COUNTING -->
+<!--*******************************************-->
+<!-- Si dimentica i CAST dei termini che astrae. Nel caso dell'astrazione -->
+<!-- dei lambda dei pattern del CASE, qualora i lambda non si trovino -->
+<!-- nella forma weak-head, astrae solo i lambda che trova e restituisce -->
+<!-- un corpo depurato da tutti i primi cast che precedono il termine -->
+<!-- restituito. -->
+
+<xsl:template match="*" mode="abstparams">
+<xsl:param name="noparams" select="0"/>
+<xsl:param name="target" select="0"/>
+<xsl:param name="binder">PROD</xsl:param>
+ <xsl:choose>
+ <xsl:when test="($noparams != 0) and ((name(.)=string($binder)) or (name(.)="CAST"))">
+ <xsl:choose>
+ <xsl:when test="name(.) = string($binder)">
+ <xsl:if test="$target = 0">
+ <xsl:choose>
+ <xsl:when test="string($binder) = "LAMBDA"">
+ <m:ci>
+ <xsl:value-of select="target/@binder"/>
+ </m:ci>
+ </xsl:when>
+ <xsl:otherwise>
+ <Param name="{target/@binder}">
+ <xsl:apply-templates select="source" mode="noannot"/>
+ </Param>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:if>
+ <xsl:apply-templates select="target/*[1]" mode="abstparams">
+ <xsl:with-param name="noparams" select="$noparams - 1"/>
+ <xsl:with-param name="target" select="$target"/>
+ <xsl:with-param name="binder" select="$binder"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="term/*[1]" mode="abstparams">
+ <xsl:with-param name="noparams" select="$noparams"/>
+ <xsl:with-param name="target" select="$target"/>
+ <xsl:with-param name="binder" select="$binder"/>
+ </xsl:apply-templates>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:choose>
+ <xsl:when test="($target = 1) and ($noparams != 0)">
+ <m:apply>
+ <m:csymbol>app</m:csymbol>
+ <xsl:apply-templates select="." mode="noannot"/>
+ <xsl:call-template name="printparam"><xsl:with-param name="noleft" select="$noparams"/></xsl:call-template>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:choose>
+ <xsl:when test="$noparams != 0">
+ <xsl:call-template name="printparam"><xsl:with-param name="noleft" select="$noparams"/></xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:if test="$target = 1">
+ <xsl:apply-templates select="." mode="noannot"/>
+ </xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name="printparam">
+<xsl:param name="noleft" select="0"/>
+<xsl:param name="number" select="1"/>
+ <xsl:if test="$noleft != 0">
+ <m:ci>$<xsl:value-of select="$number"/></m:ci>
+ <xsl:call-template name="printparam"><xsl:with-param name="noleft" select="$noleft - 1"/><xsl:with-param name="number" select="$number + 1"/></xsl:call-template>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template match="*" mode="counting">
+<xsl:param name="noparams" select="0"/>
+<xsl:param name="count" select="0"/>
+ <xsl:choose>
+ <xsl:when test="name(.) = "PROD"">
+ <xsl:apply-templates select="target/*[1]" mode="counting">
+ <xsl:with-param name="noparams" select="$noparams"/>
+ <xsl:with-param name="count" select="$count + 1"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:when test="name(.) = "CAST"">
+ <xsl:apply-templates select="term/*[1]" mode="counting">
+ <xsl:with-param name="noparams" select="$noparams"/>
+ <xsl:with-param name="count" select="$count"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$count - $noparams"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+</xsl:stylesheet>
--- /dev/null
+<?xml version="1.0"?>
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:m="http://www.w3.org/1998/Math/MathML">
+
+<!--***********************************************************************-->
+<!-- auxiliary functions -->
+<!-- HELM Group: Asperti, Padovani, Sacerdoti, Schena -->
+<!--***********************************************************************-->
+
+<!--***********************************************************************-->
+<!-- get the name from a URI -->
+<!--***********************************************************************-->
+
+<!-- CSC: PROBLEMA: URI CHE NON CONTENGONO / ED INIZIANO CON cic: -->
+<xsl:template name="name_of_uri">
+ <xsl:param name="uri" select=""""/>
+ <xsl:variable name="suffix" select="substring-after($uri, "/")"/>
+ <xsl:choose>
+ <xsl:when test="$suffix = """>
+ <!-- CSC: PROBLEMA: .con PUO' APPARIRE ALL'INTERNO DELLE URI ===>
+ SCRIVERE UNA FUNZIONE RICORSIVA CHE RISOLVA -->
+ <xsl:value-of select="substring-before($uri,".con")"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="name_of_uri">
+ <xsl:with-param name="uri" select="$suffix"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!--***********************************************************************-->
+<!-- erase common prefix from two uris -->
+<!--***********************************************************************-->
+
+<xsl:template name="common_prefix">
+ <xsl:param name="first_uri" select=""""/>
+ <xsl:param name="second_uri" select=""""/>
+ <xsl:choose>
+ <xsl:when test="(substring-before($first_uri,"/") =
+ substring-before($second_uri,"/") and
+ substring-after($second_uri,"/") != "")">
+ <xsl:call-template name="common_prefix">
+ <xsl:with-param
+ name="first_uri" select="substring-after($first_uri,"/")"/>
+ <xsl:with-param
+ name="second_uri" select="substring-after($second_uri,"/")"/> </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="slash_counting">
+ <xsl:with-param name="uri" select="$second_uri"/>
+ <xsl:with-param name="counter" select="0"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name="slash_counting">
+ <xsl:param name="uri" select=""""/>
+ <xsl:param name="counter" select="0"/>
+ <xsl:choose>
+ <xsl:when test="(substring-after($uri,"/") != "")">
+ <xsl:call-template name="slash_counting">
+ <xsl:with-param
+ name="uri" select="substring-after($uri,"/")"/>
+ <xsl:with-param
+ name="counter" select="$counter +1"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$counter"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name="blank_counting">
+ <xsl:param name="string" select=""""/>
+ <xsl:param name="counter" select="0"/>
+ <xsl:choose>
+ <xsl:when test="(substring-after($string," ") != "")">
+ <xsl:call-template name="blank_counting">
+ <xsl:with-param
+ name="string" select="substring-after($string," ")"/>
+ <xsl:with-param
+ name="counter" select="$counter +1"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$counter + 1"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name="double_point_counting">
+ <xsl:param name="string" select=""""/>
+ <xsl:param name="counter" select="0"/>
+ <xsl:choose>
+ <xsl:when test="(substring-after($string,":") != "")">
+ <xsl:call-template name="double_point_counting">
+ <xsl:with-param
+ name="string" select="substring-after($string,":")"/>
+ <xsl:with-param
+ name="counter" select="$counter +1"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$counter"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name="min">
+ <xsl:param name="string" select=""""/>
+ <xsl:param name="counter" select="0"/>
+ <xsl:choose>
+ <xsl:when test="contains($string,concat($counter,":"))
+ or (0 > $counter)">
+ <xsl:value-of select="$counter"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="min">
+ <xsl:with-param
+ name="string" select="$string"/>
+ <xsl:with-param
+ name="counter" select="$counter -1"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name="get_no_params">
+ <xsl:param name="first_uri" select=""""/>
+ <xsl:param name="second_uri" select=""""/>
+ <xsl:variable name="offset">
+ <xsl:call-template name="common_prefix">
+ <xsl:with-param name="first_uri" select="$first_uri"/>
+ <xsl:with-param name="second_uri" select="$second_uri"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$offset > 0">
+ <xsl:variable name="params">
+ <xsl:value-of
+ select="document(concat(string($absPath),$second_uri))/*/@params"/>
+ </xsl:variable>
+ <xsl:variable name="minimum">
+ <xsl:call-template name="min">
+ <xsl:with-param name="string" select="$params"/>
+ <xsl:with-param name="counter" select="$offset - 1"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="0 > $minimum">
+ 0
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:variable name="relevant_params">
+ <!-- the blank after : in the next line is essential -->
+ <xsl:value-of
+ select="substring-after($params,concat($minimum,": "))"/>
+ </xsl:variable>
+ <xsl:variable name="tokens">
+ <xsl:call-template name="blank_counting">
+ <xsl:with-param name="string" select="$relevant_params"/>
+ <xsl:with-param name="counter" select="0"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="separators">
+ <xsl:call-template name="double_point_counting">
+ <xsl:with-param name="string" select="$relevant_params"/>
+ <xsl:with-param name="counter" select="0"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:value-of select="$tokens - $separators"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ 0
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+</xsl:stylesheet>
+
+
+
+
+
+
--- /dev/null
+<?xml version="1.0"?>
+
+<!--******************************************************************-->
+<!-- Reals -->
+<!-- First draft: April 3 2000 -->
+<!-- HELM Group: Asperti, Padovani, Sacerdoti, Schena -->
+<!--******************************************************************-->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:m="http://www.w3.org/1998/Math/MathML"
+ xmlns:helm="http://www.cs.unibo.it/helm"
+ xmlns:xlink="http://www.w3.org/1999/xlink">
+
+<!--******************************************************************-->
+<!-- Variable containing the absolute path of the CIC file -->
+<!--******************************************************************-->
+
+<xsl:variable name="absPath">http://localhost:8081/get?url=</xsl:variable>
+
+<!-- ************************* LOGIC *********************************-->
+
+<!-- REALS -->
+
+<!--
+<xsl:template match="CONST[attribute::uri='cic:/coq/REALS/Raxioms/R.con']" mode="noannot">
+ <m:reals/>
+</xsl:template>
+-->
+
+<!-- 0 e 1 -->
+
+<xsl:template match="CONST[attribute::uri='cic:/coq/REALS/Raxioms/R0.con']" mode="noannot">
+ <m:cn definitionURL="{@uri}" helm:xref="{@id}">0</m:cn>
+</xsl:template>
+
+<xsl:template match="CONST[attribute::uri='cic:/coq/REALS/Raxioms/R1.con']" mode="noannot">
+ <m:cn definitionURL="{@uri}" helm:xref="{@id}">1</m:cn>
+</xsl:template>
+
+
+
+<!-- Unary Operations -->
+
+<xsl:template match="APPLY[CONST[
+ attribute::uri='cic:/coq/REALS/Raxioms/Ropp.con' or
+ attribute::uri='cic:/coq/REALS/Rbasic_fun/Rabsolu.con' or
+ attribute::uri='cic:/coq/REALS/Rfunctions/fact.con' or
+ attribute::uri='cic:/coq/REALS/Rbase/Rsqr.con']]" mode="noannot">
+ <xsl:choose>
+ <xsl:when test="count(child::*) = 2">
+ <xsl:variable name="elem">
+ <xsl:choose>
+ <xsl:when test="CONST/@uri='cic:/coq/REALS/Raxioms/Ropp.con'">
+ <xsl:value-of select="'minus'"/>
+ </xsl:when>
+ <xsl:when test="CONST/@uri='cic:/coq/REALS/Rbasic_fun/Rabsolu.con'">
+ <xsl:value-of select="'abs'"/>
+ </xsl:when>
+ <xsl:when test="CONST/@uri='cic:/coq/REALS/Rfunctions/fact.con'">
+ <xsl:value-of select="'factorial'"/>
+ </xsl:when>
+ <xsl:when test="CONST/@uri='cic:/coq/REALS/Rbase/Rsqr.con'">
+ <xsl:value-of select="'root'"/>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:variable>
+ <m:apply helm:xref="{@id}">
+ <xsl:element name="{concat('m:',$elem)}">
+ <xsl:attribute name="definitionURL">
+ <xsl:value-of select="CONST/@uri"/>
+ </xsl:attribute>
+ <xsl:attribute name="helm:xref">
+ <xsl:value-of select="CONST/@id"/>
+ </xsl:attribute>
+ </xsl:element>
+ <xsl:apply-templates select="*[2]" mode="noannot"/>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="APPLY[CONST[
+ attribute::uri='cic:/coq/REALS/Raxioms/Rinv.con']]" mode="noannot">
+ <xsl:choose>
+ <xsl:when test="count(child::*) = 2">
+ <m:apply helm:xref="{@id}">
+ <m:power/>
+ <xsl:apply-templates select="*[2]" mode="noannot"/>
+ <m:apply>
+ <m:minus>
+ <xsl:attribute name="definitionURL">
+ <xsl:value-of select="CONST/@uri"/>
+ </xsl:attribute>
+ </m:minus>
+ <xsl:attribute name="helm:xref">
+ <xsl:value-of select="CONST/@id"/>
+ </xsl:attribute>
+ <m:cn>1</m:cn>
+ </m:apply>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- Binary Operations and Relations -->
+
+<xsl:template match="APPLY[CONST[
+ attribute::uri='cic:/coq/REALS/Raxioms/Rplus.con' or
+ attribute::uri='cic:/coq/REALS/Raxioms/Rminus.con' or
+ attribute::uri='cic:/coq/REALS/Raxioms/Rmult.con' or
+ attribute::uri='cic:/coq/REALS/Raxioms/Rle.con' or
+ attribute::uri='cic:/coq/REALS/Raxioms/Rlt.con' or
+ attribute::uri='cic:/coq/REALS/Raxioms/Rge.con' or
+ attribute::uri='cic:/coq/REALS/Raxioms/Rgt.con' or
+ attribute::uri='cic:/coq/REALS/Rbasic_fun/Rmin.con' or
+ attribute::uri='cic:/coq/REALS/Rfunctions/pow.con']]" mode="noannot">
+ <xsl:choose>
+ <xsl:when test="count(child::*) = 3">
+ <xsl:variable name="elem">
+ <xsl:choose>
+ <xsl:when test="CONST/@uri='cic:/coq/REALS/Raxioms/Rplus.con'">
+ <xsl:value-of select="'plus'"/>
+ </xsl:when>
+ <xsl:when test="CONST/@uri='cic:/coq/REALS/Raxioms/Rminus.con'">
+ <xsl:value-of select="'minus'"/>
+ </xsl:when>
+ <xsl:when test="CONST/@uri='cic:/coq/REALS/Raxioms/Rmult.con'">
+ <xsl:value-of select="'times'"/>
+ </xsl:when>
+ <xsl:when test="CONST/@uri='cic:/coq/REALS/Raxioms/Rle.con'">
+ <xsl:value-of select="'leq'"/>
+ </xsl:when>
+ <xsl:when test="CONST/@uri='cic:/coq/REALS/Raxioms/Rlt.con'">
+ <xsl:value-of select="'lt'"/>
+ </xsl:when>
+ <xsl:when test="CONST/@uri='cic:/coq/REALS/Raxioms/Rge.con'">
+ <xsl:value-of select="'geq'"/>
+ </xsl:when>
+ <xsl:when test="CONST/@uri='cic:/coq/REALS/Raxioms/Rgt.con'">
+ <xsl:value-of select="'gt'"/>
+ </xsl:when>
+ <xsl:when test="CONST/@uri='cic:/coq/REALS/Rbasic_fun/Rmin.con'">
+ <xsl:value-of select="'min'"/>
+ </xsl:when>
+ <xsl:when test="CONST/@uri='cic:/coq/REALS/Rfunctions/pow.con'">
+ <xsl:value-of select="'power'"/>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:variable>
+ <m:apply helm:xref="{@id}">
+ <xsl:element name="{concat('m:',$elem)}">
+ <xsl:attribute name="definitionURL">
+ <xsl:value-of select="CONST/@uri"/>
+ </xsl:attribute>
+ <xsl:attribute name="helm:xref">
+ <xsl:value-of select="CONST/@id"/>
+ </xsl:attribute>
+ </xsl:element>
+ <xsl:apply-templates select="*[2]" mode="noannot"/>
+ <xsl:apply-templates select="*[3]" mode="noannot"/>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- LIMIT -->
+
+<xsl:template match="APPLY[CONST[
+ attribute::uri='cic:/coq/REALS/Rlimit/limit1_in.con']]" mode="noannot">
+ <xsl:choose>
+ <xsl:when test="count(child::*) = 5">
+ <m:apply>
+ <m:eq/>
+ <xsl:choose>
+ <xsl:when test="name(*[2]) = 'LAMBDA'">
+ <m:apply helm:xref="{@id}">
+ <m:limit>
+ <xsl:attribute name="definitionURL">
+ <xsl:value-of select="CONST/@uri"/>
+ </xsl:attribute>
+ <xsl:attribute name="helm:xref">
+ <xsl:value-of select="CONST/@id"/>
+ </xsl:attribute>
+ </m:limit>
+ <m:bvar>
+ <m:ci><xsl:value-of select="LAMBDA/target/@binder"/></m:ci>
+ </m:bvar>
+ <m:lowlimit>
+ <xsl:apply-templates select="*[5]" mode="noannot"/>
+ </m:lowlimit>
+ <xsl:apply-templates select="*[2]/target" mode="noannot"/>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:apply helm:xref="{@id}">
+ <m:limit/>
+ <m:bvar>
+ <m:ci>$x</m:ci>
+ </m:bvar>
+ <m:lowlimit>
+ <xsl:apply-templates select="*[5]" mode="noannot"/>
+ </m:lowlimit>
+ <m:apply>
+ <m:csymbol>app</m:csymbol>
+ <xsl:apply-templates select="*[2]" mode="noannot"/>
+ <m:ci>$x</m:ci>
+ </m:apply>
+ </m:apply>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:apply-templates select="*[4]" mode="noannot"/>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- DIFFERENTIATION -->
+
+<xsl:template match="APPLY[CONST[
+ attribute::uri='cic:/coq/REALS/Rderiv/D_in.con']]" mode="noannot">
+ <xsl:choose>
+ <xsl:when test="count(child::*) = 4">
+ <m:apply>
+ <m:eq/>
+ <xsl:choose>
+ <xsl:when test="name(*[2]) = 'LAMBDA'">
+ <m:apply helm:xref="{@id}">
+ <m:diff >
+ <xsl:attribute name="definitionURL">
+ <xsl:value-of select="CONST/@uri"/>
+ </xsl:attribute>
+ <xsl:attribute name="helm:xref">
+ <xsl:value-of select="CONST/@id"/>
+ </xsl:attribute>
+ </m:diff>
+ <m:bvar>
+ <m:ci><xsl:value-of select="LAMBDA[1]/target/@binder"/></m:ci>
+ </m:bvar>
+ <xsl:apply-templates select="*[2]/target" mode="noannot"/>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:apply helm:xref="{@id}">
+ <m:diff/>
+ <m:bvar>
+ <m:ci>$x</m:ci>
+ </m:bvar>
+ <m:apply>
+ <m:csymbol>app</m:csymbol>
+ <xsl:apply-templates select="*[2]" mode="noannot"/>
+ <m:ci>$x</m:ci>
+ </m:apply>
+ </m:apply>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:apply-templates select="*[4]" mode="noannot"/>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+</xsl:stylesheet>
--- /dev/null
+<?xml version="1.0"?>
+
+
+<xsl:stylesheet version="0.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+<xsl:output method="html"/>
+
+
+<!--******************************************************************-->
+<!-- Variable containing the absolute path of the CIC file -->
+<!--******************************************************************-->
+
+<xsl:variable name="absPath">http://localhost:8081/get?url=</xsl:variable>
+
+<xsl:template match="/">
+ <html>
+ <head></head>
+ <body>
+ <xsl:apply-templates select="Theory"/>
+ </body>
+ </html>
+</xsl:template>
+
+
+<!-- CIC TERMS -->
+
+
+
+<xsl:template match="MUTIND[string(@uri)='cic:/coq/INIT/Logic/Equality/eq.ind']" mode="search" >
+<!-- <xsl:param name="current_uri" select=""/> -->
+<!-- <h1><xsl:value-of select="string(@uri)"/></h1> -->
+<!-- <xsl:if test="string(@uri)='cic:/coq/INIT/Logic/Equality/eq.ind'"> -->
+ <xsl:value-of select="$current_uri"/><BR/>
+<!-- </xsl:if> -->
+</xsl:template>
+
+<!-- AGGIUNGERE cic: alle uri nei file Theory -->
+
+<xsl:template match="Theory">
+<!-- <xsl:param name="current_uri" select=""/> -->
+ <xsl:apply-templates>
+ <xsl:with-param name="current_uri" select="string(@uri)"/>
+ </xsl:apply-templates>
+</xsl:template>
+
+<xsl:template match="VARIABLE">
+<!-- <xsl:param name="current_uri" select=""/> -->
+<xsl:variable name="found"
+ select="boolean(document(concat(string($absPath),string($current_uri),"/",string(@uri)))//MUTIND[string(@uri)='cic:/coq/INIT/Logic/Equality/eq.ind'])"/>
+<xsl:if test="$found">
+ <xsl:value-of select="concat(string($current_uri),"/",string(@uri),".xml")"/><BR/>
+</xsl:if>
+
+<!-- <xsl:with-param name="current_uri" select="concat(string($absPath),string($current_uri),"/",string(@uri))"/>
+ </xsl:apply-templates> -->
+</xsl:template>
+
+<xsl:template match="DEFINITION">
+<!-- <xsl:param name="current_uri" select=""/> -->
+<!-- <xsl:apply-templates select="document(concat(string($absPath),string($current_uri),"/",string(@uri)))" mode="search">
+ <xsl:with-param name="current_uri" select="concat(string($absPath),string($current_uri),"/",string(@uri))"/>
+ </xsl:apply-templates> -->
+<xsl:variable name="found"
+ select="boolean(document(concat(string($absPath),string($current_uri),"/",string(@uri)))//MUTIND[string(@uri)='cic:/coq/INIT/Logic/Equality/eq.ind'])"/>
+<xsl:if test="$found">
+ <xsl:value-of select="concat(string($current_uri),"/",string(@uri),".xml")"/><BR/>
+</xsl:if>
+</xsl:template>
+
+<xsl:template match="THEOREM">
+<!-- <xsl:param name="current_uri" select=""/> -->
+<!-- <xsl:apply-templates select="document(concat(string($absPath),string($current_uri),"/",string(@uri)))" mode="search">
+ <xsl:with-param name="current_uri" select="concat(string($absPath),string($current_uri),"/",string(@uri))"/>
+ </xsl:apply-templates> -->
+<xsl:variable name="found"
+ select="boolean(document(concat(string($absPath),string($current_uri),"/",string(@uri)))//MUTIND[string(@uri)='cic:/coq/INIT/Logic/Equality/eq.ind'])"/>
+<xsl:if test="$found">
+ <xsl:value-of select="concat(string($current_uri),"/",string(@uri),".xml")"/><BR/>
+</xsl:if>
+</xsl:template>
+
+
+<xsl:template match="SECTION">
+<!-- <xsl:param name="current_uri" select=""/> -->
+ <xsl:apply-templates>
+ <xsl:with-param name="current_uri" select="concat($current_uri,"/",string(@uri))"/>
+ </xsl:apply-templates>
+
+</xsl:template>
+
+</xsl:stylesheet>
--- /dev/null
+<?xml version="1.0"?>
+
+<!--***********************************************************************-->
+<!-- XSLT version 0.1 of the stylesheet to accomplish the right inclusion -->
+<!-- of the content stylesheets: -->
+<!-- First draft: May 26 2000, Claudio Sacerdoti Coen, Irene Schena -->
+<!--***********************************************************************-->
+
+<!-- Schema of stylesheet precedences (from highest to lowest): -->
+<!-- set -> basic -> annotatedcont -->
+<!-- because theory_content is imported and has lower precendence than -->
+<!-- the templates of rootcontent (i.e. the templates of set and basic). -->
+<!-- annotatedcont -> objcontent -> content -->
+<!-- because theory_content generates an import precedence tree. -->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+
+<xsl:import href="annotatedcont.xsl"/>
+<xsl:key name="id" use="@id" match="LAMBDA|PROD|CAST|REL|SORT|APPLY|VAR|META|CONST|MUTIND|MUTCONSTRUCT|MUTCASE|FIX|COFIX|Definition|Axiom|CurrentProof|InductiveDefinition|Variable"/>
+<xsl:include href="basic.xsl"/>
+<xsl:include href="set.xsl"/>
+<xsl:include href="reals.xsl"/>
+
+<xsl:variable name="showproof" select="0"/>
+</xsl:stylesheet>
--- /dev/null
+<?xml version="1.0"?>
+
+<!--***********************************************************************-->
+<!-- XSLT version 0.1 of the stylesheet to accomplish the right inclusion -->
+<!-- of the theory content stylesheets: -->
+<!-- First draft: May 26 2000, Claudio Sacerdoti Coen, Irene Schena -->
+<!--***********************************************************************-->
+
+<!-- Schema of stylesheet precedences (from highest to lowest): -->
+<!-- set -> basic -> theory_content -->
+<!-- because theory_content is imported and has lower precendence than -->
+<!-- the templates of rootcontent (i.e. the templates of set and basic). -->
+<!-- theory_content -> annotatedcont -> objcontent -> content -->
+<!-- because theory_content generates an import precedence tree. -->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+<xsl:import href="theory_content.xsl"/>
+<xsl:include href="basic.xsl"/>
+<xsl:include href="set.xsl"/>
+
+</xsl:stylesheet>
--- /dev/null
+<?xml version="1.0"?>
+
+<!--******************************************************************-->
+<!-- Basic Set Theory -->
+<!-- First draft: April 3 2000 -->
+<!-- HELM Group: Asperti, Padovani, Sacerdoti, Schena -->
+<!--******************************************************************-->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:m="http://www.w3.org/1998/Math/MathML"
+ xmlns:helm="http://www.cs.unibo.it/helm">
+
+<!--******************************************************************-->
+<!-- Variable containing the absolute path of the CIC file -->
+<!--******************************************************************-->
+
+<xsl:variable name="absPath">http://localhost:8081/get?url=</xsl:variable>
+
+<!-- ************************* LOGIC *********************************-->
+
+
+
+<xsl:template match="*" mode="set">
+ <xsl:choose>
+ <xsl:when test="name() = 'LAMBDA'">
+ <m:set>
+ <m:bvar>
+ <m:ci>
+ <xsl:value-of select="target/@binder"/>
+ </m:ci>
+ <m:type>
+ <xsl:apply-templates select="source" mode="noannot"/>
+ </m:type>
+ </m:bvar>
+ <m:condition>
+ <xsl:apply-templates select="target" mode="noannot"/>
+ </m:condition>
+ </m:set>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="." mode="noannot"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+
+<!-- IN -->
+
+<xsl:template match="APPLY[CONST[attribute::uri='cic:/coq/SETS/Ensembles/Ensembles/In.con']]" mode="noannot">
+ <xsl:variable name="no_params">
+ <xsl:call-template name="get_no_params">
+ <xsl:with-param name="first_uri" select="/cicxml/@uri"/>
+ <xsl:with-param name="second_uri" select="CONST/@uri"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="(count(child::*) - number($no_params)) = 3">
+ <m:apply helm:xref="{@id}">
+ <m:in definitionURL="{CONST/@uri}" helm:xref="{CONST/@id}"/>
+ <xsl:apply-templates select="*[3+$no_params]" mode="noannot"/>
+ <!-- <xsl:apply-templates select="*[2+$no_params]" mode="noannot"/> -->
+ <xsl:apply-templates select="*[2+$no_params]" mode="set" />
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+
+<!-- NOT-IN -->
+<!-- NOT ha no parameters -->
+<xsl:template match="APPLY[CONST[attribute::uri='cic:/coq/INIT/Logic/not.con']
+and (count(child::*) = 2) and APPLY[CONST[attribute::uri='cic:/coq/SETS/Ensembles/Ensembles/In.con']]]" mode="noannot">
+ <xsl:variable name="no_params">
+ <xsl:call-template name="get_no_params">
+ <xsl:with-param name="first_uri" select="/cicxml/@uri"/>
+ <xsl:with-param name="second_uri" select="APPLY/CONST/@uri"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="(count(APPLY/child::*) - number($no_params)) = 3">
+ <m:apply helm:xref="{@id}">
+ <m:notin/>
+ <xsl:apply-templates select="*[2]/*[3+$no_params]" mode="noannot"/>
+ <!-- <xsl:apply-templates select="*[2]/*[2+$no_params]" mode="noannot"/> -->
+ <xsl:apply-templates select="*[2]/*[2+$no_params]" mode="set"/>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- EMPTY SET -->
+
+<xsl:template match="APPLY[MUTIND[attribute::uri='cic:/coq/SETS/Ensembles/Ensembles/Empty_set.ind']]" mode="noannot">
+ <xsl:variable name="no_params">
+ <xsl:call-template name="get_no_params">
+ <xsl:with-param name="first_uri" select="/cicxml/@uri"/>
+ <xsl:with-param name="second_uri" select="MUTIND/@uri"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="(count(child::*) - number($no_params)) = 1">
+ <m:set definitionURL="{MUTIND/@uri}" helm:xref="{@id}">
+ </m:set>
+ </xsl:when>
+ <xsl:when test="(count(child::*) - number($no_params)) = 2">
+ <m:apply helm:xref="{@id}">
+ <m:in definitionURL="cic:/coq/SETS/Ensembles/Ensembles/In.con"/>
+ <xsl:apply-templates select="*[2+$no_params]" mode="noannot"/>
+ <m:set definitionURL="{MUTIND/@uri}" helm:xref="{@id}">
+ </m:set>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- SINGLETON -->
+
+<xsl:template match="APPLY[MUTIND[attribute::uri='cic:/coq/SETS/Ensembles/Ensembles/Singleton.ind']]" mode="noannot">
+ <xsl:variable name="no_params">
+ <xsl:call-template name="get_no_params">
+ <xsl:with-param name="first_uri" select="/cicxml/@uri"/>
+ <xsl:with-param name="second_uri" select="MUTIND/@uri"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="(count(child::*) - number($no_params)) = 2">
+ <m:set definitionURL="{MUTIND/@uri}" helm:xref="{@id}">
+ <xsl:apply-templates select="*[2+$no_params]" mode="noannot"/>
+ </m:set>
+ </xsl:when>
+ <xsl:when test="(count(child::*) - number($no_params)) = 3">
+ <m:apply helm:xref="{@id}">
+ <m:in definitionURL="cic:/coq/SETS/Ensembles/Ensembles/In.con"/>
+ <xsl:apply-templates select="*[3+$no_params]" mode="noannot"/>
+ <m:set definitionURL="{MUTIND/@uri}">
+ <xsl:apply-templates select="*[2+$no_params]" mode="noannot"/>
+ </m:set>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- COUPLE -->
+
+<xsl:template match="APPLY[MUTIND[attribute::uri='cic:/coq/SETS/Ensembles/Ensembles/Couple.ind']]" mode="noannot">
+ <xsl:variable name="no_params">
+ <xsl:call-template name="get_no_params">
+ <xsl:with-param name="first_uri" select="/cicxml/@uri"/>
+ <xsl:with-param name="second_uri" select="MUTIND/@uri"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="(count(child::*) - number($no_params)) = 3">
+ <m:set definitionURL="{MUTIND/@uri}" helm:xref="{@id}">
+ <xsl:apply-templates select="*[2+$no_params]" mode="noannot"/>
+ <xsl:apply-templates select="*[3+$no_params]" mode="noannot"/>
+ </m:set>
+ </xsl:when>
+ <xsl:when test="(count(child::*) - number($no_params)) = 4">
+ <m:apply helm:xref="{@id}">
+ <m:in definitionURL="cic:/coq/SETS/Ensembles/Ensembles/In.con"/>
+ <xsl:apply-templates select="*[4+$no_params]" mode="noannot"/>
+ <m:set definitionURL="{MUTIND/@uri}">
+ <xsl:apply-templates select="*[2+$no_params]" mode="noannot"/>
+ <xsl:apply-templates select="*[3+$no_params]" mode="noannot"/>
+ </m:set>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- TRIPLE -->
+
+<xsl:template match="APPLY[MUTIND[attribute::uri='cic:/coq/SETS/Ensembles/Ensembles/Triple.ind'] and (count(child::*) = 5)]" mode="noannot">
+ <xsl:variable name="no_params">
+ <xsl:call-template name="get_no_params">
+ <xsl:with-param name="first_uri" select="/cicxml/@uri"/>
+ <xsl:with-param name="second_uri" select="MUTIND/@uri"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="(count(child::*) - number($no_params)) = 4">
+ <m:set definitionURL="{MUTIND/@uri}" helm:xref="{@id}">
+ <xsl:apply-templates select="*[2+$no_params]" mode="noannot"/>
+ <xsl:apply-templates select="*[3+$no_params]" mode="noannot"/>
+ <xsl:apply-templates select="*[4+$no_params]" mode="noannot"/>
+ </m:set>
+ </xsl:when>
+ <xsl:when test="(count(child::*) - number($no_params)) = 5">
+ <m:apply helm:xref="{@id}">
+ <m:in definitionURL="cic:/coq/SETS/Ensembles/Ensembles/In.con"/>
+ <xsl:apply-templates select="*[5+$no_params]" mode="noannot"/>
+ <m:set definitionURL="{MUTIND/@uri}">
+ <xsl:apply-templates select="*[2+$no_params]" mode="noannot"/>
+ <xsl:apply-templates select="*[3+$no_params]" mode="noannot"/>
+ <xsl:apply-templates select="*[4+$no_params]" mode="noannot"/>
+ </m:set>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- INTERSECTION -->
+
+<xsl:template match="APPLY[MUTIND[attribute::uri='cic:/coq/SETS/Ensembles/Ensembles/Intersection.ind']]" mode="noannot">
+ <xsl:variable name="no_params">
+ <xsl:call-template name="get_no_params">
+ <xsl:with-param name="first_uri" select="/cicxml/@uri"/>
+ <xsl:with-param name="second_uri" select="MUTIND/@uri"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="(count(child::*) - number($no_params)) = 3">
+ <m:apply helm:xref="{@id}">
+ <m:intersect definitionURL="{MUTIND/@uri}" helm:xref="{MUTIND/@id}"/>
+ <xsl:apply-templates select="*[2+$no_params]" mode="set"/>
+ <xsl:apply-templates select="*[3+$no_params]" mode="set"/>
+ </m:apply>
+ </xsl:when>
+ <xsl:when test="(count(child::*) - number($no_params)) = 4">
+ <m:apply helm:xref="{@id}">
+ <m:in/>
+ <xsl:apply-templates select="*[4+$no_params]" mode="noannot"/>
+ <m:apply>
+ <m:intersect definitionURL="{MUTIND/@uri}" helm:xref="{MUTIND/@id}"/>
+ <xsl:apply-templates select="*[2+$no_params]" mode="set"/>
+ <xsl:apply-templates select="*[3+$no_params]" mode="set"/>
+ </m:apply>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+
+<!-- UNION -->
+
+<xsl:template match="APPLY[MUTIND[attribute::uri='cic:/coq/SETS/Ensembles/Ensembles/Union.ind']]" mode="noannot">
+ <xsl:variable name="no_params">
+ <xsl:call-template name="get_no_params">
+ <xsl:with-param name="first_uri" select="/cicxml/@uri"/>
+ <xsl:with-param name="second_uri" select="MUTIND/@uri"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="(count(child::*) - number($no_params)) = 3">
+ <m:apply helm:xref="{@id}">
+ <m:union definitionURL="{MUTIND/@uri}" helm:xref="{MUTIND/@id}"/>
+ <xsl:apply-templates select="*[2+$no_params]" mode="set"/>
+ <xsl:apply-templates select="*[3+$no_params]" mode="set"/>
+ </m:apply>
+ </xsl:when>
+ <xsl:when test="(count(child::*) - number($no_params)) = 4">
+ <m:apply helm:xref="{@id}">
+ <m:in/>
+ <xsl:apply-templates select="*[4+$no_params]" mode="noannot"/>
+ <m:apply>
+ <m:union definitionURL="{MUTIND/@uri}" helm:xref="{MUTIND/@id}"/>
+ <xsl:apply-templates select="*[2+$no_params]" mode="set"/>
+ <xsl:apply-templates select="*[3+$no_params]" mode="set"/>
+ </m:apply>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- INCLUDED -->
+
+<xsl:template match="APPLY[CONST[attribute::uri='cic:/coq/SETS/Ensembles/Ensembles/Included.con']]" mode="noannot">
+ <xsl:variable name="no_params">
+ <xsl:call-template name="get_no_params">
+ <xsl:with-param name="first_uri" select="/cicxml/@uri"/>
+ <xsl:with-param name="second_uri" select="CONST/@uri"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="(count(child::*) - number($no_params)) = 3">
+ <m:apply helm:xref="{@id}">
+ <m:subset definitionURL="{CONST/@uri}" helm:xref="{CONST/@id}"/>
+ <xsl:apply-templates select="*[2+$no_params]" mode="set"/>
+ <xsl:apply-templates select="*[3+$no_params]" mode="set"/>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- STRICTLY INCLUDED -->
+
+<xsl:template match="APPLY[CONST[attribute::uri='cic:/coq/SETS/Ensembles/Ensembles/Strict_Included.con']]" mode="noannot">
+ <xsl:variable name="no_params">
+ <xsl:call-template name="get_no_params">
+ <xsl:with-param name="first_uri" select="/cicxml/@uri"/>
+ <xsl:with-param name="second_uri" select="CONST/@uri"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="(count(child::*) - number($no_params)) = 3">
+ <m:apply helm:xref="{@id}">
+ <m:prsubset definitionURL="{CONST/@uri}" helm:xref="{CONST/@id}"/>
+ <xsl:apply-templates select="*[2+$no_params]" mode="set"/>
+ <xsl:apply-templates select="*[3+$no_params]" mode="set"/>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- SET-DIFF -->
+
+<xsl:template match="APPLY[CONST[attribute::uri='cic:/coq/SETS/Ensembles/Ensembles/Setminus.con']]" mode="noannot">
+ <xsl:variable name="no_params">
+ <xsl:call-template name="get_no_params">
+ <xsl:with-param name="first_uri" select="/cicxml/@uri"/>
+ <xsl:with-param name="second_uri" select="CONST/@uri"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="(count(child::*) - number($no_params)) = 3">
+ <m:apply helm:xref="{@id}">
+ <m:setdiff definitionURL="{CONST/@uri}" helm:xref="{CONST/@id}"/>
+ <xsl:apply-templates select="*[2+$no_params]" mode="set"/>
+ <xsl:apply-templates select="*[3+$no_params]" mode="set"/>
+ </m:apply>
+ </xsl:when>
+ <xsl:when test="(count(child::*) - number($no_params)) = 4">
+ <m:apply helm:xref="{@id}">
+ <m:in/>
+ <xsl:apply-templates select="*[4+$no_params]" mode="noannot"/>
+ <m:apply>
+ <m:setdiff definitionURL="{CONST/@uri}" helm:xref="{CONST/@id}"/>
+ <xsl:apply-templates select="*[2+$no_params]" mode="set"/>
+ <xsl:apply-templates select="*[3+$no_params]" mode="set"/>
+ </m:apply>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- ADD-ELEM -->
+
+<xsl:template match="APPLY[CONST[attribute::uri='cic:/coq/SETS/Ensembles/Ensembles/Add.con']]" mode="noannot">
+ <xsl:variable name="no_params">
+ <xsl:call-template name="get_no_params">
+ <xsl:with-param name="first_uri" select="/cicxml/@uri"/>
+ <xsl:with-param name="second_uri" select="CONST/@uri"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="(count(child::*) - number($no_params)) = 3">
+ <m:apply helm:xref="{@id}">
+ <m:union definitionURL="{CONST/@uri}" helm:xref="{CONST/@id}"/>
+ <xsl:apply-templates select="*[2+$no_params]" mode="set"/>
+ <m:set>
+ <xsl:apply-templates select="*[3+$no_params]" mode="noannot"/>
+ </m:set>
+ </m:apply>
+ </xsl:when>
+ <xsl:when test="(count(child::*) - number($no_params)) = 4">
+ <m:apply helm:xref="{@id}">
+ <m:in/>
+ <xsl:apply-templates select="*[4+$no_params]" mode="noannot"/>
+ <m:apply>
+ <m:union definitionURL="{CONST/@uri}" helm:xref="{CONST/@id}"/>
+ <xsl:apply-templates select="*[2+$no_params]" mode="set"/>
+ <m:set>
+ <xsl:apply-templates select="*[3+$no_params]" mode="noannot"/>
+ </m:set>
+ </m:apply>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- SUBTRACT-ELEM -->
+
+<xsl:template match="APPLY[CONST[attribute::uri='cic:/coq/SETS/Ensembles/Ensembles/Subtract.con']]" mode="noannot">
+ <xsl:variable name="no_params">
+ <xsl:call-template name="get_no_params">
+ <xsl:with-param name="first_uri" select="/cicxml/@uri"/>
+ <xsl:with-param name="second_uri" select="CONST/@uri"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="(count(child::*) - number($no_params)) = 3">
+ <m:apply helm:xref="{@id}">
+ <m:setdiff definitionURL="{CONST/@uri}" helm:xref="{CONST/@id}"/>
+ <xsl:apply-templates select="*[2+$no_params]" mode="set"/>
+ <m:set>
+ <xsl:apply-templates select="*[3+$no_params]" mode="noannot"/>
+ </m:set>
+ </m:apply>
+ </xsl:when>
+ <xsl:when test="(count(child::*) - number($no_params)) = 4">
+ <m:apply helm:xref="{@id}">
+ <m:in/>
+ <xsl:apply-templates select="*[4+$no_params]" mode="noannot"/>
+ <m:apply>
+ <m:setdiff definitionURL="{CONST/@uri}" helm:xref="{CONST/@id}"/>
+ <xsl:apply-templates select="*[2+$no_params]" mode="set"/>
+ <m:set>
+ <xsl:apply-templates select="*[3+$no_params]" mode="noannot"/>
+ </m:set>
+ </m:apply>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- CARD -->
+
+<xsl:template match="APPLY[MUTIND[attribute::uri='cic:/coq/SETS/Finite_sets/Ensembles_finis/cardinal.ind']]" mode="noannot">
+ <xsl:variable name="no_params">
+ <xsl:call-template name="get_no_params">
+ <xsl:with-param name="first_uri" select="/cicxml/@uri"/>
+ <xsl:with-param name="second_uri" select="MUTIND/@uri"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="(count(child::*) - number($no_params)) = 3">
+ <m:apply helm:xref="{@id}">
+ <m:eq/>
+ <m:apply>
+ <m:card definitionURL="{MUTIND/@uri}" helm:xref="{MUTIND/@id}"/>
+ <xsl:apply-templates select="*[2+$no_params]" mode="set"/>
+ </m:apply>
+ <xsl:apply-templates select="*[3+$no_params]" mode="noannot"/>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+</xsl:stylesheet>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null
+<?xml version="1.0"?>
+
+<!--***********************************************************************-->
+<!-- XSLT version 0.1 of theory objects to theory sections: -->
+<!-- First draft: May 08 2000, Claudio Sacerdoti Coen, Irene Schena -->
+<!--***********************************************************************-->
+
+<xsl:stylesheet version="0.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+<xsl:import href="rootcontent.xsl"/>
+
+<!--******************************************************************-->
+<!-- Variable containing the absolute path of the CIC file -->
+<!--******************************************************************-->
+
+<xsl:variable name="absPath">http://localhost:8081/get?url=</xsl:variable>
+
+<!-- THEORY -->
+
+<xsl:template match="Theory">
+ <SECTION>
+ <xsl:apply-templates><xsl:with-param name="current_uri" select="string(@uri)"/></xsl:apply-templates>
+ </SECTION>
+</xsl:template>
+
+<!-- SUBTHEORY -->
+
+<xsl:template match="SECTION">
+<xsl:param name="current_uri"/>
+ <SECTION>
+ <xsl:apply-templates><xsl:with-param name="current_uri" select="concat($current_uri,"/",string(@uri))"/></xsl:apply-templates>
+ </SECTION>
+</xsl:template>
+
+<!-- THEORY ELEMENTS -->
+
+<xsl:template match="DEFINITION">
+<xsl:param name="current_uri"/>
+ <xsl:apply-templates select="document(concat(string($absPath),string($current_uri),"/",string(@uri)))"/>
+</xsl:template>
+
+<xsl:template match="AXIOM">
+<xsl:param name="current_uri"/>
+ <xsl:apply-templates select="document(concat(string($absPath),string($current_uri),"/",string(@uri)))"/>
+</xsl:template>
+
+<xsl:template match="THEOREM">
+<xsl:param name="current_uri"/>
+ <xsl:apply-templates select="document(concat(string($absPath),string($current_uri),"/",string(@uri)))"/>
+</xsl:template>
+
+<xsl:template match="VARIABLE">
+<xsl:param name="current_uri"/>
+ <xsl:apply-templates select="document(concat(string($absPath),string($current_uri),"/",string(@uri)))"/>
+</xsl:template>
+
+</xsl:stylesheet>
--- /dev/null
+<?xml version="1.0"?>
+
+<!--***********************************************************************-->
+<!-- XSLT version 0.1 of theory sections to HTML: -->
+<!-- First draft: May 10 2000, Irene Schena -->
+<!--***********************************************************************-->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:m="http://www.w3.org/1998/Math/MathML">
+
+<xsl:include href="annotatedpres.xsl"/>
+
+<xsl:template match="SECTION">
+<xsl:param name="subsect" select="0"/>
+ <xsl:choose>
+ <xsl:when test="$subsect = 0">
+ <html>
+ <head></head>
+ <body>
+ <m:math><m:mtext>BEGIN SECTION</m:mtext></m:math>
+ <xsl:apply-templates select="*"><xsl:with-param name="subsect" select="1"/></xsl:apply-templates>
+ <m:math><m:mtext>END SECTION</m:mtext></m:math>
+ </body>
+ </html>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:math><m:mtext>BEGIN SECTION</m:mtext></m:math>
+ <xsl:apply-templates select="*"><xsl:with-param name="subsect" select="1"/></xsl:apply-templates>
+ <m:math><m:mtext>END SECTION</m:mtext></m:math>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+</xsl:stylesheet>
--- /dev/null
+<?xml version="1.0"?>
+
+<!--***********************************************************************-->
+<!-- XSLT version 0.1 of theory objects to theory sections: -->
+<!-- First draft: May 08 2000, Claudio Sacerdoti Coen, Irene Schena -->
+<!--***********************************************************************-->
+
+<xsl:stylesheet version="0.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+<xsl:import href="rootcontent.xsl"/>
+
+<!--******************************************************************-->
+<!-- Variable containing the absolute path of the CIC file -->
+<!--******************************************************************-->
+
+<xsl:variable name="absPath">http://localhost:8081/getciconly?uri=</xsl:variable>
+
+<!-- THEORY -->
+
+<xsl:template match="Theory">
+ <SECTION>
+ <xsl:apply-templates><xsl:with-param name="current_uri" select="string(@uri)"/></xsl:apply-templates>
+ </SECTION>
+</xsl:template>
+
+<!-- SUBTHEORY -->
+
+<xsl:template match="SECTION">
+<xsl:param name="current_uri"/>
+ <SECTION>
+ <xsl:apply-templates><xsl:with-param name="current_uri" select="concat($current_uri,"/",string(@uri))"/></xsl:apply-templates>
+ </SECTION>
+</xsl:template>
+
+<!-- THEORY ELEMENTS -->
+
+<xsl:template match="DEFINITION">
+<xsl:param name="current_uri"/>
+ <xsl:apply-templates select="document(concat(string($absPath),string($current_uri),"/",string(@uri)))"/>
+</xsl:template>
+
+<xsl:template match="AXIOM">
+<xsl:param name="current_uri"/>
+ <xsl:apply-templates select="document(concat(string($absPath),string($current_uri),"/",string(@uri)))"/>
+</xsl:template>
+
+<xsl:template match="THEOREM">
+<xsl:param name="current_uri"/>
+ <xsl:apply-templates select="document(concat(string($absPath),string($current_uri),"/",string(@uri)))"/>
+</xsl:template>
+
+<xsl:template match="VARIABLE">
+<xsl:param name="current_uri"/>
+ <xsl:apply-templates select="document(concat(string($absPath),string($current_uri),"/",string(@uri)))"/>
+</xsl:template>
+
+</xsl:stylesheet>
--- /dev/null
+<?xml version="1.0"?>
+
+<!--***********************************************************************-->
+<!-- XSLT version 0.1 of theory sections to HTML: -->
+<!-- First draft: May 10 2000, Irene Schena -->
+<!-- November 15 2000, Irene Schena -->
+<!--***********************************************************************-->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:m="http://www.w3.org/1998/Math/MathML">
+
+<xsl:import href="annotatedpres.xsl"/>
+
+<xsl:template match="SECTION">
+<xsl:param name="subsect" select="0"/>
+ <xsl:choose>
+ <xsl:when test="$subsect = 0">
+ <html>
+ <head></head>
+ <body>
+ <m:math><m:mtext>BEGIN SECTION</m:mtext></m:math>
+ <xsl:apply-templates select="*"><xsl:with-param name="subsect" select="1"/></xsl:apply-templates>
+ <m:math><m:mtext>END SECTION</m:mtext></m:math>
+ </body>
+ </html>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:math><m:mtext>BEGIN SECTION</m:mtext></m:math>
+ <xsl:apply-templates select="*"><xsl:with-param name="subsect" select="1"/></xsl:apply-templates>
+ <m:math><m:mtext>END SECTION</m:mtext></m:math>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+</xsl:stylesheet>