Modul:Tennisturniere-Damen

aus Wikipedia, der freien Enzyklopädie

Das Modul:Tennisturniere-Damen erzeugt eine Tabelle mit den Turnierergebnissen der wichtigsten Turniere der WTA Tour. Für 1990-2008 sind das die Turniere der Kategorie Tier I, für 2009-2020 die der Kategorien Premier Mandatory und Premier 5 und ab 2021 die der Kategorie WTA-1000. Für die Parameter siehe Vorlage:Tennisturniere-Dameneinzel bzw Vorlage:Tennisturniere-Damendoppel.

Die Funktion TennisturniereDamen ist zuständig für die Erzeugung der Tabelle und der ersten Zeile mit den Links auf die jeweiligen WTA Tour Artikel (wie zB WTA Tour 2021). Daneben wird die Funktion isUsed genutzt, um für jedes Turnier festzustellen, ob es einen Eintrag dafür gibt, oder ob die jeweilge Turnierzeile weggelassen werden kann. Wird die Zeile benötigt (isUsed gibt true zurück), so wird die Funktion getRow genutzt, um die Ergebnisse des Turniers in einer Zeile zusammen zu fassen.

Die Funktion getRow stellt für jedes über die Parameter vorgegebene Jahr fest, ob das Turnier stattgefunden hat (mittels der Funktion wasHeld) und ob es in einer der oben genannten Kategorien war (über die Funktion differentCategory). Gibt wasHeld true zurück und differentCategory false, so wird das über Parameter angegebene Resultat des jeweiligen Turniers in die Zeile eingetragen, anderenfalls entweder n.a. für nicht ausgetragen oder a.K. für andere Kategorie. In der Funktion sind die Links auf die jeweiligen Turnierartikel hard coded. Falls sich an einem Turniernamen mehr als die Jahreszahl ändert, muss diese Funktion also erweitert werden.

Die Funktion differentCategory prüft ob das Turnier im jeweiligen Jahr einer der oben angegebenen Kategorien angehört hat. Die Kategoriezugehörig der Turniere ist in dieser Funktion hard coded.

Die Funktion wasHeld prüft ob das Turnier im jeweilgen Jahr stattgefunden hat. Wann welches Turnier stattgefunden hat ist in dieser Funktion hard coded.

Einsprungpunkte in das Modul sind die Funktionen TennisturniereDamenEinzel bzw TennisturniereDamenDoppel, die dafür sorgen, dass die Links in der Tabelle auf den entsprechenden Wettkampf gesetzt werden.

Änderungsbedarf

neues Turnier wird in die Kategorien aufgenommen

In diesem Fall ist die Funktion TennisturniereDameneinzel zu ergänzen um einen Dreizeiler der Form:

if isUsed(frame, firstYear, lastYear, 'DOH') then
  table:node(getRow(frame, 'WTA Doha|Doha', '#', 'DOH', firstYear, lastYear)):newline()
end

Dabei ist DOH durch das Kürzel des neuen Turniers zu ersetzen und WTA Doha|Doha durch den Übersichtsartikel des neuen Turniers vor der Pipe und seine Bezeichnung in der Tabelle dahinter.

Zusätzlich müssen die Funktionen getRow, differentCategory und wasHeld um elseif Blöcke für das neue Turnier erwaeitert werden.

Turnierartikel wird umbenannt

Wird der Turnierartikel umbenannt (mehr als die Jahreszahl ändert sich), muss der zugehörige elseif Block des Turniers in der Funktion getRow angepasst werden.

Turnier findet nicht (mehr) statt

Der zugehörige elseif Block in der Funktion wasHeld muss angepasst werden.

Turnier rutscht in eine andere Kategorie

Der zugehörige elseif Block in der Funktion differentCategory muss angepasst werden.

Die WTA Tour wird umbenannt

Davon ist nur die erste Zeile der Tabelle betroffen. Diese wird in der Funktion TennisturniereDameneinzel erzeugt. Es muss also die Loop

for year = firstYear, lastYear
do
  head:node(mw.html.create('th'):wikitext('[[WTA Tour ' .. year .. '|' .. year .. ']]'))
end

zu zwei (oder mehr) Loops geändert werden.

for year = firstYear, letztesJahrWTATour
do
  head:node(mw.html.create('th'):wikitext('[[WTA Tour ' .. year .. '|' .. year .. ']]'))
end
for year = erstesJahrNeuerName, lastYear
do
  head:node(mw.html.create('th'):wikitext('[[NeuerName ' .. year .. '|' .. year .. ']]'))
end

local p = {}

-- die Funktion getCell erzeugt eine Tabellenzelle
-- Parameter:
--   link: Artikelname
--   result: Resultat der Athletin/des Athleten (zB S oder HF)
-- Rückgabe:
--   ein String mit dem HTML Code der Tabellenzelle
local function getCell(link, result)
    local cell

    if not result or result == '' then
      cell = mw.html.create('td'):wikitext(' ')
    else
      if result == '-' then
        result = '–'
      end

      if result == 'S' then
        cell = mw.html.create('td'):wikitext('[[' .. link .. '|S]]'):css('background-color', '#FFF68F'):css('font-weight', 'bold')
      elseif result == 'F' then
        cell = mw.html.create('td'):wikitext('[[' .. link .. '|F]]'):css('background-color', '#BFEFFF')
      elseif result == 'HF' or result == 'KF' then
        cell = mw.html.create('td'):wikitext('[[' .. link .. '|' .. result .. ']]'):css('background-color', '#FFE7BA')
      elseif result == ' ' or not result then
        cell = mw.html.create('td'):wikitext(' ')
      elseif result == 'B' then
        cell = mw.html.create('td'):wikitext('[[' .. link .. '|B]]'):css('background-color', '#CC9966')
      elseif result == 'Q1' or result == 'Q2' or result == 'Q3' then
        cell = mw.html.create('td'):wikitext('[[' .. link .. '/Qualifikation' .. '|' .. result .. ']]')
      else
        cell = mw.html.create('td'):wikitext('[[' .. link .. '|' .. result .. ']]')
      end
    end

    return cell
