Template:Ifexpr: Difference between revisions

imported>TheWallflower00
Created page with "With this template #ifexpr can be used in a way such that it does not strip spaces and newlines from the "then" and "else" part. ==Usage..."
 
imported>TheWallflower00
Replaced content with "<includeonly>{{{{{|safesubst:}}}{{{{{|safesubst:}}}#switch:{{{{{|safesubst:}}}#ifexpr:{{{1}}}|p1|p2}}|p1=p1|p2=p2|if/errmsg}}|{{{2}}}|{{{3|}}}|{{{1}}}}}</includeonly><noin..."
Line 1: Line 1:
With this template [[mw:Help:Extension:ParserFunctions|#ifexpr]] can be used in a way such that it does not strip spaces and newlines from the "then" and "else" part.
<includeonly>{{{{{|safesubst:}}}{{{{{|safesubst:}}}#switch:{{{{{|safesubst:}}}#ifexpr:{{{1}}}|p1|p2}}|p1=p1|p2=p2|if/errmsg}}|{{{2}}}|{{{3|}}}|{{{1}}}}}</includeonly><noinclude>
 
{{documentation}}
==Usage==
[[Category:General wiki templates]]
*<code><nowiki>{{ifexpr|2<3| p | q }}</nowiki></code> gives "{{ifexpr|2<3| p | q }}"
*<code><nowiki>{{ifexpr|2>3| p | q }}</nowiki></code> gives "{{ifexpr|2>3| p | q }}"
*<code><nowiki>{{ifexpr|2{{=}}3| p | q }}</nowiki></code> gives "{{ifexpr|2{{=}}3| p | q }}"
*<code><nowiki>{{ifexpr|7{{=}}7| ok true | no }}</nowiki></code> gives "{{ifexpr|7{{=}}7| ok true | no }}"
*<code><nowiki>{{ifexpr|3*4<{{=}}10+1| ok| oh no}}</nowiki></code> gives "{{ifexpr|3*4<{{=}}10+1| ok| oh no}}"
Compare:
*<code><nowiki>{{#ifexpr:2<3| p | q }}</nowiki></code> gives "{{#ifexpr:2<3| p | q }}"
 
Note that, unlike parser functions, templates require writing equals signs in values of unnamed parameters by using double-braces, as <code><nowiki>{{=}}</nowiki></code>. So, to allow "=" (or "<=" or ">=") then use the named parameter 1, as in: 1={{{x}}}>=7.
 
For full substitution, simply use <code>subst:</code> or <code>safesubst:</code>. If the condition contains a parser function, template, or variable, that should be substituted too. Optionally the "then" or "else" part can also be substituted.
 
Error messages (examples):
 
*<code><nowiki>{{ifexpr|1234>e3|1|0}}</nowiki></code> gives {{ifexpr|1234>e3|1|0}}
*<code><nowiki>{{#ifexpr:1234>e3|1|0}}</nowiki></code> gives {{#ifexpr:1234>e3|1|0}}, for e3.
*<code><nowiki>{{#ifexpr:1234>1e3|1|0}}</nowiki></code> gives {{#ifexpr:1234>1e3|1|0}}, because 1,234 > 1e3 (1,000).
 
==Expansion depth limit==
During 2011-2012, the nesting limit of {Ifexpr} was 12 nested structures (this is one of the template limits for the MediaWiki parser). For example, nesting 13 times can cause an error:
 
* <code><nowiki>{{ifexpr|1|{{ifexpr|1|{{ifexpr|1|{{ifexpr|1|{{ifexpr|1|{{ifexpr|1|{{ifexpr|1|{{ifexpr|1|{{ifexpr|1|{{ifexpr|1|{{ifexpr|1|{{ifexpr|1|{{ifexpr|1|a}}}}}}}}}}}}}}}}}}}}}}}}}}</nowiki></code>
 
* '''Result:''' <nowiki>{{safesubst:{{</nowiki><span style="color:#C12222">'''Expansion depth limit exceeded'''</span><nowiki>|p1=p1|p2=p2|if/errmsg}}|a||1}}</nowiki>
The expansion-depth error occurs when exceeding the depth limit of nested markup, typically 41 levels of nested templates or if-else structures, during 2009-2012.
 
==Internal technical details==
For evaluating the condition the template uses the actual parser functions; however, not directly with p and q, because this strips spaces and newlines from them, but with index values 1 and 2. The result can be 1, 2, or an error message. Using a switch these are converted to p1, p2, and if/errmsg, respectively. The template with the applicable name is called ([[Template:P1]], [[Template:P2]], or [[Template:If/errmsg]]), with as parameters p, q, and {{{1}}}. Templates p1 and p2 ignore {{{1}}}; template if/errmsg is only called in the case of a wrong expression {{{1}}}; it ignores p and q and uses {{{1}}} for display in the error message.
 
==Dependencies==
This template depends on the existence of
* {{t|p1}}
* {{t|p2}}
* {{t|p3}}
* {{t|if/errmsg}}
 
==See also==
*[[m:Template:Ifexpr]]
 
 
<noinclude>
{{Wikipedia-deleted|
* Patrick
* Wikid77
}}
</noinclude>
</noinclude>