Módulo:Argumentos
La documentación para este módulo puede ser creada en Módulo:Argumentos/doc
local z = {}
function z.obtenerArgumentos(frame)
if frame.args[1] then
return frame.args
end
return frame:getParent().args
end
function z.obtenerArgumentosConValor(frame)
if frame == mw.getCurrentFrame() then
argumentos = frame:getParent().args
else
argumentos = frame.args or frame
end
return require('Módulo:Tablas').copiarElementosConValor(argumentos)
end
-- Obtiene os argumentos con valors d\'a plantilla en minúsclas y con as
-- tildes sacadas, en caso de que'n tienga de forma que siga más sencillo
-- treballar con as distintas variants en os módulos.
--
-- Nota: En caso de que i haiga parametros duplicaus dimpués d\'a normalización nomás
-- se mantendrá a zaguera valor procesada por a función.
--
-- Parametros de dentrada:
-- frame: O marco emplegau por o módulo
--
-- Parametros de salida:
-- argumentosNormalizaus: os argumentos con valor y nombre normalizau
-- argumentosDuplicaus: si a plantilla tien quantas vegadas o mesmo
-- argumento dimpués d\'a normalización u no
function z.obtenerArgumentosConValorNormalizaus(frame)
local argumentos = z.obtenerArgumentosConValor(frame)
local argumentosNormalizaus = {}
local nombreNormalizau
local argumentosDuplicaus = false
for nombre, valor in pairs(argumentos) do
nombreNormalizau = nombre
nombreNormalizau = mw.ustring.lower( nombreNormalizau )
nombreNormalizau = string.gsub(nombreNormalizau, "[á]", "a")
nombreNormalizau = string.gsub(nombreNormalizau, "[é]", "e")
nombreNormalizau = string.gsub(nombreNormalizau, "[í]", "i")
nombreNormalizau = string.gsub(nombreNormalizau, "[ó]", "o")
nombreNormalizau = string.gsub(nombreNormalizau, "[úü]", "u")
if argumentosNormalizaus[nombreNormalizau] then
argumentosDuplicaus = true
end
argumentosNormalizaus[nombreNormalizau] = valor
end
return argumentosNormalizaus, argumentosDuplicaus
end
--[[
@name obtenerTablaDArgumentos
@global args
@param frame
@return table
@descr Obtiene una tabla d'argumentos prenendo os parametros recibius
tanto dende a plantilla como dende a invocación d'un módulo.
En caso de duplicau tien preferencia a valor d\'a invocación.
Por eixemplo:
con a plantilla: {{Plantilla |campo=valor |key=clave }}
y a invocación: {{#invoke:Módulo |key=value }}
s'obtiene: { ['campo'] = 'valor', ['key'] = 'value' }
--]]
function z.obtenerTablaDArgumentos(frame)
-- global args
args = {}
local function paramMerge(orig, copy)
local data = {}
for key, val in pairs(orig) do
data[key] = val
end
for key, val in pairs(copy) do
data[key] = val
end
return data
end
if frame then
-- parentArgs = frame:getParent().args or {}
if type(frame.getParent) == 'function' then
local parent = frame:getParent()
if parent then
args = paramMerge(args, parent.args)
end
end
-- invokeArgs = frame.args or frame or {}
if type(frame.args) == 'table' then
args = paramMerge(args, frame.args)
elseif type(frame) == 'table' then
args = paramMerge(args, frame)
end
end
return args
end
--[[
@name obtenerValorDArgumentos
@global args
@param list
@return string or nil
@descr Obtiene o primer argumento valido dende una tabla de parametros.
Ista tabla de parametros ye una lista que contiene os nombres
d'os argumentos u atras tablas con as funcions pa obtener-los.
Parametros:
con os argumentos: { ['campo'] = 'valor', ['key'] = 'value' }
y usando a clamada: obtenerValorDArgumentos{'dato', 'campo', 'key'}
s'obtiene a valor: 'valor'
pues 'dato' no ye un argumento y 'campo' en ye o primero trobau
Funcions:
tamién se puet gritar con una función d\'a forma
obtenerValorDArgumentos{'dato', { obtenerDato, '1', '2' }}
de forma que si l'argumento 'dato' no existe se grita a la función
obtenerDato('1', '2')
--]]
function z.obtenerValorDArgumentos(list)
-- global args
local lang = mw.language.getContentLanguage()
local err, key
if type(list) == 'number' then
key = args[list]
elseif type(list) == 'string' then
key = args[list] or args[lang:ucfirst(list)]
elseif type(list) == 'table' then
for num, val in ipairs(list) do
if type(val) == 'string' then
key = z.obtenerValorDArgumentos(val)
elseif type(val) == 'function' then
err, key = pcall(val)
if err ~= true then
key = nil
end
elseif type(val) == 'table' then
if val[1] and type(val[1]) == 'function' then
err, key = pcall(val[1], unpack(val, 2))
if err ~= true then
key = nil
end
end
end
if key ~= nil and key ~= '' then
return key -- break
end
end
end
return key
end
return z