Template:Convert/nesting
- Discussed at subpage: Template_talk:Convert/nesting.
The nesting limit for the measurement converter Template:Convert depends on the nesting-levels of each page which is using Convert. For most articles or infoboxes, there is no restriction for using Convert, anywhere on a page. However, for nested infoboxes, there has been a limit of using Convert down to a 2-nested if-expression (nested as, at most, if-else-if-then-convert). Many of the subtemplates are invoked when Convert rounds the resulting value (see below: #Nested subtemplates for rounding).
Contents
Example of Convert-nesting limits
Nested infoboxes are an example of reaching Convert nest-limits (in the MediaWiki markup language). In {{Infobox mountain}}, during March 2010 (when markup expressions were limited to 40-level nesting), the use of typical "elevation={{convert|97|m|ft}}" caused a problem inside a 3-nested if-expression, where the 3rd if-clause generated parser-errors. However, when the precision parameter "|0" was appended to the end (as "{{convert|97|m|ft|0}}"), then the 3-nested if-expression worked ok, because specifying precision "0" bypassed 3 of the nested Convert subtemplates, using only 16 rather than the typical 19 nested-subtemplates to compute a conversion (in March 2010). Eventually, the infobox was changed to handle the value of parameter "elevation" with a 1-level if-expression (as only if-then-convert), rather than as nested under 2 else-clauses.
Common nested subtemplates
Most conversions using Template:Convert share the same multiple nested subtemplates to determine the precision/rounding of the output amount(s). For example:
- Template:Ordomag uses {{ordomag/x}} to set order-of-magnitude rank.
If the logic of the nested subtemplates could be simplified, in terms of the levels of stacked if-expressions invoking other subtemplates, then the total nest-levels could be reduced for a typical conversion.
Nested subtemplates for rounding
As of March 2010, the design of Convert has treated the input numbers as potentially huge, astronomical amounts, and therefore, has had complex, multi-nested rounding routines to determine the format as scientific notation, if needed, for the result. The typical display subtemplate {{Convert/LoffAoffSoff}} has invoked {{Convert/round}} to invoke the large-scale rounding routine {{rnd}} to handle large numbers, allowing possible scientific notation. Inside {{rnd}}, then another 4 subtemplates are usually invoked, or 8 subtemplates for numbers above a million. The total of subtemplates used to auto-round the results, when using Convert, includes:
- Template:Convert/round (view source) (protected)
- Template:Max/2 (view source) (protected)
- Template:Ordomag (view source) (protected)
- Template:Ordomag/x (view source) (protected)
- Template:Precision (view source) (protected)
- Template:Precision/0 (view source) (protected)
- Template:Precision/00 (view source) (protected)
- Template:Precision/a (view source) (protected)
- Template:Rnd (view source) (protected)
- Template:Rnd/- (view source) (protected)
- Template:Rnd/a ( bypassed on 15 April 2010 )
- Template:Rnd/b1 (view source) (protected)
- Template:Rnd/c4dec0 (view source) (protected)
If, instead of using {{rnd}}, then a different rounding routine were used, then 4-to-8 nested subtemplates could be avoided (for each conversion). However, the rounding would still need to handle very large numbers, such as for calculations in astrophysics and celestial mechanics.
- Also see: Template_talk:Convert - for general discussion.
- Also see: Template_talk:Convert/density - about density conversions.
- Also see: Template_talk:Convert/updates - for requesting protected updates.