Módulo:Wikidata/Calendata

De Biquipedia

La documentación para este módulo puede ser creada en Módulo:Wikidata/Calendata/doc

local p = {}
local Calendatas = require( 'Módulo:Calendatas')
local Romans = require('Módulo:Numeros').Roman
local enlace

local function enlazar(etiqueta)
    if enlace == 'no' then
        return etiqueta
    else
        return '[['.. etiqueta ..']]'
    end
end

function formatear(calendatahora, opcions)
	if opcions['formatoCalendata'] == 'timestamp' then
		return calendatahora.time
	end

	if calendatahora == nil then
		return 'desconocida'
	end

    local etiqueta  = calendatahora.label
    local timestamp = calendatahora.time
    local precision = calendatahora.precision    

    -- Decodificar o timestamp.
    --if true then return timestamp end
    local signo, anyoSinSigno, mes, dia = timestamp:match("(%W)(%d+)%-(%d+)%-(%d+)")
    
    anyoSinSigno = tonumber(anyoSinSigno)
    
     -- Obtener l'era
    local era = ''
    
    if signo == '-' then
        era = ' a. C.'
        anyoConSigno = - anyoSinSigno
    elseif anyoSinSigno == 0 then -- Por comprobar si aún es así.
        anyoSinSigno         = 1
        anyoConSigno = -1
        era = ' a. C.'
    else
        anyoConSigno = anyoSinSigno
    end
    
    -- Informar o calandario
    local calandario 
    local amostrarCalandario = ''
    
    if calendatahora.calendarmodel == 'http://www.wikidata.org/entity/Q1985786' then
        calandario = 'chulián'
        amostrarCalandario = '<sup>chulián</sup>'
    else
        calandario = 'gregorián'
    end

    -- Informar o enlace emplegau en a función enlazar. PARA CUENTA: No s'ha de definir como local
    enlace    = opcions.enlace

    if precision == 11 then      -- Calendata d\'a que se conoixe l'anyo, o mes y o día
        if opcions['formatoCalendata'] == 'anyo' then
            return enlazar(anyoSinSigno) .. amostrarCalandario .. era -- Tornar nomás l'anyo
        else
           return Calendatas.Calendata({dia,mes,anyoConSigno;enlace=opcions.enlace;calandario=calandario;['mayúscla']=opcions['mayúscla']})
        end
    elseif precision == 10 then  -- Calendata d\'a que se conoixe l'anyo y o mes
        if opcions['formatoCalendata'] == 'anyo' then
            return enlazar(anyoSinSigno) .. amostrarCalandario .. era -- Devolver solo l'anyo
        else
            return Calendatas.Calendata({'',mes,anyoConSigno;enlace=opcions.enlace;calandario=calandario;['mayúscla']=opcions['mayúscla']})        
        end
    elseif precision == 9  then  -- Calendata d\'a que se conoixe l'anyo
        return Calendatas.Calendata({'','',anyoConSigno;enlace=opcions.enlace;calandario=calandario;['mayúscla']=opcions['mayúscla']})        
    elseif precision == 8  then  -- Calendata d\'a que se conoixe a decada
        local decada = math.floor(anyoSinSigno/10)*10
        return enlazar('anyos '.. decada .. era) .. amostrarCalandario            
    elseif precision == 7  then  -- Calendata d\'a que se conoixe el sieglo
        --Ejemplos: 
        --   Eleno de Cespedes		+1600-00-00T00:00:00Z --> sieglo XVI
        --   Margarita Armand Ugón	+1901-00-00T00:00:00Z --> sieglo XX
        --   Aeropo I				-0700-01-01T00:00:00Z --> sieglo VII a. C.
        --   						-0600-01-01T00:00:00Z --> sieglo VI a. C.
        local sieglo = Romans(math.floor((anyoSinSigno - 1)/100) + 1)
        
        if opcions['mayúscla'] == 'sí' then
            return enlazar('Sieglo ' .. sieglo .. era)    .. amostrarCalandario
        else
            return enlazar('sieglo ' .. sieglo .. era)    .. amostrarCalandario        
        end
    elseif precision == 6  then  -- Calendata d\'a que se conoixe el milenio
        local milenio = Romans(math.floor(anyoSinSigno/1000))
        return enlazar(milenio .. ' milenio'.. era).. amostrarCalandario
    elseif precision == 5  then  -- Calendata d\'a que se conoixe 10 000 anyos
         local milenio =  Romans(math.floor(anyoSinSigno/1000))
        return enlazar(milenio .. ' milenio'.. era)
    elseif precision == 4  then  -- Calendata d\'a que se conoixe 100 000 anyos 
          local milenio =  Romans(math.floor(anyoSinSigno/1000))
        return enlazar(milenio.. ' milenio'.. era)       
    elseif precision == 3  then  -- Calendata d\'a que se conoixe los millons d'anyos
        return math.floor(anyoSinSigno/1000000) .. ' millons d\'anyos' .. era  
    elseif precision == 2  then  -- Calendata d\'a que se conoixe os 10 millons d'anyos
        return math.floor(anyoSinSigno/1000000) .. ' millons d\'anyos' .. era 
    elseif precision == 1  then  -- Calendata d\'a que se conoixe os 100 millons d'anyos
        return math.floor(anyoSinSigno/1000000) .. ' millons d\'anyos' .. era 
    else
        return "<span class=error>Tipo de dato desconoixiu.</span>"        
    end    
end

function p.FormateaCalendataHora(calendatahora, opcions, calificativos)
    local idCircunstancia
        
    if calificativos                          and
       calificativos["P1480"]                 and -- circunstancias d\'a referencia
       calificativos["P1480"][1]              and
       calificativos["P1480"][1]['datavalue'] and
       calificativos["P1480"][1]['datavalue']['value'] then
               
        idCircunstancia = calificativos["P1480"][1]['datavalue']['value']['numeric-id']
               
        if idCircunstancia == 5727902 then -- circa
            return '[[circa|c.]]&nbsp;' .. formatear(calendatahora, opcions)
        end
    end
    
    -- Valor por defecto si no s'ha sabiu formatear usando o calificativo
    return formatear(calendatahora, opcions)
end

return p