Modul:Country alias

-- This module returns the country name or the flag name for a country,-- based on the three-letter IOC/CGA/FINA alias.--[[The following country code is used for multiple countries:    ANG (workaround: added ANG_CGF for use with Pesta Olahraga Persemakmuran)The following names have different names/flags based on sport/year    Great Britain (and N.I.)         GBR, GBR_WCA (latter added to add text in parens)    Hong Kong                        HKG, HKG_CGF (latter added to keep colonial flag)    Individual Olympic Athletes      IOA, IOA_2000 (IOA changed to Independent Olympic Athletes in 2012)    Russian Athletes OAR (2018), ROC_2020 (2020 Summer, 2022 Winter)    SWZ                              Swaziland became Eswatini after the 2018 Pesta Olahraga Persemakmuran    MKD Macedonia became North Macedonia in 2019    ART No "Athlete" before Refugee Team @ 2017 AIMAG    D.R. of the Congo Was Zaire (ZAI) and Congo-Kinshasa (COK_COD)The following countries have multiple aliases due to CGF/IOC/FINA/IAAF/etc differences, or deprecated uses    Anguilla                         AIA, ANG_CGF    Antigua and Barbuda              ANT, ATG    Bahrain                          BHN, BHR, BRN    Curaçao                          CUR, CUW    East Timor TLS, TMP    Falkand Islands FAI, FLK    Faroe Islands                    FAR, FRO    Guernsey                         GGY, GUE    Iran                             IRI, IRN    Ireland                          IRE, IRL - IRE is *only* for CGF apps    Jersey                           JER, JEY    Lebanon                          LBN, LIB    Montserrat                       MNT, MSR    Nicaragua                        NCA, NIC    Norfolk Island                   NFI, NFK    Oman                             OMA, OMN    Refugee Olympic Team             ROA, ROT, EOR    Romania                          ROM, ROU    Saint Helena                     SHE, SHN    Saint Vincent and the Grenadines SVG, VIN    Sarawak                          SAR, SWK    Singapore                        SGP, SIN    South Africa                     RSA, SAF    Tonga                            TGA, TON    Trinidad and Tobago              TRI, TTO    Turks and Caicos Islands         TCA, TCI, TKSOddity that needs to be revisited    French Polynesia                 PYF, TAH - TAH has been converted to Tahiti per SILENCE]]local function stripToNil(text)-- If text is a string, return its trimmed content, or nil if empty.-- Otherwise return text (which may, for example, be nil).if type(text) == 'string' thentext = text:match('(%S.-)%s*$')endreturn textendlocal function yes(parameter)-- Return true if parameter should be interpreted as "yes".return ({ y = true, yes = true, on = true, [true] = true })[parameter]endlocal function getAlias(args)-- Return alias parameter, possibly modified for exceptional cases.local alias = stripToNil(args.alias)local games = stripToNil(args.games)local year = tonumber(args.year)local fullName = stripToNil(args.fullName)if fullName thenyear = tonumber(fullName:match('%d+$'))  -- ignore args.yearendif alias == 'ANG' thenif games == 'Pesta Olahraga Persemakmuran' thenalias = 'ANG_CGF'endelseif alias == 'ART' thenif games == 'Pesta Olahraga Dalam Ruangan dan Bela Diri Asia' thenalias = 'ART_AIMAG'endelseif alias == 'GBR' thenif games == 'Kejuaraan Dunia Atletik' or games == 'Kejuaraan Atletik Dunia' or games == 'Kejuaraan Eropa Atletik' thenalias = 'GBR_WCA'elseif games == 'Kejuaraan Eropa' thenif year == 2018 thenalias = 'GBR_WCA'endendelseif alias == 'HKG' thenif games == 'Pesta Olahraga Persemakmuran' thenalias = 'HKG_CGF'endelseif alias == 'IOA' thenif year == 2000 thenalias = 'IOA_2000'endelseif alias == 'MAL' or alias == 'MAS' thenif year and year < 1963 thenalias = 'MAL'elsealias = 'MAS'endelseif alias == 'SWZ' thenif fullName thenif year and year >= 2018 and fullName ~= 'Pesta Olahraga Persemakmuran 2018' thenalias = 'SWZ_YO2018'endelseif year and year >= 2018 and games ~= 'Pesta Olahraga Persemakmuran' thenalias = 'SWZ_YO2018'elsealias = 'SWZ_YO2018'endelseif alias == 'MKD' thenif year and year < 2019 thenalias = 'MKD'elsealias = 'MKD_2019'endelseif alias == 'VNM' thenif year and year <= 1954 thenalias = 'VIE'endelseif alias == 'RUS' thenif year and year==2020 thenif games=='Olimpiade Musim Panas' thenalias = 'ROC_2020'elseif games=='Paralimpiade Musim Panas' thenalias = 'RPC'endelseif year and year==2022 and games=='Olimpiade Musim Dingin' thenalias = 'ROC_2020'endelseif alias == 'ROC' thenif year and year==1960 and games=='Olimpiade Musim Panas' thenalias = 'ROC_Formosa'elseif year and ( year==1964 or year==1968 ) and games=='Olimpiade Musim Panas' thenalias = 'ROC_Taiwan'elseif year and year==2020 and games=='Olimpiade Musim Panas' thenalias = 'ROC_2020'elseif year and year==2022 and games=='Olimpiade Musim Dingin' thenalias = 'ROC_2020'elseif year and year==2020 and games=='Paralimpiade Musim Panas' thenalias = 'RPC'elselocal pageName = mw.title.getCurrentTitle().textif pageName == 'Atlet Komite Olimpiade Rusia pada Olimpiade' thenalias = 'ROC_2020'endendelseif alias == 'YUG' or alias == 'SCG' thenif year and year > 1992 and year < 2004 and games ~= 'Paralimpiade Musim Panas' thenalias = 'FR_YUG'endelseif alias == 'ZAI' or alias == 'COD' thenif year and year < 1971 thenalias = 'COK_COD'elseif year and year <= 1996 thenalias = 'ZAI'elsealias = 'COD'endelseif alias == 'COK' thenif year and year == 1968 thenalias = 'COK_COD'elsealias = 'COK'endendreturn aliasendlocal function getFlag(args, country)-- Return name of flag selected from country data (nil if none defined).local year = tonumber(args.year)local games = stripToNil(args.games)if games thenlocal gdata = country[games]if gdata thenif type(gdata) == 'string' thenreturn gdataendif gdata[year] thenreturn gdata[year]endendendfor _, item in ipairs(country) doif type(item) == 'string' thenreturn itemendif year and year <= item[1] thenreturn item[2]endendendlocal data = mw.loadData('Modul:Country alias/data')local function countryAlias(args)local alias = getAlias(args)local country = data.countries[alias] or data.countries[data.countryAliases[alias]]local function quit(message)return args.error or error(message)endif not country thenreturn quit('Invalid country alias: ' .. tostring(alias))endif yes(args.flag) thenreturn getFlag(args, country) or quit('No flag defined for ' .. alias)elsereturn country.name or quit('No name defined for ' .. alias)endendlocal function flagIOC(frame)-- Implement {{flagIOC}} which previously called this module three times.-- Returns <flag> <country link> <athletes>, with the third value optionallocal args = frame:getParent().argslocal code = stripToNil(args[1]) or error('flagIOC parameter 1 should be a country code')local games = stripToNil(args[2])local athletes = stripToNil(args[3])games = games and ('Olimpiade ' .. games) or 'Olimpiade'local parms = {alias = code,fullName = games,year = games:match('%d+$'),games = games:gsub(' ?%d+$', ''),}local fullName = countryAlias(parms)parms.flag = truelocal dispName = fullNameif fullName == 'ROC' thenfullName = 'Atlet Komite Olimpiade Rusia'endreturn (('[[File:{flag}|22x20px|border|alt=|link=]]&nbsp;[[{name} pada {games}|{dispName}]]{athletes}'):gsub('{(%w+)}', {athletes = athletes and('&nbsp;<span style="font-size:90%;">(' .. athletes .. ')</span>') or'',flag = countryAlias(parms),games = games,name = fullName,dispName = dispName,}))endlocal function flagXYZ(frame)-- Implement {{flagIOC2}} and its variants which previously called this module three times.-- Returns one of four possible outputs:--from flagIOC2:<flag> <country link> <athletes>, with the third value optional--from flagIOC2team:<flag> <country link> <country alias>--from flagIOC2athlete:<flag> <athlete(s)> <country alias/link>--from flagIOC2medalist:<athlete(s)><br><flag> <country link>local args = frame:getParent().argslocal dispType = stripToNil(frame.args['type'])local code=''local games=''local athletes=''if dispType == 'athlete-O' then-- Implement [[Template:FlagIOCathlete]].dispType = 'athlete'args[3] = 'Olimpiade ' .. (args[3] or '')endif dispType == 'name' or dispType == 'team' thencode = stripToNil(args[1]) or error('Parameter 1 harus merupakan kode negara')games = stripToNil(args[2]) or error('Parameter 2 harus merupakan nama kompetisi')athletes = stripToNil(args[3])elseif dispType == 'athlete' or dispType == 'medalist' thenathletes = stripToNil(args[1]) or error('Parameter 1 should be the name(s) of the athlete(s)')code = stripToNil(args[2]) or error('Parameter 2 should be a country code')games = stripToNil(args[3]) or error('Parameter 3 should be a competition name')endlocal parms = {alias = code,fullName = games,year = games:match('%d+$'),games = games:gsub(' ?%d+$', ''),}local fullName = countryAlias(parms)parms.flag = truelocal dispName = stripToNil(args.name)if fullName == 'ROC' thenfullName = 'Atlet Komite Olimpiade Rusia'dispName = 'ROC'if dispType == 'team' then dispType = 'name' endendif dispType == 'name' thenreturn (('[[File:{flag}|22x20px|border|alt=|link=]]&nbsp;[[{name} pada {games}|{dispName}]]{athletes}'):gsub('{(%w+)}', {athletes = athletes and('&nbsp;<span style="font-size:90%;">(' .. athletes .. ')</span>') or'',flag = countryAlias(parms),games = games,name = fullName,dispName = dispName or fullName,}))elseif dispType == 'team' thenreturn (('[[File:{flag}|22x20px|border|alt=|link=]]&nbsp;[[{name} pada {games}|{dispName}]]{alias}'):gsub('{(%w+)}', {alias = ('&nbsp;<span style="font-size:90%;">(' .. code .. ')</span>'),flag = countryAlias(parms),games = games,name = fullName,dispName = dispName or fullName,}))elseif dispType == 'athlete' thenreturn (('[[File:{flag}|22x20px|border|alt=|link=]]&nbsp;{athletes}&nbsp;<span style="font-size:90%;">([[{name} pada {games}|{dispName}]])</span>'):gsub('{(%w+)}', {athletes = athletes,flag = countryAlias(parms),games = games,name = fullName,dispName = code,}))elseif dispType == 'medalist' thenreturn (('{athletes}<br>[[File:{flag}|23x15px|border|alt=|link=]]&nbsp;[[{name} pada {games}|{dispName}]]'):gsub('{(%w+)}', {athletes = athletes,flag = countryAlias(parms),games = games,name = fullName,dispName = dispName or fullName,}))endendlocal function main(frame)return countryAlias(frame.args)endreturn {flagIOC = flagIOC,flagXYZ = flagXYZ,main = main,}