Nicht angemeldeter Benutzer - Bearbeiten von Seiten ist nur als angemeldeter Benutzer möglich.

Änderungen

Zur Navigation springen Zur Suche springen
K
53 Versionen importiert: Import aus der deutschen Wikipedia, Vorlage:Lang
Zeile 1: Zeile 1:  
local p = {}
 
local p = {}
-- Trennen der Parameter
+
-- Trennen der Parameter
 
local function Split(str)
 
local function Split(str)
 
local Datum = {}
 
local Datum = {}
Zeile 15: Zeile 15:  
Datum.y = tonumber(str);
 
Datum.y = tonumber(str);
 
if Datum.y then
 
if Datum.y then
 +
if math.floor(Datum.y) ~= Datum.y then
 +
return false, Datum -- Eine Dezimalzahl ist Unsinn
 +
end
 
return true, Datum -- Nur eine Jahreszahl
 
return true, Datum -- Nur eine Jahreszahl
 
else
 
else
Zeile 22: Zeile 25:  
Teil  = mw.ustring.sub(str,1,pos-1);
 
Teil  = mw.ustring.sub(str,1,pos-1);
 
Datum.y = tonumber(Teil) or 0;
 
Datum.y = tonumber(Teil) or 0;
 +
 
str = mw.ustring.sub(str,pos+1,  -1);
 
str = mw.ustring.sub(str,pos+1,  -1);
 
pos = mw.ustring.find(str,'-',1,true);
 
pos = mw.ustring.find(str,'-',1,true);
 +
 
if not pos or pos == 0 then
 
if not pos or pos == 0 then
return true, Datum; -- Nur Jahr
+
Datum.m = tonumber(str) or 0
 +
Datum.d = 0;
 +
if math.floor(Datum.m) ~= Datum.m then
 +
return false, Datum -- Eine Dezimalzahl ist Unsinn
 +
end
 +
return true, Datum;
 
end
 
end
 +
 
Teil  = mw.ustring.sub(str,1,pos-1)
 
Teil  = mw.ustring.sub(str,1,pos-1)
 
Datum.m = tonumber(Teil) or 0
 
Datum.m = tonumber(Teil) or 0
 
Teil  = mw.ustring.sub(str,pos+1,  -1)
 
Teil  = mw.ustring.sub(str,pos+1,  -1)
if #Teil == 0 then
+
Datum.d = tonumber(Teil) or 0;
return true, Datum-- Nur Jahr und Monat
+
if math.floor(Datum.m) ~= Datum.m then
 +
return false, Datum -- Eine Dezimalzahl ist Unsinn
 
end
 
end
if Datum.m == 0 then
+
if math.floor(Datum.d) ~= Datum.d then
Datum.d = 0;
+
return false, Datum -- Eine Dezimalzahl ist Unsinn
else
  −
Datum.d = tonumber(Teil) or 0;
   
end
 
end
 
return true, Datum;
 
return true, Datum;
Zeile 63: Zeile 73:  
if Date.d > 31  then return false; end
 
if Date.d > 31  then return false; end
 
return true;
 
return true;
 +
end
 +
--
 +
local function TageInMonate(Datum)
 +
Datum.m = 1;
 +
if Datum.d > 31 then -- nach Januar
 +
Datum.m = 2;
 +
Datum.d = Datum.d - 31;
 +
else
 +
return true, Datum;
 +
end
 +
if Datum.y % 4 == 0 then -- Die greg. Sonderregeln werden ignoriert.
 +
if Datum.d > 29 then  -- nach Februar (Schaltjahr)
 +
Datum.m = 3;
 +
Datum.d = Datum.d - 29;
 +
else
 +
return true, Datum;
 +
end
 +
else
 +
if Datum.d > 28 then  -- nach Februar (Normaljahr)
 +
Datum.m = 3;
 +
Datum.d = Datum.d - 28;
 +
else
 +
return true, Datum;
 +
end
 +
end
 +
if Datum.d > 31 then -- nach Maerz
 +
Datum.m = 4;
 +
Datum.d = Datum.d - 31;
 +
else
 +
return true, Datum;
 +
end
 +
if Datum.d > 30 then -- nach April
 +
Datum.m = 5;
 +
Datum.d = Datum.d - 30;
 +
else
 +
return true, Datum;
 +
end
 +
if Datum.d > 31 then -- nach Mai
 +
Datum.m = 6;
 +
Datum.d = Datum.d - 31;
 +
else
 +
return true, Datum;
 +
end
 +
if Datum.d > 30 then -- nach Juni
 +
Datum.m = 7;
 +
Datum.d = Datum.d - 30;
 +
else
 +
return true, Datum;
 +
end
 +
if Datum.d > 31 then -- nach Juli
 +
Datum.m = 8;
 +
Datum.d = Datum.d - 31;
 +
