跳转到内容

模組:Find country

被永久保护的模块
维基百科,自由的百科全书

这是本页的一个历史版本,由HanTsî留言 | 贡献2022年5月3日 (二) 11:51编辑。这可能和当前版本存在着巨大的差异。

--[[ v1.00
     Test the string against the list of countries/continents.
     Return the first word which matches a country/continent name ...
     unless the "match=" parameter specifies a different match.
     If there is no match, then return an empty string ... unless
     the "nomatch" parameter specifies something different
]]

local getArgs = require('Module:Arguments').getArgs
local p = {}

-- config
local nomatch = ""
local matchnum = 1

local countryList = {
	'南非',
	'中非共和國',
	'中非共和国',
	'阿富汗',
	'阿爾巴尼亞',
	'阿尔巴尼亚',
	'阿爾及利亞',
	'阿尔及利亚',
	'美屬薩摩亞',
	'美属萨摩亚',
	'安道爾',
	'安道尔',
	'安哥拉',
	'安吉拉',
	'安圭拉',
	'安地卡及巴布達',
	'安提瓜和巴布達',
	'安提瓜和巴布达',
	'阿根廷',
	'亞美尼亞',
	'亚美尼亚',
	'阿魯巴',
	'阿鲁巴',
	'澳洲',
	'澳大利亞',
	'澳大利亚',
	'奧地利帝國',
	'奥地利帝国',
	'奧匈帝國',	
	'奥匈帝国',
	'奧地利',
	'奥地利',
	'亞塞拜然',
	'阿塞拜疆',
	'巴哈馬',
	'巴哈马',
	'巴林',
	'孟加拉',
	'孟加拉国',
	'巴貝多',
	'巴巴多斯',
	'白俄羅斯',
	'白俄罗斯',
	'比利時',
	'比利时',
	'貝里斯',
	'伯利兹',
	'貝南',
	'貝寧',
	'贝宁',
	'百慕達',
	'百慕大',
	'不丹',
	'玻利維亞',
	'玻利维亚',
	'波士尼亞與赫塞哥維納',
	'波斯尼亚和黑塞哥维那',
	'波斯尼亞和黑塞哥維那',
	'波札那',
	'博茨瓦納',
	'博茨瓦纳',
	'巴西',
	'汶萊',
	'汶莱',
	'保加利亞',
	'保加利亚',
	'布吉納法索',
	'布基納法索',
	'布基纳法索',
	'蒲隆地',
	'布隆迪',
	'柬埔寨',
	'喀麥隆',
	'喀麦隆',
	'喀麥隆',
	'加拿大',
	'維德角',
	'佛得角',
	'開曼群島',
	'开曼群岛',
	'查德',
	'乍得',
	'智利',
	"中國",
	"中国",
	'中國大陸',
	'中国大陆',
	'中華人民共和國',
	'中华人民共和国',
	'哥倫比亞',
	'哥伦比亚',
	'葛摩',
	'科摩羅',
	'科摩罗',
	'剛果共和國',
	'刚果共和国',
	'剛果民主共和國',
	'刚果民主共和国',
	'剛果民主共和國',
	'剛果',
	'刚果',
	'庫克群島',
	'库克群岛',
	'哥斯大黎加',
	'哥斯達黎加',
	'哥斯达黎加',
	'克羅埃西亞',
	'克羅地亞',
	'克罗地亚',
	'古巴',
	'古拉索',
	'庫拉索',
	'库拉索',
	'賽普勒斯',
	'塞浦路斯',
	'捷克',
	'Denmark',
	'Djibouti',
	'the Dominican Republic',
	'Dominican Republic',
	'Dominica',
	'East Timor',
	'Timor-Leste',
	'Ecuador',
	'Egypt',
	'El Salvador',
	'England',
	'Eritrea',
	'Estonia',
	'Eswatini',	
	'Ethiopia',
	'the Falkland Islands',
	'Falkland Islands',
	'the Faroe Islands',
	'Faroe Islands',
	'Fiji',
	'Finland',
	'France',
	'Gabon',
	'the Gambia',
	'Gambia',
	'Georgia',
	'德國',
	'德国',
	'Ghana',
	'Gibraltar',
	'大不列顛島',
	'大不列颠岛',
	'Greece',
	'Grenada',
	'Guam',
	'Guatemala',
	'Papua New Guinea',	
	'Equatorial Guinea',	
	'Guinea-Bissau',
	'Guinea',
	'Guyana',
	'Haiti',
	'Honduras',
	'香港',
	'Hungary',
	'Iceland',
	'India',
	'Indonesia',
	'Iran',
	'Iraq',
	'Northern Ireland',	
	'the Republic of Ireland',
	'Republic of Ireland',
	'Ireland',
	'Israel',
	'Italy',
	'Ivory Coast',
	"Côte d'Ivoire",
	'Jamaica',
	'日本',
	'Jordan',
	'Kazakhstan',
	'Kenya',
	'Kiribati',
	'Kosovo',
	'the Republic of Kosovo',
	'Republic of Kosovo',
	'Kuwait',
	'Kyrgyzstan',
	'the Kyrgyz Republic',
	'Kyrgyz Republic',
	"the Lao People's Democratic Republic",
	"Lao People's Democratic Republic",
	'Laos',
	'Latvia',
	'Lebanon',
	'Lesotho',
	'Liberia',
	'Libya',
	'Liechtenstein',
	'Lithuania',
	'Luxembourg',
	'澳門',
	'澳门',
	'the Republic of Macedonia',
	'Republic of Macedonia',
	'North Macedonia',
	'Macedonia',
	'Madagascar',
	'Malawi',
	'馬來西亞',
	'马来西亚',
	'the Maldives',
	'Maldives',
	'Mali',
	'Malta',
	'the Marshall Islands',
	'Marshall Islands',
	'Mauritania',
	'Mauritius',
	'Mexico',
	'the Federated States of Micronesia',
	'Federated States of Micronesia',
	'Micronesia',
	'FSM',
	'Moldova',
	'Monaco',
	'Mongolia',
	'Montenegro',
	'Montserrat',
	'Morocco',
	'Mozambique',
	'Myanmar',
	'Namibia',
	'Nauru',
	'Nepal',
	'荷蘭',
	'荷兰',
	'New Caledonia',
	'紐西蘭',
	'新西兰',
	'Nicaragua',
	'Nigeria',
	'Niger',
	'北韓',
	'北韩',
	"朝鮮民主主義人民共和國",
	"朝鲜民主主义人民共和国",
	'Norway',
	'Oman',
	'the Ottoman Empire',
	'Ottoman Empire',
	'Ottoman Egypt',	
	'Pakistan',
	'Palau',
	'Mandatory Palestine',
	'Palestine',
	'the Palestinian territories',
	'Palestinian territories',
	'Panama',
	'Paraguay',
	'Peru',
	'the Philippines',
	'Philippines',
	'Poland',
	'Portugal',
	'Puerto Rico',
	'the Spanish Virgin Islands',
	'Spanish Virgin Islands',
	'Qatar',
	'Romania',
	'the Russian Empire',
	'Russian Empire',
	'the Russian Federation',
	'Russian Federation',
	'Russia',
	'Rwanda',
	'Saint Kitts and Nevis',
	'Saint Lucia',
	'Saint Vincent and the Grenadines',
	'Western Samoa',
	'Samoa',
	'San Marino',
	'São Tomé and Príncipe',
	'São Tomé and Príncipe',
	'Sao Tome and Principe',
	'Saudi Arabia',
	'Scotland',
	'Senegal',
	'Serbia',
	'Seychelles',
	'Sierra Leone',
	'Singapore',
	'Slovakia',
	'Slovenia',
	'the Solomon Islands',
	'Solomon Islands',
	'Somalia',
	'大韓民國',
	'大韩民国',
	'韓國',
	'韩国',
	'南韓',
	'南韩',
	'South Sudan',
	'Sudan',
	'Spain',
	'Sri Lanka',
	'Suriname',
	'Swaziland',
	'Sweden',
	'Switzerland',
	'Syria',
	'Tahiti',
	'中華民國',
	'中华民国',
	'台灣',
	'臺灣',
	'台湾',
	'Tajikistan',
	'Tanzania',
	'Thailand',
	'Togo',
	'Tonga',
	'Trinidad and Tobago',
	'Trinidad',
	'Tobago',
	'Tunisia',
	'Turkey',
	'Turkmenistan',
	'Turks and Caicos Islands',
	'Tuvalu',
	'Uganda',
	'Ukraine',
	'the United Arab Emirates',
	'the UAE',
	'the U.A.E.',
	'United Arab Emirates',
	'UAE',
	'U.A.E.',
	'英國',
	'英国',
	'美國',
	'美国',
	'Uruguay',
	'Uzbekistan',
	'Vanuatu',
	'Venezuela',
	'Vietnam',
	'the British Virgin Islands',
	'British Virgin Islands',
	'UK Virgin Islands',
	'U.K. Virgin Islands',
	'the United States Virgin Islands',
	'the US Virgin Islands',
	'the U.S. Virgin Islands',
	'United States Virgin Islands',
	'US Virgin Islands',
	'U.S. Virgin Islands',
	'the Virgin Islands',
	'Virgin Islands',
	'Wales',
	'Yemen',
	'Zambia',
	'Zimbabwe',
	'Find country/testcases'
}