end

-- die Funktion wasHeld überprüft ob ein Wettkampf im angegebenen Jahr ausgerichtet wurde
-- Parameter:
--   prefix: das Prefix des Wettkampfs, das in den Vorlagenparametern verwendet wird (zB AUO, FRO)
--   year: Jahr der Ausrichtung
-- Rückgabe:
--   boolean false wenn der Wettkampf nicht stattgefunden hat
--   boolean true wenn er stattgefunden hat
local function wasHeld(prefix, year)
    local held = false

    if prefix == 'AUO' then
      if year ~= 1986 then
        held = true
      end
    elseif prefix == 'FRO' then
      held = true
    elseif prefix == 'WIM' then
      if year ~= 2020 then
        held = true
      end
    elseif prefix == 'USO' then
      held = true
    elseif prefix == 'WTC' then
      if year ~= 2020 then
        held = true
      end
    elseif prefix == 'CHI' then
      if year == 1971 or (year > 1972 and year < 1998) or year > 2020 then
        held = true
      end
    elseif prefix == 'BOC' then
      if year >= 1989 and year < 1993 then
        held = true
      end
    elseif prefix == 'DOH' then
      if year > 2000 and year ~= 2009 and year ~= 2010 then
        held = true
      end
    elseif prefix == 'DUB' then
      if year > 2001 then
        held = true
      end
    elseif prefix == 'IND' then
      if (year >= 1997 and year <= 2019) or year >= 2021 then
        held = true
      end
    elseif prefix == 'MIA' then
      if year == 1973 or (year >= 1984 and year <= 2019) or year >= 2021 then
        held = true
      end
    elseif prefix == 'HHI' then
      if year >= 1973 and year <= 2000 then
        held = true
      end
    elseif prefix == 'CHA' then
      if (year >= 1986 and year <= 1987) or (year >= 2001 and year <= 2019) or year >= 2021 then
        held = true
      end
    elseif prefix == 'ROM' then
      if (year >= 1930 and year <= 1935) or (year >= 1950 and year <= 1985) or year >= 1987 then
        held = true
      end
    elseif prefix == 'MAD' then
      if (year >= 1996 and year <= 2003) or (year >= 2009 and year <= 2019) or year >= 2021 then
        held = true
      end
    elseif prefix == 'BER' then
      if year == 1979 or (year >= 1981 and year <= 2008) or year >= 2021 then
        held = true
      end
    elseif prefix == 'SDI' then
      if year == 1971 or (year >= 1979 and year <= 1982) or (year >= 1984 and year <= 2007) or (year >= 2010 and year <= 2013)then
        held = true
      end
    elseif prefix == 'CIN' then
      if (year >= 1899 and year <= 1917) or year == 1920 or (year >= 1922 and year <= 1934) or (year >= 1936 and year <= 1973) or (year >= 1980 and year <= 1982) or year == 1988 or year >= 2004 then
        held = true
      end
    elseif prefix == 'KAN' then
      if (year >= 1892 and year <= 1904) or (year >= 1906 and year <= 1914) or (year >= 1918 and year <= 1940) or (year >= 1946 and year <= 2019) or year >= 2021 then
        held = true
      end
    elseif prefix == 'TOK' then
      if year >= 1976 then
        held = true
      end
    elseif prefix == 'WUH' then
      if (year >= 2014 and year < 2020) or year > 2022 then
        held = true
      end
    elseif prefix == 'MUN' then
      if year == 1998 or year == 1999 then
        held = true
      end
    elseif prefix == 'ZUR' then
      if year >= 1984 and year <= 2008 then
        held = true
      end
    elseif prefix == 'PHI' then
      if year == 1971 or (year >= 1973 and year <= 1979) or (year >= 1991 and year <= 2000) or (year >= 2003 and year <= 2005) then
        held = true
      end
    elseif prefix == 'PEK' then
      if (year >= 1994 and year <= 1996) or (year >= 2004 and year <= 2019) or year > 2022 then
        held = true
      end
    elseif prefix == 'MOS' then
      if year == 1971 or year == 1975  or year == 1989  or year == 1990 or (year >= 1994 and year <= 2019) or year >= 2021 then
        held = true
      end
    elseif prefix == 'OLY' then
      if year >= 1988 and (year % 4) == 0 then
        held = true
      end
    elseif prefix == 'FED' then
      if year >= 1963 then
        held = true
      end
    elseif prefix == 'GUA' then
      if year >= 2022 then
        held = true
      end
    end

    return held
end

