Questo modulo costituisce il codice di funzionamento del Template:La-decl-agg e crea, in base ai parametri inseriti in quest'ultimo, la tabella di declinazione degli aggettivi latini.
Riconosce la classe dell'aggettivo e genera di conseguenza le forme flesse, inserendole nella tabella a tre o due colonne a seconda che il template riceva tre parametri (come nel caso di piger, pigra, pigrum) o due (come brevis, breve).
Recupera automaticamente la radice dell'aggettivo in base al neutro (il secondo o terzo parametro del template, se quest'ultimo è definito).
local p = {}
function noaccenti(x) -- funzione che rimuove gli eventuali accenti lunghi e brevi dalla radice (stem); in pratica se si scrive 'puĕr' restituisce 'puer'
local dp={
='a',='a',
='e',='e',
='i',='i',
='o',='o',
='u',='u',
='y',
};
return (mw.ustring.gsub(x, '.', dp))
end
function p.ladecl(frame)
pframe = frame:getParent()
config = frame.args
args = pframe.args
--prima di tutto trova il neutro, se il terzo parametro del template è definito o meno
if frame.args ~= "0" then
neutro = frame.args
else
neutro = frame.args
genitivo = frame.args
end
maschile = frame.args --il maschile invece è sempre uguale al primo parametro; il femminile non ha bisogno di essere specificato
--in base all'uscita del neutro, decide la classe dell'aggettivo e la sua radice (che è la radice del neutro)
if noaccenti(mw.ustring.sub(neutro, -2)) == "um" then
classe = "1"
radice = mw.ustring.sub(neutro, 1, -3)
else
classe = "2"
if noaccenti(mw.ustring.sub(neutro, -1)) == "e" then
radice = mw.ustring.sub(neutro, 1, -2)
elseif noaccenti(mw.ustring.sub(genitivo, -2)) == "is" then --per gli aggettivi a una sola uscita, la radice è quella del genitivo maschile singolare al secondo parametro
radice = mw.ustring.sub(genitivo, 1, -3)
neutro = maschile
elseif noaccenti(mw.ustring.sub(genitivo, -3)) == "ius" then --per i comparativi in -IOR, -IUS
radice = mw.ustring.sub(genitivo, 1, -4).. "iōr"
comparativo = true
else
error(" desinenza del neutro o del genitivo maschile singolare non riconosciuta! il neutro deve terminare in -um o -e, il genitivo in -is!")
end
end
--a partire dalla radice, e in base alla classe, genera le varie forme flesse
if classe == "1" then --prima classe, -us -a -um
--SINGOLARI
nom_s_m = p.wiki(maschile); nom_s_f = p.wiki(radice.. "ă"); nom_s_n = p.wiki(neutro);
gen_s_m = p.wiki(radice.. "ī"); gen_s_f = p.wiki(radice.. "ae"); gen_s_n = p.wiki(radice.. "ī");
dat_s_m = p.wiki(radice.. "ō"); dat_s_f = p.wiki(radice.. "ae"); dat_s_n = p.wiki(radice.. "ō");
acc_s_m = p.wiki(radice.. "ŭm"); acc_s_f = p.wiki(radice.. "ăm"); acc_s_n = p.wiki(neutro);
voc_s_m = p.wiki(radice.. "ĕ"); voc_s_f = p.wiki(radice.. "ă"); voc_s_n = p.wiki(neutro);
abl_s_m = p.wiki(radice.. "ō"); abl_s_f = p.wiki(radice.. "ā"); abl_s_n = p.wiki(radice.. "ō");
if noaccenti(mw.ustring.sub(maschile, -2)) == "er" then voc_s_m = p.wiki(maschile) end --fix per gli aggettivi di prima classe in -er, come 'liber', che non escono in -e al vocativo
--PLURALI
nom_p_m = p.wiki(radice.. "ī"); nom_p_f = p.wiki(radice.. "ae"); nom_p_n = p.wiki(radice.. "ă");
gen_p_m = p.wiki(radice.. "ōrum"); gen_p_f = p.wiki(radice.. "ārum"); gen_p_n = p.wiki(radice.. "ōrum");
dat_p_m = p.wiki(radice.. "īs"); dat_p_f = p.wiki(radice.. "īs"); dat_p_n = p.wiki(radice.. "īs");
acc_p_m = p.wiki(radice.. "ōs"); acc_p_f = p.wiki(radice.. "ās"); acc_p_n = p.wiki(radice.. "ă");
voc_p_m = p.wiki(radice.. "ī"); voc_p_f = p.wiki(radice.. "ae"); voc_p_n = p.wiki(radice.. "ă");
abl_p_m = p.wiki(radice.. "īs"); abl_p_f = p.wiki(radice.. "īs"); abl_p_n = p.wiki(radice.. "īs");
elseif classe == "2" then --seconda classe, a tre o due uscite seguendo la terza declinazione
nom_s_m = p.wiki(maschile); nom_s_f = p.wiki(radice.. "is"); nom_s_n = p.wiki(neutro);
gen_s_m = p.wiki(radice.. "is"); gen_s_f = p.wiki(radice.. "is"); gen_s_n = p.wiki(radice.. "is");
dat_s_m = p.wiki(radice.. "ī"); dat_s_f = p.wiki(radice.. "ī"); dat_s_n = p.wiki(radice.. "ī");
acc_s_m = p.wiki(radice.. "em"); acc_s_f = p.wiki(radice.. "em"); acc_s_n = p.wiki(neutro);
voc_s_m = p.wiki(maschile); voc_s_f = p.wiki(radice.. "is"); voc_s_n = p.wiki(neutro);
abl_s_m = p.wiki(radice.. "ī"); abl_s_f = p.wiki(radice.. "ī"); abl_s_n = p.wiki(radice.. "ī");
--PLURALI
nom_p_m = p.wiki(radice.. "ēs"); nom_p_f = p.wiki(radice.. "ēs"); nom_p_n = p.wiki(radice.. "ĭa");
gen_p_m = p.wiki(radice.. "ĭum"); gen_p_f = p.wiki(radice.. "ĭum"); gen_p_n = p.wiki(radice.. "ĭum");
dat_p_m = p.wiki(radice.. "ĭbus"); dat_p_f = p.wiki(radice.. "ĭbus"); dat_p_n = p.wiki(radice.. "ĭbus");
acc_p_m = p.wiki(radice.. "ēs"); acc_p_f = p.wiki(radice.. "ēs"); acc_p_n = p.wiki(radice.. "ĭa");
voc_p_m = p.wiki(radice.. "ēs"); voc_p_f = p.wiki(radice.. "ēs"); voc_p_n = p.wiki(radice.. "ĭa");
abl_p_m = p.wiki(radice.. "ĭbus"); abl_p_f = p.wiki(radice.. "ĭbus"); abl_p_n = p.wiki(radice.. "ĭbus");
if comparativo == true then
abl_s_m = p.wiki(radice.. "e"); abl_s_n = p.wiki(radice.. "e")
nom_p_n = p.wiki(radice.. "a"); acc_p_n = p.wiki(radice.. "a"); voc_p_n = p.wiki(radice.. "a");
gen_p_m = p.wiki(radice.. "um"); gen_p_n = p.wiki(radice.. "um");
end
end
-- Recupera le eventuali forme irregolari o varianti, rimpiazziandole o aggiungendole a quelle standard
--SINGOLARI
nom_s_m = p.over(nom_s_m,args); nom_s_m2 = p.wiki(args) nom_s_m = p.alts(nom_s_m, nom_s_m2)
nom_s_f = p.over(nom_s_f,args); nom_s_f2 = p.wiki(args) nom_s_f = p.alts(nom_s_f, nom_s_f2)
nom_s_n = p.over(nom_s_n,args); nom_s_n2 = p.wiki(args) nom_s_n = p.alts(nom_s_n, nom_s_n2)
gen_s_m = p.over(gen_s_m,args); gen_s_m2 = p.wiki(args) gen_s_m = p.alts(gen_s_m, gen_s_m2)
gen_s_f = p.over(gen_s_f,args); gen_s_f2 = p.wiki(args) gen_s_f = p.alts(gen_s_f, gen_s_f2)
gen_s_n = p.over(gen_s_n,args); gen_s_n2 = p.wiki(args) gen_s_n = p.alts(gen_s_n, gen_s_n2)
dat_s_m = p.over(dat_s_m,args); dat_s_m2 = p.wiki(args) dat_s_m = p.alts(dat_s_m, dat_s_m2)
dat_s_f = p.over(dat_s_f,args); dat_s_f2 = p.wiki(args) dat_s_f = p.alts(dat_s_f, dat_s_f2)
dat_s_n = p.over(dat_s_n,args); dat_s_n2 = p.wiki(args) dat_s_n = p.alts(dat_s_n, dat_s_n2)
acc_s_m = p.over(acc_s_m,args); acc_s_m2 = p.wiki(args) acc_s_m = p.alts(acc_s_m, acc_s_m2)
acc_s_f = p.over(acc_s_f,args); acc_s_f2 = p.wiki(args) acc_s_f = p.alts(acc_s_f, acc_s_f2)
acc_s_n = p.over(acc_s_n,args); acc_s_n2 = p.wiki(args) acc_s_n = p.alts(acc_s_n, acc_s_n2)
voc_s_m = p.over(voc_s_m,args); voc_s_m2 = p.wiki(args) voc_s_m = p.alts(voc_s_m, voc_s_m2)
voc_s_f = p.over(voc_s_f,args); voc_s_f2 = p.wiki(args) voc_s_f = p.alts(voc_s_f, voc_s_f2)
voc_s_n = p.over(voc_s_n,args); voc_s_n2 = p.wiki(args) voc_s_n = p.alts(voc_s_n, voc_s_n2)
abl_s_m = p.over(abl_s_m,args); abl_s_m2 = p.wiki(args) abl_s_m = p.alts(abl_s_m, abl_s_m2)
abl_s_f = p.over(abl_s_f,args); abl_s_f2 = p.wiki(args) abl_s_f = p.alts(abl_s_f, abl_s_f2)
abl_s_n = p.over(abl_s_n,args); abl_s_n2 = p.wiki(args) abl_s_n = p.alts(abl_s_n, abl_s_n2)
--PLURALI
nom_p_m = p.over(nom_p_m,args); nom_p_m2 = p.wiki(args) nom_p_m = p.alts(nom_p_m, nom_p_m2)
nom_p_f = p.over(nom_p_f,args); nom_p_f2 = p.wiki(args) nom_p_f = p.alts(nom_p_f, nom_p_f2)
nom_p_n = p.over(nom_p_n,args); nom_p_n2 = p.wiki(args) nom_p_n = p.alts(nom_p_n, nom_p_n2)
gen_p_m = p.over(gen_p_m,args); gen_p_m2 = p.wiki(args) gen_p_m = p.alts(gen_p_m, gen_p_m2)
gen_p_f = p.over(gen_p_f,args); gen_p_f2 = p.wiki(args) gen_p_f = p.alts(gen_p_f, gen_p_f2)
gen_p_n = p.over(gen_p_n,args); gen_p_n2 = p.wiki(args) gen_p_n = p.alts(gen_p_n, gen_p_n2)
dat_p_m = p.over(dat_p_m,args); dat_p_m2 = p.wiki(args) dat_p_m = p.alts(dat_p_m, dat_p_m2)
dat_p_f = p.over(dat_p_f,args); dat_p_f2 = p.wiki(args) dat_p_f = p.alts(dat_p_f, dat_p_f2)
dat_p_n = p.over(dat_p_n,args); dat_p_n2 = p.wiki(args) dat_p_n = p.alts(dat_p_n, dat_p_n2)
acc_p_m = p.over(acc_p_m,args); acc_p_m2 = p.wiki(args) acc_p_m = p.alts(acc_p_m, acc_p_m2)
acc_p_f = p.over(acc_p_f,args); acc_p_f2 = p.wiki(args) acc_p_f = p.alts(acc_p_f, acc_p_f2)
acc_p_n = p.over(acc_p_n,args); acc_p_n2 = p.wiki(args) acc_p_n = p.alts(acc_p_n, acc_p_n2)
voc_p_m = p.over(voc_p_m,args); voc_p_m2 = p.wiki(args) voc_p_m = p.alts(voc_p_m, voc_p_m2)
voc_p_f = p.over(voc_p_f,args); voc_p_f2 = p.wiki(args) voc_p_f = p.alts(voc_p_f, voc_p_f2)
voc_p_n = p.over(voc_p_n,args); voc_p_n2 = p.wiki(args) voc_p_n = p.alts(voc_p_n, voc_p_n2)
abl_p_m = p.over(abl_p_m,args); abl_p_m2 = p.wiki(args) abl_p_m = p.alts(abl_p_m, abl_p_m2)
abl_p_f = p.over(abl_p_f,args); abl_p_f2 = p.wiki(args) abl_p_f = p.alts(abl_p_f, abl_p_f2)
abl_p_n = p.over(abl_p_n,args); abl_p_n2 = p.wiki(args) abl_p_n = p.alts(abl_p_n, abl_p_n2)
--stringa "descrizione", fornisce informazioni sulla classe dell'aggettivo ("cappello" della tabella di coniugazione)
if classe == "1" then descrizione = "aggettivo della I classe"
elseif classe == "2" then descrizione = "aggettivo della II classe"
end
--stringa "categoria", aggiunge la categoria della classe aggettivale
if classe == "1" then categoria = "]" .. "]"
elseif classe == "2" then categoria = "]" .. "]"
end
--costruisce le tabelle di coniugazione; attenzione che sono due tabelle distinte per gli aggettivi a tre e a due uscite (farlo con una tabella sola era un casino di "if")
if frame.args ~= "0" then --TABELLA A TRE COLONNE
decl = ].."\n"
decl = decl.. "|+".. descrizione .. categoria .. "\n"
decl = decl.. ].."\n"
decl = decl.. ].."\n"
decl = decl.. ].."\n"
decl = decl.. ].."\n"
decl = decl.. ].."\n"
decl = decl.. ].."\n"
decl = decl.. ].."\n"
decl = decl.. ].."\n"
decl = decl.. ].."\n"
decl = decl.. ].. nom_s_m.. '\n'.. ].. nom_s_f.. '\n'.. ].. nom_s_n.. '\n'
decl = decl.. "|-".."\n"
decl = decl.. ].."\n"
decl = decl.. ].. gen_s_m.. '\n'.. ].. gen_s_f.. '\n'.. ].. gen_s_n.. '\n'
decl = decl.. ].."\n"
decl = decl.. ].."\n"
decl = decl.. ].. dat_s_m.. '\n'.. ].. dat_s_f.. '\n'.. ].. dat_s_n.. '\n'
decl = decl.. ].."\n"
decl = decl.. ].."\n"
decl = decl.. ].. acc_s_m.. '\n'.. ].. acc_s_f.. '\n'.. ].. acc_s_n.. '\n'
decl = decl.. ].."\n"
decl = decl.. ].."\n"
decl = decl.. ].. voc_s_m.. '\n'.. ].. voc_s_f.. '\n'.. ].. voc_s_n.. '\n'
decl = decl.. ].."\n"
decl = decl.. ].."\n"
decl = decl.. ].. abl_s_m.. '\n'.. ].. abl_s_f.. '\n'.. ].. abl_s_n.. '\n'
decl = decl.. ].."\n"
decl = decl.. ].."\n"
decl = decl.. ].."\n"
decl = decl.. ].."\n"
decl = decl.. ].."\n"
decl = decl.. ].."\n"
decl = decl.. ].."\n"
decl = decl.. ].."\n"
decl = decl.. ].."\n"
decl = decl.. ].. nom_p_m.. '\n'.. ].. nom_p_f.. '\n'.. ].. nom_p_n.. '\n'
decl = decl.. ].."\n"
decl = decl.. ].."\n"
decl = decl.. ].. gen_p_m.. '\n'.. ].. gen_p_f.. '\n'.. ].. gen_p_n.. '\n'
decl = decl.. ].."\n"
decl = decl.. ].."\n"
decl = decl.. ].. dat_p_m.. '\n'.. ].. dat_p_f.. '\n'.. ].. dat_p_n.. '\n'
decl = decl.. ].."\n"
decl = decl.. ].."\n"
decl = decl.. ].. acc_p_m.. '\n'.. ].. acc_p_f.. '\n'.. ].. acc_p_n.. '\n'
decl = decl.. ].."\n"
decl = decl.. ].."\n"
decl = decl.. ].. voc_p_m.. '\n'.. ].. voc_p_f.. '\n'.. ].. voc_p_n.. '\n'
decl = decl.. ].."\n"
decl = decl.. ].."\n"
decl = decl.. ].. abl_p_m.. '\n'.. ].. abl_p_f.. '\n'.. ].. abl_p_n.. '\n'
decl = decl.. "|-".."\n"
decl = decl.. "|}"
else --TABELLA A DUE COLONNE
decl = ].."\n"
decl = decl.. "|+".. descrizione .. categoria .. "\n"
decl = decl.. ].."\n"
decl = decl.. ].."\n"
decl = decl.. "|-".."\n"
decl = decl.. ].."\n"
decl = decl.. ].."\n"
decl = decl.. ].."\n"
decl = decl.. "|-".."\n"
decl = decl.. ].."\n"
decl = decl.. ].. nom_s_m.. '\n'.. ].. nom_s_n.. '\n'
decl = decl.. "|-".."\n"
decl = decl.. ].."\n"
decl = decl.. ].. gen_s_m.. '\n'.. ].. gen_s_n.. '\n'
decl = decl.. "|-".."\n"
decl = decl.. ].."\n"
decl = decl.. ].. dat_s_m.. '\n'.. ].. dat_s_n.. '\n'
decl = decl.. "|-".."\n"
decl = decl.. ].."\n"
decl = decl.. ].. acc_s_m.. '\n'.. ].. acc_s_n.. '\n'
decl = decl.. "|-".."\n"
decl = decl.. ].."\n"
decl = decl.. ].. voc_s_m.. '\n'.. ].. voc_s_n.. '\n'
decl = decl.. "|-".."\n"
decl = decl.. ].."\n"
decl = decl.. ].. abl_s_m.. '\n'.. ].. abl_s_n.. '\n'
decl = decl.. ].."\n"
decl = decl.. ].."\n"
decl = decl.. "|-".."\n"
decl = decl.. ].."\n"
decl = decl.. ].."\n"
decl = decl.. ].."\n"
decl = decl.. "|-".."\n"
decl = decl.. ].."\n"
decl = decl.. ].. nom_p_m.. '\n'.. ].. nom_p_n.. '\n'
decl = decl.. "|-".."\n"
decl = decl.. ].."\n"
decl = decl.. ].. gen_p_m.. '\n'.. ].. gen_p_n.. '\n'
decl = decl.. "|-".."\n"
decl = decl.. ].."\n"
decl = decl.. ].. dat_p_m.. '\n'.. ].. dat_p_n.. '\n'
decl = decl.. "|-".."\n"
decl = decl.. ].."\n"
decl = decl.. ].. acc_p_m.. '\n'.. ].. acc_p_n.. '\n'
decl = decl.. "|-".."\n"
decl = decl.. ].."\n"
decl = decl.. ].. voc_p_m.. '\n'.. ].. voc_p_n.. '\n'
decl = decl.. "|-".."\n"
decl = decl.. ].."\n"
decl = decl.. ].. abl_p_m.. '\n'.. ].. abl_p_n.. '\n'
decl = decl.. "|-".."\n"
decl = decl.. "|}"
end
return decl
end
function p.over(x,over)
-- Utilizzato all'interno della funzione principale
-- Rimpiazza una forma flessa standard con quella eventualmente indicata nel template (se quest'ultimo è un link rosso, aggiunge anche la relativa categoria)
local noaccenti = require("Modulo:Latino").noaccenti
if over == nil then return x end
if over < "a" then return 'n.e.' end
if over >= "a" then
local over2 = noaccenti(over)
if mw.title.new(over2).exists == false then
RedCat = "] "
else
RedCat = ""
end
if over2 == mw.title.getCurrentTitle().text then
return "'''".. over.. "'''"
else
return "]".. RedCat
end
end
end
function p.wiki(x)
-- Utilizzato all'interno della funzione principale
if x == nil then return " " end
if x == "" then return " " end
-- aggiunge la categoria link rossi
if x >= "0" then
local y = noaccenti(x)
if mw.title.new(y).exists == false then
RedCat = "]"
else
RedCat = ""
end
-- Rende il suo argomento un wikilink, restituendo ad es. "], o lo rende nullo se non definito (per facilitare la concatenazione)
if y == mw.title.getCurrentTitle().text then return "'''".. x.. "'''"
else return "]".. RedCat end
else
return " "
end
end
function p.alts(x,y)
-- Utilizzato all'interno della funzione principale
-- 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 >= "0" then return x .. ", " .. y end
return x
end
return p