[Foundation-l] Help needed to fix broken templates

Tim Starling tstarling at wikimedia.org
Thu Jan 17 13:34:16 UTC 2008

(Cross-posting to wikitech-l and foundation-l, I suggest replying on 

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:


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.


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 

#iferror detects error return codes from #time and #expr. It is part of 
the ParserFunctions extension.

-- Tim Starling

More information about the foundation-l mailing list