Modulo:Datoj
[antaŭrigardi] [redakti] [historio] [renovigi]
Dokumentado
Ŝablona programado | Diskutoj | Lua | Testoj | Subpaĝoj | |||
---|---|---|---|---|---|---|---|
Modulo | Esperanto | English
|
Modulo: | Dokumentado |
Se vi havas demandon pri ĉi tiu Lua-modulo, tiam vi povas demandi en la diskutejo pri Lua-moduloj. La Intervikiaj ligiloj estu metataj al Vikidatumoj. (Vidu Helpopaĝon pri tio.) |
|
-- modulo Datoj -- 2022-09-06
-- ĉi tiu modulo celas plibonigi la jenajn ŝablonojn:
-- {{dato}},
-- {{daton}},
-- {{Naskiĝdato}}
-- {{Naskiĝdato kaj aĝo}}
-- {{Aĝo}}
-- {{Mortodato}}
-- kaj {{Mortodato kaj aĝo}}
-- variablon por ĉiuj funcioj
-- analizo de la nomspaco
currentTitle = mw.title.getCurrentTitle()
local ns = currentTitle.namespace
-- internaj funkcioj
-- kopio el Modulo:Biografio/provejo, ĉar alie rezultas erarmesaĝo de Lua, ĉar
-- Datoj/provejo jam estas vokata de Modulo:Biografio/provejo
local function paghenamebase ()
local frame = mw.getCurrentFrame()
local n = frame:expandTemplate {
title="PAGENAMEBASE",
}
return n
end
function monatonumero(m)
local m1 = ""
if m == 1 then
m1 = "januaro"
elseif m == 2 then
m1 = "februaro"
elseif m == 3 then
m1 = "marto"
elseif m == 4 then
m1 = "aprilo"
elseif m == 5 then
m1 = "majo"
elseif m == 6 then
m1 = "junio"
elseif m == 7 then
m1 = "julio"
elseif m == 8 then
m1 = "aŭgusto"
elseif m == 9 then
m1 = "septembro"
elseif m == 10 then
m1 = "oktobro"
elseif m == 11 then
m1 = "novembro"
elseif m == 12 then
m1 = "decembro"
end
return m1
end -- fino monatonumero
function monatoteksto(m)
local m1 = ""
local eraro = false
-- se la dua parametro de {{dato}} aŭ {{daton}} forestas kaj anstataŭ tio estas jaro
local n = tonumber(m)
if n ~= nil then
eraro = true
m1 = ""
return m1, eraro
end
local t = mw.ustring.lower(m)
if t == "januaro" or t == "jan" then
m1 = "januaro"
elseif t == "februaro" or t == "feb" then
m1 = "februaro"
elseif t== "marto" or t == "mar" then
m1 = "marto"
elseif t == "aprilo" or t == "apr" then
m1 = "aprilo"
elseif t == "majo" or t == "maj" then
m1 = "majo"
elseif t == "junio" or t == "jun" then
m1 = "junio"
elseif t == "julio" or t == "jul" then
m1 = "julio"
elseif t == "aŭgusto" or t == "aŭg" then
m1 = "aŭgusto"
elseif t == "septembro" or t == "sep" then
m1 = "septembro"
elseif t == "oktobro" or t == "okt" then
m1 = "oktobro"
elseif t == "novembro" or t == "nov" then
m1 = "novembro"
elseif t == "decembro" or t == "dec" then
m1 = "decembro"
else
m1 = ""
eraro = true
end
return m1, eraro
end -- fino monatoteksto
-- redonu la numeron de monato ricenante ĝian nomon
function monatoalnumero (m)
local r = ""
m = mw.ustring.lower(m)
if m == "januaro" or m == "jan" then
r = "01"
elseif m == "februaro" or m == "feb" then
r = "02"
elseif m== "marto" or m == "mar" then
r = "03"
elseif m == "aprilo" or m == "apr" then
r = "04"
elseif m == "majo" or m == "maj" then
r = "05"
elseif m == "junio" or m == "jun" then
r = "06"
elseif m == "julio" or m == "jul" then
r = "07"
elseif m == "aŭgusto" or m == "aŭg" then
r = "08"
elseif m == "septembro" or m == "sep" then
r = "09"
elseif t == "oktobro" or m == "okt" then
r = "10"
elseif m == "novembro" or m == "nov" then
r = "11"
elseif m == "decembro" or m == "dec" then
r = "12"
end
return r
end -- fino monatoalnumero
-- transprentita el Modulo:Biografio/provejo, ĉar la modulo Datoj estas pli taŭga por la funkcio
-- krome nun aliaj moduloj povas enplekti ĝin el la modulo Datoj
-- nj = naskigjaro, nm = naskiĝmonato, nt = naskiĝtago, mj = mortojaro, mm = mortomonato, mt = mortotago
-- ordigo = ordigŝlosilo
local function agho (nj,nm,nt,mj,mm,mt,ordigo,kat)
local r = ""
-- jen kodopeco, kiu certigu, ke nur numeroj estos traktataj
local test = tonumber(nj) and tonumber(nm) and tonumber(nt)
if test == nil then return r end
d=os.time{year=nj, month=nm, day=nt}
if mj ~= "" and mm ~="" and mt ~= "" then
-- jen kodopeco, kiu certigu, ke nur numeroj estos traktataj
local test = tonumber(mj) and tonumber(mm) and tonumber(mt)
if test == nil then return r end
f=os.time{year=mj, month=mm, day=mt}
else
f=os.time()
end
r = math.floor((f-d)/3600/24/365.25)
if ordigo == "" then
ordigo = paghenamebase()
end
if ns == 0 then
if r > 99 and kat ~= "ne" then
r = r .. "[[Kategorio:Centjaruloj|" .. ordigo .. "]]"
end
end
return r
end
local p = {}
-- funkcioj, kiuj transprenas ion el Vikidatumoj per helpo de la modulo WikidataBiografio
local wd = require("Modulo:WikidataBiografio")
-- kopiitaj el la modulo WikidataBiografio/provejo
-- funkcioj por tekstoj en aliaj moduloj
function p.Nteksto()
if wd.Ntago() == "" or wd.Nmonato == "" then return "en " .. p.Nkesto() else return "la " .. p.Nkeston() end
end
function p.Mteksto()
if wd.Mtago() == "" then return "en " .. p.Mkesto() else return "la " .. p.Mkeston() end
end
function p.teksto()
local nloko=wd.naskiloko() or ""
local mloko=wd.mortloko() or ""
if nloko ~= "" then
nloko = "en [[" .. nloko .. "]]"
end
if mloko ~= "" then
mloko = "en [[" .. mloko .. "]]"
end
local t=" (naskiĝis " .. Nteksto() .. nloko .. ", mortis " .. Mteksto() .. mloko .. ")"
return t
end
function p.Nkesto()
return p._dato(wd.Ntago(),wd.Nmonato(),wd.Njaro())
end
function p.Mkesto()
return p._dato(wd.Mtago(),wd.Mmonato(),wd.Mjaro())
end
function p.Nkeston()
return p._daton(wd.Ntago(),wd.Nmonato(),wd.Njaro())
end
function p.Mkeston()
return p._daton(wd.Mtago(),wd.Mmonato(),wd.Mjaro())
end
-- por elvokoj el aliaj moduloj
-- t = tago, m = monato, j = jaro
function p._dato(t,m,j,ar,ligilo)
if t ~= "" and m == "" and j == "" then
local count = 0
for eachMatch in t:gmatch("-") do count = count + 1 end
local pos, arr = 0, {}
for st,sp in function() return string.find(t,"-",pos,true) end do
table.insert(arr,string.sub(t,pos,st-1))
pos = sp + 1
end
table.insert(arr,string.sub(t,pos))
if count == 0 then
--return p._dato("", "", arr[1])
t = ""
m = ""
j = arr[1]
elseif count == 1 then
--return p._dato("", arr[2], arr[1])
t = ""
m = arr[2]
j = arr[1]
elseif count > 1 then
--return p._dato(arr[3], arr[2], arr[1])
t = arr[3]
m = arr[2]
j = arr[1]
end
end
-- ar - artikolo aŭ io tia
if ar == "" or ar == nil then
ar = ""
elseif ar ~= "" then
ar = ar .. " "
end
if ligilo == nil then
ligilo = ""
end
if t == nil and m == nil and j == nil then
return ""
else
if t == nil or m == nil then
t = ""
m = ""
end
if j == nil then
j = ""
end
end
local p1 = "" -- parto 1
local p1komenco = ""
local p1fino = ""
if ligilo ~= "ne" then
p1komenco = "[["
p1fino = "]]"
end
local spaco = ""
local p2 = "" -- parto 2
if t ~="" then
local ttest = tonumber(t)
if type(ttest) == "number" then
t = t * 1 -- forigas komencajn nulojn
p1 = ar .. p1komenco .. t
else
t = ""
end
end
if t ~= "" and m ~= "" then
p1 = p1 .. "-a de"
spaco = " "
end
if t == "" and m ~= "" then
p1 = p1komenco
end
if m ~= "" then
local mtest = tonumber(m) or m
if type(mtest) == "number" and mtest >0 and mtest < 13 then
local m1 = monatonumero(mtest)
p1 = p1 .. spaco .. m1
p1 = p1 .. p1fino
else
local m1, testo = monatoteksto(mtest)
if testo == false then -- ĝusta nomo de monato
p1 = p1 .. spaco .. m1
p1 = p1 .. p1fino
else -- malĝusta nomo
p1 = ""
end
end
end
if t ~= "" and m == "" then
p1 = p1 .. p1fino
end
if t ~= "" or m ~= "" then
if j ~="" and p1 ~= "" then
p1 = p1 .. " "
end
end
if j ~="" then
local testo = tonumber(j)
if type(testo) == "number" then
j = j * 1 -- forigas komencajn nulojn
p2 = p1komenco .. j .. p1fino
else
p2 = j
end
end
local r = p1 .. p2
return r
end
-- t = tago, m = monato, j = jaro
function p._daton(t,m,j,ar,ligilo)
if t ~= "" and m == "" and j == "" then
local count = 0
for eachMatch in t:gmatch("-") do count = count + 1 end
local pos, arr = 0, {}
for st,sp in function() return string.find(t,"-",pos,true) end do
table.insert(arr,string.sub(t,pos,st-1))
pos = sp + 1
end
table.insert(arr,string.sub(t,pos))
if count == 0 then
--return p._daton("", "", arr[1])
t = ""
m = ""
j = arr[1]
elseif count == 1 then
--return p._daton("", arr[2], arr[1])
t = ""
m = arr[2]
j = arr[1]
elseif count > 1 then
--return p._daton(arr[3], arr[2], arr[1])
t = arr[3]
m = arr[2]
j = arr[1]
end
end
-- ar - artikolo aŭ io tia
if ar == "" or ar == nil then
ar = ""
elseif ar ~= "" then
ar = ar .. " "
end
if ligilo == nil then
ligilo = ""
end
if t == nil and m == nil and j == nil then
return ""
else
if t == nil or m == nil then
t = ""
m = ""
end
if j == nil then
j = ""
end
end
local p1 = "" -- parto 1
local p1komenco = ""
local p1mezo = ""
local p1teksto = ""
local p1fino = ""
local p2fino = ""
if ligilo ~= "ne" then
p1komenco = "[["
p1mezo = "|"
p1fino = "]]"
p2fino = "]]"
end
local p2 = "" -- parto 2
local spaco = ""
if t ~="" then
local ttest = tonumber(t)
if type(ttest) == "number" then
t = t * 1 -- forigas komencajn nulojn
p1 = ar .. p1komenco .. t
else
t = ""
end
end
if t ~= "" and m ~= "" then
p1 = p1 .. "-a de"
p1teksto = "-an de"
spaco = " "
end
if t == "" and m ~= "" then
p1 = p1komenco
p1fino = "n" .. p1fino
end
if m ~= "" then
local mtest = tonumber(m) or m
if type(mtest) == "number" and mtest >0 and mtest < 13 then
local m1 = monatonumero(mtest)
if ligilo ~= "ne" then
p1 = p1 .. spaco .. m1
p1 = p1 .. p1mezo
else
p1 = ar
end
p1 = p1 .. t .. p1teksto
p1 = p1 .. spaco .. m1
p1 = p1 .. p1fino
else
local m1, testo = monatoteksto(mtest)
if testo == false then -- ĝusta nomo de monato
if ligilo ~= "ne" then
p1 = p1 .. spaco .. m1
p1 = p1 .. p1mezo
else
p1 = ar
end
p1 = p1 .. t .. p1teksto
p1 = p1 .. spaco .. m1
p1 = p1 .. p1fino
else -- malĝusta nomo
p1 = ""
end
end
end
if t ~= "" or m ~= "" then
if j ~="" and p1 ~="" then
p1 = p1 .. " "
end
end
if j ~="" then
local testo = tonumber(j)
if type(testo) == "number" then
j = j * 1 -- forigas komencajn nulojn
p2 = p1komenco .. j .. p2fino
else
p2 = j
end
end
local r = p1 .. p2
return r
end
-- aranĝas la mikroformatojn por la naskiĝdato
function nmikro (t,m,j)
local mikro = "" -- mikroformato
-- <span style="display:none">(nun <span class="bday">{{{1|{{{jaro|}}}}}}-{{ducifera nombro|{{{2|{{{monato|}}}}}}}}-{{ducifera nombro|{{{3|{{{tago|{{{3}}}}}}}}}}}</span>)</span>
mikro = '<span style="display:none">'
mikro = mikro .. '(nun <span class="bday">'
local test = tonumber(m)
if type(test) == "number" then
m = m * 1 -- espereble tio forigas komencajn nulojn
if test >0 and test <10 then
m = "0" .. m
end
else
local m1 = monatoalnumero (m)
if m1 ~= "" then -- ĝusta nomo de monato
m = m1
else
m = "00"
end
end
t = tonumber(t)
if type(t) == "number" then
t = t * 1 -- espereble tio forigas komencajn nulojn
if t >0 and t <10 then
t = "0" .. t
end
else
t = "00"
end
mikro = mikro .. j .. "-" .. m .. "-" .. t
mikro = mikro .. "</span>)</span>"
return mikro
end
function p._naskdato(t,m,j,a)
local teksto = ""
local r = ""
local mikro = "" -- mikroformato
local ar = "la "
a = mw.ustring.lower(a)
if a == "yes" or a == "jes" or a == "" then
teksto = p._daton(t,m,j,ar)
else
teksto = p._dato(t,m,j,ar)
end
if teksto ~= "" then
r = teksto
mikro = nmikro(t,m,j)
if mikro ~= "" then
r = r .. mikro
end
end
return r
end
function p._naskdatoagho(t,m,j,a,k)
local teksto = ""
local agho1 = ""
teksto = p._naskdato(t,m,j,a)
-- aldoni aĝon
if teksto ~= "" then
--<span class="noprint"> ({{aĝo| {{{1|{{{jaro|{{{1}}}}}}}}} | {{{2|{{{monato|{{{2}}}}}}}}} | {{{3|{{{tago|{{{3}}}}}}}}}| {{{4|{{CURRENTYEAR}}}}} | {{{5|{{CURRENTMONTH}}}}} | {{{6|{{CURRENTDAY}}}}} }}-jara)</span>
local testo = tonumber(m)
if type(testo) == "number" then
agho1 = agho(j,m,t,"","","","",k)
else
local mt = monatoalnumero (m)
agho1 = agho (j,mt,t,"","","","",k)
end
if agho1 ~= "" then
teksto = teksto .. '<span class="noprint"> (' .. agho1 .. "‑jara)</span>"
end
end
return teksto
end
function p._agho(t1,m1,j1,t2,m2,j2,a,jara,ordigo,k)
local teksto = ""
local agho1 = ""
local ja = jara
-- aldono de akuzativo, se samtempe "-jara" estas aldonata
a = mw.ustring.lower(a)
if a == "jes" or a == "yes" then
a = "n"
end
-- analizo, ĉu monato estas numero aŭ vorto
local testo = tonumber(m1)
if type(testo) ~= "number" then
m1 = monatoalnumero (m1)
end
local testo = tonumber(m2)
if type(testo) ~= "number" then
m2 = monatoalnumero (m2)
end
agho1 = agho(j1,m1,t1,j2,m2,t2,ordigo,k)
if agho1 ~= "" and ja == "jes" then
teksto = teksto .. '<span class="noprint"> (' .. agho1 .. "‑jara" .. a .. ")</span>"
elseif agho ~= "" then
teksto = agho1
end
return teksto
end
function p._mortodatoagho(t1,m1,j1,t2,m2,j2,a,k)
local teksto = ""
local agho1 = ""
local ja = jara
a = mw.ustring.lower(a)
if a == "yes" or a == "jes" or a == "" then
teksto = p._daton(t1,m1,j1)
else
teksto = p._dato(t1,m1,j1)
end
-- aldoni aĝon
if teksto ~= "" then
teksto = "la " .. teksto
-- analizo, ĉu monato estas numero aŭ vorto
local testo = tonumber(m1)
if type(testo) ~= "number" then
m1 = monatoalnumero (m1)
end
local testo = tonumber(m2)
if type(testo) ~= "number" then
m2 = monatoalnumero (m2)
end
agho1 = agho(j2,m2,t2,j1,m1,t1,"",k)
if agho1 ~= "" then
teksto = teksto .. '<span class="noprint"> (' .. agho1 .. "‑jara)</span>"
end
end
return teksto
end
function p._mortodato (t,m,j,a)
local teksto = ""
a = mw.ustring.lower(a)
if a == "yes" or a == "jes" or a == "" then
teksto = p._daton(t,m,j)
else
teksto = p._dato(t,m,j)
end
if teksto ~= "" then
teksto = "la " .. teksto
end
return teksto
end
-- funkcioj por #invoke kaj ŝablonoj
function p.dato(frame)
local args = frame.args
local pargs = frame:getParent().args
local arg1 = args[1] or pargs[1] or ""
local arg2 = args[2] or pargs[2] or ""
local arg3 = args[3] or pargs[3] or ""
local ar = args["ar"] or pargs["ar"] or ""
local ligilo = args["ligilo"] or pargs["ligilo"] or ""
return p._dato(arg1, arg2, arg3, ar, ligilo)
end
function p.daton(frame)
local args = frame.args
local pargs = frame:getParent().args
local arg1 = args[1] or pargs[1] or "" -- tago
local arg2 = args[2] or pargs[2] or "" -- monato
local arg3 = args[3] or pargs[3] or "" -- jaro
local ar = args["ar"] or pargs["ar"] or ""
local ligilo = args["ligilo"] or pargs["ligilo"] or ""
return p._daton(arg1, arg2, arg3, ar, ligilo)
end
function p.naskdato(frame)
local args = frame.args
local pargs = frame:getParent().args
local j = args[1] or args["jaro"] or pargs[1] or pargs["jaro"] or "" -- tago
local m = args[2] or args["monato"] or pargs[2] or pargs["monato"] or "" -- monato
local t = args[3] or args["tago"] or pargs[3] or pargs["tago"] or "" -- jaro
local a = args["akuzativo"] or pargs["akuzativo"] or ""
-- elvoko de la funkcio p._naskdato(), sed kun inversa sekvo de la la tri parametroj por la dato
return p._naskdato(t,m,j,a)
end
function p.naskdatoagho(frame)
local args = frame.args
local pargs = frame:getParent().args
local j = args[1] or args["jaro"] or pargs[1] or pargs["jaro"] or "" -- tago
local m = args[2] or args["monato"] or pargs[2] or pargs["monato"] or "" -- monato
local t = args[3] or args["tago"] or pargs[3] or pargs["tago"] or "" -- jaro
local a = args["akuzativo"] or pargs["akuzativo"] or ""
local k = args["centjarulo"] or pargs["centjarulo"] or ""
-- elvoko de la funkcio p._naskdatoagho(), sed kun inversa sekvo de la la tri parametroj por la dato
return p._naskdatoagho(t,m,j,a,k)
end
function p.agho(frame)
local args = frame.args
local pargs = frame:getParent().args
-- naskiĝdato
local j1 = args[1] or args["jaro1"] or pargs[1] or pargs["jaro1"] or "" -- tago1
local m1 = args[2] or args["monato1"] or pargs[2] or pargs["monato1"] or "" -- monato1
local t1 = args[3] or args["tago1"] or pargs[3] or pargs["tago1"] or "" -- jaro1
-- mortodato aŭ aktuala dato
local j2 = args[4] or args["jaro2"] or pargs[4] or pargs["jaro2"] or "" -- tago2
local m2 = args[5] or args["monato2"] or pargs[5] or pargs["monato2"] or "" -- monato2
local t2 = args[6] or args["tago2"] or pargs[6] or pargs["tago2"] or "" -- jaro2
local a = args["akuzativo"] or pargs["akuzativo"] or ""
local jara = args["jara"] or pargs["jara"] or ""
local ordigo = args["ordigo"] or pargs["ordigo"] or ""
local k = args["centjarulo"] or pargs["centjarulo"] or ""
-- elvoko de la funkcio p._naskdatoagho(), sed kun inversa sekvo de la la tri parametroj por la dato
return p._agho(t1,m1,j1,t2,m2,j2,a,jara,ordigo,k)
end
function p.mortodatoagho(frame)
local args = frame.args
local pargs = frame:getParent().args
-- naskiĝdato
local j1 = args[1] or args["jaro1"] or pargs[1] or pargs["jaro1"] or "" -- tago1
local m1 = args[2] or args["monato1"] or pargs[2] or pargs["monato1"] or "" -- monato1
local t1 = args[3] or args["tago1"] or pargs[3] or pargs["tago1"] or "" -- jaro1
-- mortodato aŭ aktuala dato
local j2 = args[4] or args["jaro2"] or pargs[4] or pargs["jaro2"] or "" -- tago2
local m2 = args[5] or args["monato2"] or pargs[5] or pargs["monato2"] or "" -- monato2
local t2 = args[6] or args["tago2"] or pargs[6] or pargs["tago2"] or "" -- jaro2
local a = args["akuzativo"] or pargs["akuzativo"] or ""
local k = args["centjarulo"] or pargs["centjarulo"] or ""
-- elvoko de la funkcio p._naskdatoagho(), sed kun inversa sekvo de la la tri parametroj por la dato
return p._mortodatoagho(t1,m1,j1,t2,m2,j2,a,k)
end
function p.mortodato(frame)
local args = frame.args
local pargs = frame:getParent().args
local j = args[1] or args["jaro"] or pargs[1] or pargs["jaro"] or "" -- tago
local m = args[2] or args["monato"] or pargs[2] or pargs["monato"] or "" -- monato
local t = args[3] or args["tago"] or pargs[3] or pargs["tago"] or "" -- jaro
local a = args["akuzativo"] or pargs["akuzativo"] or ""
-- elvoko de la funkcio p._naskdato(), sed kun inversa sekvo de la la tri parametroj por la dato
return p._mortodato(t,m,j,a)
end
return p