[yelp-xsl] db2html: Add MathML support here too



commit c0b7e023eaa4fe5c1091bfc3f56cf07f19fe78f7
Author: Shaun McCance <shaunm gnome org>
Date:   Tue Nov 13 23:35:23 2012 -0500

    db2html: Add MathML support here too

 xslt/docbook/html/Makefile.am       |    1 +
 xslt/docbook/html/db2html-math.xsl  |  158 +++++++++++++++++++++++++++++++++++
 xslt/docbook/html/db2html-media.xsl |   17 ++++-
 xslt/docbook/html/db2html.xsl       |    3 +
 xslt/docbook/html/db2xhtml.xsl      |    1 +
 5 files changed, 178 insertions(+), 2 deletions(-)
---
diff --git a/xslt/docbook/html/Makefile.am b/xslt/docbook/html/Makefile.am
index 249a60f..0fbe4c2 100644
--- a/xslt/docbook/html/Makefile.am
+++ b/xslt/docbook/html/Makefile.am
@@ -15,6 +15,7 @@ xsl_DATA =				\
 	db2html-inline.xsl		\
 	db2html-l10n.xsl		\
 	db2html-links.xsl		\
+	db2html-math.xsl		\
 	db2html-media.xsl		\
 	db2html-list.xsl		\
 	db2html-refentry.xsl		\
diff --git a/xslt/docbook/html/db2html-math.xsl b/xslt/docbook/html/db2html-math.xsl
new file mode 100644
index 0000000..6326cfd
--- /dev/null
+++ b/xslt/docbook/html/db2html-math.xsl
@@ -0,0 +1,158 @@
+<?xml version='1.0' encoding='UTF-8'?><!-- -*- indent-tabs-mode: nil -*- -->
+<!--
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free
+Software Foundation; either version 2 of the License, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with this program; see the file COPYING.LGPL.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+02111-1307, USA.
+-->
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
+                xmlns:db="http://docbook.org/ns/docbook";
+                xmlns:mml="http://www.w3.org/1998/Math/MathML";
+                xmlns:xlink="http://www.w3.org/1999/xlink";
+                xmlns="http://www.w3.org/1999/xhtml";
+                exclude-result-prefixes="db mml xlink"
+                version="1.0">
+
+<!--!!==========================================================================
+DocBook to HTML - MathML
+Handle MathML in DocBook documents.
+:Revision: version="3.8" date="2012-11-13" status="final"
+
+This stylesheet matches embedded MathML and processes it in %{db2html.math.mode}.
+The matched templates for the #{mml:math} element automatically set the #{display}
+attribute based on whether the element is in block or inline context.
+-->
+
+
+<!--**==========================================================================
+db2html.math.div
+Output an HTML #{div} element and block-level MathML.
+:Revision:version="3.8" date="2012-11-13" status="final"
+$node: The #{mml:math} element to render.
+
+This template creates an HTML #{div} element for a MathML #{mml:math} element,
+then outputs MathML content. It sets the #{display} attribute on the output to
+#{"block"} and applies %{db2html.math.mode} to the child content.
+-->
+<xsl:template name="db2html.math.div">
+  <xsl:param name="node" select="."/>
+  <div class="math">
+    <xsl:call-template name="html.lang.attrs">
+      <xsl:with-param name="node" select="$node"/>
+    </xsl:call-template>
+    <xsl:element name="math" namespace="{$html.mathml.namespace}">
+      <xsl:for-each select="$node/@*[name(.) != 'display']">
+        <xsl:copy-of select="."/>
+      </xsl:for-each>
+      <xsl:attribute name="display">
+        <xsl:value-of select="'block'"/>
+      </xsl:attribute>
+      <xsl:apply-templates mode="db2html.math.mode" select="$node/node()"/>
+    </xsl:element>
+  </div>
+</xsl:template>
+
+
+<!--**==========================================================================
+db2html.math.span
+Output an HTML #{span} element and inline MathML.
+:Revision:version="3.8" date="2012-11-13" status="final"
+$node: The #{mml:math} element to render.
+
+This template creates an HTML #{span} element for a MathML #{mml:math} element,
+then outputs MathML content. It sets the #{display} attribute on the output to
+#{"inline"} and applies %{db2html.math.mode} to the child content.
+-->
+<xsl:template name="db2html.math.span">
+  <xsl:param name="node" select="."/>
+  <span class="math">
+    <xsl:call-template name="html.lang.attrs">
+      <xsl:with-param name="node" select="$node"/>
+    </xsl:call-template>
+    <xsl:element name="math" namespace="{$html.mathml.namespace}">
+      <xsl:for-each select="$node/@*[name(.) != 'display']">
+        <xsl:copy-of select="."/>
+      </xsl:for-each>
+      <xsl:attribute name="display">
+        <xsl:value-of select="'inline'"/>
+      </xsl:attribute>
+      <xsl:apply-templates mode="db2html.math.mode" select="$node/node()"/>
+    </xsl:element>
+  </span>
+</xsl:template>
+
+
+<!--%%==========================================================================
+db2html.math.mode
+Output MathML and handle Mallard extension.
+:Revision: version="3.8" date="2012-11-13" status="final"
+
+This mode is used for processing MathML embedded into DocBook documents. For
+most types of MathML content, it simply copies the input directly, except it
+outputs the MathML in a way that allows the namespace to stripped for non-XML
+output. It converts #{xlink:href} attributes from MathML 2 to #{href} attributes
+for MathML 3.
+-->
+<xsl:template mode="db2html.math.mode" match="mml:*">
+  <xsl:element name="{local-name(.)}" namespace="{$html.mathml.namespace}">
+    <xsl:for-each select="@*[name(.) != 'href']">
+      <xsl:copy-of select="."/>
+    </xsl:for-each>
+    <xsl:choose>
+      <xsl:when test="@href">
+        <xsl:copy-of select="@href"/>
+      </xsl:when>
+      <xsl:when test="@xlink:href">
+        <xsl:attribute name="href">
+          <xsl:value-of select="@xlink:href"/>
+        </xsl:attribute>
+      </xsl:when>
+    </xsl:choose>
+    <xsl:apply-templates mode="db2html.math.mode"/>
+  </xsl:element>
+</xsl:template>
+
+<xsl:template mode="db2html.math.mode" match="text()">
+  <xsl:value-of select="."/>
+</xsl:template>
+
+<xsl:template mode="db2html.math.mode" match="*"/>
+
+
+<!-- == Matched Templates == -->
+
+<xsl:template match="equation/mml:math | informalequation/mml:math |
+                     db:equation/mml:math | db:informalequation/mml:math">
+  <xsl:call-template name="db2html.math.div"/>
+</xsl:template>
+
+<xsl:template match="inlineequation/mml:math | db:inlineequation/mml:math">
+  <xsl:call-template name="db2html.math.span"/>
+</xsl:template>
+
+<xsl:template match="db:imagedata[ format='mathml']/mml:math">
+  <xsl:variable name="media" select="(ancestor::db:mediaobject[1] |
+                                      ancestor::db:inlinemediaobject[1]
+                                     )[last()]"/>
+  <xsl:choose>
+    <xsl:when test="local-name($media) = 'inlinemediaobject'">
+      <xsl:call-template name="db2html.math.span"/>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:call-template name="db2html.math.div"/>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/xslt/docbook/html/db2html-media.xsl b/xslt/docbook/html/db2html-media.xsl
index 77e1d12..648ef02 100644
--- a/xslt/docbook/html/db2html-media.xsl
+++ b/xslt/docbook/html/db2html-media.xsl
@@ -18,8 +18,9 @@ Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 
 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                 xmlns:db="http://docbook.org/ns/docbook";
