Modul:Vorlage:FormatDate: Unterschied zwischen den Versionen

Aus FreeWiki
Zur Navigation springen Zur Suche springen
te>Antonsusi
K
(AZ: Die Seite wurde geleert.)
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) .. '.&nbsp;'
 
                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 .. "&nbsp;"
 
                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
 

Version vom 2. August 2013, 01:50 Uhr