else
 +
return true, Datum;
 +
end
 +
if Datum.d > 31 then -- nach August
 +
Datum.m = 9;
 +
Datum.d = Datum.d - 31;
 +
else
 +
return true, Datum;
 +
end
 +
if Datum.d > 30 then -- nach September
 +
Datum.m = 10;
 +
Datum.d = Datum.d - 30;
 +
else
 +
return true, Datum;
 +
end
 +
if Datum.d > 31 then -- nach Oktober
 +
Datum.m = 11;
 +
Datum.d = Datum.d - 31;
 +
else
 +
return true, Datum;
 +
end
 +
if Datum.d > 30 then -- nach November
 +
Datum.m = 12;
 +
Datum.d = Datum.d - 30;
 +
else
 +
return true, Datum;
 +
end
 +
if Datum.d > 31 then -- nach Dezember = Fehler
 +
Datum.m = 0;
 +
Datum.d = 0;
 +
return false, Datum;
 +
else
 +
return true, Datum;
 +
end
 
end
 
end
 
--
 
--
Zeile 69: Zeile 165:  
local T_L  = {"Januar","Februar", "März", "April", "Mai","Juni", "Juli", "August","September","Oktober","November","Dezember","Jänner"}
 
local T_L  = {"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_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 T_S  = {"Jan.","Feb.",  "Mrz.", "Apr.", "Mai","Jun.", "Jul.", "Aug.","Sep.","Okt.","Nov.","Dez.","Jän."}
 
local Text = "";
 
local Text = "";
 
local TextYear  = "";
 
local TextYear  = "";
 
local TextMonth = "";
 
local TextMonth = "";
 
local TextDay  = "";
 
local TextDay  = "";
local idxm = 0 ;  --  Wegen der AT-Regel ein Extraindex fuer den Monat.
+
local idxm = 0 ;  --  Wegen der AT-Regel ein Extraindex fuer den Monat.
 
local  AT = false;
 
local  AT = false;
 
local NBSP = false;
 
local NBSP = false;
Zeile 80: Zeile 176:  
local VCHR = "";
 
local VCHR = "";
 
local STIL = 'L';
 
local STIL = 'L';
local IsOk = true
+
local IsOk = true;
 
local Tbl = {}
 
local Tbl = {}
 
local SortIt = false;
 
local SortIt = false;
 +
local Zero = false;
 
local Numstr = "";
 
local Numstr = "";
 
local SortTag= "";
 
local SortTag= "";
Zeile 88: Zeile 185:  
local Arg3 = mw.ustring.lower(mw.text.trim(Args[3] or ""));
 
local Arg3 = mw.ustring.lower(mw.text.trim(Args[3] or ""));
 
local Arg4 = mw.ustring.lower(mw.text.trim(Args[4] or ""));
 
local Arg4 = mw.ustring.lower(mw.text.trim(Args[4] or ""));
 +
local davor = mw.text.trim(Args['davor'] or "");
 +
local display = mw.text.trim(Args['display'] or ""); -- Nur zusammen mit sort sinnvoll
 
if Arg2 == "nbsp"  or Arg3 == "nbsp"  or Arg4 == "nbsp" then NBSP = true; end
 
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 == "link"  or Arg3 == "link"  or Arg4 == "link" then LINK = true; end
Zeile 94: Zeile 193:  
if Arg2 == "s"    or Arg3 == "s"    or Arg4 == "s"    then STIL = 'S'; 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['AT'] or "")) == "ja" then AT = true; end
if mw.ustring.lower(mw.text.trim(Args['Sort'] or "")) ~= "" then SortIt = true; end
+
if mw.ustring.lower(mw.text.trim(Args['Zero'] or "")) ~= "" then Zero = true; end
+
if mw.ustring.lower(mw.text.trim(Args['Sort'] or "")) ~= "" then SortIt = true; Zero = true; end
 +
if davor ~="" then davor = davor .. " "; end
 
IsOk, Tbl = Split(Args[1])
 
IsOk, Tbl = Split(Args[1])
 
if not  IsOk then
 
if not  IsOk then
Zeile 101: Zeile 201:  
return Text
 
return Text
 
end
 
end
--Tag ohne Monat nicht erlaubt: Auch Tag auf Null setzen (= nur Jahr)
+
--Tage ohne Monat: Tage in Monat und Tag umrechnen
if Tbl.m == 0 then
+
if Tbl.m == 0 and Tbl.d ~= 0  then
Tbl.d = 0;
+
IsOk, Tbl = TageInMonate(Tbl)
 +
end
 +
if not  IsOk then
 +
Text = '<span class="error">[[Vorlage:FormatDate]]: Kein gültiges ISO-Datum!</span>'
 +
return Text
 
end
 
end
 
Tbl.y = tonumber(Tbl.y) or 0;
 
