Permanently protected module
From Wikipedia, the free encyclopedia


--generates auto short description for use in infobox settlement

local p = {}

p.categories = ""

local plain = require('Module:Plain text')._main

local getArgs = require('Module:Arguments').getArgs

local tableTools = require ('Module:TableTools')



function p.reverseTable (init)

	init1], init3 = init3], init1

	return init

end



function p.assign (args, argname, num)

	local val

	local var = {}

	for i = 0,num do

		--handle initial "subdivision_foo" without number

		if i == 0 then

			val = ""

		else

			val = tostring(i)

		end

		vari+1 = p.validate(plain(argsargname..val]))

	end

	return var

end



--Display short description using {{short description}}

function p.shortdesc(text, frame)

	return frame:expandTemplate{title = 'Short description', args = {text, 'noreplace'}}

end



function p.category (cattype)

	local category = string.format('[[Category:Pages using infobox settlement with bad %s]]', cattype)

	if category then p.categories = p.categories..category end --categorize

end



--sanity and other checks

function p.validate (parameter, cat)

	if not parameter then return nil end

	parameter = parameter:gsub('%b()', '') --remove things in brackets as extraneous information

			   :gsub('%s+', ' ') --fix possible extra spaces from previous cleanup

			   :gsub('^%s+', '') --trim spaces from beginning

			   :gsub('%s+$', '') --trim spaces from end

	if parameter:match("[,;]") or not parameter:match("%a") then --must have some letters, ignore if multiple types/subdivisions

		if cat then p.category (cat) end

		return nil

	end

	if (parameter == "") then return nil end

	return parameter

end



--removes redundancy like "England, United Kingdom" and fixes issues like "Foo in United States" (to "Foo in the United States")

--also used in Module:Type in location

function p.cleanupLoc (location)

	if location == "" then return nil end

	local replacements = {

		"England, United Kingdom" =  "England",

		"Scotland, United Kingdom" =  "Scotland",

		"Wales, United Kingdom" =  "Wales",

		"New York City, New York, United States" =  "New York City",

		"^United States$" = "the United States",

		"London, United Kingdom" = "London, England"

	}

	for i, v in pairs(replacements) do 

		location = location:gsub(i, v) --series of replacements

	end

	return location

end



function p.main(frame)

	local categories = ""

	local subdivision_types = {}

	local subdivision_names = {}

	local args = getArgs (frame, {parentOnly = true})

	local settlement_type = p.validate(plain(args.settlement_type or args.type), "settlement type") or "Place"

	local short_description = plain(args.short_description)

	subdivision_types = p.assign(args, "subdivision_type", 2)

	subdivision_names = p.assign(args, "subdivision_name", 2)

	

	if short_description then

		if (short_description == 'no') then

			return

		else

			local language = mw.language.getContentLanguage()

			return p.shortdesc(language:ucfirst(short_description), frame)

		end

	end

	

	if not(subdivision_names3 and

		(string.find(settlement_type, '[nN]eighbo[u]?rhood') or string.find(settlement_type, '[sS]uburb'))) then

		subdivision_names3 = nil --display the third subdivision_type only if suburb or neighborhood

	end

	

	--if say "Voivodeship" is found within the subdivision_type, then specially handle

	--by adding Voivodeship to the end if not already present

	for x, y in ipairs (subdivision_types) do

		local special_types = {

			"Voivodeship"

		}

		for i, j in ipairs(special_types) do

			if subdivision_namesx and string.find(y, j, 1, true)

				and not string.find(subdivision_namesx], j, 1, true) then

				subdivision_namesx = subdivision_namesx.." "..j

			end

		end

	end

	

	for x, y in ipairs (subdivision_names) do

		if y then

			if string.find(settlement_type, y, 1, true) then --if the subdivision is found within the settlement type

				subdivision_namesx = nil --don't display redundancy

				p.category ("settlement type")

			end

			if y == mw.title.getCurrentTitle().text then --if the title is the same as one of the subdivision_names

				subdivision_namesx = nil --don't display redundancy

			end

		end

	end



	local location = table.concat(tableTools.compressSparseArray(p.reverseTable(subdivision_names)), ', ')

	

	location = p.cleanupLoc (location)

	

	if location then location =  " in " .. location else location = "" end

	

	local language = mw.language.getContentLanguage()

	return p.shortdesc(language:ucfirst(settlement_type..location), frame)..p.categories

end



return p
Permanently protected module
From Wikipedia, the free encyclopedia


