Módulo:Calendatas
La documentación para este módulo puede ser creada en Módulo:Calendatas/doc
local z = {}
local meses = {
'chinero','febrero','marzo','abril','mayo','chunio','chulio','agosto','setiembre','octubre','noviembre','aviento'}
function z.NombreDoMes(mes)
-- Función que torna o nombre d'o mes, a on mes ye un numero entre 1 y 12.
-- Si no ye asinas se torna a valor de mes.
-- Por eixemplo, 2 --> febrero
-- 02 --> febrero
-- abril --> abril
-- MAYO --> MAYO
return meses[tonumber(mes)] or mes
end
function z.Calendata(frame)
-- Función que formatea una calendata
-- L'unico parametro obligatorio ye l'anyo u 3.
-- Obtener os argumentos con os que se grita a la función
local argumentos = {}
local parent = {}
if frame == mw.getCurrentFrame() then
if frame.args[3] or frame.args["anyo"] then
argumentos = frame.args
else
parent = frame:getParent()
argumentos = parent.args
end
else
argumentos = frame
end
local enlace = argumentos["enlace"] ~= "no"
-- Obtener o día, o nombre d'o mes y l'anyo incluyindo pa os anyos negativos a.d.
local dia = argumentos["día"] or argumentos[1] or ''
if dia ~='' then
dia=tonumber(dia) or dia -- Eliminar ceros a la izquierda d'o día.
end
local mes = argumentos["mes"] or argumentos[2] or ''
if mes~='' then
mes =meses[tonumber(mes)] or mes
end
local anyo=tonumber(argumentos["anyo"] or argumentos[3]) or 0
if anyo < 0 then
anyo = -anyo .. ' a. C.'
end
local calandario = ''
if argumentos["calandario"] == 'chulián' then
calandario = '<sup>[[Calandario chulián|chul.]]</sup>'
end
local dee = 'a'
-- Formatear a calendata pendendo de si o día, o mes u l'anyo son informaus
if dia ~='' then
if enlace and (mes == 'abril' or mes == 'agosto' or mes == 'octubre' or mes == 'aviento') then
return '[[' .. dia .. ' d\'' .. mes .. ']] de [[' .. anyo .. ']]' .. calandario
elseif enlace then
return '[[' .. dia .. ' de ' .. mes .. ']] de [[' .. anyo .. ']]' .. calandario
elseif not enlace and (mes == 'abril' or mes == 'agosto' or mes == 'octubre' or mes == 'aviento') then
return '[[' .. dia .. ' d\'' .. mes .. ']] de [[' .. anyo .. ']]' .. calandario
else
return dia .. ' de ' .. mes .. ' de ' .. anyo .. calandario
end
elseif mes~='' then
if argumentos["mayúscla"] == 'sí' then
mes = mw.language.new('an'):ucfirst(mes)
end
if enlace then
return '[[' .. mes .. ']] de [[' .. anyo .. ']]'
else
return mes .. ' de ' .. anyo
end
elseif anyo ~= 0 then
if enlace then
return '[[' .. anyo .. ']]'
else
return tostring(anyo)
end
end
end
function getNumeroMes(nombreMes)
local numeroMes = ''
local nombreMeses = {
['01'] = 'chinero', ['02'] = 'febrero', ['03'] = 'marzo', ['04'] = 'abril', ['05'] = 'mayo', ['06'] = 'chunio', ['07'] = 'chulio', ['08'] = 'agosto',
['09'] = 'setiembre', ['9'] = 'setiembre', ['10'] = 'octubre', ['11'] = 'noviembre', ['12'] = 'aviento'
}
for k, n in pairs(nombreMeses) do
if nombreMeses[k] == mw.ustring.lower(nombreMes) then
numeroMes = k
end
end
if numeroMes == nil or numeroMes == '' then
numeroMes = '00'
end
return numeroMes
end
function setString(cadena)
local dia, mes, anyo
local error = '<strong class="error">Cadena de fecha no válida</strong>'
local valorDia = mw.ustring.gsub(cadena,'(%d+) de %a+ d\'o? %d+.*','%1')
if valorDia == nil or valorDia == '' or mw.ustring.len(valorDia) > 2 or type(tonumber(valorDia)) ~= 'number' then
return error
else
dia = mw.ustring.format('%02d', tonumber(valorDia))
end
local valorMes = getNumeroMes(mw.ustring.gsub(cadena,'%d+ de (%a+) d\'o? %d+.*','%1'))
if valorMes == '00' then
return error
else
mes = mw.ustring.format('%02d',tonumber(valorMes))
end
local valorAnyo = mw.ustring.gsub(cadena,'%d+ de %a+ d\'o? (%d+).*','%1')
if valorAnyo == nil or valorAnyo == '' or type(tonumber(valorAnyo)) ~= 'number' then
return error
else
anyo = mw.ustring.format('%04d',tonumber(valorAnyo))
end
local newCadena = anyo..mes..dia
return newCadena
end
function z.Numerica(frame)
return setString(frame.args[1])
end
return z