Permanently protected module
From Wikipedia, the free encyclopedia


-- 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 trim(s)

	return s:match('^%s*(.-)%s*$')

end



local function isnotempty(s)

	return s and s:match('%S')

end



local function clean(text)

	-- Return text cleaned for display and truncated if too long.

	-- Strip markers are replaced with dummy text representing the original wikitext.

	local pos, truncated

	local function truncate(text)

		if truncated then

			return ''

		end

		if mw.ustring.len(text) > 25 then

			truncated = true

			text = mw.ustring.sub(text, 1, 25) .. '...'

		end

		return mw.text.nowiki(text)

	end

	local parts = {}

	for before, tag, remainder in text:gmatch('([^\127]*)\127[^\127]*%-(%l+)%-[^\127]*\127()') do

		pos = remainder

		table.insert(parts, truncate(before) .. '<' .. tag .. '>...</' .. tag .. '>')

	end

	table.insert(parts, truncate(text:sub(pos or 1)))

	return table.concat(parts)

end



function p._check(args, pargs)

	if type(args) ~= "table" or type(pargs) ~= "table" then

		-- TODO: error handling

		return

	end



	-- create the list of known args, regular expressions, and the return string

	local knownargs = {}

	local regexps = {}

	for k, v in pairs(args) do

		if type(k) == 'number' then

			v = trim(v)

			knownargsv = 1

		elseif k:find('^regexp[1-9][0-9]*$') then

			table.insert(regexps, '^' .. v .. '$')

		end

	end



	-- loop over the parent args, and make sure they are on the list

	local ignoreblank = isnotempty(args'ignoreblank'])

	local showblankpos = isnotempty(args'showblankpositional'])

	local values = {}

	for k, v in pairs(pargs) do

		if type(k) == 'string' and knownargsk == nil then

			local knownflag = false

			for _, regexp in ipairs(regexps) do

				if mw.ustring.match(k, regexp) then

					knownflag = true

					break

				end

			end

			if not knownflag and ( not ignoreblank or isnotempty(v) )  then

				table.insert(values, clean(k))

			end

		elseif type(k) == 'number' and knownargstostring(k)] == nil then

			local knownflag = false

			for _, regexp in ipairs(regexps) do

				if mw.ustring.match(tostring(k), regexp) then

					knownflag = true

					break

				end

			end

			if not knownflag and ( showblankpos or isnotempty(v) ) then

				table.insert(values, k .. ' = ' .. clean(v))

			end

		end

	end



	-- add results to the output tables

	local res = {}

	if #values > 0 then

		local unknown_text = args'unknown' or 'Found _VALUE_, '



		if mw.getCurrentFrame():preprocess( "{{REVISIONID}}" ) == "" then

			local preview_text = args'preview'

			if isnotempty(preview_text) then

				preview_text = require('Module:If preview')._warning({preview_text})

			elseif preview == nil then

				preview_text = unknown_text

			end

			unknown_text = preview_text

		end

		for _, v in pairs(values) do

			-- Fix odd bug for | = which gets stripped to the empty string and

			-- breaks category links

			if v == '' then v = ' ' end



			-- avoid error with v = 'example%2' ("invalid capture index")

			local r = unknown_text:gsub('_VALUE_', {_VALUE_ = v})

			table.insert(res, r)

		end

	end



	return table.concat(res)

end



function p.check(frame)

	local args = frame.args

	local pargs = frame:getParent().args

	return p._check(args, pargs)

end



return p
Permanently protected module
From Wikipedia, the free encyclopedia


-- 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 trim(s)

	return s:match('^%s*(.-)%s*$')

end



local function isnotempty(s)

	return s and s:match('%S')

end



local function clean(text)

	-- Return text cleaned for display and truncated if too long.

	-- Strip markers are replaced with dummy text representing the original wikitext.

	local pos, truncated

	local function truncate(text)

		if truncated then

			return ''

		end

		if mw.ustring.len(text) > 25 then

			truncated = true

			text = mw.ustring.sub(text, 1, 25) .. '...'

		end

		return mw.text.nowiki(text)

	end

	local parts = {}

	for before, tag, remainder in text:gmatch('([^\127]*)\127[^\127]*%-(%l+)%-[^\127]*\127()') do

		pos = remainder

		table.insert(parts, truncate(before) .. '<' .. tag .. '>...</' .. tag .. '>')

	end

	table.insert(parts, truncate(text:sub(pos or 1)))

	return table.concat(parts)

end



function p._check(args, pargs)

	if type(args) ~= "table" or type(pargs) ~= "table" then

		-- TODO: error handling

		return

	end



	-- create the list of known args, regular expressions, and the return string

	local knownargs = {}

	local regexps = {}

	for k, v in pairs(args) do

		if type(k) == 'number' then

			v = trim(v)

			knownargsv = 1

		elseif k:find('^regexp[1-9][0-9]*$') then

			table.insert(regexps, '^' .. v .. '$')

		end

	end



	-- loop over the parent args, and make sure they are on the list

	local ignoreblank = isnotempty(args'ignoreblank'])

	local showblankpos = isnotempty(args'showblankpositional'])

	local values = {}

	for k, v in pairs(pargs) do

		if type(k) == 'string' and knownargsk == nil then

			local knownflag = false

			for _, regexp in ipairs(regexps) do

				if mw.ustring.match(k, regexp) then

					knownflag = true

					break

				end

			end

			if not knownflag and ( not ignoreblank or isnotempty(v) )  then

				table.insert(values, clean(k))

			end

		elseif type(k) == 'number' and knownargstostring(k)] == nil then

			local knownflag = false

			for _, regexp in ipairs(regexps) do

				if mw.ustring.match(tostring(k), regexp) then

					knownflag = true

					break

				end

			end

			if not knownflag and ( showblankpos or isnotempty(v) ) then

				table.insert(values, k .. ' = ' .. clean(v))

			end

		end

	end



	-- add results to the output tables

	local res = {}

	if #values > 0 then

		local unknown_text = args'unknown' or 'Found _VALUE_, '



		if mw.getCurrentFrame():preprocess( "{{REVISIONID}}" ) == "" then

			local preview_text = args'preview'

			if isnotempty(preview_text) then

				preview_text = require('Module:If preview')._warning({preview_text})

			elseif preview == nil then

				preview_text = unknown_text

			end

			unknown_text = preview_text

		end

		for _, v in pairs(values) do

			-- Fix odd bug for | = which gets stripped to the empty string and

			-- breaks category links

			if v == '' then v = ' ' end



			-- avoid error with v = 'example%2' ("invalid capture index")

			local r = unknown_text:gsub('_VALUE_', {_VALUE_ = v})

			table.insert(res, r)

		end

	end



	return table.concat(res)

end



function p.check(frame)

	local args = frame.args

	local pargs = frame:getParent().args

	return p._check(args, pargs)

end



return p

Videos

Youtube | Vimeo | Bing

Websites

Google | Yahoo | Bing

Encyclopedia

Google | Yahoo | Bing

Facebook