1 <?xml version='1.0' encoding="UTF-8"?>
\r
2 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
\r
3 xmlns:m="http://www.w3.org/1998/Math/MathML"
\r
6 <!-- ====================================================================== -->
\r
7 <!-- $Id: tokens.xsl 282 2006-11-19 16:28:39Z fletcher $
\r
8 This file is part of the XSLT MathML Library distribution.
\r
9 See ./README or http://www.raleigh.ru/MathML/mmltex for
\r
10 copyright and other information
\r
11 Modified by Fletcher T. Penney for MultiMarkdown Version 2.0.a -->
\r
12 <!-- ====================================================================== -->
\r
14 <xsl:template match="m:mi|m:mn|m:mo|m:mtext|m:ms">
\r
15 <xsl:call-template name="CommonTokenAtr"/>
\r
18 <!-- 3.2.9 mglyph -->
\r
19 <xsl:template match="m:mglyph">
\r
20 <xsl:text>\textcolor{red}{</xsl:text>
\r
21 <xsl:value-of select="@alt"/>
\r
22 <xsl:text>}</xsl:text>
\r
25 <xsl:template name="mi">
\r
27 <xsl:when test="string-length(normalize-space(.))>1 and not(@mathvariant)">
\r
28 <xsl:text>\mathrm{</xsl:text>
\r
29 <xsl:apply-templates/>
\r
30 <xsl:text>}</xsl:text>
\r
33 <xsl:apply-templates/>
\r
38 <xsl:template name="mn">
\r
40 <xsl:when test="string(number(.))='NaN' and not(@mathvariant)">
\r
41 <xsl:text>\mathrm{</xsl:text>
\r
42 <xsl:apply-templates/>
\r
43 <xsl:text>}</xsl:text>
\r
46 <xsl:apply-templates/>
\r
51 <!-- 3.2.5 Math Operator -->
\r
52 <xsl:template name="mo">
\r
53 <xsl:if test="translate(normalize-space(.),'()[]}|','{{{{{{')='{'">
\r
55 <xsl:when test="not(@stretchy='false') and count(preceding-sibling::m:mo[translate(normalize-space(.),'()[]}|','{{{{{{')='{'])mod 2=0 and following-sibling::m:mo[1][not(@stretchy='false')][translate(normalize-space(.),'()[]}|','{{{{{{')='{']">
\r
56 <xsl:text>\left</xsl:text>
\r
58 <xsl:when test="not(@stretchy='false') and count(preceding-sibling::m:mo[translate(normalize-space(.),'()[]}|','{{{{{{')='{'])mod 2=1 and preceding-sibling::m:mo[1][not(@stretchy='false')][translate(normalize-space(.),'()[]}|','{{{{{{')='{']">
\r
59 <xsl:text>\right</xsl:text>
\r
63 <xsl:apply-templates/>
\r
66 <xsl:template name="mtext">
\r
67 <xsl:variable name="content">
\r
68 <xsl:call-template name="replaceMtextEntities">
\r
69 <xsl:with-param name="content" select="normalize-space(.)"/>
\r
70 </xsl:call-template>
\r
72 <xsl:text>\text{</xsl:text>
\r
73 <xsl:value-of select="$content"/>
\r
74 <xsl:text>}</xsl:text>
\r
77 <xsl:template match="m:mspace">
\r
78 <xsl:text>\phantom{\rule</xsl:text>
\r
79 <xsl:if test="@depth">
\r
80 <xsl:text>[-</xsl:text>
\r
81 <xsl:value-of select="@depth"/>
\r
82 <xsl:text>]</xsl:text>
\r
84 <xsl:text>{</xsl:text>
\r
85 <xsl:if test="not(@width)">
\r
86 <xsl:text>0ex</xsl:text>
\r
88 <xsl:value-of select="@width"/>
\r
89 <xsl:text>}{</xsl:text>
\r
90 <xsl:if test="not(@height)">
\r
91 <xsl:text>0ex</xsl:text>
\r
93 <xsl:value-of select="@height"/>
\r
94 <xsl:text>}}</xsl:text>
\r
97 <xsl:template name="ms">
\r
99 <xsl:when test="@lquote"><xsl:value-of select="@lquote"/></xsl:when>
\r
100 <xsl:otherwise><xsl:text>''</xsl:text></xsl:otherwise>
\r
101 </xsl:choose><xsl:apply-templates/><xsl:choose>
\r
102 <xsl:when test="@rquote"><xsl:value-of select="@rquote"/></xsl:when>
\r
103 <xsl:otherwise><xsl:text>''</xsl:text></xsl:otherwise>
\r
107 <xsl:template name="CommonTokenAtr">
\r
108 <xsl:if test="@mathbackground">
\r
109 <xsl:text>\colorbox[rgb]{</xsl:text>
\r
110 <xsl:call-template name="color">
\r
111 <xsl:with-param name="color" select="@mathbackground"/>
\r
112 </xsl:call-template>
\r
113 <xsl:text>}{$</xsl:text>
\r
115 <xsl:if test="@color[not(@mathcolor)] or @mathcolor"> <!-- Note: @color is deprecated in MathML 2.0 -->
\r
116 <xsl:text>\textcolor[rgb]{</xsl:text>
\r
117 <xsl:call-template name="color">
\r
118 <xsl:with-param name="color" select="@color|@mathcolor"/>
\r
119 </xsl:call-template>
\r
120 <xsl:text>}{</xsl:text>
\r
122 <xsl:if test="@mathvariant">
\r
124 <xsl:when test="@mathvariant='normal'">
\r
125 <xsl:text>\mathrm{</xsl:text>
\r
127 <xsl:when test="@mathvariant='bold'">
\r
128 <xsl:text>\mathbf{</xsl:text>
\r
130 <xsl:when test="@mathvariant='italic'">
\r
131 <xsl:text>\mathit{</xsl:text>
\r
133 <xsl:when test="@mathvariant='bold-italic'"> <!-- not supported -->
\r
134 <xsl:text>\mathit{</xsl:text>
\r
135 <xsl:message>The value bold-italic for mathvariant is not supported</xsl:message>
\r
137 <xsl:when test="@mathvariant='double-struck'"> <!-- Required amsfonts -->
\r
138 <xsl:text>\mathbb{</xsl:text>
\r
140 <xsl:when test="@mathvariant='bold-fraktur'"> <!-- not supported -->
\r
141 <xsl:text>\mathfrak{</xsl:text>
\r
142 <xsl:message>The value bold-fraktur for mathvariant is not supported</xsl:message>
\r
144 <xsl:when test="@mathvariant='script'">
\r
145 <xsl:text>\mathcal{</xsl:text>
\r
147 <xsl:when test="@mathvariant='bold-script'"> <!-- not supported -->
\r
148 <xsl:text>\mathcal{</xsl:text>
\r
149 <xsl:message>The value bold-script for mathvariant is not supported</xsl:message>
\r
151 <xsl:when test="@mathvariant='fraktur'"> <!-- Required amsfonts -->
\r
152 <xsl:text>\mathfrak{</xsl:text>
\r
154 <xsl:when test="@mathvariant='sans-serif'">
\r
155 <xsl:text>\mathsf{</xsl:text>
\r
157 <xsl:when test="@mathvariant='bold-sans-serif'"> <!-- not supported -->
\r
158 <xsl:text>\mathsf{</xsl:text>
\r
159 <xsl:message>The value bold-sans-serif for mathvariant is not supported</xsl:message>
\r
161 <xsl:when test="@mathvariant='sans-serif-italic'"> <!-- not supported -->
\r
162 <xsl:text>\mathsf{</xsl:text>
\r
163 <xsl:message>The value sans-serif-italic for mathvariant is not supported</xsl:message>
\r
165 <xsl:when test="@mathvariant='sans-serif-bold-italic'"> <!-- not supported -->
\r
166 <xsl:text>\mathsf{</xsl:text>
\r
167 <xsl:message>The value sans-serif-bold-italic for mathvariant is not supported</xsl:message>
\r
169 <xsl:when test="@mathvariant='monospace'">
\r
170 <xsl:text>\mathtt{</xsl:text>
\r
173 <xsl:text>{</xsl:text>
\r
174 <xsl:message>Error at mathvariant attribute</xsl:message>
\r
178 <xsl:call-template name="selectTemplate"/>
\r
179 <xsl:if test="@mathvariant">
\r
180 <xsl:text>}</xsl:text>
\r
182 <xsl:if test="@color or @mathcolor">
\r
183 <xsl:text>}</xsl:text>
\r
185 <xsl:if test="@mathbackground">
\r
186 <xsl:text>$}</xsl:text>
\r
190 <xsl:template name="selectTemplate">
\r
192 <xsl:when test="local-name(.)='mi'">
\r
193 <xsl:call-template name="mi"/>
\r
195 <xsl:when test="local-name(.)='mn'">
\r
196 <xsl:call-template name="mn"/>
\r
198 <xsl:when test="local-name(.)='mo'">
\r
199 <xsl:call-template name="mo"/>
\r
201 <xsl:when test="local-name(.)='mtext'">
\r
202 <xsl:call-template name="mtext"/>
\r
204 <xsl:when test="local-name(.)='ms'">
\r
205 <xsl:call-template name="ms"/>
\r
210 <xsl:template name="color">
\r
211 <!-- NB: Variables colora and valueColor{n} only for Sablotron -->
\r
212 <xsl:param name="color"/>
\r
213 <xsl:variable name="colora" select="translate($color,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')"/>
\r
215 <xsl:when test="starts-with($colora,'#') and string-length($colora)=4">
\r
216 <xsl:variable name="valueColor">
\r
217 <xsl:call-template name="Hex2Decimal">
\r
218 <xsl:with-param name="arg" select="substring($colora,2,1)"/>
\r
219 </xsl:call-template>
\r
221 <xsl:value-of select="$valueColor div 15"/><xsl:text>,</xsl:text>
\r
222 <xsl:variable name="valueColor1">
\r
223 <xsl:call-template name="Hex2Decimal">
\r
224 <xsl:with-param name="arg" select="substring($colora,3,1)"/>
\r
225 </xsl:call-template>
\r
227 <xsl:value-of select="$valueColor1 div 15"/><xsl:text>,</xsl:text>
\r
228 <xsl:variable name="valueColor2">
\r
229 <xsl:call-template name="Hex2Decimal">
\r
230 <xsl:with-param name="arg" select="substring($colora,4,1)"/>
\r
231 </xsl:call-template>
\r
233 <xsl:value-of select="$valueColor2 div 15"/>
\r
235 <xsl:when test="starts-with($colora,'#') and string-length($colora)=7">
\r
236 <xsl:variable name="valueColor1">
\r
237 <xsl:call-template name="Hex2Decimal">
\r
238 <xsl:with-param name="arg" select="substring($colora,2,1)"/>
\r
239 </xsl:call-template>
\r
241 <xsl:variable name="valueColor2">
\r
242 <xsl:call-template name="Hex2Decimal">
\r
243 <xsl:with-param name="arg" select="substring($colora,3,1)"/>
\r
244 </xsl:call-template>
\r
246 <xsl:value-of select="($valueColor1*16 + $valueColor2) div 255"/><xsl:text>,</xsl:text>
\r
247 <xsl:variable name="valueColor1a">
\r
248 <xsl:call-template name="Hex2Decimal">
\r
249 <xsl:with-param name="arg" select="substring($colora,4,1)"/>
\r
250 </xsl:call-template>
\r
252 <xsl:variable name="valueColor2a">
\r
253 <xsl:call-template name="Hex2Decimal">
\r
254 <xsl:with-param name="arg" select="substring($colora,5,1)"/>
\r
255 </xsl:call-template>
\r
257 <xsl:value-of select="($valueColor1a*16 + $valueColor2a) div 255"/><xsl:text>,</xsl:text>
\r
258 <xsl:variable name="valueColor1b">
\r
259 <xsl:call-template name="Hex2Decimal">
\r
260 <xsl:with-param name="arg" select="substring($colora,6,1)"/>
\r
261 </xsl:call-template>
\r
263 <xsl:variable name="valueColor2b">
\r
264 <xsl:call-template name="Hex2Decimal">
\r
265 <xsl:with-param name="arg" select="substring($colora,7,1)"/>
\r
266 </xsl:call-template>
\r
268 <xsl:value-of select="($valueColor1b*16 + $valueColor2b) div 255"/>
\r
270 <!-- ======================= if color specifed as an html-color-name ========================================== -->
\r
271 <xsl:when test="$colora='aqua'"><xsl:text>0,1,1</xsl:text></xsl:when>
\r
272 <xsl:when test="$colora='black'"><xsl:text>0,0,0</xsl:text></xsl:when>
\r
273 <xsl:when test="$colora='blue'"><xsl:text>0,0,1</xsl:text></xsl:when>
\r
274 <xsl:when test="$colora='fuchsia'"><xsl:text>1,0,1</xsl:text></xsl:when>
\r
275 <xsl:when test="$colora='gray'"><xsl:text>.5,.5,.5</xsl:text></xsl:when>
\r
276 <xsl:when test="$colora='green'"><xsl:text>0,.5,0</xsl:text></xsl:when>
\r
277 <xsl:when test="$colora='lime'"><xsl:text>0,1,0</xsl:text></xsl:when>
\r
278 <xsl:when test="$colora='maroon'"><xsl:text>.5,0,0</xsl:text></xsl:when>
\r
279 <xsl:when test="$colora='navy'"><xsl:text>0,0,.5</xsl:text></xsl:when>
\r
280 <xsl:when test="$colora='olive'"><xsl:text>.5,.5,0</xsl:text></xsl:when>
\r
281 <xsl:when test="$colora='purple'"><xsl:text>.5,0,.5</xsl:text></xsl:when>
\r
282 <xsl:when test="$colora='red'"><xsl:text>1,0,0</xsl:text></xsl:when>
\r
283 <xsl:when test="$colora='silver'"><xsl:text>.75,.75,.75</xsl:text></xsl:when>
\r
284 <xsl:when test="$colora='teal'"><xsl:text>0,.5,.5</xsl:text></xsl:when>
\r
285 <xsl:when test="$colora='white'"><xsl:text>1,1,1</xsl:text></xsl:when>
\r
286 <xsl:when test="$colora='yellow'"><xsl:text>1,1,0</xsl:text></xsl:when>
\r
288 <xsl:message>Exception at color template</xsl:message>
\r
293 <xsl:template name="Hex2Decimal">
\r
294 <xsl:param name="arg"/>
\r
296 <xsl:when test="$arg='f'">
\r
297 <xsl:value-of select="15"/>
\r
299 <xsl:when test="$arg='e'">
\r
300 <xsl:value-of select="14"/>
\r
302 <xsl:when test="$arg='d'">
\r
303 <xsl:value-of select="13"/>
\r
305 <xsl:when test="$arg='c'">
\r
306 <xsl:value-of select="12"/>
\r
308 <xsl:when test="$arg='b'">
\r
309 <xsl:value-of select="11"/>
\r
311 <xsl:when test="$arg='a'">
\r
312 <xsl:value-of select="10"/>
\r
314 <xsl:when test="translate($arg, '0123456789', '9999999999')='9'"> <!-- if $arg is number -->
\r
315 <xsl:value-of select="$arg"/>
\r
318 <xsl:message>Exception at Hex2Decimal template</xsl:message>
\r
323 <xsl:template match="m:*/text()">
\r
324 <xsl:call-template name="replaceEntities">
\r
325 <xsl:with-param name="content" select="normalize-space()"/>
\r
326 </xsl:call-template>
\r