모듈:Country alias/연습장
이 문서는 모듈:Country alias(차이)의 모듈 연습장 문서입니다. |
Country alias 모듈은 {{country alias}}와 {{flagIOC2}} (올림픽 국기2)에 속한 틀을 보조하기 위한 모듈입니다. 보다 자세한 용도는 해당 틀을 참고해 주세요.
국가 데이터는 모듈:Country alias/data에서 편집할 수 있습니다.
용도
편집틀:Country alias
편집현재 본 틀은 한국어판에 도입되지 않았습니다.
This module is used by {{country alias}} to return either the country name or the country's flag, based on a combination of the three-letter country code (required), the year (optional), and the competition being played (optional).
{{#invoke:Country alias|main|alias=|flag=|games=|year=}}
틀:FlagIOC
편집올림픽 대회 참가국의 국기, 국가명, 선수규모 (필요시)를 나타내는 {{flagIOC}}에서 사용됩니다. 양식은 다음과 같습니다.
{{#invoke:Country alias|flagIOC|alias=|flag=|games=|year=|athletes=}}
틀:FlagIOC2와 기타 관련 틀
편집특정 대회 참가국의 국기, 국가명, 선수규모와 선수단 이름 (필요시)을 나타내는 {{flagIOC2}}와 파생 틀에서 사용됩니다. 위에서 소개한 FlagIOC와는 다릅니다. 양식은 다음과 같습니다.
{{#invoke:Country alias|flagXYZ|alias=|flag=|games=|year=|athletes=|type=}}
-- 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 Commonwealth Games)
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 Commonwealth Games
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, TKS
Oddity 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' then
text = text:match('(%S.-)%s*$')
end
return text
end
local function yes(parameter)
-- Return true if parameter should be interpreted as "yes".
return ({ y = true, yes = true, on = true, [true] = true })[parameter]
end
local 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 then
year = tonumber(fullName:match('^%d+')) -- ignore args.year
end
if alias == 'ANG' then
if games == 'Commonwealth Games' then
alias = 'ANG_CGF'
end
elseif alias == 'ART' then
if games == 'Asian Indoor and Martial Arts Games' then
alias = 'ART_AIMAG'
end
elseif alias == 'GBR' then
if games == 'World Championships in Athletics' or games == 'World Athletics Championships' or games == 'European Athletics Championships' then
alias = 'GBR_WCA'
elseif games == 'European Championships' then
if year == 2018 then
alias = 'GBR_WCA'
end
end
elseif alias == 'HKG' then
if games == 'Commonwealth Games' then
alias = 'HKG_CGF'
end
elseif alias == 'IOA' then
if year == 2000 then
alias = 'IOA_2000'
end
elseif alias == 'MAL' or alias == 'MAS' then
if year and year < 1963 then
alias = 'MAL'
else
alias = 'MAS'
end
elseif alias == 'SWZ' then
if fullName then
if year and year >= 2018 and fullName ~= '2018 Commonwealth Games' then
alias = 'SWZ_YO2018'
end
elseif year and year >= 2018 and games ~= 'Commonwealth Games' then
alias = 'SWZ_YO2018'
else
alias = 'SWZ_YO2018'
end
elseif alias == 'MKD' then
if year and year < 2019 then
alias = 'MKD'
else
alias = 'MKD_2019'
end
elseif alias == 'VNM' then
if year and year <= 1954 then
alias = 'VIE'
end
elseif alias == 'RUS' then
if year and year==2020 then
if games=='Summer Olympics' then
alias = 'ROC_2020'
elseif games=='Summer Paralympics' then
alias = 'RPC'
end
elseif year and year==2022 and games=='동계 올림픽' then
alias = 'ROC_2020'
end
elseif alias == 'ROC' then
if year and year==1960 and games=='하계 올림픽' then
alias = 'ROC_Formosa'
elseif year and ( year==1964 or year==1968 ) and games=='Summer Olympics' then
alias = 'ROC_Taiwan'
elseif year and year==2020 and games=='하계 올림픽' then
alias = 'ROC_2020'
elseif year and year==2022 and games=='동계 올림픽' then
alias = 'ROC_2020'
elseif year and year==2020 and games=='Summer Paralympics' then
alias = 'RPC'
else
local pageName = mw.title.getCurrentTitle().text
if pageName == 'Russian Olympic Committee athletes at the Olympics' then
alias = 'ROC_2020'
end
end
elseif alias == 'YUG' or alias == 'SCG' then
if year and year > 1992 and year < 2004 and games ~= 'Summer Paralympics' then
alias = 'FR_YUG'
end
elseif alias == 'ZAI' or alias == 'COD' then
if year and year < 1971 then
alias = 'COK_COD'
elseif year and year <= 1996 then
alias = 'ZAI'
else
alias = 'COD'
end
elseif alias == 'COK' then
if year and year == 1968 then
alias = 'COK_COD'
else
alias = 'COK'
end
end
return alias
end
local 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 then
local gdata = country[games]
if gdata then
if type(gdata) == 'string' then
return gdata
end
if gdata[year] then
return gdata[year]
end
end
end
for _, item in ipairs(country) do
if type(item) == 'string' then
return item
end
if year and year <= item[1] then
return item[2]
end
end
end
-- 정식 올림픽 게임 이름 얻기
local function getOlympics(param)
local fullName = param or '올림픽'
local year = mw.ustring.match(fullName, '^%d+')
local games = mw.ustring.gsub(fullName, '^%d+년? ?', '')
if games == 'Summer' or games == '하계' then
games = '하계 올림픽'
elseif games == 'Winter' or games == '동계' then
games = '동계 올림픽'
elseif games == '중간' then
games = '중간 올림픽'
elseif games == 'Youth' or games == '청소년' then
games = '청소년 올림픽'
elseif games == 'Summer Youth' or games == '하계 청소년' then
games = '하계 청소년 올림픽'
elseif games == 'Winter Youth' or games == '동계 청소년' then
games = '동계 청소년 올림픽'
end
fullName = year and year .. '년 ' .. games or games
return fullName
end
local data = mw.loadData('Module: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)
end
if not country then
return quit('Invalid country alias: ' .. tostring(alias))
end
if yes(args.flag) then
return getFlag(args, country) or quit('No flag defined for ' .. alias)
else
return country.name or quit('No name defined for ' .. alias)
end
end
local function flagIOC(frame)
-- Implement {{flagIOC}} which previously called this module three times.
-- Returns <flag> <country link> <athletes>, with the third value optional
local args = frame:getParent().args
local code = stripToNil(args[1]) or error('flagIOC parameter 1 should be a country code')
local games = stripToNil(args[2])
local athletes = stripToNil(args[3])
if athletes == '하계' or athletes == '동계' or athletes == '중간' or athletes == '청소년' or athletes == '하계 청소년' or athletes == '동계 청소년' then
games = games .. ' ' .. athletes
athletes = stripToNil(args[4])
end
games = getOlympics(games)
local parms = {
alias = code,
fullName = games,
year = mw.ustring.match(games, '^%d+'),
games = mw.ustring.gsub(games, '^%d+년? ?', ''),
}
local fullName = countryAlias(parms)
parms.flag = true
local dispName = fullName
if fullName == 'ROC' then
fullName = '러시아 올림픽 위원회'
end
return (('[[File:{flag}|22x20px|border|alt=|link=]] [[{games} {name} 선수단|{name}]]{athletes}')
:gsub('{(%w+)}', {
athletes = athletes and
(' <span style="font-size:90%;">(' .. athletes .. ')</span>') or
'',
flag = countryAlias(parms),
games = games,
name = fullName,
dispName = dispName,
}))
end
local 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().args
local dispType = stripToNil(frame.args['type'])
local code=''
local games=''
local athletes=''
if dispType == 'athlete-O' then
-- Implement [[Template:FlagIOCathlete]].
dispType = 'athlete'
args[3] = (args[3] or '') .. ' Olympics'
end
if dispType == 'name' or dispType == 'team' then
code = stripToNil(args[1]) or error('Parameter 1 should be a country code')
games = stripToNil(args[2]) or error('Parameter 2 should be a competition name')
athletes = stripToNil(args[3])
elseif dispType == 'athlete' or dispType == 'medalist' then
athletes = 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')
end
local parms = {
alias = code,
fullName = games,
year = games:match('^%d+'),
games = games:gsub('^%d+ ?', ''),
}
local fullName = countryAlias(parms)
parms.flag = true
local dispName = stripToNil(args.name)
if fullName == 'ROC' then
fullName = 'Russian Olympic Committee athletes'
dispName = 'ROC'
if dispType == 'team' then dispType = 'name' end
end
if dispType == 'name' then
return (('[[File:{flag}|22x20px|border|alt=|link=]] [[{name} at the {games}|{dispName}]]{athletes}')
:gsub('{(%w+)}', {
athletes = athletes and
(' <span style="font-size:90%;">(' .. athletes .. ')</span>') or
'',
flag = countryAlias(parms),
games = games,
name = fullName,
dispName = dispName or fullName,
}))
elseif dispType == 'team' then
return (('[[File:{flag}|22x20px|border|alt=|link=]] [[{name} at the {games}|{dispName}]]{alias}')
:gsub('{(%w+)}', {
alias = (' <span style="font-size:90%;">(' .. code .. ')</span>'),
flag = countryAlias(parms),
games = games,
name = fullName,
dispName = dispName or fullName,
}))
elseif dispType == 'athlete' then
return (('[[File:{flag}|22x20px|border|alt=|link=]] {athletes} <span style="font-size:90%;">([[{name} at the {games}|{dispName}]])</span>')
:gsub('{(%w+)}', {
athletes = athletes,
flag = countryAlias(parms),
games = games,
name = fullName,
dispName = code,
}))
elseif dispType == 'medalist' then
return (('{athletes}<br>[[File:{flag}|23x15px|border|alt=|link=]] [[{name} at the {games}|{dispName}]]')
:gsub('{(%w+)}', {
athletes = athletes,
flag = countryAlias(parms),
games = games,
name = fullName,
dispName = dispName or fullName,
}))
end
end
local function main(frame)
return countryAlias(frame.args)
end
return {
flagIOC = flagIOC,
flagXYZ = flagXYZ,
main = main,
}