-- die Funktion differentCategory prüft ob der Wettkampf in einer für die Tabelle relevanten Kategorie war
-- relevante Kategorien sind:
--   die Grand Slam Turniere
--   1990-2008 Tier I
--   2009-2020 Premier Mandatory und Premier 5
--   ab 2021   WTA 1000
-- Parameter:
--   prefix: das Prefix des Wettkampfs, das in den Vorlagenparametern verwendet wird (zB AUO, FRO)
--   year: Jahr der Ausrichtung
-- Rückgabe:
--   boolean true wenn der Wettkampf nicht relevant war
--   boolean false wenn er relevant war
local function differentCategory(prefix, year)
    local diff = true

    if prefix == 'AUO' or prefix == 'FRO' or prefix == 'WIM' or prefix == 'USO' then
      diff = false
    elseif prefix == 'WTC' then
      diff = false
    elseif prefix == 'CHI' then
      if year == 1990 then
        diff = false
      end
    elseif prefix == 'BOC' then
      if year >= 1991 and year <= 1992 then
        diff = false
      end
    elseif prefix == 'DOH' then
      if year == 2008 or (year >= 2012 and year <= 2014) or (year > 2015 and (year % 2) == 0) then
        diff = false
      end
    elseif prefix == 'DUB' then
      if (year >= 2009 and year <= 2011) or (year >= 2015 and (year % 2) == 1) then
        diff = false
      end
    elseif prefix == 'IND' then
      if (year >= 1997 and year <= 2019) or year >= 2021 then
        diff = false
      end
    elseif prefix == 'MIA' then
      if (year >= 1990 and year <= 2019) or year >= 2021 then
        diff = false
      end
    elseif prefix == 'HHI' then
      if year >= 1990 and year <= 2000 then
        diff = false
      end
    elseif prefix == 'CHA' then
      if year >= 2001 and year <= 2008 then
        diff = false
      end
    elseif prefix == 'ROM' then
      if year >= 1990 then
        diff = false
      end
    elseif prefix == 'MAD' then
      if year >= 2009 then
        diff = false
      end
    elseif prefix == 'BER' then
      if year >= 1990 and year <= 2008 then
        diff = false
      end
    elseif prefix == 'SDI' then
      if year >= 2004 and year <= 2007 then
        diff = false
      end
    elseif prefix == 'CIN' then
      if year >= 2009 then
        diff = false
      end
    elseif prefix == 'KAN' then
      if year >= 1990 then
        diff = false
      end
    elseif prefix == 'TOK' then
      if year >= 1993 and year <= 2013 then
        diff = false
      end
    elseif prefix == 'WUH' then
      diff = false
    elseif prefix == 'MUN' then
      if year >= 1998 and year <= 1999 then
        diff = false
      end
    elseif prefix == 'ZUR' then
      if year >= 1993 and year <= 2007 then
        diff = false
      end
    elseif prefix == 'PHI' then
      if year >= 1993 and year <= 1995 then
        diff = false
      end
    elseif prefix == 'PEK' then
      if year >= 2009 then
        diff = false
      end
    elseif prefix == 'MOS' then
      if year >= 1997 and year <= 2008 then
        diff = false
      end
    elseif prefix == 'OLY' then
      diff = false
    elseif prefix == 'FED' then
      diff = false
    elseif prefix == 'GUA' then
      if year > 2021 then
        diff = false
      end
    end

    return diff
end

-- die Funktion isUsed prüft ob es für die Athletin/den Athleten
-- im angegebenen Zeitraum für das Turnier mindestens einen gesetzten Parameter gibt
-- Parameter:
--   frame: der aufrufende frame
--   firstYear: erstes Jahr des zu prüfenden Zeitraums
--   lastYear: letztes Jahr des zu prüfenden Zeitraums
--   prefix: Prefix des Wettkampfs (zB AUS für Australien Open oder WIM für Wimbledon Championships)
-- Rückgabe:
--   boolean false wenn in der Vorlage keine Parameter für den Wettkampf gesetzt wurde
--   boolean true wenn der Anwender der Vorlage einen Parameter für den Wettkampf gesetzt hat
local function isUsed(frame, firstYear, lastYear, prefix)
    local used=false
    local year
    local result

    for year = firstYear, lastYear
    do
      if frame:getParent().args[prefix .. year] then
        result = frame:getParent().args[prefix .. year] or '&nbsp;'
        if wasHeld(prefix, year) and not differentCategory(prefix, year) and result ~= '&nbsp;' then
          used = true
          break
        end
      end
    end

    return used
end

