<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mywikibiz.com/index.php?action=history&amp;feed=atom&amp;title=Module%3ASports_rbr_table</id>
	<title>Module:Sports rbr table - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mywikibiz.com/index.php?action=history&amp;feed=atom&amp;title=Module%3ASports_rbr_table"/>
	<link rel="alternate" type="text/html" href="https://mywikibiz.com/index.php?title=Module:Sports_rbr_table&amp;action=history"/>
	<updated>2026-06-14T00:08:37Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.3</generator>
	<entry>
		<id>https://mywikibiz.com/index.php?title=Module:Sports_rbr_table&amp;diff=479552&amp;oldid=prev</id>
		<title>Zoran: Pywikibot 6.4.0</title>
		<link rel="alternate" type="text/html" href="https://mywikibiz.com/index.php?title=Module:Sports_rbr_table&amp;diff=479552&amp;oldid=prev"/>
		<updated>2021-07-16T06:08:57Z</updated>

		<summary type="html">&lt;p&gt;Pywikibot 6.4.0&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- This module implements {{Sports rbr table}}&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Internationalisation&lt;br /&gt;
local labels = {&lt;br /&gt;
	teamround = 'Team ╲ Round',&lt;br /&gt;
	source = 'Source:',&lt;br /&gt;
	notes = 'Notes:',&lt;br /&gt;
	matches = 'match(es)',&lt;br /&gt;
	updatedto = 'Updated to &amp;lt;matches&amp;gt; played on &amp;lt;date&amp;gt;.',&lt;br /&gt;
	firstplayed = 'First &amp;lt;matches&amp;gt; will be played on &amp;lt;date&amp;gt;.',&lt;br /&gt;
	futuredate = '?',&lt;br /&gt;
	complete = 'complete',&lt;br /&gt;
	future = 'future'&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local modname = 'Module:Sports rbr table'&lt;br /&gt;
local templatestyles = 'Module:Sports rbr table/styles.css'&lt;br /&gt;
&lt;br /&gt;
local args = nil&lt;br /&gt;
&lt;br /&gt;
local preview, tracking = '', ''&lt;br /&gt;
local hasnotes = false&lt;br /&gt;
&lt;br /&gt;
local colorlist = {}&lt;br /&gt;
local textlist = {}&lt;br /&gt;
&lt;br /&gt;
local color_map = {&lt;br /&gt;
		green1='#BBF3BB', green2='#CCF9CC', green3='#DDFCDD', green4='#EEFFEE',&lt;br /&gt;
		blue1='#BBF3FF', blue2='#CCF9FF', blue3='#DDFCFF', blue4='#EEFFFF',&lt;br /&gt;
		yellow1='#FFFFBB', yellow2='#FFFFCC', yellow3='#FFFFDD', yellow4='#FFFFEE',&lt;br /&gt;
		red1='#FFBBBB', red2='#FFCCCC', red3='#FFDDDD', red4='#FFEEEE',&lt;br /&gt;
		black1='#BBBBBB', black2='#CCCCCC', black3='#DDDDDD', black4='#EEEEEE',&lt;br /&gt;
		['1st']='#FFD700', ['2nd']='#C0C0C0', ['3rd']='#CC9966'&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
local legend_symbols = {O='W/O'}&lt;br /&gt;
&lt;br /&gt;
local legend_order_default = {'A', 'H', 'N', 'B', 'W', 'D', 'L', 'Ab', 'P', 'O'}&lt;br /&gt;
&lt;br /&gt;
local function isnotempty(s)&lt;br /&gt;
	return s and s:match( '^%s*(.-)%s*$' ) ~= ''&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function zeropad(n)&lt;br /&gt;
	if n&amp;gt;=0 and n &amp;lt; 10 then&lt;br /&gt;
		return '00' .. n&lt;br /&gt;
	end&lt;br /&gt;
	if n&amp;gt;=0 and n &amp;lt; 100 then&lt;br /&gt;
		return '0' .. n&lt;br /&gt;
	end&lt;br /&gt;
	return '' .. n&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function pad_key(k)&lt;br /&gt;
	-- Zero pad, fix ranges and dashes&lt;br /&gt;
	if k then&lt;br /&gt;
		k = k .. ' '&lt;br /&gt;
		k = mw.ustring.gsub(k, '–', '-')&lt;br /&gt;
		k = mw.ustring.gsub(k, '_([%d][^%d])', '_0%1')&lt;br /&gt;
		k = mw.ustring.gsub(k, '%-([%d][^%d])', '-0%1')&lt;br /&gt;
		k = mw.ustring.gsub(k, '_([%d][%d][^%d])', '_0%1')&lt;br /&gt;
		k = mw.ustring.gsub(k, '%-([%d][%d][^%d])', '-0%1')&lt;br /&gt;
		k = mw.ustring.gsub(k, '([^%d])%-([%d])', '%1000-%2')&lt;br /&gt;
		k = mw.ustring.gsub(k, '([%d])%-%s*$', '%1-999')&lt;br /&gt;
		k = mw.ustring.gsub(k, '^%s*(.-)%s*$', '%1')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return k&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function matches_date(text, m, d)&lt;br /&gt;
	return mw.ustring.gsub(mw.ustring.gsub(text .. '', '&amp;lt;matches&amp;gt;', m), '&amp;lt;date&amp;gt;', d)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function escapetag(text)&lt;br /&gt;
	return mw.ustring.gsub(text, '&amp;lt;/', '&amp;lt;FORWARDSLASH')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function unescapetag(text)&lt;br /&gt;
	return mw.ustring.gsub(text, '&amp;lt;FORWARDSLASH', '&amp;lt;/')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function get_color(p)&lt;br /&gt;
	if p then&lt;br /&gt;
		p = mw.ustring.gsub(p, '&amp;lt;/?[Aa][Bb][Bb][Rr][^&amp;lt;&amp;gt;]*&amp;gt;', '')&lt;br /&gt;
		p = mw.ustring.gsub(p, '&amp;lt;[Ss][Uu][Pp]&amp;gt;[^&amp;lt;&amp;gt;]*&amp;lt;/[Ss][Uu][Pp]&amp;gt;', '')&lt;br /&gt;
		p = mw.ustring.gsub(p, '&amp;lt;/?[Ss][^&amp;lt;&amp;gt;]*&amp;gt;', '')&lt;br /&gt;
		p = mw.ustring.gsub(p, '†%s*$', '')&lt;br /&gt;
		p = mw.ustring.gsub(p, '=%s*$', '')&lt;br /&gt;
		p = mw.ustring.gsub(p, '%[%[[^%[%]|]*|([^%[%]|]*)%]%]', '%1')&lt;br /&gt;
		if p:match('^%a%a*$') then&lt;br /&gt;
			if args['text_' .. p] == nil then&lt;br /&gt;
				tracking = tracking .. '[[Category:Pages using sports rbr table with an undescribed result|' &lt;br /&gt;
					.. p:match('^(%a).*$') .. ']]'&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local c = colorlist[p] or colorlist[zeropad(tonumber(p) or -1)]&lt;br /&gt;
	if c then&lt;br /&gt;
		return color_map[c] or c&lt;br /&gt;
	end&lt;br /&gt;
	p = tonumber(p or '0') or 0&lt;br /&gt;
	if p &amp;lt;= 0 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	-- ranges in order of specificity&lt;br /&gt;
	local offset1, offset2 = 999, 999&lt;br /&gt;
	for k,v in pairs( colorlist ) do&lt;br /&gt;
		local r1 = tostring(k):match( '^%s*([%d]+)%-[%d]+%s*$' )&lt;br /&gt;
		local r2 = tostring(k):match( '^%s*[%d]+%-([%d]+)%s*$' )&lt;br /&gt;
		if r1 and r2 then&lt;br /&gt;
			r1 = tonumber(r1)&lt;br /&gt;
			r2 = tonumber(r2)&lt;br /&gt;
			if (r1 &amp;lt;= p) and (r2 &amp;gt;= p) then&lt;br /&gt;
				if (c == nil) or ((p - r1) &amp;lt;= offset1 and (r2 - p) &amp;lt;= offset2) then&lt;br /&gt;
					c = color_map[v] or v&lt;br /&gt;
					offset1 = p - r1&lt;br /&gt;
					offset2 = r2 - p&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return c&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function check_arg(k, st)&lt;br /&gt;
	k = tostring(k) or ''&lt;br /&gt;
	if k == 'firstround' or k == 'sortable' or k == 'updated' or k == 'update'&lt;br /&gt;
		or k =='source' or k =='notes' or k == 'legendpos' or k == 'date' &lt;br /&gt;
		or k == 'header' or k == 'title' or k == 'start_date' or k == 'labelnowrap'&lt;br /&gt;
		or k == 'labelalign' or k == 'toptext' or st.addtl_args(k) then&lt;br /&gt;
	elseif k == 'legendorder' then&lt;br /&gt;
		tracking = tracking .. '[[Category:Pages using sports rbr table with legendorder]]'&lt;br /&gt;
	elseif tostring(k):match( '^%s*text_?(.-)%s*$' ) then&lt;br /&gt;
	elseif tostring(k):match( '^%s*colou?r_?(.-)%s*$' ) then&lt;br /&gt;
	elseif tostring(k):match( '^%s*team[%d]+%s*$' ) then&lt;br /&gt;
	elseif tostring(k):match( '^%s*label[%d]+%s*$' ) then&lt;br /&gt;
		if args['header'] then&lt;br /&gt;
		else&lt;br /&gt;
			tracking = tracking .. '[[Category:Pages using sports rbr table with unsupported parameters|ψ]]'&lt;br /&gt;
		end&lt;br /&gt;
	elseif tostring(k):match( '^%s*opp[%d]+%s*$' ) then&lt;br /&gt;
	elseif tostring(k):match( '^%s*pos[%d]+%s*$' ) then&lt;br /&gt;
	elseif tostring(k):match( '^%s*grnd[%d]+%s*$' ) then&lt;br /&gt;
	elseif tostring(k):match( '^%s*res[%d]+%s*$' ) then&lt;br /&gt;
	elseif tostring(k):match( '^%s*posc[%d]+%s*$' ) then&lt;br /&gt;
	elseif tostring(k):match( '^%s*grndc[%d]+%s*$' ) then&lt;br /&gt;
	elseif tostring(k):match( '^%s*resc[%d]+%s*$' ) then&lt;br /&gt;
	elseif tostring(k):match( '^%s*split[%d]+%s*$' ) then&lt;br /&gt;
	elseif k == 'rnd1' then&lt;br /&gt;
		tracking = tracking .. '[[Category:Pages using sports rbr table with rnd parameters]]'&lt;br /&gt;
	elseif tostring(k):match( '^%s*rnd[%d]+%s*$' ) then&lt;br /&gt;
	elseif tostring(k):match( '^%s*opp_' ) then&lt;br /&gt;
	elseif tostring(k):match( '^%s*pos_' ) then&lt;br /&gt;
	elseif tostring(k):match( '^%s*grnd_' ) then&lt;br /&gt;
	elseif tostring(k):match( '^%s*res_' ) then&lt;br /&gt;
	elseif tostring(k):match( '^%s*posc_' ) then&lt;br /&gt;
	elseif tostring(k):match( '^%s*grndc_' ) then&lt;br /&gt;
	elseif tostring(k):match( '^%s*resc_' ) then&lt;br /&gt;
	elseif tostring(k):match( '^%s*name_' ) then&lt;br /&gt;
	elseif tostring(k):match( '^%s*note_' ) then&lt;br /&gt;
	elseif tostring(k):match( '^%s*pos[%d]+_rnd[%d]+_colou?r%s*$' ) then&lt;br /&gt;
		tracking = tracking .. '[[Category:Pages using sports rbr table with per team and round coloring]]'&lt;br /&gt;
	elseif tostring(k):match( '^%s*res[%d]+_rnd[%d]+_colou?r%s*$' ) then&lt;br /&gt;
		tracking = tracking .. '[[Category:Pages using sports rbr table with per team and round coloring]]'&lt;br /&gt;
	elseif tostring(k):match( '^%s*pos[%d]+_rnd[%d]+_note%s*$' ) then&lt;br /&gt;
	elseif tostring(k):match( '^%s*res[%d]+_rnd[%d]+_note%s*$' ) then&lt;br /&gt;
	else&lt;br /&gt;
		local vlen = mw.ustring.len(k)&lt;br /&gt;
		k = mw.ustring.sub(k, 1, (vlen &amp;lt; 25) and vlen or 25) &lt;br /&gt;
		k = mw.ustring.gsub(k, '[^%w\-_ ]', '?')&lt;br /&gt;
		preview = preview .. 'Unknown: &amp;quot;' .. k .. '&amp;quot;&amp;lt;br&amp;gt;'&lt;br /&gt;
		tracking = tracking .. '[[Category:Pages using sports rbr table with unsupported parameters|' .. k .. ']]'&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.table(frame)&lt;br /&gt;
	local getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
	local yesno = require('Module:Yesno')&lt;br /&gt;
	args = getArgs(frame, {wrappers = {'Template:Sports rbr table'}})&lt;br /&gt;
	&lt;br /&gt;
	local style_def = args['style']&lt;br /&gt;
	local p_style = require(modname)&lt;br /&gt;
	if style_def ~= nil then p_style = require(modname .. '/' .. style_def) end&lt;br /&gt;
	&lt;br /&gt;
	args = p_style.defaults(args,yesno,color_map)&lt;br /&gt;
	&lt;br /&gt;
	local rounds = tonumber(args['rounds'] or '0') or 0&lt;br /&gt;
	local firstround = tonumber(args['firstround'] or 1) or 1&lt;br /&gt;
	local sortable = yesno(args['sortable'] or 'no')&lt;br /&gt;
	local updated = args['updated'] or args['update']&lt;br /&gt;
	local source = args['source']&lt;br /&gt;
	local notes = args['notes']&lt;br /&gt;
	local delimiter = args['delimiter'] or '/'&lt;br /&gt;
	local addlegend = nil&lt;br /&gt;
	local legendpos = (args['legendpos'] or 'tr'):lower()&lt;br /&gt;
	local header, footer, prenotes  = '', '', ''&lt;br /&gt;
	&lt;br /&gt;
	-- Lowercase two labels --&lt;br /&gt;
	labels['complete'] = string.lower(labels['complete'])&lt;br /&gt;
	labels['future'] = string.lower(labels['future'])&lt;br /&gt;
&lt;br /&gt;
	-- Adjust rounds&lt;br /&gt;
	rounds = rounds - (firstround - 1)&lt;br /&gt;
	&lt;br /&gt;
	-- Tracking&lt;br /&gt;
	if updated and updated:match(' %d%d%d%d$') then&lt;br /&gt;
		local YY = mw.ustring.gsub(updated, '^.*(%d%d)$', '%1')&lt;br /&gt;
		local pn = frame:getParent():getTitle() or ''&lt;br /&gt;
		if pn:match('^User:') or pn:match('^User talk:') or pn:match('^Draft:') or pn:match('^Talk:') then&lt;br /&gt;
		else&lt;br /&gt;
			if pn:match('%d%d' .. YY) or pn:match('[–%-]' .. YY) then&lt;br /&gt;
			else&lt;br /&gt;
				tracking = tracking .. '[[Category:Pages using sports rbr table with dubious updated parameter]]'&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
	-- Require a source&lt;br /&gt;
	if source == nil then&lt;br /&gt;
		source = frame:expandTemplate{ title = 'citation needed', args = { reason='No source parameter defined', date=args['date'] or os.date('%B %Y') } }&lt;br /&gt;
	elseif source and source:match('[^%[]#') then &lt;br /&gt;
		if source:match('eason#') or source:match('%d%d#') then&lt;br /&gt;
			tracking = tracking .. '[[Category:Pages using sports rbr table with an unusual source]]'&lt;br /&gt;
		elseif source:match('^[Hh][Tt][Tt][Pp]') then&lt;br /&gt;
			tracking = tracking .. '[[Category:Pages using sports rbr table with an unusual source|Φ]]'&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Process team, pos, and color args&lt;br /&gt;
	local team_list = {}&lt;br /&gt;
	local maxrounds = 0&lt;br /&gt;
	local rowlength = {}&lt;br /&gt;
	for k, v in pairs( args ) do&lt;br /&gt;
		check_arg(k, p_style)&lt;br /&gt;
		-- Preprocess ranges&lt;br /&gt;
		if tostring(k):match( '^%s*text_?(.-)%s*$' ) then&lt;br /&gt;
			k = pad_key(k)&lt;br /&gt;
		end&lt;br /&gt;
		if tostring(k):match( '^%s*colou?r_?(.-)%s*$' ) then&lt;br /&gt;
			k = pad_key(k)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Create the list of teams and count rounds&lt;br /&gt;
		local i = tonumber(&lt;br /&gt;
				tostring(k):match( '^%s*team([%d]+)%s*$' ) or&lt;br /&gt;
				tostring(k):match( '^%s*label([%d]+)%s*$' ) or '0'&lt;br /&gt;
				)&lt;br /&gt;
		if ( i &amp;gt; 0 and isnotempty(v) ) then&lt;br /&gt;
			table.insert(team_list, i)&lt;br /&gt;
			local p = p_style.get_argvalues_for_maxround(args,i)&lt;br /&gt;
			if args['name_' .. v] then&lt;br /&gt;
				local t = args['team' .. i] or args['label' .. i] or ''&lt;br /&gt;
				p = p_style.get_argvalues_for_maxround(args,t,'_')&lt;br /&gt;
			end&lt;br /&gt;
			local pos = mw.text.split(escapetag(p), '%s*' .. delimiter .. '%s*')&lt;br /&gt;
			table.insert(rowlength, #pos)&lt;br /&gt;
			maxrounds = (#pos &amp;gt; maxrounds) and #pos or maxrounds&lt;br /&gt;
			-- maxrounds = p_style.get_maxrounds(args,team_list,i,v,rowlength,maxrounds,delimiter)&lt;br /&gt;
		end&lt;br /&gt;
		-- Create the list of colors&lt;br /&gt;
		local s = tostring(k):match( '^%s*colou?r_?(.-)%s*$' )&lt;br /&gt;
		if ( s and isnotempty(v) ) then&lt;br /&gt;
			colorlist[s] = v:lower()&lt;br /&gt;
		end&lt;br /&gt;
		-- Check if we are adding a legend&lt;br /&gt;
		s = tostring(k):match( '^%s*text_?(.-)%s*$' )&lt;br /&gt;
		if ( s and isnotempty(v) ) then&lt;br /&gt;
			textlist[s] = v&lt;br /&gt;
			addlegend = 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	maxrounds = p_style.get_rounds_or_maxrounds(rounds,maxrounds,args,team_list)&lt;br /&gt;
	&lt;br /&gt;
	table.sort(rowlength)&lt;br /&gt;
	for k=2,#rowlength do&lt;br /&gt;
		if rowlength[k] ~= rowlength[k-1] then&lt;br /&gt;
			tracking = tracking .. '[[Category:Pages using sports rbr table with unequal row lengths|k]]'&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- sort the teams&lt;br /&gt;
	table.sort(team_list)&lt;br /&gt;
&lt;br /&gt;
	local fs = 95&lt;br /&gt;
	if ((maxrounds - firstround) &amp;gt; 37 ) then&lt;br /&gt;
		fs = fs - 2*(maxrounds - firstround - 37)&lt;br /&gt;
		fs = (fs &amp;lt; 80) and 80 or fs&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Build the table&lt;br /&gt;
	local root = mw.html.create('table')&lt;br /&gt;
	root:addClass('wikitable')&lt;br /&gt;
	root:addClass(sortable and 'sortable' or nil)&lt;br /&gt;
	root:addClass('sportsrbrtable')&lt;br /&gt;
	root:css('font-size', fs .. '%')&lt;br /&gt;
&lt;br /&gt;
	if args['title'] then&lt;br /&gt;
		root:tag('caption'):wikitext(args['title'])&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local navbar = ''&lt;br /&gt;
	if args['template_name'] then&lt;br /&gt;
		navbar = '&amp;lt;br /&amp;gt;' .. frame:expandTemplate{ title = 'navbar', args = { mini=1, style='', brackets=1, args['template_name']}}&lt;br /&gt;
		-- remove the next part if https://en.wikipedia.org/w/index.php?oldid=832717047#Sortable_link_disables_navbar_links?&lt;br /&gt;
		-- is ever fixed&lt;br /&gt;
		if sortable then&lt;br /&gt;
			navbar = mw.ustring.gsub(navbar, '&amp;lt;%/?abbr[^&amp;lt;&amp;gt;]*&amp;gt;', ' ')&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Heading row&lt;br /&gt;
	local row = p_style.header(root,args,labels,maxrounds,navbar,team_list,firstround)&lt;br /&gt;
&lt;br /&gt;
	-- Team positions&lt;br /&gt;
	local prefixes = {'pos', 'res', 'grnd'}&lt;br /&gt;
	for k=1,#team_list do&lt;br /&gt;
		local i = team_list[k]&lt;br /&gt;
		local t = args['team' .. i] or args['label' .. i] or ''&lt;br /&gt;
		local o = args['opp' .. i] or ''&lt;br /&gt;
		local n = args['note' .. i] or ''&lt;br /&gt;
		local efnname = 'note' .. i&lt;br /&gt;
		local suf = i&lt;br /&gt;
		if args['name_' .. t] then&lt;br /&gt;
			o = args['opp_' .. t] or ''&lt;br /&gt;
			n = args['note_' .. t] or ''&lt;br /&gt;
			efnname = 'note' .. t&lt;br /&gt;
			suf = '_' .. t&lt;br /&gt;
			t = args['name_' .. t]&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if n ~= '' then&lt;br /&gt;
			if args['note_' .. n] then &lt;br /&gt;
				n = frame:expandTemplate{ title = 'efn', args = { name='note' .. n, ''} }&lt;br /&gt;
			else&lt;br /&gt;
				n = frame:expandTemplate{ title = 'efn', args = { name=efnname, n} }&lt;br /&gt;
			end&lt;br /&gt;
			hasnotes = true&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		local resfound = (args['grnd' .. i] and 1 or 0) + (args['pos' .. i] and 1 or 0) + (args['res' .. i] and 1 or 0)&lt;br /&gt;
		if args['name_' .. t] then&lt;br /&gt;
			resfound = (args['grnd_' .. t] and 1 or 0) + (args['pos_' .. t] and 1 or 0) + (args['res_' .. t] and 1 or 0)&lt;br /&gt;
		end&lt;br /&gt;
		if (resfound &amp;gt; 1) then&lt;br /&gt;
			tracking = tracking .. '[[Category:Pages using sports rbr table with conflicting parameters]]'&lt;br /&gt;
		end&lt;br /&gt;
		local rowsdisp = 0&lt;br /&gt;
		for subrow,lbl in ipairs(prefixes) do&lt;br /&gt;
			local p = args[lbl .. suf] or ''&lt;br /&gt;
			local pc = args[lbl .. 'c' .. suf] or ''&lt;br /&gt;
			if p ~= '' or (rowsdisp == 0 and subrow == 3) then&lt;br /&gt;
				rowsdisp = rowsdisp + 1&lt;br /&gt;
				row = root:tag('tr')&lt;br /&gt;
				row:tag('th')&lt;br /&gt;
					:addClass(args['team' .. i] and 'sportsrbrtable-team' or 'sportsrbrtable-lbl')&lt;br /&gt;
					:css('text-align', args['labelalign'])&lt;br /&gt;
					:css('white-space', args['labelnowrap'] and 'nowrap' or nil)&lt;br /&gt;
					:attr('scope', 'row')&lt;br /&gt;
					:wikitext(mw.ustring.gsub(t,'^%s*%-%s*$', '&amp;amp;nbsp;') .. n)&lt;br /&gt;
				if t:match('&amp;lt;%s*[Cc][Ee][Nn][Tt][Ee][Rr]%s*&amp;gt;') then&lt;br /&gt;
					tracking = tracking .. '[[Category:Pages using sports rbr table with unsupported parameters|χ]]'&lt;br /&gt;
				end&lt;br /&gt;
				local opp = mw.text.split(escapetag(o), '%s*' .. delimiter .. '%s*')&lt;br /&gt;
				local pos = mw.text.split(escapetag(p), '%s*' .. delimiter .. '%s*')&lt;br /&gt;
				local clr = mw.text.split(escapetag(pc), '%s*' .. delimiter .. '%s*')&lt;br /&gt;
				for r=1,maxrounds do&lt;br /&gt;
					local s = args['team' .. i .. '_rnd' .. r .. '_' .. 'color'] or&lt;br /&gt;
						args['team' .. i .. '_rnd' .. r .. '_' .. 'colour'] or&lt;br /&gt;
						args[lbl .. i .. '_rnd' .. r .. '_' .. 'color'] or&lt;br /&gt;
						args[lbl .. i .. '_rnd' .. r .. '_' .. 'colour'] or nil&lt;br /&gt;
					local n = args['team' .. i .. '_rnd' .. r .. '_' .. 'note'] or&lt;br /&gt;
						args[lbl .. i .. '_rnd' .. r .. '_' .. 'note'] or nil&lt;br /&gt;
					if s then s = color_map[s] or s end&lt;br /&gt;
					local opprt, posrt = unescapetag(opp[r] or ''), unescapetag(pos[r] or '')&lt;br /&gt;
					local posrc = isnotempty(clr[r]) and clr[r] or posrt&lt;br /&gt;
&lt;br /&gt;
					if posrt:match('^%s*&amp;lt;[Uu]&amp;gt;[%d–]+[A-Za-z][A-Za-z0-9]*') then&lt;br /&gt;
						posrc = posrc:match('^%s*&amp;lt;[Uu]&amp;gt;[%d–]+([A-Za-z][A-Za-z0-9]*)')&lt;br /&gt;
						posrt = mw.ustring.gsub(posrt, '^%s*(&amp;lt;[Uu]&amp;gt;[%d–]+)[A-Za-z][A-Za-z0-9]*', '%1')&lt;br /&gt;
					elseif posrt:match('^%s*[%d–]+[A-Za-z][A-Za-z0-9]*') then&lt;br /&gt;
						posrc = posrc:match('^%s*[%d–]+([A-Za-z][A-Za-z0-9]*)')&lt;br /&gt;
						posrt = mw.ustring.gsub(posrt, '^%s*([%d–]+)[A-Za-z][A-Za-z0-9]*', '%1')&lt;br /&gt;
					end&lt;br /&gt;
			&lt;br /&gt;
					local ds&lt;br /&gt;
					if args['sortable'] and (opprt or posrt):match('^%s*[%d]+[^%d%s]') then&lt;br /&gt;
						ds = mw.ustring.gsub(opprt or posrt, '^%s*([%d]+)[^%d%s].*$', '%1')&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
					if n then&lt;br /&gt;
						if args['note_' .. n] then&lt;br /&gt;
							n = frame:expandTemplate{ title = 'efn', args = { name='note' .. n, args['note_' .. n]} }&lt;br /&gt;
						else&lt;br /&gt;
							n = frame:expandTemplate{ title = 'efn', args = { name='note' .. i .. '_rnd_' .. r, n} }&lt;br /&gt;
						end&lt;br /&gt;
						hasnotes = true&lt;br /&gt;
					end&lt;br /&gt;
		&lt;br /&gt;
					row:tag('td')&lt;br /&gt;
						:attr('data-sort-value', ds)&lt;br /&gt;
						:css('background-color', s or get_color(p_style.rowbg(posrc, opprt)))&lt;br /&gt;
						:wikitext(p_style.rowtext(frame,args,legend_symbols,posrt,opprt) .. (n or ''))&lt;br /&gt;
				end&lt;br /&gt;
				if args['split' .. i] and k ~= #team_list then&lt;br /&gt;
					row = root:tag('tr')&lt;br /&gt;
						:css('background-color', '#BBBBBB')&lt;br /&gt;
						:css('line-height', '3pt')&lt;br /&gt;
					row:tag('td')&lt;br /&gt;
						:attr('colspan', maxrounds + 1)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- build the legend&lt;br /&gt;
	if addlegend then&lt;br /&gt;
		-- Sort the keys for the legend&lt;br /&gt;
		local legendkeys = {}&lt;br /&gt;
		for k,v in pairs( textlist ) do&lt;br /&gt;
			table.insert(legendkeys, k)&lt;br /&gt;
		end&lt;br /&gt;
		table.sort(legendkeys)&lt;br /&gt;
&lt;br /&gt;
		if args['legendorder'] then&lt;br /&gt;
			legendkeys = mw.text.split(args['legendorder'] .. delimiter ..&lt;br /&gt;
				table.concat(legend_order_default, delimiter) .. delimiter ..&lt;br /&gt;
				table.concat(legendkeys, delimiter), '%s*' .. delimiter .. '%s*')&lt;br /&gt;
		else&lt;br /&gt;
			legendkeys = mw.text.split(&lt;br /&gt;
				table.concat(legend_order_default, delimiter) .. delimiter ..&lt;br /&gt;
				table.concat(legendkeys, delimiter), '%s*' .. delimiter .. '%s*')&lt;br /&gt;
		end&lt;br /&gt;
		local lroot&lt;br /&gt;
		if (legendpos == 't' or legendpos == 'b') then&lt;br /&gt;
			lroot = mw.html.create('')&lt;br /&gt;
			local firsttag = true&lt;br /&gt;
			for k,v in pairs( legendkeys ) do&lt;br /&gt;
				if v and textlist[v] then&lt;br /&gt;
					if firsttag == false then lroot:wikitext('; ') end&lt;br /&gt;
					local c = colorlist[v] or ''&lt;br /&gt;
					local l = lroot:tag('span')&lt;br /&gt;
						:css('margin', '0')&lt;br /&gt;
						:css('white-space', 'nowrap')&lt;br /&gt;
						:tag('span')&lt;br /&gt;
							:addClass('legend-text')&lt;br /&gt;
							:css('border', 'none')&lt;br /&gt;
							:css('padding', '1px .3em')&lt;br /&gt;
							:css('background-color', color_map[c] or c)&lt;br /&gt;
							:css('font-size', '95%')&lt;br /&gt;
							:css('border', '1px solid #BBB')&lt;br /&gt;
							:css('line-height', '1.25')&lt;br /&gt;
							:css('text-align', 'center')&lt;br /&gt;
							:wikitext(p_style.legendtext(legend_symbols,v))&lt;br /&gt;
							:done()&lt;br /&gt;
						:wikitext(' = ' .. textlist[v])&lt;br /&gt;
					textlist[v] = nil&lt;br /&gt;
					firsttag = false&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			lroot = mw.html.create('table')&lt;br /&gt;
			if legendpos == 'tl' or legendpos == 'bl' then&lt;br /&gt;
				lroot:addClass('wikitable')&lt;br /&gt;
				lroot:css('font-size', '88%')&lt;br /&gt;
			else&lt;br /&gt;
				lroot:addClass('infobox')&lt;br /&gt;
				lroot:addClass('bordered')&lt;br /&gt;
				-- lroot:css('width', 'auto')&lt;br /&gt;
			end&lt;br /&gt;
			for k,v in pairs( legendkeys ) do&lt;br /&gt;
				if v and textlist[v] then&lt;br /&gt;
					local c = colorlist[v] or ''&lt;br /&gt;
					local row = (legendpos == 'tl' or legendpos == 'bl') and lroot or lroot:tag('tr')&lt;br /&gt;
					local l = row:tag('th'):css('background-color', color_map[c] or c)&lt;br /&gt;
					if legend_symbols[v] then&lt;br /&gt;
						l:css('font-weight', 'normal')&lt;br /&gt;
							:css('padding', '1px 3px')&lt;br /&gt;
							:wikitext(legend_symbols[v])&lt;br /&gt;
					else&lt;br /&gt;
						l:css('width', '10px')&lt;br /&gt;
					end&lt;br /&gt;
					row:tag('td')&lt;br /&gt;
						:css('padding', '1px 3px')&lt;br /&gt;
						:wikitext(textlist[v])&lt;br /&gt;
					textlist[v] = nil&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if (legendpos == 'bl' or legendpos == 'br') then&lt;br /&gt;
			footer = footer .. tostring(lroot)&lt;br /&gt;
		elseif (legendpos == 'b') then&lt;br /&gt;
			prenotes = prenotes .. tostring(lroot)&lt;br /&gt;
		elseif (legendpos == 't') then&lt;br /&gt;
			args['toptext'] = (args['toptext'] or '')&lt;br /&gt;
				.. frame:expandTemplate{ title = 'refbegin' }&lt;br /&gt;
				.. tostring(lroot)&lt;br /&gt;
				.. frame:expandTemplate{ title = 'refend' }&lt;br /&gt;
&lt;br /&gt;
		else&lt;br /&gt;
			header = header .. tostring(lroot)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- simplify updated == complete case&lt;br /&gt;
	local lupdated = updated and string.lower(updated) or ''&lt;br /&gt;
	if lupdated == labels['complete'] or lupdated == 'complete' then&lt;br /&gt;
		lupdated = ''&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- add note list&lt;br /&gt;
	if hasnotes then&lt;br /&gt;
		footer = footer .. frame:expandTemplate{ title = 'notelist' }&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- build the footer	&lt;br /&gt;
	if prenotes ~= '' or notes or source or lupdated ~= '' then&lt;br /&gt;
		footer = footer .. frame:expandTemplate{ title = 'refbegin' }&lt;br /&gt;
		if lupdated ~= '' then&lt;br /&gt;
			local mtext = args['matches_text'] or labels['matches']&lt;br /&gt;
			if lupdated == labels['future'] or lupdated == 'future' then&lt;br /&gt;
				footer = footer .. matches_date(labels['firstplayed'] .. ' ',&lt;br /&gt;
					mtext, args['start_date'] or labels['futuredate'])&lt;br /&gt;
			else&lt;br /&gt;
				footer = footer .. matches_date(labels['updatedto'] .. ' ',&lt;br /&gt;
					mtext, updated)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if source then&lt;br /&gt;
			footer = footer .. labels['source'] .. ' ' .. source&lt;br /&gt;
		end&lt;br /&gt;
		if prenotes ~= '' then&lt;br /&gt;
			if lupdated ~= '' or source then&lt;br /&gt;
				footer = footer .. '&amp;lt;br&amp;gt;'&lt;br /&gt;
			end&lt;br /&gt;
			footer = footer .. prenotes&lt;br /&gt;
		end&lt;br /&gt;
		if notes then&lt;br /&gt;
			if prenotes ~= '' or lupdated ~= '' or source then&lt;br /&gt;
				footer = footer .. '&amp;lt;br&amp;gt;'&lt;br /&gt;
			end&lt;br /&gt;
			footer = footer .. labels['notes'] .. ' ' .. notes&lt;br /&gt;
		end&lt;br /&gt;
		footer = footer .. frame:expandTemplate{ title = 'refend' }&lt;br /&gt;
	end&lt;br /&gt;
	-- add clear right for the legend if necessary&lt;br /&gt;
	footer = footer .. ((addlegend and (legendpos == 'bl' or legendpos == 'br'))&lt;br /&gt;
		and '&amp;lt;div style=&amp;quot;clear:right&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;' or '')&lt;br /&gt;
	if tracking ~= '' then&lt;br /&gt;
		if frame:preprocess( &amp;quot;{{REVISIONID}}&amp;quot; ) == &amp;quot;&amp;quot; then&lt;br /&gt;
			tracking = preview&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return frame:extensionTag{ name = 'templatestyles', args = { src = templatestyles} }&lt;br /&gt;
		.. header .. (args['toptext'] or '') .. '&amp;lt;div style=&amp;quot;overflow:hidden&amp;quot;&amp;gt;'&lt;br /&gt;
		.. '&amp;lt;div class=&amp;quot;noresize overflowbugx&amp;quot; style=&amp;quot;overflow:auto&amp;quot;&amp;gt;'&lt;br /&gt;
		.. tostring(root) .. '&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;' .. footer .. tracking&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.get_argvalues_for_maxround(args, x, del)&lt;br /&gt;
	del = del or ''&lt;br /&gt;
	return args['pos' .. del .. x] or args['res' .. del .. x] or ''&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.get_rounds_or_maxrounds(rounds, maxrounds)&lt;br /&gt;
	return (rounds &amp;gt; maxrounds) and rounds or maxrounds&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.addtl_args(k)&lt;br /&gt;
	-- just return 'true', no additional args&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.defaults(args)&lt;br /&gt;
	-- set nothing&lt;br /&gt;
	return args&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.header(root,args,labels,maxrounds,navbar,team_list,firstround)&lt;br /&gt;
	local row = root:tag('tr')&lt;br /&gt;
	row:tag('th')&lt;br /&gt;
		:attr('rowspan', args['sortable'] and 2 or nil)&lt;br /&gt;
		:wikitext((args['header'] or labels['teamround']) .. navbar)&lt;br /&gt;
	for r=1,maxrounds do&lt;br /&gt;
		row:tag('th')&lt;br /&gt;
			:addClass(args['sortable'] and 'sportsrbrtable-rnd-sort' or 'sportsrbrtable-rnd')&lt;br /&gt;
			:attr('scope', 'col')&lt;br /&gt;
			:wikitext(args['rnd' .. (r + (firstround - 1))]&lt;br /&gt;
				or (r + (firstround - 1)))&lt;br /&gt;
	end&lt;br /&gt;
	if args['sortable'] then&lt;br /&gt;
		row = root:tag('tr')&lt;br /&gt;
		for r=1,maxrounds do&lt;br /&gt;
			row:tag('th')&lt;br /&gt;
				:addClass('sportsrbrtable-rnd-toggle')&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return row&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.rowtext(frame,args,legend_symbols,posrt,postrc,opprt,opprc)&lt;br /&gt;
	return legend_symbols[posrt] or posrt&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.rowbg(posrc)&lt;br /&gt;
	return posrc&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.legendtext(legend_symbols,v)&lt;br /&gt;
	return legend_symbols[v] or (v:match('^[^%d][^%d]?$') and v) or '&amp;amp;nbsp;'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Zoran</name></author>
	</entry>
</feed>