Notes on MathML and SVG support

master
http://jblevins.org/ 2008-10-21 11:43:37 -04:00 committed by Joey Hess
parent f635ff0d29
commit 53292eea63
1 changed files with 55 additions and 4 deletions

View File

@ -5,14 +5,18 @@ which, with some patches and a (currently unreleased) plugin, will
convert inline LaTeX expressions to MathML. I'm working towards a
patchset and instructions for others to do the same.
There is one thing that needs to be decided first: whether or not to
include [[sanitization|todo/svg]] of MathML in htmlscrubber (and while
we're at it, why not SVG).
I've setup a test ikiwiki [here](http://xbeta.org/colab/) where I've
started keeping a few notes on my progress. There is an example of
inline SVG on the homepage (note that the logo scales along with the
font size). There are a few example mathematical expressions in the
[sandbox](http://xbeta.org/colab/sandbox/). The MathML is generated
automatically from inline LaTeX expressions using an experimental
plugin I'm working on.
My (also MathML-enabled) homepage: <http://jblevins.org/> (still using
Blosxom...maybe one day I'll convert it to ikiwiki...)
Current issues of interest:
Current ikiwki issues of interest:
* [[bugs/recentchanges_feed_links]]
* [[bugs/HTML_inlined_into_Atom_not_necessarily_well-formed]]
@ -20,3 +24,50 @@ Current issues of interest:
* [[todo/BibTeX]]
* [[todo/svg]]
* [[todo/Option_to_make_title_an_h1?]]
* [[bugs/SVG_files_not_recognized_as_images]]
## MathML and SVG support
So far, I've made some notes on sanitizing MathML and SVG via
htmlscrubber on the [[todo/svg]] todo item.
I've also worked out some content-negotiation issues. First of all,
one needs to modify the default templates to use the
XHTML+MathML+SVG doctype (see e.g., this [patch][template-patch]).
For most browsers, the content type of the pages should be
`application/xhtml+xml`. The solution is easy if you want to
just send `application/xhtml+xml` to everybody:
just change the content type of `.html` files across the board.
However, if you want to support browsers that don't accept
`application/xhtml+xml` (and those that will but say they
don't, such as IE with the MathPlayer plugin), then one
needs a `mod_rewrite` rule like the following:
RewriteCond %{HTTP_ACCEPT} application\/xhtml\+xml [OR]
RewriteCond %{HTTP_USER_AGENT} (W3C.*Validator|MathPlayer)
RewriteRule \.html$ - [T=application/xhtml+xml]
This solves the problem of MathML and inline SVG in static pages
but some additional work is required for dynamically generated
pages, like page previews, that are generated by `ikiwiki.cgi`.
We need to allow `ikiwiki.cgi` to set the content type dynamically
based on the `HTTP_CONTENT_TYPE` environment variable
(e.g., with the following [patch][cgi-patch]). Then, the following
rewrite rules can pass the correct content type to ikiwiki:
RewriteCond %{HTTP_ACCEPT} application\/xhtml\+xml [OR]
RewriteCond %{HTTP_USER_AGENT} (W3C.*Validator|MathPlayer)
RewriteRule ikiwiki.cgi$ - [T=application/xhtml+xml]
One final critical issue is that a production-ready setup needs to
implement some sort of on-the-fly error handling. If a user submits
an invalid LaTeX expression or SVG code (not malicious, just invalid)
and saves the page, then browsers like Firefox will halt processing of
the page, preventing any further viewing or editing. A less than
optimal solution is to force users to preview the page before saving.
That way if someone introduces invalid XHTML then they can't save the
page in the first place (unless they post directly to the right URL).
[template-patch]: http://xbeta.org/gitweb/?p=xbeta/ikiwiki.git;a=blobdiff;f=templates/page.tmpl;h=380ef699fa72223744eb5c1ee655fb79aa6bce5b;hp=9084ba7e11e92a10528b2ab12c9b73cf7b0f40a7;hb=416d5d1b15b94e604442e4e209a30dee4b77b684;hpb=ececf4fb8766a4ff7eff943b3ef600be81a0df49
[cgi-patch]: http://xbeta.org/gitweb/?p=xbeta/ikiwiki.git;a=commitdiff;h=fa538c375250ab08f396634135f7d79fce2a9d36