Módulo:Wikidata/Calendata
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.]] ' .. formatear(calendatahora, opcions)
end
end
-- Valor por defecto si no s'ha sabiu formatear usando o calificativo
return formatear(calendatahora, opcions)
end
return p