Mô đun:Find country

-- 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 = {
'Nam Phi',
'Cộng hòa Trung Phi',
'Châu Phi',
'Châu Nam Cực',
'Trung Á',
'Nam Á',
'Đông Nam Á',
'Châu Á',
'Caribe',
'Lục địa Á-Âu',
'Châu Âu',
'Trung Đông',
'Trung Mỹ',
'Bắc Mỹ',
'Nam Mỹ',
'Châu Đại Dương',
'Châu Mỹ',
'Afghanistan',
'Albania',
'Algeria',
'Samoa thuộc Mỹ',
'Andorra',
'Angola',
'Anguilla',
'Antigua và Barbuda',
'Argentina',
'Armenia',
'Aruba',
'Úc',
'Đế quốc Áo',
'Áo-Hung',
'Áo',
'Azerbaijan',
'Bahamas',
'Bahrain',
'Bangladesh',
'Barbados',
'Belarus',
'Bỉ',
'Belize',
'Benin',
'Bermuda',
'Bhutan',
'Bolivia',
'Bosnia và Herzegovina',
'Botswana',
'Brazil',
'Brunei Darussalam',
'Brunei',
'Bulgaria',
'Burkina Faso',
'Burundi',
'Campuchia',
'Cameroon',
'Canada',
'Cabo Verde',
'Quần đảo Cayman',
'Chad',
'Chile',
'Cộng hòa Nhân dân Trung Hoa',
'Trung Quốc',
'Colombia',
'Comoros',
'Cộng hòa Congo',
'Cộng hòa Dân chủ Congo',
'Congo',
'Quần đảo Cook',
'Costa Rica',
'Croatia',
'Cuba',
'Curaçao',
'Síp',
'Cộng hòa Séc',
'Séc',
'Đan Mạch',
'Djibouti',
'Cộng hòa Dominica',
'Dominica',
'Đông Timor',
'Timor-Leste',
'Ecuador',
'Ai Cập',
'El Salvador',
'Anh',
'Eritrea',
'Estonia',
'Eswatini',
'Ethiopia',
'Quần đảo Falkland',
'Quần đảo Faroe',
'Fiji',
'Phần Lan',
'Pháp',
'Gabon',
'Gambia',
'Gruzia',
'Đức',
'Ghana',
'Gibraltar',
'Vương quốc Anh',
'Hy Lạp',
'Grenada',
'Guam',
'Guatemala',
'Papua New Guinea',
'Guinea Xích đạo',
'Guinea-Bissau',
'Guinea',
'Guyana',
'Haiti',
'Honduras',
'Hồng Kông',
'Hungary',
'Iceland',
'Ấn Độ',
'Indonesia',
'Iran',
'Iraq',
'Bắc Ireland',
'Cộng hòa Ireland',
'Ireland',
'Israel',
'Ý',
'Bờ Biển Ngà',
'Côte d\'Ivoire',
'Jamaica',
'Nhật Bản',
'Jordan',
'Kazakhstan',
'Kenya',
'Kiribati',
'Kosovo',
'Cộng hòa Kosovo',
'Kuwait',
'Kyrgyzstan',
'Cộng hòa Kyrgyzstan',
'Cộng hòa Dân chủ Nhân dân Lào',
'Lào',
'Latvia',
'Liban',
'Lesotho',
'Liberia',
'Libya',
'Liechtenstein',
'Litva',
'Luxembourg',
'Ma Cao',
'Cộng hòa Macedonia',
'Bắc Macedonia',
'Macedonia',
'Madagascar',
'Malawi',
'Malaysia',
'Maldives',
'Mali',
'Malta',
'Quần đảo Marshall',
'Mauritania',
'Mauritius',
'Mexico',
'Liên bang Micronesia',
'Micronesia',
'Moldova',
'Monaco',
'Mông Cổ',
'Montenegro',
'Montserrat',
'Maroc',
'Mozambique',
'Myanmar',
'Namibia',
'Nauru',
'Nepal',
'Hà Lan',
'Nouvelle-Calédonie',
'New Zealand',
'Nicaragua',
'Nigeria',
'Niger',
'Triều Tiên',
'Cộng hòa Dân chủ Nhân dân Triều Tiên',
'Na Uy',
'Oman',
'Đế quốc Ottoman',
'Ai Cập Ottoman',
'Pakistan',
'Palau',
'Palestine ủy trị',
'Palestine',
'Lãnh thổ Palestine',
'Panama',
'Paraguay',
'Peru',
'Philippines',
'Ba Lan',
'Bồ Đào Nha',
'Puerto Rico',
'Quần đảo Virgin thuộc Tây Ban Nha',
'Qatar',
'Romania',
'Đế quốc Nga',
'Liên bang Nga',
'Nga',
'Rwanda',
'Saint Kitts và Nevis',
'Saint Lucia',
'Saint Vincent và Grenadines',
'Tây Samoa',
'Samoa',
'San Marino',
'São Tomé và Príncipe',
'Ả Rập Xê Út',
'Scotland',
'Senegal',
'Serbia',
'Seychelles',
'Sierra Leone',
'Singapore',
'Slovakia',
'Slovenia',
'Quần đảo Solomon',
'Somalia',
'Hàn Quốc',
'Cộng hòa Triều Tiên',
'Nam Sudan',
'Sudan',
'Tây Ban Nha',
'Sri Lanka',
'Suriname',
'Swaziland',
'Thụy Điển',
'Thụy Sĩ',
'Syria',
'Tahiti',
'Trung Hoa Dân Quốc',
'Đài Loan',
'Tajikistan',
'Tanzania',
'Thái Lan',
'Togo',
'Tonga',
'Trinidad và Tobago',
'Trinidad',
'Tobago',
'Tunisia',
'Thổ Nhĩ Kỳ',
'Turkmenistan',
'Quần đảo Turks và Caicos',
'Tuvalu',
'Uganda',
'Ukraine',
'Các Tiểu vương quốc Ả Rập Thống nhất',
'Vương quốc Liên hiệp Anh và Bắc Ireland',
'Hoa Kỳ',
'Uruguay',
'Uzbekistan',
'Vanuatu',
'Venezuela',
'Việt Nam',
'Quần đảo Virgin thuộc Anh',
'Quần đảo Virgin thuộc Mỹ',
'Quần đảo Virgin',
'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 = 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