Este módulo permite que os argumentos sejam fundidos e normalizados. Isso também tem o efeito colateral de tornar os argumentos uma tabela real em vez de uma tabela vazia com um metatable para acessar os args. Isso permite que o operador #
trabalhe, além de permitir que novos valores sejam adicionados à tabela, sem serem ignorados ao iterar.
A função norm
irá normalizar os argumentos passados para ela, aparar espaços em branco e definir argumentos vazios para nil
. Se uma tabela não for passada pela função, ela obterá automaticamente a tabela de argumentos pai atual da tabela.
A função merge
irá juntar duas tabelas, sobrescrevendo valores duplicados da segunda tabela com o valor da primeira tabela, bem como fazer o mesmo que a função norm
Se o parâmetro norm for true
.
Se o primeiro parâmetro não for uma tabela, ele será usado como o valor para o parâmetro de norm, e ele automaticamente obterá a tabela de argumentos passados diretamente da tabela atual e mesclá-lo-á com a tabela de argumentos pai da tabela atual.
local p = {}
function p.norm( origArgs )
if type( origArgs ) ~= 'table' then
origArgs = mw.getCurrentFrame():getParent().args
end
local args = {}
for k, v in pairs( origArgs ) do
v = mw.text.trim( tostring( v ) )
if v ~= '' then
args[k] = v
end
end
return args
end
function p.merge( origArgs, parentArgs, norm )
if type( origArgs ) ~= 'table' then
norm = origArgs
local f = mw.getCurrentFrame()
origArgs = f.args
parentArgs = f:getParent().args
end
local args = {}
for k, v in pairs( origArgs ) do
v = mw.text.trim( tostring( v ) )
if not norm or v ~= '' then
args[k] = v
end
end
for k, v in pairs( parentArgs ) do
v = mw.text.trim( v )
if not norm or v ~= '' then
args[k] = v
end
end
return args
end
return p