Modul:Kalender/Work

Aus FürthWiki

Die Dokumentation für dieses Modul kann unter Modul:Kalender/Work/Doku erstellt werden

p = {}

p.month_names = { "Januar", "Februar", "März", "April", "Mai",  "Juni",
	"Juli", "August", "September", "Oktober", "November", "Dezember"}

p.month_numbers = {
	["Januar"] = 1,		["Februar"] = 2,	["März"] = 3,
	["April"] = 4,		["Mai"] = 5,		["Juni"] = 6,
	["Juli"] = 7,		["August"] = 8,		["September"] = 9,
	["Oktober"] = 10,	["November"] = 11,	["Dezember"] = 12}

function p.IstJahrestag(frame)
	-- #invoke wrapper
	local args = frame.args
    local title = mw.title.getCurrentTitle().text
    local tag, monat = p.istJahrestag(title)
    
    if tag and monat then
        return frame.args[1] or "true"
    else
        return frame.args[2] or ""
    end
end

function p.istJahrestag(s)
	s = s or ""
	-- Prüfe auf ein-/zweistellige Zahl durch Punkt gefolgt, opt. Leerzeichen
	return s:match("^(%d%d?)%.%s*(%a+)$")
end

function p.IstJahreszahl(frame)
	-- #invoke wrapper
    local args = frame.args
    local title = mw.title.getCurrentTitle().text

    if p.istJahreszahl(title) then
        return args[1] or "true"
    else
        return args[2] or ""
    end
end

function p.istJahreszahl(s)
	s = s or ""
	-- Prüfe auf Formate wie: 2024, -44, 44 v. Chr., 800 n. Chr.
	return s:match("^%-?%d+$") or s:match("^%d+%s+[vn]%.%s+Chr%.$")
end

function p.dateLastDayCompleter(date)
	-- ergänzt letzten Tag für SMW-Query
	-- 2000 => 2000/12/31
	-- Februar 2000 => 2000/2/29
	-- Februar 2001 => 2001/2/28
	-- 2020/04/02 => 2020/04/02
	local last_date
	if #date == 4 then															-- nur "Jahr" vorhanden
		last_date = date .. "/12/31"
	elseif string.find(date, " ") ~= nil then									-- "Monat Jahr" vorhanden (hat Leerzeichen)
		local days = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
		local month = string.sub(date, 1, string.find(date, " ") - 1)
		month = p.month_numbers[month]
		local year = string.sub(date, string.find(date, " ") + 1)
		last_date = year .. "/" .. string.format("%02d", month) .. "/"
		if month == 2 and year % 4 == 0 then									-- Sonderfall Feb. Schaltjahr
			last_date = last_date .. "29"
		else
			last_date = last_date .. days[month]
		end
	else
		last_date = date
	end
	return last_date
end

function p.dateFirstDayCompleter(date)
	-- ergänzt ersten Tag
	-- 2000 => 2000/01/01
	-- Februar 2000 => 2000/2/01
	-- 2020/04/02 => 2020/04/02
	local first_date
	if #date == 4 then															-- nur "Jahr" vorhanden
		first_date = date .. "/01/01"
	elseif string.find(date, " ") ~= nil then									-- "Monat Jahr" vorhanden (hat Leerzeichen)
		local month = string.sub(date, 1, string.find(date, " ") - 1)
		month = p.month_numbers[month]
		local year = string.sub(date, string.find(date, " ") + 1)
		first_date = year .. "/" .. string.format("%02d", month) .. "/01"
	else
		first_date = date
	end
	return first_date
end

function p.date2ISO(date)
	-- 2000 => 2000-01-01
	-- Februar 2000 => 2000-02-01
	-- 2020/04/02 => 2020-04-02
	local date_iso = ""
	date = p.dateFirstDayCompleter(date)
	for i = 1, #date do
		local char = string.sub(date, i, i)
		if char == "/" then
			date_iso = date_iso .. "-"
		else
			date_iso = date_iso .. char
		end
	end
	return date_iso
end

return p