Modulo:En-conj
Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:En-conj/man (modifica • cronologia)
Sandbox: Modulo:En-conj/Sandbox (modifica•cronologia) • Test: Modulo:En-conj/Test (modifica•cronologia)
Questo modulo costituisce il codice di funzionamento del Template:En-conj, e crea, in base ai parametri inseriti in quest'ultimo, la tabella di coniugazione dei verbi inglesi. Si compone di una funzione principale, p.enconj (richiamata direttamente nel template) e di due funzioni accessorie (p.wiki e p.alts) che sono utilizzate solo all'interno della funzione principale per abbreviarne il codice.
Il modulo (in particolare la tabella) è stato parzialmente derivato dal Modulo:It-conj.
Funzione p.enconj
È la funzione principale del modulo; interpreta i parametri passati dal template e li utilizza per formare le stringhe per le forme flesse e i tempi composti, che sono poi inserite nella tabella di coniugazione che ne costituisce l'output. Possiede due parametri fondamentali, stem
e parse
:
stem
corrisponde al primo parametro del template, ed equivale alla forma del verbo all'infinito (senza la particella to), viene richiamata per formare le forme flesse dei verbi regolari apponendovi le corrispondenti desinenze (ad esstem.. "ed"
per il passato semplice)parse
corrisponde al secondo parametro del template; riconosce i seguenti valori definiti in base ai quali costruisce automaticamente le forme flesse (per i verbi regolari; si vedano le istruzioni del template): "e", "es", "y", "d" e "doppia". Se invece tale parametro è diverso da tali valori definiti il modulo utilizza per le forme flesse direttamente i parametri passati dal template.
Se sono presenti varianti alternative per il participio presente (ppres2
), per il passato semplice (ps2
) e participio passato (ppas2
), queste vengono aggiunte accanto alla forma base dalla funzione p.alts (vedi sotto).
Il template genera poi i tempi composti, codificandoli in stringhe: pastperf
per il passato semplice (simple past), presperf12s
per la prima e seconda persona singolare del presente perfetto (present perfect), condpresperf
per il presente perfetto condizionale (present perfect conditional) e così via. Tali stringhe per itempi composti, insieme con quelle delle forme base, sono poi inserite nella tabella di coniugazione.
Funzione p.wiki
La funzione p.wiki (p.wiki(x)
) rende il suo argomento, x
, un wikilink, con "pipe" alla sezione inglese. In pratica, nel modulo, scrivere p.wiki(qualcosa)
equivale al wikicodice [[qualcosa#Inglese|qualcosa]].
Inoltre, la funzione controlla, tramite la funzione standard di Scribunto mw.title.new(x).exists (si veda anche qui) se la pagina a cui punta tale link esiste o meno (funziona in modo molto simile alla funzione parser ifexist del codice mediawiki). Se la pagina non esiste, aggiunge al wikilink la Categoria:Verbi inglesi con forme da scrivere, e/o la Categoria:Verbi inglesi da scrivere se ad essere rosso è il link verso la forma all'infinito.
Funzione p.alts
La funzione p.alts (p.alts(x, y)
) aggiunge l'eventuale variante alternativa (identificata dal suo secondo argomento, y
), se definita, accanto a quella generata automaticamente (identificata dal primo argomento x
), separandola con una virgola. Ad esempio, all'interno della funzione principale, il codice
ps = p.alts(ps, ps2)
cerca l'eventuale parametro "ps2=" (variante del passato semplice) nel template; se questo è definito lo aggiunge al seguito della forma base base, se non lo è restituisce invece solo quest'ultima.
-- Modulo per la coniugazione dei verbi inglesi; richiamato dal Template:En-conj
p = {}
function p.enconj(frame)
pframe = frame:getParent()
args = pframe.args
stem = args[1]
parse = args[2]
-- inizializzazione dei parametri interni al modulo
--Tempi semplici
inf = "" --infinito
pres = "" --presente semplice
pres3s = "" --presente semplice, terza persona singolare
ppres = ""; ppres2= "" --participio presente e relativa variante
ps = ""; ps2 = "" --passato semplice e relativa variante
ppas = ""; ppas2 = "" --participio passato e relativa variante
--Tempi composti
infpas = "" --past infinitive
gerpas = "" --past gerundive
fut = ""; --simple future
presperf12s = ""; presperf3s = ""; presperfp = "" --present perfect
pastperf = ""; --past perfect
futperf = ""; --future perfect
prescont1s = ""; prescont2s = ""; prescont3s= ""; prescontp = "" --present continuous
pastcont1s = ""; pastcont2s = ""; pastcont3s = ""; pastcontp = "" --past continuous
futcont = ""; --future continuous
presperfcont12s = ""; presperfcont3s = ""; presperfcontp = "" --present perfect continuous
pastperfcont = "" --past perfect continuous
futperfcont = "" --future perfect continuous
condpres = "" --present conditional
condpresperf = "" --present perfect conditional
condprescont = "" --present continuous conditional
condpresperfcont = "" --present perfect continuous conditional
subpresperf = "" --present perfect subjunctive
subpastperf = "" --past perfect subjunctive
imp2s = ""; imp1p = ""; imp2p = "" --imperative
-- Forme verbali in base al parse
if parse == nil or parse == "" then
inf = p.wiki(stem); pres = p.wiki(stem); pres3s = p.wiki(stem.. "s"); ppres = p.wiki(stem.. "ing"); ps = p.wiki(stem.. "ed"); ppas = p.wiki(stem.. "ed")
elseif parse == "e" then
inf = p.wiki(stem); pres = p.wiki(stem); pres3s = p.wiki(stem.. "s"); ppres = p.wiki(stem.sub(stem, 1, -2).. "ing"); ps = p.wiki(stem.. "d"); ppas = p.wiki(stem.. "d")
elseif parse == "es" then
inf = p.wiki(stem); pres = p.wiki(stem); pres3s = p.wiki(stem.. "es"); ppres = p.wiki(stem.. "ing"); ps = p.wiki(stem.. "ed"); ppas = p.wiki(stem.. "ed")
elseif parse == "d" then
inf = p.wiki(stem); pres = p.wiki(stem); pres3s = p.wiki(stem.. "s"); ppres = p.wiki(stem.. "ing"); ps = p.wiki(stem.. "d"); ppas = p.wiki(stem.. "d")
elseif parse == "y" then
inf = p.wiki(stem); pres = p.wiki(stem); pres3s = p.wiki(stem.sub(stem, 1, -2).. "ies"); ppres = p.wiki(stem.. "ing"); ps = p.wiki(stem.sub(stem, 1, -2).. "ied"); ppas = p.wiki(stem.sub(stem, 1, -2).. "ied")
elseif parse == "doppia" then
inf = p.wiki(stem); pres = p.wiki(stem); pres3s = p.wiki(stem.. "s"); ppres = p.wiki(stem.. stem.sub(stem, -1).. "ing"); ps = p.wiki(stem.. stem.sub(stem, -1).. "ed"); ppas = p.wiki(stem.. stem.sub(stem, -1).. "ed")
else --verbi irregolari, si inseriscono i parametri manualmente
inf = p.wiki(args[1]); pres = p.wiki(args[1]); pres3s = p.wiki(args[2]); ppres = p.wiki(args[3]); ps = p.wiki(args[4]); if args[5] == nil then ppas = p.wiki(args[4]) else ppas = p.wiki(args[5]) end
end
-- Eventuali forme varianti
ppres2 = p.wiki(args["ppres2"])
ppres = p.alts(ppres,ppres2)
ps2 = p.wiki(args["ps2"])
ps = p.alts(ps,ps2)
ppas2 = p.wiki(args["ppass2"])
ppas = p.alts(ppas,ppas2)
-- Tempi composti
-- tempi composti che utilizzano il participio presente (progressivi)
prescont1s = '[[am]] '.. ppres; prescont2s = '[[are]] '.. ppres; prescont3s = '[[is]] '.. ppres; prescontp = '[[are]] '.. ppres --present continuous
pastcont1s = '[[was]] '.. ppres; pastcont2s = '[[were]] '.. ppres; pastcont3s = '[[was]] '.. ppres; pastcontp = '[[were]] '.. ppres --past continuous
futcont = '[[will]] [[be]] '.. ppres --future continuous
presperfcont12s = '[[have]] [[been]] '.. ppres; presperfcont3s = '[[has]] [[been]] '.. ppres; presperfcontp = '[[have]] [[been]] '.. ppres --present perfect continuous
pastperfcont = '[[had]] [[been]] '.. ppres --past perfect continuous
futperfcont ='[[will]] [[have]] [[been]] '.. ppres --future perfect continuous
condprescont = '[[would]] [[be]] '.. ppres --present continuous conditional
condpresperfcont = '[[would]] [[have]] [[been]] '.. ppres --present perfect continuous conditional
-- tempi composti che utilizzano il participio passato (perfetti)
infpas = 'to [[have]] '.. ppas --past infinitive
gerpas = '[[having]] '.. ppas --past gerundive
presperf12s = '[[have]] '.. ppas; presperf3s = '[[has]] '.. ppas; presperfp = '[[have]] '.. ppas --present perfect
pastperf = '[[had]] '.. ppas --past perfect
futperf = '[[will]] [[have]] '.. ppas --future perfect
condpresperf = '[[would]] [[have]] '.. ppas --present perfect conditional
subpresperf = '[[have]] '.. ppas --present perfect subjunctive
subpastperf = '[[had]] '.. ppas --past perfect subjunctive
-- Costruisce la tabella di coniugazione
conj = '{| style="color:#000; background:#F0F0F0;border-collapse:separate;border-spacing:2px;float=center" class="inflection-table"\n'
conj = conj .. '|-\n'
conj = conj .. '! colspan="7" style="color:#000; background:#e2e4c0" | forme impersonali\n'
conj = conj .. '|-\n! colspan="2" style="color:#000; background:#e2e4c0" | infinito\n'
conj = conj .. '| colspan="1" | to '.. inf.. '\n'
conj = conj .. '! colspan="2" style="color:#000; background:#e2e4c0" | infinito passato\n'
conj = conj .. '| colspan="2" | '.. infpas.. '\n'
conj = conj .. '|-\n! colspan="2" style="color:#000; background:#e2e4c0" | gerundio\n'
conj = conj .. '| colspan="1" |'.. ppres.. '\n'
conj = conj .. '! colspan="2" style="color:#000; background:#e2e4c0" | gerundio passato\n'
conj = conj .. '| colspan="2" | '.. gerpas.. '\n'
conj = conj .. '|-\n! colspan="2" style="color:#000; background:#e2e4c0" | participio presente\n'
conj = conj .. '| colspan="1" |'.. ppres.. '\n'
conj = conj .. '! colspan="2" style="color:#000; background:#e2e4c0" | participio passato\n'
conj = conj .. '| colspan="2" |'.. ppas.. '\n'
conj = conj .. '|-\n'
conj = conj .. '! colspan="7" style="color:#000; background:#C0C0C0" | forme personali\n'
conj = conj .. '|-\n! colspan="1" rowspan="2" style="color:#000; background:#C0C0C0" | persona\n'
conj = conj .. '! colspan="3" style="color:#000; background:#C0C0C0" | singolare\n'
conj = conj .. '! colspan="3" style="color:#000; background:#C0C0C0" | plurale\n'
conj = conj .. '|-\n! style="color:#000; background:#C0C0C0;width:12.5%" | prima\n'
conj = conj .. '! style="color:#000; background:#C0C0C0;width:12.5%" | seconda\n'
conj = conj .. '! style="color:#000; background:#C0C0C0;width:12.5%" | terza\n'
conj = conj .. '! style="color:#000; background:#C0C0C0;width:12.5%" | prima\n'
conj = conj .. '! style="color:#000; background:#C0C0C0;width:12.5%" | seconda\n'
conj = conj .. '! style="color:#000; background:#C0C0C0;width:12.5%" | terza\n'
conj = conj .. '|-\n! style="color:#000; background:#c0cfe4" colspan="1" | indicativo</br><small>indicative</small>\n'
conj = conj .. '! style="color:#000; background:#c0cfe4" | I\n'
conj = conj .. '! style="color:#000; background:#c0cfe4" | you\n'
conj = conj .. '! style="color:#000; background:#c0cfe4" | he/she/it\n'
conj = conj .. '! style="color:#000; background:#c0cfe4" | we\n'
conj = conj .. '! style="color:#000; background:#c0cfe4" | you\n'
conj = conj .. '! style="color:#000; background:#c0cfe4" | they\n|-\n'
conj = conj .. '! style="height:3em;color:#000; background:#c0cfe4" colspan="1" | presente semplice</br><small>simple present</small>\n'
conj = conj .. '| style="height:3em;color:#000; background:#f2f2f2;text-align:center" colspan="2" |'.. pres.. '\n'
conj = conj .. '| style="height:3em;color:#000; background:#f2f2f2;text-align:center" colspan="1" |'.. pres3s.. '\n'
conj = conj .. '| style="height:3em;color:#000; background:#D8D8D8;text-align:center" colspan="3" |'.. pres.. '\n|-\n'
conj = conj .. '! style="height:3em;color:#000; background:#c0cfe4" colspan="1" | passato semplice</br><small>simple past</small>\n'
conj = conj .. '| style="height:3em;color:#000; background:#D8D8D8;text-align:center" colspan="6" |'.. ps.. '\n|-\n'
conj = conj .. '! style="height:3em;color:#000; background:#c0cfe4" colspan="1" | futuro semplice</br><small>simple future</small>\n'
conj = conj .. '| style="height:3em;color:#000; background:#D8D8D8;text-align:center" colspan="6" | [[will]] '.. inf.. '\n|-\n'
conj = conj .. '! style="height:3em;color:#000; background:#c0cfe4" colspan="1" | presente perfetto</br><small>present perfect</small>\n'
conj = conj .. '| style="height:3em;color:#000; background:#f2f2f2;text-align:center" colspan="2" | '.. presperf12s.. '\n'
conj = conj .. '| style="height:3em;color:#000; background:#f2f2f2;text-align:center" colspan="1" | '.. presperf3s.. '\n'
conj = conj .. '| style="height:3em;color:#000; background:#D8D8D8;text-align:center" colspan="3" | '.. presperfp.. '\n|-\n'
conj = conj .. '! style="height:3em;color:#000; background:#c0cfe4" colspan="1" | piuccheperfetto</br><small>past perfect</small>\n'
conj = conj .. '| style="height:3em;color:#000; background:#D8D8D8;text-align:center" colspan="6" | '.. pastperf.. '\n|-\n'
conj = conj .. '! style="height:3em;color:#000; background:#c0cfe4" colspan="1" | futuro perfetto</br><small>future perfect</small>\n'
conj = conj .. '| style="height:3em;color:#000; background:#D8D8D8;text-align:center" colspan="6" | '.. futperf.. '\n|-\n'
conj = conj .. '! style="height:3em;color:#000; background:#c0cfe4" colspan="1" | presente progressivo</br><small>present continuous</small>\n'
conj = conj .. '| style="height:3em;color:#000; background:#f2f2f2;text-align:center" colspan="1" | '.. prescont1s.. '\n'
conj = conj .. '| style="height:3em;color:#000; background:#f2f2f2;text-align:center" colspan="1" | '.. prescont2s.. '\n'
conj = conj .. '| style="height:3em;color:#000; background:#f2f2f2;text-align:center" colspan="1" | '.. prescont3s.. '\n'
conj = conj .. '| style="height:3em;color:#000; background:#D8D8D8;text-align:center" colspan="3" | '.. prescontp.. '\n|-\n'
conj = conj .. '! style="height:3em;color:#000; background:#c0cfe4" colspan="1" | passato progressivo</br><small>past continuous</small>\n'
conj = conj .. '| style="height:3em;color:#000; background:#f2f2f2;text-align:center" colspan="1" | '.. pastcont1s.. '\n'
conj = conj .. '| style="height:3em;color:#000; background:#f2f2f2;text-align:center" colspan="1" | '.. pastcont2s.. '\n'
conj = conj .. '| style="height:3em;color:#000; background:#f2f2f2;text-align:center" colspan="1" | '.. pastcont3s.. '\n'
conj = conj .. '| style="height:3em;color:#000; background:#D8D8D8;text-align:center" colspan="3" | '.. pastcontp.. '\n|-\n'
conj = conj .. '! style="height:3em;color:#000; background:#c0cfe4" colspan="1" | futuro progressivo</br><small>future continuous</small>\n'
conj = conj .. '| style="height:3em;color:#000; background:#D8D8D8;text-align:center" colspan="6" | '.. futcont.. '\n|-\n'
conj = conj .. '! style="height:3em;color:#000; background:#c0cfe4" colspan="1" | presente perfetto prog.</br><small>present perfect continuous</small>\n'
conj = conj .. '| style="height:3em;color:#000; background:#f2f2f2;text-align:center" colspan="2" | '.. presperfcont12s.. '\n'
conj = conj .. '| style="height:3em;color:#000; background:#f2f2f2;text-align:center" colspan="1" | '.. presperfcont3s.. '\n'
conj = conj .. '| style="height:3em;color:#000; background:#D8D8D8;text-align:center" colspan="3" | '.. presperfcontp.. '\n|-\n'
conj = conj .. '! style="height:3em;color:#000; background:#c0cfe4" colspan="1" | piuccheperfetto prog.</br><small>past perfect continuous</small>\n'
conj = conj .. '| style="height:3em;color:#000; background:#D8D8D8;text-align:center" colspan="6" | '.. pastperfcont.. '\n|-\n'
conj = conj .. '! style="height:3em;color:#000; background:#c0cfe4" colspan="1" | futuro perfetto prog.</br><small>future perfect continuous</small>\n'
conj = conj .. '| style="height:3em;color:#000; background:#D8D8D8;text-align:center" colspan="6" | '.. futperfcont.. '\n|-\n'
conj = conj .. '|-\n! style="color:#000; background:#c0d8e4" colspan="1" | condizionale</br><small>conditional</small>\n'
conj = conj .. '! style="color:#000; background:#c0d8e4" | I\n'
conj = conj .. '! style="color:#000; background:#c0d8e4" | you\n'
conj = conj .. '! style="color:#000; background:#c0d8e4" | he/she/it\n'
conj = conj .. '! style="color:#000; background:#c0d8e4" | we\n'
conj = conj .. '! style="color:#000; background:#c0d8e4" | voi\n'
conj = conj .. '! style="color:#000; background:#c0d8e4" | they\n'
conj = conj .. '|-\n! style="height:3em;color:#000; background:#c0d8e4" colspan="1" | presente </br><small>present conditional</small>\n'
conj = conj .. '| style="height:3em;color:#000; background:#D8D8D8;text-align:center" colspan="6" | [[would]] '.. inf.. '\n|-\n'
conj = conj .. '|-\n! style="height:3em;color:#000; background:#c0d8e4" colspan="1" | perfetto </br><small>present perfect conditional</small>\n'
conj = conj .. '| style="height:3em;color:#000; background:#D8D8D8;text-align:center" colspan="6" | '.. condpresperfcont.. '\n|-\n'
conj = conj .. '|-\n! style="height:3em;color:#000; background:#c0d8e4" colspan="1" | presente progressivo </br><small>present continuous conditional</small>\n'
conj = conj .. '| style="height:3em;color:#000; background:#D8D8D8;text-align:center" colspan="6" | '.. condprescont.. '\n|-\n'
conj = conj .. '|-\n! style="height:3em;color:#000; background:#c0d8e4" colspan="1" | presente perfetto prog. </br><small>present perfect continuous cond.</small>\n'
conj = conj .. '| style="height:3em;color:#000; background:#D8D8D8;text-align:center" colspan="6" | '.. condpresperfcont.. '\n|-\n'
conj = conj .. '|-\n! style="color:#000; background:#c0e4c0" colspan="1" | congiuntivo</br><small>subjunctive</small>\n'
conj = conj .. '! style="color:#000; background:#c0e4c0" | I\n'
conj = conj .. '! style="color:#000; background:#c0e4c0" | you\n'
conj = conj .. '! style="color:#000; background:#c0e4c0" | he/she/it\n'
conj = conj .. '! style="color:#000; background:#c0e4c0" | we\n'
conj = conj .. '! style="color:#000; background:#c0e4c0" | voi\n'
conj = conj .. '! style="color:#000; background:#c0e4c0" | they\n'
conj = conj .. '|-\n! style="height:3em;color:#000; background:#c0e4c0" colspan="1" | presente </br><small>present subjunctive</small>\n'
conj = conj .. '| style="height:3em;color:#000; background:#D8D8D8;text-align:center" colspan="6" |'.. pres.. '\n|-\n'
conj = conj .. '|-\n! style="height:3em;color:#000; background:#c0e4c0" colspan="1" | passato </br><small>past subjunctive</small>\n'
conj = conj .. '| style="height:3em;color:#000; background:#D8D8D8;text-align:center" colspan="6" |'.. ps.. '\n|-\n'
conj = conj .. '|-\n! style="height:3em;color:#000; background:#c0e4c0" colspan="1" | presente perfetto </br><small>present perfect subjunctive</small>\n'
conj = conj .. '| style="height:3em;color:#000; background:#D8D8D8;text-align:center" colspan="6" |'.. subpresperf.. '\n|-\n'
conj = conj .. '|-\n! style="height:3em;color:#000; background:#c0e4c0" colspan="1" | piuccheperfetto </br><small>past perfect subjunctive</small>\n'
conj = conj .. '| style="height:3em;color:#000; background:#D8D8D8;text-align:center" colspan="6" |'.. subpastperf.. '\n|-\n'
conj = conj .. '|-\n! style="color:#000; background:#e4d4c0" colspan="1" | imperativo</br><small>imperative</small>\n'
conj = conj .. '! style="color:#000; background:#e4d4c0" | -\n'
conj = conj .. '! style="color:#000; background:#e4d4c0" | you\n'
conj = conj .. '! style="color:#000; background:#e4d4c0" | -\n'
conj = conj .. '! style="color:#000; background:#e4d4c0" | we\n'
conj = conj .. '! style="color:#000; background:#e4d4c0" | you\n'
conj = conj .. '! style="color:#000; background:#e4d4c0" | -\n|-\n'
conj = conj .. '! style="height:3em;color:#000; background:#e4d4c0" colspan="1" | presente</br><small>present imperative</small>\n'
conj = conj .. '| style="height:3em;color:#000; background:#f2f2f2;text-align:center" colspan="1" | \n'
conj = conj .. '| style="height:3em;color:#000; background:#f2f2f2;text-align:center" colspan="1" |'.. pres.. '\n'
conj = conj .. '| style="height:3em;color:#000; background:#f2f2f2;text-align:center" colspan="1" | \n'
conj = conj .. '| style="height:3em;color:#000; background:#f2f2f2;text-align:center" colspan="1" |'.. "[[let]]'[[us|s]] ".. inf.. '\n'
conj = conj .. '| style="height:3em;color:#000; background:#f2f2f2;text-align:center" colspan="1" |'.. pres.. '\n'
conj = conj .. '| style="height:3em;color:#000; background:#f2f2f2;text-align:center" colspan="1" | \n'
conj = conj .. '|}'
return conj
end
function p.wiki(x)
-- Utilizzato all'interno della funzione itconj
if x == nil then return " " end
if x == "" then return " " end
-- aggiunge la categoria link rossi
if x == (stem) then --per la voce all'infinito
if x >= "a" and mw.title.new(x).exists == false then
RedCat = "[[Categoria:Verbi inglesi da scrivere|".. mw.title.getCurrentTitle().subpageText.. "]] "
else
RedCat = ""
end
else --per tutte le altre
if x >= "a" and mw.title.new(x).exists == false then
RedCat = "[[Categoria:Verbi inglesi con forme da scrivere|".. mw.title.getCurrentTitle().subpageText.. "]] "
else
RedCat = ""
end
end
-- Rende il suo argomento un wikilink, o lo rende nullo se non definito (per facilitare la concatenazione)
return RedCat.. "[[" .. x .. "#Inglese|" .. x .. "]]"
end
function p.alts(x,y)
-- Utilizzato all'interno della funzione itconj
-- 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 >= "a" then return x .. ", " .. y end
return x
end
return p