<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.agency/index.php?action=history&amp;feed=atom&amp;title=Module%3AAdjacent_stations</id>
		<title>Module:Adjacent stations - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.agency/index.php?action=history&amp;feed=atom&amp;title=Module%3AAdjacent_stations"/>
		<link rel="alternate" type="text/html" href="https://wiki.agency/index.php?title=Module:Adjacent_stations&amp;action=history"/>
		<updated>2026-04-29T00:51:09Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.30.1</generator>

	<entry>
		<id>https://wiki.agency/index.php?title=Module:Adjacent_stations&amp;diff=740&amp;oldid=prev</id>
		<title>Admin: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://wiki.agency/index.php?title=Module:Adjacent_stations&amp;diff=740&amp;oldid=prev"/>
				<updated>2018-10-24T22:41:02Z</updated>
		
		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 22:41, 24 October 2018&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>https://wiki.agency/index.php?title=Module:Adjacent_stations&amp;diff=739&amp;oldid=prev</id>
		<title>Szqecs at 15:52, 23 August 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki.agency/index.php?title=Module:Adjacent_stations&amp;diff=739&amp;oldid=prev"/>
				<updated>2018-08-23T15:52:26Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require(&amp;#039;Module:No globals&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local lang = &amp;#039;en-GB&amp;#039; -- local default language&lt;br /&gt;
&lt;br /&gt;
--	Below these comments: Internationalization table&lt;br /&gt;
--	How to translate this module (for languages without variants):&lt;br /&gt;
--	• Characters inside single and double quotation marks are called strings.&lt;br /&gt;
--	  The strings in this i18n table are used as output.&lt;br /&gt;
--	• Strings within square brackets are keys.&lt;br /&gt;
--	• Strings are concatenated (joined) with two dots.&lt;br /&gt;
--	• Set the string after «local lang =» to your language&amp;#039;s code.&lt;br /&gt;
--	  Change the first key after &amp;quot;i18n&amp;quot; (usually &amp;quot;en-GB&amp;quot;) to the same thing.&lt;br /&gt;
--	• For each string which is not inside a function, translate it directly.&lt;br /&gt;
--	• Strings with keys named &amp;quot;format&amp;quot; are Lua regular expressions.&lt;br /&gt;
--	  «()» is a match; «.+» means all characters; «%s+» means all spaces.&lt;br /&gt;
--	• For each string which is concatenated to the variable «var»,&lt;br /&gt;
--	  translate the phrase assuming that «var» will be a noun.&lt;br /&gt;
--	• Remove any unnecessary translations.&lt;br /&gt;
&lt;br /&gt;
local i18n = {&lt;br /&gt;
	[&amp;#039;en-GB&amp;#039;] = {&lt;br /&gt;
--		[&amp;#039;word_space&amp;#039;] = &amp;#039; &amp;#039;,&lt;br /&gt;
		[&amp;#039;preceding&amp;#039;] = function(var)&lt;br /&gt;
			return &amp;#039;Preceding &amp;#039; .. var&lt;br /&gt;
		end,&lt;br /&gt;
		[&amp;#039;following&amp;#039;] = function(var)&lt;br /&gt;
			return &amp;#039;Following &amp;#039; .. var&lt;br /&gt;
		end,&lt;br /&gt;
		[&amp;#039;stop_noun&amp;#039;] = &amp;#039;station&amp;#039;,&lt;br /&gt;
		[&amp;#039;nonstop_past&amp;#039;] = function(var)&lt;br /&gt;
			return var .. &amp;#039; did not stop here&amp;#039;&lt;br /&gt;
		end,&lt;br /&gt;
		[&amp;#039;nonstop_present&amp;#039;] = function(var)&lt;br /&gt;
			return var .. &amp;#039; does not stop here&amp;#039;&lt;br /&gt;
		end,&lt;br /&gt;
		[&amp;#039;comma&amp;#039;] = function(var)&lt;br /&gt;
			return &amp;#039;, &amp;#039; .. var&lt;br /&gt;
		end,&lt;br /&gt;
		[&amp;#039;or&amp;#039;] = function(var)&lt;br /&gt;
			return &amp;#039; or &amp;#039; .. var&lt;br /&gt;
		end,&lt;br /&gt;
		[&amp;#039;via-first&amp;#039;] = false, -- If the «via» text comes before termini, change to «true»&lt;br /&gt;
		[&amp;#039;via&amp;#039;] = function(var)&lt;br /&gt;
			return &amp;#039; via&amp;amp;nbsp;&amp;#039; .. var&lt;br /&gt;
		end,&lt;br /&gt;
		[&amp;#039;comma-format&amp;#039;] = &amp;#039;,%s+&amp;#039;,&lt;br /&gt;
		[&amp;#039;or-format&amp;#039;] = &amp;#039;%s+or%s+&amp;#039;,&lt;br /&gt;
		[&amp;#039;via-format&amp;#039;] = &amp;#039;%s+via%s+(.+)$&amp;#039;, -- first match is station name&lt;br /&gt;
		[&amp;#039;towards&amp;#039;] = function(var)&lt;br /&gt;
			return &amp;#039;towards &amp;#039; .. var&lt;br /&gt;
		end,&lt;br /&gt;
		[&amp;#039;through&amp;#039;] = function(var)&lt;br /&gt;
			return &amp;#039;through to &amp;#039; .. var&lt;br /&gt;
		end,&lt;br /&gt;
		[&amp;#039;reverse&amp;#039;] = &amp;#039;Reverses direction&amp;#039;,&lt;br /&gt;
		[&amp;#039;oneway&amp;#039;] = &amp;#039;One-way operation&amp;#039;,&lt;br /&gt;
		[&amp;#039;terminus&amp;#039;] = &amp;#039;Terminus&amp;#039;,&lt;br /&gt;
		[&amp;#039;error_duplicate&amp;#039;] = function(var)&lt;br /&gt;
			return &amp;#039;Same row number used multiple times for &amp;#039; .. var&lt;br /&gt;
		end,&lt;br /&gt;
		[&amp;#039;error_format&amp;#039;] = &amp;#039;Station format table missing in data page&amp;#039;,&lt;br /&gt;
		[&amp;#039;error_line&amp;#039;] = &amp;#039;Lines table missing in data module&amp;#039;,&lt;br /&gt;
		[&amp;#039;error_missing&amp;#039;] = function(var)&lt;br /&gt;
			return &amp;#039;&amp;quot;&amp;#039; .. (var or &amp;#039;&amp;#039;) .. &amp;#039;&amp;quot; is missing from the data page&amp;#039;&lt;br /&gt;
		end,&lt;br /&gt;
		[&amp;#039;error_unknown&amp;#039;] = function(var)&lt;br /&gt;
			return &amp;#039;Unknown system or line &amp;quot;&amp;#039; .. (var or &amp;#039;&amp;#039;) .. &amp;#039;&amp;quot;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	},&lt;br /&gt;
	[&amp;#039;en-US&amp;#039;] = {&lt;br /&gt;
--		[&amp;#039;word_space&amp;#039;] = &amp;#039; &amp;#039;,&lt;br /&gt;
		[&amp;#039;preceding&amp;#039;] = function(var)&lt;br /&gt;
			return &amp;#039;Preceding &amp;#039; .. var&lt;br /&gt;
		end,&lt;br /&gt;
		[&amp;#039;following&amp;#039;] = function(var)&lt;br /&gt;
			return &amp;#039;Following &amp;#039; .. var&lt;br /&gt;
		end,&lt;br /&gt;
		[&amp;#039;stop_noun&amp;#039;] = &amp;#039;station&amp;#039;,&lt;br /&gt;
		[&amp;#039;nonstop_past&amp;#039;] = function(var)&lt;br /&gt;
			return var .. &amp;#039; did not stop here&amp;#039;&lt;br /&gt;
		end,&lt;br /&gt;
		[&amp;#039;nonstop_present&amp;#039;] = function(var)&lt;br /&gt;
			return var .. &amp;#039; does not stop here&amp;#039;&lt;br /&gt;
		end,&lt;br /&gt;
		[&amp;#039;comma&amp;#039;] = function(var)&lt;br /&gt;
			return &amp;#039;, &amp;#039; .. var&lt;br /&gt;
		end,&lt;br /&gt;
		[&amp;#039;or&amp;#039;] = function(var)&lt;br /&gt;
			return &amp;#039; or &amp;#039; .. var&lt;br /&gt;
		end,&lt;br /&gt;
		[&amp;#039;via-first&amp;#039;] = false, -- If the «via» text comes before termini, change to «true»&lt;br /&gt;
		[&amp;#039;via&amp;#039;] = function(var)&lt;br /&gt;
			return &amp;#039; via&amp;amp;nbsp;&amp;#039; .. var&lt;br /&gt;
		end,&lt;br /&gt;
		[&amp;#039;comma-format&amp;#039;] = &amp;#039;,%s+&amp;#039;,&lt;br /&gt;
		[&amp;#039;or-format&amp;#039;] = &amp;#039;%s+or%s+&amp;#039;,&lt;br /&gt;
		[&amp;#039;via-format&amp;#039;] = &amp;#039;%s+via%s+(.+)$&amp;#039;, -- first match is station name&lt;br /&gt;
		[&amp;#039;towards&amp;#039;] = function(var)&lt;br /&gt;
			return &amp;#039;toward &amp;#039; .. var&lt;br /&gt;
		end,&lt;br /&gt;
		[&amp;#039;through&amp;#039;] = function(var)&lt;br /&gt;
			return &amp;#039;through to &amp;#039; .. var&lt;br /&gt;
		end,&lt;br /&gt;
		[&amp;#039;reverse&amp;#039;] = &amp;#039;Reverses direction&amp;#039;,&lt;br /&gt;
		[&amp;#039;oneway&amp;#039;] = &amp;#039;One-way operation&amp;#039;,&lt;br /&gt;
		[&amp;#039;terminus&amp;#039;] = &amp;#039;Terminus&amp;#039;,&lt;br /&gt;
		[&amp;#039;error_duplicate&amp;#039;] = function(var)&lt;br /&gt;
			return &amp;#039;Same row number used multiple times for &amp;#039; .. var&lt;br /&gt;
		end,&lt;br /&gt;
		[&amp;#039;error_format&amp;#039;] = &amp;#039;Station format table missing in data module&amp;#039;,&lt;br /&gt;
		[&amp;#039;error_line&amp;#039;] = &amp;#039;Lines table missing in data module&amp;#039;,&lt;br /&gt;
		[&amp;#039;error_missing&amp;#039;] = function(var)&lt;br /&gt;
			return &amp;#039;&amp;quot;&amp;#039; .. (var or &amp;#039;&amp;#039;) .. &amp;#039;&amp;quot; is missing from the data page&amp;#039;&lt;br /&gt;
		end,&lt;br /&gt;
		[&amp;#039;error_unknown&amp;#039;] = function(var)&lt;br /&gt;
			return &amp;#039;Unknown system or line &amp;quot;&amp;#039; .. (var or &amp;#039;&amp;#039;) .. &amp;#039;&amp;quot;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local require = require&lt;br /&gt;
&lt;br /&gt;
local function getData(system, verify)&lt;br /&gt;
	if verify then&lt;br /&gt;
		local title = mw.title.new(&amp;#039;Module:Adjacent stations/&amp;#039; .. system -- .. &amp;#039;/sandbox&amp;#039;&lt;br /&gt;
			)&lt;br /&gt;
		if not (title and title.exists) then return nil end&lt;br /&gt;
	end&lt;br /&gt;
	return require(&amp;#039;Module:Adjacent stations/&amp;#039; .. system -- .. &amp;#039;/sandbox&amp;#039;&lt;br /&gt;
		)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local lower = mw.ustring.lower&lt;br /&gt;
local gsub = mw.ustring.gsub&lt;br /&gt;
&lt;br /&gt;
local function getLine(data, _line)&lt;br /&gt;
	if _line then&lt;br /&gt;
		if data[&amp;#039;aliases&amp;#039;] then&lt;br /&gt;
			_line = data[&amp;#039;aliases&amp;#039;][lower(_line)] or _line&lt;br /&gt;
		end&lt;br /&gt;
		local default = data[&amp;#039;lines&amp;#039;][&amp;#039;_default&amp;#039;] or {}&lt;br /&gt;
		local line = data[&amp;#039;lines&amp;#039;][_line] or {}&lt;br /&gt;
		for k, v in pairs(default) do&lt;br /&gt;
			if v then line[k] = line[k] or v end&lt;br /&gt;
		end&lt;br /&gt;
		line[&amp;#039;title&amp;#039;] = line[&amp;#039;title&amp;#039;] and gsub(line[&amp;#039;title&amp;#039;], &amp;#039;%%1&amp;#039;, _line)&lt;br /&gt;
		return line, _line&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getColor(data, system, line, Type, frame)&lt;br /&gt;
	if system then&lt;br /&gt;
		if line then return frame:expandTemplate{ title = system .. &amp;#039; color&amp;#039;, args = {line, [&amp;#039;branch&amp;#039;] = Type} } end&lt;br /&gt;
		return frame:expandTemplate{ title = system .. &amp;#039; color&amp;#039; }&lt;br /&gt;
	else&lt;br /&gt;
		line = (getLine(data, line))&lt;br /&gt;
		local default = data[&amp;#039;lines&amp;#039;][&amp;#039;_default&amp;#039;]&lt;br /&gt;
		if line or default then&lt;br /&gt;
			default = default or {}&lt;br /&gt;
			if not line then line = mw.clone(default) end&lt;br /&gt;
			local color = line[&amp;#039;color&amp;#039;] or line[&amp;#039;background color&amp;#039;] or default[&amp;#039;color&amp;#039;] or default[&amp;#039;background color&amp;#039;] or data[&amp;#039;system color&amp;#039;]&lt;br /&gt;
			local Type_value = Type and line[&amp;#039;types&amp;#039;] and (line[&amp;#039;types&amp;#039;][Type] and line[&amp;#039;types&amp;#039;][Type][&amp;#039;color&amp;#039;])&lt;br /&gt;
			if Type_value then color = Type_value end&lt;br /&gt;
			return color&lt;br /&gt;
		end&lt;br /&gt;
		return (default and (default[&amp;#039;color&amp;#039;] or default[&amp;#039;background color&amp;#039;]) or data[&amp;#039;system color&amp;#039;] or &amp;#039;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local match = mw.ustring.match&lt;br /&gt;
local concat = table.concat&lt;br /&gt;
local _line, _Type&lt;br /&gt;
&lt;br /&gt;
local function getStation(station, _Format)&lt;br /&gt;
	if type(_Format) == &amp;#039;table&amp;#039; then&lt;br /&gt;
		_Format = _Format[_line] or _Format[1]&lt;br /&gt;
		if type(_Format) == &amp;#039;table&amp;#039; then&lt;br /&gt;
			_Format = _Format[_Type] or _Format[1]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if _Type then _Format = gsub(_Format, &amp;#039;%%3&amp;#039;, _Type) end&lt;br /&gt;
	if _line then _Format = gsub(_Format, &amp;#039;%%2&amp;#039;, _line) end&lt;br /&gt;
	return (match(_Format, &amp;#039;%[%[.+%]%]&amp;#039;)) and (gsub(_Format, &amp;#039;%%1&amp;#039;, station)) or concat({&amp;#039;[[&amp;#039;, gsub(_Format, &amp;#039;%%1&amp;#039;, station), &amp;#039;|&amp;#039;, station, &amp;#039;]]&amp;#039;})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(_args) -- Arguments are processed here instead of the main function&lt;br /&gt;
	local insert = table.insert&lt;br /&gt;
	local lower = mw.ustring.lower&lt;br /&gt;
&lt;br /&gt;
	local yesno = require(&amp;#039;Module:Yesno&amp;#039;)&lt;br /&gt;
	local boolean = {&lt;br /&gt;
		[&amp;#039;oneway-left&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;oneway-right&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;reverse&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;reverse-left&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;reverse-right&amp;#039;] = true&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local args = {} -- Processed arguments&lt;br /&gt;
	local index = {} -- A list of addresses corresponding to number suffixes in the arguments&lt;br /&gt;
&lt;br /&gt;
	for k, v in pairs(_args) do -- Maps each raw argument to processed arguments by string matching&lt;br /&gt;
		_args[k] = v:match(&amp;#039;^%s*(.-)%s*$&amp;#039;)&lt;br /&gt;
		if _args[k] and _args[k] ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			local a = match(k, &amp;#039;^(.*%D)%d+$&amp;#039;) or k -- The parameter; address 1 can be omitted&lt;br /&gt;
			local b = tonumber(match(k, &amp;#039;^.*%D(%d+)$&amp;#039;)) or 1 -- The address for a given argument; address 1 can be omitted&lt;br /&gt;
&lt;br /&gt;
			if boolean[a] then&lt;br /&gt;
				v = yesno(v)&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if not args[b] then&lt;br /&gt;
				args[b] = {[a] = v}&lt;br /&gt;
				insert(index, b)&lt;br /&gt;
			elseif args[b][a] then&lt;br /&gt;
				return error(i18n[lang][&amp;#039;error_duplicate&amp;#039;](a .. b))&lt;br /&gt;
			else&lt;br /&gt;
				args[b][a] = v&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(index)&lt;br /&gt;
&lt;br /&gt;
	local function small(s, italic)&lt;br /&gt;
		return italic and &amp;#039;&amp;lt;div class=&amp;quot;isA&amp;quot;&amp;gt;&amp;#039; .. s .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
			or &amp;#039;&amp;lt;div class=&amp;quot;smA&amp;quot;&amp;gt;&amp;#039; .. s .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local style = { -- Style for each cell type&lt;br /&gt;
		[&amp;#039;header cell&amp;#039;] = &amp;#039;class=&amp;quot;hcA&amp;quot;|&amp;#039;,&lt;br /&gt;
		[&amp;#039;header midcell&amp;#039;] = &amp;#039;colspan=&amp;quot;3&amp;quot; class=&amp;quot;hmA&amp;quot;|&amp;#039;,&lt;br /&gt;
		[&amp;#039;body cell&amp;#039;] = &amp;#039;class=&amp;quot;bcA&amp;quot;|&amp;#039;,&lt;br /&gt;
		[&amp;#039;body banner&amp;#039;] = &amp;#039;class=&amp;quot;bbA&amp;quot; style=&amp;quot;background-color:#&amp;#039;,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local Format&lt;br /&gt;
	local function subst(var1, var2)&lt;br /&gt;
		-- var1 is the terminus or table of termini; var2 is the key for the table of termini&lt;br /&gt;
		return type(var1) == &amp;#039;string&amp;#039; and getStation(var1, (Format[var1] or Format[1]))&lt;br /&gt;
			or type(var1) == &amp;#039;table&amp;#039; and #var1 &amp;gt; 0 and getStation(var1[var2], (Format[var1[var2]] or Format[1]))&lt;br /&gt;
			or &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function station(var)&lt;br /&gt;
		if Format then&lt;br /&gt;
			if type(var) == &amp;#039;string&amp;#039; then&lt;br /&gt;
				return subst(var)&lt;br /&gt;
			elseif type(var) == &amp;#039;table&amp;#039; and #var &amp;gt; 0 then&lt;br /&gt;
				local t = {subst(var, 1)}&lt;br /&gt;
&lt;br /&gt;
				for i = 2, #var - 1 do&lt;br /&gt;
					t[i] = i18n[lang][&amp;#039;comma&amp;#039;](subst(var, i))&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				if #var &amp;gt; 1 then t[#var] = i18n[lang][&amp;#039;or&amp;#039;](subst(var, #var)) end&lt;br /&gt;
				if var[&amp;#039;via&amp;#039;] then&lt;br /&gt;
					if i18n[lang][&amp;#039;via-first&amp;#039;] then&lt;br /&gt;
						table.insert(t, 1, i18n[lang][&amp;#039;via&amp;#039;](subst(var, &amp;#039;via&amp;#039;)))&lt;br /&gt;
					else&lt;br /&gt;
						table.insert(t, i18n[lang][&amp;#039;via&amp;#039;](subst(var, &amp;#039;via&amp;#039;)))&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				return concat(t)&lt;br /&gt;
			else&lt;br /&gt;
				return &amp;#039;&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			return var or &amp;#039;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function rgb(var)&lt;br /&gt;
		if var:len() == 3 then&lt;br /&gt;
			return {tonumber(var:sub(1, 1), 16) * 17, tonumber(var:sub(2, 2), 16) * 17, tonumber(var:sub(2, 2), 16) * 17}&lt;br /&gt;
		elseif var:len() == 6 then&lt;br /&gt;
			return {tonumber(var:sub(1, 2), 16), tonumber(var:sub(3, 4), 16), tonumber(var:sub(5, 6), 16)}&lt;br /&gt;
		end&lt;br /&gt;
		return {}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local data = {} -- A table of data modules for each address&lt;br /&gt;
	local wikitable = {&amp;#039;{| class=&amp;quot;wikitable adjacent-stations&amp;quot;&amp;#039;}&lt;br /&gt;
&lt;br /&gt;
	for i, v in ipairs(index) do&lt;br /&gt;
		-- If an address has a system argument, indexes the data module&lt;br /&gt;
		data[v] = args[v][&amp;#039;system&amp;#039;] and getData(args[v][&amp;#039;system&amp;#039;])&lt;br /&gt;
		-- If an address has no system, the row uses data from the previous address&lt;br /&gt;
			or data[index[i - 1]]&lt;br /&gt;
			or error(i18n[lang][&amp;#039;error_unknown&amp;#039;](args[v][&amp;#039;system&amp;#039;]))&lt;br /&gt;
&lt;br /&gt;
		local lang = data[v][&amp;#039;lang&amp;#039;] or lang&lt;br /&gt;
&lt;br /&gt;
		if args[v][&amp;#039;system&amp;#039;] then -- Header row&lt;br /&gt;
			local stop_noun = data[v][&amp;#039;header stop noun&amp;#039;] or i18n[lang][&amp;#039;stop_noun&amp;#039;]&lt;br /&gt;
			insert(wikitable, concat({&amp;#039;\n|-&amp;#039;,&lt;br /&gt;
				&amp;#039;\n!&amp;#039;, style[&amp;#039;header cell&amp;#039;], i18n[lang][&amp;#039;preceding&amp;#039;](stop_noun),&lt;br /&gt;
				&amp;#039;\n!&amp;#039;, style[&amp;#039;header midcell&amp;#039;], (data[v][&amp;#039;system icon&amp;#039;] and data[v][&amp;#039;system icon&amp;#039;] .. &amp;#039; &amp;#039; or &amp;#039;&amp;#039;), (data[v][&amp;#039;system title&amp;#039;] or (&amp;#039;[[&amp;#039;.. args[v][&amp;#039;system&amp;#039;] ..&amp;#039;]]&amp;#039;)),&lt;br /&gt;
				&amp;#039;\n!&amp;#039;, style[&amp;#039;header cell&amp;#039;], i18n[lang][&amp;#039;following&amp;#039;](stop_noun)&lt;br /&gt;
			}))&lt;br /&gt;
			insert(wikitable, &amp;#039;&amp;#039;)&lt;br /&gt;
			insert(wikitable, &amp;#039;&amp;#039;)&lt;br /&gt;
			insert(wikitable, &amp;#039;&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if args[v][&amp;#039;header&amp;#039;] then -- Subheader&lt;br /&gt;
			insert(wikitable, &amp;#039;\n|-\n!colspan=&amp;quot;5&amp;quot; class=&amp;quot;hmA&amp;quot;|&amp;#039;.. args[v][&amp;#039;header&amp;#039;])&lt;br /&gt;
			insert(wikitable, &amp;#039;&amp;#039;)&lt;br /&gt;
			insert(wikitable, &amp;#039;&amp;#039;)&lt;br /&gt;
			insert(wikitable, &amp;#039;&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if args[v][&amp;#039;line&amp;#039;] or args[v][&amp;#039;left&amp;#039;] or args[v][&amp;#039;right&amp;#039;] or args[v][&amp;#039;nonstop&amp;#039;] then&lt;br /&gt;
			if not args[v][&amp;#039;line&amp;#039;] and i &amp;gt; 1 and not args[v][&amp;#039;system&amp;#039;] then&lt;br /&gt;
				args[v][&amp;#039;line&amp;#039;] = args[index[i - 1]][&amp;#039;line&amp;#039;]&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			_line = args[v][&amp;#039;line&amp;#039;] or &amp;#039;_default&amp;#039;&lt;br /&gt;
			_Type = args[v][&amp;#039;type&amp;#039;]&lt;br /&gt;
			if data[v][&amp;#039;aliases&amp;#039;] then&lt;br /&gt;
				_line = data[v][&amp;#039;aliases&amp;#039;][lower(_line)] or _line&lt;br /&gt;
				if _Type then _Type = data[v][&amp;#039;aliases&amp;#039;][lower(_Type)] or _Type end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			-- get the line table&lt;br /&gt;
			local line = data[v][&amp;#039;lines&amp;#039;] and (mw.clone(data[v][&amp;#039;lines&amp;#039;][_line]) or error(i18n[lang][&amp;#039;error_unknown&amp;#039;](args[v][&amp;#039;line&amp;#039;]))) or error(i18n[lang][&amp;#039;error_line&amp;#039;])&lt;br /&gt;
			local default = data[v][&amp;#039;lines&amp;#039;][&amp;#039;_default&amp;#039;] or {}&lt;br /&gt;
			line[&amp;#039;title&amp;#039;] = line[&amp;#039;title&amp;#039;] or default[&amp;#039;title&amp;#039;]&lt;br /&gt;
			line[&amp;#039;title&amp;#039;] = gsub(line[&amp;#039;title&amp;#039;], &amp;#039;%%1&amp;#039;, _line)&lt;br /&gt;
&lt;br /&gt;
			-- cell across row for non-stop service&lt;br /&gt;
			if args[v][&amp;#039;nonstop&amp;#039;] then&lt;br /&gt;
				insert(wikitable,&lt;br /&gt;
					concat({&amp;#039;\n|-\n|colspan=&amp;quot;5&amp;quot; &amp;#039;,&lt;br /&gt;
						style[&amp;#039;body cell&amp;#039;],&lt;br /&gt;
						((args[v][&amp;#039;nonstop&amp;#039;] == &amp;#039;former&amp;#039;) and i18n[lang][&amp;#039;nonstop_past&amp;#039;] or i18n[lang][&amp;#039;nonstop_present&amp;#039;])(p._box({data = data[v], line = _line, Type = _Type, inline = &amp;#039;yes&amp;#039;}))&lt;br /&gt;
					})&lt;br /&gt;
				)&lt;br /&gt;
				insert(wikitable, &amp;#039;&amp;#039;)&lt;br /&gt;
				insert(wikitable, &amp;#039;&amp;#039;)&lt;br /&gt;
				insert(wikitable, &amp;#039;&amp;#039;)&lt;br /&gt;
			else&lt;br /&gt;
				Format = data[v][&amp;#039;station format&amp;#039;] or i18n[lang][&amp;#039;error_format&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
				local color, background_color&lt;br /&gt;
				local Type = line[&amp;#039;types&amp;#039;] and line[&amp;#039;types&amp;#039;][_Type] -- get the line type table&lt;br /&gt;
&lt;br /&gt;
				if Type then&lt;br /&gt;
					if Type[&amp;#039;color&amp;#039;] then&lt;br /&gt;
						-- line color is used as background if there is no background color in the line type table&lt;br /&gt;
						background_color = Type[&amp;#039;background color&amp;#039;] or line[&amp;#039;color&amp;#039;]&lt;br /&gt;
						color = Type[&amp;#039;color&amp;#039;]&lt;br /&gt;
					elseif Type[&amp;#039;background color&amp;#039;] then&lt;br /&gt;
						background_color = Type[&amp;#039;background color&amp;#039;]&lt;br /&gt;
						color = line[&amp;#039;color&amp;#039;] or default[&amp;#039;color&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
					else&lt;br /&gt;
						background_color = line[&amp;#039;background color&amp;#039;]&lt;br /&gt;
						color = line[&amp;#039;color&amp;#039;] or default[&amp;#039;color&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					background_color = line[&amp;#039;background color&amp;#039;]&lt;br /&gt;
					color = line[&amp;#039;color&amp;#039;] or default[&amp;#039;color&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				-- Alternate termini can be specified based on type&lt;br /&gt;
				local sideCell = {true, true}&lt;br /&gt;
				for i, b in ipairs({&amp;#039;left&amp;#039;, &amp;#039;right&amp;#039;}) do&lt;br /&gt;
					if not args[v][b] then -- If no station is given on one side, the station is assumed to be the terminus on that side&lt;br /&gt;
						local _through = args[v][&amp;#039;through-&amp;#039; .. b] or args[v][&amp;#039;through&amp;#039;]&lt;br /&gt;
						local _through_data = getLine(data[v], _through)&lt;br /&gt;
						if _through_data then _through = _through_data[&amp;#039;title&amp;#039;] or _through end&lt;br /&gt;
						sideCell[i] = _through and &amp;quot;&amp;#039;&amp;#039;&amp;quot; .. i18n[lang][&amp;#039;through&amp;#039;](_through) .. &amp;quot;&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
							or &amp;quot;&amp;#039;&amp;#039;&amp;quot; .. ((args[v][&amp;#039;reverse-&amp;#039; .. b]&lt;br /&gt;
							or args[v][&amp;#039;reverse&amp;#039;]) and i18n[lang][&amp;#039;reverse&amp;#039;]&lt;br /&gt;
							or i18n[lang][&amp;#039;terminus&amp;#039;]) .. &amp;quot;&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
					else&lt;br /&gt;
						local terminus&lt;br /&gt;
						local _terminus = Type and Type[b .. &amp;#039; terminus&amp;#039;] or line[b .. &amp;#039; terminus&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
						-- If the terminus table has more than one numbered key or has the via key then the table shows only the default termini, since _terminus[2] cannot be used and _terminus[via] is reserved&lt;br /&gt;
						if type(_terminus) == &amp;#039;string&amp;#039; or (type(_terminus) == &amp;#039;table&amp;#039; and (_terminus[2] or _terminus[&amp;#039;via&amp;#039;])) then&lt;br /&gt;
							if args[v][&amp;#039;to-&amp;#039; .. b] then&lt;br /&gt;
								terminus = args[v][&amp;#039;to-&amp;#039; .. b]&lt;br /&gt;
								local _or = match(terminus, i18n[lang][&amp;#039;or-format&amp;#039;])&lt;br /&gt;
								if _or then&lt;br /&gt;
									terminus = gsub(terminus, i18n[lang][&amp;#039;or-format&amp;#039;], &amp;#039;\127_OR_\127&amp;#039;)&lt;br /&gt;
									terminus = gsub(terminus, i18n[lang][&amp;#039;comma-format&amp;#039;], &amp;#039;\127_OR_\127&amp;#039;)&lt;br /&gt;
								end&lt;br /&gt;
								local _via = (match(terminus, i18n[lang][&amp;#039;via-format&amp;#039;]))&lt;br /&gt;
								if _via then&lt;br /&gt;
									terminus = gsub(terminus, i18n[lang][&amp;#039;via-format&amp;#039;], &amp;#039;&amp;#039;)&lt;br /&gt;
									terminus = mw.text.split(terminus, &amp;#039;\127_OR_\127&amp;#039;)&lt;br /&gt;
									terminus[&amp;#039;via&amp;#039;] = _via&lt;br /&gt;
								elseif _or then&lt;br /&gt;
									terminus = mw.text.split(terminus, &amp;#039;\127_OR_\127&amp;#039;)&lt;br /&gt;
								end&lt;br /&gt;
							else&lt;br /&gt;
								terminus = _terminus&lt;br /&gt;
							end&lt;br /&gt;
						elseif type(_terminus) == &amp;#039;table&amp;#039; then&lt;br /&gt;
							terminus = _terminus[args[v][&amp;#039;to-&amp;#039; .. b]] or _terminus[args[v][&amp;#039;to&amp;#039;]] or _terminus[1]&lt;br /&gt;
						end&lt;br /&gt;
&lt;br /&gt;
						local mainText = args[v][&amp;#039;note-&amp;#039; .. b] and station(args[v][b]) .. small(args[v][&amp;#039;note-&amp;#039; .. b]) or station(args[v][b])&lt;br /&gt;
&lt;br /&gt;
						local subText = (args[v][&amp;#039;oneway-&amp;#039; .. b] or line[&amp;#039;oneway-&amp;#039; .. b]) and i18n[lang][&amp;#039;oneway&amp;#039;]&lt;br /&gt;
							or args[v][b] == terminus and i18n[lang][&amp;#039;terminus&amp;#039;]&lt;br /&gt;
							or line[&amp;#039;circular&amp;#039;] and terminus&lt;br /&gt;
							or i18n[lang][&amp;#039;towards&amp;#039;](station(terminus))&lt;br /&gt;
						subText = small(subText, true)&lt;br /&gt;
&lt;br /&gt;
						sideCell[i] = mainText .. subText&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				insert(wikitable, &amp;#039;\n|-&amp;#039;)&lt;br /&gt;
				insert(wikitable, &amp;#039;\n|&amp;#039; .. style[&amp;#039;body cell&amp;#039;] .. sideCell[1])&lt;br /&gt;
				insert(wikitable, concat({&amp;#039;\n|&amp;#039;, style[&amp;#039;body banner&amp;#039;], color, &amp;#039;&amp;quot;|&amp;#039;,&lt;br /&gt;
					&amp;#039;\n|&amp;#039;, (background_color and &amp;#039;class=&amp;quot;bcA&amp;quot; style=&amp;quot;background-color:rgba(&amp;#039; .. concat(rgb(background_color), &amp;#039;,&amp;#039;) .. &amp;#039;,.2)&amp;quot;|&amp;#039; or style[&amp;#039;body cell&amp;#039;]), line[&amp;#039;title&amp;#039;],&lt;br /&gt;
&lt;br /&gt;
					-- Type; table key &amp;#039;types&amp;#039; in subpages (datatype table, with strings as keys). If table does not exist then the input is displayed as the text&lt;br /&gt;
					(_Type and &amp;#039;&amp;lt;div&amp;gt;&amp;#039; .. (Type and Type[&amp;#039;title&amp;#039;] or _Type) .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039; or &amp;#039;&amp;#039;),&lt;br /&gt;
&lt;br /&gt;
					-- Note-mid; table key &amp;#039;note-mid&amp;#039; in subpages. Overridden by user input&lt;br /&gt;
					((args[v][&amp;#039;note-mid&amp;#039;] and small(args[v][&amp;#039;note-mid&amp;#039;])) or (Type and Type[&amp;#039;note-mid&amp;#039;] and small(Type[&amp;#039;note-mid&amp;#039;])) or (line[&amp;#039;note-mid&amp;#039;] and small(line[&amp;#039;note-mid&amp;#039;])) or &amp;#039;&amp;#039;),&lt;br /&gt;
&lt;br /&gt;
					-- Transfer; uses system&amp;#039;s station link table&lt;br /&gt;
					(args[v][&amp;#039;transfer&amp;#039;] and small(&amp;#039;transfer at &amp;#039; .. station(args[v][&amp;#039;transfer&amp;#039;]), true) or &amp;#039;&amp;#039;),&lt;br /&gt;
&lt;br /&gt;
					&amp;#039;\n|&amp;#039;, style[&amp;#039;body banner&amp;#039;], color, &amp;#039;&amp;quot;|&amp;#039;}))&lt;br /&gt;
				insert(wikitable, &amp;#039;\n|&amp;#039; .. style[&amp;#039;body cell&amp;#039;] .. sideCell[2])&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if args[v][&amp;#039;note-row&amp;#039;] then -- Note&lt;br /&gt;
			insert(wikitable, &amp;#039;\n|-\n|colspan=&amp;quot;5&amp;quot; &amp;#039; .. style[&amp;#039;body cell&amp;#039;] .. args[v][&amp;#039;note-row&amp;#039;])&lt;br /&gt;
			insert(wikitable, &amp;#039;&amp;#039;)&lt;br /&gt;
			insert(wikitable, &amp;#039;&amp;#039;)&lt;br /&gt;
			insert(wikitable, &amp;#039;&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function combine(t, n)&lt;br /&gt;
		if t[n + 4] ~= &amp;#039;&amp;#039; and t[n + 4] == t[n] then&lt;br /&gt;
			t[n + 4] = &amp;#039;&amp;#039; -- The cell in the next row is deleted&lt;br /&gt;
			local rowspan = 2&lt;br /&gt;
			while t[n + rowspan * 4] == t[n] do&lt;br /&gt;
				t[n + rowspan * 4] = &amp;#039;&amp;#039;&lt;br /&gt;
				rowspan = rowspan + 1&lt;br /&gt;
			end&lt;br /&gt;
			t[n] = gsub(t[n], &amp;#039;\n|class=&amp;quot;&amp;#039;, &amp;#039;\n|rowspan=&amp;quot;&amp;#039; .. rowspan .. &amp;#039;&amp;quot; class=&amp;quot;&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local M = #wikitable&lt;br /&gt;
	for i = 3, M, 4 do combine(wikitable, i) end&lt;br /&gt;
	for i = 4, M, 4 do combine(wikitable, i) end&lt;br /&gt;
	for i = 5, M, 4 do combine(wikitable, i) end&lt;br /&gt;
&lt;br /&gt;
	insert(wikitable, &amp;#039;\n|}&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	return concat(wikitable)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
&lt;br /&gt;
local function makeInvokeFunction(funcName)&lt;br /&gt;
	-- makes a function that can be returned from #invoke, using&lt;br /&gt;
	-- [[Module:Arguments]]&lt;br /&gt;
	return function (frame)&lt;br /&gt;
		local args = getArgs(frame, {parentOnly = true})&lt;br /&gt;
		return p[funcName](args, frame)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.main = makeInvokeFunction(&amp;#039;_main&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
function p._color(args, frame)&lt;br /&gt;
	local data = args.data&lt;br /&gt;
	if args[1] or data then&lt;br /&gt;
		data = data or getData(args[1], true)&lt;br /&gt;
		if not data then return getColor(nil, args[1], args[2], args[3], frame) end&lt;br /&gt;
		return getColor(data, nil, args[2], args[3])&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.color = makeInvokeFunction(&amp;#039;_color&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
function p._box(args, frame)&lt;br /&gt;
	local system = args[1] or args.system&lt;br /&gt;
	local _line = args[2] or args.line&lt;br /&gt;
	if not (system or _line) then return &amp;#039;&amp;#039; end&lt;br /&gt;
	local line, Type, line_data&lt;br /&gt;
	local inline = args[3] or args.inline&lt;br /&gt;
	local _Type = args.type&lt;br /&gt;
	local data = args.data&lt;br /&gt;
	if system or data then&lt;br /&gt;
		data = data or getData(system, true)&lt;br /&gt;
		local color&lt;br /&gt;
		if data then&lt;br /&gt;
			local default = data[&amp;#039;lines&amp;#039;][&amp;#039;_default&amp;#039;] or {}&lt;br /&gt;
			line, _line = getLine(data, _line)&lt;br /&gt;
			if _Type then&lt;br /&gt;
				_Type = data[&amp;#039;aliases&amp;#039;] and data[&amp;#039;aliases&amp;#039;][lower(_Type)] or _Type&lt;br /&gt;
				Type = line[&amp;#039;types&amp;#039;] and line[&amp;#039;types&amp;#039;][_Type] and line[&amp;#039;types&amp;#039;][_Type][&amp;#039;title&amp;#039;] or _Type&lt;br /&gt;
			end&lt;br /&gt;
			color = getColor(data, nil, _line, _Type)&lt;br /&gt;
			if inline ~= &amp;#039;box&amp;#039; then&lt;br /&gt;
				line_data = line or error(i18n[lang][&amp;#039;error_unknown&amp;#039;](_line))&lt;br /&gt;
				line = line_data[&amp;#039;title&amp;#039;] or default[&amp;#039;title&amp;#039;] or error(i18n[lang][&amp;#039;error_missing&amp;#039;](&amp;#039;title&amp;#039;))&lt;br /&gt;
				line = gsub(line, &amp;#039;%%1&amp;#039;, _line)&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			color = getColor(nil, system, _line, _Type, frame)&lt;br /&gt;
			if inline ~= &amp;#039;box&amp;#039; then&lt;br /&gt;
				line = frame:expandTemplate{ title = system .. &amp;#039; lines&amp;#039;, args = {_line, [&amp;#039;branch&amp;#039;] = _Type} }&lt;br /&gt;
				if mw.text.trim(line) == &amp;#039;&amp;#039; then return error(i18n[lang][&amp;#039;error_unknown&amp;#039;](_line)) end&lt;br /&gt;
			end&lt;br /&gt;
			Type = _Type&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local result&lt;br /&gt;
&lt;br /&gt;
		if Type and Type ~= &amp;#039;&amp;#039; and inline ~= &amp;#039;box&amp;#039; then&lt;br /&gt;
			if line == &amp;#039;&amp;#039; then&lt;br /&gt;
				line = Type&lt;br /&gt;
			else&lt;br /&gt;
				result = &amp;#039; – &amp;#039; .. Type&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if args.note then result = (result or &amp;#039;&amp;#039;) .. &amp;#039; &amp;#039; .. args.note end&lt;br /&gt;
		result = result or &amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
		if not inline then -- [[Template:Legend]]&lt;br /&gt;
			result = &amp;#039;&amp;lt;div class=&amp;quot;legend&amp;quot; style=&amp;quot;-webkit-column-break-inside:avoid;page-break-inside:avoid;break-inside:avoid-column&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;legend-color&amp;quot; style=&amp;quot;display:inline-block;width:1.5em;height:1.5em;margin:1px 0;border:1px solid black;background-color:#&amp;#039; .. color .. &amp;#039;&amp;quot;&amp;gt; &amp;lt;/span&amp;gt; &amp;#039; .. line .. result .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
		elseif inline == &amp;#039;yes&amp;#039; then&lt;br /&gt;
			result = &amp;#039;&amp;lt;span style=&amp;quot;background-color:#&amp;#039; .. color .. &amp;#039;;border:1px solid #000&amp;quot;&amp;gt;    &amp;lt;/span&amp;gt; &amp;#039; .. line .. result&lt;br /&gt;
		elseif inline == &amp;#039;box&amp;#039; then&lt;br /&gt;
			result = &amp;#039;&amp;lt;span style=&amp;quot;background-color:#&amp;#039; .. color .. &amp;#039;;border:1px solid #000&amp;quot;&amp;gt;    &amp;lt;/span&amp;gt;&amp;#039; .. result&lt;br /&gt;
		elseif inline == &amp;#039;link&amp;#039; then&lt;br /&gt;
			local link = args.link or match(line, &amp;#039;%[%[([^%[:|%]]+)[|%]]&amp;#039;)&lt;br /&gt;
			if link then&lt;br /&gt;
				result = &amp;#039;[[&amp;#039; .. link .. &amp;#039;|&amp;lt;span style=&amp;quot;background-color:#&amp;#039; .. color .. &amp;#039;;border:1px solid #000&amp;quot;&amp;gt;    &amp;lt;/span&amp;gt;]]&amp;#039; .. result&lt;br /&gt;
			else&lt;br /&gt;
				result = &amp;#039;&amp;lt;span style=&amp;quot;background-color:#&amp;#039; .. color .. &amp;#039;;border:1px solid #000&amp;quot;&amp;gt;    &amp;lt;/span&amp;gt;&amp;#039; .. result&lt;br /&gt;
			end&lt;br /&gt;
		elseif inline == &amp;#039;square&amp;#039; then&lt;br /&gt;
			result = &amp;#039;&amp;lt;span style=&amp;quot;color:#&amp;#039; .. color .. &amp;#039;;line-height:initial&amp;quot;&amp;gt;■&amp;lt;/span&amp;gt; &amp;#039; .. line .. result&lt;br /&gt;
		elseif inline == &amp;#039;lsquare&amp;#039; then&lt;br /&gt;
			local link = args.link or match(line, &amp;#039;%[%[([^%[:|%]]+)[|%]]&amp;#039;)&lt;br /&gt;
			if link then&lt;br /&gt;
				result = &amp;#039;[[&amp;#039; .. link .. &amp;#039;|&amp;lt;span style=&amp;quot;color:#&amp;#039; .. color .. &amp;#039;;line-height:initial&amp;quot;&amp;gt;■&amp;lt;/span&amp;gt;]]&amp;#039;&lt;br /&gt;
			else&lt;br /&gt;
				result = &amp;#039;&amp;lt;span style=&amp;quot;color:#&amp;#039; .. color .. &amp;#039;;line-height:initial&amp;quot;&amp;gt;■&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		elseif inline == &amp;#039;dot&amp;#039; then&lt;br /&gt;
			result = &amp;#039;&amp;lt;span style=&amp;quot;color:#&amp;#039; .. color .. &amp;#039;;line-height:initial&amp;quot;&amp;gt;●&amp;lt;/span&amp;gt; &amp;#039; .. line .. result&lt;br /&gt;
		elseif inline == &amp;#039;ldot&amp;#039; then&lt;br /&gt;
			local link = args.link or match(line, &amp;#039;%[%[([^%[:|%]]+)[|%]]&amp;#039;)&lt;br /&gt;
			if link then&lt;br /&gt;
				result = &amp;#039;[[&amp;#039; .. link .. &amp;#039;|&amp;lt;span style=&amp;quot;color:#&amp;#039; .. color .. &amp;#039;;line-height:initial&amp;quot;&amp;gt;●&amp;lt;/span&amp;gt;]]&amp;#039;&lt;br /&gt;
			else&lt;br /&gt;
				result = &amp;#039;&amp;lt;span style=&amp;quot;color:#&amp;#039; .. color .. &amp;#039;;line-height:initial&amp;quot;&amp;gt;●&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		elseif inline == &amp;#039;small&amp;#039; then&lt;br /&gt;
			result = &amp;#039;&amp;lt;span style=&amp;quot;background-color:#&amp;#039; .. color .. &amp;#039;&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;#039; .. &amp;#039; &amp;#039; .. line .. result&lt;br /&gt;
		else&lt;br /&gt;
			local yesno = require(&amp;quot;Module:Yesno&amp;quot;)&lt;br /&gt;
			local link = args.link or match(line, &amp;#039;%[%[([^%[:|%]]+)[|%]]&amp;#039;)&lt;br /&gt;
			local border_color, text_color&lt;br /&gt;
			if line_data then&lt;br /&gt;
				if line_data[&amp;#039;types&amp;#039;] and line_data[&amp;#039;types&amp;#039;][_Type] then&lt;br /&gt;
					local Type_data = line_data[&amp;#039;types&amp;#039;][_Type]&lt;br /&gt;
					border_color = Type_data[&amp;#039;border color&amp;#039;] or line_data[&amp;#039;border color&amp;#039;] or color&lt;br /&gt;
					text_color = Type_data[&amp;#039;text color&amp;#039;] or line_data[&amp;#039;text color&amp;#039;]&lt;br /&gt;
					_line = Type_data[&amp;#039;short name&amp;#039;] or line_data[&amp;#039;short name&amp;#039;] or _line&lt;br /&gt;
				else&lt;br /&gt;
					border_color = line_data[&amp;#039;border color&amp;#039;] or color&lt;br /&gt;
					text_color = line_data[&amp;#039;text color&amp;#039;]&lt;br /&gt;
					_line = line_data[&amp;#039;short name&amp;#039;] or _line&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				border_color = color&lt;br /&gt;
			end&lt;br /&gt;
			local greatercontrast = require(&amp;#039;Module:Color contrast&amp;#039;)._greatercontrast&lt;br /&gt;
			text_color = text_color and &amp;#039;#&amp;#039; .. text_color or greatercontrast{color}&lt;br /&gt;
			local bold = (yesno(args.bold) == false) or &amp;#039;;font-weight:bold&amp;#039;&lt;br /&gt;
			if inline == &amp;#039;route&amp;#039; then -- [[Template:RouteBox]]&lt;br /&gt;
				if link then&lt;br /&gt;
					result = &amp;#039;&amp;lt;span style=&amp;quot;background-color:#&amp;#039; .. color .. &amp;#039;;border:.075em solid #&amp;#039; .. border_color .. &amp;#039;;padding:0 .3em&amp;quot;&amp;gt;[[&amp;#039; .. link .. &amp;#039;|&amp;lt;span style=&amp;quot;color:&amp;#039; .. text_color .. bold .. &amp;#039;;font-size:inherit;white-space:nowrap&amp;quot;&amp;gt;&amp;#039; .. _line .. &amp;#039;&amp;lt;/span&amp;gt;]]&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
				else&lt;br /&gt;
					result = &amp;#039;&amp;lt;span style=&amp;quot;background-color:#&amp;#039; .. color .. &amp;#039;;border:.075em solid #&amp;#039; .. border_color .. &amp;#039;;padding:0 .3em;color:&amp;#039; .. text_color .. bold .. &amp;#039;;font-size:inherit;white-space:nowrap&amp;quot;&amp;gt;&amp;#039; .. _line .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
				end&lt;br /&gt;
			elseif inline == &amp;#039;croute&amp;#039; then -- [[Template:Bahnlinie]]&lt;br /&gt;
				if link then&lt;br /&gt;
					result = &amp;#039;&amp;lt;span style=&amp;quot;background-color:#&amp;#039; .. color .. &amp;#039;;border:.075em solid #&amp;#039; .. border_color .. &amp;#039;;border-radius:.5em;padding:0 .3em&amp;quot;&amp;gt;[[&amp;#039; .. link .. &amp;#039;|&amp;lt;span style=&amp;quot;color:&amp;#039; .. text_color .. bold .. &amp;#039;;font-size:inherit;white-space:nowrap&amp;quot;&amp;gt;&amp;#039; .. _line .. &amp;#039;&amp;lt;/span&amp;gt;]]&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
				else&lt;br /&gt;
					result = &amp;#039;&amp;lt;span style=&amp;quot;background-color:#&amp;#039; .. color .. &amp;#039;;border:.075em solid #&amp;#039; .. border_color .. &amp;#039;;border-radius:.5em;padding:0 .3em;color:&amp;#039; .. text_color .. bold .. &amp;#039;;font-size:inherit;white-space:nowrap&amp;quot;&amp;gt;&amp;#039; .. _line .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
				end&lt;br /&gt;
			elseif inline == &amp;#039;xroute&amp;#039; then -- [[Template:Bahnlinie]]&lt;br /&gt;
				if link then&lt;br /&gt;
					result = &amp;#039;&amp;lt;span style=&amp;quot;border:.075em solid #&amp;#039; .. border_color .. &amp;#039;;border-radius:.5em;padding:0 .3em&amp;quot;&amp;gt;[[&amp;#039; .. link .. &amp;#039;|&amp;lt;span style=&amp;quot;color:#&amp;#039; .. color .. bold .. &amp;#039;;font-size:inherit;white-space:nowrap&amp;quot;&amp;gt;&amp;#039; .. _line .. &amp;#039;&amp;lt;/span&amp;gt;]]&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
				else&lt;br /&gt;
					result = &amp;#039;&amp;lt;span style=&amp;quot;border:.075em solid #&amp;#039; .. border_color .. &amp;#039;;border-radius:.5em;padding:0 .3em;color:#&amp;#039; .. color .. bold .. &amp;#039;;font-size:inherit;white-space:nowrap&amp;quot;&amp;gt;&amp;#039; .. _line .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
				end&lt;br /&gt;
			else -- [[Template:Legend]] (fallback; duplication to simplify logic)&lt;br /&gt;
				result = &amp;#039;&amp;lt;div class=&amp;quot;legend&amp;quot; style=&amp;quot;-webkit-column-break-inside:avoid;page-break-inside:avoid;break-inside:avoid-column&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;legend-color&amp;quot; style=&amp;quot;display:inline-block;width:1.5em;height:1.5em;margin:1px 0;border:1px solid black;background-color:#&amp;#039; .. color .. &amp;#039;&amp;quot;&amp;gt; &amp;lt;/span&amp;gt; &amp;#039; .. line .. result .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		result = gsub(result, &amp;#039;:%s*#transparent&amp;#039;, &amp;#039;:transparent&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
		return result&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.box = makeInvokeFunction(&amp;#039;_box&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
function p._icon(args, frame)&lt;br /&gt;
	local system = args[1] or args.system&lt;br /&gt;
	local line = args[2] or args.line&lt;br /&gt;
	local Type = args[3] or args.type&lt;br /&gt;
	local data = args.data&lt;br /&gt;
	if system or data then&lt;br /&gt;
		data = data or getData(system)&lt;br /&gt;
&lt;br /&gt;
		local icon, Format&lt;br /&gt;
&lt;br /&gt;
		line = (getLine(data, line))&lt;br /&gt;
&lt;br /&gt;
		if line then&lt;br /&gt;
			if Type then&lt;br /&gt;
				Type = data[&amp;#039;aliases&amp;#039;] and data[&amp;#039;aliases&amp;#039;][lower(Type)] or Type&lt;br /&gt;
				Type = line[&amp;#039;types&amp;#039;] and line[&amp;#039;types&amp;#039;][Type] -- If there&amp;#039;s no type table or entry for this type, then it can&amp;#039;t have its own icon&lt;br /&gt;
				Format = Type[&amp;#039;icon format&amp;#039;] or data[&amp;#039;type icon format&amp;#039;]&lt;br /&gt;
				icon = Type[&amp;#039;icon&amp;#039;]&lt;br /&gt;
			end&lt;br /&gt;
			if not (Format or icon) then&lt;br /&gt;
				Format = line[&amp;#039;icon format&amp;#039;] or data[&amp;#039;line icon format&amp;#039;]&lt;br /&gt;
				icon = line[&amp;#039;icon&amp;#039;]&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if not (Format or icon) then&lt;br /&gt;
			Format = data[&amp;#039;system icon format&amp;#039;]&lt;br /&gt;
			icon = data[&amp;#039;system icon&amp;#039;]&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if Format then&lt;br /&gt;
			if Format ~= &amp;#039;image&amp;#039; then return p._box({data = data, [2] = (args[2] or args.line), [3] = Format, type = (args[3] or args.type), bold = args.bold, link = args.link}, frame) end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local size = args.size&lt;br /&gt;
		if size then&lt;br /&gt;
			if match(size, &amp;#039;%d$&amp;#039;) then&lt;br /&gt;
				size = &amp;#039;|&amp;#039; .. size .. &amp;#039;px&amp;#039;&lt;br /&gt;
			else&lt;br /&gt;
				size = &amp;#039;|&amp;#039; .. size&lt;br /&gt;
			end&lt;br /&gt;
			-- Upright values are to be disabled until there is use of upright scaling in subpages; doesn&amp;#039;t seem to work anyway as of 2018-08-10&lt;br /&gt;
			local tmp = {&lt;br /&gt;
				&amp;#039;|%s*%d*x?%d+px%s*([%]|])&amp;#039;, -- &amp;#039;|%s*upright=%d+%.?%d*%s*([%]|])&amp;#039;, &amp;#039;|%s*upright%s*([%]|])&amp;#039;&lt;br /&gt;
			}&lt;br /&gt;
			if match(icon, tmp[1]) then&lt;br /&gt;
				icon = gsub(icon, tmp[1], size .. &amp;#039;%1&amp;#039;)&lt;br /&gt;
		--	elseif match(icon, tmp[2]) then&lt;br /&gt;
		--		icon = gsub(icon, tmp[2], size .. &amp;#039;%1&amp;#039;)&lt;br /&gt;
		--	elseif match(icon, tmp[3]) then&lt;br /&gt;
		--		icon = gsub(icon, tmp[3], size .. &amp;#039;%1&amp;#039;)&lt;br /&gt;
			else&lt;br /&gt;
				icon = gsub(icon, &amp;#039;(%[%[[^%]|]+)([%]|])&amp;#039;, &amp;#039;%1&amp;#039; .. size .. &amp;#039;%2&amp;#039;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local link = args.link&lt;br /&gt;
		if link then&lt;br /&gt;
			if match(icon, &amp;#039;|%s*link=[^%]|]*[%]|]&amp;#039;) then&lt;br /&gt;
				icon = gsub(icon, &amp;#039;|%s*link=[^%]|]*([%]|])&amp;#039;, &amp;#039;|link=&amp;#039; .. link .. &amp;#039;%1&amp;#039;)&lt;br /&gt;
			else&lt;br /&gt;
				icon = gsub(icon, &amp;#039;(%[%[[^%]|]+)([%]|])&amp;#039;, &amp;#039;%1|link=&amp;#039; .. link .. &amp;#039;%2&amp;#039;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local alt = args.alt or link&lt;br /&gt;
		if alt then&lt;br /&gt;
			if match(icon, &amp;#039;|%s*alt=[^%]|]*[%]|]&amp;#039;) then&lt;br /&gt;
				icon = gsub(icon, &amp;#039;|%s*alt=[^%]|]*([%]|])&amp;#039;, &amp;#039;|alt=&amp;#039; .. alt .. &amp;#039;%1&amp;#039;)&lt;br /&gt;
			else&lt;br /&gt;
				icon = gsub(icon, &amp;#039;(%[%[[^%]|]+)([%]|])&amp;#039;, &amp;#039;%1|alt=&amp;#039; .. alt .. &amp;#039;%2&amp;#039;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		return icon&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.icon = makeInvokeFunction(&amp;#039;_icon&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
function p._line(args, frame)&lt;br /&gt;
	local system = args[1] or args.system&lt;br /&gt;
	local line = args[2] or args.line&lt;br /&gt;
	if not line then return &amp;#039;&amp;#039; end&lt;br /&gt;
	local Type = args[3] or args.type&lt;br /&gt;
	local data = args.data&lt;br /&gt;
	if system or data then&lt;br /&gt;
		data = data or getData(system, true)&lt;br /&gt;
		if data then&lt;br /&gt;
			line = (getLine(data, line)) or error(i18n[lang][&amp;#039;error_unknown&amp;#039;](line))&lt;br /&gt;
			if Type then&lt;br /&gt;
				Type = data[&amp;#039;aliases&amp;#039;] and data[&amp;#039;aliases&amp;#039;][lower(Type)] or Type&lt;br /&gt;
				Type = line[&amp;#039;types&amp;#039;] and line[&amp;#039;types&amp;#039;][Type] and line[&amp;#039;types&amp;#039;][Type][&amp;#039;title&amp;#039;] or Type&lt;br /&gt;
			end&lt;br /&gt;
			line = line[&amp;#039;title&amp;#039;] or error(i18n[lang][&amp;#039;error_missing&amp;#039;](&amp;#039;title&amp;#039;))&lt;br /&gt;
		else&lt;br /&gt;
			line = frame:expandTemplate{ title = system .. &amp;#039; lines&amp;#039;, args = {line, [&amp;#039;branch&amp;#039;] = Type} }&lt;br /&gt;
			if mw.text.trim(line) == &amp;#039;&amp;#039; then return error(i18n[lang][&amp;#039;error_unknown&amp;#039;](_line)) end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if Type then&lt;br /&gt;
			if line == &amp;#039;&amp;#039; then&lt;br /&gt;
				line = Type&lt;br /&gt;
			else&lt;br /&gt;
				line = line .. &amp;#039; – &amp;#039; .. Type&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return line&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.line = makeInvokeFunction(&amp;#039;_line&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
function p._station(args, frame)&lt;br /&gt;
	local system = args[1] or args.system&lt;br /&gt;
	local station = args[2] or args.station&lt;br /&gt;
	if not station then return &amp;#039;&amp;#039; end&lt;br /&gt;
	local _line = args[3] or args.line&lt;br /&gt;
	local _Type = args[4] or args.type&lt;br /&gt;
	local data = args.data&lt;br /&gt;
	if system or data then&lt;br /&gt;
		data = data or getData(system, true)&lt;br /&gt;
		if data then&lt;br /&gt;
			local _Format = data[&amp;#039;station format&amp;#039;][station] or data[&amp;#039;station format&amp;#039;][1]&lt;br /&gt;
			if _Format then&lt;br /&gt;
				if data[&amp;#039;aliases&amp;#039;] then&lt;br /&gt;
					if _line then&lt;br /&gt;
						_line = data[&amp;#039;aliases&amp;#039;][lower(_line)] or _line&lt;br /&gt;
					end&lt;br /&gt;
					if _Type then&lt;br /&gt;
						_Type = data[&amp;#039;aliases&amp;#039;][lower(_Type)] or _Type&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				station = getStation(station, _Format)&lt;br /&gt;
			else&lt;br /&gt;
				station = station or &amp;#039;&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			station = frame:expandTemplate{ title = system .. &amp;#039; stations&amp;#039;, args = {[&amp;#039;station&amp;#039;] = station, [&amp;#039;line&amp;#039;] = _line, [&amp;#039;branch&amp;#039;] = _Type} }&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		return station&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.station = makeInvokeFunction(&amp;#039;_station&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
function p._style(args, frame)&lt;br /&gt;
	local style = args[1] or args.style&lt;br /&gt;
	local system = args[2] or args.system&lt;br /&gt;
	local line = args[3] or args.line&lt;br /&gt;
	local station = args[4] or args.station&lt;br /&gt;
	local result = {}&lt;br /&gt;
	local data = args.data&lt;br /&gt;
	local default = &amp;#039;background-color:#efefef&amp;#039; -- Default background color for {{Infobox station}}&lt;br /&gt;
	if system or data then&lt;br /&gt;
		data = data or getData(system, true)&lt;br /&gt;
	end&lt;br /&gt;
	if data then&lt;br /&gt;
		local function getValue(var)&lt;br /&gt;
			if type(var) == &amp;#039;table&amp;#039; then&lt;br /&gt;
				var = var[line] or var[1]&lt;br /&gt;
				if type(var) == &amp;#039;table&amp;#039; then&lt;br /&gt;
					var = var[station] or var[1]&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if var ~= &amp;#039;&amp;#039; then return var end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if style == &amp;#039;header&amp;#039; then&lt;br /&gt;
			local tmp = data[&amp;#039;name format&amp;#039;] and getValue(data[&amp;#039;name format&amp;#039;])&lt;br /&gt;
			if tmp then table.insert(result, tmp) end&lt;br /&gt;
		elseif style == &amp;#039;subheader&amp;#039; then&lt;br /&gt;
			local tmp = data[&amp;#039;header background color&amp;#039;] and getValue(data[&amp;#039;header background color&amp;#039;])&lt;br /&gt;
			if tmp then&lt;br /&gt;
				table.insert(result, &amp;#039;background-color:#&amp;#039; .. tmp)&lt;br /&gt;
				local color = data[&amp;#039;header text color&amp;#039;] and getValue(data[&amp;#039;header text color&amp;#039;])&lt;br /&gt;
				if color then&lt;br /&gt;
					table.insert(result, &amp;#039;color:#&amp;#039; .. color)&lt;br /&gt;
				else&lt;br /&gt;
					local greatercontrast = require(&amp;#039;Module:Color contrast&amp;#039;)._greatercontrast&lt;br /&gt;
					if greatercontrast{tmp} == &amp;#039;#FFFFFF&amp;#039; then table.insert(result, &amp;#039;color:#FFFFFF&amp;#039;) end&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				table.insert(result, default)&lt;br /&gt;
				local color = data[&amp;#039;header text color&amp;#039;] and getValue(data[&amp;#039;header text color&amp;#039;])&lt;br /&gt;
				if color then table.insert(result, &amp;#039;color:#&amp;#039; .. color) end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		result = table.concat(result, &amp;#039;;&amp;#039;)&lt;br /&gt;
	elseif system then&lt;br /&gt;
		local title = &amp;#039;Template:&amp;#039; .. system .. &amp;#039; style&amp;#039;&lt;br /&gt;
		local titleObj = mw.title.new(title)&lt;br /&gt;
		if titleObj and titleObj.exists then&lt;br /&gt;
			local tmp&lt;br /&gt;
			if style == &amp;#039;header&amp;#039; then&lt;br /&gt;
				tmp = frame:expandTemplate{ title = title, args = {&amp;#039;name_format&amp;#039;, line, station} }&lt;br /&gt;
				if tmp ~= &amp;#039;&amp;#039; then table.insert(result, tmp) end&lt;br /&gt;
			elseif style == &amp;#039;subheader&amp;#039; then&lt;br /&gt;
				tmp = frame:expandTemplate{ title = title, args = {&amp;#039;thbgcolor&amp;#039;, line, station} }&lt;br /&gt;
				if tmp ~= &amp;#039;&amp;#039; then&lt;br /&gt;
					table.insert(result, &amp;#039;background-color:#&amp;#039; .. tmp)&lt;br /&gt;
					local color = frame:expandTemplate{ title = title, args = {&amp;#039;thcolor&amp;#039;, line, station} }&lt;br /&gt;
					if color ~= &amp;#039;&amp;#039; then&lt;br /&gt;
						table.insert(result, &amp;#039;color:#&amp;#039; .. color)&lt;br /&gt;
					else&lt;br /&gt;
						local ratio = require(&amp;#039;Module:Color contrast&amp;#039;)._ratio&lt;br /&gt;
						if ratio{tmp, &amp;#039;222222&amp;#039;} &amp;lt; 4.5 then table.insert(result, &amp;#039;color:#FFFFFF&amp;#039;) end -- 222222 is the default text color in Vector&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					table.insert(result, default)&lt;br /&gt;
					tmp = frame:expandTemplate{ title = title, args = {&amp;#039;thcolor&amp;#039;, line, station} }&lt;br /&gt;
					if tmp ~= &amp;#039;&amp;#039; then&lt;br /&gt;
						table.insert(result, &amp;#039;color:#&amp;#039; .. tmp)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			result = table.concat(result, &amp;#039;;&amp;#039;)&lt;br /&gt;
		else&lt;br /&gt;
			if style == &amp;#039;subheader&amp;#039; then&lt;br /&gt;
				result = default&lt;br /&gt;
			else&lt;br /&gt;
				result = &amp;#039;&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		if style == &amp;#039;subheader&amp;#039; then&lt;br /&gt;
			result = default&lt;br /&gt;
		else&lt;br /&gt;
			result = &amp;#039;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.style(frame)&lt;br /&gt;
	local args = getArgs(frame, {frameOnly = true})&lt;br /&gt;
	return p._style(args, frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Szqecs</name></author>	</entry>

	</feed>