Módulo:Country alias

Fonte: Enciclopédia de conhecimento da Igreja de Deus
Saltar para a navegação Saltar para a pesquisa

A documentação para este módulo pode ser criada na página Módulo:Country alias/doc

-- This module returns the country name or the flag name for a country,
-- based on the three-letter IOC/CGA/FINA alias.
--[[
O seguinte código de país é usado para vários países:
				ANG (solução alternativa: adicionado ANG_CGF para uso com Jogos da Commonwealth)
Os nomes a seguir têm nomes/bandeiras diferentes com base no esporte/ano
				Grã-Bretanha (e N.I.)            GBR, GBR_WCA (adicionado posteriormente para adicionar texto entre parênteses)
				Hong Kong                        HKG, HKG_CGF (adicionado posteriormente para manter a bandeira colonial)
				Atletas Olímpicos Individuais    IOA, IOA_2000 (IOA mudou para Atletas Olímpicos Independentes em 2012)
				Atletas Russos         OAR (2018), ROC_2020 (Verão de 2020, Inverno de 2022)
				SWZ                              A Suazilândia se tornou Essuatíni após os Jogos da Commonwealth de 2018
				MKD         A Macedônia se tornou Macedônia do Norte em 2019
				ART         Nenhum "Atleta" antes da Equipe de Refugiados @ 2017 AIMAG
				R.D. do Congo         Was Zaire (ZAI) e Congo-Kinshasa (COK_COD)
Os seguintes países têm vários aliases devido a diferenças de CGF/COI/FINA/IAAF/etc ou usos obsoletos
				Anguila                          AIA, ANG_CGF
				Antígua e Barbuda                ANT, ATG
				Bahrein                          BHN, BHR, BRN
				Curaçao                          CUR, CUW
				Timor-Leste       TLS, TMP
				Ilhas Malvinas      FAI, FLK
				Ilhas Faroé                      FAR, FRO
				Guernsey                         GGY, GUE
				Irã                              IRI, IRN
				Irlanda                          IRE, IRL - IRE is *only* for CGF apps
				Jersey                           JER, JEY
				Líbano                           LBN, LIB
				Montserrat                       MNT, MSR
				Nicarágua                        NCA, NIC
				Ilha Norfolk                     NFI, NFK
				Omã                              OMA, OMN
				Equipe Olímpica de Refugiados    ROA, ROT, EOR
				Romênia                          ROM, ROU
				Santa Helena                     SHE, SHN
				São Vicente e Granadinas         SVG, VIN
				Sarawak                          SAR, SWK
				Singapura                        SGP, SIN
				África do Sul                    RSA, SAF
				Tonga                            TGA, TON
				Trinidad e Tobago                TRI, TTO
				Ilhas Turcas e Caicos            TCA, TCI, TKS
Estranheza que precisa ser revisitada
				Polinésia Francesa               PYF, TAH - TAH foi convertido para Taiti por SILÊNCIO
]]
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 jogos = stripToNil(args.jogos)
	local ano = tonumber(args.ano)
	local nomeCompleto = stripToNil(args.nomeCompleto)
	if nomeCompleto then
		ano = tonumber(nomeCompleto:match('^%d+'))  -- ignore args.ano
	end
	if alias == 'ANG' then
		if jogos == 'Jogos da Commonwealth' then
			alias = 'ANG_CGF'
		end
	elseif alias == 'ART' then
		if jogos == 'Jogos Asiáticos de Artes Marciais e Recinto Coberto' then
			alias = 'ART_AIMAG'
		end
	elseif alias == 'GBR' then
		if jogos == 'Campeonato Mundial de Atletismo' or jogos == 'Campeonatos da Europa de Atletismo' then
			alias = 'GBR_WCA'
		elseif jogos == 'Campeonatos Europeus' then
			if ano == 2018 then
				alias = 'GBR_WCA'
			end
		end
	elseif alias == 'HKG' then
		if jogos == 'Jogos da Commonwealth' then
			alias = 'HKG_CGF'
		end
	elseif alias == 'IOA' then
		if ano == 2000 then
			alias = 'IOA_2000'
		end
	elseif alias == 'MAL' or alias == 'MAS' then
		if ano and ano < 1963 then
			alias = 'MAL'
		else
			alias = 'MAS'
		end
	elseif alias == 'SWZ' then
		if nomeCompleto then
			if ano and ano >= 2018 and nomeCompleto ~= 'Jogos da Commonwealth de 2018' then
				alias = 'SWZ_YO2018'
			end
		elseif ano and ano >= 2018 and jogos ~= 'Jogos da Commonwealth' then
			alias = 'SWZ_YO2018'
		else
			alias = 'SWZ_YO2018'
		end
	elseif alias == 'MKD' then
		if ano and ano < 2019 then
			alias = 'MKD'
		else
			alias = 'MKD_2019'
		end
	elseif alias == 'VNM' then
		if ano and ano <= 1954 then
			alias = 'VIE'
		end
	elseif alias == 'RUS' then
		if ano and ano==2020 then
			if jogos=='Jogos Olímpicos de Verão' then
				alias = 'ROC_2020'
			elseif jogos=='Jogos Paralímpicos de Verão' then
				alias = 'RPC'
			end
		elseif ano and ano==2022 and jogos=='Jogos Olímpicos de Inverno' then
			alias = 'ROC_2020'
		end
	elseif alias == 'ROC' then
		if ano and ano==1960 and jogos=='Jogos Olímpicos de Verão' then
			alias = 'ROC_Formosa'
		elseif ano and ( ano==1964 or ano==1968 ) and jogos=='Jogos Olímpicos de Verão' then
			alias = 'ROC_Taiwan'
		elseif ano and ano==2020 and jogos=='Jogos Olímpicos de Verão' then
			alias = 'ROC_2020'
		elseif ano and ano==2022 and jogos=='Jogos Olímpicos de Inverno' then
			alias = 'ROC_2020'
		elseif ano and ano==2020 and jogos=='Jogos Paralímpicos de Verão' then
			alias = 'RPC'
		else
			local pageName = mw.title.getCurrentTitle().text
			if pageName == 'Atletas do Comitê Olímpico Russo nos Jogos Olímpicos' then
				alias = 'ROC_2020'
			end
		end
	elseif alias == 'YUG' or alias == 'SCG' then
		if ano and ano > 1992 and ano < 2004 and jogos ~= 'Jogos Paralímpicos de Verão' then
			alias = 'FR_YUG'
		end
	elseif alias == 'ZAI' or alias == 'COD' then
		if ano and ano < 1971 then
			alias = 'COK_COD'
		elseif ano and ano <= 1996 then
			alias = 'ZAI'
		else
			alias = 'COD'
		end
	elseif alias == 'COK' then
		if ano and ano == 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 ano = tonumber(args.ano)
	local jogos = stripToNil(args.jogos)
	if jogos then
		local gdata = country[jogos]
		if gdata then
			if type(gdata) == 'string' then
				return gdata
			end
			if gdata[ano] then
				return gdata[ano]
			end
		end
	end
	for _, item in ipairs(country) do
		if type(item) == 'string' then
			return item
		end
		if ano and ano <= item[1] then
			return item[2]
		end
	end
