Modul:LinkFormDatum: Unterschied zwischen den Versionen

+ linkFormDateAttrList()
Keine Bearbeitungszusammenfassung
(+ linkFormDateAttrList())
 
(41 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
local p = {}
local p = {}
local c = require( "Module:Common" )


function p.ParseFormDate( frame )
local com = require("Modul:Common")
pf = frame:getParent()
local str = require("Modul:String")
args = pf.args
local kal = require("Modul:Kalender")
local smw = require("Modul:SMW")
months={
 
[1] = "Januar",
function p.LinkFormDate(frame)
[2] = "Februar",
-- #invoke wrapper
[3] = "März",
local args = frame.args
[4] = "April",
    return p.linkFormDate(args[1], args[2], args[3], args[4])
[5] = "Mai",
end
[6] = "Juni",
 
[7] = "Juli",
function p.linkFormDate(date, attr_date, attr_day, attr_year)
[8] = "August",
    local date_array
[9] = "September",
    local mda
[10] = "Oktober",
    local mn -- monthname
[11] = "November",
 
[12] = "Dezember"}
if string.find(date, "/") ~= nil then -- regular case YYYY/MM/DD
    date_array = str.split(date, "/")
date = args[1]
    else -- ISO-P case YYYY-MM-DD
attr_date = args[2]
    date_array = str.split(date, "-")
attr_day = args[3]
    end
attr_year = args[4]
      
      
     date_array=split(date, "/")
     -- wenn keine Attribute übergeben, werden keine gesetzt, sondern nur Links eingebaut
     if isEmpty(date_array[1]) then
    if attr_day ~= nil then
    attr_day = attr_day .. "::"
    else
    attr_day = ""
    end
    if attr_year ~= nil then
    attr_year = attr_year .. "::"
    else
    attr_year = ""
    end
    if attr_date ~= nil then
    mw.smw.set({[attr_date] = date})
    end
     if com.isEmpty(date_array[2]) then
     -- When datestring contained no "/"
     -- When datestring contained no "/"
     if isInteger(date_array[0]) then
     if com.isInteger(date_array[1]) then
     -- When dateformat is just YYYY
     -- When dateformat is just YYYY
     return "[[" .. attr_year .. "::" .. date_array[0] .. "]]"
     return "[[" .. attr_year .. date_array[1] .. "]]"
     else
     else
     -- Dateformat is <monthname> YYYY
     -- Dateformat is <monthname> YYYY
     mda = split(date_array[0])
     mda = str.split(date_array[1])
     return mda[0] .. " [[" .. attr_year .. "::" .. mda[1] .. "]]"
     return mda[1] .. " [[" .. attr_year .. mda[2] .. "]]"
     end
     end
     elseif isEmpty(date_array[2]) then
     elseif com.isEmpty(date_array[3]) then
     -- Datestring contained one "/"
     -- Datestring contained one "/"
     mn = months[tonumber(date_array[1])]
     mn = kal.month_names[tonumber(date_array[2])]
     return mn .. " [[" .. attr_year .. "::" .. date_array[0] .. "]]"
     return mn .. " [[" .. attr_year .. date_array[1] .. "]]"
     else
     else
     -- Dateformat should be YYYY/MM/DD
     -- Dateformat should be YYYY/MM/DD or YYYY-MM-DD
     mn = months[tonumber(date_array[1])]
     mn = kal.month_names[tonumber(date_array[2])]
     date_array[2] = string.gsub(date_array[2], '0*', '', 1)
     date_array[3] = date_array[3]:gsub('0*', '', 1)
     return "[[" .. date_array[2] .. ". " .. mn .. "]]" ..  
     return "[[" .. attr_day .. date_array[3] .. ". " .. mn .. "]]" ..  
     " [[" .. attr_year .. "::" .. date_array[0] .. "]]"
     " [[" .. attr_year .. date_array[1] .. "]]"
     end
     end
     return "t"
end
 
function p.linkFormDateAttrList(args)
-- wie linkFormDate, aber zu setzende Attribute werden in Attribute-Liste eingetragen
-- Kommandozeile zum Debuggen:
-- attr_list={}; print(p.linkFormDateAttrList{date="2026/02/10", attr_list=attr_list, attr_date="Datum", attr_day="Tag", attr_year="Jahr"}); mw.logObject(attr_list)
-- attr_list={}; print(p.linkFormDateAttrList{date="2026-02-10", attr_list=attr_list, attr_date="Datum", attr_day="Tag", attr_year="Jahr"}); mw.logObject(attr_list)
-- attr_list={}; print(p.linkFormDateAttrList{date="2026", attr_list=attr_list, attr_date="Datum", attr_day="Tag", attr_year="Jahr"}); mw.logObject(attr_list)
-- attr_list={}; print(p.linkFormDateAttrList{date="April 2026", attr_list=attr_list, attr_date="Datum", attr_day="Tag", attr_year="Jahr"}); mw.logObject(attr_list)
-- attr_list={}; print(p.linkFormDateAttrList{date="2026/02", attr_list=attr_list, attr_date="Datum", attr_day="Tag", attr_year="Jahr"}); mw.logObject(attr_list)
local t = ""
    -- date zerteilen
    local date_array
if string.find(args.date, "/") ~= nil then -- regular case YYYY/MM/DD
    date_array = str.split(args.date, "/")
     else -- ISO-P case YYYY-MM-DD
    date_array = str.split(args.date, "-")
end
-- Fälle unterscheiden
    local day, month, year
    if com.isEmpty(date_array[2]) then -- "2026" oder "April 2026"
    -- When datestring contained no "/" => only year
    if com.isInteger(date_array[1]) then
    -- When dateformat is just YYYY
    year = date_array[1]
    t = "[[" .. year .. "]]"
    else
    -- Dateformat is <monthname> YYYY
    local mda = str.split(date_array[1])
    year = mda[2]
    t = mda[1] .. " [[" .. year .. "]]"
    end
    elseif com.isEmpty(date_array[3]) then -- "2026/02"
    -- Datestring contained one "/"
    month = kal.month_names[tonumber(date_array[2])]
  year = date_array[1]
    t = month .. " [[" .. year .. "]]"
    else
    -- Dateformat should be YYYY/MM/DD or YYYY-MM-DD
    month = kal.month_names[tonumber(date_array[2])]
    date_array[3] = date_array[3]:gsub('0*', '', 1)
    day = date_array[3] .. ". " .. month
    year = date_array[1]
    t = "[[" .. day .. "]]" .. " [[" .. year .. "]]"
    end
    -- Werte in Attributeliste eintragen. Bei nil wird nix eingetragen
    smw.addAttrToList(args.attr_list, args.attr_date, args.date)
    smw.addAttrToList(args.attr_list, args.attr_date .. "Lfd", t)
    smw.addAttrToList(args.attr_list, args.attr_day, day)
    smw.addAttrToList(args.attr_list, args.attr_year, year)
    return t
end
 
function p.FormatDate(frame)
-- #invoke wrapper
return p.formatDate(frame.args[1])
end
 
function p.formatDate(date)
local date_array = str.split(date, " ")
local day
if com.isEmpty(date_array[2]) then
    -- When datestring contained no " ", thus is year
    return "[[" .. date_array[1] .. "]]"
elseif com.isEmpty(date_array[3]) then
-- When datestring contains monthname and year
return date_array[1] .. " [[" .. date_array[2] .. "]]"
else
-- When datestring contains day, monthname and year
day = string.gsub(date_array[1], "%.", "")
return "[[" .. day .. ". " .. date_array[2] .. "]] " ..
"[[" .. date_array[3] .. "]]"
end
end
 
function p.HumanToFormDate(frame)
-- #invoke wrapper
return p.humanToFormDate(frame.args[1])
end
 
function p.humanToFormDate(date)
mw.log("p.humanToFormDate(date)")
mw.logObject(date)
-- Converts a human date (3. Februar 1955) to 1955/02/03, like SMW needs
local date_array=str.split(date, " ")
local day
local mnr -- monthnr
if com.isEmpty(date_array[2]) then
-- When datestring contained no " ", thus is year
return date_array[1]
elseif com.isEmpty(date_array[3]) then
-- When datestring contains monthname and year
return date_array[1].." "..date_array[2]
else
day = string.gsub(date_array[1], "%.", "")
day = string.format("%02d", day)
mnr = kal.month_numbers[date_array[2]]
mnr = string.format("%02d", mnr)
return date_array[3] .. "/" .. mnr .. "/" .. day
end
end
end


return p
return p