Module:Geography: Difference between revisions
| Robertbaxter (talk | contribs) No edit summary | Robertbaxter (talk | contribs)  No edit summary | ||
| Line 8: | Line 8: | ||
| 	-- categories are rendered. | 	-- categories are rendered. | ||
| 	local args = frame.args or frame:getParent().args | 	local args = frame.args or frame:getParent().args | ||
| 	local class = args[1] | |||
| 	local country = args[2]:gsub("^%s*(.-)%s*$", "%1") | |||
| 	local regional = args[region] | |||
| 	local result = "" | 	local result = "" | ||
| 	local international = false | |||
| 	if country:match(',') then | |||
| 		local list = {} | |||
| 		for name in string.gmatch(country, "[^,]+") do | |||
| 	    	name = name:gsub("^%s*(.-)%s*$", "%1") | |||
| 			insert(list, name) | |||
| 		end | |||
| 		country = sharedPlace(list) | |||
| 		if country == nil then international = true end | |||
| 	end | |||
| 	if country == "" then | |||
| 	return result | 		return "" | ||
| 	elseif international then | |||
| 		return "[[Category:" .. glossary[class]["international"] .. "]]" | |||
| 	else | |||
| 		result = result .. "[[Category:" | |||
| 			.. glossary[class]["category"] .. " " .. country .. "]]" | |||
| 		if regional then | |||
| 			local region = getRegion(country) | |||
| 			if region ~= nil and region ~= "" then | |||
| 				result = result .. "[[Category:" | |||
| 					.. glossary[class]["category"] .. " " .. region .. "]]" | |||
| 			end | |||
| 		end | |||
| 		return result | |||
| 	end | |||
| end | end | ||
| Line 18: | Line 46: | ||
| function p.cityCategory(frame) end | function p.cityCategory(frame) end | ||
| -- DEPRECATED | |||
| function p.sharedPlace(frame) | function p.sharedPlace(frame) | ||
|      local args = frame.args or frame:getParent().args |      local args = frame.args or frame:getParent().args | ||
| Line 33: | Line 62: | ||
| end | end | ||
| function  | -- If all strings in the list are identical, returns the string, otherwise | ||
| -- returns nil (ignores blank string items, if all strings are blank returns | |||
| -- the blank string). | |||
| local function sharedPlace(list) | |||
| 	local result = nil | |||
|     local flag = true | |||
|     for name in list do | |||
|     	-- name = name:gsub("^%s*(.-)%s*$", "%1") | |||
| 		if result == nil then | |||
| 			result = name | |||
| 		elseif result ~= name and name ~= "" then | |||
| 			flag = false | |||
| 		end | |||
| 	end | |||
| 	if flag then return result else return nil end | |||
| end | |||
| function getRegion(country) | |||
|      -- Switch on the provided country and return the region string. |      -- Switch on the provided country and return the region string. | ||
| end | end | ||
| return p | return p | ||
Revision as of 03:34, 4 January 2025
Documentation for this module may be created at Module:Geography/doc
local p = {}
function p.countryCategory(frame)
	-- Generate country categories (and optional regional category) based on
	-- the passed class and country. Can provide a single country name or a
	-- list (in which case if they are identical, their shared value is used,
	-- otherwise "International _____"). If a blank string is sent no 
	-- categories are rendered.
	local args = frame.args or frame:getParent().args
	local class = args[1]
	local country = args[2]:gsub("^%s*(.-)%s*$", "%1")
	local regional = args[region]
	
	local result = ""
	local international = false
	
	if country:match(',') then
		local list = {}
		for name in string.gmatch(country, "[^,]+") do
	    	name = name:gsub("^%s*(.-)%s*$", "%1")
			insert(list, name)
		end
		country = sharedPlace(list)
		if country == nil then international = true end
	end
	
	if country == "" then
		return ""
	elseif international then
		return "[[Category:" .. glossary[class]["international"] .. "]]"
	else
		result = result .. "[[Category:"
			.. glossary[class]["category"] .. " " .. country .. "]]"
		if regional then
			local region = getRegion(country)
			if region ~= nil and region ~= "" then
				result = result .. "[[Category:"
					.. glossary[class]["category"] .. " " .. region .. "]]"
			end
		end
		return result
	end
end
function p.stateProvinceCategory(frame) end
function p.cityCategory(frame) end
-- DEPRECATED
function p.sharedPlace(frame)
    local args = frame.args or frame:getParent().args
    local a = ""
    local b = true
    for name in string.gmatch(args[1], "[^,]+") do
    	name = name:gsub("^%s*(.-)%s*$", "%1")
		if a == "" then
			a = name
		elseif a ~= name then
			b = false
		end
	end
	if b then return a else return "" end
end
-- If all strings in the list are identical, returns the string, otherwise
-- returns nil (ignores blank string items, if all strings are blank returns
-- the blank string).
local function sharedPlace(list)
	local result = nil
    local flag = true
    for name in list do
    	-- name = name:gsub("^%s*(.-)%s*$", "%1")
		if result == nil then
			result = name
		elseif result ~= name and name ~= "" then
			flag = false
		end
	end
	if flag then return result else return nil end
end
function getRegion(country)
    -- Switch on the provided country and return the region string.
end
return p