Benutzer:GregorBungensheim/Spielwiese/Modul:Test
Zur Navigation springen
Zur Suche springen
-- bitte keine unabgesprochenen Änderungen auf der Spielwiese -- Syntax-Highlighting verträgt sich aktuell nicht mit der Vorlagenspielwiese! local function sb_nr(year) local nr = tonumber(year - 1965) local sb = '' local roman = require('Modul:FormatNum').roman if nr == 50 then sb = '50' elseif nr > 0 and nr < 100 then local fr = {} fr.args = {nr, ''} sb = roman(fr) end return sb end local function is_wdl(score) local hst = mw.ustring.match(score,"^%s*(%d+)") local ast = mw.ustring.match(score,"(%d+)%**%s*$") local res if hst == nil or ast == nil then res = 'n' else local hsc, asc = tonumber(hst), tonumber(ast) if hsc > asc then res = 'w' elseif hsc < asc then res = 'l' else res = 'd' end end return res end local function get_score(args, hkey, akey) local score = nil if hkey ~= nil and akey ~= nil and hkey ~= '' and akey ~= '' then score = args[hkey..'-'..akey] end if score ~= nil and mw.ustring.match(score, "^%s*%**:?%s*%**$") then score = nil end return score end local function box(seed, name, score, top, bold) local ret = {} local sty0 = '|rowspan="2" style="background:#' local sty1 = '; border-style:solid; border-color:#AAAAAA; ' table.insert(ret, sty0 .. 'F0F0F0; border-width:' .. top .. ' 0 1px 1px' .. sty1 .. 'text-align:center;"| ' .. seed .. '\n') table.insert(ret, sty0 .. 'FAFAFA; border-width:' .. top .. ' 1px 1px 1px' .. sty1 .. 'padding-left:0.4em;'..bold..'"| ' .. name .. '\n') table.insert(ret, sty0 .. 'FAFAFA; border-width:' .. top .. ' 1px 1px 0' .. sty1 .. 'text-align:center;'..bold..'"| ' .. score .. '\n') return table.concat(ret) end local function build_box(key, okey, ttable, score, pattern, top, bold) local seed, name = '', '' if key ~= nil then seed = ttable[key .. 's'] if seed == nil then seed = '' end name = ttable[key .. 'n'] if name == nil then name = '' end end score = mw.ustring.match(score, pattern) return box(seed, name, score, top, bold) end local function insert_box(content, r, c, hk, ak, ttable, args) local score = get_score(args, hk, ak) if score == nil then score = '' end local bold = '' if is_wdl(score)=='w' then bold='font-weight:bold;' end content[c][r] = build_box(hk, ak, ttable, score, '^%s*(%d*%**)', '1px', bold) if is_wdl(score)=='l' then bold='font-weight:bold;' else bold='' end content[c][r+2] = build_box(ak, hk, ttable, score, '(%d*%**)%s*$', '0', bold) if ak == nil then ak = '' end if hk ~= nil and args[hk..'-'..ak..'_det'] ~= nil then content[c][r-3] = '|rowspan="3" colspan="3" style="font-size:92.5%; vertical-align:bottom"| '..args[hk..'-'..ak..'_det'] end end local p = {} function p.bracket(frame) local keys = {} local ttable = {} local year = frame.args['jahr'] if year == nil then year = 0 end for j, c in ipairs({'a', 'n'}) do local team = {} for i = 1, 6 do if frame.args['team_'..c..i] ~= nil then team[i] = frame.args['team_'..c..i] ttable[team[i]..'n'] = frame.args[team[i]] if ttable[team[i]..'n'] == nil then ttable[team[i]..'n'] = team[i] end else team[i] = 'T'..i end ttable[team[i]..'s'] = i end local score = get_score(frame.args, team[4], team[5]) if score ~= nil then if is_wdl(score) == 'l' then team[8] = team[5] elseif is_wdl(score) == 'w' then team[8] = team[4] end end score = get_score(frame.args, team[3], team[6]) if score ~= nil then if is_wdl(score) == 'l' then team[3], team[4], team[5], team[6], team[7], team[8] = team[4], team[3], team[6], team[5], team[8], team[6] elseif is_wdl(score) == 'w' then team[7] = team[3] end else team[8] = nil end score = get_score(frame.args, team[2], team[7]) if score ~= nil then if is_wdl(score) == 'l' then team[10] = team[7] elseif is_wdl(score) == 'w' then team[10] = team[2] end end score = get_score(frame.args, team[1], team[8]) if score ~= nil then if is_wdl(score) == 'l' then team[1], team[2], team[3], team[4], team[5], team[6], team[7], team[8], team[9], team[10] = team[2], team[1], team[4], team[3], team[6], team[5], team[8], team[7], team[10], team[8] elseif is_wdl(score) == 'w' then team[9] = team[1] end end score = get_score(frame.args, team[9], team[10]) if score ~= nil then if is_wdl(score) == 'l' then team[11] = team[10] elseif is_wdl(score) == 'w' then team[11] = team[9] end end keys[j] = team end return p.tree(ttable, keys, ttable, frame.args, year) end function p.tree(ttable, keys, ttable, args, year) local tree = p.init({'Wild Card Round', 'Divisional Round', 'Conference Championships', 'Super Bowl'}) tree = p.body(tree, keys, ttable, args, year) table.insert(tree, '|}') return table.concat(tree) end function p.init(rounds) local r_names = {} if type(rounds) == "number" then for i = 1, rounds do r_names[i] = 'Runde ' .. i end else r_names = rounds end -- Initialize local tab_text = {} table.insert(tab_text, '{| border="0" cellpadding="0" cellspacing="0" style="font-size:90%; margin:1em 2em 1em 1em;"\n') local style = '| ||colspan="3" style="background:#F0F0F0; border:1px solid #AAAAAA; text-align:center;"' local s = '|-\n' for i, round in ipairs(r_names) do table.insert(tab_text, s .. style .. '| ' .. round) s = ' ||\n' end table.insert(tab_text, '\n|-\n|style="height:0.5ex;"|') s = '\n' for i in pairs(r_names) do table.insert(tab_text, s .. '|style="width:1.7em;"| ||style="width:13em;"| ||style="width:2.5em;"|\n') s = '|style="width:0.8em;"| ||style="width:0.8em;"|\n' end return tab_text end function p.body(tree, keys, ttable, args, year) local tree_build = tree local val = {} val[1] = {'AFC', 'AA0000', 'dotted', '0 2px', ''} val[2] = {'NFC', '0000AA', 'solid', '1px 0', 'border-top:1px solid;'} local c = {1, 2} if math.fmod(year, 2) == 0 then c = {2, 1} end local content = {} for i = 1, 10 do content[i] = {} end for i = 1, 2 do local d = 1 if keys[i][7] ~= nil or keys[i][8] ~= nil then d = 2 end local j = c[i] * 20 - 18 content[1][j-1] = '|colspan="3"|' content[1][j] = '|colspan="3" rowspan="3"|' insert_box(content, 3+j, 1, keys[i][4], keys[i][5], ttable, args) content[1][7+j] = '|colspan="3"|' content[1][8+j] = '|colspan="3" rowspan="2" style="vertical-align:center; font-weight:bold; color:#' .. val[i][2] .. '"| ' .. val[i][1] content[1][10+j] = '|colspan="3" rowspan="3"|' insert_box(content, 13+j, 1, keys[i][3], keys[i][6], ttable, args) content[1][17+j] = '|colspan="3" rowspan="2"|' content[2][j-1] = '|rowspan="6" style="border-bottom:2px ' .. val[d][3] .. '"|' content[2][5+j] = '|rowspan="10" style="border-width:' .. val[d][4] .. ' 2px 0; border-style:' .. val[d][3] .. '"|' content[2][15+j] = '|rowspan="4" style="' .. val[d][5] .. '"|' content[3][j-1] = '|rowspan="6" style="border-bottom:2px solid"|' content[3][5+j] = '|rowspan="10" style="' .. val[d][5] .. ' border-bottom:2px solid"|' content[3][15+j] = '|rowspan="4" style="' .. val[d][5] .. '"|' content[4][j-1] = '|colspan="3" rowspan="3"|' insert_box(content, 2+j, 4, keys[i][1], keys[i][8], ttable, args) content[4][6+j] = '|colspan="3" rowspan="3"|' content[4][9+j] = '|colspan="3" rowspan="3"|' insert_box(content, 12+j, 4, keys[i][2], keys[i][7], ttable, args) content[4][16+j] = '|colspan="3" rowspan="3"|' content[5][j-1] = '|rowspan="5" style="border-bottom:2px solid"|' content[5][4+j] = '|rowspan="10" style="border-width:1px 3px 2px 0; border-style:solid"|' content[5][14+j] = '|rowspan="5" style="border-top:1px solid"|' content[6][j-1] = '|rowspan="5"|' content[6][4+j] = '|rowspan="5" style="border-bottom:2px solid"|' content[6][9+j] = '|rowspan="5" style="border-top:1px solid"|' content[6][14+j] = '|rowspan="5"|' content[7][j-1] = '|colspan="3" rowspan="5"|' content[7][4+j] = '|colspan="3" rowspan="3"|' insert_box(content, 7+j, 7, keys[i][9], keys[i][10], ttable, args) content[7][11+j] = '|colspan="3" rowspan="8" style="text-align:center; vertical-align:top; font-weight:bold"| ' .. val[i][1] .. ' Championship' end content[8][8] = '|rowspan="2" style="border-bottom:2px solid"|' content[8][10] = '|rowspan="20" style="border-width:1px 3px 2px 0; border-style:solid"|' content[8][30] = '|style="border-top:1px solid"|' content[9][10] = '|rowspan="10" style="border-bottom:2px solid"|' content[9][20] = '|rowspan="10" style="border-top:1px solid"|' insert_box(content, 18, 10, keys[c[1]][11], keys[c[2]][11], ttable, args) if args['sb_det'] ~= nil then content[10][15] = '|colspan="3" rowspan="3" style="vertical-align:bottom;"| '..args['sb_det'] end content[10][22] = '|colspan="3" rowspan="3" style="text-align:center; vertical-align:top; font-weight:bold"| Super Bowl ' .. sb_nr(year) for y = 1, 41 do table.insert(tree_build, '|-\n|style="height:1.6ex;"|\n') for x = 1, 10 do if content[x][y] ~= nil then table.insert(tree_build, content[x][y] .. '\n') end end end return tree_build end function p.test(frame) if(frame.args[1] == 'box') then return box(frame.args[2], frame.args[3], frame.args[4], frame.args[5]) elseif (frame.args[1] == 'build_box') then return build_box(frame.args[2], frame.args[3], frame.args[4], frame.args[5]) elseif (frame.args[1] == 'get_score') then return get_score(frame.args, frame.args[1], frame.args[2]) end local ret = {} table.insert(ret, 's=' .. frame.args['s']) for i = 1, mw.ustring.match(frame.args['r0'],"^%s*(%d*)"), 7 do table.insert(ret, ' n=' .. frame.args['n']) end table.insert(ret, ' r0=' .. mw.ustring.match(frame.args['r0'],"^%s*(%d*)") .. ' : ' .. mw.ustring.match(frame.args['r0'],"(%d*)%s*$")) table.insert(ret, ' r1=' .. mw.ustring.match(frame.args['r1'],"^%s*(%d*)") .. ' : ' .. mw.ustring.match(frame.args['r1'],"(%d*)%s*$")) if frame.args['r2'] then table.insert(ret, ' r2 exists') end if frame.args['r2'] == nil then table.insert(ret, ' r2=nil') end if frame.args['r3'] then table.insert(ret, ' r3 exists') end if frame.args['r3'] == nil then table.insert(ret, ' r3=nil') end return table.concat(ret) end return p