มอดูล:CountryAdjectiveDemonym

local CountryAdjectiveDemonym = { }
local CountryAdjectiveDemonymDataLoaded = false
local countryAdjectivesToNounsTable = { }
local countryNounsToAdjectivesTable  = { }
local countryDemonymsToNounsTable = { }
local countryNounsToDemonymsTable  = { }
local countriesPrefixedByTheTable = { }
function CountryAdjectiveDemonymDoLoadData()
	countriesPrefixedByTheTable = mw.loadData( 'มอดูล:CountryAdjectiveDemonym/The' )
	countryNounsToAdjectivesTable = mw.loadData( 'มอดูล:CountryAdjectiveDemonym/Adjectives' )
	countryNounsToDemonymsTable = mw.loadData( 'มอดูล:CountryAdjectiveDemonym/Demonyms' )
	local myNoun, myAdjective
	
	-- first, load the adjectives table
	for myNoun, myAdjective in pairs(countryNounsToAdjectivesTable) do
		countryAdjectivesToNounsTablemyAdjective = myNoun
	end
	-- Now load the denomyms table
	local myDemonym
	for myNoun, myDemonym in pairs(countryNounsToDemonymsTable) do
		countryDemonymsToNounsTablemyDemonym = 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.args1
	if not CountryAdjectiveDemonymDataLoaded then
		CountryAdjectiveDemonymDoLoadData()
	end
	if (countriesPrefixedByTheTables == true) then
		return "the "
	end
	return ""
end
function CountryAdjectiveDemonym.getCountryFromAdjective(frame)
	local s = frame.args1
	if not CountryAdjectiveDemonymDataLoaded then
		CountryAdjectiveDemonymDoLoadData()
	end
	local retval = countryAdjectivesToNounsTables
	if retval == nil then
		if s == "Georgia (country)" then
			return s
		end
		return ""
	end
	return retval
end
function CountryAdjectiveDemonym.getCountryFromString(frame)
	local s = frame.args1
	if not CountryAdjectiveDemonymDataLoaded then
		CountryAdjectiveDemonymDoLoadData()
	end
	
	local similarLongerNouns = mw.loadData( 'มอดูล: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.args1
	if not CountryAdjectiveDemonymDataLoaded then
		CountryAdjectiveDemonymDoLoadData()
	end
	local retval = countryDemonymsToNounsTables
	if retval == nil then 
		retval = countryAdjectivesToNounsTables
	end
	if retval == nil then
		return ""
	end
	return retval
end
function CountryAdjectiveDemonym.getAdjectiveFromCountry(frame)
	local s = frame.args1
	if not CountryAdjectiveDemonymDataLoaded then
		CountryAdjectiveDemonymDoLoadData()
	end
	local retval = countryNounsToAdjectivesTables
	if retval == nil then
		return ""
	end
	return retval
end
function CountryAdjectiveDemonym.getDemonymFromCountry(frame)
	local s = frame.args1
	if not CountryAdjectiveDemonymDataLoaded then
		CountryAdjectiveDemonymDoLoadData()
	end
	local retval
	retval = countryNounsToDemonymsTables
	if retval == nil then
		retval = countryNounsToAdjectivesTables
	end
	if retval == nil then
		return ""
	end
	return retval
end
function CountryAdjectiveDemonym.stripThe(frame)
	local s = frame.args1
	if s == nil then
		return ""
	end
	if mw.ustring.match( s, "^The Gambia$") ~= nil then
		return s
	end
	local stripped = mw.ustring.gsub(s, "^tThe ", "")
	return stripped
end
return CountryAdjectiveDemonym