Modulo:Fr-verb
Istruzioni per l'uso
Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:Fr-verb/man (modifica • cronologia)
Sandbox: Modulo:Fr-verb/Sandbox (modifica•cronologia) • Test: Modulo:Fr-verb/Test (modifica•cronologia)
Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:Fr-verb/man (modifica • cronologia)
Sandbox: Modulo:Fr-verb/Sandbox (modifica•cronologia) • Test: Modulo:Fr-verb/Test (modifica•cronologia)
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