پودمان:CountryAdjectiveDemonym

    از ویکی‌نور

    توضیحات این پودمان می‌تواند در پودمان: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