[yelp-xsl] db2html: Add MathML support here too
- From: Shaun McCance <shaunm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [yelp-xsl] db2html: Add MathML support here too
- Date: Wed, 14 Nov 2012 04:35:52 +0000 (UTC)
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]