Modul:Homokozó/Pepo41/Táblakészítő Kkcl-sorhoz

Homokozó/Pepo41/Táblakészítő Kkcl-sorhoz[mi ez?] • [dokumentáció: mutat, szerkeszt] • [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