Modul:Country alias

Från Wikipedia

Dokumentationen för denna modul kan skapas på Modul:Country alias/dok

-- This module returns the land name or the flag name for a land,
-- based on the three-letter IOC/CGA/FINA alias.

-- Denna modul returnerar landsnamnet eller flaggnamnet för ett land utifrån dess
-- trebokstavskombination från IOK, CGA eller FINA.

--[[
Följande koder används för fler än ett land:
  ANG (workaround: added ANG_CGF)

Följande namn/koder har olika namn/flaggor beroende på sport/år:
	Great Britain (and N.I.)		 GBR, GBsoR_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)
	Ryska idrottare					 OAR (2018), ROC_2020 (sommarspelen 2020, vinterspelen 2022)
	MKD								 Makedonien bytte namn till Nordmakedonien 2019
    
Följande namn förekommer två gånger på grund av skillnader mellan CGF/IOC/FINA/IAAF:
    Anguilla                         AIA, ANG_CGF
    Antigua och Barbuda              ANT, ATG
    Bahrain                          BRN, BHR, BHN
    Curaçao                          CUR, CUW
    Östtimor						 TLS, TMP
    Falklandsöarna                   FAI, FLK
    Färöarna                         FAR, FRO
    Guernsey						 GGY, GUE
    Iran                             IRI, IRN
    Irland                           IRE, IRL - IRE är *enbart* för tävlingar arrangerade av CGF
    Jersey							 JER, JEY
    Libanon                          LBN, LIB
    Montserrat                       MNT, MSR
    Nicaragua                        NCA, NIC
    Norfolkön		                 NFI, NFK
    Oman                             OMA, OMN
    Refugee Olympic Team             ROA, ROT, EOR
    Rumänien                         ROM, ROU
    Sankt Helena                     SHE, SHN
    Saint Vincent och Grenadinerna   SVG, VIN
    Sarawak                          SAR, SWK
    Singapore                        SGP, SIN
    Sydafrika	                     RSA, SAF
    Tonga                            TGA, TON
    Trinidad och Tobago              TRI, TTO
    Turks- och Caicosöarna           TCI, TKS, TCA

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, ja = 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.spel)
	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 == 'samväldesspelen' then
			alias = 'ANG_CGF'
		end
	elseif alias == 'GBR' then
		if games == 'världsmästerskapen i friidrott' or games == 'europamästerskapen i friidrott' then
			alias = 'GBR_WCA'
		elseif games == 'europamästerskapen' then
			if year == 2018 then
				alias = 'GBR_WCA'
			end
		end
	elseif alias == 'HKG' then
		if games == 'samväldesspelen' then
			alias = 'HKG_CGF'
		end
	elseif alias == 'IOA' then
		if year == 2000 then
			alias = 'IOA_2000'
		end
	elseif alias == 'MAL' then
		if year and year > 1963 then
			alias = 'MAS'
		end
	elseif alias == 'MKD' then
		if year and year >= 2019 then
			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 == 'olympiska sommarspelen' then
				alias = 'ROC_2020'
			elseif games == 'paralympiska sommarspelen' then
				alias = 'RPC'
			end
		elseif year and year == 2022 and games == 'olympiska vinterspelen' then
			alias = 'ROC_2020'
		end
	elseif alias == 'ROC' then
		if year and year == 1960 and games == 'olympiska sommarspelen' then
			alias = 'ROC_Formosa'
		elseif year and ( year == 1964 or year == 1968 ) and games == 'olympiska sommarspelen' then
			alias = 'ROC_Taiwan'
		elseif year and year==2020 and games == 'olympiska sommarspelen' then
			alias = 'ROC_2020'
		elseif year and year==2022 and games == 'olympiska vinterspelen' then
			alias = 'ROC_2020'
		elseif year and year==2020 and games == 'paralympiska sommarspelen' then
			alias = 'RPC'
		end
	end
	return alias
end

local function getFlag(args, land)
	-- Return name of flag selected from land data (nil if none defined).
	local year = tonumber(args.year)
	local games = stripToNil(args.spel)
	if games then
		local gdata = land[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(land) 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('Modul:Country alias/data')
local function countryAlias(args)
	local alias = getAlias(args)
	local land = data.countries[alias] or data.countries[data.countryAliases[alias]]
	local function quit(message)
		return args.error or error(message)
	end
	if not land then
		return quit('Ogiltigt landsalias: ' .. tostring(alias))
	end
	if yes(args.flagga) then
		return getFlag(args, land) or quit('Ingen flagga definierad för ' .. alias)
	else
		return land.name or quit('Inget namn definierat för ' .. alias)
	end
end

local function main(frame)
	return countryAlias(frame.args)
end

return {
	main = main,
}