Modulo:Film
Istruzioni per l'uso
Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:Film/man (modifica · cronologia)
Sandbox: Modulo:Film/sandbox (modifica · cronologia) · Sottopagine: lista · Test: Modulo:Film/test (modifica · cronologia · Esegui)
Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:Film/man (modifica · cronologia)
Sandbox: Modulo:Film/sandbox (modifica · cronologia) · Sottopagine: lista · Test: Modulo:Film/test (modifica · cronologia · Esegui)
Modulo a supporto del template {{Film}}.
Dati i parametri paese/paeseN, annouscita, cortometraggio e tipoaudio inseriti manualmente nella voci o letti da Wikidata dalle proprietà paese di origine (P495) e data di pubblicazione (P577) genera la categorizzazione per:
- Cortometraggi/Film <nazionalità> del <anno>
- Cortometraggi/Film muti <nazionalità>
--[[
* Modulo a supporto del template Film.
]]--
require('strict')
local getArgs = require('Modulo:Arguments').getArgs
local mWikidata = require('Modulo:Wikidata')
local mDelink = require('Modulo:Delink')
local errorCategory = '[[Categoria:Errori di compilazione del template Film]]'
local p = {}
-- Ricerca i parametri paese/paeseN prima tra args e poi da Wikidata in P495
-- e li restituisce come sequence Lua.
local function getPaesi(args)
local ret = {}
if args.paese then
ret[1] = args.paese
for key, val in pairs(args) do
local num = key:match('^paese(%d+)$')
if num then
ret[tonumber(num)] = val
end
end
else
ret = mWikidata._getProperty( { 'P495' }, true ) or {}
end
return ret
end
-- Verifica che tutti i valori della sequence contengano lo stesso valore.
-- In caso di successo restituisce quel valore altrimenti nil
local function getUniqueValue(tbl)
local ret = tbl[1]
for i = 2, #tbl do
if tbl[i] ~= tbl[1] then
ret = nil
break
end
end
return ret
end
-- Ricerca il parametro annuscita prima tra args (deve essere un wikilink)
-- e poi da Wikidata in P577 e lo restituisce come stringa senza wikilink.
local function getAnnoUscita(args)
local ret
if args.annouscita then
ret = tonumber(args.annouscita:match('^%[%[(%d+)%]%]$'))
ret = (ret and ret >= 1880 and ret <= 2030) and tostring(ret) or nil
else
ret = mWikidata._getProperty({ 'P577', time = 'year' }, true)
-- verifica che l'anno sia sempre lo stesso
if ret then
ret = getUniqueValue(ret)
end
end
return ret
end
-- Restituisce il maschile plurale degli abitanti del paese specificato usando AggNaz,
-- oppure nil se il paese non esiste. Il paese specificato deve essere un wikilink.
local function getMp(paese)
local ret
local values = {
['Germania Ovest'] = true,
['Germania Est'] = true,
['Repubblica Democratica Tedesca'] = true
}
if paese:match('^%[%[.-%]%]$') then
paese = mDelink._main({ paese })
-- utilizza AggNaz ad eccezione di questi tre valori
if values[paese] then
ret = 'tedeschi'
else
local title = mw.title.new('Template:AggNaz/' .. paese)
ret = (title and title.exists) and
mw.getCurrentFrame():expandTemplate {
title = title.text,
args = { 'mp' }
} or nil
end
end
return ret
end
-- Restituisce le categorie oppurtune per i paesi/annouscita/cortometraggio/tipoaudio specificati
local function getCategories(paesi, annouscita, cortometraggio, tipoaudio)
local ret = {}
for _, paese in ipairs(paesi) do
local mp = getMp(paese)
if mp then
local tipo = cortometraggio == 'true' and 'Cortometraggi' or 'Film'
table.insert(ret, string.format('[[Categoria:%s %s del %s]]', tipo, mp, annouscita))
if tipoaudio == 'muto' then
table.insert(ret, string.format('[[Categoria:%s muti %s]]', tipo, mp))
end
else
table.insert(ret, errorCategory)
end
end
return table.concat(ret)
end
-- Entry-point per {{#invoke:Film|categorie}}
function p.categorie(frame)
local ret, args, paesi
args = getArgs(frame, {parentOnly = true})
paesi = getPaesi(args)
if #paesi > 0 then
local annouscita = getAnnoUscita(args)
ret = annouscita and getCategories(paesi, annouscita, args.cortometraggio, args.tipoaudio) or nil
end
return ret or errorCategory
end
return p