Mô đun:ParameterCount

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

local yesno = require('Mô đun: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 {{#gọi: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 {{#gọi: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
}
Chúng tôi bán
Bài viết liên quan
Stranger Things season 4 - Sự chờ đợi liệu có xứng đáng
Stranger Things season 4 - Sự chờ đợi liệu có xứng đáng
Một lần nữa thì Stranger Things lại giữ được cái chất đặc trưng vốn có khác của mình đó chính là show rất biết cách sử dụng nhạc của thập niên 80s để thúc đẩy mạch truyện và góp phần vào cách mà mỗi tập phim khắc họa cảm xúc
[Review phim] Người Vợ Cuối Cùng - Liệu có đáng xem hay không?
[Review phim] Người Vợ Cuối Cùng - Liệu có đáng xem hay không?
Điểm cộng của phim rơi hết vào phần hình ảnh, âm thanh và diễn xuất của hầu hết dàn diễn viên.
Data Analytics:
Data Analytics: "Miền đất hứa" cho sinh viên Kinh tế và những điều cần biết
Sự ra đời và phát triển nhanh chóng của cuộc cách mạng công nghiệp 4.0 cùng những khái niệm liên quan như IoT (Internet of Things), Big Data
Ngân hàng Trung ương Hoa Kỳ Federal Reserve hoạt động như thế nào?
Ngân hàng Trung ương Hoa Kỳ Federal Reserve hoạt động như thế nào?
Nền kinh tế thế giới đang ở trong giai đoạn mỏng manh nhất trong lịch sử hoạt động của mình