Modulo:Carriera sportivo
Aspetto
Istruzioni per l'uso
Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:Carriera sportivo/man (modifica · cronologia)
Sandbox: Modulo:Carriera sportivo/sandbox (modifica · cronologia) · Sottopagine: lista · Test: Modulo:Carriera sportivo/test (modifica · cronologia · Esegui)
Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:Carriera sportivo/man (modifica · cronologia)
Sandbox: Modulo:Carriera sportivo/sandbox (modifica · cronologia) · Sottopagine: lista · Test: Modulo:Carriera sportivo/test (modifica · cronologia · Esegui)
Questo modulo implementa la funzionalità del template {{Carriera sportivo}}. Viene inoltre usato dai template {{Carriera beach volley}} e {{Titoli pugile}}.
local getArgs = require('Modulo:Arguments').getArgs
local p = {}
local sport2Prefix = {
['boxe'] = 'pugilato',
['pallacanestro'] = 'basket',
['pallavolo'] = 'volley',
['rugby a XIII'] = 'rugby',
['rugby a XV'] = 'rugby',
['rugby a 13'] = 'rugby',
['rugby a 15'] = 'rugby',
['rugby league'] = 'rugby',
['rugby union'] = 'rugby'
}
--i pattern supportati devono avere sempre 3 gruppi: (prefisso)(nome squadra)(suffisso)
local supportedPatterns = {
'(→ *)(.*)(.-)', --per i trasferimenti
'(<[^<>]*>)(.*)(< */[^<>]*>)', --per i tag (riconosce anche {{TA}} e simili)
'(.-)(.*)(%c\'"`UNIQ---ref.*QINU`"\'%c)' --per le note
}
local function makeTag(name, content, attributes)
return string.format('<%s %s>%s</%s>', name, attributes or '', content or '', name)
end
local function makeTd(content, attributes)
return makeTag('td', content, attributes)
end
local function getYearFromRange(range)
--se l'intervallo temporale ha un formato riconosciuto, allora ricava l'ultimo anno e decrementalo di uno
--altrimenti, se l'intervallo temporale è costituito solo da un anno, allora usa quest'ultimo
--l'anno iniziale ammette anche i punti interrogativi
return ( range:find('^[%d?][%d?][%d?][%d?] *[-–] *%d%d%d%d$') and (tonumber(range:sub(-4)) - 1) )
or ( range:find('^%d%d%d%d$') and range )
or ''
end
local function unformat(content)
local newContent = content
local matchedPatterns = {}
repeat
local matched = false
for i = 1, #supportedPatterns do
local prefix, middle, suffix = newContent:match('^'..supportedPatterns[i]..'$')
if middle and newContent ~= middle then
matched = true
newContent = middle
--salvo la coppia prefisso-suffisso in prima posizione in modo che venga pescata dalla cima dello stack
table.insert(matchedPatterns, 1, {prefix, suffix})
end
end
until (not matched) --continuo il loop finché non ottengo più match
return newContent, matchedPatterns
end
local function reformat(content, wrappers)
local newContent = content
for i = 1, #wrappers do
local wrapper = wrappers[i]
newContent = wrapper[1] .. newContent .. wrapper[2]
end
return newContent
end
function p.getList(frame)
local args = getArgs(frame)
local pos = mw.title.getCurrentTitle().namespace == 0 and args['pos'] or ''
local sport = args['sport'] or ''
sport = sport2Prefix[sport:lower()] or sport --lo sport viene convertito nel prefisso di un template bandierina (ad es. "pallavolo" -> "volley")
--parsing preliminare per controllare che la terza colonna contenga almeno un valore
local hasScore = false
local rowNum = 0
while true do
local startIndex = rowNum * 3
local team = args[startIndex + 2]
local score = args[startIndex + 3]
if not team then break end
if score then hasScore = true break end
rowNum = rowNum + 1
end
local res = ''
rowNum = 0
while true do
local startIndex = rowNum * 3
local range = args[startIndex + 1] or ''
local team = args[startIndex + 2]
local score = args[startIndex + 3] or ''
local _, spaceCount = string.gsub(score, " ", "")
if spaceCount <= 1 then score = makeTag('span', score, 'class="nowrap"') end
if not team then break end
if sport ~= '' then
local year = getYearFromRange(range)
local cleanedTeam, matchedPatterns = unformat(team)
--chiamata protetta per verificare l'esistenza del template
local success, result = pcall(frame.expandTemplate, frame, {
title = string.format('Template:%s %s', sport, cleanedTeam),
args = { pos, year }
})
if success then team = reformat(result, matchedPatterns) end
end
local range_cell = makeTd(range)
local team_cell = makeTd(team, not hasScore and 'colspan="2"' or '')
local score_cell = hasScore and makeTd(score, '') or ''
local content = range_cell .. team_cell .. score_cell
res = res .. makeTag('tr', content)
rowNum = rowNum + 1
end
return res
end
return p