<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3APHL_sports_overall_tally</id>
	<title>Module:PHL sports overall tally - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3APHL_sports_overall_tally"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:PHL_sports_overall_tally&amp;action=history"/>
	<updated>2026-05-27T14:09:40Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:PHL_sports_overall_tally&amp;diff=144205&amp;oldid=prev</id>
		<title>imported&gt;WOSlinker: use require(&#039;strict&#039;) instead of require(&#039;Module:No globals&#039;)</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:PHL_sports_overall_tally&amp;diff=144205&amp;oldid=prev"/>
		<updated>2022-10-21T19:52:44Z</updated>

		<summary type="html">&lt;p&gt;use require(&amp;#039;strict&amp;#039;) instead of require(&amp;#039;Module:No globals&amp;#039;)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require(&amp;#039;strict&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {&lt;br /&gt;
	TIE_REGEX = &amp;#039;^T([%d]+)%s*$&amp;#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local div = {&lt;br /&gt;
	senior = { &amp;#039;M&amp;#039;, &amp;#039;W&amp;#039;, &amp;#039;C&amp;#039;},&lt;br /&gt;
	junior = { &amp;#039;B&amp;#039;, &amp;#039;G&amp;#039;, &amp;#039;C&amp;#039;}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local evt = { &lt;br /&gt;
	{&amp;#039;BSKB&amp;#039;, &amp;#039;Basketball&amp;#039; },&lt;br /&gt;
	{&amp;#039;3X3B&amp;#039;, &amp;#039;3x3 basketball&amp;#039; },&lt;br /&gt;
	{&amp;#039;INVB&amp;#039;, &amp;#039;Volleyball (indoor)&amp;#039; },&lt;br /&gt;
	{&amp;#039;BCVB&amp;#039;, &amp;#039;Volleyball (beach)&amp;#039; },&lt;br /&gt;
	{&amp;#039;SWMM&amp;#039;, &amp;#039;Swimming&amp;#039; },&lt;br /&gt;
	{&amp;#039;CHSS&amp;#039;, &amp;#039;Chess&amp;#039; },&lt;br /&gt;
	{&amp;#039;TNNS&amp;#039;, &amp;#039;Tennis&amp;#039; },&lt;br /&gt;
	{&amp;#039;SFTN&amp;#039;, &amp;#039;Soft tennis&amp;#039; },&lt;br /&gt;
	{&amp;#039;TBTN&amp;#039;, &amp;#039;Table tennis&amp;#039; },&lt;br /&gt;
	{&amp;#039;BDMT&amp;#039;, &amp;#039;Badminton&amp;#039; },&lt;br /&gt;
	{&amp;#039;TKWD&amp;#039;, &amp;#039;Taekwondo&amp;#039; },&lt;br /&gt;
	{&amp;#039;JUDO&amp;#039;, &amp;#039;Judo&amp;#039; },&lt;br /&gt;
	{&amp;#039;BSBL&amp;#039;, &amp;#039;Baseball&amp;#039; },&lt;br /&gt;
	{&amp;#039;SFBL&amp;#039;, &amp;#039;Softball&amp;#039; },&lt;br /&gt;
	{&amp;#039;FTBL&amp;#039;, &amp;#039;Football&amp;#039; },&lt;br /&gt;
	{&amp;#039;ATHL&amp;#039;, &amp;#039;Athletics&amp;#039; },&lt;br /&gt;
	{&amp;#039;FENC&amp;#039;, &amp;#039;Fencing&amp;#039; },&lt;br /&gt;
	{&amp;#039;ESPT&amp;#039;, &amp;#039;Electronic sports&amp;#039; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local colors = {&lt;br /&gt;
			 { &amp;#039;gold&amp;#039;,	  &amp;#039;Champion&amp;#039;},&lt;br /&gt;
			 { &amp;#039;silver&amp;#039;,  &amp;#039;Runner-up&amp;#039; },&lt;br /&gt;
			 { &amp;#039;#CC9966&amp;#039;, &amp;#039;Third place&amp;#039; },&lt;br /&gt;
	[&amp;#039;WD&amp;#039;] = { &amp;#039;#FFBBBB&amp;#039;, &amp;#039;Withdrew&amp;#039; },&lt;br /&gt;
	[&amp;#039;NT&amp;#039;] = { nil, 	  &amp;#039;No team&amp;#039; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function isnotempty(s)&lt;br /&gt;
	return s and s:match(&amp;#039;^%s*(.-)%s*$&amp;#039;) ~= &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function stripwhitespace(text)&lt;br /&gt;
	return text:match(&amp;quot;^%s*(.-)%s*$&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function findchamp(teams, t, r)&lt;br /&gt;
	local found = (teams[t].res[r].rank == 1 or teams[t].res[r].raw == &amp;#039;T1&amp;#039;)&lt;br /&gt;
	if found or (t == 1) then return found else return findchamp(teams, t - 1, r) end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function countties(teams, r)&lt;br /&gt;
	local tie = {}&lt;br /&gt;
	for kt, vt in pairs(teams) do&lt;br /&gt;
		local raw = vt.res[r].raw or &amp;#039;&amp;#039;&lt;br /&gt;
		if (raw):match(p.TIE_REGEX) then&lt;br /&gt;
			tie[raw] = (tie[raw] or 0) + 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return tie&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getevtdisp(teams, division)&lt;br /&gt;
	local r = 1&lt;br /&gt;
	local evt_disp = {}&lt;br /&gt;
	for ke, ve in pairs(evt) do&lt;br /&gt;
		for kd, vd in pairs(div[division]) do&lt;br /&gt;
			local showevt = findchamp(teams, #teams, r)&lt;br /&gt;
			local ties = countties(teams, r)&lt;br /&gt;
			table.insert(evt_disp, { show = showevt, ties = ties })&lt;br /&gt;
			r = r + 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return evt_disp&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getevtindex(value)&lt;br /&gt;
	for k, v in pairs(evt) do&lt;br /&gt;
		if v[1] == value then return tonumber(k) end&lt;br /&gt;
	end&lt;br /&gt;
	return tonumber(99)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getvte(frame, args)&lt;br /&gt;
	local baselink = frame:getParent():getTitle()&lt;br /&gt;
	if mw.title.getCurrentTitle().text == baselink then	baselink = &amp;#039;&amp;#039; end&lt;br /&gt;
	local vtetemplate = args[&amp;#039;tname&amp;#039;] or (baselink ~= &amp;#039;&amp;#039; and (&amp;#039;:&amp;#039; .. baselink)) or &amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	if vtetemplate ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		return frame:expandTemplate{ title = &amp;#039;navbar&amp;#039;, args = { mini=1, style=&amp;#039;float:left&amp;#039;, brackets=1, vtetemplate} }&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getbg(rank, raw)&lt;br /&gt;
	rank = tonumber(tostring(raw):match(p.TIE_REGEX) or rank) or 0&lt;br /&gt;
	if rank &amp;gt; 0 and rank &amp;lt;= 3 then return colors[rank][1]&lt;br /&gt;
	elseif raw == &amp;#039;WD&amp;#039; then return colors.WD[1]&lt;br /&gt;
	else return nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function comptiepts(ptsbyrank, trank, teamsize, ctie)&lt;br /&gt;
	local count = ctie[&amp;#039;T&amp;#039;..trank]&lt;br /&gt;
	if count == 0 then return ptsbyrank[trank] end&lt;br /&gt;
	local limit, total = trank + count - 1, 0&lt;br /&gt;
	if limit &amp;gt; teamsize then error(&amp;#039;Invalid number of teams tied on #&amp;#039;..trank) end&lt;br /&gt;
	for i=trank, limit do&lt;br /&gt;
		total = ptsbyrank[i] + total&lt;br /&gt;
	end&lt;br /&gt;
	return total / count&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getpts(rank, raw, ptsbyrank, tsize, ctie)&lt;br /&gt;
	local  trank = tonumber(tostring(raw):match(p.TIE_REGEX)) or 0&lt;br /&gt;
	if	   trank &amp;gt; 0 then return comptiepts(ptsbyrank,trank,tsize,ctie) or ptsbyrank.NT&lt;br /&gt;
	elseif string.match(raw,&amp;#039;([?|WD])&amp;#039;) then return raw&lt;br /&gt;
	else   return ptsbyrank[rank] or ptsbyrank.NT&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function prefillvalues(args,teams,division,ptsbyrank,ovptsonly)&lt;br /&gt;
	local tally = {}&lt;br /&gt;
	for kt, vt in pairs(teams) do&lt;br /&gt;
		local res, subtotal, overall, gold, silver, bronze = {}, {}, 0, 0, 0, 0&lt;br /&gt;
		&lt;br /&gt;
		local evt_disp = getevtdisp(teams,division,ptsbyrank)&lt;br /&gt;
		for kr, vr in pairs(vt.res) do&lt;br /&gt;
			local evtprop = evt_disp[kr]&lt;br /&gt;
			if evtprop.show then&lt;br /&gt;
				local rank = tonumber(tostring(vr.raw):match(p.TIE_REGEX)) or vr.rank&lt;br /&gt;
					vr.pts = tonumber(getpts(rank,vr.raw,ptsbyrank,#teams,evtprop.ties)) or 0&lt;br /&gt;
				subtotal[vr.div] = (tonumber(subtotal[vr.div]) or 0) + vr.pts&lt;br /&gt;
				if	   rank == 1 then gold = gold + 1&lt;br /&gt;
				elseif rank == 2 then silver = silver + 1&lt;br /&gt;
				elseif rank == 3 then bronze = bronze + 1 end&lt;br /&gt;
				table.insert(res, vr)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		for kd, vd in pairs(div[division]) do overall = overall + tonumber(subtotal[vd] or 0) end&lt;br /&gt;
&lt;br /&gt;
		if ovptsonly then&lt;br /&gt;
			overall = tonumber(args[&amp;#039;pts_&amp;#039;..vt.code]) or overall&lt;br /&gt;
		end&lt;br /&gt;
		table.insert(tally, { rank = vt.rank, code = vt.code, team = vt.name, res = res, subtotal = subtotal, overall = overall, medals = { gold, silver, bronze } })&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(tally, function (a, b) return a.overall &amp;gt; b.overall or (a.overall == b.overall and a.rank &amp;lt; b.rank) end)&lt;br /&gt;
	return tally&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function medaltable(frame,args,tally,division,isfinal)&lt;br /&gt;
	local mMedals = require(&amp;#039;Module:Medals table&amp;#039;)&lt;br /&gt;
	local legendL = &amp;#039;Leads the &amp;#039;..(args[&amp;#039;overall&amp;#039;] or &amp;#039;general&amp;#039;)..&amp;#039; championship tally&amp;#039;&lt;br /&gt;
	args[&amp;#039;team&amp;#039;] = &amp;#039;Team&amp;#039;&lt;br /&gt;
	args[&amp;#039;event&amp;#039;] = &amp;#039;inst&amp;#039;&lt;br /&gt;
	args[&amp;#039;legend_position&amp;#039;] = &amp;#039;b&amp;#039;&lt;br /&gt;
	args[&amp;#039;flag_template&amp;#039;] = args[&amp;#039;team_template&amp;#039;] or &amp;#039;UAAPteam&amp;#039;&lt;br /&gt;
	args[&amp;#039;host_note&amp;#039;] = string.format(&amp;#039;;&amp;amp;nbsp;%s&amp;amp;nbsp;%s&amp;#039;, frame:expandTemplate{title = &amp;#039;color box&amp;#039;, args = {&amp;#039;#E9D66B&amp;#039;}}, legendL)&lt;br /&gt;
	args[&amp;#039;notes&amp;#039;] = isfinal and &amp;#039;Results are final.&amp;#039; or &amp;#039;Season in progress. Results are not yet final.&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	for kt, vt in pairs(tally) do&lt;br /&gt;
		local name = args[&amp;#039;name_&amp;#039;..vt.code]&lt;br /&gt;
		if kt == 1 and vt.overall ~= 0 then&lt;br /&gt;
			args[&amp;#039;leading_&amp;#039;..vt.code] = &amp;#039;yes&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		if division == &amp;#039;junior&amp;#039; and isnotempty(args[&amp;#039;j_short_&amp;#039;..vt.code]) then&lt;br /&gt;
			args[&amp;#039;name_&amp;#039;..vt.code] = frame:expandTemplate{title = args[&amp;#039;flag_template&amp;#039;], args = { vt.code, division, inst = args[&amp;#039;j_short_&amp;#039;..vt.code] } }&lt;br /&gt;
		elseif division == &amp;#039;senior&amp;#039; and isnotempty(args[&amp;#039;short_&amp;#039;..vt.code]) then&lt;br /&gt;
			args[&amp;#039;name_&amp;#039;..vt.code] = frame:expandTemplate{title = args[&amp;#039;flag_template&amp;#039;], args = { vt.code, division, inst = args[&amp;#039;short_&amp;#039;..vt.code] } }&lt;br /&gt;
		elseif not isnotempty(name) or name == nil then&lt;br /&gt;
			args[&amp;#039;name_&amp;#039;..vt.code] = vt.name&lt;br /&gt;
		end&lt;br /&gt;
		if stripwhitespace(args[&amp;#039;status_&amp;#039;..vt.code] or &amp;#039;&amp;#039;) == &amp;#039;H&amp;#039; then&lt;br /&gt;
			args[&amp;#039;host_&amp;#039;..vt.code] = &amp;#039;yes&amp;#039;&lt;br /&gt;
			args[&amp;#039;host&amp;#039;] = &amp;#039;Season host&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		args[&amp;#039;gold_&amp;#039;..vt.code] = vt.medals[1]&lt;br /&gt;
		args[&amp;#039;silver_&amp;#039;..vt.code] = vt.medals[2]&lt;br /&gt;
		args[&amp;#039;bronze_&amp;#039;..vt.code] = vt.medals[3]&lt;br /&gt;
	end&lt;br /&gt;
	return mMedals.createTable(frame, args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function buildtable(frame,args,teams,division,ptsbyrank,showmedals,ovptsonly,sumsonly,isfinal)&lt;br /&gt;
	local tally = prefillvalues(args,teams,division,ptsbyrank,ovptsonly)&lt;br /&gt;
	&lt;br /&gt;
	if showmedals then&lt;br /&gt;
		return medaltable(frame,args,tally,division,isfinal)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local root = mw.html.create()&lt;br /&gt;
	local footer = mw.html.create()&lt;br /&gt;
	local abbr = mw.html.create(&amp;#039;abbr&amp;#039;)&lt;br /&gt;
	root = root:tag(&amp;#039;table&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;wikitable&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;plainrowheaders&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;font-size&amp;#039;, (ovptsonly or sumsonly) and &amp;#039;100%&amp;#039; or &amp;#039;95%&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;text-align&amp;#039;, &amp;#039;center&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	-- header row (1)&lt;br /&gt;
	local evts = tally[1].res&lt;br /&gt;
	local divs = div[division]&lt;br /&gt;
	local row = root:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
	local celltype = not ovptsonly and &amp;#039;th&amp;#039; or &amp;#039;td&amp;#039;&lt;br /&gt;
	local showwg, showc, showhost, hidedivs = false, false, false, true&lt;br /&gt;
	&lt;br /&gt;
	if not ovptsonly then&lt;br /&gt;
		row:tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
			:attr(&amp;#039;scope&amp;#039;, &amp;#039;col&amp;#039;)&lt;br /&gt;
			:attr(&amp;#039;colspan&amp;#039;, &amp;#039;2&amp;#039;)&lt;br /&gt;
			:wikitext(getvte(frame,args))&lt;br /&gt;
		&lt;br /&gt;
		abbr:attr(&amp;#039;title&amp;#039;, &amp;#039;Mixed or co-ed&amp;#039;):wikitext(divs[3])&lt;br /&gt;
		&lt;br /&gt;
		-- column spanning by event&lt;br /&gt;
		local prevspan, prevcell, prevevt = 0, nil, nil&lt;br /&gt;
		for ke, ve in pairs(evts) do&lt;br /&gt;
			local evtname = evt[getevtindex(ve.evt)][2]&lt;br /&gt;
			if	   ve.div == divs[2] then showwg = true&lt;br /&gt;
			elseif ve.div == divs[3] then showc  = true end&lt;br /&gt;
			if not sumsonly then&lt;br /&gt;
				if (prevevt == ve.evt) then&lt;br /&gt;
					prevspan = prevspan + 1&lt;br /&gt;
					prevcell&lt;br /&gt;
						:attr(&amp;#039;colspan&amp;#039;, prevspan)&lt;br /&gt;
				else&lt;br /&gt;
					prevspan = 1&lt;br /&gt;
					prevcell = row:tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
						:attr(&amp;#039;scope&amp;#039;, &amp;#039;col&amp;#039;)&lt;br /&gt;
						:wikitext(string.format(&amp;#039;[[File:%s pictogram.svg|20px|link=|%s]]&amp;#039;, evtname, evtname))&lt;br /&gt;
					prevevt = ve.evt&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		hidedivs = not showwg and not showc&lt;br /&gt;
		row:tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
			:attr(&amp;#039;scope&amp;#039;, &amp;#039;col&amp;#039;)&lt;br /&gt;
			:attr(&amp;#039;colspan&amp;#039;, hidedivs and 1 or (((not showwg and showc) or (showwg and not showc)) and 3 or 4))&lt;br /&gt;
			:css(&amp;#039;border-left-width&amp;#039;, &amp;#039;3px&amp;#039;)&lt;br /&gt;
			:wikitext(&amp;#039;Total&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- header row (2)&lt;br /&gt;
	row = root:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
	row:tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
			:attr(&amp;#039;scope&amp;#039;, &amp;#039;col&amp;#039;)&lt;br /&gt;
			:attr(&amp;#039;width&amp;#039;, &amp;#039;50px&amp;#039;)&lt;br /&gt;
			:wikitext(&amp;#039;Rank&amp;#039;)&lt;br /&gt;
		:tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
			:attr(&amp;#039;scope&amp;#039;, &amp;#039;col&amp;#039;)&lt;br /&gt;
			:attr(&amp;#039;width&amp;#039;, &amp;#039;90px&amp;#039;)&lt;br /&gt;
			:wikitext(&amp;#039;Team&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	if not (ovptsonly or sumsonly) then&lt;br /&gt;
		for ke, ve in pairs(evts) do&lt;br /&gt;
			row:tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
				:attr(&amp;#039;scope&amp;#039;, &amp;#039;col&amp;#039;)&lt;br /&gt;
				:attr(&amp;#039;width&amp;#039;, &amp;#039;22px&amp;#039;)&lt;br /&gt;
				:wikitext(ve.div == divs[3] and tostring(abbr) or ve.div)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if not ovptsonly then&lt;br /&gt;
		for kd, vd in pairs(divs) do&lt;br /&gt;
			if  (hidedivs or&lt;br /&gt;
				(not showwg and vd == divs[2]) or&lt;br /&gt;
				(not showc and vd == divs[3])) then break&lt;br /&gt;
			else&lt;br /&gt;
				row:tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
					:attr(&amp;#039;scope&amp;#039;, &amp;#039;col&amp;#039;)&lt;br /&gt;
					:attr(&amp;#039;width&amp;#039;, &amp;#039;22px&amp;#039;)&lt;br /&gt;
					:css(&amp;#039;border-left-width&amp;#039;, (kd == 1) and &amp;#039;3px&amp;#039; or nil)&lt;br /&gt;
					:wikitext(vd == divs[3] and tostring(abbr) or vd)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	row:tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
		:attr(&amp;#039;scope&amp;#039;, &amp;#039;col&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;border-left-width&amp;#039;, hidedivs and &amp;#039;3px&amp;#039; or nil)&lt;br /&gt;
		:wikitext(ovptsonly and &amp;#039;Points&amp;#039; or &amp;#039;Overall&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	-- row spanning by points&lt;br /&gt;
	local prevpts, prevspan, prevrankcell, prevtotalcell = -1, 0, nil, nil&lt;br /&gt;
	&lt;br /&gt;
	-- team row&lt;br /&gt;
	for ka, va in pairs(tally) do&lt;br /&gt;
		local teamtext = va.team&lt;br /&gt;
&lt;br /&gt;
		if stripwhitespace(args[&amp;#039;status_&amp;#039;..va.code] or &amp;#039;&amp;#039;) == &amp;#039;H&amp;#039; then&lt;br /&gt;
			showhost = true&lt;br /&gt;
			teamtext = va.team..&amp;#039;&amp;amp;nbsp;&amp;lt;b&amp;gt;(H)&amp;lt;/b&amp;gt;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		row = root:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
		&lt;br /&gt;
		if (prevpts == va.overall) then&lt;br /&gt;
			prevspan = prevspan + 1&lt;br /&gt;
			prevrankcell&lt;br /&gt;
				:attr(&amp;#039;rowspan&amp;#039;, prevspan)&lt;br /&gt;
		else&lt;br /&gt;
			prevspan = 1&lt;br /&gt;
			prevrankcell = row:tag(celltype)&lt;br /&gt;
					:attr(&amp;#039;scope&amp;#039;, &amp;#039;row&amp;#039;)&lt;br /&gt;
					:css(&amp;#039;text-align&amp;#039;, &amp;#039;center&amp;#039;)&lt;br /&gt;
					:wikitext(ka)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		row:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
			:attr(&amp;#039;scope&amp;#039;, &amp;#039;row&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;white-space&amp;#039;, &amp;#039;nowrap&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;text-align&amp;#039;, &amp;#039;left&amp;#039;)&lt;br /&gt;
			:wikitext(teamtext)&lt;br /&gt;
					&lt;br /&gt;
		if not ovptsonly then&lt;br /&gt;
			if not sumsonly then&lt;br /&gt;
				for kr, vr in pairs(va.res) do&lt;br /&gt;
					row:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
						:css(&amp;#039;background-color&amp;#039;, getbg(vr.rank,vr.raw))&lt;br /&gt;
						:wikitext(vr.pts ~= 0 and vr.pts or ptsbyrank.NT)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			for kd, vd in pairs(divs) do&lt;br /&gt;
				if (hidedivs or&lt;br /&gt;
					(not showwg and vd == divs[2]) or&lt;br /&gt;
					(not showc and vd == divs[3])) then break&lt;br /&gt;
				else row:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
					:css(&amp;#039;border-left-width&amp;#039;, (kd == 1) and &amp;#039;3px&amp;#039; or nil)&lt;br /&gt;
					:wikitext(va.subtotal[vd] or 0)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if (prevpts == va.overall) then&lt;br /&gt;
			prevtotalcell&lt;br /&gt;
				:attr(&amp;#039;rowspan&amp;#039;, prevspan)&lt;br /&gt;
		else&lt;br /&gt;
			prevspan = 1&lt;br /&gt;
			prevtotalcell = row:tag(celltype)&lt;br /&gt;
				:attr(&amp;#039;scope&amp;#039;, &amp;#039;row&amp;#039;)&lt;br /&gt;
				:css(&amp;#039;font-weight&amp;#039;, &amp;#039;bold&amp;#039;)&lt;br /&gt;
				:css(&amp;#039;text-align&amp;#039;, &amp;#039;center&amp;#039;)&lt;br /&gt;
				:css(&amp;#039;border-left-width&amp;#039;, hidedivs and &amp;#039;3px&amp;#039; or nil)&lt;br /&gt;
				:wikitext(va.overall)&lt;br /&gt;
			prevpts = va.overall&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local source, legend = args[&amp;#039;source&amp;#039;], footer:tag(&amp;#039;div&amp;#039;):cssText(&amp;#039;font-size: 90%; margin-bottom: 0.5em;&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	if source then&lt;br /&gt;
		legend:tag(&amp;#039;&amp;#039;):wikitext(&amp;#039;Source: &amp;#039;.. source ..&amp;#039;&amp;lt;br&amp;gt;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if showhost then&lt;br /&gt;
		legend:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;font-weight&amp;#039;, &amp;#039;bold&amp;#039;)&lt;br /&gt;
			:wikitext(&amp;#039;(H)&amp;#039;)&lt;br /&gt;
			:done()&lt;br /&gt;
		:wikitext(&amp;#039;&amp;amp;nbsp;Season host&amp;#039;)&lt;br /&gt;
		if ovptsonly or sumsonly then legend:wikitext(&amp;#039;.&amp;#039;) end&lt;br /&gt;
	end&lt;br /&gt;
	if not (ovptsonly or sumsonly) then&lt;br /&gt;
		local firsttag = not showhost&lt;br /&gt;
		for kp, vp in pairs(ptsbyrank) do&lt;br /&gt;
			if not string.match(kp,p.TIE_REGEX) and (tonumber(kp) or 0) &amp;lt; 4 then&lt;br /&gt;
				if firsttag == false then legend:wikitext(&amp;#039;; &amp;#039;) end&lt;br /&gt;
				legend:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
					:css(&amp;#039;margin&amp;#039;, &amp;#039;0&amp;#039;)&lt;br /&gt;
					:css(&amp;#039;white-space&amp;#039;, &amp;#039;nowrap&amp;#039;)&lt;br /&gt;
					:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
						:addClass(&amp;#039;legend-text&amp;#039;)&lt;br /&gt;
						:css(&amp;#039;border&amp;#039;, &amp;#039;none&amp;#039;)&lt;br /&gt;
						:css(&amp;#039;padding&amp;#039;, &amp;#039;1px .3em&amp;#039;)&lt;br /&gt;
						:css(&amp;#039;background-color&amp;#039;, getbg(kp))&lt;br /&gt;
						:css(&amp;#039;font-size&amp;#039;, &amp;#039;95%&amp;#039;)&lt;br /&gt;
						:css(&amp;#039;border&amp;#039;, &amp;#039;1px solid #BBB&amp;#039;)&lt;br /&gt;
						:css(&amp;#039;line-height&amp;#039;, &amp;#039;1.25&amp;#039;)&lt;br /&gt;
						:css(&amp;#039;text-align&amp;#039;, &amp;#039;center&amp;#039;)&lt;br /&gt;
						:wikitext(type(vp) == &amp;#039;number&amp;#039; and &amp;#039;&amp;amp;nbsp;&amp;#039; or vp)&lt;br /&gt;
						:done()&lt;br /&gt;
					:wikitext(&amp;#039; = &amp;#039; .. (colors[kp] or colors.NT)[2])&lt;br /&gt;
				firsttag = false&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		legend:wikitext(&amp;#039;.&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	legend:wikitext(&amp;#039;&amp;lt;br&amp;gt;Notes: &amp;#039; .. (isfinal and &amp;#039;Results are final.&amp;#039; or &amp;#039;Season in progress. Results are not yet final.&amp;#039;))&lt;br /&gt;
&lt;br /&gt;
	return tostring(root)..tostring(footer)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
	local args = getArgs(frame, { parentFirst = true })&lt;br /&gt;
	&lt;br /&gt;
	local yesno = require(&amp;#039;Module:Yesno&amp;#039;)&lt;br /&gt;
	local showmedals = yesno(args[&amp;#039;show_medals&amp;#039;] or &amp;#039;n&amp;#039;)&lt;br /&gt;
	local ovptsonly = yesno(args[&amp;#039;overall_pts_only&amp;#039;] or &amp;#039;n&amp;#039;)&lt;br /&gt;
	local sumsonly = yesno(args[&amp;#039;subtotals_only&amp;#039;] or &amp;#039;n&amp;#039;)&lt;br /&gt;
	local isfinal = yesno(args[&amp;#039;final&amp;#039;] or &amp;#039;y&amp;#039;)&lt;br /&gt;
	local division = (args[&amp;#039;division&amp;#039;] or &amp;#039;senior&amp;#039;):lower()&lt;br /&gt;
	local template = args[&amp;#039;team_template&amp;#039;] or &amp;#039;UAAPteam&amp;#039;&lt;br /&gt;
	local team_list, defaultpts = {}, { 15, 12, 10, 8, 6, 4, 2, 1, NT = &amp;#039;&amp;amp;mdash;&amp;#039; }&lt;br /&gt;
	local ptsbyrank = { NT = defaultpts.NT }&lt;br /&gt;
	&lt;br /&gt;
	for ka, va in pairs(args) do&lt;br /&gt;
		-- Process team args&lt;br /&gt;
		local i = tostring(ka):match(&amp;#039;^team([%d]+)%s*$&amp;#039;) or &amp;#039;0&amp;#039;&lt;br /&gt;
		if (tonumber(i) &amp;gt; 0 and isnotempty(va)) then&lt;br /&gt;
			local res, t = {}, args[&amp;#039;team&amp;#039; .. i]&lt;br /&gt;
			local sname = args[&amp;#039;short_&amp;#039; .. t]&lt;br /&gt;
			if division == &amp;#039;junior&amp;#039; and isnotempty(args[&amp;#039;j_short_&amp;#039; .. t]) then sname = args[&amp;#039;j_short_&amp;#039; .. t] end&lt;br /&gt;
			local tname = args[&amp;#039;name_&amp;#039; .. t] or&lt;br /&gt;
				(isnotempty(sname) and&lt;br /&gt;
					frame:expandTemplate{title = template, args = { t, division, name = sname } } or &lt;br /&gt;
					frame:expandTemplate{title = template, args = { t, division, &amp;#039;short&amp;#039; } }&lt;br /&gt;
				)&lt;br /&gt;
			for ke, ve in pairs(evt) do&lt;br /&gt;
				for kd, vd in pairs(div[division]) do&lt;br /&gt;
					local cvd = vd&lt;br /&gt;
					if (kd == 3) then cvd = division:sub(1,1) end&lt;br /&gt;
					local evt_rank = stripwhitespace(args[cvd:lower()..&amp;#039;_&amp;#039;..ve[1]..&amp;#039;_&amp;#039;..t] or &amp;#039;&amp;#039;)&lt;br /&gt;
					table.insert(res, { div = vd, evt = ve[1], raw = stripwhitespace(evt_rank), rank = tonumber(evt_rank) or 0 })&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(team_list, {rank = i, code = t, name = tname, res = res})&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if #team_list == 0 then error (&amp;#039;At least one team required&amp;#039;) end&lt;br /&gt;
	for r=1,#team_list do&lt;br /&gt;
		ptsbyrank[r] = tonumber(stripwhitespace(args[&amp;#039;pts_&amp;#039;..require(&amp;#039;Module:Ordinal&amp;#039;)._ordinal(r)] or &amp;#039;&amp;#039;)) or defaultpts[r] or 0&lt;br /&gt;
	end&lt;br /&gt;
	return buildtable(frame,args,team_list,division,ptsbyrank,showmedals,ovptsonly,sumsonly,isfinal)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;WOSlinker</name></author>
	</entry>
</feed>