Modulo:Tracce/sandbox: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
semplifico
test abbr
 
(21 versioni intermedie di un altro utente non mostrate)
Riga 1:
local categories = {}
local discontinuous_num = '[[Categoria:Voci con template Tracce acon numerazione discontinua]]'
local missing_title = '[[Categoria:ErroriVoci di compilazione delcon template Tracce -con titolo mancante]]'
local unexpected_markup = '[[Categoria:ErroriVoci di compilazione delcon template Tracce -con markup inaspettato]]'
local unknown_format = '[[Categoria:ErroriVoci di compilazione delcon template Tracce -con formato durata sconosciuto]]'
 
-- ProtectsProtegge auna stringstringa thatche willsarà beavvolta wrappeddal inmarkup wiki italic markup '' ... '' del corsivo
local function safeforitalics(str)
if str:sub(1,1) == "'" then str = "<span></span>" .. str end
if str:sub(-1,-1) == "'" then str = str .. "<span></span>" end
return str
end
 
-- Calcola e formatta la durata di una traccia
local function getTrackLength(args, i)
local string_durata = args["Durata" .. i]
local minuti, secondi
if string_durata then
local string_minuti, string_secondi = mw.ustring.match(string_durata, "^(%d+):(%d%d)$")
minuti = tonumber(string_minuti) or 0
secondi = tonumber(string_secondi) or 0
else
minuti = tonumber(args["Minuti" .. i]) or 0
secondi = args["Secondi" .. i] and mw.ustring.match(args["Secondi" .. i], "^%d%d?$") and
secondi = tonumber(args["Secondi" .. i]) or 0
end
local durata = (minuti or 0) * 60 + (secondi or 0)
elseifif (string_durata orand args["Minuti"durata ..== i]0) or (not minuti and args["SecondiMinuti" .. i]) thenor
(not secondi and args["Secondi" .. i]) then
categories[#categories+1] = unknown_format
end
return durata, durata > 0 and string.format("%d:%02.f", minuti or 0, secondi or 0) or nil
end
 
Line 17 ⟶ 38:
]]--
 
