local p = {}
function p._tlRaw(args, params)
local generateLinks = params.generateLinks
local substPrefix = params.substPrefix
local isCode = params.isCode
local templateName = args[1]
if (not templateName) or templateName=='' then
return ''
end
do
if params.isSubst then
substPrefix = substPrefix or 'subst'
end
local _subst, _templateName = templateName:match'(.-)%:(.+)'
if _subst=='subst' or _subst=='safesubst' or _subst=='msgnw' then
substPrefix = _subst
templateName = _templateName
end
end
local argsList = {}
local numKeyList = {}
local strKeyList = {}
local maxNumKey = 0
if generateLinks and not templateName:find '^%#' then
templateName = '[[' .. tostring(mw.title.makeTitle('Template',templateName) or templateName) .. '|' .. templateName .. ']]'
end
if substPrefix then
table.insert(argsList, substPrefix .. ':'..templateName)
else
table.insert(argsList, templateName)
end
for k,v in pairs(args) do
if type(k)=='number' then
maxNumKey = math.min(math.max(maxNumKey,k),20)
elseif type(k)=='string' then
table.insert(strKeyList, k)
end
end
table.sort(strKeyList)
for k=2,maxNumKey,1 do
local v=args[k]
table.insert(argsList, v)
end
for i,k in ipairs(strKeyList) do
local v=args[k]
table.insert(argsList, k..'='..v)
end
local result = '{{' .. table.concat(argsList,'|') .. '}}'
if isCode then
return '<code>' .. result .. '</code>'
else
return result
end
end
function p._tl(frameArgs, defaultParams)
local params = {generateLinks = true}
if defaultParams then
-- 考虑传入到这里的defaultParams实质上也是frame的变量,
-- 故需要进行迭代重写。
for k,v in pairs(defaultParams) do
if v=='1' then
params[k] = true
elseif v=='0' then
params[k] = false
end
end
end
local args = {}
for k,v in pairs(frameArgs) do
-- 这种情况下,不应该忽略空白变量。
if k == 'isCode' or k == 'isSubst' or k == 'generateLinks' then
if v=='1' then
params[k] = true
elseif v=='0' then
params[k] = false
else
args[k] = v -- 这种情况下,这个变量作为正式变量,不作为params
end
elseif k == 'substPrefix' then
params[k] = v
else
args[k] = v
end
end
return p._tlRaw(args,params)
end
function p.tl(frame)
-- 这时候该函数用于模板tl、tlc……了
return p._tl(frame:getParent().args, frame.args)
-- 这里的前者相当于args,后者相当于defaultParams
end
return p