te>Antonsusi |
|
Zeile 1: |
Zeile 1: |
− | local p = {}
| |
− | -- Trennen der Parameter
| |
− | local function Split(str)
| |
− | local Datum = {}
| |
− | local Teil=""
| |
− | local pos = 0
| |
− | Datum.y = 0
| |
− | Datum.m = 0
| |
− | Datum.d = 0
| |
− | pos = mw.ustring.find(str,'-',1,true);
| |
− | if pos == 1 then -- Minuszeichen am Anfang - nochmal suchen
| |
− | pos = mw.ustring.find(str,'-',2,true);
| |
− | end
| |
− | if not pos then
| |
− | Datum.y = tonumber(str) or 'x'
| |
− | return false, Datum -- Kein Wert erkennbar
| |
− | end
| |
− | Teil = mw.ustring.sub(str,1,pos-1)
| |
− | Datum.y = tonumber(Teil) or 'x'
| |
− | str = mw.ustring.sub(str,pos+1, -1)
| |
− | pos = mw.ustring.find(str,'-',1,true);
| |
− | if not pos or pos == 0 then
| |
− | return true, Datum -- Nur Jahr
| |
− | end
| |
− | Teil = mw.ustring.sub(str,1,pos-1)
| |
− | Datum.m = tonumber(Teil) or 0
| |
− | Teil = mw.ustring.sub(str,pos+1, -1)
| |
− | if #Teil == 0 then
| |
− | return true, Datum -- Nur Jahr und Monat
| |
− | end
| |
− | if Datum.m == 0 then
| |
− | Datum.d = 0
| |
− | else
| |
− | Datum.d = tonumber(Teil) or 0
| |
− | end
| |
− | return true, Datum
| |
− | end
| |
− | --
| |
| | | |
− | local function CheckDate(Date)
| |
− | if ( Date.m == 4 or Date.m == 6 or Date.m == 9 or Date.m == 11) and Date.d > 30 then
| |
− | return false;
| |
− | end
| |
− | if Date.m == 2 then -- Die greg. Sonderregeln werden ignoriert.
| |
− | if Date.y % 4 ~= 0 and Date.d > 28 then return false; end
| |
− | if Date.y % 4 == 0 and Date.d > 29 then return false; end
| |
− | end
| |
− | -- Hier nur noch 31-Tage-Monate übrig.
| |
− | if Date.d > 31 then return false; end
| |
− | return true;
| |
− | end
| |
− | --
| |
− |
| |
− | local function Run(Args)
| |
− | local T_F = {"Januar","Februar", "März", "April", "Mai","Juni", "Juli", "August","September","Oktober","November","Dezember","Jänner"}
| |
− | local T_M = {"Jan.","Feb.", "März", "Apr.", "Mai","Juni", "Juli", "Aug.","Sep.","Okt.","Nov.","Dez.","Jän."}
| |
− | local T_S = {"Jan.","Feb.", "Mrz", "Apr.", "Mai","Jun.", "Jul.", "Aug.","Sep.","Okt.","Nov.","Dez.","Jän."}
| |
− | local Text = "";
| |
− | local AT = false;
| |
− | local NBSP = false;
| |
− | local LINK = false;
| |
− | local VCHR = "";
| |
− | local STIL = 'F';
| |
− | local IsOk = true
| |
− | local Tbl = {}
| |
− | local SortIt = false;
| |
− | local Numstr = "";
| |
− | local SortTag= "";
| |
− | local Arg2 = mw.ustring.lower(mw.text.trim(Args[2] or ""));
| |
− | local Arg3 = mw.ustring.lower(mw.text.trim(Args[3] or ""));
| |
− | local Arg4 = mw.ustring.lower(mw.text.trim(Args[4] or ""));
| |
− | if Arg2 == "nbsp" or Arg3 == "nbsp" or Arg4 == "nbsp" then NBSP = true; end
| |
− | if Arg2 == "link" or Arg3 == "link" or Arg4 == "link" then LINK = true; end
| |
− | if Arg2 == "m" or Arg3 == "m" or Arg4 == "m" then STIL = 'M'; end
| |
− | if Arg2 == "s" or Arg3 == "s" or Arg4 == "s" then STIL = 'S'; end
| |
− | if mw.ustring.lower(mw.text.trim(Args['AT'] or "")) == "ja" then AT = true; end
| |
− | if mw.ustring.lower(mw.text.trim(Args['Sort'] or "")) ~= "" then SortIt = true; end
| |
− |
| |
− | IsOk, Tbl = Split(Args[1])
| |
− |
| |
− | if Tbl.y == 'x' then
| |
− | Text = '<span class="error">[[Vorlage:FormatDate]]: Ungültiger Wert für Jahr!</span>'
| |
− | return Text
| |
− | end
| |
− | if Tbl.m > 12 or Tbl.m < 0 then
| |
− | Text = '<span class="error">[[Vorlage:FormatDate]]: Ungültiger Wert für Monat!</span>'
| |
− | return Text
| |
− | end
| |
− | if Tbl.y <= 0 then
| |
− | Tbl.y = 1 - Tbl.y
| |
− | VCHR = " v. Chr.";
| |
− | end
| |
− | if Tbl.d > 0 then
| |
− | if CheckDate(Tbl) then
| |
− | Text = tostring(Tbl.d) .. '. '
| |
− | else
| |
− | Text = '<span class="error">[[Vorlage:FormatDate]]: Ungültiges Datum!'.. table.concat(Tbl,'.')..'</span>'
| |
− | return Text
| |
− | end
| |
− | end
| |
− | if Tbl.m > 0 then
| |
− | if LINK then
| |
− | if Tbl.d == 0 then
| |
− | Linkziel =T_F[Tbl.m]
| |
− | else
| |
− | Linkziel = tostring(Tbl.d) .. ". " .. T_F[Tbl.m]
| |
− | end
| |
− | end
| |
− | if AT and Tbl.m == 1 then
| |
− | Tbl.m = 13
| |
− | end
| |
− | if STIL == 'M' then
| |
− | Text = Text .. T_M[Tbl.m]
| |
− | elseif STIL == 'S' then
| |
− | Text = Text .. T_S[Tbl.m]
| |
− | else
| |
− | Text = Text .. T_F[Tbl.m]
| |
− | end
| |
− | if LINK then
| |
− | Text = "[[" .. Linkziel .. "|" .. Text .. "]]"
| |
− | end
| |
− | if NBSP then
| |
− | Text = Text .. " "
| |
− | else
| |
− | Text = Text .. " "
| |
− | end
| |
− | end
| |
− | if LINK then
| |
− | Text = Text .. "[[" .. tostring(Tbl.y) .. VCHR .. "]]"
| |
− | else
| |
− | Text = Text .. tostring(Tbl.y) .. VCHR
| |
− | end
| |
− | if SortIt then
| |
− | if Tbl.m == 13 then Tbl.m = 1 end
| |
− | if tonumber(Tbl.y) and tonumber(Tbl.m) and tonumber(Tbl.d) then
| |
− | if VCHR ~= "" then
| |
− | Tbl.y = 1 - Tbl.y
| |
− | end
| |
− | Numstr = string.format('%d%2.2d%2.2d',5000+Tbl.y,Tbl.m,Tbl.d)
| |
− | SortTag='<span style="display:none" class="sortkey">' .. Numstr .. '</span>'
| |
− | Text = SortTag .. Text
| |
− | end
| |
− | end
| |
− |
| |
− | return Text
| |
− | end
| |
− | --
| |
− |
| |
− | function p.Execute(frame)
| |
− | local FR = frame:getParent()
| |
− | return Run(FR.args)
| |
− | end
| |
− |
| |
− | function p.Sort(frame)
| |
− | local FR = frame:getParent()
| |
− | FR.args.Sort='1'
| |
− | return Run(FR.args)
| |
− | end
| |
− | return p
| |