local p = {}
---@type mw
local mw = mw
local function escapePattern(s) return string.gsub(s, '([-+*?%%])', '%%%1') end
---@param frame Frame
function p.forargs(frame)
local parent = frame:getParent()
if parent == nil then
return ""
end
--- 循环体
local wt = frame.args[4]
assert(wt, "不写循环体是何意味啊")
-- 移除nowiki以备循环用
wt = mw.text.unstripNoWiki(wt)
wt = mw.text.decode(wt)
local prefix = frame.args[1]
prefix = mw.text.trim(prefix)
local keyName = frame.args[2]
keyName = mw.text.trim(keyName)
local valName = frame.args[3]
valName = mw.text.trim(valName)
local keyPtn = "{{%s-#var%s-:%s-" .. escapePattern(keyName) .. "%s-}}"
local valPth = "{{%s-#var%s-:%s-" .. escapePattern(valName) .. "%s-}}"
--- 结果拼接
local rstable = {}
for k, v in pairs(parent.args) do
if string.sub(k, 1, #prefix) == prefix then
local shortK = string.sub(k, #prefix + 1)
local temp = string.gsub(wt, keyPtn, shortK)
temp = string.gsub(temp, valPth, v)
table.insert(rstable, temp)
end
end
return parent:preprocess(table.concat(rstable))
end
return p