-- This implements  local p = {}  -- Internationalisation local trackingcat = 'Category:Pages using sports overview with unknown parameters' local labels = { 	competition = 'প্রতিযোগিতা', 	firstmatch = 'প্রথম ম্যাচ', 	lastmatch = 'শেষ ম্যাচ', 	startinground = 'প্রথম রাউন্ড', 	finalposition = 'চূড়ান্ত অবস্থান', 	record = 'রেকর্ড', 	total = 'মোট', 	source = 'উৎস: ', 	lastupdated = 'সর্বশেষ হালনাগাদ: ', 	sourcedefault = 'প্রতিযোগিতা', 	unknownparameter = 'Unknown parameter: ', 	pld = 'ম্যা', 	w = 'জ', 	d = 'ড্র', 	l = 'হা', 	pf = 'পজ', 	pa = 'পবি', 	pd = 'পপা', 	gf = 'স্বগো', 	ga = 'বিগো', 	gd = 'গোপা', 	wp = 'জয় %', 	winner = 'বিজয়ী', 	runnerup = 'রানারআপ', 	runnersup = 'রানারআপ' }  -- Main function function p.main(frame) 	local getArgs = require('Module:Arguments').getArgs 	local args = getArgs(frame)  	-- Get the row numbers and check for invalid input 	local rownumbers = {} 	local unknown = {} 	local showdates, showrounds, showpos = false, false, false 	local maxrow = -1 	local rowlimit = 99  	local function addrownumber(num, flag) 		if num <= rowlimit then 			table.insert(rownumbers, num) 			maxrow = (num > maxrow) and num or maxrow 			return true 		end 		return flag 	end  	for k, v in pairs(args) do 		k = tostring(k) 		local n = tonumber(k:match('^[a-z]+(%d+)$') or '-1') 		if k == 'u' or k == 'c' or k == 's' or k == 'pts' then 			-- These are valid 		elseif k:match('^[cwdlfa]%d+$') then 			local added = addrownumber(n, false) 		elseif k:match('[dfl]m%d+$') then 			showdates = addrownumber(n, showdates) 		elseif k:match('sr%d+$') then 			showrounds = addrownumber(n, showrounds) 		elseif k:match('fp%d+$') then 			showpos = addrownumber(n, showpos) 		else 			table.insert(unknown, k) 		end 	end 	-- Sort the row numbers 	table.sort(rownumbers)  	-- Remove duplicates 	for i=#rownumbers,2,-1 do 		if rownumbers[i-1] == rownumbers[i] then 			table.remove(rownumbers,i) 		end 	end  	local root = {} 	if maxrow > -1 then 		local WDL = require('Module:WDL').main 		-- Make the table 		table.insert(root,'{| class="wikitable" style="text-align:center"') 		-- Add the headers 		table.insert(root,'|-') 		table.insert(root,'! rowspan=2 | ' .. labels['competition']) 		local totspan = 1 		if showdates then 			table.insert(root,'! rowspan=2 | ' .. labels['firstmatch']) 			table.insert(root,'! rowspan=2 | ' .. labels['lastmatch']) 			totspan = totspan + 2 		end 		if showrounds then 			table.insert(root,'! rowspan=2 | ' .. labels['startinground']) 			totspan = totspan + 1 		end 		if showpos then 			table.insert(root,'! rowspan=2 | ' .. labels['finalposition']) 			totspan = totspan + 1 		end 		table.insert(root,'! colspan=8 | ' .. labels['record']) 		table.insert(root,'|-') 		table.insert(root,'! ' .. labels['pld']) 		table.insert(root,'! ' .. labels['w']) 		table.insert(root,'! ' .. labels['d']) 		table.insert(root,'! ' .. labels['l']) 		local pg = args.pts and args.pts == 'y' and 'p' or 'g' 		table.insert(root,'! ' .. labels[pg .. 'f']) 		table.insert(root,'! ' .. labels[pg .. 'a']) 		table.insert(root,'! ' .. labels[pg .. 'd']) 		table.insert(root,'! ' .. labels['wp']) 		local evenodd = 'odd'  		-- Now add the rows 		local wtot, dtot, ltot, ftot, atot = 0, 0, 0, 0, 0 		for i=1,#rownumbers do 			local r = rownumbers[i] 			if evenodd == 'even' then 				table.insert(root,'|- style="background-color:#EEE"') 				evenodd = 'odd' 			else 				table.insert(root,'|-') 				evenodd = 'even' 			end 			table.insert(root,'| ' .. (args['c' .. r] or )) 			if showdates then 				if args['dm' .. r] then 					table.insert(root,'| colspan=2 | ' .. args['dm' .. r]) 				else 					table.insert(root,'| ' .. (args['fm' .. r] or )) 					table.insert(root,'| ' .. (args['lm' .. r] or )) 				end 			end 			if showrounds then 			table.insert(root,'| ' .. (args['sr' .. r] or )) 			end 			if showpos then 				local fp = args['fp' .. r] or '' 				local bg = 					(fp:match('^' .. labels['winner']) and 'gold') or 					(fp:match('^' .. labels['runnersup']) and 'silver') or 					(fp:match('^' .. labels['runnerup']) and 'silver') or nil 				if bg then 					table.insert(root,'| style="background-color:' .. bg .. '" | ' .. fp) 				else 					table.insert(root,'| ' .. fp) 				end 			end 			wtot = wtot + (tonumber(args['w' .. r]) or 0) 			dtot = dtot + (tonumber(args['d' .. r]) or 0) 			ltot = ltot + (tonumber(args['l' .. r]) or 0) 			ftot = ftot + (tonumber(args['f' .. r]) or 0) 			atot = atot + (tonumber(args['a' .. r]) or 0) 			table.insert(root, WDL(frame, 				{nil, args['w' .. r],  args['d' .. r],  args['l' .. r], 				['for'] = args['f' .. r], ['against'] = args['a' .. r], ['diff'] = 'yes'}) 			) 		end 		table.insert(root,'|-') 		if totspan > 1 then 			table.insert(root,'! colspan=' .. totspan .. ' | ' .. labels['total']) 		else 			table.insert(root,'! ' .. labels['total']) 		end 		table.insert(root, WDL(frame, 				{wtot+dtot+ltot, wtot, dtot, ltot, ['total'] = 'y', 				['for'] = ftot, ['against'] = atot, ['diff'] = 'yes'}) 			) 		table.insert(root, '|} \n\n') 		if args.u then 			table.insert(root, labels['lastupdated'] .. args.u .. '') 		end 		table.insert(root, labels['source'] .. (args.s or labels['sourcedefault']) .. '\n') 	end  	if #unknown > 0 then 		 		local unknown_params = require('Module:If preview')._warning({ 			labels['unknownparameter'] .. 			'' .. 			table.concat(unknown, ', ') .. 			'.' 		}) .. '' .. unknown[1] .. ' ' 		 		table.insert(root, unknown_params) 	end  	return table.concat(root, '\n') end  return p