توضیحات پودمان[ایجاد] [پاکسازی]
--[[ 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 = {
	'آفریقای جنوبی',
	'جمهوری آفریقای مرکزی',
	'آفریقا',
	'جنوبگان',
	'آسیای مرکزی',
	'آسیای جنوبی',
	'جنوب شرق آسیا',
	'آسیا',
	'کارائیب',
	'اوراسیا',
	'اروپا',
	'خاورمیانه',
	'آمریکای مرکزی',
	'آمریکای شمالی',
	'آمریکای جنوبی',
	'اقیانوسیه',
	'قاره آمریکا',
	'افغانستان',
	'آلبانی',
	'الجزایر',
	'ساموآی آمریکا',
	'آندورا',
	'آنگولا',
	'آنگویلا',
	'آنتیگوآ و باربودا',
	'آرژانتین',
	'ارمنستان',
	'آروبا',
	'استرالیا',
	'امپراتوری اتریش',
	'اتریش-مجارستان',
	'اتریش',
	'جمهوری آذربایجان',
	'باهاما',
	'بحرین',
	'بنگلادش',
	'باربادوس',
	'بلاروس',
	'بلژیک',
	'بلیز',
	'بنین',
	'برمودا',
	'بوتان',
	'بولیوی',
	'بوسنی و هرزگوین',
	'بوتسوانا',
	'برزیل',
	'برونئی',
	'بلغارستان',
	'بورکینافاسو',
	'بوروندی',
	'کامبوج',
	'کامرون',
	'کانادا',
	'کیپ ورد',
	'جزایر کیمن',
	'چاد',
	'شیلی',
	"جمهوری خلق چین",
	'چین',
	'کلمبیا',
	'جزایر قمر',
	'جمهوری کنگو',
	'جمهوری دموکراتیک کنگو',
	'کنگو',
	'جزایر کوک',
	'کاستاریکا',
	'کرواسی',
	'کوبا',
	'کوراسائو',
	'قبرس',
	'جمهوری چک',
	'چک',
	'دانمارک',
	'جیبوتی',
	'جمهوری دومینیکن',
	'دومینیکا',
	'تیمور شرقی',
	'اکوادور',
	'مصر',
	'السالوادور',
	'انگلستان',
	'اریتره',
	'استونی',
	'اسواتینی',	
	'اتیوپی',
	'جزایر فالکلند',
	'جزایر فارو',
	'فیجی',
	'فنلاند',
	'فرانسه',
	'گابن',
	'گامبیا',
	'گرجستان',
	'آلمان',
	'غنا',
	'جبل‌الطارق',
	'بریتانیای کبیر',
	'بریتانیا',
	'یونان',
	'گرنادا',
	'گوآم',
	'گوآتمالا',
	'گواتمالا',
	'پاپوآ گینه نو',	
	'گینه استوایی',	
	'گینه بیسائو',
	'گینه',
	'گویان',
	'هائیتی',
	'هندوراس',
	'هنگ کنگ',
	'مجارستان',
	'ایسلند',
	'هند',
	'اندونزی',
	'ایران',
	'عراق',
	'ایرلند شمالی',	
	'جمهوری ایرلند',
	'ایرلند',
	'اسرائیل',
	'ایتالیا',
	'ساحل عاج',
	'جامائیکا',
	'ژاپن',
	'اردن',
	'قزاقستان',
	'کنیا',
	'کیریباتی',
	'کوزوو',
	'جمهوری کوزوو',
	'کویت',
	'قرقیزستان',
	'جمهوری قرقیزستان',
	"جمهوری دموکراتیک خلق لائو",
	'لائوس',
	'لتونی',
	'لبنان',
	'لسوتو',
	'لیبریا',
	'لیبی',
	'لیختن‌اشتاین',
	'لیتوانی',
	'لوکزامبورگ',
	'ماکائو',
	'جمهوری مقدونیه',
	'مقدونیه شمالی',
	'مقدونیه',
	'ماداگاسکار',
	'مالاوی',
	'مالزی',
	'مالی',
	'مالت',
	'جزایر مارشال',
	'موریتانی',
	'موریس',
	'مکزیک',
	'ایالات فدرال میکرونزی',
	'میکرونزی',
	'مولداوی',
	'موناکو',
	'مغولستان',
	'مونته‌نگرو',
	'مونتسرات',
	'مراکش',
	'موزامبیک',
	'میانمار',
	'نامیبیا',
	'نائورو',
	'نپال',
	'هلند',
	'کالدونیای جدید',
	'نیوزیلند',
	'نیکاراگوئه',
	'نیجریه',
	'نیجر',
	'کره شمالی',
	"جمهوری دموکراتیک خلق کره",
	'نروژ',
	'عمان',
	'امپراتوری عثمانی',
	'مصر عثمانی',	
	'پاکستان',
	'پالائو',
	'قیمومت بریتانیا بر فلسطین',
	'فلسطین',
	'سرزمین‌های فلسطینی',
	'پاناما',
	'پاراگوئه',
	'پرو',
	'فیلیپین',
	'لهستان',
	'پرتغال',
	'پورتوریکو',
	'جزایر ویرجین اسپانیا',
	'قطر',
	'رومانی',
	'امپراتوری روسیه',
	'فدراسیون روسیه',
	'روسیه',
	'رواندا',
	'سنت کیتس و نویس',
	'سنت لوسیا',
	'سنت وینسنت و گرنادین‌ها',
	'ساموآی غربی',
	'ساموآ',
	'سان مارینو',
	'سائوتومه و پرنسیپ',
	'عربستان سعودی',
	'اسکاتلند',
	'سنگال',
	'صربستان',
	'سیشل',
	'سیرالئون',
	'سنگاپور',
	'اسلواکی',
	'اسلوونی',
	'جزایر سلیمان',
	'سومالی',
	'کره جنوبی',
	'جمهوری کره',
	'سودان جنوبی',
	'سودان',
	'اسپانیا',
	'سریلانکا',
	'سورینام',
	'سوازیلند',
	'سوئد',
	'سوئیس',
	'سوریه',
	'تاهیتی',
	'جمهوری چین',
	'تایوان',
	'تاجیکستان',
	'تانزانیا',
	'تایلند',
	'توگو',
	'تونگا',
	'ترینیداد و توباگو',
	'ترینیداد',
	'توباگو',
	'تونس',
	'ترکیه',
	'ترکمنستان',
	'تووالو',
	'اوگاندا',
	'اوکراین',
	'امارات متحده عربی',
	'پادشاهی متحد',
	'ایالات متحده آمریکا',
	'ایالات متحده',
	'آمریکا',
	'اروگوئه',
	'ازبکستان',
	'وانواتو',
	'ونزوئلا',
	'ویتنام',
	'جزایر ویرجین بریتانیا',
	'جزایر ویرجین ایالات متحده آمریکا',
	'جزایر ویرجین',
	'ولز',
	'یمن',
	'زامبیا',
	'زیمبابوه',
	'یافتن کشور/آزمایشی'
}

-- 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=" " .. mw.ustring.gsub(str, "^%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['نامنطبق'] then args['nomatch'] = args['نامنطبق'] end
	if args['منطبق'] then args['match'] = args['منطبق'] end
	if args['رشته'] then args['string'] = args['رشته'] end
	
	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