Этот модуль позволяет объединять и нормализовывать аргументы. У него есть побочный эффект, заключающийся в том, что аргументы становятся настоящей таблицей, а не пустой таблицей с метатаблицей, обеспечивающей доступ к аргументам. Это позволяет работать оператору #
, а также позволяет добавлять в таблицу новые значения, чтобы они не игнорировались при итерации.
Функция norm
нормализует переданные ей аргументы, удаляя предшествующие и завершающие пробелы и устанавливая пустые аргументы как равные nil
. Если функции не передана таблица, она автоматически получит таблицу аргументов объекта-родителя текущего фрейма. [перевод?]
Функция merge
объединит две таблицы, перезаписывая дублирующие значения во второй таблице значениями из первой таблицы, а также, если параметр norm
равен true
, выполняя действия функции norm
.
Если первый параметр не является таблицей, он используется в качестве значения для параметра norm
, он автоматически получит таблицу напрямую переданных аргументов текущего фрейма и объединит её с таблицей аргументов объекта-родителя текущего фрейма.
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 norm and v ~= '' then
args[k] = v
end
end
for k, v in pairs( parentArgs ) do
v = mw.text.trim( v )
if ( not norm or norm and v ~= '' ) and not args[k] then
args[k] = v
end
end
return args
end
return p