Difference between revisions of "Module:Check for unknown parameters"

From Nonbinary Wiki
Jump to navigation Jump to search
(start check for positional)
(add html comments to make it easier to see the output without disrupting the article)
Line 15: Line 15:
 
local knownargs = {}
 
local knownargs = {}
 
local unknown = 'Found _VALUE_, '
 
local unknown = 'Found _VALUE_, '
  +
 
 
local res = {}
 
local res = {}
  +
local comments = {}
  +
local commentstr = ''
 
 
 
-- create the list of known args, and the return string
 
-- create the list of known args, and the return string
Line 37: Line 39:
 
local r = mw.ustring.gsub(unknown, '_VALUE_', k)
 
local r = mw.ustring.gsub(unknown, '_VALUE_', k)
 
table.insert(res, r)
 
table.insert(res, r)
  +
table.insert(comments, '"' .. k .. '"')
 
end
 
end
 
elseif(checkpos and type(k) == 'number' and knownargs[tostring(k)] == nil) then
 
elseif(checkpos and type(k) == 'number' and knownargs[tostring(k)] == nil) then
Line 42: Line 45:
 
local r = mw.ustring.gsub(unknown, '_VALUE_', k)
 
local r = mw.ustring.gsub(unknown, '_VALUE_', k)
 
table.insert(res, r)
 
table.insert(res, r)
  +
table.insert(comments, '"' .. k .. '"')
 
end
 
end
 
end
 
end
 
end
 
end
   
  +
if(#comments > 0) then
return table.concat(res)
 
  +
commentstr = '<!-- Module:Check for unknown parameters results: ' ..
  +
table.concat(comments, ', ') .. '-->'
  +
end
 
 
return table.concat(res) .. commentstr
 
end
 
end
   

Revision as of 14:36, 30 March 2015

Documentation for this module may be created at Module:Check for unknown parameters/doc

-- This module may be used to compare the arguments passed to the parent
-- with a list of arguments, returning a specified result if an argument is
-- not on the list
local p = {}

local function isnotempty(s)
	return s and s:match( '^%s*(.-)%s*$' ) ~= ''
end

function p.check (frame)
	local args = frame.args
	local pargs = frame:getParent().args
	local ignoreblank = isnotempty(frame.args['ignoreblank'])
	local checkpos = isnotempty(frame.args['checkpositional'])
	local knownargs = {}
	local unknown = 'Found _VALUE_, '

	local res = {}
	local comments = {}
	local commentstr = ''
	
	-- create the list of known args, and the return string
	for k, v in pairs(args) do
		if type(k) == 'number' then
			v = mw.ustring.gsub(v, '^%s*(.-)%s*$', '%1')
			knownargs[v] = 1
		else
			if (k == 'unknown' and type(v) == 'string') then
				unknown = v
			end
		end
	end

	-- loop over the parent args, and make sure they are on the list
	for k,v in pairs(pargs) do
		if (type(k) == 'string' and knownargs[k] == nil) then
			if( (not ignoreblank) or (ignoreblank and isnotempty(v)) ) then
				k = mw.ustring.gsub(k, '[^%w\-_ ]', '?')
				local r = mw.ustring.gsub(unknown, '_VALUE_', k)
				table.insert(res, r)
				table.insert(comments, '"' .. k .. '"')
			end
		elseif(checkpos and type(k) == 'number' and knownargs[tostring(k)] == nil) then
			if( (not ignoreblank) or (ignoreblank and isnotempty(v)) ) then
				local r = mw.ustring.gsub(unknown, '_VALUE_', k)
				table.insert(res, r)
				table.insert(comments, '"' .. k .. '"')
			end
		end
	end

	if(#comments > 0) then
		commentstr = '<!-- Module:Check for unknown parameters results: ' ..
			table.concat(comments, ', ') .. '-->'
	end
	
	return table.concat(res) .. commentstr
end

return p