local function track(args, i, corsivodurata)
local titolo = args["Titolo" .. i]
local row_elements = {}
Line 23 ⟶ 44:
local interprete = args["Interprete" .. i]
if interprete then table.insert(row_elements, interprete .. " – ") end
local corsivo = args["Corsivo"] =~= "no" and falsetrue or truefalse
corsivo = (corsivo and args["Corsivo" .. i] ~= "no") or
(not corsivo and (args["Corsivo" .. i] == "sì" or args["Corsivo" .. i] == "si"))
Line 33 ⟶ 55:
table.insert(row_elements, titolo)
local featuring = args["Featuring" .. i]
if featuring then table.insert(row_elements, " <small>(<abbr title=featuring>feat.</abbr> " .. featuring .. ")</small>") end
local note = args["Note" .. i]
if note then table.insert(row_elements, " <small>(" .. note .. ")</small>") end
if durata > 0 then
local string_durata = args["Durata" .. i]
local minuti, secondi
if string_durata then
local string_minuti, string_secondi = mw.ustring.match(string_durata, "(%d+):(%d%d)")
minuti = tonumber(string_minuti) or 0
secondi = tonumber(string_secondi) or 0
else
minuti = tonumber(args["Minuti" .. i]) or 0
secondi = tonumber(args["Secondi" .. i]) or 0
end
local durata = minuti * 60 + secondi
if durata > 0 then
table.insert(row_elements, " – ")
table.insert(row_elements, string.format("%d:%02.f", minuti, secondi)durata)
elseif string_durata or args["Minuti" .. i] or args["Secondi" .. i] then
categories[#categories+1] = unknown_format
end
local AutoreTesto = args["Autore testo" .. i]
Line 122 ⟶ 131:
testata = testata .. "."
end
local corsivo = args["Corsivo"] == "no" and false or true
table.insert(tracks, testata)
-- compone la lista dei parametri
Line 131 ⟶ 139:
if visualizza_durata == "si" or visualizza_durata == "sì" then somma_durata = true end
local nums = {}
local logvalidated_nums = {}
for k, v in pairs(args) do
local numero_titoloprefix, num = k:string.match(k, '^(%D+)(%d[0-9]+)$')
if tonumbernum and (numero_titolonum == '0' or num:sub(1,1) ~= '0') then
-- se il numero viene modificato da tonumber, è troppo alto
local titolo = args['Titolo' .. numero_titolo]
ifnum not= titolo thentonumber(num)
localif titolo =not args['Titolo' .. numero_titolonum] then
categories[#categories+1] = missing_title
end
elseif k == 'Titolo' .. numero_titolo then
if args[prefix .. num] and not validated_nums[num] then
table.insert(nums, tonumber(numero_titolo))
validated_nums[num] = true
table.insert(nums, tonumber(numero_titolo)num)
end
end
end
table.sort(nums)
if primo_titolo#nums == 0 then
if k ~= num then categories[#categories+1] = discontinuous_num endmissing_title
-- categoria di tracciamento se la numerazione delle tracce è discontinua
elseif nums[1] + #nums - 1 ~= nums[#nums] then
categories[#categories+1] = discontinuous_num
end
local titlestracce = false
-- estrae le tracce dai parametri e inserisce i valori nella tabella tracks
for k, num in ipairs(nums) do
local new_trackdurata_track, durata_trackdurata_formattata = trackgetTrackLength(args, num, corsivo)
if args['Titolo' .. num] then
table.insert(tracks, new_track)
titlestracce = true
local new_track = track(args, num, durata_formattata)
table.insert(tracks, new_track)
end
if somma_durata then durata = durata + durata_track end
if k ~= num then categories[#categories+1] = discontinuous_num end
end
table.insert(tracks, "</ol>")
Line 154 ⟶ 176:
table.insert(tracks, "Durata totale: " .. string.format("%d:%02.f", math.floor(durata/60) , durata % 60) .. "</p>")
end
local ns = mw.title.getCurrentTitle().namespace
return (tracce and table.concat(tracks, "\n") or '') .. (ns == 0 and table.concat(categories) or '')
end
 
Line 169 ⟶ 192:
-- estrae tutti i parametri e li memorizza in una tabella
local args = {}
local titles = false
for k, v in pairs(pframe.args) do
if v ~= nil and v ~= '' then
args[k] = v
if not titles and k:match("^Titolo(%d+)$") then
titles = true
end
end
end
return titles and componi_tracce(args) or ''
-- procede solo se c'è almeno un campo titolo
return titles and componi_tracce(args) or ''
end
 
Line 211 ⟶ 229:
-- estrae tutti i parametri e li memorizza in una tabella (pframe ritorna una pseudotabella, vedi documentazione)
local args = {}
local primo_titololog = {}
for k, v in pairs( pframe.args) do
local log ={}
if v ~= nil and v ~= '' then
for k,v in pairs( pframe.args) do
if conversion_table[k] then -- Controlla sse è un parametro non indicizzato
args[ conversion_table[k]] = v
else
-- estrae nome base e indice, se k=Title1title1 allora base_keyprefix=Titletitle e posnum=1
local base_keyprefix, posnum = string.match(k, "^(%D+)(%d+)$")
if pos and base_keyprefix and conversion_table_index[base_keyprefix] then -- controlla se è un parametro indicizzato
args[conversion_table_index[base_keyprefix] .. posnum] = v
else elseif not num then -- non è neanche un parametro indicizzato, lo copia così com'è
pos = tonumber(pos)
args[k] = v
if base_key == 'title' and (not primo_titolo or pos < primo_titolo) then
primo_titolo = pos
end
end
else -- non è neanche un parametro indicizzato, lo copia così com'è
args[k] = v
end
end
end
if args['Visualizza durata totale'] then args['Visualizza durata totale'] = 'si' end
return componi_tracce(args, primo_titolo) -- table.concat(log, '\n*') --
if primo_titolo then
return componi_tracce(args, primo_titolo) -- table.concat(log, '\n*') --
else
return
end
end