Tbl.y = tonumber(Tbl.y) or 0;
Zeile 123: Zeile 227:  
if Tbl.d > 0 then -- Tag angegeben, String erstellen
 
if Tbl.d > 0 then -- Tag angegeben, String erstellen
 
TextDay =  tostring(Tbl.d) .. '.&nbsp;'
 
TextDay =  tostring(Tbl.d) .. '.&nbsp;'
if Tbl.d < 10 and SortIt then
+
if Tbl.d < 10 and Zero then
TextDay = '&nbsp;' .. TextDay;
+
TextDay = '<span style="visibility:hidden;">0</span>' .. TextDay;
 
end
 
end
 
else
 
else
Zeile 177: Zeile 281:  
Tbl.y = 0 - Tbl.y
 
Tbl.y = 0 - Tbl.y
 
end
 
end
Numstr = string.format('%d%2.2d%2.2d',5000+Tbl.y,Tbl.m,Tbl.d)
+
-- Begrenzung auf 3000 v Chr. bis 6999 n. Chr. Vierstellige Sortierung reicht aus
SortTag='<span style="display:none" class="sortkey">' .. Numstr .. '</span>'
+
if Tbl.y > 6999 then
Text = SortTag .. Text
+
Tbl.y = 6999;
 +
end
 +
-- Nur bei Sortierung sinnvoll: Überschreiben der Textausgabe mit angegebenen String
 +
if display ~= "" then
 +
Text = display;
 +
end
 +
Numstr = string.format('%d%2.2d%2.2d',3000+Tbl.y,Tbl.m,Tbl.d);
 +
SortTag='<span style="display:none" class="sortkey">' .. Numstr .. '</span>';
 +
Text = SortTag .. davor .. Text;
 
end
 
end
 
return Text
 
return Text
 
end
 
end
 
--
 
--
 +
 +
local function GetYear(Args)
 +
local Tbl = {}
 +
local IsOk = true;
 +
local Year = 0;
 +
IsOk, Tbl = Split(Args[1])
 +
if not IsOk or Tbl.y  == 0 then
 +
Year = 0;
 +
return Year;
 +
end
 +
return Tbl.y;
 +
end
 +
 +
local function CountDays(Args)
 +
local Tbl = {}
 +
local IsOk = true;
 +
local Days = 0;
 +
IsOk, Tbl = Split(Args[1])
 +
if not IsOk or Tbl.y  == 0 then
 +
Days = 0;
 +
return Days;
 +
end
 +
if Tbl.m == 0 or  Tbl.m == 1 then
 +
Days = Tbl.d;
 +
return Days;
 +
end
 +
if Tbl.m == 2 then
 +
Days = 31 + Tbl.d;
 +
return Days;
 +
end
 +
if Tbl.y % 4 == 0 then
 +
Days = 60
 +
else
 +
Days = 59;
 +
end
 +
if Tbl.m ==  3 then Days = Days + Tbl.d; end
 +
if Tbl.m ==  4 then Days = Days +  31 + Tbl.d; end
 +
if Tbl.m ==  5 then Days = Days +  61 + Tbl.d; end
 +
if Tbl.m ==  6 then Days = Days +  92 + Tbl.d; end
 +
if Tbl.m ==  7 then Days = Days + 122 + Tbl.d; end
 +
if Tbl.m ==  8 then Days = Days + 153 + Tbl.d; end
 +
if Tbl.m ==  9 then Days = Days + 184 + Tbl.d; end
 +
if Tbl.m == 10 then Days = Days + 214 + Tbl.d; end
 +
if Tbl.m == 11 then Days = Days + 245 + Tbl.d; end
 +
if Tbl.m == 12 then Days = Days + 275 + Tbl.d; end
 +
return Days;
 +
end
 +
    
function p.Execute(frame)
 
function p.Execute(frame)
 
local FR = frame:getParent()
 
local FR = frame:getParent()
 +
if frame:callParserFunction('int', 'lang' ) == 'de-at' then
 +
FR.args['AT']='ja';
 +
end
 
return Run(FR.args)
 
return Run(FR.args)
 
end
 
end
Zeile 195: Zeile 358:  
return Run(FR.args)
 
return Run(FR.args)
 
end
 
end
 +
 +
function p.DayInYear(frame)
 +
local FR = frame:getParent()
 +
local Number = CountDays(FR.args);
 +
return tostring(Number);
 +
end
 +
 +
function p.YearFromISO(frame)
 +
local FR = frame:getParent()
 +
local Number = GetYear(FR.args);
 +
return tostring(Number);
 +
end
 +
 +
 
return p
 
return p
Cookies helfen uns bei der Bereitstellung von imedwiki. Durch die Nutzung von imedwiki erklärst du dich damit einverstanden, dass wir Cookies speichern.

Navigationsmenü