-- die Funktion getRow erzeugt eine Wettkampfzeile der Tabelle
-- Parameter:
--   frame: der aufrufende frame
--   overviewArticle: der Überblicksartikel für den Wettkampf (zB Australian Open)
--   competition: entweder 'einzel' oder 'doppel'
--   bgColor: die Hintergrundfarbe der Zeile
--   prefix: Prefix des Wettkampfs (zB AUS für Australien Open oder WIM für Wimbledon Championships)
--   firstYear: erstes Jahr in der Tabelle
--   lastYear: letztes Jahr in der Tabelle
-- Rückgabe:
--   ein String mit dem HTML Code der Zeile
local function getRow(frame, overviewArticle, competition, bgColor, prefix, firstYear, lastYear)
    local row
    local sum
    local karriere
    local year
    local lYear
    local year2
    local result
    local colspan
    local possibleResults = {}

    possibleResults[''] = 0
    possibleResults['Q1'] = 1
    possibleResults['Q2'] = 2
    possibleResults['Q3'] = 3
    possibleResults['1'] = 4
    possibleResults['2'] = 5
    possibleResults['3'] = 6
    possibleResults['K3'] = 7
    possibleResults['K2'] = 8
    possibleResults['K1'] = 9
    possibleResults['P2'] = 10
    possibleResults['W2'] = 11
    possibleResults['PO'] = 12
    possibleResults['Q'] = 13
    possibleResults['AF'] = 14
    possibleResults['VF'] = 15
    possibleResults['RR'] = 16
    possibleResults['HF'] = 17
    possibleResults['B'] = 18
    possibleResults['F'] = 19
    possibleResults['S'] = 20

    karriere = 0
    sum = 0

    row = mw.html.create('tr'):css('background-color', bgColor)
    row:node(mw.html.create('td'):wikitext('[[' .. overviewArticle .. ']]'):css('text-align', 'left'))
    lYear = tonumber(lastYear)
    year = tonumber(firstYear)
    while (year <= lYear) do
      colspan = 1
      if wasHeld(prefix, year) then
        if differentCategory(prefix, year) then
          for year2 = year + 1, lYear do
            if not wasHeld(prefix, year2) or differentCategory(prefix, year2) then
              colspan = colspan + 1
            else
              break
            end
          end
          cell = mw.html.create('td'):wikitext('&nbsp;')
          cell:css('font-style', 'italic')
          cell:css('background-color', '#e8e9ea')
          if colspan > 1 then
            cell:attr('colspan', colspan)
          end
        elseif not frame:getParent().args[prefix .. year] then
          cell = mw.html.create('td'):wikitext('&nbsp;')
        else
          result = frame:getParent().args[prefix .. year] or '&nbsp;'
          if prefix == 'AUO' then
            cell = getCell('Australian Open ' .. year .. '/Damen' .. competition, result)
          elseif prefix == 'FRO' then
            cell = getCell('French Open ' .. year .. '/Damen' .. competition, result)
          elseif prefix == 'WIM' then
            cell = getCell('Wimbledon Championships ' .. year .. '/Damen' .. competition, result)
          elseif prefix == 'USO' then
            cell = getCell('US Open ' .. year .. '/Damen' .. competition, result)
          elseif prefix == 'WTC' then
            cell = getCell('WTA Championships ' .. year, result)
          elseif prefix == 'CHI' then
            cell = getCell('Virginia Slims of Chicago ' .. year, result)
          elseif prefix == 'BOC' then
            cell = getCell('Virginia Slims of Florida ' .. year, result)
          elseif prefix == 'DOH' then
            if year < 2022 then
              cell = getCell('Qatar Total Open ' .. year, result)
            else
              cell = getCell('Qatar TotalEnergies Open ' .. year, result)
            end
          elseif prefix == 'DUB' then
            if year == 2009 or year == 2010 then
              cell = getCell('Barclays Dubai Tennis Championships ' .. year .. '/Damen', result)
            elseif year == 2011 then
              cell = getCell('Dubai Duty Free Tennis Championships ' .. year .. '/Damen', result)
            else
              cell = getCell('Dubai Duty Free Tennis Championships ' .. year .. '/Damen', result)
            end
          elseif prefix == 'IND' then
            if year == 1997 or year == 1998 then
              cell = getCell('State Farm Evert Cup ' .. year, result)
            elseif year == 1999 then
              cell = getCell('Evert Cup 1999', result)
            elseif year >= 2000 and year <= 2001 then
              cell = getCell('Tennis Masters Series Indian Wells ' .. year .. '/Damen', result)
            elseif year >= 2002 and year <= 2008 then
              cell = getCell('Pacific Life Open ' .. year .. '/Damen', result)
            elseif year >= 2009 then
              cell = getCell('BNP Paribas Open ' .. year .. '/Damen', result)
            end
          elseif prefix == 'MIA' then
            if year >= 1988 and year <= 1992 then
              cell = getCell('Lipton International Players Championships ' .. year .. '/Damen', result)
            elseif year >= 1993 and year <= 1999 then
              cell = getCell('The Lipton Championships ' .. year .. '/Damen', result)
            elseif year >= 2000 and year <= 2001 then
              cell = getCell('Ericsson Open ' .. year .. '/Damen', result)
            elseif year >= 2002 and year <= 2006 then
              cell = getCell('NASDAQ-100 Open ' .. year .. '/Damen', result)
            elseif year >= 2007 and year <= 2012 then
              cell = getCell('Sony Ericsson Open ' .. year .. '/Damen', result)
            elseif year >= 2013 and year <= 2014 then
              cell = getCell('Sony Open Tennis ' .. year .. '/Damen', result)
            elseif year >= 2015 then
              cell = getCell('Miami Open ' .. year .. '/Damen', result)
            end
          elseif prefix == 'HHI' then
            cell = getCell('Family Circle Cup ' .. year, result)
          elseif prefix == 'CHA' then
            cell = getCell('Family Circle Cup ' .. year, result)
          elseif prefix == 'ROM' then
            if year == 1990 then
              cell = getCell('Campionati Internazionali d’Italia Peugeot Open Cup 1990/Damen', result)
            elseif year == 1991 then
              cell = getCell('Peugeot Italian Open 1991/Damen', result)
            elseif year == 1992 then
              cell = getCell('Campionati Internazionali d’Italia Peugeot Open 1992/Damen', result)
            elseif year == 1993 then
              cell = getCell('Campionati Internazionali d’Italia 1993/Damen', result)
            elseif year == 1994 then
              cell = getCell('Mercedes Italian Open 1994/Damen', result)
            elseif year == 1995 or year == 1996 then
              cell = getCell('Italian Open ' .. year .. '/Damen', result)
            elseif year == 1997 or year == 1998 then
              cell = getCell('Campionati Internazionali d’Italia ' .. year .. '/Damen', result)
            elseif year == 1999 or year == 2000 then
              cell = getCell('Italian Open ' .. year .. '/Damen', result)
            elseif year == 2001 then
              cell = getCell('Tennis Masters Series Rome 2001/Damen', result)
            elseif year == 2002 then
              cell = getCell('Tennis Masters Roma 2002/Damen', result)
            elseif year == 2003 or year == 2004 then
              cell = getCell('Telecom Italia Masters ' .. year .. '/Damen', result)
            elseif year == 2005 then
              cell = getCell('Telecom Italia Masters Roma 2005/Damen', result)
            elseif year == 2006 then
              cell = getCell('Internazionali d’Italia 2006/Damen', result)
            elseif year >= 2007 then
              cell = getCell('Internazionali BNL d’Italia ' .. year .. '/Damen', result)
            end
          elseif prefix == 'MAD' then
            if year == 2009 or year == 2010 then
              cell = getCell('Mutua Madrileña Madrid Open ' .. year .. '/Damen', result)
            else
              cell = getCell('Mutua Madrid Open ' .. year .. '/Damen', result)
            end
          elseif prefix == 'BER' then
            if year == 1988 then
              cell = getCell('German Open 1988/Damen', result)
            elseif year == 1989 then
              cell = getCell('Lufthansa Cup 1989', result)
            elseif year == 1990 or year == 1991 then
              cell = getCell('Lufthansa Cup German Open ' .. year, result)
            elseif year == 1992 then
              cell = getCell('Lufthansa Cup 1992', result)
            elseif year == 1993 or year == 1994 then
              cell = getCell('German Open ' .. year .. '/Damen', result)
            elseif year >= 1995 and year <= 1997 then
              cell = getCell('German Open ' .. year .. ' (Tennis)/Damen', result)
            elseif year >= 1998 and year < 2000 then
              cell = getCell('German Open ' .. year .. '/Damen', result)
            elseif year == 2000 then
              cell = getCell('German Open ' .. year, result)
            elseif year == 2001 or year == 2002 then
              cell = getCell('Eurocard Ladies German Open ' .. year, result)
            elseif year == 2003 then
              cell = getCell('MasterCard German Open 2003', result)
            elseif year == 2004 then
              cell = getCell('Ladies German Open 2004', result)
            elseif year == 2005 then
              cell = getCell('Qatar Total German Open ' .. year, result)
            elseif year > 2005 then
              cell = getCell('Qatar Telecom German Open ' .. year, result)
            end
          elseif prefix == 'SDI' then
            cell = getCell('Acura Classic ' .. year, result)
          elseif prefix == 'CIN' then
            if year == 2009 or year == 2010 then
              cell = getCell('Western & Southern Financial Group Women’s Open ' .. year, result)
            else
              cell = getCell('Western & Southern Open ' .. year .. '/Damen', result)
            end
          elseif prefix == 'KAN' then
            if year == 1990 then
              cell = getCell('Player’s Ltd. Challenge Canadian Open 1990', result)
            elseif year == 1991 then
              cell = getCell('Canadian Open 1991/Damen (Tennis)', result)
            elseif year == 1992 then
              cell = getCell('Matinee Ltd. Canadian Open 1992/Damen', result)
            elseif year == 1993 then
              cell = getCell('Matinee Ltd. International 1993/Damen', result)
            elseif year == 1994 then
              cell = getCell('Matinee Ltd. International - Canadian Open 1994/Damen', result)
            elseif year >= 1995 and year <= 2000 then
              cell = getCell('Du Maurier Open ' .. year .. '/Damen', result)
            elseif year >= 2001 and year <= 2019 then
              cell = getCell('Rogers Cup ' .. year .. '/Damen', result)
            else
              cell = getCell('National Bank Open ' .. year .. '/Damen', result)
            end
          elseif prefix == 'TOK' then
            if year == 2001 then
              cell = getCell('Pan Pacific Open 2001', result)
            else
              cell = getCell('Toray Pan Pacific Open ' .. year, result)
            end
          elseif prefix == 'WUH' then
            cell = getCell('Dongfeng Motor Wuhan Open ' .. year, result)
          elseif prefix == 'MUN' then
            cell = getCell('Compaq Grand Slam Cup ' .. year .. '/Damen', result)
          elseif prefix == 'ZUR' then
            if year == 1993 then
              cell = getCell('Barilla Indoors 1993', result)
            elseif year == 1994 then
              cell = getCell('European Indoors Zurich 1994', result)
            elseif year == 1995 or year == 1996 then
              cell = getCell('European Indoors ' .. year, result)
            elseif year == 1997 then
              cell = getCell('European Indoor Championships 1997', result)
            elseif year == 1998 then
              cell = getCell('European Championships / Swisscom 1998', result)
            elseif year >= 1999 and year <= 2004 then
              cell = getCell('Swisscom Challenge ' .. year, result)
            else
              cell = getCell('Zurich Open ' .. year, result)
            end
          elseif prefix == 'PHI' then
            if year == 1993 or year == 1994 then
              cell = getCell('Virginia Slims of Philadelphia ' .. year, result)
            elseif year == 1995 then
              cell = getCell('Advanta Championships 1995', result)
            end
          elseif prefix == 'PEK' then
            cell = getCell('China Open ' .. year .. ' (Tennis)/Damen', result)
          elseif prefix == 'GUA' then
            cell = getCell('Guadalajara Open Akron ' .. year, result)
          elseif prefix == 'MOS' then
            cell = getCell('Kremlin Cup ' .. year .. '/Damen', result)
          elseif prefix == 'OLY' then
            cell = getCell('Olympische Sommerspiele ' .. year .. '/Tennis/Damen' .. competition, result)
          elseif prefix == 'FED' then
            if year >= 1982 and year <= 1994 then
              cell = getCell('Federation Cup ' .. year, result)
            elseif year >= 1995 and year < 2020 then
              cell = getCell('Fed Cup ' .. year, result)
            elseif year == 2020 then
              if year < lYear then
                if result == '&nbsp;' or not result or result == '' or result == '-' or result == '–' then
                  result = frame:getParent().args['WTC2021'] or '&nbsp;'
                end
                cell = getCell('Billie Jean King Cup 2020/21', result)
                cell:attr('colspan', 2)
                year = year + 1
              else
                cell = getCell('Billie Jean King Cup 2020/21', result)
              end
            elseif year == 2021 then
              cell = getCell('Billie Jean King Cup 2020/21', result)
            elseif year > 2021 then
              cell = getCell('Billie Jean King Cup ' .. year, result)
            end
          end
          if possibleResults[result] ~= null then
            if possibleResults[result] == karriere then
              sum = sum + 1
            elseif possibleResults[result] > karriere then
              karriere = possibleResults[result]
              sum = 1
            end
          end
        end
      else
        for year2 = year + 1, lYear do
          if not wasHeld(prefix, year2) or differentCategory(prefix, year2) then
            colspan = colspan + 1
          else
            break
          end
        end
        cell = mw.html.create('td'):wikitext('&nbsp;')
        cell:css('font-style', 'italic')
        cell:css('background-color', '#e8e9ea')
        if colspan > 1 then
          cell:attr('colspan', colspan)
        end
      end
      row:node(cell)
      year = year + colspan
    end
    if karriere == 0 then
      row:node(mw.html.create('td'):wikitext('—'))
    else
      for k,v in pairs(possibleResults) do
        if v == karriere then
          if k == 'S' then
            row:node(mw.html.create('td'):wikitext(sum .. ' × S'):css('background-color', '#FFF68F'):css('font-weight', 'bold'))
          elseif k == 'F' then
            row:node(mw.html.create('td'):wikitext(sum .. ' × F'):css('background-color', '#BFEFFF'))
          elseif k == 'HF' or result == 'KF' then
            row:node(mw.html.create('td'):wikitext(sum .. ' × ' .. k):css('background-color', '#FFE7BA'))
          elseif k == 'B' then
            row:node(mw.html.create('td'):wikitext(sum .. ' × B'):css('background-color', '#CC9966'))
          elseif k == '1' or k == '2' or k == '3' then
            row:node(mw.html.create('td'):wikitext(sum .. ' × ' .. k .. 'R'))
          else
            row:node(mw.html.create('td'):wikitext(sum .. ' × ' .. k))
          end
          break
        end
      end
    end

    return row
