Modulo:ListaVoceFondamentale

Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:ListaVoceFondamentale/man (modifica · cronologia)
Sandbox: Modulo:ListaVoceFondamentale/sandbox (modifica · cronologia) · Sottopagine: lista · Test: Modulo:ListaVoceFondamentale/test (modifica · cronologia · Esegui)
Modulo che implementa il sottotemplate {{ListaVoceFondamentale/qualità}}.
--Raccolta di funzioni per {{ListaVoceFondamentale}}
require('strict')
local mProgettiInteressati = require('Modulo:Progetti interessati')
local p = {}
-- **** Templates per per {{ListaVoceFondamentale/qualità}} ***
-- Dato il nome della voce estrae il valore corretto del monitoraggio.
function p.monitoraggiomatching(frame)
local monresult = {}
local monpage = ''
local monpagestring = ''
local montosearch = ''
local monsearchstring = ''
local monparams = {'accuratezza', 'scrittura', 'fonti', 'immagini'}
local montmps = '[Pp]rogetti interessati'
for i, name in ipairs(frame.args) do
if name and name ~= '' then
-- Title object, vedi title.getContent()
monpage = tostring(mw.title.makeTitle('Discussione', name):getContent())
-- il pattern che si sta per usare non è a prova di falsi positivi (non si può fare bene senza reimplementare molte parti delle PCRE),
-- ma i falsi positivi avrebbero un livello di patologia da essere comunque da correggere a mano,
-- e per loro natura le liste delle voci fondamentali si correggono a mano.
-- Esempi dove fallisce questo script:
-- due monitoraggi annidati, apertura di sezioni dentro {{monitoraggio}}, template annidati in monitoraggio con gli stessi nomi di parametri.
if mw.ustring.match(monpage, '{{%s*'.. montmps ..'%s*|', 1) then
monpagestring = mw.ustring.match(monpage, '{{%s*'.. montmps ..'%s*|[^}]*}.-\r?\n==', 1)
if not monpagestring then
monpagestring = mw.ustring.match(monpage,'{{%s*'.. montmps ..'%s*|[^}]*}}', 1)
end
if monpagestring then
for n, w in ipairs(monparams) do
montosearch = '|%s*'..w .. '%s*=[^|}]*'
monsearchstring = mw.ustring.match(monpagestring, montosearch, 1)
if monsearchstring then
monresult[n] = mw.text.split(monsearchstring, '=', true)[2]
monresult[n] = string.gsub(monresult[n], '^%s*(.-)%s*$', '%1')
else
monresult[n] = ''
end
end
end
end
end
end
if table.concat(monresult) == '' then
return ''
else
return mProgettiInteressati._livello( { accuratezza = monresult[1], scrittura = monresult[2],
fonti = monresult[3], immagini = monresult[4] } )
end
end
-- Dato il nome della voce, determina se è in vetrina o vdq
function p.stelle(frame)
local sresult =''
local spage = ''
local stemplate = {}
--definisco i pattern per i nomi dei template
stemplate["Vetrina"] = {'[Vv]+etrina'}
stemplate["Qualità"] = {'[Vv]+oce%s*di%s*qualità', '[Vv]+d[Qq]' }
--ora calcolo
for i, name in ipairs(frame.args) do
if name and name ~= '' then
spage = tostring(mw.title.makeTitle(0, name):getContent())
for key, t in pairs(stemplate) do
for counter, v in ipairs(t) do
if mw.ustring.match(spage, '{{%s*' .. v .. '%s*|', 1) then
sresult = sresult .. key
break
end
end
end
end
end
if sresult == '' then
return ''
else
return frame:expandTemplate{ title = 'Icona', args = { sresult } }
end
end
-- **** Templates per per contare il numero di voci fondamentali ***
function p.quante1(frame)
local lista1template = 'ListaVoceFondamentale'
local lista1content = mw.ustring.match(tostring(mw.title.makeTitle('Wikipedia', 'Voci fondamentali/Lista1'):getContent()), '{{%s*' .. lista1template .. '%s*|.+', 1)
local lista1list = mw.text.split(lista1content,'{{%s*' .. lista1template .. '%s*|', false)
return #lista1list - 1
end
return p