Questo modulo costituisce il codice di funzionamento del Template:Fr-verb e crea, in base all'unico parametro inserito in quest'ultimo, le categorie dei verbi francesi, dividendoli per gruppo (primo, secondo o terzo) ed eventualmente aggiungendo la sottocategoria riflessivi (se il verbo inizia per pronome).

Permette di indicizzare correttamente i verbi senza considerare gli accenti (quindi elencando être sotto la "e", invece che sotto la "ê") né il pronome riflessivo se o s' (altrimenti i riflessivi finirebbero tutti sotto la "s").

Genera inoltre una breve descrizione, del tipo primo/secondo/terzo gruppo.


-- Questo modulo contiene il codice per il template:Fr-verb, che permette di categorizzare correttamente i verbi francesi per gruppo

p = {}

local function categorizza(cat, titolo) --funzione per generare le categorie, by Wim_b
local NS = tostring(mw.title.getCurrentTitle().namespace);

	if NS == '0' then
		return string.format('[[%s:%s|%s]]', mw.site.namespaces[14].name, cat, titolo)
	else
		return ''
	end
end

function noaccenti(x)
-- funzione che rimuove gli eventuali accenti dal suo argomento: déraciner -> deraciner. Serve per le categorizzazioni in corretto ordine alfabetico
	local dp={
	['à']='a',['á']='a',['â']='a',
	['è']='e',['é']='e',['ê']='e',
	['ì']='i',['í']='i',['î']='i',
	['ò']='o',['ó']='o',['ô']='o',
	['ù']='u',['ú']='u',['û']='u',
	};
	return (mw.ustring.gsub(x, '.', dp))
	end

function p.verb(frame)
	pframe = frame:getParent()
    args = pframe.args
    
    titolo = mw.title.getCurrentTitle().text --il titolo della pagina
    titolo = noaccenti(titolo) --il titolo della pagina senza accenti
        if mw.ustring.find(titolo, "se ") then
    	titolo = mw.ustring.gsub(titolo, "se ", "", 1) --il titolo della pagina senza eventuale particella pronominale iniziale
    elseif mw.ustring.find(titolo, "s'") then
    	titolo = mw.ustring.gsub(titolo, "s'", "", 1) --idem
    end
    
	sort = args[1] --l'unico parametro passato dal template, può essere solo 1, 2 o 3 e decide la stringa "gruppo" qui sotto, in base alla quale vengono generate le categorie dei gruppi verbali

	if sort == "1" then
		gruppo = "primo gruppo"; gruppodescr = "1° gruppo"
	elseif sort == "2" then
		gruppo = "secondo gruppo"; gruppodescr = "2° gruppo"
	elseif sort == "3" then
		gruppo = "terzo gruppo"; gruppodescr = "3° gruppo"
	else
		error(" parametro non ammesso! gli unici consentiti sono 1, 2 o 3 (per primo, secondo o terzo gruppo)")
	end
	
--aggiunge la categoria dei gruppi verbali, secondo quanto definito sopra	
	conjcat = categorizza("Verbi in francese", titolo).. categorizza("Verbi del ".. gruppo.. " in francese", titolo)
	
--aggiunge la categoria dei riflessivi se il verbo inizia per pronome	
	if mw.ustring.find(mw.title.getCurrentTitle().text, "se ") or mw.ustring.find(mw.title.getCurrentTitle().text, "s'") then 
		riflcat = categorizza("Verbi riflessivi in francese", titolo).. categorizza("Verbi riflessivi del ".. gruppo.. " in francese", titolo)
	else
		riflcat = ""
	end
	
--aggiunge il link alla forma riflessiva pronominale del verbo, se esiste
--genera la stringa "pron", cioé la particella pronominale con o senza accento, da utilizzare nel link ai riflessivi subito sotto
	if mw.ustring.find(titolo, "^[aàâeéèêëiîïoôuùûüh]") then pron = "s'"
	else pron = "se " end

--cerca se esiste il verbo con la particella riflessiva, e se sì aggiunge il relativo link
	if args["riflink"] == "no" then
		riflink = ""
		else
			if mw.title.new(pron.. mw.title.getCurrentTitle().text).exists == true then
				riflink = "(''riflessivo'': [[".. pron.. mw.title.getCurrentTitle().text.. "#Francese|".. pron.. mw.title.getCurrentTitle().text.. "]])" 
			else
				riflink = ""
			end
	end
	
	descrizione = "''".. gruppodescr.. "''".. conjcat.. riflcat.. " ".. riflink --stringa descrizione, genera una breve descrizione del gruppo verbale (in ''corsivo'')
	
	return 
		descrizione.. conjcat.. riflcat --restituisce la descrizione e le categorie di cui sopra come output

end
return p