(Cross-posting to wikitech-l and foundation-l, I suggest replying on wikitech-l.)
All known bugs in the new preprocessor have been fixed. So it's now time to enable it on Wikimedia. Unfortunately, a lot of articles and templates rely on bugs in the old parser, and ideally they should be fixed before the switchover.
We'll be aiming to switch to the new preprocessor on the 24th of January.
For technical background information about this project see my first post on this subject:
http://lists.wikimedia.org/pipermail/wikitech-l/2007-November/035154.html
Over the past few days, Splarka and MZMcBride have been putting in a great deal of work to beta test the new parser, by checking articles on the English Wikipedia and several other wikis for any changes. Between the three of us, we've built up extensive documentation of the commonly-seen differences between the old and new parsers, and we've identified and fixed eight distinct bugs in the new parser.
http://meta.wikimedia.org/wiki/Migration_to_the_new_preprocessor
We'd now like to invite the rest of the community to help.
This post is just a brief summary of the wiki page, please go there to find out more.
The two most common problems with existing articles are comments after headings, and abuse of bug 5678. Here's a comment after a heading:
== Heading == <!-- that was a heading -->
This will still make a heading in the new preprocessor, but it won't make a section edit link. In the old parser, it does make a section edit link. This change was done to resolve various incarnations of bug 4899, i.e. mismatches between the section edit link and the section you end up editing.
Bug 5678 is a cluster of problems associated with double-parsing of the results of parser functions. It's often reported and causes a great deal of distress. But since the standard way to find out how to write wikitext is to try it and see what works, many people have inadvertently utilised behaviour arising from this bug to do various things.
A typical example is misuse of {{!}} to separate template parameters, as in:
{{#if:1| {{template{{!}}parameter}} }}
In the new preprocessor, {{!}} can never be used to separate parameters. The fact that it was possible in the old parser in certain circumstances was an accident.
Please see [[m:Migration to the new preprocessor]] for information about how you can find and fix these problems.
I have introduced two cool new parser features to help ease the pain: {{#tag:}} and {{#iferror:}}. #tag allows you to invoke XML-style tags such as <ref> with syntax similar to parser functions, with full access to template parameters. For example:
{{#tag:ref|[{{{url}}} {{{text}}}]}}
This is equivalent to:
<ref>[{{{url}}} {{{text}}}]</ref>
except that it works. You can also use #tag to call <imagemap> and <gallery>. #tag is a core parser function with a slightly different syntax to the one used by the TagParser extension. It is intended for use in meta-templates where the simpler XML-style syntax is not sufficiently versatile.
#iferror detects error return codes from #time and #expr. It is part of the ParserFunctions extension.
-- Tim Starling
wikitech-l@lists.wikimedia.org