Mô đun:Parameters

-- Mô đun này thực hiện [[Bản mẫu:Parameters]].
-- [SublimeLinter luacheck-globals:mw]

local DEFINITIONS = {
	alt = {
		code = '<!-- văn bản thay thế cho hình ảnh; xem WP:ALT -->',
		dlist = 'văn bản thay thế cho hình ảnh; xem [[WP:ALT]]'},
	coordinates = {
		code = '<!-- sử dụng {{Tọa độ}} -->',
		dlist = 'sử dụng {{tl|Tọa độ}}'},
	coords = {
		code = '<!-- sử dụng {{Tọa độ}} -->',
		dlist = 'sử dụng {{tl|Tọa độ}}'},
	native_name = {
		code = '<!-- tên trong ngôn ngữ địa phương; nếu nhiều hơn một, riêng biệt ' ..
			'sử dụng {{Plainlist}} sử dụng {{lang}}, và bỏ qua native_name_lang -->',
		dlist = 'tên trong ngôn ngữ địa phương; nếu nhiều hơn một, riêng biệt ' ..
			'sử dụng {{tl|Plainlist}}, sử dụng {{tl|lang}}, và bỏ qua {{thông số|native_name_lang}}'},
	native_name_lang = {
		code = '<!-- mã ngôn ngữ hai hoặc ba ký tự ISO -->',
		dlist = 'mã ngôn ngữ hai hoặc ba ký tự ISO'},
	start_date = {
		code = '<!-- {{Start date|YYYY|MM|DD|df=y}} -->',
		dlist = 'sử dụng {{tlx|Start date|YYYY|MM|DD|df=y}}'},
	end_date = {
		code = '<!-- {{End date|YYYY|MM|DD|df=y}} -->',
		dlist = 'sử dụng {{tlx|Start date|YYYY|MM|DD|df=y}}'},
	url = {
		code = '<!-- sử dụng {{URL|ví dụ.com}} -->',
		dlist = 'sử dụng {{tl|URL}}'},
	website = {
		code = '<!-- sử dụng {{URL|ví dụ.com}} -->',
		dlist = 'sử dụng {{tls|URL|ví dụ.com}}'},}

local p = {}
local removeDuplicates = require('Mô đun:TableTools').removeDuplicates
local yesno = require('Mô đun:Yesno')

local function makeInvokeFunction(funcName)
	return function(frame)
		local getArgs = require('Mô đun:Arguments').getArgs
		return p[funcName](getArgs(frame, {removeBlanks = false}))
	end
end

local function extractParams(page)
	local source = mw.title.new(page, 'template'):getContent()

	local parameters = {}
	for parameter in string.gmatch(source, '{{{(.-)%f[}|<>]') do
		table.insert(parameters, parameter)
	end
	return removeDuplicates(parameters)
end

local function map(tbl, transform)
	local returnTable = {}
	for k, v in pairs(tbl) do
		returnTable[k] = transform(v)
	end
	return returnTable
end

local function strMap(tbl, transform)
	local returnTable = map(tbl, transform)
	return table.concat(returnTable)
end

function p._check(args)
	local title = args.base or mw.title.getCurrentTitle().fullText
	return string.format(
		'{{#gọi:Check for unknown parameters|check|unknown=' ..
		'[[Thể loại:Trang sử dụng %s có các tham số chưa rõ]]|%s}}', title,
		table.concat(extractParams(args.base), '|'))
end

function p._code(args)
	local definitions = yesno(args.definitions)
	local pad = yesno(args.pad)

	local parameters = extractParams(args.base)
	-- Space-pad the parameters to align the equal signs vertically
	if pad then
		local lengthPerPara = map(parameters, function (parameter)
			return string.len(parameter) end)
		-- Lua doesn't support printf's <*> to specify the width, apparently
		local fs = string.format('%%-%ss', math.max(unpack(lengthPerPara)))
		for i, parameter in pairs(parameters) do
			parameters[i] = string.format(fs, parameter)
		end
	end

	local title = args.base or mw.title.getCurrentTitle().baseText
	return string.format([[ <nowiki>{{%s
%s}}</nowiki>]], title, strMap(parameters,
		function(s)
			if definitions then
				return string.format('| %s = %s\n', s,
					DEFINITIONS[s] and DEFINITIONS[s].code or '')
			else
				return string.format('| %s = \n', s)
			end
		end))
end

function p._flatcode(args)
	local parameters = extractParams(args.base)
	local title = args.base or mw.title.getCurrentTitle().baseText
	return string.format(' {{tlp|%s%s}}', title, strMap(parameters,
		function(s)
			return string.format(' |%s{{=}}<var>%s</var>', s, s)
		end)
	)
end

