Parser 2011/Stage 3: Expansion
This page is obsolete. It is being retained for archival purposes. It may document extensions or features that are obsolete and/or no longer supported. Do not rely on the information here being up-to-date. |
Parser functions
editTemplate expansion
editvery prelim :D
The page:
{{Hello|greet=Alice}} |
[ { type: 'template', name: 'Hello', params: { 'greet': "Alice" } } ] |
The Template:Hello page:
Howdy {{{greet|stranger}}}! |
[ 'Howdy ', { type: 'param', name: 'greet', default: 'stranger' }, '!' ] |
Now we can expand the lot into something like:
[ { type: 'expanded-template', name: 'Hello', params: { 'greet': 'Alice' } content: [ 'Howdy ', { type: 'expanded-param' 'content': [ 'Alice', ], }, '!' ] } ] |
(Or should the content nodes just include a reference to the template param? or?)
Rendering attachment
editIt's not uncommon to have structures in wikitext, especially when templates are involved, where separate 'start' and 'end' points cross some hierarchical lines. For instance:
{{start-fancy-table}} {{a-table-row|some stuff}} {{a-table-row|other stuff}} |- |extra stuff |manually added {{end-fancy-table}}
This gives us a structure something like:
template: start-fancy-table table tr, th, /th, th, /th, /tr template: a-table-row tr, td, /td, td, /td, /tr template: a-table-row tr, td, /td, td, /td, /tr tr, td, td template: end-fancy-table tr, td, /td, td, /td, /tr /table
Depending on the actual template structure, the various bits may all appear on different 'levels'. HTML would generally whinge at this sort of structure directly translated. :)
When rendering this to output or showing an editor, it's necessary to go through the output and pair up matching open/close pairs for these things so proper output nesting can be created.