Module:Sports results/Chess

-- Module to build results cross-tables for standings in Chess-- See documentation for detailsrequire('strict')local p = {}-- Other functionslocal function get_short_name(s, t, n, ss)-- return short name if definedif s and s ~= '' thenreturn send-- deflag if necessaryif ss and n thenif ss == 'noflag' or ss == 'nocountry' thenn = mw.ustring.gsub(n, '%[%[[Ff][Ii][Ll][Ee]:[^%[%]]*%]%]', '')n = mw.ustring.gsub(n, '<span class="flagicon">[^<>]*</span>', '')if ss == 'nocountry' thenn = mw.ustring.gsub(n, '<abbr[^<>]*>[^<>]*</abbr>', '')n = mw.ustring.gsub(n, '&nbsp;<span[^<>]*>[^<>]*</span>$', '')endelseif ss == 'flag' thenn = mw.ustring.gsub(n, '(<span class="flagicon">%s*%[%[[Ff][Ii][Ll][Ee]:[^%[%]]*link=)[^%|%[%]]*(%]%][^<>]*</span>)%s*%[%[([^%[%]%|]*)%|[^%[%]]*%]%]', '%1%3%2')n = mw.ustring.gsub(n, '.*(<span class="flagicon">%s*%[%[[Ff][Ii][Ll][Ee]:[^%[%]]*%]%][^<>]*</span>).*', '%1')n = mw.ustring.gsub(n, '&nbsp;(</span>)', '%1')endend-- replace link text in name with team abbr if possibleif n and t and n:match('(%[%[[^%[%]]*%]%])') thenn = mw.ustring.gsub(n, '(%[%[[^%|%]]*%|)[^%|%]]*(%]%])', '%1' .. t .. '%2')n = mw.ustring.gsub(n, '(%[%[[^%|%]]*)(%]%])', '%1|' .. t .. '%2')return nend-- nothing worked, so just return the unlinked team abbrreturn t or ''endfunction p.header(tt,Args,p_sub,N_teams,team_list,legs,prefix)local ii, team_code_ii, short_nameprefix = prefix or ''legs = tonumber(Args[prefix .. 'legs']) or 1-- Set match column widthlocal col_width = Args['match_col_width'] or '28'-- Determine if default short style is position for short namelocal yesno = require('Module:Yesno')local pos_short = yesno(Args['use_pos_short'] or 'no')if N_teams>2 then-- Set the column spancol_width = col_width .. ' colspan=' .. legs .. ' style="border-left:2px solid #aaa;"'-- Get some default values in case it doesn't start at 1local top_pos = tonumber(Args['highest_pos']) or 1for ii=top_pos,N_teams doteam_code_ii = team_list[ii]short_name = get_short_name(Args['short_'..team_code_ii],pos_short and ii or team_code_ii, Args['name_'..team_code_ii], Args['short_style'] or '')tt = p_sub.colhead(tt,col_width,short_name)if legs > 1 thentt.count = tt.count + legs - 1endendelsefor ii=1,legs dolocal game_header = Args[prefix..'game'..ii..'_header'] or iitt = p_sub.colhead(tt,col_width,game_header)endendlocal tb_numplayers = tonumber(Args['tb_numplayers']) or 0if prefix == '' and tb_numplayers >= 2 then-- Add empty column headertt.count = tt.count+1table.insert(tt.tab_text,'! scope="row" class="unsortable" style="background-color:white;border-top:white;border-bottom:white;border-right:white;line-width:3pt;"| \n')tt = p.header(tt,Args,p_sub,tb_numplayers,team_list,legs,'tb')endreturn ttendfunction p.row(tt,Args,N_teams,team_list,ii,ii_show,legs,prefix)-- Note ii is the row number being shownlocal jj, fw, bg, result, bg_col, team_code_jjprefix = prefix or ''legs = tonumber(Args[prefix .. 'legs']) or 1local team_code_ii = team_list[ii]-- Determine if backgrounds will be coloredlocal yesno = require('Module:Yesno')local colorbg = yesno(Args['colorbg'] or 'yes')-- Get some default values in case it doesn't start at 1local top_pos = tonumber(Args['highest_pos']) or 1local bgcolrow_str = Args[prefix .. 'bgcolrow_' .. team_code_ii] or ''if bgcolrow_str ~= '' thenfor pp=1,(top_pos-1) dobgcolrow_str = mw.ustring.gsub(bgcolrow_str, '^([^,]*),?', '') or ''-- Trim bgcol data prior to top_posendendfor jj=top_pos,N_teams dolocal bl = 'border-left:2px solid #aaa;'if ii == jj and N_teams>2 then-- Solid cellfw = 'font-weight:' .. (ii==ii_show and 'bold' or 'normal') .. ';'bg = 'background:transparent;'-- Background color for solid celllocal solid_cell = Args['solid_cell'] or ''if solid_cell ~= 'gray' and solid_cell ~= 'grey' and solid_cell ~= 'lightgray' and solid_cell ~= 'lightgrey' and solid_cell ~= 'silver' thensolid_cell = mw.ustring.match(solid_cell,'^#%x%x%x+') or ''endif solid_cell ~= '' thentable.insert(tt,'| colspan ="'..legs..'" style="'..fw..bl..'background:'..solid_cell..';" |\n')elsetable.insert(tt,'| colspan ="'..legs..'" style="'..fw..bl..bg..'" | &mdash;\n')endelseif ii ~= jj then-- Content cellsteam_code_jj = team_list[jj]if bgcolrow_str ~= '' thenArgs[prefix .. 'bgcol_' .. team_code_ii..'_'..team_code_jj] = mw.ustring.match(bgcolrow_str, '^([^,]*),?')endlocal bgcol_str = Args[prefix .. 'bgcol_'..team_code_ii..'_'..team_code_jj] or ''for l=1,legs do-- Get match datalocal m = (legs == 1) and 'match_' or 'match' .. l .. '_'m = prefix .. mresult = Args[m..team_code_ii..'_'..team_code_jj] or '&nbsp;&nbsp;'-- Set bolding and backgroundfw = 'font-weight:' .. ((ii==ii_show or jj == ii_show) and 'bold' or 'normal') .. ';'if l > 1 or N_teams<=2 thenbl = ''endbg = 'background:transparent;'-- Background coloringif colorbg thenlocal bg_col = mw.ustring.match(bgcol_str, '^([^%+]*)%+?') or ''bgcol_str = mw.ustring.gsub(bgcol_str, '^([^%+]*)%+?', '') or ''-- Remove bg_col from bgcol_strbg_col = mw.ustring.gsub(bg_col,'^%s*','')-- Trim starting whitespacebg_col = mw.ustring.gsub(bg_col,'%s*$','')-- Trim ending whitespaceif bg_col == '' thenbg_col = (l % 2 == 0 and 'B') or 'W'elsebg_col = mw.ustring.upper(bg_col)endif bg_col == 'B' thenbg = 'background:black; color:white';endendtable.insert(tt,'| style="white-space:nowrap;'..fw..bl..bg..'" |'..result..'\n')endendbgcolrow_str = mw.ustring.gsub(bgcolrow_str, '^([^,]*),?', '') or ''endlocal tb_numplayers = tonumber(Args['tb_numplayers']) or 0if prefix == '' and tb_numplayers >= 2 then-- Add empty celltable.insert(tt,'| style="background-color:white;border-top:white;border-bottom:white;border-right:white;"| \n')if ii <= tb_numplayers thentt = p.row(tt,Args,tb_numplayers,team_list,ii,ii_show,legs,'tb')elselocal numtbgames = (tb_numplayers == 2) and legs or (tb_numplayers * legs)for gg=1,numtbgames dotable.insert(tt,'| style="background-color:white;border-left:white;border-top:white;border-bottom:white;border-right:white;"| \n')endendendreturn ttendreturn p