Permanently protected module
From Wikipedia, the free encyclopedia


-- This module produces a count of all the arguments passed to it.



local yesno = require('Module:Yesno')



-- Trim a string

local function trim(s)

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

end



-- Test whether a string is blank

local function isBlank(s)

	return not s:find('%S')

end



-- Tests whether a string is a valid positional key, and if so, returns it. If

-- the key is invalid, this returns nil.

local function isPositionalKey(s)

	s = trim(s)

	if s:find('^[1-9][0-9]*$') then

		return tonumber(s)

	end

end



-- Return the count of all arguments for which testFunc returns a truthy value.

local function count(args, testFunc)

	local ret = 0

	for key, val in pairs(args) do

		if testFunc(key, val) then

			ret = ret + 1

		end

	end

	return ret

end



-- Check shared arguments and get the parent argument count.

local function main(frame, testFunc)

	local blankifiedTestFunc

	if yesno(frame.args.checkblanks) ~= false then

		-- Extend the test function to check for blanks as well.

		blankifiedTestFunc = function (key, val)

			if not isBlank(val) then

				return testFunc(key, val)

			end

		end

	else

		blankifiedTestFunc = testFunc

	end

	return count(frame:getParent().args, blankifiedTestFunc)

end



return {

	-- Called with {{#invoke:ParameterCount|all}}

	-- All specified parameters are counted, even those not supported by the

	-- template.

	all = function (frame)

		return main(frame, function () return true end)

	end,



	-- Called with {{#invoke:ParameterCount|main}}

	-- Users can specify a list of parameters to check, and a list of Lua

	-- Ustring patterns to check each parameter against.

	main = function (frame)

		local args = frame.args

		local keys, patterns = {}, {}

		

		-- Get key list

		for i, key in ipairs(args) do

			local positionalKey = isPositionalKey(key)

			if positionalKey then

				keyspositionalKey = true

			else

				keystrim(key)] = true

			end

		end



		-- Get patterns

		do

			local function getPattern(i)

				local pattern = args'pattern' .. tostring(i)]

				if pattern and pattern ~= '' then

					return pattern

				end

			end

			local i = 1

			local pattern = getPattern(i)

			while pattern do

				patternsi = pattern

				i = i + 1

				pattern = getPattern(i)

			end

		end



		-- Construct the test function

		local testFunc = function (key, val)

			if keyskey then

				return true

			end

			for i, pattern in ipairs(patterns) do

				if mw.ustring.find(tostring(key), pattern) then

					return true

				end

			end

			return false

		end



		return main(frame, testFunc)

	end

}
Permanently protected module
From Wikipedia, the free encyclopedia


-- This module produces a count of all the arguments passed to it.



local yesno = require('Module:Yesno')



-- Trim a string

local function trim(s)

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

end



-- Test whether a string is blank

local function isBlank(s)

	return not s:find('%S')

end



-- Tests whether a string is a valid positional key, and if so, returns it. If

-- the key is invalid, this returns nil.

local function isPositionalKey(s)

	s = trim(s)

	if s:find('^[1-9][0-9]*$') then

		return tonumber(s)

	end

end



-- Return the count of all arguments for which testFunc returns a truthy value.

local function count(args, testFunc)

	local ret = 0

	for key, val in pairs(args) do

		if testFunc(key, val) then

			ret = ret + 1

		end

	end

	return ret

end



-- Check shared arguments and get the parent argument count.

local function main(frame, testFunc)

	local blankifiedTestFunc

	if yesno(frame.args.checkblanks) ~= false then

		-- Extend the test function to check for blanks as well.

		blankifiedTestFunc = function (key, val)

			if not isBlank(val) then

				return testFunc(key, val)

			end

		end

	else

		blankifiedTestFunc = testFunc

	end

	return count(frame:getParent().args, blankifiedTestFunc)

end



return {

	-- Called with {{#invoke:ParameterCount|all}}

	-- All specified parameters are counted, even those not supported by the

	-- template.

	all = function (frame)

		return main(frame, function () return true end)

	end,



	-- Called with {{#invoke:ParameterCount|main}}

	-- Users can specify a list of parameters to check, and a list of Lua

	-- Ustring patterns to check each parameter against.

	main = function (frame)

		local args = frame.args

		local keys, patterns = {}, {}

		

		-- Get key list

		for i, key in ipairs(args) do

			local positionalKey = isPositionalKey(key)

			if positionalKey then

				keyspositionalKey = true

			else

				keystrim(key)] = true

			end

		end



		-- Get patterns

		do

			local function getPattern(i)

				local pattern = args'pattern' .. tostring(i)]

				if pattern and pattern ~= '' then

					return pattern

				end

			end

			local i = 1

			local pattern = getPattern(i)

			while pattern do

				patternsi = pattern

				i = i + 1

				pattern = getPattern(i)

			end

		end



		-- Construct the test function

		local testFunc = function (key, val)

			if keyskey then

				return true

			end

			for i, pattern in ipairs(patterns) do

				if mw.ustring.find(tostring(key), pattern) then

					return true

				end

			end

			return false

		end



		return main(frame, testFunc)

	end

}

Videos

Youtube | Vimeo | Bing

Websites

Google | Yahoo | Bing

Encyclopedia

Google | Yahoo | Bing

Facebook