模組:Sport orgs alias
閱讀設定
模組解[開]
你可能想去為呢個Scribunto module開一個解版。 編者可以響呢個模組嘅沙盤 (開 | 鏡)同埋試例 (開)版度試驗佢。 請加個類到個/doc嘅細版度。 呢個模組嘅細版。 |
local orgs_data
local data_type
local data_types = {
["奧林匹克運動會"] = "NOC",
["夏季奧林匹克運動會"] = "NOC",
["冬季奧林匹克運動會"] = "NOC",
["青年奧林匹克運動會"] = "NOC",
["夏季青年奧林匹克運動會"] = "NOC",
["冬季青年奧林匹克運動會"] = "NOC",
["東南亞運動會"] = "NOC",
["東南亞半島運動會"] = "NOC",
["南亞運動會"] = "NOC",
["東亞運動會"] = "NOC",
["東亞青年運動會"] = "NOC",
["亞洲運動會"] = "NOC",
["亞洲冬季運動會"] = "NOC",
["亞洲青年運動會"] = "NOC",
["亞洲室內暨武藝運動會"] = "NOC",
["亞洲室內運動會"] = "NOC",
["亞洲武藝運動會"] = "NOC",
["亞洲沙灘運動會"] = "NOC",
["歐洲運動會"] = "NOC",
["地中海運動會"] = "NOC",
["泛美運動會"] = "NOC",
["全非運動會"] = "NOC",
["非洲運動會"] = "NOC",
["英聯邦運動會"] = "CGA",
["大英國協運動會"] = "CGA",
["英聯邦青年運動會"] = "CGA",
["大英國協青年運動會"] = "CGA",
["大英帝國運動會"] = "CGA",
["大英帝國和聯邦運動會"] = "CGA",
["不列顛聯邦運動會"] = "CGA",
["不列顛英聯邦運動會"] = "CGA",
["殘疾人奧林匹克運動會"] = "NPC",
["帕拉林匹克運動會"] = "NPC",
["夏季殘疾人奧林匹克運動會"] = "NPC",
["夏季帕拉林匹克運動會"] = "NPC",
["冬季殘疾人奧林匹克運動會"] = "NPC",
["冬季帕拉林匹克運動會"] = "NPC",
["亞洲殘疾人運動會"] = "NPC",
["亞洲帕拉運動會"] = "NPC",
["亞洲青年殘疾人運動會"] = "NPC",
["亞洲青年帕拉運動會"] = "NPC",
["世界大學生運動會"] = "NUSF",
["世界大學運動會"] = "NUSF",
["夏季世界大學生運動會"] = "NUSF",
["夏季世界大學運動會"] = "NUSF",
["冬季世界大學生運動會"] = "NUSF",
["冬季世界大學運動會"] = "NUSF",
}
local data_check = {"奧林匹克運動會", "青年奧林匹克運動會", "東南亞運動會", "東南亞半島運動會", "亞洲運動會", "亞洲青年運動會", "亞洲室內暨武藝運動會", "亞洲室內運動會", "亞洲武藝運動會", "亞洲沙灘運動會", "殘疾人奧林匹克運動會", "帕拉林匹克運動會", "傷殘奧林匹克運動會", "亞洲殘疾人運動會", "亞洲帕拉運動會", "亞洲青年殘疾人運動會", "世界大學生運動會", "世界大學運動會", "Olympics", "Paralympics", "Universiade", "Asian Games"}
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 load_data(fullName)
local games = stripToNil(fullName:gsub('^%d+年?', ''))
if not data_types[games] then
error('fullName參數錯誤:唔支援嘅赛事或對應嘅中文變體不存在的用字:' .. fullName)
end
data_type = data_types[games]
orgs_data = mw.loadData('Module:Sport orgs alias/' .. data_type)
end
local function getAlias(args)
-- Return alias parameter, possibly modified for exceptional cases.
local alias = stripToNil(args.alias)
local fullName = stripToNil(args.fullName)
local year = tonumber(fullName:match('^%d+'))
local games = stripToNil(fullName:gsub('^%d+年?', ''))
if alias == 'ANG' then
if data_type == 'CGA' then
alias = 'ANG_CGF'
end
elseif alias == 'AUS' then
if data_type == 'CGA' then
alias = 'AUS_CGF'
end
elseif alias == 'BAH' then
if (data_type == 'NOC' or data_type == 'CGA') and year and year <= 2012 then
alias = 'BAH_2012'
end
elseif alias == 'CAN' then
if data_type == 'CGA' then
alias = 'CAN_CGF'
end
elseif alias == 'COK' then
if data_type == 'NOC' and year and year <= 1973 then
alias = 'COK_1968'
end
elseif alias == 'GHA' then
if (data_type == 'NOC' or data_type == 'CGA') and year and year <= 1956 then
alias = 'GCO'
end
elseif alias == 'HKG' then
if data_type == 'CGA' then
alias = 'HKG_CGF'
elseif year == 1997 and games == '東亞運動會' then
alias = 'HKG_CGF'
elseif data_type == 'NPC' and year and year < 2005 then
alias = 'HKG_2005'
elseif data_type == 'NPC' and year and year >= 2005 and year < 2022 then
alias = 'HKG_2022'
elseif (data_type == 'NOC' or data_type == 'NUSF') and year and year < 1997 then
alias = 'HKG_CGF'
end
elseif alias == 'IRL' then
if data_type == 'NOC' and year and year <= 2018 then
alias = 'IRL_2018'
end
elseif alias == 'LIE' then
if data_type == 'NOC' and year and year <= 2013 then
alias = 'LIE_2013'
end
elseif alias == 'MAL' then
if data_type == 'NOC' and year and year > 1963 then
alias = 'MAS'
end
elseif alias == 'MAC' then
if data_type == 'NOC' and year and year <= 2008 then
alias = 'MAC_2008'
elseif data_type == 'NPC' and year and year <= 1999 then
alias = 'MAC_1999'
end
elseif alias == 'MKD' then
if year and year <= 2018 then
alias = 'MKD_2018'
end
elseif alias == 'SAM' then
if (data_type == 'NOC' or data_type == 'CGA') and year and year <= 1996 then
alias = 'WSM'
end
elseif alias == 'SVK' then
if data_type == 'NOC' and year and year <= 2018 then
alias = 'SVK_2018'
end
elseif alias == 'SWZ' then
if year == 2018 and (games == '英聯邦運動會' or games == '大英國協運動會' ) then
alias = 'SWZ'
elseif year == nil or year >= 2018 then
alias = 'SWZ_YO2018'
end
elseif alias == 'USA' then
if (data_type == 'NOC' or data_type == 'NPC') and year and year <= 2018 then
alias = 'USA_2019'
end
elseif alias == 'ROC' then
if data_type == 'NOC' and year and year >= 2020 and year <= 2022 then
alias = 'RUS'
end
end
--[[RPC的处理位于“Module:Sport_orgs_alias/NPC”页面]]
return alias
end
local function getWebsite(frame, country)
if not country.website then
return ''
end
local website = frame:expandTemplate{title = 'url', args = {country.website} }
if country.website_lang then
if type(country.website_lang) == 'table' then
for _, item in ipairs(country.website_lang) do
website = website .. frame:expandTemplate{title = item .. ' icon'}
end
else
website = website .. frame:expandTemplate{title = country.website_lang .. ' icon'}
end
end
return website
end
local function sportOrgsAlias(frame, args)
local fullName = stripToNil(args.fullName)
if not fullName then
return ''
end
load_data(fullName)
local alias = getAlias(args)
local country = orgs_data.countryOrg[alias] or orgs_data.countryOrg[orgs_data.countryAliases[alias]]
if not country then
return ''
end
if yes(args.website) then
return getWebsite(frame, country)
else
return country.orgname or ''
end
end
local function main(frame)
return sportOrgsAlias(frame, frame.args)
end
local function detect(frame)
local args = frame.args
local games = args.games
games = games:gsub('^%d+', '')
games = games:gsub('^年?', '')
games = games:gsub('Summer?', '')
games = games:gsub('Winter?', '')
games = games:gsub('夏季?', '')
games = games:gsub('冬季?', '')
games = games:gsub('%s+', ' ')
games = stripToNil(games)
local det = nil
for _, item in ipairs(data_check) do
if item == games then
det = item
break
end
end
return ''
end
return {
main = main,
detect = detect,
}