function p._compare(args)
	local Set = require('Mô đun:Set')

	local function normaliseParams(parameters)
		local paramsNorm = {}
		-- Prepare a key lookup metatable, which will hold the original
		-- parameter names for each normalised parameter, e.g.
		-- [test] = {TEST, Test}. paramIndex functions like a Python
		-- defaultdict, where the default is a table.
		local paramIndex = setmetatable({}, {__index = function(t, k)
			if not rawget(t, k) then
				rawset(t, k, {})
			end
			return rawget(t, k)
		end})
		for _, parameter in pairs(parameters) do
			table.insert(paramsNorm,
				string.lower(string.gsub(parameter, '%A', '')))
			table.insert(paramIndex[
				string.lower(string.gsub(parameter, '%A', ''))], parameter)
		end

		paramsNorm = removeDuplicates(paramsNorm)
		-- Overload key lookup in paramsNorm. While [[Mô đun:Set]] will
		-- operate on the table (which is to say, the normalised parameters
		-- array), key access will be by way of the paramIndex metatable.
		setmetatable(paramsNorm, {__index = paramIndex})
		return paramsNorm
	end

	local baseParams = extractParams(args.base)
	local otherParams = extractParams(args.other)
	local baseNormParams = normaliseParams(Set.valueComplement(
			otherParams, baseParams))
	local otherNormParams = normaliseParams(otherParams)

	return string.format([[Identical:
%s
Tương tự:
%s
Khác nhau:
%s]],
	strMap(Set.valueIntersection(baseParams, otherParams),
		function(v) return string.format('* %s\n', v) end),
	strMap(Set.valueIntersection(baseNormParams, otherNormParams),
		function(v) return string.format('* %s < %s [%s]\n',
			table.concat(baseNormParams[v], '; '),
			table.concat(otherNormParams[v], '; '),
			v)
		end),
	strMap(Set.valueComplement(otherNormParams, baseNormParams),
		function(v) return strMap(baseNormParams[v],
			function(s) return string.format('* %s\n', s) end)
		end))
end

function p._demo(args)
	local title = args.base and ('|_template=' .. args.base) or ''
	return string.format('{{Parameter names example%s|%s}}', title,
		table.concat(extractParams(args.base), '|'))
end

function p._dlist(args)
	local definitions = yesno(args.definitions, true)
	local defFormat = '; %s: %s\n'
	local nonDefFormat = '; %s: \n'
	if args._para then
		defFormat = '; {{thông số|%s}}: %s\n'
		nonDefFormat = '; {{thông số|%s}}: \n'
	end
	return strMap(extractParams(args.base),
		function(s)
			if definitions then
				return string.format(defFormat, s,
					DEFINITIONS[s] and DEFINITIONS[s].dlist or '')
			else
				return string.format(nonDefFormat, s)
			end
		end)
end

function p._dlistpara(args)
	args._para = true
	return p._dlist(args)
end

function p._list(args)
	return strMap(extractParams(args.base),
		function(s) return string.format('* %s\n', s) end)
end


p.check = makeInvokeFunction('_check')
p.code = makeInvokeFunction('_code')
p.flatcode = makeInvokeFunction('_flatcode')
p.compare = makeInvokeFunction('_compare')
p.demo = makeInvokeFunction('_demo')
p.dlist = makeInvokeFunction('_dlist')
p.dlistpara = makeInvokeFunction('_dlistpara')
p.list = makeInvokeFunction('_list')

return p
Chúng tôi bán
Bài viết liên quan
[Target Elimination - Vanishing Illusions] Hướng dẫn sơ lược về Clear và treo Auto ở boss Selena
[Target Elimination - Vanishing Illusions] Hướng dẫn sơ lược về Clear và treo Auto ở boss Selena
Do cơ chế Auto hiện tại của game không thể target mục tiêu có Max HP lớn hơn, nên khi Auto hầu như mọi đòn tấn công của AG đều nhắm vào Selena
Vì sao vẫn cứ mãi là cẩu độc thân
Vì sao vẫn cứ mãi là cẩu độc thân
Sống hơn 20 năm rồi, quả là càng sống càng hiểu, hãy thử tổng kết lại vài nguyên nhân nào.
Các chỉ số chứng khoán thế giới nhà đầu tư cần biết
Các chỉ số chứng khoán thế giới nhà đầu tư cần biết
Khi tham gia đầu tư, ngoại trừ những biến động trong nước thì các chỉ số chứng khoán thế giới cũng là điều mà bạn cần quan tâm
Viết cho những nuối tiếc của Nanami - Jujutsu Kaisen
Viết cho những nuối tiếc của Nanami - Jujutsu Kaisen
Nanami là dạng người sống luôn đặt trách nhiệm rất lớn lên chính bản thân mình, nên cái c.hết ở chiến trường ắt hẳn làm anh còn nhiều cảm xúc dang dở