diff options
Diffstat (limited to 'docs/xslt/db2latex-xsl/xsl/mathml/mathml.presentation.mod.xsl')
-rw-r--r-- | docs/xslt/db2latex-xsl/xsl/mathml/mathml.presentation.mod.xsl | 493 |
1 files changed, 493 insertions, 0 deletions
diff --git a/docs/xslt/db2latex-xsl/xsl/mathml/mathml.presentation.mod.xsl b/docs/xslt/db2latex-xsl/xsl/mathml/mathml.presentation.mod.xsl new file mode 100644 index 0000000000..a3a67e17be --- /dev/null +++ b/docs/xslt/db2latex-xsl/xsl/mathml/mathml.presentation.mod.xsl @@ -0,0 +1,493 @@ +<?xml version='1.0'?> +<!DOCTYPE xsl:stylesheet +[ + <!ENTITY % mmlalias PUBLIC "MathML alias" "ent/mmlalias.ent"> %mmlalias; + <!ENTITY % mmlextra PUBLIC "MathML extra" "ent/mmlextra.ent"> %mmlextra; +]> +<!--############################################################################# + | $Id: mathml.presentation.mod.xsl,v 1.4 2004/01/18 10:39:50 j-devenish Exp $ + |- ############################################################################# + | $Author: j-devenish $ + | + | PURPOSE: MathML presentation markup. + | Note: these elements are not part of the DocBook DTD. I have extended + | the docbook DTD in order to support this tags, so that's why I have these + | templates here. + | + | MathML namespace used -> mml + + ############################################################################## --> + +<xsl:stylesheet version='1.0' + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns="http://www.w3.org/1998/Math/MathML"> + +<xsl:template match="mml:mrow"> + <xsl:text>{</xsl:text> <xsl:apply-templates/> <xsl:text>}</xsl:text> +</xsl:template> + +<xsl:variable name="latex.entities.xml" select="document('latex.entities.xml')"/> + + +<!-- TOKENS --> +<!-- Math Identifier --> +<xsl:template match="mml:mi"> + <xsl:variable name="fontstyle" select="@fontstyle"/> + <xsl:variable name="identifier" select="normalize-space(.)"/> + <xsl:variable name="equivalent"> + <xsl:if test="string-length($identifier)=1"> + <xsl:value-of select="$latex.entities.xml/latex/character[@entity=$identifier]"/> + </xsl:if> + </xsl:variable> + <xsl:choose> + <xsl:when test="$identifier='ⅇ'"> + <xsl:text>\textrm{e}</xsl:text> + </xsl:when> + <xsl:when test="$identifier='ⅈ'"> + <xsl:text>\textrm{i}</xsl:text> + </xsl:when> + <xsl:when test="$identifier='∞'"><!--/infty infinity --> + <xsl:text>\infty</xsl:text> + </xsl:when> + <!-- currently tries to map single-character identifiers only --> + <xsl:when test="$equivalent!=''"> + <xsl:text>{</xsl:text> + <xsl:copy-of select="$equivalent"/> + <xsl:text>}</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:if test="$fontstyle='normal' or string-length($identifier)>1"> + <xsl:text>\textrm</xsl:text> + </xsl:if> + <xsl:text>{</xsl:text> + <xsl:copy-of select="$identifier"/> + <xsl:text>}</xsl:text> + </xsl:otherwise> + </xsl:choose> +</xsl:template> + +<!-- Math Number --> +<xsl:template match="mml:mn"> + <xsl:copy-of select="normalize-space(.)"/> +</xsl:template> + +<!-- Math Phantom --> +<xsl:template match="mml:mphantom"> + <xsl:apply-templates/> +</xsl:template> + +<!-- Empty unless $character is a single character --> +<xsl:template name="generate.equivalent"> + <xsl:param name="arguments" select="0"/> + <xsl:param name="character"/> + <xsl:if test="string-length($character)=1"> + <xsl:choose> + <xsl:when test="$arguments>0"> + <xsl:value-of select="$latex.entities.xml/latex/character[@entity=$character and @arguments=$arguments]"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$latex.entities.xml/latex/character[@entity=$character and @arguments='']"/> + </xsl:otherwise> + </xsl:choose> + </xsl:if> +</xsl:template> + +<!-- Math Operator --> +<xsl:template match="mml:mo"> + <xsl:variable name="operator" select="normalize-space(.)"/> + <xsl:variable name="equivalent"> + <xsl:call-template name="generate.equivalent"> + <xsl:with-param name="character" select="$operator"/> + </xsl:call-template> + </xsl:variable> + <xsl:choose> + <xsl:when test="$operator='⁡'"> + <xsl:text></xsl:text> + </xsl:when> + <xsl:when test="$operator='⁣'"> + <xsl:text>\thinspace</xsl:text> + </xsl:when> + <xsl:when test="$operator='⁢'"> + <xsl:text>\thinspace</xsl:text> + </xsl:when> + <xsl:when test="$operator='∫'"> + <xsl:text>\int</xsl:text> + </xsl:when> + <xsl:when test="$operator='∏'"> + <xsl:text>\prod</xsl:text> + </xsl:when> + <xsl:when test="$operator='∑'"> + <xsl:text>\sum</xsl:text> + </xsl:when> + <xsl:when test="$operator='^'"> + <xsl:text>\sphat</xsl:text> + </xsl:when> + <xsl:when test="$operator='→'"> + <xsl:text>\longrightarrow</xsl:text> + </xsl:when> + <xsl:when test="$operator='∈'"> + <xsl:text>\in</xsl:text> + </xsl:when> + <xsl:when test="$operator='∣'"> + <xsl:text>|</xsl:text> + </xsl:when> + <xsl:when test="$operator='ⅆ'"> + <xsl:text>\textrm{d}</xsl:text> + </xsl:when> + <xsl:when test="$operator='('"> + <xsl:text> {\left( </xsl:text> + </xsl:when> + <xsl:when test="$operator=')'"> + <xsl:text> \right)} </xsl:text> + </xsl:when> + <xsl:when test="$operator='{'"> + <xsl:text> {\left\{ </xsl:text> + </xsl:when> + <xsl:when test="$operator='}'"> + <xsl:text> \right\}} </xsl:text> + </xsl:when> + <xsl:when test="$operator='['"> + <xsl:text> {\left[ </xsl:text> + </xsl:when> + <xsl:when test="$operator=']'"> + <xsl:text> \right]} </xsl:text> + </xsl:when> + <xsl:when test="$operator='max'"> + <xsl:text> \max </xsl:text> + </xsl:when> + <xsl:when test="$operator='min'"> + <xsl:text> \min </xsl:text> + </xsl:when> + <xsl:when test="$operator='+' or $operator='-' or $operator='/' or $operator='*'"> + <xsl:value-of select="$operator"/> + </xsl:when> + <xsl:when test="$equivalent"> + <xsl:value-of select="$equivalent"/> + </xsl:when> + <xsl:otherwise> + <xsl:text>\operatorname{</xsl:text> + <xsl:value-of select="$operator" /> + <xsl:text>}</xsl:text> + </xsl:otherwise> + </xsl:choose> +</xsl:template> + +<!-- Math String --> +<xsl:template match="mml:ms"> + <xsl:text>\textrm{</xsl:text> + <xsl:copy-of select="normalize-space(.)" /> + <xsl:text>}</xsl:text> +</xsl:template> + +<!-- Math Text --> +<xsl:template match="mml:mtext"> + <xsl:message>RCAS mtext, <xsl:copy-of select="."/> </xsl:message> + <xsl:text>\textrm{</xsl:text> + <xsl:copy-of select="." /> + <xsl:text>}</xsl:text> +</xsl:template> + +<!-- Math Space --> +<xsl:template match="mml:mspace"> + <xsl:if test="@width!='' and not(contains(@width,'%'))"> + <xsl:text>\textrm{\hspace{</xsl:text><!-- kludge! --> + <xsl:value-of select="@width"/> + <xsl:text>}}</xsl:text> + </xsl:if> + <xsl:if test="@height!='' or @depth!=''"> + <xsl:message>Warning: mspace support does not include height or depth.</xsl:message> + </xsl:if> +</xsl:template> + + + + + +<xsl:template match="mml:msup"> + <xsl:apply-templates select="*[1]"/> + <xsl:text>^{</xsl:text><xsl:apply-templates select="*[2]"/><xsl:text>}</xsl:text> +</xsl:template> + +<xsl:template match="mml:msub"> + <xsl:apply-templates select="*[1]"/> + <xsl:text>_{</xsl:text><xsl:apply-templates select="*[2]"/><xsl:text>}</xsl:text> +</xsl:template> + +<xsl:template match="mml:msubsup"> +<xsl:choose> + <xsl:when test="name(*[1])='mo'"> + <xsl:apply-templates select="*[1]"/> + <!-- sub --> + <xsl:text>_{</xsl:text><xsl:apply-templates select="*[2]"/><xsl:text>}</xsl:text> + <!-- super --> + <xsl:text>^{</xsl:text><xsl:apply-templates select="*[3]"/><xsl:text>}</xsl:text> + </xsl:when> + <xsl:otherwise> + <!-- base --> + <xsl:text>{</xsl:text><xsl:apply-templates select="*[1]"/><xsl:text>}</xsl:text> + <!-- sub --> + <xsl:text>_{</xsl:text><xsl:apply-templates select="*[2]"/><xsl:text>}</xsl:text> + <!-- super --> + <xsl:text>^{</xsl:text><xsl:apply-templates select="*[3]"/><xsl:text>}</xsl:text> + </xsl:otherwise> +</xsl:choose> +</xsl:template> + +<xsl:template match="mml:mmultiscripts"> +</xsl:template> + +<xsl:template match="mml:munder"> +<!-- +<xsl:choose> + <xsl:when test="*[2] = ̲"> + <xsl:text>\underline{</xsl:text><xsl:apply-templates select="*[1]"/><xsl:text>}</xsl:text> + </xsl:when> + <xsl:when test="normalize-space(*[2]) = ︸"> + <xsl:text>\underbrace{</xsl:text><xsl:apply-templates select="*[1]"/><xsl:text>}</xsl:text> + </xsl:when> + <xsl:when test="normalize-space(*[2]) = ⎵"> + <xsl:text>\underbrace{</xsl:text><xsl:apply-templates select="*[1]"/><xsl:text>}</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text>\underset{</xsl:text> + <xsl:apply-templates select="*[2]"/> + <xsl:text>}{</xsl:text> + <xsl:apply-templates select="*[1]"/> + <xsl:text>}</xsl:text> +--> + <xsl:text>{</xsl:text> + <xsl:apply-templates select="*[1]"/> + <xsl:text>_{</xsl:text> + <xsl:apply-templates select="*[2]"/> + <xsl:text>}}</xsl:text> +<!-- + </xsl:otherwise> +</xsl:choose> +--> +</xsl:template> +<xsl:template match="mml:mover"> +<!--<xsl:choose> + <xsl:when test="normalize-space(*[2]) = ¯"> + <xsl:text>\overline{</xsl:text><xsl:apply-templates select="*[1]"/><xsl:text>}</xsl:text> + </xsl:when> + <xsl:when test="normalize-space(*[2]) = ︷"> + <xsl:text>\overbrace{</xsl:text><xsl:apply-templates select="*[1]"/><xsl:text>}</xsl:text> + </xsl:when> + <xsl:when test="normalize-space(*[2]) = ︵"> + <xsl:text>\widehat{</xsl:text><xsl:apply-templates select="*[1]"/><xsl:text>}</xsl:text> + </xsl:when> + <xsl:when test="normalize-space(*[2]) = ⎴"> + <xsl:text>\widehat{</xsl:text><xsl:apply-templates select="*[1]"/><xsl:text>}</xsl:text> + </xsl:when> + <xsl:otherwise> + </xsl:otherwise> +</xsl:choose>--> + <xsl:choose> + <xsl:when test="@accent='true' or ( local-name(*[2])='mo' and not(@accent='false'))"> + <xsl:variable name="equivalent"> + <xsl:call-template name="generate.equivalent"> + <xsl:with-param name="arguments" select="1"/> + <xsl:with-param name="character" select="normalize-space(*[2])"/> + </xsl:call-template> + </xsl:variable> + <xsl:choose> + <xsl:when test="$equivalent!=''"> + <xsl:text>{</xsl:text> + <xsl:value-of select="$equivalent"/> + <xsl:text>{</xsl:text> + <xsl:apply-templates select="*[1]"/> + <xsl:text>}}</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text>{</xsl:text> + <xsl:apply-templates select="*[1]"/> + <xsl:text>^{</xsl:text> + <xsl:apply-templates select="*[2]"/> + <xsl:text>}}</xsl:text> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:otherwise> + <xsl:text>{</xsl:text> + <xsl:apply-templates select="*[1]"/> + <xsl:text>^{</xsl:text> + <xsl:apply-templates select="*[2]"/> + <xsl:text>}}</xsl:text> + </xsl:otherwise> + </xsl:choose> +</xsl:template> + + + +<!-- Math UnderOver --> +<xsl:template match="mml:munderover"> + <xsl:text>{</xsl:text> + <xsl:apply-templates select="*[1]"/> + <xsl:text>_{</xsl:text> + <xsl:apply-templates select="*[2]"/> + <xsl:text>}</xsl:text> + <xsl:text>^{</xsl:text> + <xsl:apply-templates select="*[3]"/> + <xsl:text>}}</xsl:text> + <!-- + <xsl:text>\overset{</xsl:text> + <xsl:apply-templates select="*[3]"/> + <xsl:text>}{\underset{</xsl:text> + <xsl:apply-templates select="*[2]"/> + <xsl:text>}{</xsl:text> + <xsl:apply-templates select="*[1]"/> + <xsl:text>}}</xsl:text> + --> +</xsl:template> + + + +<!-- Math Fenced --> +<xsl:template match="mml:mfenced"> +<!-- get open,close, separators att --> + <xsl:choose> + <xsl:when test="@open='('"> + <xsl:text> {\left( </xsl:text> + </xsl:when> + <xsl:when test="@open='{'"> + <xsl:text> {\left\{ </xsl:text> + </xsl:when> + <xsl:when test="@open='['"> + <xsl:text> {\left[\, </xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text> {\left( </xsl:text> + </xsl:otherwise> + </xsl:choose> + <xsl:apply-templates select="*[1]"/> + <xsl:choose> + <xsl:when test="@close=')'"> + <xsl:text> \right)} </xsl:text> + </xsl:when> + <xsl:when test="@close='}'"> + <xsl:text> \right\}} </xsl:text> + </xsl:when> + <xsl:when test="@close=']'"> + <xsl:text> \,\right]} </xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text> \right)} </xsl:text> + </xsl:otherwise> + </xsl:choose> +</xsl:template> + + + +<!-- Math frac --> +<xsl:template match="mml:mfrac"> +<xsl:choose> +<xsl:when test="@linethickness"> + <xsl:choose> + <xsl:when test="@linethickness='thin'"> + <xsl:text> \frac[1pt]{ </xsl:text> + </xsl:when> + <xsl:when test="@linethickness='medium'"> + <xsl:text> \frac[1.1pt]{ </xsl:text> + </xsl:when> + <xsl:when test="@linethickness='thick'"> + <xsl:text> \frac[1.2pt]{ </xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text> \frac[</xsl:text><xsl:value-of select="@linethickness"/><xsl:text>]{ </xsl:text> + </xsl:otherwise> + </xsl:choose> +</xsl:when> +<xsl:otherwise> + <xsl:text> \frac{ </xsl:text> +</xsl:otherwise> +</xsl:choose> +<!-- <xsl:value-of select="*[1]"/> --> +<xsl:apply-templates select="*[1]"/> +<xsl:text> }{ </xsl:text> +<!-- <xsl:value-of select="*[2]"/> --> +<xsl:apply-templates select="*[2]"/> +<xsl:text> }</xsl:text> +</xsl:template> + + +<!-- Math msqrt --> +<xsl:template match="mml:msqrt"> + <xsl:text> \sqrt{ </xsl:text> + <xsl:apply-templates/> + <xsl:text> }</xsl:text> +</xsl:template> + + +<!-- Math mroot --> +<xsl:template match="mml:mroot"> + <xsl:text> \sqrt[</xsl:text><xsl:apply-templates select="*[1]"/><xsl:text>]{</xsl:text> + <xsl:apply-templates select="*[2]"/><xsl:text> }</xsl:text> +</xsl:template> + + + +<xsl:template name="mtable.format.tabular"> + <xsl:param name="cols" select="1"/> + <xsl:param name="i" select="1"/> + <xsl:choose> + <!-- Out of the recursive iteration --> + <xsl:when test="$i > $cols"></xsl:when> + <!-- There are still columns to count --> + <xsl:otherwise> + <xsl:text>c</xsl:text> + <!-- Recursive for next column --> + <xsl:call-template name="mtable.format.tabular"> + <xsl:with-param name="i" select="$i+1"/> + <xsl:with-param name="cols" select="$cols"/> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> +</xsl:template> + + +<xsl:template match="mml:mtable"> +<xsl:variable name="rows" select="mml:mtr"/> +<xsl:text>\begin{array}{</xsl:text> +<xsl:call-template name="mtable.format.tabular"><xsl:with-param name="cols" select="count($rows)"/></xsl:call-template> +<xsl:text>} </xsl:text> + <xsl:apply-templates/> +<xsl:text>\end{array} </xsl:text> +</xsl:template> + +<xsl:template match="mml:mtr"> +<!-- Row starts here --> +<xsl:apply-templates/> +<!-- End Row here --> +</xsl:template> + +<xsl:template match="mml:mtd"> + <xsl:apply-templates/><xsl:text> & </xsl:text> +</xsl:template> + +<xsl:template match="mml:mtd[position()=last()]"> + <xsl:apply-templates/><xsl:text>\\ </xsl:text> +</xsl:template> + +<xsl:template match="mml:mtd[position()=last()]"> + <xsl:apply-templates/><xsl:text>\\ </xsl:text> +</xsl:template> + +<xsl:template match="mml:mphantom"> + <xsl:apply-templates mode="phantom"/> +</xsl:template> + +<xsl:template match="mml:mi" mode="phantom"> + <xsl:variable name="fontstyle" select="@fontstyle"/> + <xsl:variable name="identifier" select="normalize-space(.)"/> + <xsl:choose> + <xsl:when test="$identifier='ⅇ'"> + <xsl:text>\textrm{e}</xsl:text> + </xsl:when> + <xsl:when test="$identifier='ⅈ'"> + <xsl:text>\textrm{i}</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text>\textrm{</xsl:text> <xsl:copy-of select="$identifier"/> <xsl:text>}</xsl:text> + </xsl:otherwise> + </xsl:choose> +</xsl:template> +</xsl:stylesheet> |