پودمان:Check for clobbered parameters

    از ویکی‌نور
    (تفاوت) → نسخهٔ قدیمی‌تر | نمایش نسخهٔ فعلی (تفاوت) | نسخهٔ جدیدتر ← (تفاوت)

    توضیحات این پودمان می‌تواند در پودمان:Check for clobbered parameters/توضیحات قرار گیرد.

    local p = {}
    
    local function trim(s)
    	return s:match('^%s*(.-)%s*$')
    end
    
    local function isnotempty(s)
    	return s and s:match('%S')
    end
    
    function p.check(frame)
    	local args = frame.args
    	local pargs = frame:getParent().args
    	local checknested = isnotempty(args['nested'])
    	local delimiter = isnotempty(args['delimiter']) and args['delimiter'] or ';'
    	local argpairs = {}
    	
    	for k, v in pairs(args) do
    		if type(k) == 'number' then
    			local plist = mw.text.split(v, delimiter)
    			local pfound = {}
    			local count = 0
    			for ii, vv in ipairs(plist) do
    				vv = trim(vv)
    				if checknested and pargs[vv] or isnotempty(pargs[vv]) then
    					count = count + 1
    					table.insert(pfound, vv)
    				end
    			end
    			if count > 1 then
    				table.insert(argpairs, pfound)
    			end
    		end
    	end
    	
    	local warnmsg = {}
    	local res = ''
    	local cat = ''
    	if args['cat'] and mw.ustring.match(args['cat'],'^[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]:') then
    		cat = args['cat']
    	end
    	local template = args['template'] and ' in ' .. args['template']  or ''
    	if #argpairs > 0 then
    		for i, v in ipairs( argpairs ) do
    			table.insert(
    				warnmsg,
    				mw.ustring.format(
    					'Using more than one of the following parameters%s: <code>%s</code>.',
    					template,
    					table.concat(v, '</code>, <code>')
    				)
    			)
    			if cat ~= '' then
    				res = res .. '[[' .. cat .. '|' .. (v[1] == '' and ' ' or '') .. v[1] .. ']]'
    			end	
    		end
    	end
    	
    	if #warnmsg > 0 then
    		res = require('Module:If preview')._warning({
    			table.concat(warnmsg, '<br>')
    		}) .. res
    	end
    	
    	return res
    end
    
    return p