Jump to content
Wikipedia The Free Encyclopedia

Module:Country alias

From Wikipedia, the free encyclopedia
Module documentation[view] [edit] [history] [purge]
[画像:Ready for use] This module is rated as ready for general use. It has reached a mature form and is thought to be relatively bug-free and ready for use wherever appropriate. It is ready to mention on help pages and other Wikipedia resources as an option for new users to learn. To reduce server load and bad output, it should be improved by sandbox testing rather than repeated trial-and-error editing.
[画像:Protected] This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing.
Warning This Lua module is used on approximately 58,000 pages and changes may be widely noticed. Test changes in the module's /sandbox or /testcases subpages, or in your own module sandbox. Consider discussing changes on the talk page before implementing them.

This module implements {{country alias }} and the {{flagIOC2 }} family of templates. Check there for usage documentation.

Usage

Template: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=}}

Template:FlagIOC

This module is used by {{flagIOC }} to return a formatted country flag, country name, and the number of athletes present (optional) at a given edition of the Olympic Games.

{{#invoke:Country alias|flagIOC|alias=|flag=|games=|year=|athletes=}}

Template:FlagIOC2 and variants

This module is used by the {{flagIOC2 }} family of templates (except flagIOC, described above) to return various formatted combinations of country flag, country name, the number of athletes present and/or names of athletes present at a given Games.

{{#invoke:Country alias|flagXYZ|alias=|flag=|games=|year=|athletes=|type=}}

The above documentation is transcluded from Module:Country alias/doc. (edit | history)
Editors can experiment in this module's sandbox (edit | diff) and testcases (create) pages.
Subpages of this module.

 -- 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=='Winter Olympics' then
			alias = 'ROC_2020'
		end
	elseif alias == 'ROC' then
		if year and year==1960 and games=='Summer Olympics' 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=='Summer Olympics' then
			alias = 'ROC_2020'
		elseif year and year==2022 and games=='Winter Olympics' 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
			if type(gdata[1]) == 'string' then
				return gdata[1]
			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 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])
	games = games and (games .. ' Olympics') or 'Olympics'
	local parms = {
		alias = code,
		fullName = games,
		year = games:match('^%d+'),
		games = games:gsub('^%d+ ?', ''),
	}
	local fullName = countryAlias(parms)
	parms.flag = true
	local dispName = fullName
	if fullName == 'ROC' then
		fullName = 'Russian Olympic Committee athletes'
	end
	return (('[[File:{flag}|22x20px|border|alt=|link=]]&nbsp;[[{name} at the {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,
		}))
 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 ''
		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 ''
	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
	
	local link = '[[{name} at the {games}|{dispName}]]'
	if (games == '') then
		link = (dispType == 'athlete') and '<abbr title="{name}">{dispName}</abbr>' or '[[{name}|{dispName}]]'
	end
	if dispType == 'name' then
		return (('[[File:{flag}|22x20px|border|alt=|link=]]&nbsp;'..link..'{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' then
		return (('[[File:{flag}|22x20px|border|alt=|link=]]&nbsp;'..link..'{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' then
		return (('[[File:{flag}|22x20px|border|alt=|link=]]&nbsp;{athletes}&nbsp;<span style="font-size:90%;">('..link..')</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=]]&nbsp;'..link..'')
			: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,
 }

AltStyle によって変換されたページ (->オリジナル) /