Jump to content

Module:Sandbox/Grufo/Introspection

From Wikipedia, the free encyclopedia
require[[strict]]


-- Copied from Module:Params
-- Parse a parameter name string and return it as a string or a number
local function get_parameter_name (par_str)
	local ret = par_str:match'^%s*(.-)%s*$'
	if ret ~= '0' and ret:find'^%-?[1-9]%d*$' == nil then return ret end
	return tonumber(ret)
end


local iface = {}


iface.check_for_unknown_parameters = function (frame)
	local tmp, name
	local pframe = frame:getParent()
	local idx, parameters, leftover, wikitext = 0, {}, {},
		frame:preprocess(mw.title.new(pframe:getTitle()):getContent()
			:gsub('[{}%[%]]', '<noinclude />%0<noinclude />'))
	while true do
		tmp, idx, name = wikitext:find('{{{([^{}|]*)|?[^{}]*}}}', idx + 1, false)
		if tmp == nil then break end
		parameters[get_parameter_name(name)] = true
	end
	for key in pairs(pframe.args) do
		if parameters[key] == nil then leftover[key] = true end
	end
	if next(leftover) ~= nil then
		tmp = 'Unknown parameters:'
		for key in pairs(leftover) do tmp = tmp .. '\n* “' .. key .. '”' end
		return tmp
	end
	return ''
end


return iface