مواد ڏانھن هلو

ماڊيول:Redirect-multi

کليل ڄاڻ چيڪلي، وڪيپيڊيا مان


{{redirect-multi}} کي لاڳو ڪري ٿو۔


local mRedirectHatnote = require('Module:Redirect hatnote')
local mArguments = require('Module:Arguments')
local p = {}

-- fallback disambiguate (ڇو ته ڪجهه وڪين جي Module:Hatnote ۾ disambiguate موجود ناهي)
local function disambiguate(titleText)
	if not titleText or titleText == '' then
		return nil
	end
	-- جيڪڏهن اهو اڳ ئي وضاحتي صفحي وانگر لڳي، ته صرف لنڪ ڏيو
	if mw.ustring.find(titleText, '%(disambiguation%)', 1, false) then
		return string.format('[[%s]]', titleText)
	end
	-- معياري وضاحتي لنڪ ٺاهيو (انگريزي نالي وارو طريقو عام درآمد ٿيل روايت آهي)
	return string.format('[[%s (disambiguation)|%s]]', titleText, titleText)
end

function p.redirectMulti(frame)
	local args = mArguments.getArgs(frame)

	-- maxArg هٿ سان حاصل ڪريو ڇو ته getArgs ۽ table.maxn گڏ سٺو ڪم نٿا ڪن
	local maxArg = 0
	for k, v in pairs(args) do
		if type(k) == 'number' and k > maxArg then
			maxArg = k
		end
	end

	-- ريڊائريڪٽن جو تعداد حاصل ڪريو، پوءِ ان کي args ٽيبل مان هٽايو
	local numRedirects = tonumber(args[1]) or 1

	-- دليلن کي هٿ سان هيٺ منتقل ڪريو؛ table.remove استعمال نه ڪيو ويو آهي
	-- ڇو ته getArgs ڪجهه پيچيده آهي
	for i = 2, maxArg + 1 do
		args[i - 1] = args[i]
	end

	-- جيڪڏهن ريڊائريڪٽن کان پوءِ ڪي به دليل موجود نه هجن، ته ڊفالٽ سيٽ شامل ڪريو
	if maxArg - 2 <= numRedirects then
		for i = 1, numRedirects do
			args[numRedirects + (2 * i)] = args[i] and disambiguate(args[i])
			-- هي آخري شيءِ کان پوءِ به "and" شامل ڪري ٿو، پر اهو نظرانداز ڪيو ويندو
			args[numRedirects + (2 * i) + 1] = 'and'
		end
	end

	local options = { selfref = args.selfref }
	return mRedirectHatnote._redirect(args, numRedirects, options)
end

return p