end
local data = mw.loadData('Módulo:Country alias/dados')
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.erro or error(message)
	end
	if not country then
		return quit('Alias de país inválido: ' .. tostring(alias))
	end
	if yes(args.bandeira) then
		return getFlag(args, country) or quit('Nenhuma bandeira definida para ' .. alias)
	else
		return country.name or quit('Nenhum nome definido para ' .. 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 jogos = stripToNil(args[2])
	local athletes = stripToNil(args[3])
	jogos = jogos and (jogos .. ' Olympics') or 'Olympics'
	local parms = {
		alias = code,
		nomeCompleto = jogos,
		ano = jogos:match('^%d+'),
		jogos = jogos:gsub('^%d+ ?', ''),
	}
	local nomeCompleto = countryAlias(parms)
	parms.flag = true
	local dispName = nomeCompleto
	if nomeCompleto == 'ROC' then
		nomeCompleto = 'Atletas do Comitê Olímpico Russo'
	end
	return (('[[Ficheiro:{flag}|22x20px|border|alt=|link=]]&nbsp;[[{name} nos {jogos}|{dispName}]]{athletes}')
		:gsub('{(%w+)}', {
			athletes = athletes and
				('&nbsp;<span style="font-size:90%;">(' .. athletes .. ')</span>') or
				'',
			flag = countryAlias(parms),
			jogos = jogos,
			name = nomeCompleto,
			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 jogos=''
	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')
		jogos = 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')
		jogos = stripToNil(args[3]) or error('Parameter 3 should be a competition name')
	end
	
	local parms = {
		alias = code,
		nomeCompleto = jogos,
		ano = jogos:match('^%d+'),
		jogos = jogos:gsub('^%d+ ?', ''),
	}
	local nomeCompleto = countryAlias(parms)
	parms.flag = true
	local dispName = stripToNil(args.name)
	if nomeCompleto == 'ROC' then
		nomeCompleto = 'Atletas do Comitê Olímpico Russo'
		dispName = 'ROC'
		if dispType == 'team' then dispType = 'name' end
	end
	
	if dispType == 'name' then
		return (('[[Ficheiro:{flag}|22x20px|border|alt=|link=]]&nbsp;[[{name} nos {jogos}|{dispName}]]{athletes}')
			:gsub('{(%w+)}', {
				athletes = athletes and
					('&nbsp;<span style="font-size:90%;">(' .. athletes .. ')</span>') or
					'',
				flag = countryAlias(parms),
				jogos = jogos,
				name = nomeCompleto,
				dispName = dispName or nomeCompleto,
			}))
	elseif dispType == 'team' then
		return (('[[Ficheiro:{bandeira}|22x20px|border|alt=|link=]]&nbsp;[[{name} nos {jogos}|{dispName}]]{alias}')
			:gsub('{(%w+)}', {
				alias = ('&nbsp;<span style="font-size:90%;">(' .. code .. ')</span>'),
				flag = countryAlias(parms),
				jogos = jogos,
				name = nomeCompleto,
				dispName = dispName or nomeCompleto,
			}))
	elseif dispType == 'athlete' then
		return (('[[Ficheiro:{bandeira}|22x20px|border|alt=|link=]]&nbsp;{athletes}&nbsp;<span style="font-size:90%;">([[{name} nos {jogos}|{dispName}]])</span>')
			:gsub('{(%w+)}', {
				athletes = athletes,
				flag = countryAlias(parms),
				jogos = jogos,
				name = nomeCompleto,
				dispName = code,
			}))
	elseif dispType == 'medalist' then
		return (('{athletes}<br>[[Ficheiro:{bandeira}|23x15px|border|alt=|link=]]&nbsp;[[{name} nos {jogos}|{dispName}]]')
			:gsub('{(%w+)}', {
				athletes = athletes,
				flag = countryAlias(parms),
				jogos = jogos,
				name = nomeCompleto,
				dispName = dispName or nomeCompleto,
			}))
	end
end
local function main(frame)
	return countryAlias(frame.args)
end
return {
	flagIOC = flagIOC,
	flagXYZ = flagXYZ,
	main = main,
}