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