[[!meta title="Jason Blevins"]] I'm currently hosting a private ikiwiki for keeping research notes which, with some patches and a plugin (below), will convert inline [[todo/LaTeX]] expressions to [[MathML]]. I'm working towards a patchset and instructions for others to do the same. 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 [[todo/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 ikiwki issues of interest: * [[bugs/recentchanges_feed_links]] * [[bugs/HTML_inlined_into_Atom_not_necessarily_well-formed]] * [[plugins/toc/discussion]] * [[todo/BibTeX]] * [[todo/svg]] * [[todo/Option_to_make_title_an_h1?]] * [[bugs/SVG_files_not_recognized_as_images]] ## Plugins These plugins are experimental. Use them at your own risk. Read the perldoc documentation for more details. Patches and suggestions are welcome. * [mdwn_itex][] - Works with the [[`mdwn`|plugins/mdwn]] plugin to convert inline [[todo/LaTeX]] expressions to [[MathML]] using `itex2MML`. * [h1title][] - If present, use the leading level 1 Markdown header to set the page title and remove it from the page body. * [code][] - Whole file and inline code snippet [[todo/syntax highlighting]] via GNU Source-highlight. The list of supported file extensions is configurable. There is also some preliminary [documentation][code-doc]. See the [FortranWiki](http://fortranwiki.org) for examples. * [metamail][] - a plugin for loading metadata from [[email]]-style headers at top of a file (e.g., `title: Page Title` or `date: November 2, 2008 11:14 EST`). * [pandoc][] - [[ikiwiki/Markdown]] page processing via [Pandoc](http://johnmacfarlane.net/pandoc/) (a Haskell library for converting from one markup format to another). [[todo/LaTeX]] and [[reStructuredText|plugins/rst]] are optional. * [path][] - Provides path-specific template conditionals such as `IS_HOMEPAGE` and `IN_DIR_SUBDIR`. [mdwn_itex]: http://code.jblevins.org/ikiwiki/plugins.git/plain/mdwn_itex.pm [h1title]: http://code.jblevins.org/ikiwiki/plugins.git/plain/h1title.pm [code]: http://code.jblevins.org/ikiwiki/plugins.git/plain/code.pm [code-doc]: http://code.jblevins.org/ikiwiki/plugins.git/plain/code.text [metamail]: http://code.jblevins.org/ikiwiki/plugins.git/plain/metamail.pm [pandoc]: http://code.jblevins.org/ikiwiki/plugins.git/plain/pandoc.pm [path]: http://code.jblevins.org/ikiwiki/plugins.git/plain/path.pm ## 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