2023年政策修订增补工作正在进行中,欢迎参与!
Module:Sandbox/C8H17OH/ParamGroup
跳转到导航
跳转到搜索
阅读本用户子页面的任何人都可以参与编辑。
本模块用于将以一个参数的形式传入的“参数组”解析成多个参数并传给特定模板。
参数
本模块的接口函数名为main
,参数包括:
参数名 | 描述 | 默认值 |
---|---|---|
template 、tl 、1 |
模板名 | (必填) |
args 、2 |
“参数组” | 空 |
delim |
组内参数间分隔符 | {{!}}
|
assign |
键-值间赋值号 | {{=}}
|
regex |
是否使用正则表达式,非空为真 | 空 |
示例
以下各行
{{#invoke:Sandbox/C8H17OH|main|template=foo|args=arg1{{!}}arg2{{!}}key1{{=}}value1{{!}}key2{{=}}value2}} {{#invoke:Sandbox/C8H17OH|main|template=foo|args=arg1; arg2; key1:value1; key2:value2|delim=;|assign=:}} {{#invoke:Sandbox/C8H17OH|main|template=foo|args=arg1; arg2;key1:value1; key2:value2|delim=[;;]|assign=[::]|regex=on}}
结果都等同于
{{foo|arg1|arg2|key1=value1|key2=value2}}
用途
可以用于批量调用多参数模板。
详解 |
---|
注意事项
根据已有测试经验,与一般的模板使用类似:
- 在分隔符、赋值号前后的空白字符不会影响正常使用。
- 组内参数中不能出现分隔符,匿名参数的值中、实名参数的键中不能出现赋值号。
- 对于这点,目前没有像
{{!}}
和{{=}}
一样的解决办法,只能要求尽可能选用不会出现的符号。
- 对于这点,目前没有像
参见
local module = {}
local getArgs = require('Module:Arguments').getArgs
local String = require('Module:String')
function module._main(args, frame)
local template = args['template'] or args['tl'] or args[1]
local argtext = args['args'] or args[2] or ''
local delim = args['delim'] or '|'
local assign = args['assign'] or '='
-- argtext = mw.text.decode(mw.text.unstripNoWiki(argtext))
-- delim = mw.text.decode(mw.text.unstripNoWiki(delim))
-- assign = mw.text.decode(mw.text.unstripNoWiki(assign))
if not args['regex'] then
delim = String._escapePattern(delim)
assign = String._escapePattern(assign)
end
local kvargs = mw.text.split(argtext, delim)
local results = {}
for i, kv in ipairs(kvargs) do
local pos = mw.ustring.find(kv, assign)
if (pos == nil) then
results[#results + 1] = kv
else
local k = mw.ustring.sub(kv, 1, pos - 1)
local v = mw.ustring.sub(kv, pos + 1)
results[k] = v
end
end
return frame:expandTemplate{title = template, args = results}
end
function module.main(frame)
local args = getArgs(frame)
return module._main(args, frame)
end
return module