{{Man modulo}}
Questo [[Aiuto:Moduli|modulo]] costituisce il codice di funzionamento del [[Template:La-conj]] e crea, in base ai parametri inseriti in quest'ultimo, la tabella di coniugazione dei verbi latini. 

Si compone di una funzione principale, '''p.laconj''' (richiamata direttamente nel template) e di quattro funzioni accessorie ('''p.nodiacritic''', '''p.over''', '''p.wiki''', e '''p.alts''') che sono utilizzate solo all'interno della funzione principale per abbreviarne il codice (ad es., la funzione p.wiki rende il suo argomento un [[Aiuto:Wikilink|wikilink]]). Le sezioni seguenti illustrano il loro funzionamento, iniziando da quella principale.

Questo modulo è stato creato nel luglio 2016 a partire dal [[modulo:It-conj]], a sua volta derivato dal [[:en:Module:it-conj|corrispondente modulo]] di en.wikt, la cui [https://en.wiktionary.org/w/index.php?title=Module:it-conj&action=history cronologia] riporta i relativi autori (NB: successive modifiche apportate tanto su en. quanto su it. hanno reso i due moduli molto diversi fra loro, per cui i relativi template potrebbero comportarsi in modo molto differente). Rispetto ai fratelli [[Modulo:It-conj]] e [[Modulo:Fr-conj]] il modulo è molto complesso (e in parte ancora work in progress) fondamentalmente perché il latino è una lingua MOLTO complessa da gestire.

==Funzione p.laconj==
È la funzione principale del modulo; interpreta i parametri inseriti nel template (coniugazione, temi del presente, perfetto, supino e infinito, tipologia del verbo ed eventuali forme irregolari) e in base ad essi costruisce la [[:w:Aiuto:Tabelle|tabella]] che ne costituisce l'output. La funzione internamente è suddivisibile in sottosezioni identificate nel modulo dai <code>-- commenti</code>; tali sottosezioni vengono di seguito brevemente descritte separatamente.

La prima sottosezione definisce le variabili passate al modulo dal template:
* <code>coniug</code> : la coniugazione del verbo (1, 2, 3, 3-io o 4); corrisponde al parametro <code>|coniug =</code> del [[Template:La-conj]]
* <code>temapres</code> : il tema del verbo al presente; corrisponde al parametro <code>|temapres =</code> del [[Template:La-conj]]
* <code>temaperf</code> : il tema del verbo al perfetto; corrisponde al parametro <code>|temaperf =</code> del [[Template:La-conj]]
* <code>temasup</code> : il tema del verbo al supino; corrisponde al parametro <code>|temasup =</code> del [[Template:La-conj]]
* <code>temainf</code> : il tema del verbo all'infinito; corrisponde al parametro <code>|temainf =</code> del [[Template:La-conj]]
* <code>tipo</code> : la tipologia del verbo (deponente, semideponente o privo di passivo); corrisponde al parametro <code>|tipo =</code> del [[Template:La-conj]]
* vi è inoltre un'ulteriore variabile, <code>para</code> , richiamata dal [[Template:La-paradigma]]

Successivamente vengono definite le variabili interne al template, che saranno poi codificate successivamente: ad es. <code>infpres</code> per la voce verbale all'infinito presente, <code>pres1s</code> per la prima persona singolare del presente indicativo, <code>perf1s</code> per la prima persona singolare del perfetto e così via; se si aggiunge una nuova variabile è bene aggiungerla anche a tale lista, altrimenti potrebbe risultare nulla.

Segue poi la costruzione delle voci verbali standard: in base alla coniugazione (<code>coniug</code>) il modulo genera le stringhe per le varie forme flesse unendo radice (<code>tema...</code>) e relativa uscita: ad es. se la coniugazione è la prima (<code>if coniug = "1"</code>), <code>pres1s = stem.. "ō"</code> (''laudō''); <code>perf1s = stem.. "ī"</code> (''laudī'') e così via per le quattro coniugazioni ed eventuali casi particolari. Il modulo gestisce anche le uscite per le forme passive.

Da notare che le uscite hanno i segni di lunga e breve (''-ō''), il modulo crea poi i link corretti ai lemmi senza diacritici grazie alla funzione <code>p.nodiacritic</code> descritta più avanti.


Nella sezione <code>--in base al parametro "tipo"...</code> il modulo gestisce appunto i verbi deponenti, semideponenti o privi di passivo, modificando le voci verbali di conseguenza (il tutto è spiegato nei commenti del modulo e dovrebbe essere comprensibile)

Nella sottosezione identificata da <code>-- Recupera le eventuali forme irregolari o varianti..</code>, le stringhe per le voci verbali così create vengono riunite in stringhe uniche: la funzione p.over sostituisce la forma flessa generata automaticamente con quella eventualmente inserita manualmente nel template, se presente; la funzione p.alts aggiunge alla forma flessa generata automaticamente quella eventualmente inserita manualmente, se presente. Ad es. per il presente indicativo:
* <code>pres1s = p.over(pres1s,args["pres1s"])</code> -> se nel template è inserito il parametro "pres1s=", viene sovrascritto a quello generato automaticamente
* <code>pres1s = p.alts(pres1s, pres1s2)</code> -> se nel template è inserito il parametro "pres1s2=", viene aggiunto accanto a quello generato automaticamente

Vi è poi la sezione <code>-- costruisce il paradigma del verbo richiamando le relative voci verbali</code> e seguenti, che genera la stringa del paradigma inserita poi nella tabella di coniugazione e richiamata dal [[Template:La-paradigma]]. 

Infine, nella sottosezione <code>-- Costruisce la tabella di coniugazione</code> il modulo costruisce la tabella (<code>conj</code>) e vi inserisce le voci verbali precedentemente generate. Il modulo realizza '''due''' diverse tabelle in base al parametro <code>tipo</code> : se il verbo è deponente, semideponente o privo di passivo (ovvero <code>if tipo == "dep" or tipo == "semidep" or tipo == "nopass"</code>) il modulo genera una tabella priva delle sezioni per il passivo, altrimenti (<code>else</code>, riga 622) genera la tabella completa.

Il modulo restituisce la relativa tabella come output (<code>return conj</code>).

==Funzione p.nodiacritic==
La funzione p.nodiacritic (<code>p.nodiacritic(x)</code>) rimuove i diacritici di lunga e di breve per generare i link ai lemmi del wikizionario (che, nel caso del latino, DOVREBBERO essere senza diacritici). In pratica se si scrive ''puĕr'' la funzione restituisce ''puer''

==Funzione p.over==
La funzione p.over (<code>p.over(x,over)</code>) serve per sovrascrivere l'eventuale voce verbale irregolare (identificata dal suo secondo argomento, <code>over</code>), se definita, a quella generata automaticamente (identificata dal primo argomento <code>x</code>). Ad esempio, all'interno della funzione principale il codice 
*<code>pp = p.over(pp,args["pp"])</code>
cerca l'eventuale parametro "pp=" (participio passato) nel template; se questo è definito lo rimpiazza alla forma predefinita, se non lo è restituisce invece quest'ultima.

==Funzione p.wiki==
La funzione p.wiki (<code>p.wiki(x)</code>) rende il suo argomento, <code>x</code>, un wikilink, con "[[:w:Aiuto:Piped_link#Piped_wikilink|pipe]]" alla sezione Latino. In pratica, nel modulo, scrivere <code>p.wiki(qualcosa)</code> equivale al wikicodice <nowiki>[[qualcosa#Latino|qualcosa]]</nowiki>.

Inoltre, la funzione controlla, tramite la funzione standard di Scribunto [[:mw:Extension:Scribunto/Lua_reference_manual#mw.title.new|mw.title.new(x).exists]] (si veda anche [[:en:Wiktionary:Scribunto/Converting_templates#Ifexist|qui]]) se la pagina a cui punta tale link esiste o meno (funziona in modo molto simile alla [[:w:Aiuto:Funzioni parser|funzione parser]] ''ifexist'' del codice mediawiki). Se la pagina non esiste, aggiunge al wikilink la [[:Categoria:Verbi latini con forme da scrivere]], e/o la [[:Categoria:Verbi latini da scrivere]] se ad essere rosso è il link verso la forma all'infinito.

==Funzione p.alts==
La funzione p.alts (<code>p.alts(x, y)</code>) aggiunge l'eventuale variante alternativa (identificata dal suo secondo argomento, <code>y</code>), se definita, accanto a quella generata automaticamente (identificata dal primo argomento <code>x</code>), separandola con una virgola. Ad esempio, all'interno della funzione principale, il codice
*<code>pp = p.alts(pp, pp2)</code> 
cerca l'eventuale parametro "pp2=" (variante del participio passato) nel template; se questo è definito lo aggiunge al seguito di quella base, se non lo è restituisce invece solo quest'ultima.

<noinclude>[[Categoria:Manuali dei moduli|La-conj]]</noinclude>
<includeonly>[[Categoria:Moduli|La-conj]]</includeonly>