<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ARoutelist_row</id>
	<title>Module:Routelist row - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ARoutelist_row"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Routelist_row&amp;action=history"/>
	<updated>2026-04-11T07:55:22Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:Routelist_row&amp;diff=144938&amp;oldid=prev</id>
		<title>imported&gt;Fredddie: shieldlist turned it on</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Routelist_row&amp;diff=144938&amp;oldid=prev"/>
		<updated>2022-04-10T04:43:40Z</updated>

		<summary type="html">&lt;p&gt;shieldlist turned it on&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = { } -- Package to be exported&lt;br /&gt;
local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs -- Import module function to work with passed arguments&lt;br /&gt;
local lang = mw.getContentLanguage() -- Retrieve built-in locale for date formatting&lt;br /&gt;
local format = mw.ustring.format -- String formatting function&lt;br /&gt;
local frame = mw.getCurrentFrame()&lt;br /&gt;
&lt;br /&gt;
local routeStates = { } -- Table with route statuses.&lt;br /&gt;
--[[ The following tables include the following entries:&lt;br /&gt;
row: The start of the row, for this particular type (color)&lt;br /&gt;
established: The string to be output in the &amp;quot;Formed&amp;quot; column. For future routes, &amp;quot;proposed&amp;quot; is displayed here. Otherwise, display the year passed in the established parameter.&lt;br /&gt;
removed: The string to be output in the &amp;quot;Removed&amp;quot; column. In the case of routeStates.former, the year that the route was decommissioned is output instead.&lt;br /&gt;
]]--&lt;br /&gt;
routeStates.current = {row = &amp;quot;|-&amp;quot;, removed = &amp;quot;current&amp;quot;} -- Data for current routes&lt;br /&gt;
routeStates.future = {row = &amp;#039;|- style=&amp;quot;background-color:#ffdead;&amp;quot; title=&amp;quot;Future route&amp;quot;&amp;#039;, established = &amp;quot;proposed&amp;quot;, removed = &amp;quot;—&amp;quot;} -- Data for future routes&lt;br /&gt;
routeStates.former = {row = &amp;#039;|- style=&amp;quot;background-color:#d3d3d3;&amp;quot; title=&amp;quot;Former route&amp;quot;&amp;#039;} -- Data for former routes&lt;br /&gt;
routeStates.formeroverride = {row = &amp;#039;|- style=&amp;quot;background-color:#d3d3d3;&amp;quot; title=&amp;quot;Former route&amp;quot;&amp;#039;, removed = &amp;quot;—&amp;quot;} -- Data for routes marked as former by override&lt;br /&gt;
routeStates.unknown = {row = &amp;quot;|-&amp;quot;, removed = &amp;quot;—&amp;quot;} -- Data for route with unknown status&lt;br /&gt;
&lt;br /&gt;
function getRouteState(established, decommissioned)&lt;br /&gt;
	--[[ This function is passed the dates given for the established and decommissioned fields to the template. &lt;br /&gt;
	It then returns the entry in the routeStates table corresponding to the status of the route.&lt;br /&gt;
	]]--&lt;br /&gt;
	if decommissioned == &amp;#039;yes&amp;#039; then --If the decommissioned property just says &amp;quot;yes&amp;quot;, then mark it as a former route and display default data.&lt;br /&gt;
		return routeStates.formeroverride&lt;br /&gt;
	elseif decommissioned then -- If the route is decommissioned, then it must be a former route.&lt;br /&gt;
		return routeStates.former&lt;br /&gt;
	elseif not established then -- Without the establishment date, there is not enough information to determine the status of the route.&lt;br /&gt;
		return routeStates.unknown&lt;br /&gt;
	elseif established == &amp;#039;proposed&amp;#039; then -- If the &amp;quot;established date&amp;quot; is the string &amp;#039;proposed&amp;#039;, then it must be a future route.&lt;br /&gt;
		return routeStates.future&lt;br /&gt;
	else -- If none of the first three conditions are true, then it must be a current route.&lt;br /&gt;
		return routeStates.current&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function dtsYearCore(date, circa)&lt;br /&gt;
	-- A limited replacement for {{dts}}. This is passed a date and derives a sort key from it. It returns a string with the hidden sort key, along with the year of the original date.&lt;br /&gt;
	if not date then return false end -- If the date is an empty string, stop and go back to whence it came.&lt;br /&gt;
	local year = lang:formatDate(&amp;#039;Y&amp;#039;, date) -- This invocation of lang:formatDate returns just the year.&lt;br /&gt;
	if year == date then -- If the provided date is just the year:&lt;br /&gt;
		date = date .. &amp;quot;-01-01&amp;quot; -- Tack on January 1 for the sort key to work right.&lt;br /&gt;
	end&lt;br /&gt;
	local month = lang:formatDate(&amp;#039;m&amp;#039;, date) -- Stores the month of the date.&lt;br /&gt;
	local day = lang:formatDate(&amp;#039;d&amp;#039;, date) -- Stores the day for this date.&lt;br /&gt;
	local dtsStr = string.format(&amp;quot;%05d-%02d-%02d&amp;quot;, year, month, day) -- Create and store the formatted hidden sort key. The year must be five digits, per convention.&lt;br /&gt;
	local spanParams = {style = &amp;quot;display:none; speak:none&amp;quot;} -- These CSS properties hide the sort key from normal view.&lt;br /&gt;
	local dtsSpan = mw.text.tag({name=&amp;#039;span&amp;#039;, content=dtsStr, attrs=spanParams}) -- This generates the HTML code necessary for the hidden sort key.&lt;br /&gt;
	if circa == &amp;#039;yes&amp;#039; then -- If the date is tagged as circa,&lt;br /&gt;
		return dtsSpan .. &amp;quot;&amp;lt;abbr title=\&amp;quot;circa\&amp;quot;&amp;gt;c.&amp;lt;/abbr&amp;gt;&amp;lt;span style=\&amp;quot;white-space:nowrap;\&amp;quot;&amp;gt;&amp;amp;thinsp;&amp;quot; .. year .. &amp;quot;&amp;lt;/span&amp;gt;&amp;quot; -- Add the circa abbreviation to the display. Derived from {{circa}}&lt;br /&gt;
	else -- Otherwise,&lt;br /&gt;
		return dtsSpan .. year -- Return the hidden sort key concatenated with the year for this date.&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function dtsYear(date, circa)&lt;br /&gt;
	local success, result = pcall(dtsYearCore, date, circa)&lt;br /&gt;
	if success then&lt;br /&gt;
		return result&lt;br /&gt;
	else&lt;br /&gt;
		return string.format(&amp;#039;%s&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;Error: Invalid date &amp;quot;%s&amp;quot;.&amp;lt;/span&amp;gt;&amp;#039;, circa and &amp;#039;&amp;lt;abbr title=&amp;quot;circa&amp;quot;&amp;gt;c.&amp;lt;/abbr&amp;gt;&amp;amp;thinsp;&amp;#039; or &amp;#039;&amp;#039;, date)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function removed(routeState, decommissioned, circa)&lt;br /&gt;
	-- This function returns the proper value for the removed column.&lt;br /&gt;
	return routeState.removed or dtsYear(decommissioned, circa) -- Returns the removed attribute of the provided routeState table or, if empty, the dtsYear-formatted decommissioned date.&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function formed(routeState, established, circa)&lt;br /&gt;
	-- This function returns the proper value for the formed column.&lt;br /&gt;
	return routeState.established or dtsYear(established, circa) or &amp;quot;—&amp;quot; -- Returns &amp;#039;proposed&amp;#039; if the route is proposed, the dtsYear-formatted established date if one was provided, or an em-dash.&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function sortkey(args)&lt;br /&gt;
	-- This function return the sort key for the route (not to be confused with the previous function, which generates a sort key for the established and decommissioned dates.)&lt;br /&gt;
	local key = args.sortkey&lt;br /&gt;
	local type = args.type&lt;br /&gt;
	local route = args.route or &amp;#039;&amp;#039;&lt;br /&gt;
	if key then -- If a sort key already exists:&lt;br /&gt;
		return key -- Simply return it.&lt;br /&gt;
	else -- Otherwise:&lt;br /&gt;
		local routeKey&lt;br /&gt;
		local routeNum = tonumber(route)&lt;br /&gt;
		if routeNum then&lt;br /&gt;
			routeKey = string.format(&amp;#039;%04d&amp;#039;, route) -- This invocation is equivalent to the {{0000expr}} template. It zero-pads the given route number up to 4 digits.&lt;br /&gt;
		else&lt;br /&gt;
			local num, suffix = string.match(route, &amp;quot;(%d*)(.+)&amp;quot;)&lt;br /&gt;
			routeKey = (tonumber(num) and string.format(&amp;#039;%04d&amp;#039;, num) or &amp;#039;&amp;#039;) .. suffix&lt;br /&gt;
		end&lt;br /&gt;
		return type .. routeKey -- Return the sort key for this route, composed of the type and zero-padded route number.&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function termini(args)&lt;br /&gt;
	-- This function determines if this is a beltway or not, and displays the termini columns appropriately.&lt;br /&gt;
	local beltway = args[&amp;quot;beltway&amp;quot;] -- Text in this parameter will span both termini columns.&lt;br /&gt;
	local terminus_a = args[&amp;quot;terminus_a&amp;quot;] or &amp;#039;—&amp;#039; -- Southern or western terminus&lt;br /&gt;
	local terminus_b = args[&amp;quot;terminus_b&amp;quot;] or &amp;#039;—&amp;#039; -- Northern or eastern terminus&lt;br /&gt;
	&lt;br /&gt;
	if beltway then&lt;br /&gt;
		return &amp;quot;|colspan=2 align=center|&amp;quot; .. beltway -- This text will, again, span both columns.&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;#039;|&amp;#039; .. terminus_a .. &amp;#039;||&amp;#039; .. terminus_b -- Fill in the termini columns&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function dates(established, decommissioned, routeState, args)&lt;br /&gt;
	-- This function displays the date columns.&lt;br /&gt;
	local established_ref = args.established_ref or &amp;#039;&amp;#039; -- Reference for date established&lt;br /&gt;
	local decommissioned_ref = args.decommissioned_ref or &amp;#039;&amp;#039; -- Reference for date decommissioned&lt;br /&gt;
	return &amp;quot;|align=center|&amp;quot; .. formed(routeState, established, args.circa_established) ..&lt;br /&gt;
	       established_ref .. &amp;quot;||align=center|&amp;quot; .. removed(routeState, decommissioned, args.circa_decommissioned) ..&lt;br /&gt;
	       decommissioned_ref&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Return output for the length columns for a given route, with the appropriate conversions.&lt;br /&gt;
local function length(args)&lt;br /&gt;
	local km = args[&amp;quot;length_km&amp;quot;] or &amp;#039;&amp;#039; -- Length in kilometers&lt;br /&gt;
    local mi = args[&amp;quot;length_mi&amp;quot;] or &amp;#039;&amp;#039; -- Length in miles&lt;br /&gt;
    local ref = args[&amp;quot;length_ref&amp;quot; ] or &amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    if mi == &amp;#039;&amp;#039; and km == &amp;#039;&amp;#039; then&lt;br /&gt;
        return format(&amp;quot;|align=right|—||align=right|—&amp;quot;)&lt;br /&gt;
	elseif mi ~= &amp;#039;0&amp;#039; and km == &amp;#039;&amp;#039; then&lt;br /&gt;
		return format(&amp;quot;|align=right|&amp;quot;) .. mi .. ref .. format(&amp;quot;||align=right|&amp;quot;) .. frame:expandTemplate{ title = &amp;#039;convert&amp;#039;, args = { mi, &amp;quot;mi&amp;quot;, &amp;quot;km&amp;quot;, disp = &amp;quot;output number only&amp;quot;}}&lt;br /&gt;
	else&lt;br /&gt;
		return format(&amp;quot;|align=right|&amp;quot;) .. km .. ref .. format(&amp;quot;||align=right|&amp;quot;) .. frame:expandTemplate{ title = &amp;#039;convert&amp;#039;, args = { km, &amp;quot;km&amp;quot;, &amp;quot;mi&amp;quot;, disp = &amp;quot;output number only&amp;quot;}}&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function localname(args)&lt;br /&gt;
	-- This function generates a &amp;quot;Local names&amp;quot; cell if necessary&lt;br /&gt;
	local enabled = args[1] or &amp;#039;&amp;#039;&lt;br /&gt;
	local localName = args[&amp;quot;local&amp;quot;] or &amp;#039;&amp;#039;&lt;br /&gt;
	if mw.text.trim(enabled) == &amp;quot;local&amp;quot; then&lt;br /&gt;
		return &amp;quot;|&amp;quot; .. localName&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function notes(notes)&lt;br /&gt;
	-- This function generates a &amp;quot;Notes&amp;quot; cell if necessary.&lt;br /&gt;
	if notes == &amp;#039;none&amp;#039; then&lt;br /&gt;
		return &amp;#039;| &amp;#039; --create empty cell&lt;br /&gt;
	elseif notes then&lt;br /&gt;
		return &amp;#039;|&amp;#039; .. notes --display notes in cell&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;#039;&amp;#039; --create no cell&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function gap(args)&lt;br /&gt;
	local text = args.text or &amp;quot;&amp;#039;&amp;#039;Number not designated&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	if notes then&lt;br /&gt;
		return &amp;#039;|align=center colspan=7|&amp;#039; .. text --display notes in cell&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;#039;|align=center colspan=6|&amp;#039; .. text --display notes in cell&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function route(args)&lt;br /&gt;
	-- This function displays the shield and link.&lt;br /&gt;
	local format = mw.ustring.format	&lt;br /&gt;
	local parserModule = require &amp;quot;Module:Road data/parser&amp;quot;&lt;br /&gt;
	local parser = parserModule.parser&lt;br /&gt;
	&lt;br /&gt;
	local noshield = args.noshield&lt;br /&gt;
	local bannerFile = parser(args, &amp;#039;banner&amp;#039;)&lt;br /&gt;
	local banner&lt;br /&gt;
	if not noshield and bannerFile and bannerFile ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		local widthCode = parser(args, &amp;#039;width&amp;#039;) or &amp;#039;square&amp;#039;&lt;br /&gt;
		if widthCode == &amp;#039;square&amp;#039; then&lt;br /&gt;
			banner = format(&amp;quot;[[File:%s|25px|link=|alt=]]&amp;quot;, bannerFile)&lt;br /&gt;
		elseif widthCode == &amp;#039;expand&amp;#039; then&lt;br /&gt;
			local route = args.route&lt;br /&gt;
			if #route &amp;gt;= 3 then&lt;br /&gt;
				banner = format(&amp;quot;[[File:No image.svg|3px|link=|alt=]][[File:%s|25px|link=|alt=]][[File:No image.svg|3px|link=|alt=]]&amp;quot;, bannerFile)&lt;br /&gt;
			else&lt;br /&gt;
				banner = format(&amp;quot;[[File:%s|25px|link=|alt=]]&amp;quot;, bannerFile)&lt;br /&gt;
			end&lt;br /&gt;
		elseif widthCode == &amp;#039;wide&amp;#039; then&lt;br /&gt;
			banner = format(&amp;quot;[[File:No image.svg|3px|link=|alt=]][[File:%s|25px|link=|alt=]][[File:No image.svg|3px|link=|alt=]]&amp;quot;, bannerFile)&lt;br /&gt;
		elseif widthCode == &amp;#039;MOSupp&amp;#039; then&lt;br /&gt;
			local route = args.route&lt;br /&gt;
			if #route &amp;gt;= 2 then&lt;br /&gt;
				banner = format(&amp;quot;[[File:No image.svg|3px|link=|alt=]][[File:%s|25px|link=|alt=]][[File:No image.svg|3px|link=|alt=]]&amp;quot;, bannerFile)&lt;br /&gt;
			else&lt;br /&gt;
				banner = format(&amp;quot;[[File:%s|25px|link=|alt=]]&amp;quot;, bannerFile)&lt;br /&gt;
			end&lt;br /&gt;
		elseif widthCode == &amp;#039;US1926&amp;#039; then&lt;br /&gt;
			banner = format(&amp;quot;[[File:%s|25px|link=|alt=]][[File:No image.svg|1px|link=|alt=]]&amp;quot;, bannerFile)&lt;br /&gt;
		elseif args.state == &amp;#039;CA&amp;#039; then&lt;br /&gt;
			local route = args.route&lt;br /&gt;
			local type = args.type&lt;br /&gt;
			if type == &amp;#039;US-Bus&amp;#039; then&lt;br /&gt;
				if #route &amp;gt;= 3 then&lt;br /&gt;
					banner = format(&amp;quot;[[File:No image.svg|2px|link=|alt=]][[File:%s|25px|link=|alt=]][[File:No image.svg|2px|link=|alt=]]&amp;quot;, bannerFile)&lt;br /&gt;
				else&lt;br /&gt;
					banner = format(&amp;quot;[[File:%s|25px|link=|alt=]]&amp;quot;, bannerFile)&lt;br /&gt;
				end&lt;br /&gt;
			elseif type == &amp;#039;CA-Bus&amp;#039; or type == &amp;#039;SR-Bus&amp;#039; then&lt;br /&gt;
				if #route &amp;gt;= 3 then&lt;br /&gt;
					banner = format(&amp;quot;[[File:No image.svg|1px|link=|alt=]][[File:%s|25px|link=|alt=]][[File:No image.svg|2px|link=|alt=]]&amp;quot;, bannerFile)&lt;br /&gt;
				else&lt;br /&gt;
					banner = format(&amp;quot;[[File:%s|24px|link=|alt=]]&amp;quot;, bannerFile)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		banner = banner .. &amp;#039;&amp;lt;br&amp;gt;&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		banner = &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local shield&lt;br /&gt;
	if not noshield then&lt;br /&gt;
		local shieldFile, second = parser(args, &amp;#039;shieldlist&amp;#039;) or parser(args, &amp;#039;shield&amp;#039;) or &amp;#039;&amp;#039;&lt;br /&gt;
		if shieldFile == nil or shieldFile == &amp;#039;&amp;#039; then&lt;br /&gt;
			shield = &amp;#039;&amp;#039;&lt;br /&gt;
		elseif type(shieldFile) == &amp;#039;table&amp;#039; then&lt;br /&gt;
			shieldFile, second = shieldFile[1], shieldFile[2]&lt;br /&gt;
		end&lt;br /&gt;
		if second and type(second) == &amp;#039;string&amp;#039; then&lt;br /&gt;
			local shield1 = format(&amp;quot;[[File:%s|x25px|alt=|link=]]&amp;quot;, shieldFile)&lt;br /&gt;
			local shield2 = format(&amp;quot;[[File:%s|x25px|alt=|link=]]&amp;quot;, second)&lt;br /&gt;
			shield = shield1 .. shield2&lt;br /&gt;
		elseif shield == &amp;#039;&amp;#039; then&lt;br /&gt;
			shield = &amp;#039;&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
			shield = shieldFile and format(&amp;quot;[[File:%s|x25px|alt=|link=]]&amp;quot;, shieldFile) or &amp;#039;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		shield = &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local linkTarget = (not args.nolink) and parser(args, &amp;#039;link&amp;#039;)&lt;br /&gt;
	local abbr = parser(args, &amp;#039;abbr&amp;#039;)&lt;br /&gt;
	local link&lt;br /&gt;
	if linkTarget then&lt;br /&gt;
		link = format(&amp;quot;[[%s|%s]]&amp;quot;, linkTarget, abbr)&lt;br /&gt;
	else&lt;br /&gt;
		link = abbr&lt;br /&gt;
	end&lt;br /&gt;
	if not link then error(&amp;quot;Type not in database: &amp;quot; .. args.type) end&lt;br /&gt;
	local sortkey = sortkey(args)&lt;br /&gt;
	local sortedLink = format(&amp;quot;&amp;lt;span data-sort-value=\&amp;quot;%s&amp;amp;#32;!\&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;&amp;quot;, sortkey, link)&lt;br /&gt;
	local route = banner .. shield .. &amp;#039; &amp;#039; .. sortedLink&lt;br /&gt;
	return &amp;#039;!scope=&amp;quot;row&amp;quot; class=&amp;quot;nowrap&amp;quot;|&amp;#039; .. route&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.row(frame)&lt;br /&gt;
	local args = getArgs(frame) -- Gather passed arguments into easy-to-use table&lt;br /&gt;
	&lt;br /&gt;
	local established = args.established&lt;br /&gt;
	local decommissioned = args.decommissioned&lt;br /&gt;
	local routeState = getRouteState(established, decommissioned)&lt;br /&gt;
	local anchor = args.anchor or sortkey(args)&lt;br /&gt;
	local rowdef = routeState.row .. string.format(&amp;#039; id=&amp;quot;%s&amp;quot;&amp;#039;, anchor)&lt;br /&gt;
	local route = route(args)&lt;br /&gt;
	local length = length(args)&lt;br /&gt;
	local termini = termini(args)&lt;br /&gt;
	local localname = localname(args)&lt;br /&gt;
	local dates = dates(established, decommissioned, routeState, args)&lt;br /&gt;
	local notesArg = args.notes&lt;br /&gt;
	local notes = notes(notesArg)&lt;br /&gt;
	&lt;br /&gt;
	local row = {rowdef, route, length, termini, localname, dates, notes}&lt;br /&gt;
	return table.concat(row, &amp;#039;\n&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.gap(frame)&lt;br /&gt;
	local args = getArgs(frame) -- Gather passed arguments into easy-to-use table&lt;br /&gt;
&lt;br /&gt;
	local routeState = getRouteState(established, decommissioned)&lt;br /&gt;
	local anchor = args.anchor or sortkey(args)&lt;br /&gt;
	local rowdef = routeState.row .. string.format(&amp;#039; id=&amp;quot;%s&amp;quot;&amp;#039;, anchor)&lt;br /&gt;
	local route = route(args)&lt;br /&gt;
	local gap = gap(args)&lt;br /&gt;
	&lt;br /&gt;
	local row = {rowdef, route, gap}&lt;br /&gt;
	return table.concat(row, &amp;#039;\n&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Fredddie</name></author>
	</entry>
</feed>