Module:Tmpl
From Bonkipedia
Revision as of 14:49, 23 October 2022 by [[mw:]]>WOSlinker (use require('strict') instead of require('Module:No globals'))
<translate> This module is rated as [[<tvar name=1>Special:MyLanguage/Category:Modules in alpha</tvar>|alpha]].</translate> <translate> It is ready for third party input, and may be used on a few pages to see if problems arise, but should be watched.</translate> <translate> Suggestions for new features or changes in their input and output mechanisms are welcome.</translate> |
Implements {{tmpl}}.
Usage
{{#invoke:Tmpl|renderTmpl}}
Tests
Module:Tmpl | success: 2, error: 0, skipped: 0 |
- See test cases
-- This is a helper module for {{tmpl}}
require('strict')
-- 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