Extension:ExpandTemplates

The page Special:ExpandTemplates has two input boxes, one to enter wikitext, and another one to enter a pagename. It produces expanded wikitext, i.e., templates, parser functions and variables are expanded recursively; variables depending on pagename are expanded based on the supplied pagename. It also shows how the produced wikitext is rendered. This is typically the same as how the original wikitext is rendered, but not always.

In special cases the expanded wikitext changes when expanded again: this may apply e.g. if a template is expanded containing "|" or braces: in this case these characters are treated as plain text in the expansion as applied by ExpandTemplates, and, accordingly, in page rendering. This is used in, which provides a way to allow "|" in a parameter value of a template or parser function, in particular for use in table syntax. This template can be used with ExpandTemplates to perform partial substitution.

The table, using, allows comparison of the wikitext produced with simple substitution and with ExpandTemplates (recursive substitution). It also shows that "subst" prevents ExpandTemplates from expanding the template. It also demonstrates, using also, that a template call with a parameter separator "|" in the form | prevents ExpandTemplates from expanding the template.

Remove comments
The "Remove comments" option selects whether comments are removed, not just in the final result but throughout the expansion process. This affects the result of parser functions: a comment in the expression of #expr or #ifexpr gives an error message unless "Remove comments" is on, and comments affect #if and ifeq.

Example:

Normal expansion, and ExpandTemplates with "Remove comments" on:

Full substitution, and ExpandTemplates with "Remove comments" off:

Expression error: Unexpected &lt; operator

0

1

XML parse tree
Optionally the XML parse tree (the XML DOM representation of the wikitext, also called document tree or DOM tree) is shown (see also Manual:Preprocessor_DOM.php). For example:

a b|c 2024

gives

a b|c  CURRENTYEAR   a     #ifeq:2    3     a     b    #switch:a   a = 3    b = 4    a = 5  a   b    c = de|fg     h    a    b     #tag:nowiki   a = b    #tag:nowiki    aeb

Thus:
 * The result shows a stage in processing before actual evaluation. Thus even names of variables, parser functions, and templates have not been determined. Also, the colon and "#" are not detected yet, so no distinction is made between variables, parser functions, and templates, let alone that there would be distinction between existing and non-existing variables, parser functions, and templates. Therefore:
 * Distinction is made between parameter items with and without "=", even though for some items of some parser functions it is treated as plain text after all.
 * "|a=b|a=c" is not reduced yet to "|a=c" because the fact that the left sides are equal is only known after their evaluation, and also because this reduction depends on the evaluation of title. For example, for titles of the form .., "|a=b|a=c" is equivalent to "|a=b" after all.
 * A pair of double rectangular brackets shields "|" from being interpreted as a parameter separator, but links are not shown separately in the tree.

Input text in URL
The wikitext serving as input can also be put in the URL, e.g., using urlencode,  gives. , using, prevents the template texpr from expanding in the URL, and also prevents "|" from being interpreted as a separator of the parameter of urlencode from a dummy second parameter. It can also be used in a template call without parameters, albeit that in the input box of ExpandTemplates this becomes a template with unnamed parameter being the empty string instead of undefined; e.g.  . This does not work for variables and parser functions, use percent codes for one pair of braces instead (see wikitext); for the ParserFunctions prefix "#" use %23:

.

.

Querie parameters:
 * removecomments=true
 * removenowiki=true
 * generate_xml=true

Example:
 * http://meta.wikimedia.org/w/index.php?title=Special:ExpandTemplates&input=a&removecomments=true&removenowiki=true&generate_xml=true

Installation
Add the following at the end of your LocalSettings.php:

Adjusting the box width
By default the width of the input and result box is only 11 characters. You may want to change this to full width by adding something like the following to your CSS: