Modulo:ListaVoceFondamentale

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

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