Module:Tmpl: Difference between revisions
Jump to navigation
Jump to search
mediawiki>ExE Boss (Prevent exponential expansion by performing all replacements during a single pass; goes from O(2ⁿ) to O(n)) |
(No difference)
|
Revision as of 13:48, 18 August 2021
Documentation for this module may be created at Module:Tmpl/doc
-- This is a helper module for {{tmpl}} require('Module:No globals') -- The trailing `[^0-9]?` ensures that `$10` doesn't potentially change -- from being treated as `${1}0` to being treated as `${10}` -- if the number of supported parameters is ever expanded: local PATTERN = "%$([1-9])[^0-9]?" local this = {} function this.renderTmpl(frame) local args = frame.args local pargs = (frame:getParent() or {}).args local input = pargs[0] or '' local result = {} local prevPos = 1 do local startPos, _, k while true do startPos, _, k = string.find(input, PATTERN, prevPos) if (not startPos) then break end table.insert(result, string.sub(input, prevPos, startPos - 1)) local n = tonumber(k) local r = pargs[n] if (r) then table.insert(result, r) else table.insert(result, '$' .. n) end prevPos = startPos + #k + 1 end end table.insert(result, string.sub(input, prevPos)) return table.concat(result) end return this