Modulo:Es-verb
La documentazione per questo modulo può essere creata in Modulo:Es-verb/man
-- Questo modulo contiene il codice per il template:Es-verb, che genera il paradigma con le forme base dei verbi spagnoli e potenzialmente ne permette la categorizzazzione per coniugazione
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 p.esverb(frame)
pframe = frame:getParent()
args = pframe.args
--inizializza tutte le stringhe come vuote, per facilitare la concatenazione
sort = ""; rifl = ""; radice = ""; me = ""; se = ""
conj = ""; conjdescr = ""; conjcat = ""; riflcat = ""
pres1s = ""; pres1s2 = ""; prem1s = ""; prem1s2 = ""
pp = ""; pp2 = ""; pp3 = ""; pp4 = ""; pp5 = ""
riflink = ""; paradigma = ""; descrizione = ""
titolo = mw.title.getCurrentTitle().text --il titolo della pagina (che dovrebbe corrispondere al verbo all'infinito)
--per prima cosa definisce la coniugazione; questo può avvenire con un parametro apposito oppure in automatico
if args["conj"] ~= nil then --se è definito il parametro "conj" del template, la coniugazione è recuperata in base ad esso
if args["conj"] == "1" then sort = "1"
elseif args["conj"] == "2" then sort = "2"
elseif args["conj"] == "3" then sort = "3"
else error(" parametro 'conj' non ammesso! può essere solo '''1''', '''2''' o '''3''' (per prima, seconda o terza coniugazione)")
end
else --se il parametro "conj" del template non è definito, la coniugazione è recuperata in automatico in base alla terminazione dell'infinito
if mw.ustring.sub(titolo, -2) == "ar" or mw.ustring.sub(titolo, -4) == "arse" then sort = "1"
elseif mw.ustring.sub(titolo, -2) == "er" or mw.ustring.sub(titolo, -4) == "erse" then sort = "2"
elseif mw.ustring.sub(titolo, -2) == "ir" or mw.ustring.sub(titolo, -4) == "irse" then sort = "3"
else error(" terminazione del verbo non riconosciuta!")
end
end
--verifica se il verbo è riflessivo, ovvero se termina con la particella pronominale "se"
if mw.ustring.sub(titolo, -2) == "se" then rifl = true else rifl = false end
--genera la radice del verbo, eliminando l'uscita all'infinito
if rifl == false then radice = mw.ustring.sub(titolo, 1, -3)
elseif rifl == true then radice = mw.ustring.sub(titolo, 1, -5)
end
--genera le particelle pronominali se il verbo è riflessivo
if rifl == true then
me = "[[me#Spagnolo|me]] "
end
--genera la descrizione (e potenzialmente la categoria) della coniugazione
if sort == "1" then conj = "prima coniugazione"; conjdescr = "1<sup><small>a</small></sup> coniugazione"
elseif sort == "2" then conj = "seconda coniugazione"; conjdescr = "2<sup><small>a</small></sup> coniugazione"
elseif sort == "3" then conj = "terza coniugazione"; conjdescr = "3<sup><small>a</small></sup> coniugazione"
end
--genera le categorie, per ora solo --commentate
--conjcat = "categorizza("Verbi in spagnolo", titolo).. categorizza("Verbi di ".. conj.. " in spagnolo", titolo)"
--if rifl == true then
--riflcat = categorizza("Verbi riflessivi in spagnolo", titolo).. categorizza("Verbi riflessivi di ".. conj.. " in spagnolo", titolo)
--else
--riflcat = ""
--end
--genera le forme flesse del paradigma
if sort == "1" then
pres1s = me.. p.wiki(radice.. "o"); prem1s = me.. p.wiki(radice.. "é"); pp = p.wiki(radice.. "ado")
elseif sort == "2" or sort == "3" then
pres1s = me.. p.wiki(radice.. "o"); prem1s = me.. p.wiki(radice.. "í"); pp = p.wiki(radice.. "ido")
end
-- Recupera le eventuali forme irregolari o varianti, rimpiazziandole o aggiungendole a quelle standard
pres1s = p.over(pres1s,args["pres1s"]); pres1s2 = p.wiki(args["pres1s2"])
pres1s = p.alts(pres1s, pres1s2)
prem1s = p.over(prem1s,args["prem1s"]); prem1s2 = p.wiki(args["prem1s2"])
prem1s = p.alts(prem1s, prem1s2)
pp = p.over(pp,args["pp"]); pp2 = p.wiki(args["pp2"]); pp3 = p.wiki(args["pp3"]); pp4 = p.wiki(args["pp4"]); pp5 = p.wiki(args["pp5"])
pp = p.alts(pp, pp2); pp = p.alts(pp, pp3); pp = p.alts(pp, pp4); pp = p.alts(pp, pp5)
--genera il link al riflessivo, se questo esiste (e se il verbo non è riflessivo)
if rifl == false then
if mw.title.new(titolo.. "se").exists == true then
riflink = "; ''riflessivo'': '''".. p.wiki(titolo.."se").. "'''"
end
end
--genera il paradigma, inserendo tra parentesi le voci verbali generate prima
paradigma = "(''prima pers. sing. dell'indicativo presente'': '''".. pres1s.. "''', ''prima pers. sing. dell'indicativo preterito'': '''".. prem1s.. "''', ''participio passato'': '''".. pp.. "'''".. riflink.. ")"
--infine, mette insieme tutte le variabili generate fin qui nella stringa "descrizione", che costituisce l'output del modulo
descrizione = conjdescr.. " ".. paradigma --.. conjcat.. riflcat
return descrizione
end
function p.over(x,over)
-- Utilizzato all'interno della funzione esverb
-- Rimpiazza una voce verbale standard con quella eventualmente indicata nel template (se quest'ultimo è un link rosso, aggiunge anche la relativa categoria)
if over == nil then return x end
if over < "a" then return 'n.e.' end
if over >= "a" then
return "[[" .. over .. "#Spagnolo|" .. over .. "]]"
else
return "n.e."
end
end
function p.wiki(x)
-- Utilizzato all'interno della funzione esverb
if x == nil then return " " end
if x == "" then return " " end
-- Rende il suo argomento un wikilink, o lo rende nullo se non definito (per facilitare la concatenazione)
return "[[" .. x .. "#Spagnolo|" .. x .. "]]"
end
function p.alts(x,y)
-- Utilizzato all'interno della funzione esverb
-- Aggiunge le eventuali forme alternative, se specificate nel template, separandole da quelle base con una virgola
if y == nil then return x end
if y == '' then return x end
if y > "0" then return x .. " ''o'' " .. y end
return x
end
return p