<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mindpowe.red/wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3ASettlement_short_description</id>
	<title>Module:Settlement short description - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mindpowe.red/wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3ASettlement_short_description"/>
	<link rel="alternate" type="text/html" href="https://mindpowe.red/wiki/index.php?title=Module:Settlement_short_description&amp;action=history"/>
	<updated>2026-04-06T00:49:50Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.34.2</generator>
	<entry>
		<id>https://mindpowe.red/wiki/index.php?title=Module:Settlement_short_description&amp;diff=1704&amp;oldid=prev</id>
		<title>imported&gt;Jonesey95: copy edit comments. No change to code</title>
		<link rel="alternate" type="text/html" href="https://mindpowe.red/wiki/index.php?title=Module:Settlement_short_description&amp;diff=1704&amp;oldid=prev"/>
		<updated>2020-02-25T14:06:03Z</updated>

		<summary type="html">&lt;p&gt;copy edit comments. No change to code&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--generates auto short description for use in infobox settlement&lt;br /&gt;
local p = {}&lt;br /&gt;
p.categories = &amp;quot;&amp;quot;&lt;br /&gt;
local plain = require('Module:Plain text')._main&lt;br /&gt;
local getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
local tableTools = require ('Module:TableTools')&lt;br /&gt;
&lt;br /&gt;
function p.reverseTable (init)&lt;br /&gt;
	init[1], init[3] = init[3], init[1]&lt;br /&gt;
	return init&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.assign (args, argname, num)&lt;br /&gt;
	local val&lt;br /&gt;
	local var = {}&lt;br /&gt;
	for i = 0,num do&lt;br /&gt;
		--handle initial &amp;quot;subdivision_foo&amp;quot; without number&lt;br /&gt;
		if i == 0 then&lt;br /&gt;
			val = &amp;quot;&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			val = tostring(i)&lt;br /&gt;
		end&lt;br /&gt;
		var[i+1] = p.validate(plain(args[argname..val]))&lt;br /&gt;
	end&lt;br /&gt;
	return var&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--Display short description using {{short description}}&lt;br /&gt;
function p.shortdesc(text, frame)&lt;br /&gt;
	return frame:expandTemplate{title = 'Short description', args = {text, 'noreplace'}}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.category (cattype)&lt;br /&gt;
	local category = string.format('[[Category:Pages using infobox settlement with bad %s]]', cattype)&lt;br /&gt;
	if category then p.categories = p.categories..category end --categorize&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--sanity and other checks&lt;br /&gt;
function p.validate (parameter, cat)&lt;br /&gt;
	if not parameter then return nil end&lt;br /&gt;
	parameter = parameter:gsub('%b()', '') --remove things in brackets as extraneous information&lt;br /&gt;
			   :gsub('%s+', ' ') --fix possible extra spaces from previous cleanup&lt;br /&gt;
			   :gsub('^%s+', '') --trim spaces from beginning&lt;br /&gt;
			   :gsub('%s+$', '') --trim spaces from end&lt;br /&gt;
	if parameter:match(&amp;quot;[,;]&amp;quot;) or not parameter:match(&amp;quot;%a&amp;quot;) then --must have some letters, ignore if multiple types/subdivisions&lt;br /&gt;
		if cat then p.category (cat) end&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if (parameter == &amp;quot;&amp;quot;) then return nil end&lt;br /&gt;
	return parameter&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--removes redundancy like &amp;quot;England, United Kingdom&amp;quot; and fixes issues like &amp;quot;Foo in United States&amp;quot; (to &amp;quot;Foo in the United States&amp;quot;)&lt;br /&gt;