--generates auto short description for use in infobox settlement

local p = {}

p.categories = ""

local plain = require('Module:Plain text')._main

local getArgs = require('Module:Arguments').getArgs

local tableTools = require ('Module:TableTools')



function p.reverseTable (init)

	init1], init3 = init3], init1

	return init

end



function p.assign (args, argname, num)

	local val

	local var = {}

	for i = 0,num do

		--handle initial "subdivision_foo" without number

		if i == 0 then

			val = ""

		else

			val = tostring(i)

		end

		vari+1 = p.validate(plain(argsargname..val]))

	end

	return var

end



--Display short description using {{short description}}

function p.shortdesc(text, frame)

	return frame:expandTemplate{title = 'Short description', args = {text, 'noreplace'}}

end



function p.category (cattype)

	local category = string.format('[[Category:Pages using infobox settlement with bad %s]]', cattype)

	if category then p.categories = p.categories..category end --categorize

end



--sanity and other checks

function p.validate (parameter, cat)

	if not parameter then return nil end

	parameter = parameter:gsub('%b()', '') --remove things in brackets as extraneous information

			   :gsub('%s+', ' ') --fix possible extra spaces from previous cleanup

			   :gsub('^%s+', '') --trim spaces from beginning

			   :gsub('%s+$', '') --trim spaces from end

	if parameter:match("[,;]") or not parameter:match("%a") then --must have some letters, ignore if multiple types/subdivisions

		if cat then p.category (cat) end

		return nil

	end

	if (parameter == "") then return nil end

	return parameter

end



--removes redundancy like "England, United Kingdom" and fixes issues like "Foo in United States" (to "Foo in the United States")

--also used in Module:Type in location

function p.cleanupLoc (location)

	if location == "" then return nil end

	local replacements = {

		"England, United Kingdom" =  "England",

		"Scotland, United Kingdom" =  "Scotland",

		"Wales, United Kingdom" =  "Wales",

		"New York City, New York, United States" =  "New York City",

		"^United States$" = "the United States",

		"London, United Kingdom" = "London, England"

	}

	for i, v in pairs(replacements) do 

		location = location:gsub(i, v) --series of replacements

	end

	return location

end



function p.main(frame)

	local categories = ""

	local subdivision_types = {}

	local subdivision_names = {}

	local args = getArgs (frame, {parentOnly = true})

	local settlement_type = p.validate(plain(args.settlement_type or args.type), "settlement type") or "Place"

	local short_description = plain(args.short_description)

	subdivision_types = p.assign(args, "subdivision_type", 2)

	subdivision_names = p.assign(args, "subdivision_name", 2)

	

	if short_description then

		if (short_description == 'no') then

			return

		else

			local language = mw.language.getContentLanguage()

			return p.shortdesc(language:ucfirst(short_description), frame)

		end

	end

	

	if not(subdivision_names3 and

		(string.find(settlement_type, '[nN]eighbo[u]?rhood') or string.find(settlement_type, '[sS]uburb'))) then

		subdivision_names3 = nil --display the third subdivision_type only if suburb or neighborhood

	end

	

	--if say "Voivodeship" is found within the subdivision_type, then specially handle

	--by adding Voivodeship to the end if not already present

	for x, y in ipairs (subdivision_types) do

		local special_types = {

			"Voivodeship"

		}

		for i, j in ipairs(special_types) do

			if subdivision_namesx and string.find(y, j, 1, true)

				and not string.find(subdivision_namesx], j, 1, true) then

				subdivision_namesx = subdivision_namesx.." "..j

			end

		end

	end

	

	for x, y in ipairs (subdivision_names) do

		if y then

			if string.find(settlement_type, y, 1, true) then --if the subdivision is found within the settlement type

				subdivision_namesx = nil --don't display redundancy

				p.category ("settlement type")

			end

			if y == mw.title.getCurrentTitle().text then --if the title is the same as one of the subdivision_names

				subdivision_namesx = nil --don't display redundancy

			end

		end

	end



	local location = table.concat(tableTools.compressSparseArray(p.reverseTable(subdivision_names)), ', ')

	

	location = p.cleanupLoc (location)

	

	if location then location =  " in " .. location else location = "" end

	

	local language = mw.language.getContentLanguage()

	return p.shortdesc(language:ucfirst(settlement_type..location), frame)..p.categories

end



return p

Videos

Youtube | Vimeo | Bing

Websites

Google | Yahoo | Bing

Encyclopedia

Google | Yahoo | Bing

Facebook