Modul:Chronik/Work: Unterschied zwischen den Versionen

keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(26 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
local p = {}
local p = {}
local str = require("Modul:String")
local c = require("Modul:Common")
local lfd = require("Modul:LinkFormDatum")
local lsd = require("Modul:LinkSubformDatum")
function p.Eintrag(frame)
local title = mw.title.getCurrentTitle().text
local daterange = frame.args[1]
local text = frame.args[2] or ""
local option = frame.args[3]
local thema = frame.args["Thema"] or "Ereignis"
local year = nil
if c.istJahreszahl(title) then
year = title
end
local data = p.dateParser(daterange, year)
local ds = '[[' .. data['Starttag'] .. ']]'
if not year then
ds = ds .. ' [[' .. data['Startjahr'] .. ']]'
end
if data['Enddatum'] then
ds = ds .. " - [[" .. data['Endtag'] .. "]]"
if not year then
ds = ds .. " [[" .. data['Endjahr'] .. "]]"
end
end
data['Beschreibung'] = text
data['Thema'] = thema
mw.smw.subobject(data)
if option == "nodate" then
return text
end
return ds .. ': ' .. text
end


function p.dateParser(s, year)
function p.dateParser(s, year)
local start_date, end_date = p.splitDateString(s, year)
start_date, end_date = p.completeDates(start_date, end_date, year)
local sdf = lfd.humanToFormDate(start_date)
local data = {
['Startdatum'] = sdf,
['Startjahr'] = lsd.getYear(sdf),
['Starttag'] = lsd.getMonthday(sdf)
}
if end_date then
local edf = lfd.humanToFormDate(end_date)
data['Enddatum'] = edf
data['Endjahr'] = lsd.getYear(edf)
data['Endtag'] = lsd.getMonthday(edf)
end
mw.logObject(data)
return data
end
function p.completeDates(start_date, end_date, year)
--[[Jetzt müssen die gesplitteten Datum vervollständigt werden. Kann ja
sein, daß etwas wie 6. - 10. Januar angegeben ist. Und das Jahr, wenn nicht
gegeben, muß auch aus dem year entnommen werden können.]]
return s, year
local sd = str.split(start_date, ' ')
if end_date then
-- Wenn ein Enddatum gegeben ist
local ed = str.split(end_date, ' ')
if c.len(ed) == 2 then
-- Wenn das Enddatum kein Jahr enthält, füge es aus year hinzu
ed[3] = year
end_date = end_date .. " " .. ed[3]
end
if c.len(sd) == 2 then
-- Wenn das Startdatum kein Jahr enthält, hole es von Enddatum
start_date = start_date .. " " .. ed[3]
elseif c.len(sd) == 1 then
-- Startdatum enthält weder Monat noch Jahr, hole sie von Enddatum
start_date = start_date .. " " .. ed[2] .. " " .. ed[3]
end
else
-- Wenn nur ein Startdatum gegeben ist
if c.len(sd) == 2 then
-- Wenn das Startdatum kein Jahr enthält, hole es aus year
sd[3] = year
start_date = start_date .. " " .. sd[3]
end
end
return start_date, end_date
end
end


function p.split(s, d)
function p.splitDateString(s)
    local result = {}
-- Teilt ein von/bis Datum in Start- und End-Datum auf.
   
local dates = str.split(s, "-")
    -- Wir ersetzen das Trennzeichen d mit einem einzigartigen Token, aber entfernen es später
-- Wenn splitten mit "-" nur ein Ergebnis bringt, splitte mit "bis"
    local modified_input = string.gsub(s, d, "|") -- Ersetze "bis" mit "|" (Marker für Split)
if c.len(dates) == 1 then
   
dates = str.split(s, "bis")
    -- Teile den String an den Markern und füge die Ergebnisse in die Tabelle ein
    for match in string.gmatch(modified_input, "([^|]+)") do
        -- Füge jedes Element in das Resultat ein, nur wenn es nicht leer ist
        if match ~= "" then
            table.insert(result, match)
        end
    end
   
    for _, value in ipairs(result) do
    mw.log(value)  -- oder print(value), wenn du es direkt in der Konsole sehen möchtest
end
end
    return result
-- Alle Leerzeichen links und rechts in den Ergebnissen entfernen
for i, v in ipairs(dates) do
dates[i] = str.strip(dates[i])
end
return dates[1], dates[2]
end
end
return p
return p
82.367

Bearbeitungen