Module:CountryAdjectiveDemonym

local CountryAdjectiveDemonym = { }

local CountryAdjectiveDemonymDataLoaded = false

local countryAdjectivesToNounsTable = { }

local countryNounsToAdjectivesTable = { }

local countryDemonymsToNounsTable = { }

local countryNounsToDemonymsTable = { }

local countriesPrefixedByTheTable = { }

function CountryAdjectiveDemonymDoLoadData()

countriesPrefixedByTheTable = mw.loadData( 'Module:CountryAdjectiveDemonym/The' )

countryNounsToAdjectivesTable = mw.loadData( 'Module:CountryAdjectiveDemonym/Adjectives' )

countryNounsToDemonymsTable = mw.loadData( 'Module:CountryAdjectiveDemonym/Demonyms' )

local myNoun, myAdjective

-- first, load the adjectives table

for myNoun, myAdjective in pairs(countryNounsToAdjectivesTable) do

countryAdjectivesToNounsTable[myAdjective] = myNoun

end

-- Now load the denomyms table

local myDemonym

for myNoun, myDemonym in pairs(countryNounsToDemonymsTable) do

countryDemonymsToNounsTable[myDemonym] = myNoun

end

CountryAdjectiveDemonymDataLoaded = true

return

end

-- ############### Publicly accesible functions #######################

-- if the country name is prefixed by "the" in running text,

-- then return that prefix

-- Otherwise just return an empty string

function CountryAdjectiveDemonym.countryPrefixThe(frame)

local s = frame.args[1]

if not CountryAdjectiveDemonymDataLoaded then

CountryAdjectiveDemonymDoLoadData()

end

if (countriesPrefixedByTheTable[s] == true) then

return "the "

end

return ""

end

function CountryAdjectiveDemonym.getCountryFromAdjective(frame)

local s = frame.args[1]

if not CountryAdjectiveDemonymDataLoaded then

CountryAdjectiveDemonymDoLoadData()

end

local retval = countryAdjectivesToNounsTable[s]

if retval == nil then

if s == "Georgia (country)" then

return s

end

return ""

end

return retval

end

function CountryAdjectiveDemonym.getCountryFromString(frame)

local s = frame.args[1]

if not CountryAdjectiveDemonymDataLoaded then

CountryAdjectiveDemonymDoLoadData()

end

local similarLongerNouns = mw.loadData( 'Module:CountryAdjectiveDemonym/LongerNouns' )

for adjective, noun in pairs(countryAdjectivesToNounsTable) do

if string.find(s, adjective) or string.find(s, noun) then

for longerNoun, nameToUse in pairs(similarLongerNouns) do

if string.find(s, longerNoun) then

return nameToUse

end

end

return noun

end

end

end

function CountryAdjectiveDemonym.getCountryFromDemonym(frame)

local s = frame.args[1]

if not CountryAdjectiveDemonymDataLoaded then

CountryAdjectiveDemonymDoLoadData()

end

local retval = countryDemonymsToNounsTable[s]

if retval == nil then

retval = countryAdjectivesToNounsTable[s]

end

if retval == nil then

return ""

end

return retval

end

function CountryAdjectiveDemonym.getAdjectiveFromCountry(frame)

local s = frame.args[1]

if not CountryAdjectiveDemonymDataLoaded then

CountryAdjectiveDemonymDoLoadData()

end

local retval = countryNounsToAdjectivesTable[s]

if retval == nil then

return ""

end

return retval

end

function CountryAdjectiveDemonym.getDemonymFromCountry(frame)

local s = frame.args[1]

if not CountryAdjectiveDemonymDataLoaded then

CountryAdjectiveDemonymDoLoadData()

end

local retval

retval = countryNounsToDemonymsTable[s]

if retval == nil then

retval = countryNounsToAdjectivesTable[s]

end

if retval == nil then

return ""

end

return retval

end

function CountryAdjectiveDemonym.stripThe(frame)

local s = frame.args[1]

if s == nil then

return ""

end

if mw.ustring.match( s, "^[T]he Gambia$") ~= nil then

return s

end

local stripped = mw.ustring.gsub(s, "^[tT]he ", "")

return stripped

end

return CountryAdjectiveDemonym