Module:Find country explained

--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').getArgslocal p =

-- configlocal 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 matchfunction 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 nomatchend

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 resultend

return p