--also used in Module:Type in location&lt;br /&gt;
function p.cleanupLoc (location)&lt;br /&gt;
	if location == &amp;quot;&amp;quot; then return nil end&lt;br /&gt;
	local replacements = {&lt;br /&gt;
		[&amp;quot;England, United Kingdom&amp;quot;] =  &amp;quot;England&amp;quot;,&lt;br /&gt;
		[&amp;quot;Scotland, United Kingdom&amp;quot;] =  &amp;quot;Scotland&amp;quot;,&lt;br /&gt;
		[&amp;quot;Wales, United Kingdom&amp;quot;] =  &amp;quot;Wales&amp;quot;,&lt;br /&gt;
		[&amp;quot;New York City, New York, United States&amp;quot;] =  &amp;quot;New York City&amp;quot;,&lt;br /&gt;
		[&amp;quot;^United States$&amp;quot;] = &amp;quot;the United States&amp;quot;,&lt;br /&gt;
		[&amp;quot;London, United Kingdom&amp;quot;] = &amp;quot;London&amp;quot;,&lt;br /&gt;
		[&amp;quot;London, England&amp;quot;] = &amp;quot;London&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
	for i, v in pairs(replacements) do &lt;br /&gt;
		location = location:gsub(i, v) --series of replacements&lt;br /&gt;
	end&lt;br /&gt;
	return location&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local categories = &amp;quot;&amp;quot;&lt;br /&gt;
	local subdivision_types = {}&lt;br /&gt;
	local subdivision_names = {}&lt;br /&gt;
	local args = getArgs (frame, {parentOnly = true})&lt;br /&gt;
	local settlement_type = p.validate(plain(args.settlement_type or args.type), &amp;quot;settlement type&amp;quot;) or &amp;quot;Place&amp;quot;&lt;br /&gt;
	local short_description = plain(args.short_description)&lt;br /&gt;
	subdivision_types = p.assign(args, &amp;quot;subdivision_type&amp;quot;, 2)&lt;br /&gt;
	subdivision_names = p.assign(args, &amp;quot;subdivision_name&amp;quot;, 2)&lt;br /&gt;
	&lt;br /&gt;
	if short_description then&lt;br /&gt;
		if (short_description == 'no') then&lt;br /&gt;
			return&lt;br /&gt;
		else&lt;br /&gt;
			return p.shortdesc(short_description, frame)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if not(subdivision_names[3] and&lt;br /&gt;
		(string.find(settlement_type, '[nN]eighbo[u]?rhood') or string.find(settlement_type, '[sS]uburb'))) then&lt;br /&gt;
		subdivision_names[3] = nil --display the third subdivision_type only if suburb or neighborhood&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--if say &amp;quot;Voivodeship&amp;quot; is found within the subdivision_type, then specially handle&lt;br /&gt;
	--by adding Voivodeship to the end if not already present&lt;br /&gt;
	for x, y in ipairs (subdivision_types) do&lt;br /&gt;
		local special_types = {&lt;br /&gt;
			&amp;quot;Voivodeship&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
		for i, j in ipairs(special_types) do&lt;br /&gt;
			if subdivision_names[x] and string.find(y, j, 1, true)&lt;br /&gt;
				and not string.find(subdivision_names[x], j, 1, true) then&lt;br /&gt;
				subdivision_names[x] = subdivision_names[x]..&amp;quot; &amp;quot;..j&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for x, y in ipairs (subdivision_names) do&lt;br /&gt;
		if y then&lt;br /&gt;
			if string.find(settlement_type, y, 1, true) then --if the subdivision is found within the settlement type&lt;br /&gt;
				subdivision_names[x] = nil --don't display redundancy&lt;br /&gt;
				p.category (&amp;quot;settlement type&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
			if y == mw.title.getCurrentTitle().text then --if the title is the same as one of the subdivision_names&lt;br /&gt;
				subdivision_names[x] = nil --don't display redundancy&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local location = table.concat(tableTools.compressSparseArray(p.reverseTable(subdivision_names)), ', ')&lt;br /&gt;
	&lt;br /&gt;
	location = p.cleanupLoc (location)&lt;br /&gt;
	&lt;br /&gt;
	if location then location =  &amp;quot; in &amp;quot; .. location else location = &amp;quot;&amp;quot; end&lt;br /&gt;
&lt;br /&gt;
	return p.shortdesc(settlement_type..location, frame)..p.categories&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Jonesey95</name></author>
		
	</entry>
</feed>