end

-- die Vorlage TennisturniereDamen erzeugt eine Tabelle mit den Turnierergebnissen der
-- wichtigsten Tennisturniere.
-- Parameter:
--   frame: der aufrufende frame
--   competition: entweder 'einzel' oder 'doppel'
--   tournaments: welche Turniere eingeschlossen werden sollen
--                'all' alle Turniere
--                'gs' nur die Grand Slam Turniere
--                'gswtc' Grand Slams und WTC
--                'gsoly' Grand Slams und Olympische Spiele
--                'gswtcoly' Grand Slams, WTC und Olympische Spiele
-- Die wichtigsten Turniere sind:
--   die Grand Slam Turniere
--   die Olympischen Spiele
--   der Fed Cup bzw Billie Jean King Cup
--   1990-2008 Kategorie Tier I
--   2009-2020 Kategorie Premier Mandatory und Premier 5
--   ab 2021   Kategorie WTA 1000
-- die Vorlage muss die folgenden Parameter haben:
--   firstYear: das erste Jahr für das Tabelleneinträge erzeugt werden sollen (vierstellig)
--   lastYear: das letzte Jahr für das Tabelleneinträge erzeugt werden sollen (vierstellig)
-- optional kommen folgende Parameter dazu
--   AUS gefolgt vom Jahr für das Ergebnis im jeweiligen Jahr für die Australian Open (zB AUS2016=1)
--   FRO gefolgt vom Jahr für das Ergebnis im jeweiligen Jahr für die French Open (zB FRO2016=2)
--   WIM gefolgt vom Jahr für das Ergebnis im jeweiligen Jahr für die Wimbledon Championships (zB WIM2016=AF)
--   USO gefolgt vom Jahr für das Ergebnis im jeweiligen Jahr für die US Open (zB USO2016=VF)
--   WTC gefolgt vom Jahr für das Ergebnis im jeweiligen Jahr für die WTA Tour Championships (zB WTC2016=S)
--   CHI gefolgt vom Jahr für das Ergebnis im jeweiligen Jahr für die WTA Chicago (zB CHI2016=HF)
--   BOC gefolgt vom Jahr für das Ergebnis im jeweiligen Jahr für die WTA Boca Raton (zB BOC2016=3)
--   DOH gefolgt vom Jahr für das Ergebnis im jeweiligen Jahr für die WTA Doha (zB DOH2016=&nbsp;)
--   DUB gefolgt vom Jahr für das Ergebnis im jeweiligen Jahr für die WTA Dubai (zB DUB2016=)
--   IND gefolgt vom Jahr für das Ergebnis im jeweiligen Jahr für die WTA Indian Wells
--   MIA gefolgt vom Jahr für das Ergebnis im jeweiligen Jahr für die WTA Miami
--   HHI gefolgt vom Jahr für das Ergebnis im jeweiligen Jahr für die WTA Hilton Head Island
--   CHA gefolgt vom Jahr für das Ergebnis im jeweiligen Jahr für die WTA Charleston
--   ROM gefolgt vom Jahr für das Ergebnis im jeweiligen Jahr für die WTA Rom
--   MAD gefolgt vom Jahr für das Ergebnis im jeweiligen Jahr für die WTA Madrid
--   BER gefolgt vom Jahr für das Ergebnis im jeweiligen Jahr für die WTA Berlin
--   SDI gefolgt vom Jahr für das Ergebnis im jeweiligen Jahr für die WTA San Diego
--   CIN gefolgt vom Jahr für das Ergebnis im jeweiligen Jahr für die WTA Cincinnati
--   KAN gefolgt vom Jahr für das Ergebnis im jeweiligen Jahr für die WTA Kanada
--   TOK gefolgt vom Jahr für das Ergebnis im jeweiligen Jahr für die WTA Tokio
--   WUH gefolgt vom Jahr für das Ergebnis im jeweiligen Jahr für die WTA Wuhan
--   MUN gefolgt vom Jahr für das Ergebnis im jeweiligen Jahr für die WTA München
--   ZUR gefolgt vom Jahr für das Ergebnis im jeweiligen Jahr für die WTA Zürich
--   PHI gefolgt vom Jahr für das Ergebnis im jeweiligen Jahr für die WTA Philadelphia
--   PEK gefolgt vom Jahr für das Ergebnis im jeweiligen Jahr für die WTA Peking
--   GUA gefolgt vom Jahr für das Ergebnis im jeweiligen Jahr für die WTA Guadalajara
--   MOS gefolgt vom Jahr für das Ergebnis im jeweiligen Jahr für die WTA Moskau
--   OLY gefolgt vom Jahr für das Ergebnis im jeweiligen Jahr für die Olympischen Spiele
--   FED gefolgt vom Jahr für das Ergebnis im jeweiligen Jahr für die Fed Cup
local function TennisturniereDamen(frame, competition, tournaments)
    local firstYear = frame:getParent().args['ErstesJahr']
    local lastYear = frame:getParent().args['LetztesJahr']
    local result
    local table
    local head
    local row
    local year

    if not firstYear then
      for year=1877, tonumber(os.date('%Y')) do
        for k,v in pairs({ "AUO", "FRO", "WIM", "USO", "WTC", "DOH", "DUB", "IND", "MIA", "ROM", "MAD", "CIN", "KAN", "WUH", "PEK", "GUA", "CHI", "BOC", "HHI", "CHA", "BER", "SDI", "TOK", "MUN", "ZUR", "PHI", "MOS", "FED", "OLY" }) do
          if frame:getParent().args[v..year] then
            firstYear = year
            break
          end
        end
        if firstYear then
          break
        end
      end
      if not firstYear then
        return '\n\nKein gültiger Parameter gefunden!\n\n'
      end
    end
    if not lastYear then
      lastYear = firstYear
      for year=tonumber(os.date('%Y')), firstYear, -1 do
        for k,v in pairs({ "AUO", "FRO", "WIM", "USO", "WTC", "DOH", "DUB", "IND", "MIA", "ROM", "MAD", "CIN", "KAN", "WUH", "PEK", "GUA", "CHI", "BOC", "HHI", "CHA", "BER", "SDI", "TOK", "MUN", "ZUR", "PHI", "MOS", "FED", "OLY" }) do
          if frame:getParent().args[v..year] then
            lastYear = year
            break
          end
        end
        if lastYear > firstYear then
          break
        end
      end
    end

    if competition ~= 'einzel' and competition ~= 'doppel' then
        return 'Der Parameter competition muss entweder "einzel" oder "doppel" sein'
    end

    -- wikitable anlegen
    table = mw.html.create('table'):addClass('wikitable'):css('text-align', 'center'):css('font-size', '90%')

    -- Tabellenheader mit Links auf die zugehörigen 'WTA Tour' Artikel anlegen
    head = mw.html.create('tr')
    head:node(mw.html.create('th'):wikitext('Turnier'))
    for year = firstYear, lastYear
    do
       head:node(mw.html.create('th'):wikitext('[[WTA Tour ' .. year .. '|' .. year .. ']]'))
    end
    head:node(mw.html.create('th'):wikitext('Karriere'))

    -- Header in die Tabelle einfügen
    table:node(head):newline()

    -- Zeile Australian Open
    if isUsed(frame, firstYear, lastYear, 'AUO') then
      if tournaments == 'all' then
        table:node(getRow(frame, 'Australian Open', competition, '#E5D1CB', 'AUO', firstYear, lastYear)):newline()
      else
        table:node(getRow(frame, 'Australian Open', competition, '#', 'AUO', firstYear, lastYear)):newline()
      end
    end

    -- Zeile French Open
    if isUsed(frame, firstYear, lastYear, 'FRO') then
      if tournaments == 'all' then
        table:node(getRow(frame, 'French Open', competition, '#E5D1CB', 'FRO', firstYear, lastYear)):newline()
      else
        table:node(getRow(frame, 'French Open', competition, '#', 'FRO', firstYear, lastYear)):newline()
      end
    end

    -- Zeile Wimbledon Championships
    if isUsed(frame, firstYear, lastYear, 'WIM') then
      if tournaments == 'all' then
        table:node(getRow(frame, 'Wimbledon Championships|Wimbledon', competition, '#E5D1CB', 'WIM', firstYear, lastYear)):newline()
      else
        table:node(getRow(frame, 'Wimbledon Championships|Wimbledon', competition, '#', 'WIM', firstYear, lastYear)):newline()
      end
    end

    -- Zeile US Open
    if isUsed(frame, firstYear, lastYear, 'USO') then
      if tournaments == 'all' then
        table:node(getRow(frame, 'US Open', competition, '#E5D1CB', 'USO', firstYear, lastYear)):newline()
      else
        table:node(getRow(frame, 'US Open', competition, '#', 'USO', firstYear, lastYear)):newline()
      end
    end

    if tournaments == 'all' or tournaments == 'gswtc' or tournaments == 'gswtcoly' then
      -- Zeile WTA Tour Championships
      if isUsed(frame, firstYear, lastYear, 'WTC') then
        -- das &nbsp; erreicht, dass die Namen der Übersichtsartikel einzeilig dargestellt werden
        if tournaments == 'all' then
          table:node(getRow(frame, 'WTA Tour Championships|Tour&nbsp;Championships', competition, '#FFFFCC', 'WTC', firstYear, lastYear)):newline()
        else
          table:node(getRow(frame, 'WTA Tour Championships|Tour&nbsp;Championships', competition, '#E4F8E8', 'WTC', firstYear, lastYear)):newline()
        end
      end
    end

    if tournaments == 'all' then
      -- Zeile WTA Chicago
      if isUsed(frame, firstYear, lastYear, 'CHI') then
        table:node(getRow(frame, 'WTA Chicago|Chicago', competition, '#', 'CHI', firstYear, lastYear)):newline()
      end

      -- Zeile WTA Boca Raton
      if isUsed(frame, firstYear, lastYear, 'BOC') then
        table:node(getRow(frame, 'WTA Boca Raton|Boca Raton', competition, '#', 'BOC', firstYear, lastYear)):newline()
      end

      -- Zeile WTA Doha
      if isUsed(frame, firstYear, lastYear, 'DOH') then
        table:node(getRow(frame, 'WTA Doha|Doha', competition, '#', 'DOH', firstYear, lastYear)):newline()
      end

      -- Zeile WTA Dubai
      if isUsed(frame, firstYear, lastYear, 'DUB') then
        table:node(getRow(frame, 'WTA Dubai|Dubai', competition, '#', 'DUB', firstYear, lastYear)):newline()
      end

      -- Zeile WTA Indian Wells
      if isUsed(frame, firstYear, lastYear, 'IND') then
        table:node(getRow(frame, 'WTA Indian Wells|Indian Wells', competition, '#', 'IND', firstYear, lastYear)):newline()
      end

      -- Zeile WTA Miami
      if isUsed(frame, firstYear, lastYear, 'MIA') then
        table:node(getRow(frame, 'WTA Miami|Miami', competition, '#', 'MIA', firstYear, lastYear)):newline()
      end

      -- Zeile WTA Hilton Head Island
      if isUsed(frame, firstYear, lastYear, 'HHI') then
        table:node(getRow(frame, 'WTA Hilton Head Island|Hilton Head Island', competition, '#', 'HHI', firstYear, lastYear)):newline()
      end

      -- Zeile WTA Charleston
      if isUsed(frame, firstYear, lastYear, 'CHA') then
        table:node(getRow(frame, 'WTA Charleston|Charleston', competition, '#', 'CHA', firstYear, lastYear)):newline()
      end

      -- Zeile WTA Rom
      if isUsed(frame, firstYear, lastYear, 'ROM') then
        table:node(getRow(frame, 'WTA Rom|Rom', competition, '#', 'ROM', firstYear, lastYear)):newline()
      end

      -- Zeile WTA Madrid
      if isUsed(frame, firstYear, lastYear, 'MAD') then
        table:node(getRow(frame, 'WTA Madrid|Madrid', competition, '#', 'MAD', firstYear, lastYear)):newline()
      end

      -- Zeile WTA Berlin
      if isUsed(frame, firstYear, lastYear, 'BER') then
        table:node(getRow(frame, 'WTA Berlin|Berlin', competition, '#', 'BER', firstYear, lastYear)):newline()
      end

      -- Zeile WTA San Diego
      if isUsed(frame, firstYear, lastYear, 'SDI') then
        table:node(getRow(frame, 'WTA San Diego|San Diego', competition, '#', 'SDI', firstYear, lastYear)):newline()
      end

      -- Zeile WTA Cincinnati
      if isUsed(frame, firstYear, lastYear, 'CIN') then
        table:node(getRow(frame, 'WTA Cincinnati|Cincinnati', competition, '#', 'CIN', firstYear, lastYear)):newline()
      end

      -- Zeile WTA Kanada
      if isUsed(frame, firstYear, lastYear, 'KAN') then
        table:node(getRow(frame, 'WTA Kanada|Kanada', competition, '#', 'KAN', firstYear, lastYear)):newline()
      end

      -- Zeile WTA Tokio
      if isUsed(frame, firstYear, lastYear, 'TOK') then
        table:node(getRow(frame, 'WTA Tokio|Tokio', competition, '#', 'TOK', firstYear, lastYear)):newline()
      end

      -- Zeile WTA Wuhan
      if isUsed(frame, firstYear, lastYear, 'WUH') then
        table:node(getRow(frame, 'WTA Wuhan|Wuhan', competition, '#', 'WUH', firstYear, lastYear)):newline()
      end

      -- Zeile WTA München
      if isUsed(frame, firstYear, lastYear, 'MUN') then
        table:node(getRow(frame, 'WTA München|München', competition, '#', 'MUN', firstYear, lastYear)):newline()
      end

      -- Zeile WTA Zürich
      if isUsed(frame, firstYear, lastYear, 'ZUR') then
        table:node(getRow(frame, 'WTA Zürich|Zürich', competition, '#', 'ZUR', firstYear, lastYear)):newline()
      end

      -- Zeile WTA Philadelphia
      if isUsed(frame, firstYear, lastYear, 'PHI') then
        table:node(getRow(frame, 'WTA Philadelphia|Philadelphia', competition, '#', 'PHI', firstYear, lastYear)):newline()
      end

      -- Zeile WTA Peking
      if isUsed(frame, firstYear, lastYear, 'PEK') then
        table:node(getRow(frame, 'WTA Peking|Peking', competition, '#', 'PEK', firstYear, lastYear)):newline()
      end

      -- Zeile WTA Moskau
      if isUsed(frame, firstYear, lastYear, 'MOS') then
        table:node(getRow(frame, 'WTA Moskau|Moskau', competition, '#', 'MOS', firstYear, lastYear)):newline()
      end

      -- Zeile WTA Guadalajara
      if isUsed(frame, firstYear, lastYear, 'GUA') then
        table:node(getRow(frame, 'WTA Guadalajara|Guadalajara', competition, '#', 'GUA', firstYear, lastYear)):newline()
      end
    end

    if tournaments == 'all' or tournaments == 'gsoly' or tournaments == 'gswtcoly' then
      -- Zeile Olympische Spiele
      if isUsed(frame, firstYear, lastYear, 'OLY') then
        table:node(getRow(frame, 'Tennis bei den Olympischen Spielen|Olympische Spiele', competition, '#FFD700', 'OLY', firstYear, lastYear)):newline()
      end
    end

    if tournaments == 'all' then
      -- Zeile Fed Cup
      if isUsed(frame, firstYear, lastYear, 'FED') then
        table:node(getRow(frame, 'Fed Cup', competition, '#C2B280', 'FED', firstYear, lastYear)):newline()
      end
    end

    -- komplette Tabelle als String zurückgeben
    return tostring(table)
