มอดูล:User:Ans/ExpandTemplateContent

จากวิกิพีเดีย สารานุกรมเสรี
Documentation icon คู่มือการใช้งานมอดูล[สร้าง]
local p = {}

-- For passed as named template parameter that is going to be preprocessed.
-- Since input text is assumed to has already been preprocessed, so '{', '}', and '<' are escaped
-- to prevent them to be preprocessed.  '[' is escaped to handle the case like '{{t1|a1=[[a}}
--
--    Example: frame:preprocess('{{t1|a1='..escapeNamedTemplateParameter(s)..'}}')
--
-- Note: This does not convert '=' to '{{=}}'
--
local function escapeNamedTemplateParameter(s)
	return s:gsub('[{}<[]', '%1<!---->'):gsub('|', '{{!}}')
end

-- Suitable for passed as unnamed template parameter that is going to be preprocessed,
-- as it also convert '=' to '{{=}}'
--
--    Example: frame:preprocess('{{t1|'..escapeTemplateParameter(s)..'}}')
--
local function escapeTemplateParameter(s)
	return s:gsub('[{}<[]', '%1<!---->'):gsub('[|=]', {['|']='{{!}}', ['=']='{{=}}'})
end
local escapeUnnamedTemplateParameter = escapeTemplateParameter

function p.expand(frame)
	local i = 0
	local p = ''
	for k, v in ipairs(frame.args) do
		p = p..'|'..escapeUnnamedTemplateParameter(v)
		i = k
	end
	for k, v in ipairs(frame.args) do
		if type(k)=='number' then
			p = p..'|'..k..'='..escapeNamedTemplateParameter(v)
		end
	end
	return frame:expandTemplate {title='preprocessTemplateContent', args=frame.args}
end

return p