Notes on MathML and SVG support
parent
f635ff0d29
commit
53292eea63
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue