模块:Tl

来自有兽档案馆
文档图示 模块文档[创建] [跳转到代码]

本模块还没有文档页面。

您可以创建文档以让编者更好地理解本模块的用途。
编者可以在本模块的沙盒创建 | 镜像和测试样例创建页面进行实验。
请将模块自身所属的分类添加在文档中。本模块的子页面
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