-- returns the name of a country that is found in the string
-- ... or an empty string if there is no match
function findcountryinstring(str)

	nMatches = 0
	myMatches ={}
	str=" " .. str:gsub("^%s*(.-)%s*$", "%1") .. " "

		-- check agaist each country
		-- if there is a match, then return that country
		for i, thiscountry in ipairs(countryList) do
			if mw.ustring.find(str, thiscountry) then
				nMatches = nMatches + 1
				myMatches[nMatches] = thiscountry
			end
		end


	if (nMatches == 0) then
		-- none of the title words matches a whole country
		return nomatch
	end
	
	if ((matchnum >= 1) and (matchnum <= nMatches)) then
		return myMatches[matchnum]
	end

	if (matchnum < 0) then
		matchnum = matchnum + 1 -- so that -1 is the last match etc
		if ((matchnum + nMatches) >= 1) then
			return myMatches[matchnum + nMatches]
		end
	end
	
	-- if we get here, we have not found a match at the position specified by "matchnum"
	return nomatch
end

function p.main(frame)
	local args = getArgs(frame)
	return p._main(args)
end

function p._main(args)
	if (args['nomatch'] ~= nil) then
		nomatch = args['nomatch']
	end
	
	-- by default, we return the first match
	-- but the optional "C" paarmeter sets the "matchnum" variable, which
	-- * for a positive matchnum "n", returns the nth match if it exists
	-- * for a positive matchnum "n", returns (if it exists) the nth match
	--   counting backwards from the end.
	--   So "match=-1" returns the last match
	--   and "match=-3" returns the 3rd-last match
	if (args['match'] ~= nil) then
		matchnum = tonumber(args['match'])
		if ((matchnum == nil) or (matchnum == 0)) then
			matchnum = 1
		end
	end
	
	-- by default, we use the current page
	-- but if the "string=" parameters is supplied, we use that
	-- so we try the parameter first
	thispagename = nil
	if ((args['string'] ~= nil) and (args['string'] ~= "")) then
		-- we have a non-empty "string" parameter, so we use it
		thisstring = args['string']
	else
		-- get the page title
		thispage = mw.title.getCurrentTitle()
		thisstring = thispage.text;
	end
	
	-- now check the pagename to try to find a country
	result = findcountryinstring(thisstring)
	if (result == "") then
		return nomatch
	end
	return result
end

return p