Modulo:Arguments/man
Questa è la pagina di documentazione per Modulo:Arguments
Modulo Lua per la gestione degli argomenti passati da #invoke. È un metamodulo scritto per essere usato da altri moduli e non dovrebbe essere chiamato direttamente da #invoke. Le sue funzioni includono:
- Rimuovere gli spazi bianchi dall'estremità degli argomenti e rimuovere degli argomenti vuoti.
- Passare gli argomenti sia dal frame corrente che da quello padre allo stesso tempo (vedi sotto per i dettagli).
- Passare gli argomenti direttamente da un altro modulo Lua o dalla console di debug.
- Recuperare gli argomenti solo quando necessario, il che può evitare a risolvere alcuni problemi con il tag
<ref>…</ref>
- Personalizzare molte caratteristiche.
Uso base
Prima di tutto si deve caricare il modulo. Contiene un'unica funzione chiamata getArgs
.
local getArgs = require('Module:Arguments').getArgs
Nello scenario base si può usare getArgs all'interno della funzione principale. La variabile args
è una tabella che dopo la chiamata conterrà gli argomenti provenienti da #invoke (vedi sotto per i dettagli).
local getArgs = require('Module:Arguments').getArgs
local p = {}
function p.main(frame)
local args = getArgs(frame)
-- Main module code goes here.
end
return p
Comunque la pratica raccomandata è di usare una funzione specificatamente per processare gli argomenti di #invoke, in modo che se il modulo è richiamato da un altro modulo Lua, anzichè che da un'istruzione #invoke, non deve avere un oggetto frame disponibile, migliorando così la performance.
local getArgs = require('Module:Arguments').getArgs
local p = {}
function p.main(frame)
local args = getArgs(frame)
return p._main(args)
end
function p._main(args)
-- Main module code goes here.
end
return p
Se si desidera che più funzioni usino gli stessi argomenti e si vuole renderle accessibili da #invoke si può usare una funzione di interfaccia.
local getArgs = require('Module:Arguments').getArgs
local function makeInvokeFunc(funcName)
return function (frame)
local args = getArgs(frame)
return p[funcName](args)
end
end
local p = {}
p.func1 = makeInvokeFunc('_func1')
function p._func1(args)
-- Code for the first function goes here.
end
p.func2 = makeInvokeFunc('_func2')
function p._func2(args)
-- Code for the second function goes here.
end
return p
Opzioni
Sono disponibili le seguenti opzioni, spiegate nelle sezioni che seguono.
local args = getArgs(frame, {
trim = false,
removeBlanks = false,
valueFunc = function (key, value)
-- Code for processing one argument
end,
frameOnly = true,
parentOnly = true,
parentFirst = true,
wrappers = {
'Template:A wrapper template',
'Template:Another wrapper template'
},
readOnly = true,
noOverwrite = true
})
Rimuovere gli spazi bianchi
Gli argomenti vuoti sono spesso un problema per novizi nella conversione di template MediaWiki in Lua. Nella sintassi dei template le stringhe vuote e quelle composte solo da spazi sono considerate false. Comunque in Lua le stringhe vuote o consistenti solo di spazi bianchi sono considerate vere. Questo significa che se non si presta attenzione a questo punto nello scrivere moduli Lua può darsi che si tratti come vero quello che invece si sarebbe desiderato trattare come falso. Per evitare questo problema il modulo rimuove di default tutti gli argomenti vuoti o composti unicamente da spazl
Similmente gli spazi possono causare problemi nel gestire argomenti posizionali. Nei template Mediawiki anche se gli spazi all'inizio o alla fine degli argomenti nominali sono rimossi, vengono invece conservati per gli argomenti posizionali. Poichè nella maggior parte dei casi questo non è il comportamento desiderato il modulo li rimuove per default.
Comunque a volte si devono gestire gli argomenti vuoti in ingresso o mantenere gli spazi bianchi negli argomenti posizionali per convertire i template esattamente come sono stati scritti. In questo caso si possono impostare le opzioni trim
e removeBlanks
a false
.
local args = getArgs(frame, {
trim = false,
removeBlanks = false
})
Formattazione personalizzata degli argomenti
A volte si desidera rimuovere alcuni argomenti vuoti, ma non altri o forse si desidera rendere minuscoli tutti gli argomenti posizionali. Per farlo si può usare l'opzione valueFunc
. L'input di questa opzione deve essere una funzione che riceve due parametri, key
e value
, e ritorna un singolo valore, che viene restituito quando di accede al campo key
nella tabella args
.
Primo esempio: questa funzione conserva gli spazi l }) </source>
Nota: le funzioni sopra falliscono se l'input passato non è del tipo string
o nil
. Questo può avvenire se usate la funzione getArgs
nella funzione principale del vostro modulo e quella funzione è richiamata da un altro modulo Lua. In questo caso occorrerà controllare il tipo dell'input. Questo problema non si pone se si usa una funzione specializzata per gli argomenti provenienti da un #invoke (cioè c'è una funzione p.main
e una p._main
o qualcosa di simile).
Esempio 1:
local args = getArgs(frame, {
valueFunc = function (key, value)
if key == 1 then
return value
elseif type(value) == 'string' then
value = mw.text.trim(value)
if value ~= '' then
return value
else
return nil
end
else
return value
end
end
})
Esempio 2:
local args = getArgs(frame, {
valueFunc = function (key, value)
if type(value) == 'string' then
value = mw.ustring.lower(value)
if mw.ustring.find(value, '%S') then
return value
else
return nil
end
else
return value
end
end
})
Poichè la funzione valueFunc
è chiamata più o meno ogni volta che un argomento viene richiesto dalla tabella args
si deve assicurarsi che il suo codice sia effic