Modul:Vorlage:FormatDate: Unterschied zwischen den Versionen

Aus FreeWiki
Zur Navigation springen Zur Suche springen
te>Antonsusi
K
te>Antonsusi
K
Zeile 8: Zeile 8:
 
             Datum.m = 0
 
             Datum.m = 0
 
             Datum.d = 0
 
             Datum.d = 0
            -- str = mw.ustring.gsub(str,'/','-');  -- Evtl. Erweiterung auf Slashstring.
 
 
             pos = mw.ustring.find(str,'-',1,true);
 
             pos = mw.ustring.find(str,'-',1,true);
 
             if pos == 1 then -- Minuszeichen am Anfang - nochmal suchen
 
             if pos == 1 then -- Minuszeichen am Anfang - nochmal suchen
Zeile 52: Zeile 51:
 
         --
 
         --
  
         function p.Run(frame)
+
         function Run(Args)
 
             local T_F  = {"Januar","Februar", "März", "April", "Mai","Juni", "Juli", "August","September","Oktober","November","Dezember","Jänner"}
 
             local T_F  = {"Januar","Februar", "März", "April", "Mai","Juni", "Juli", "August","September","Oktober","November","Dezember","Jänner"}
 
             local T_M  = {"Jan.","Feb.",  "Mrz", "Apr.", "Mai","Jun.", "Jul.", "Aug.","Sep.","Okt.","Nov.","Dez.","Jän."}
 
             local T_M  = {"Jan.","Feb.",  "Mrz", "Apr.", "Mai","Jun.", "Jul.", "Aug.","Sep.","Okt.","Nov.","Dez.","Jän."}
Zeile 64: Zeile 63:
 
             local Tbl = {}
 
             local Tbl = {}
 
              
 
              
             if mw.ustring.lower(frame.args[2] or "") == "nbsp"  or mw.ustring.lower(frame.args[3] or "") == "nbsp"  or mw.ustring.lower(frame.args[4] or "") == "nbsp" then NBSP = true; end
+
             if mw.ustring.lower(Args[2] or "") == "nbsp"  or mw.ustring.lower(Args[3] or "") == "nbsp"  or mw.ustring.lower(Args[4] or "") == "nbsp" then NBSP = true; end
             if mw.ustring.lower(frame.args[2] or "") == "link"  or mw.ustring.lower(frame.args[3] or "") == "link"  or mw.ustring.lower(frame.args[4] or "") == "link" then LINK = true; end
+
             if mw.ustring.lower(Args[2] or "") == "link"  or mw.ustring.lower(Args[3] or "") == "link"  or mw.ustring.lower(Args[4] or "") == "link" then LINK = true; end
             if mw.ustring.upper(frame.args[2] or "") == "M"    or mw.ustring.upper(frame.args[3] or "") == "M"    or mw.ustring.upper(frame.args[4] or "") == "M"    then STIL = 'M'; end
+
             if mw.ustring.upper(Args[2] or "") == "M"    or mw.ustring.upper(Args[3] or "") == "M"    or mw.ustring.upper(Args[4] or "") == "M"    then STIL = 'M'; end
             if mw.ustring.upper(frame.args[2] or "") == "S"    or mw.ustring.upper(frame.args[3] or "") == "S"    or mw.ustring.upper(frame.args[4] or "") == "S"    then STIL = 'S'; end
+
             if mw.ustring.upper(Args[2] or "") == "S"    or mw.ustring.upper(Args[3] or "") == "S"    or mw.ustring.upper(Args[4] or "") == "S"    then STIL = 'S'; end
             if mw.ustring.lower(frame.args['AT'] or "") == "ja" then AT = true; end
+
             if mw.ustring.lower(Args['AT'] or "") == "ja" then AT = true; end
  
             Tbl = Split(frame.args[1])
+
             Tbl = Split(Args[1])
 
             if Tbl.y == 'x' then
 
             if Tbl.y == 'x' then
 
                 Text = '<span class="error">[[Vorlage:FormatDate]]: Ungültiger Wert für Jahr!</span>'
 
                 Text = '<span class="error">[[Vorlage:FormatDate]]: Ungültiger Wert für Jahr!</span>'
Zeile 133: Zeile 132:
 
         --
 
         --
 
     function p.Execute(frame)
 
     function p.Execute(frame)
         return p.Run(frame:getParent())
+
         local FR = frame:getParent()
 +
        return Run(FR.args)
 
     end
 
     end
  
 
return p
 
return p

Version vom 2. Juni 2013, 12:44 Uhr

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
               return Datum
           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 Datum
           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 Datum
           end
           if Datum.m == 0 then
               Datum.d = 0
           else
               Datum.d = tonumber(Teil) or 0
           end
           return Datum
       end
       --
       local function CheckDate(Datum)
           if ( Datum.m == 1 or Datum.m == 3  or Datum.m == 5  or Datum.m == 7  or Datum.m == 8  or Datum.m == 10  or Datum.m == 12 ) and Datum.d > 31 then
               return false;
           end
           if  Datum.m == 2 then -- Die greg. Sonderregeln werden ignoriert.
               if Datum.y % 4 ~= 0 and Datum.d > 28 then return false; end
               if Datum.y % 4 == 0 and Datum.d > 29 then return false; end
           end
           -- Hier nur noch 30-Tage-Monate übrig.
           if Datum.d > 30  then return false; end
           return true;
       end
       --
       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.",  "Mrz", "Apr.", "Mai","Jun.", "Jul.", "Aug.","Sep.","Okt.","Nov.","Dez.","Jän."}
           local T_S  = {"Jan.","Feb.", "März", "Apr.", "Mai","Juni", "Juli", "Aug.","Sep.","Okt.","Nov.","Dez.","Jän."}
           local Text = "";
           local   AT = false;
           local NBSP = false;
           local LINK = false;
           local VCHR = "";
           local STIL = 'F';
           local Tbl = {}
           
           if mw.ustring.lower(Args[2] or "") == "nbsp"  or mw.ustring.lower(Args[3] or "") == "nbsp"  or mw.ustring.lower(Args[4] or "") == "nbsp" then NBSP = true; end
           if mw.ustring.lower(Args[2] or "") == "link"  or mw.ustring.lower(Args[3] or "") == "link"  or mw.ustring.lower(Args[4] or "") == "link" then LINK = true; end
           if mw.ustring.upper(Args[2] or "") == "M"     or mw.ustring.upper(Args[3] or "") == "M"     or mw.ustring.upper(Args[4] or "") == "M"    then STIL = 'M'; end
           if mw.ustring.upper(Args[2] or "") == "S"     or mw.ustring.upper(Args[3] or "") == "S"     or mw.ustring.upper(Args[4] or "") == "S"    then STIL = 'S'; end
           if mw.ustring.lower(Args['AT'] or "") == "ja" then AT = true; end
           Tbl = Split(Args[1])
           if Tbl.y == 'x' then
               Text = 'Vorlage:FormatDate: Ungültiger Wert für Jahr!'
               return Text
           end
           if Tbl.m > 12 or Tbl.m < 0 then
               Text = 'Vorlage:FormatDate: Ungültiger Wert für Monat!'
               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 = 'Vorlage:FormatDate: Ungültiges Datum!'
                   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 = "" .. 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
           return Text
       end
       --
   function p.Execute(frame)
       local FR = frame:getParent()
       return Run(FR.args)
   end

return p