+                xmlns:mml="http://www.w3.org/1998/Math/MathML";
                 xmlns="http://www.w3.org/1999/xhtml";
-                exclude-result-prefixes="db"
+                exclude-result-prefixes="db mml"
                 version="1.0">
 
 <!--!!==========================================================================
@@ -212,6 +213,10 @@ Processing tools are expected to choose the earliest suitable object. This
 template will select the first audio, image, or video object it can handle,
 filtering out images in non-web formats. If no suitable non-text objects are
 found, this template calls *{db2html.mediaobject.fallback}.
+
+This template also detects MathML embedded in a DocBook 5 #{imagedata} element
+with the #{format} attribute #{"mathml"}, and passes it to the templates in
+!{db2html-math}.
 -->
 <xsl:template name="db2html.mediaobject">
   <xsl:param name="node" select="."/>
@@ -230,6 +235,7 @@ found, this template calls *{db2html.mediaobject.fallback}.
       @format = 'GIF'  or @format = 'GIF87a' or @format = 'GIF89a' or
       @format = 'JPEG' or @format = 'JPG'    or @format = 'PNG'    or
       not(@format)]] |
+    $node/db:imageobject[db:imagedata[ format = 'mathml'][mml:math]] |
     $node/db:imageobjectco[db:imageobject/db:imagedata[
       @format = 'GIF'  or @format = 'GIF87a' or @format = 'GIF89a' or
       @format = 'JPEG' or @format = 'JPG'    or @format = 'PNG'    or
@@ -308,7 +314,14 @@ normal block content.
 
 <!-- = imagedata = -->
 <xsl:template match="imagedata | db:imagedata">
-  <xsl:call-template name="db2html.imagedata"/>
+  <xsl:choose>
+    <xsl:when test="@format = 'mathml' and mml:math">
+      <xsl:apply-templates select="mml:math"/>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:call-template name="db2html.imagedata"/>
+    </xsl:otherwise>
+  </xsl:choose>
 </xsl:template>
 
 <!-- = imageobject = -->
diff --git a/xslt/docbook/html/db2html.xsl b/xslt/docbook/html/db2html.xsl
index 34871eb..f4210d4 100644
--- a/xslt/docbook/html/db2html.xsl
+++ b/xslt/docbook/html/db2html.xsl
@@ -18,6 +18,8 @@ Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 
 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                 xmlns:html="http://www.w3.org/1999/xhtml";
+                xmlns:mml="http://www.w3.org/1998/Math/MathML";
+                exclude-result-prefixes="html mml"
                 version="1.0">
 
 <!--!!==========================================================================
@@ -37,5 +39,6 @@ sets a namespace alias to output non-XML HTML. This stylesheet sets
 <xsl:param name="html.xhtml" select="false()"/>
 
 <xsl:namespace-alias stylesheet-prefix="html" result-prefix="#default"/>
+<xsl:namespace-alias stylesheet-prefix="mml" result-prefix="#default"/>
 
 </xsl:stylesheet>
diff --git a/xslt/docbook/html/db2xhtml.xsl b/xslt/docbook/html/db2xhtml.xsl
index a6035ec..0c24c0e 100644
--- a/xslt/docbook/html/db2xhtml.xsl
+++ b/xslt/docbook/html/db2xhtml.xsl
@@ -56,6 +56,7 @@ DocBook documents into XHTML. This stylesheet sets the parameter
 <xsl:include href="db2html-inline.xsl"/>
 <xsl:include href="db2html-l10n.xsl"/>
 <xsl:include href="db2html-links.xsl"/>
+<xsl:include href="db2html-math.xsl"/>
 <xsl:include href="db2html-media.xsl"/>
 <xsl:include href="db2html-list.xsl"/>
 <xsl:include href="db2html-refentry.xsl"/>



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]