Zum Inhalt springen

Modul:WTA ChinesischeTop10

aus Wikipedia, der freien Enzyklopädie

Die Dokumentation für dieses Modul kann unter Modul:WTA ChinesischeTop10/Doku erstellt werden

local p = {}

local function nameAnpassen(name)
    local s = {}
    local i = 0

    if name == nil then
        return ''
    end

    if name:find('(', 1, true) == nil then
        return name
    end

    -- Namensteile in Array s speichern und Anzahl in i
    for teil in string.gmatch(name, "%S+") do
        i = i + 1
        s[i] = teil
    end

    if i == 2 then
        return name
    end

    -- der Klammerzusatz kann mehrteilig sein (zB Tennisspielerin, 2000)
    -- ab dem erste Teil mit einer öffnenden Klammer wird der Name daher
    -- abgebrochen
    name = '[[' .. name .. '|'
    for j=1,i,1 do
        if (s[j]:find('(', 1, true) ~= nil) then
            break
        end
        name = name .. s[j] .. ' '
    end
    name = name .. ']]'

    return name
end

-- ed ist entweder 'einzel' oder 'Doppel' und entscheidet welche der beiden
-- Listen angezeigt wird
local function TopTen(frame, ed)
    local retVal
    local name = tostring(mw.title.getCurrentTitle())

    if not name then
        retVal = ''
    else
        -- die Top10 werden aus dem Modul WTA_Top10_Daten geladen
        -- da sie ReadOnly sind werden die anzuzeigenden Daten auf die Variable
        -- ZehnBeste kopiert
        local Top10
        local ZehnBeste = {}
        -- heute berechnet die Tage des aktuellen Datums an Hand der
        -- Jahreszahl * 365 + Monat * 30 + Tag
        -- also zb 2026-08-15 --> 2026 * 365 + 8 * 30 + 15
        local heute = tonumber(frame.args.Datum:sub(1, 4)) * 365 + tonumber(frame.args.Datum:sub(6, 7)) * 30 + tonumber(frame.args.Datum:sub(9, 10))

        -- aus dem Modul WTA_Top10_Daten die Daten laden
        if ed == 'Einzel' then
            Top10 = mw.loadData('Modul:WTA_Top10_Daten').CHN.Einzel
        else
            Top10 = mw.loadData('Modul:WTA_Top10_Daten').CHN.Doppel
        end
        
        if tonumber(Top10.Stand:sub(1,4)) * 365 + tonumber(Top10.Stand:sub(6, 7)) * 30 + tonumber(Top10.Stand:sub(9, 10)) < heute - 100 then
            -- der Stand der Daten wird ebenso wie das aktuelle Datum (siehe heute weiter oben)
            -- in eine Zahl an Tagen umgerechnet
            -- ist der Stand mehr als 100 Tage sind die Daten veraltet
            retVal = ''
        else
            -- jetzt ist noch fest zu stellen, ob sich die Spielerin in der Liste der
            -- Top 10 befindet
            if name == Top10.Name1 or
               name == Top10.Name2 or
               name == Top10.Name3 or
               name == Top10.Name4 or
               name == Top10.Name5 or
               name == Top10.Name6 or
               name == Top10.Name7 or
               name == Top10.Name8 or
               name == Top10.Name9 or
               name == Top10.Name10 then

                -- befindet sie sich in der Liste muss der Name noch angepasst werden
                -- um Patronyme und Klammerzusätze zu entfernen
                ZehnBeste.Name1 = nameAnpassen(Top10.Name1, Top10.Land1)
                ZehnBeste.Position1 = Top10.Position1
                ZehnBeste.Aenderung1 = Top10.Aenderung1
                ZehnBeste.Land1 = Top10.Land1
                ZehnBeste.Name2 = nameAnpassen(Top10.Name2, Top10.Land2)
                ZehnBeste.Position2 = Top10.Position2
                ZehnBeste.Aenderung2 = Top10.Aenderung2
                ZehnBeste.Land2 = Top10.Land2
                ZehnBeste.Name3 = nameAnpassen(Top10.Name3, Top10.Land3)
                ZehnBeste.Position3 = Top10.Position3
                ZehnBeste.Aenderung3 = Top10.Aenderung3
                ZehnBeste.Land3 = Top10.Land3
                ZehnBeste.Name4 = nameAnpassen(Top10.Name4, Top10.Land4)
                ZehnBeste.Position4 = Top10.Position4
                ZehnBeste.Aenderung4 = Top10.Aenderung4
                ZehnBeste.Land4 = Top10.Land4
                ZehnBeste.Name5 = nameAnpassen(Top10.Name5, Top10.Land5)
                ZehnBeste.Position5 = Top10.Position5
                ZehnBeste.Aenderung5 = Top10.Aenderung5
                ZehnBeste.Land5 = Top10.Land5
                ZehnBeste.Name6 = nameAnpassen(Top10.Name6, Top10.Land6)
                ZehnBeste.Position6 = Top10.Position6
                ZehnBeste.Aenderung6 = Top10.Aenderung6
                ZehnBeste.Land6 = Top10.Land6
                ZehnBeste.Name7 = nameAnpassen(Top10.Name7, Top10.Land7)
                ZehnBeste.Position7 = Top10.Position7
                ZehnBeste.Aenderung7 = Top10.Aenderung7
                ZehnBeste.Land7 = Top10.Land7
                ZehnBeste.Name8 = nameAnpassen(Top10.Name8, Top10.Land8)
                ZehnBeste.Position8 = Top10.Position8
                ZehnBeste.Aenderung8 = Top10.Aenderung8
                ZehnBeste.Land8 = Top10.Land8
                ZehnBeste.Name9 = nameAnpassen(Top10.Name9, Top10.Land9)
                ZehnBeste.Position9 = Top10.Position9
                ZehnBeste.Aenderung9 = Top10.Aenderung9
                ZehnBeste.Land9 = Top10.Land9
                ZehnBeste.Name10 = nameAnpassen(Top10.Name10, Top10.Land10)
                ZehnBeste.Position10 = Top10.Position10
                ZehnBeste.Aenderung10 = Top10.Aenderung10
                ZehnBeste.Land10 = Top10.Land10

                ZehnBeste.Titel = "[[Women’s Tennis Association|WTA]]-Weltrangliste: [[Datei:Flag of the People's Republic of China.svg|20px|border|class=noviewer|link=China]] Die zehn bestplatzierten chinesischen Tennisspielerinnen im " .. ed
                
                retVal = frame:expandTemplate{title = 'Rangliste10OU', args = ZehnBeste}
            else
                -- die Spielerin befindet sich nicht unter den Top 10
                -- die Liste wird also nicht angezeigt
                retVal = ''
            end
        end
    end

    return retVal
end

function p.Einzel(frame)
    return TopTen(frame, 'Einzel')
end

function p.Doppel(frame)
    return TopTen(frame, 'Doppel')
end

return p