Modul:Homokozó/Pepo41/Táblakészítő Kkcl-sorhoz
Megjelenés
Homokozó/Pepo41/Táblakészítő Kkcl-sorhoz[mi ez?] • [dokumentáció: mutat, ] • [tesztek: létrehozás]
local p = {}
local lang = mw.getContentLanguage()
local TKkcl = {"2004","2005","2006","2007","2008","2009","2010","2011","2012","2013","2014","2015","2016","2017","2018","2019","2020"} --Egyetlen szuper tábla a Kkcl sablonhoz
local ou = ''
local function pop(mi,mv1,mv2,mv3,mv4,mv5) -- idézőjeles rész és 5 bővítmény az ou számára
if not mi then return else ou = ou..mi..'\n ' end
if not mv1 then return else ou = ou..mv1..'\n' end
if not mv2 then return else ou = ou..mv2..'\n' end
if not mv3 then return else ou = ou..mv3..'\n' end
if not mv4 then return else ou = ou..mv4..'\n' end
if not mv5 then return else ou = ou..mv5..'\n' end
end
TKkcl ["2013"]= {} --altábla a 2013 év 50- edik hetéhez
TKkcl ["2013"][50]= {}
TKkcl ["2013"][50][1] ={} -- érték a 2013 év 50- edik hete kezdő félhetéhez azaz dec. 9- dec.12
TKkcl ["2013"][50][1][1]= "2013-12-9" -- olvasata: 50-hét első felének kezdő napja
TKkcl ["2013"][50][1][2]= "2013-12-12" -- olvasata: 50-hét első felének befejező napja
pop("TKkcl [\"2013\"][50][1][1]",TKkcl ["2013"][50][1][1])
pop("TKkcl [\"2013\"][50][1][2]",TKkcl ["2013"][50][1][2])
local honaphossz = {31,28,31,30,31,30,31,31,30,31,30,31}
local function szokoev (ev)
if ev== nil then return false end
local e= tonumber(ev)
if e then --is numeric?
if e % 400 == 0 then return true end
if ev % 100 == 0 then return false end
if ev % 4 == 0 then return true end
end
return false
end
local ho_eleji_nap_sorszama_az_evben ={1,}
ho_eleji_nap_sorszama_az_evben [13] = 365
if szokoev(ev) then ho_eleji_nap_sorszama_az_evben [13]= 366 else ho_eleji_nap_sorszama_az_evben [13] = 365 end
for i=2,12 do
local szamlalo=1
for j=1,i-1 do
szamlalo = szamlalo + honaphossz [j]
end
ho_eleji_nap_sorszama_az_evben [i]= szamlalo; --pop(szamlalo)
end
local bazis_ev_elso_hete ={"2010","2011","2012","2013","2014","2015","2016","2017","2018","2019","2020","2021","2022","2023","2024","2025",}
bazis_ev_elso_hete ["2010"] = {4,"2010-01-04"}
bazis_ev_elso_hete ["2011"]= {3,"2011-01-03"}
bazis_ev_elso_hete ["2012"]= {2,"2012-01-02"}
bazis_ev_elso_hete ["2013"]= {0,"2012-12-31"} -- mert előző év szökőév volt
bazis_ev_elso_hete ["2014"]= {-1,"2013-12-30"}
bazis_ev_elso_hete ["2015"]= {-2,"2014-12-29"}-- bázis -2 nem szökőév új bázis -3 lenne
bazis_ev_elso_hete ["2016"]= {4,"2016-01-04"}-- mert előző év 53 hétből áll "első hét nem indul december 28-al szabály"
bazis_ev_elso_hete ["2017"]= {2,"2017-01-02"}-- mert előző év szökőév volt
bazis_ev_elso_hete ["2018"]= {1,"2018-1-01"}
bazis_ev_elso_hete ["2019"]= {0,"2018-12-31"}
bazis_ev_elso_hete ["2020"]= {-1,"2019-12-30"} -- bázis -1 szökőév új bázis -3 lenne
bazis_ev_elso_hete ["2021"]= {4,"2021-01-04"} --mert előző év 53 hétből áll "első hét nem indul december 28-al szabály"
bazis_ev_elso_hete ["2022"]= {3,"2022-01-03"}
bazis_ev_elso_hete ["2023"]= {2,"2023-01-02"}
bazis_ev_elso_hete ["2024"]= {1,"2024-01-01"}
bazis_ev_elso_hete ["2025"]= {-1,"2024-12-30"} -- mert előző év szökőév volt
local basis, uj_basis, heteleje, hetvege, felhetvege
local het,honap, hetfonk_sorszama, hetek_szama, ev
p.hibavan = false
function p.error ( about )
-- Enclose errorMsg with <span>
-- Precondition:
-- about -- string
p.hibavan = true
local r = about
if type( about ) == "string" then
if #about == 0 then
r = "Error in Lua"
end
else
r = tostring( about )
end
return "<span class=\'error\'>" .. r .. "</span>, "
end -- p.error()
function p.trim(str)
if str.args then
str = str.args[1]
end
if str == nil then
return nil
else
return (str:gsub("^%s*(.-)%s*$", "%1")) -- extra brackets are necessary because gsub returns multiple values
end
end
function p.isArabic(v)
if type(v) ~= 'string' then return false end -- számok is stringek
for i = 1,string.len(v) do
j, l = string.find ("0123456789",string.sub(v,i,i)) -- az i-arab számjegy?
if j == nil then return false end
end --do ciklus, lejárt, tehát minden karakter arab számjegy
return true
end
p.getArg = function (arg,alternativarg, assign ) -- itt eredetileg a frame nem paraméter
-- Retrieve template argument
-- Precondition:
-- arg -- string or number; argument identifier
-- assign -- any, optional; default value
-- Uses:
-- mw.getCurrentFrame()
--local r = mw.getCurrentFrame().args[ arg ] állt itt eredetileg
-- a kurrens frame argumentumai közül az arg kulccsal megadott
local r,r1,r2 = nil
-- a frame nil értéket ad, ha nem szerepel a paraméter, ''-et ad, ha szerepel, de nincs benne karakter
if args[ arg ] ~=nil and args[ arg ] ~='' then r1 = args[ arg ] end
-- r1 nil marad, ha a paramétert nem adták meg, vagy üresen adták meg
if args[ alternativarg ]~= nil and args[ alternativarg ] ~='' then r2 = args[ alternativarg ] end
-- r2 nil marad, ha az alternatív paramétert nem adták meg, vagy üresen adták meg
if r1 then r = r1 else
if r2 then r = r2 end
end
if type( r ) ~= "string" then
if type( assign ) == nil then
r = "{{{<" .. arg .. ">}}}" --ha r nem string tipus, azaz és assign nil érték
else
r = assign -- ha r nem string tipus, és assign nem nil
end
end
return r -- ha r string tipus, vagy nil
end
local function tablageneralo(frame)
kezdo_ev= p.getArg("kezdőév",1) -- vagy nevesített, vagy sorszám szerinti
befejezo_ev= p.getArg("befejezőév",2)
if not kezdo_ev then
kezdo_ev_hiba = p.error("nem adtál meg kezdő évet");
return kezdo_ev_hiba
else if tonumber(kezdo_ev) < 2010 then
kezdo_ev_hiba = p.error(" kezdő év minimum 2010");
return kezdo_ev_hiba
end
end
if not befejezo_ev then befejezo_ev_hiba = p.error("nem adtál meg befejező évet"); return befejezo_ev_hiba end
for ev= kezdo_ev,befejezo_ev do
TKkcl [tostring(ev)]= {};pop("TKkcl [\""..tostring(ev).."\"]= {}") --altábla az évhez
--ho_eleji_nap_sorszama_az_evben tömb előkészítése a szökőév okán
if szokoev(ev) then honaphossz[2]= 29 else honaphossz[2]= 28 end
local ho_eleji_nap_sorszama_az_evben ={1,}
ho_eleji_nap_sorszama_az_evben [13] = 365
if szokoev(ev) then ho_eleji_nap_sorszama_az_evben [13]= 366 else ho_eleji_nap_sorszama_az_evben [13] = 365 end
for i=2,12 do
local szamlalo=1
for j=1,i-1 do
szamlalo = szamlalo + honaphossz [j]
end
ho_eleji_nap_sorszama_az_evben [i]= szamlalo; --pop(szamlalo)
end
for i=1,13 do
-- pop(ho_eleji_nap_sorszama_az_evben[i]) -- csak hogy lássuk
end
-- indul hét
--[[
TKkcl ["2013"]= {} --altábla a 2013 év 50- edik hetéhez
TKkcl ["2013"][50]= {}
TKkcl ["2013"][50][1] ={} -- érték a 2013 év 50- edik hete kezdő félhetéhez azaz dec. 9- dec.12
TKkcl ["2013"][50][1][1]= "2013-12-9" -- olvasata: 50-hét első felének kezdő napja
TKkcl ["2013"][50][1][2]= "2013-12-12" -- olvasata: 50-hét első felének befejező napja
--]]
het=1 pop("TKkcl [\""..tostring(ev).."\"]= {}")
TKkcl [tostring(ev)][het]= {} ; pop("TKkcl [\""..tostring(ev).."\"]"..'['..het..']'.. "= {}")--altábla a héthez
-- ha az új bázis -3 értéket vesz fel az év letelte után, akkor az évnek eggyel több hétből kell állnia
-- a "dec.28 hétfő nem lehet utólsó hét első napja" szabály alapján (ISO 8601 szabvány)
basis = bazis_ev_elso_hete [tostring(ev)][1]
uj_basis = basis - 1
if szokoev(ev) then uj_basis = uj_basis-1 end
if uj_basis == -3 then hetek_szama = 53;
TKkcl [tostring(ev)][hetek_szama] = {};
pop("TKkcl [\""..tostring(ev).."\"]"..'['..hetek_szama..']'.. "= {}")
else hetek_szama = 52 end
TKkcl [tostring(ev)][het][1] ={} ;
pop("TKkcl [\""..tostring(ev).."\"]"..'['..het..']'.. "[1]= {}")-- altábla a hét kezdő félhetéhez
TKkcl [tostring(ev)][het][1][1] = bazis_ev_elso_hete [tostring(ev)][2]
-- egy az egyben átvesszük az év első hetét
pop("TKkcl [\""..tostring(ev).."\"]"..'['..het..']'.. "[1][1]=\"".. bazis_ev_elso_hete [tostring(ev)][2].."\"")
local ev2,ho2,nap2 = string.match(bazis_ev_elso_hete [tostring(ev)][2],"(%d%d%d%d?)-(%d%d?)-(%d%d?)")
ev2=tonumber(ev2);ho2=tonumber(ho2);nap2=tonumber(nap2)
local kozepnap=nap2+3
if ho2 < 12 then
if kozepnap > honaphossz[ho2] then ho2=ho2+1; kozepnap=kozepnap-honaphossz[ho2] end
else
if kozepnap > honaphossz[ho2] then ev2=ev2+1; ho2=1; kozepnap=kozepnap-honaphossz[ho2] end
end
local kozepnap_datuma = tostring(ev2)..'-'..tostring(ho2)..'-'..tostring(kozepnap)
TKkcl [tostring(ev)][het][1][2] = kozepnap_datuma
pop("TKkcl [\""..tostring(ev).."\"]"..'['..het..']'.. "[1][2]=\"".. kozepnap_datuma.."\"")
-- a hét második fele
TKkcl [tostring(ev)][het][2] ={} -- altábla a hét befejező félhetéhez
pop("TKkcl [\""..tostring(ev).."\"]"..'['..het..']'.. "[2]= {}")-- altábla a hét második félhetéhez
TKkcl [tostring(ev)][het][2][1] =kozepnap_datuma -- , a befejező félhét első napja mindig a középnap
pop("TKkcl [\""..tostring(ev).."\"]"..'['..het..']'.. "[2][1]=\"".. kozepnap_datuma.."\"")
local ev2,ho2,nap2 = string.match(bazis_ev_elso_hete [tostring(ev)][2],"(%d%d%d%d?)-(%d%d?)-(%d%d?)")
ev2=tonumber(ev2);ho2=tonumber(ho2);nap2=tonumber(nap2)
local vegnap=nap2+6
if ho2 < 12 then
if vegnap > honaphossz[ho2] then vegnap=vegnap-honaphossz[ho2] ; ho2=ho2+1 end
else
if vegnap > honaphossz[ho2] then vegnap=vegnap-honaphossz[ho2]; ev2=ev2+1; ho2=1; end
end
local vegnap_datuma = tostring(ev2)..'-'..tostring(ho2)..'-'..tostring(vegnap)
TKkcl [tostring(ev)][het][2][2] =vegnap_datuma -- , a befejező félhét első napja mindig a középnap
pop("TKkcl [\""..tostring(ev).."\"]"..'['..het..']'.. "[2][2]=\"".. vegnap_datuma.."\"")
--[[pop("basis=",basis)
pop(het,"het eleje= ",TKkcl[tostring(ev)][het][1][1]) -- 4 + 4*7 -32 +1
pop("félhét bef. napja=",TKkcl [tostring(ev)][het][1][2])
pop(het,"het második fele kezdőnapja= ",TKkcl[tostring(ev)][het][2][1]) -- 4 + 4*7 -32 +1
pop("het második fele bef. napja=",TKkcl [tostring(ev)][het][2][2])
pop("végnap_datuma=",vegnap_datuma)
--]]
for het=2,hetek_szama do -- a második héttől minden hétre
TKkcl [tostring(ev)][het]= {} -- altábla a hétnek
pop("TKkcl [\""..tostring(ev).."\"]"..'['..het..']'.. "= {}")
TKkcl [tostring(ev)][het][1] ={} -- altábla első félhétnek
pop("TKkcl [\""..tostring(ev).."\"]"..'['..het..']'.. "[1]= {}")-- altábla a hét kezdő félhetéhez
hetfonk_sorszama = basis + (het-1)*7;-- pop("hetfonk_sorszama",hetfonk_sorszama) -- 4 + (5-1)*7
for i=1,12 do
if ho_eleji_nap_sorszama_az_evben [i] <= hetfonk_sorszama and hetfonk_sorszama < ho_eleji_nap_sorszama_az_evben [i+1]
then honap = i break end
end
--pop("honap",honap) -- 1
heteleje = basis + (het-1)*7 - ho_eleji_nap_sorszama_az_evben [honap]+1
TKkcl [tostring(ev)][het][1][1] = tostring(ev)..'-'..tostring(honap)..'-'..tostring(heteleje )
pop("TKkcl [\""..tostring(ev).."\"]"..'['..het..']'.. "[1][1]=\""..tostring(ev)..'-'..tostring(honap)..'-'..tostring(heteleje ).."\"")
--pop(het,"het eleje= ",TKkcl[tostring(ev)][het][1][1]) -- 4 + 4*7 -32 +1
TKkcl [tostring(ev)][het][2] ={} --altábla második félhétnek
pop("TKkcl [\""..tostring(ev).."\"]"..'['..het..']'.. "[2]= {}")-- altábla a hét második félhetéhez
local ev2,ho2,nap2
ev2=ev
ho2=honap
nap2=heteleje
local kozepnap=nap2+3
if ho2 < 12 then
if kozepnap > honaphossz[ho2] then kozepnap=kozepnap-honaphossz[ho2] ; ho2=ho2+1 end
else
if kozepnap > honaphossz[ho2] then kozepnap=kozepnap-honaphossz[ho2]; ev2=ev2+1; ho2=1; end
end
local kozepnap_datuma = tostring(ev2)..'-'..tostring(ho2)..'-'..tostring(kozepnap)
TKkcl [tostring(ev)][het][1][2] = kozepnap_datuma
pop("TKkcl [\""..tostring(ev).."\"]"..'['..het..']'.. "[1][2]=\""..kozepnap_datuma.."\"")
TKkcl [tostring(ev)][het][2][1] = kozepnap_datuma
pop("TKkcl [\""..tostring(ev).."\"]"..'['..het..']'.. "[2][1]=\""..kozepnap_datuma.."\"")
--pop("kozepnap_datuma=",TKkcl [tostring(ev)][het][2][1])
ev2=ev -- mert felülírtuk előbb
ho2=honap
nap2=heteleje
local vegnap=nap2+6
if ho2 < 12 then
if vegnap > honaphossz[ho2] then vegnap=vegnap-honaphossz[ho2] ; ho2=ho2+1 end
else
if vegnap > honaphossz[ho2] then vegnap=vegnap-honaphossz[ho2]; ev2=ev2+1; ho2=1; end
end
local vegnap_datuma = tostring(ev2)..'-'..tostring(ho2)..'-'..tostring(vegnap)
TKkcl [tostring(ev)][het][2][2] = vegnap_datuma
pop("TKkcl [\""..tostring(ev).."\"]"..'['..het..']'.. "[2][2]=\""..vegnap_datuma.."\"")
--pop("végnap_datuma=",TKkcl [tostring(ev)][het][2][2])
end -- hetek ciklusa
end --évek ciklusa
return ou
end -- tablageneralo
function p.run(frame)
local pframe = frame:getParent()
args = pframe.args -- azok a paraméterek, amelyek a sablont kisérik a Pepo41/CCitPer sablon hivása oldalon
config = frame.args -- az #invoke utasításban átadott paraméterek
return tablageneralo(frame)
end
return p