For faster navigation, this Iframe is preloading the Wikiwand page for ಮಾಡ್ಯೂಲ್:ParameterCount.

ಮಾಡ್ಯೂಲ್:ParameterCount

Documentation for this module may be created at ಮಾಡ್ಯೂಲ್:ParameterCount/doc

-- 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
				keys[positionalKey] = true
			else
				keys[trim(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
				patterns[i] = pattern
				i = i + 1
				pattern = getPattern(i)
			end
		end

		-- Construct the test function
		local testFunc = function (key, val)
			if keys[key] 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
}
{{bottomLinkPreText}} {{bottomLinkText}}
ಮಾಡ್ಯೂಲ್:ParameterCount
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Get ready for Wikiwand 2.0 🎉! the new version arrives on September 1st! Don't want to wait?