end

function p.TennisturniereDamenEinzel(frame)
    return TennisturniereDamen(frame, 'einzel', 'all')
end

function p.TennisturniereDamenDoppel(frame)
    return TennisturniereDamen(frame, 'doppel', 'all')
end

function p.DamenEinzelGrandSlam(frame)
	if frame:getParent().args['WTC'] == '+' then
	  if frame:getParent().args['OLY'] == '+' then
	    return TennisturniereDamen(frame, 'einzel', 'gswtcoly')
	  else
	  	return TennisturniereDamen(frame, 'einzel', 'gswtc')
	  end
	elseif frame:getParent().args['OLY'] == '+' then
	  return TennisturniereDamen(frame, 'einzel', 'gsoly')
	else
      return TennisturniereDamen(frame, 'einzel', 'gs')
    end
end

function p.DamenDoppelGrandSlam(frame)
	if frame:getParent().args['WTC'] == '+' then
	  if frame:getParent().args['OLY'] == '+' then
	    return TennisturniereDamen(frame, 'doppel', 'gswtcoly')
	  else
	  	return TennisturniereDamen(frame, 'doppel', 'gswtc')
	  end
	elseif frame:getParent().args['OLY'] == '+' then
	  return TennisturniereDamen(frame, 'doppel', 'gsoly')
	else
      return TennisturniereDamen(frame, 'doppel', 'gs')
    end
end

return p