Mô đun:Unsubst

local checkType = require('libraryUtil').checkType

local p = {}

local BODY_PARAM = '$B'

local specialParams = {
	['$params'] = 'parameter list',
	['$aliases'] = 'parameter aliases',
	['$flags'] = 'flags',
	['$B'] = 'template content'
}

function p.main(frame, body)
	-- If we are substing, this function returns a template invocation, and if
	-- not, it returns the template body. The template body can be specified in
	-- the body parameter, or in the template parameter defined in the
	-- BODY_PARAM variable. This function can be called from Lua or from
	-- #invoke.

	-- Return the template body if we aren't substing.
	if not mw.isSubsting() then
		if body ~= nil then
			return body
		elseif frame.args[BODY_PARAM] ~= nil then
			return frame.args[BODY_PARAM]
		else
			error(string.format(
				"không có nội dung bản mẫu được chỉ định (sử dụng tham số '%s' từ #gọi)",
				BODY_PARAM
			), 2)
		end
	end

	-- Sanity check for the frame object.
	if type(frame) ~= 'table'
		or type(frame.getParent) ~= 'function'
		or not frame:getParent()
	then
		error(
			"đối số #1 đến 'main' phải là đối tượng khung có cha mẹ " ..
			"khung có sẵn",
			2
		)
	end

	-- Find the invocation name.
	local mTemplateInvocation = require('Mô đun:Template invocation')
	local name = mTemplateInvocation.name(frame:getParent():getTitle())

	-- Combine passed args with passed defaults
	local args = {}
	if string.find( ','..(frame.args['$flags'] or '')..',', ',%s*override%s*,' ) then
		for k, v in pairs( frame:getParent().args ) do
			args[k] = v
		end
		for k, v in pairs( frame.args ) do
			if not specialParams[k] then
				if v == '__DATE__' then
					v = mw.getContentLanguage():formatDate( '"tháng" n "năm" Y' )
				end
				args[k] = v
			end
		end
	else
		for k, v in pairs( frame.args ) do
			if not specialParams[k] then
				if v == '__DATE__' then
					v = mw.getContentLanguage():formatDate( '"tháng" n "năm" Y' )
				end
				args[k] = v
			end
		end
		for k, v in pairs( frame:getParent().args ) do 
			args[k] = v
		end
	end

	-- Trim parameters, if not specified otherwise
	if not string.find( ','..(frame.args['$flags'] or '')..',', ',%s*keep%-whitespace%s*,' ) then
		for k, v in pairs( args ) do args[k] = mw.ustring.match(v, '^%s*(.*)%s*$') or '' end
	end

	-- Pull information from parameter aliases
	local aliases = {}
	if frame.args['$aliases'] then
		local list = mw.text.split( frame.args['$aliases'], '%s*,%s*' )
		for k, v in ipairs( list ) do
			local tmp = mw.text.split( v, '%s*>%s*' )
			aliases[tonumber(mw.ustring.match(tmp[1], '^[1-9][0-9]*$')) or tmp[1]] = ((tonumber(mw.ustring.match(tmp[2], '^[1-9][0-9]*$'))) or tmp[2])
		end
	end
	for k, v in pairs( aliases ) do
		if args[k] and ( not args[v] or args[v] == '' ) then
			args[v] = args[k]
		end
		args[k] = nil
	end

	-- Remove empty parameters, if specified
	if string.find( ','..(frame.args['$flags'] or '')..',', ',%s*remove%-empty%s*,' ) then
		local tmp = 0
		for k, v in ipairs( args ) do
			if v ~= '' or ( args[k+1] and args[k+1] ~= '' ) or ( args[k+2] and args[k+2] ~= '' ) then
				tmp = k
			else
				break
			end
		end
		for k, v in pairs( args ) do
			if v == '' then
				if not (type(k) == 'number' and k < tmp) then args[k] = nil end
			end
		end
	end

	-- Order parameters
	if frame.args['$params'] then
		local params, tmp = mw.text.split( frame.args['$params'], '%s*,%s*' ), {}
		for k, v in ipairs(params) do
			v = tonumber(mw.ustring.match(v, '^[1-9][0-9]*$')) or v
			if args[v] then tmp[v], args[v] = args[v], nil end
		end
		for k, v in pairs(args) do tmp[k], args[k] = args[k], nil end
		args = tmp
	end

	return mTemplateInvocation.invocation(name, args)
end

p[''] = p.main -- For backwards compatibility

return p
Chúng tôi bán
Bài viết liên quan
[Phân tích] Sức mạnh của Dainsleif - Genshin Impact
[Phân tích] Sức mạnh của Dainsleif - Genshin Impact
Dainsleif is the former knight captain of the Royal Guard of Khaenri'ah
Scale của Raiden Shogun và những hạn chế khi build
Scale của Raiden Shogun và những hạn chế khi build
Các chỉ số của raiden bị hạn chế bới hiệu quả nạp rất nhiều trong khi có được chỉ số 80/180 mà vẫn đảm bảo tối thiểu 250% nạp có thể nói đó là 1 raiden build cực kì ngon
Blue Period - Bộ Anime truyền động lực và cảm hứng
Blue Period - Bộ Anime truyền động lực và cảm hứng
Bộ phim kể về Yutaro - nhân vật chính, một cậu học sinh cấp 3 "học giỏi, chơi giỏi" nhưng tất cả những điều đó chỉ khiến cậu ta càng thêm trống rỗng và cảm thấy cuộc sống thật nhàm chán và vô vị
Maeve Wiley: Dịu dàng như một giấc mơ bão tố
Maeve Wiley: Dịu dàng như một giấc mơ bão tố
Nàng như một khối Rubik, nhưng không phải do nàng đổi màu trước mỗi đối tượng mà do sắc phản của nàng khác biệt trong mắt đối tượng kia