<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://the-democratika.com/wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3ATrack_gauge</id>
	<title>Module:Track gauge - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://the-democratika.com/wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3ATrack_gauge"/>
	<link rel="alternate" type="text/html" href="https://the-democratika.com/wiki/index.php?title=Module:Track_gauge&amp;action=history"/>
	<updated>2026-04-04T21:06:14Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://the-democratika.com/wiki/index.php?title=Module:Track_gauge&amp;diff=6989&amp;oldid=prev</id>
		<title>&gt;Graham87: rm role=math per Wikipedia talk:Manual of Style/Accessibility#Role=math</title>
		<link rel="alternate" type="text/html" href="https://the-democratika.com/wiki/index.php?title=Module:Track_gauge&amp;diff=6989&amp;oldid=prev"/>
		<updated>2024-01-14T09:27:34Z</updated>

		<summary type="html">&lt;p&gt;rm role=math per &lt;a href=&quot;/wiki/index.php?title=Wikipedia_talk:Manual_of_Style/Accessibility&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Wikipedia talk:Manual of Style/Accessibility (page does not exist)&quot;&gt;Wikipedia talk:Manual of Style/Accessibility#Role=math&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- This module implements the {{Track gauge}} template.&lt;br /&gt;
-- Data is in Module:Track gauge/data&lt;br /&gt;
local p = {}&lt;br /&gt;
local gaugeDataAll = nil&lt;br /&gt;
local dataPageName = &amp;#039;Module:Track gauge/data&amp;#039; -- set /data/sandbox here to test data/sandbox&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
-- prepareArgs -- Normalise Arguments coming from an #invoke or from a module&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
local function prepareArgs(frame)&lt;br /&gt;
	local origArgs&lt;br /&gt;
	if frame == mw.getCurrentFrame() then&lt;br /&gt;
		origArgs = frame:getParent().args&lt;br /&gt;
		for k, v in pairs(frame.args) do&lt;br /&gt;
			origArgs = frame.args&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		origArgs = frame&lt;br /&gt;
	end&lt;br /&gt;
	local args = {}&lt;br /&gt;
	-- searchAlias is the cleaned value of args[1]. args[1] is kept as rawInput for error message&lt;br /&gt;
	local searchAlias = &amp;#039;&amp;#039;&lt;br /&gt;
	local rawDisp&lt;br /&gt;
	for k, v in pairs(origArgs) do&lt;br /&gt;
		if tonumber(k) == nil then -- Named argment&lt;br /&gt;
			if k == &amp;#039;disp&amp;#039; then&lt;br /&gt;
				rawDisp = v -- Keep raw disp input to pass through plain (wiki)text&lt;br /&gt;
				args[k] = mw.ustring.lower(v)&lt;br /&gt;
			elseif k == &amp;#039;first&amp;#039; then&lt;br /&gt;
				v = mw.ustring.lower(v)&lt;br /&gt;
				if v == &amp;#039;met&amp;#039; or v == &amp;#039;metric&amp;#039; then&lt;br /&gt;
					v = &amp;#039;met&amp;#039;&lt;br /&gt;
				elseif v == &amp;#039;imp&amp;#039; or v == &amp;#039;imperial&amp;#039; then&lt;br /&gt;
					v = &amp;#039;imp&amp;#039;&lt;br /&gt;
				else k = &amp;#039;trashparam_first&amp;#039; end&lt;br /&gt;
				args[k] = v&lt;br /&gt;
			elseif k == &amp;#039;nowrap&amp;#039; or k == &amp;#039;wrap&amp;#039; then -- wrap=y deprecated; reading: nowrap=off&lt;br /&gt;
				v = mw.ustring.lower(v)&lt;br /&gt;
				if v == &amp;#039;&amp;#039; or v == &amp;#039;off&amp;#039; or v == &amp;#039;on&amp;#039; or v == &amp;#039;all&amp;#039; then&lt;br /&gt;
				elseif v == &amp;#039;inline&amp;#039; or (k == &amp;#039;wrap&amp;#039; and v == &amp;#039;y&amp;#039;) then&lt;br /&gt;
					v = &amp;#039;off&amp;#039;&lt;br /&gt;
				else v = &amp;#039;&amp;#039; end&lt;br /&gt;
				args[&amp;#039;nowrap&amp;#039;] = v&lt;br /&gt;
			else&lt;br /&gt;
				args[k] = mw.ustring.lower(v)&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			args[k] = v -- Keep rawInput in [1] for error message&lt;br /&gt;
			if k == 1 then&lt;br /&gt;
			-- Unnamed argument, the alias to be searched&lt;br /&gt;
			-- Cleanup&lt;br /&gt;
				searchAlias = p.normaliseAliasInput(v)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	args[&amp;#039;searchAlias&amp;#039;] = searchAlias&lt;br /&gt;
	if rawDisp then args[&amp;#039;rawDisp&amp;#039;] = rawDisp end&lt;br /&gt;
	return args&lt;br /&gt;
end&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
-- normaliseAliasInput&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
function p.normaliseAliasInput(aliasIn)&lt;br /&gt;
	local a&lt;br /&gt;
	a = mw.ustring.lower(mw.ustring.gsub(aliasIn, &amp;#039;[%s%,]&amp;#039;, &amp;#039;&amp;#039;))&lt;br /&gt;
	a = mw.ustring.gsub(a, &amp;#039;&amp;amp;nbsp;&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
	a = mw.ustring.gsub(a, &amp;#039;gauge$&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
	a = mw.ustring.gsub(a, &amp;quot;&amp;#039;&amp;quot;, &amp;quot;ft&amp;quot;)&lt;br /&gt;
	a = mw.ustring.gsub(a, &amp;#039;&amp;quot;&amp;#039;, &amp;#039;in&amp;#039;)&lt;br /&gt;
	a = mw.ustring.gsub(a, &amp;#039;⁄&amp;#039;, &amp;#039;/&amp;#039;)&lt;br /&gt;
	a = mw.ustring.gsub(a, &amp;#039;&amp;amp;frasl;&amp;#039;, &amp;#039;/&amp;#039;)&lt;br /&gt;
	return a	&lt;br /&gt;
end&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
-- debugReturnArgs -- Debug function.&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
function p.debugReturnArgs(frame)&lt;br /&gt;
	local args = prepareArgs(frame)&lt;br /&gt;
	local retArgs = {}&lt;br /&gt;
	for k, a in pairs(args) do&lt;br /&gt;
		table.insert(retArgs, k .. &amp;#039;=&amp;#039; .. a)&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;#039;Args: &amp;#039; .. table.concat(retArgs, &amp;#039;; &amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
-- getTrackGaugeEntry -- Find entry data for a single gauge (alias)&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
function p.getTrackGaugeEntry(searchAlias)&lt;br /&gt;
	gaugeDataAll = mw.loadData(dataPageName)&lt;br /&gt;
	if searchAlias == &amp;#039;&amp;#039; then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local tgEntry = nil&lt;br /&gt;
	for i, tgEntry in ipairs(gaugeDataAll) do&lt;br /&gt;
		for j, alias in ipairs(tgEntry.aliases) do&lt;br /&gt;
			if alias == searchAlias then&lt;br /&gt;
				return tgEntry&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
-- noWrap -- Add span tags to prevent a string from wrapping.&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
local function noWrap(s)&lt;br /&gt;
	return mw.ustring.format(&amp;#039;&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;&amp;#039;, s)&lt;br /&gt;
end&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
-- frac -- A slimmed-down version of the {{frac}} template (a nowrap is to be added with the unit)&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
local function frac(whole, num, den)&lt;br /&gt;
	-- normally would do the TemplateStyles expansion here, but instead we do&lt;br /&gt;
	-- it at the callsite because of [[:phab:T200704]]&lt;br /&gt;
	return mw.ustring.format(&lt;br /&gt;
		&amp;#039;&amp;lt;span class=&amp;quot;frac&amp;quot;&amp;gt;%s&amp;lt;span class=&amp;quot;num&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;&amp;amp;frasl;&amp;lt;span class=&amp;quot;den&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;#039;,&lt;br /&gt;
		whole and (whole .. &amp;#039;&amp;lt;span class=&amp;quot;sr-only&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&amp;#039;) or &amp;#039;&amp;#039;,&lt;br /&gt;
		num,&lt;br /&gt;
		den&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
-- catMentions -- Wikicode for &amp;quot;article mentions gauge&amp;quot; categories&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
function p.catMentions(tgEntry, sortlabel, doReturn)&lt;br /&gt;
	local ns = &amp;#039;Category:&amp;#039;&lt;br /&gt;
	local cat&lt;br /&gt;
&lt;br /&gt;
	if tgEntry == nil then&lt;br /&gt;
		-- Parent, the container cat&lt;br /&gt;
		cat = &amp;#039;Articles that mention a specific track gauge&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		cat = &amp;#039;Articles that mention track gauge &amp;#039; .. tgEntry.id .. &amp;#039; mm&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	-- Argument &amp;#039;label&amp;#039; can be used to add a catsort. Catsort is not used (as of 20 May 2014)&lt;br /&gt;
	if sortlabel ~= nil then&lt;br /&gt;
		sortlabel = &amp;#039;|&amp;#039; .. sortlabel&lt;br /&gt;
	else&lt;br /&gt;
		sortlabel = &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	if doReturn ~= nil then&lt;br /&gt;
		if doReturn == &amp;#039;fullpagename&amp;#039; then&lt;br /&gt;
			return ns .. cat&lt;br /&gt;
		elseif doReturn == &amp;#039;pagename&amp;#039; then -- plaintext, no namespace&lt;br /&gt;
			return cat&lt;br /&gt;
		elseif doReturn == &amp;#039;show&amp;#039; then -- colontrick&lt;br /&gt;
			return &amp;#039;[[:&amp;#039; .. ns .. cat .. sortlabel .. &amp;#039;]]&amp;#039;&lt;br /&gt;
		else -- unknown arg value&lt;br /&gt;
			return ns .. cat&lt;br /&gt;
		end&lt;br /&gt;
	else -- Returns straight categorisation (wikitext)&lt;br /&gt;
		return &amp;#039;[[&amp;#039; .. ns .. cat .. sortlabel .. &amp;#039;]]&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
-- formatImp -- Formats imperial units size into a single text element&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
function p.formatImp(tgEntry, measurementToLink, setNowrap, addUnitlink)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	local ft = tgEntry.ft&lt;br /&gt;
	if ft then&lt;br /&gt;
		local ftlink = addUnitlink and measurementToLink ~= &amp;#039;imp&amp;#039; and &amp;#039;[[Foot (unit)|ft]]&amp;#039; or &amp;#039;ft&amp;#039;&lt;br /&gt;
&lt;br /&gt;
		table.insert(ret, mw.ustring.format(&amp;#039;%s&amp;amp;nbsp;%s&amp;#039;, ft, ftlink))&lt;br /&gt;
	end&lt;br /&gt;
	local inches = tgEntry[&amp;#039;in&amp;#039;]&lt;br /&gt;
	local num = tgEntry.num&lt;br /&gt;
	local den = tgEntry.den&lt;br /&gt;
	local has_fraction = num and den&lt;br /&gt;
	if inches and not num and not den then&lt;br /&gt;
&lt;br /&gt;
		table.insert(ret, inches)&lt;br /&gt;
	elseif has_fraction then&lt;br /&gt;
		table.insert(ret, frac(inches, num, den))&lt;br /&gt;
	end&lt;br /&gt;
	if inches or num and den then&lt;br /&gt;
		local incheslink = addUnitlink and measurementToLink ~= &amp;#039;imp&amp;#039; and &amp;#039;[[inch|in]]&amp;#039; or &amp;#039;in&amp;#039;&lt;br /&gt;
		table.insert(ret, incheslink)&lt;br /&gt;
	end&lt;br /&gt;
	local gaugeSize&lt;br /&gt;
	if setNowrap then&lt;br /&gt;
		gaugeSize = noWrap(table.concat(ret, &amp;#039;&amp;amp;nbsp;&amp;#039;))&lt;br /&gt;
	else&lt;br /&gt;
		gaugeSize = table.concat(ret, &amp;#039;&amp;amp;nbsp;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	 -- we have do this here to work around [[phab:T200704]]&lt;br /&gt;
	local templatestyles&lt;br /&gt;
	if has_fraction then&lt;br /&gt;
		templatestyles = mw.getCurrentFrame():extensionTag{&lt;br /&gt;
			name = &amp;#039;templatestyles&amp;#039;, args = { src = &amp;#039;Fraction/styles.css&amp;#039; }&lt;br /&gt;
		}&lt;br /&gt;
	else&lt;br /&gt;
		templatestyles = &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
			&lt;br /&gt;
	if measurementToLink == &amp;#039;imp&amp;#039; and tgEntry.pagename ~= nil then&lt;br /&gt;
		return mw.ustring.format(&lt;br /&gt;
			&amp;#039;%s[[%s|%s]]&amp;#039;,&lt;br /&gt;
			templatestyles,&lt;br /&gt;
			tgEntry.pagename,&lt;br /&gt;
			gaugeSize&lt;br /&gt;
		)&lt;br /&gt;
	else&lt;br /&gt;
		return templatestyles .. gaugeSize&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
-- formatMet -- Formats metric measurements into a single formatted text element. Public for autodocument&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
function p.formatMet(tgEntry, measurementToLink, setNowrap, addUnitlink, removeComma)&lt;br /&gt;
	local m = tgEntry.m&lt;br /&gt;
	local gaugeSize&lt;br /&gt;
	if m then&lt;br /&gt;
		local mUnit = addUnitlink and measurementToLink ~= &amp;#039;met&amp;#039; and &amp;#039;[[metre|m]]&amp;#039; or &amp;#039;m&amp;#039;&lt;br /&gt;
		gaugeSize = mw.ustring.format(&amp;#039;%s&amp;amp;nbsp;%s&amp;#039;, m, mUnit)&lt;br /&gt;
	else&lt;br /&gt;
		local mm = tgEntry.mm&lt;br /&gt;
		mm = tonumber(mm)&lt;br /&gt;
		if mm then&lt;br /&gt;
			mm = mw.getContentLanguage():formatNum(mm)&lt;br /&gt;
			if removeComma then&lt;br /&gt;
				mm = string.gsub( mm, &amp;quot;,&amp;quot;, &amp;quot;&amp;quot; )&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		local mmUnit = addUnitlink and measurementToLink ~= &amp;#039;met&amp;#039; and &amp;#039;[[millimetre|mm]]&amp;#039; or &amp;#039;mm&amp;#039;&lt;br /&gt;
		gaugeSize = mw.ustring.format(&amp;#039;%s&amp;amp;nbsp;%s&amp;#039;, mm, mmUnit)&lt;br /&gt;
	end&lt;br /&gt;
	if setNowrap then&lt;br /&gt;
		gaugeSize = noWrap(gaugeSize)&lt;br /&gt;
	end&lt;br /&gt;
	if measurementToLink == &amp;#039;met&amp;#039; and tgEntry.pagename ~= nil then&lt;br /&gt;
		return mw.ustring.format(&amp;#039;[[%s|%s]]&amp;#039;, tgEntry.pagename, gaugeSize)&lt;br /&gt;
	else&lt;br /&gt;
		return gaugeSize&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
-- formatAltName&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
function formatAltName(tgEntry, addGaugeName, addGaugeNameLink, disp, setNowrap, engvar)&lt;br /&gt;
	-- Assumed: at least one to add is true.&lt;br /&gt;
	if tgEntry.name == nil then&lt;br /&gt;
		-- Not checked: link does exist alone&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	local retAlt = {}&lt;br /&gt;
	if disp == &amp;#039;br&amp;#039; then&lt;br /&gt;
		table.insert(retAlt, &amp;#039;&amp;lt;br /&amp;gt;&amp;#039;)&lt;br /&gt;
	else&lt;br /&gt;
		table.insert(retAlt, &amp;#039; &amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if setNowrap then&lt;br /&gt;
		table.insert(retAlt, &amp;#039;&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if addGaugeNameLink then&lt;br /&gt;
		if engvar == &amp;#039;en-us&amp;#039; then&lt;br /&gt;
			-- Current implementations (2016): metER for metRE (1000-met, 1009-met)&lt;br /&gt;
			table.insert(retAlt, tgEntry.en_US_link or tgEntry.link or tgEntry.name)&lt;br /&gt;
		else&lt;br /&gt;
			table.insert(retAlt, tgEntry.link or tgEntry.name)&lt;br /&gt;
		end&lt;br /&gt;
	else -- so must be unlinked .name to add&lt;br /&gt;
			if engvar == &amp;#039;en-us&amp;#039; then&lt;br /&gt;
			-- Current implementations (2016): metER for metRE (1000-met, 1009-met)&lt;br /&gt;
			table.insert(retAlt, tgEntry.en_US_name or tgEntry.name)&lt;br /&gt;
		else&lt;br /&gt;
			table.insert(retAlt, tgEntry.name)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if setNowrap then --close tag&lt;br /&gt;
		table.insert(retAlt, &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(retAlt, &amp;#039;&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
-- main -- The basic module&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	-- In general: the tgEntry object (from TG/data) is passed to the functions, while arguments are processed here.&lt;br /&gt;
	local title = mw.title.getCurrentTitle()&lt;br /&gt;
	local args = prepareArgs(frame)&lt;br /&gt;
	local tgEntry = p.getTrackGaugeEntry(args.searchAlias)&lt;br /&gt;
&lt;br /&gt;
	-- Categorise &amp;amp; preview warning when no track gauge definition was found.&lt;br /&gt;
	if tgEntry == nil then&lt;br /&gt;
		local input = args[1] or &amp;#039;&amp;#039;&lt;br /&gt;
		local errorTail = require(&amp;#039;Module:If preview&amp;#039;)._warning({&lt;br /&gt;
			&amp;#039;Track gauge &amp;#039; ..&lt;br /&gt;
			input ..&lt;br /&gt;
			&amp;#039; not in [[:Template:Track_gauge#List_of_defined_track_gauges|List of defined track gauges]] ([[Template talk:Track gauge|talk]]).&amp;#039;&lt;br /&gt;
		})&lt;br /&gt;
&lt;br /&gt;
		if title:inNamespaces(0, 14) then -- mainspace and category space&lt;br /&gt;
			errorTail = errorTail .. &amp;quot;[[Category:Articles using Template:Track gauge with unrecognized input]]&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		return input .. errorTail&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Check and set args &amp;amp; tgEntry props: disp, first, nowrap, first&lt;br /&gt;
	local disp = args.disp or &amp;#039;&amp;#039;&lt;br /&gt;
	local first = args.first or tgEntry.def1&lt;br /&gt;
	local unitlink = args.unitlink or &amp;#039;&amp;#039;&lt;br /&gt;
	local comma = args.comma or &amp;#039;&amp;#039;&lt;br /&gt;
	local nowrap = args.nowrap or &amp;#039;&amp;#039;&lt;br /&gt;
	local setNowrapElement = (nowrap == &amp;#039;&amp;#039; or nowrap == &amp;#039;off&amp;#039;) -- To prevent nested nowrap tags&lt;br /&gt;
	local measurementToLink&lt;br /&gt;
	if args.lk == &amp;#039;on&amp;#039; then&lt;br /&gt;
		if disp == &amp;#039;1&amp;#039; then&lt;br /&gt;
			measurementToLink = first -- Can make metric text links to the imp linked page&lt;br /&gt;
		else&lt;br /&gt;
			measurementToLink = tgEntry.def1 -- When first=swapped, this could link 2nd measure.&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- String the text elements together (compose the return table)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	-- nowrap opening tag&lt;br /&gt;
	if nowrap == &amp;#039;all&amp;#039; or nowrap == &amp;#039;on&amp;#039; then&lt;br /&gt;
		table.insert(ret, &amp;#039;&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	-- First measure&lt;br /&gt;
	if first == &amp;#039;met&amp;#039; then&lt;br /&gt;
		table.insert(ret,&lt;br /&gt;
			p.formatMet(tgEntry, measurementToLink, setNowrapElement, unitlink == &amp;#039;on&amp;#039;, comma == &amp;#039;off&amp;#039;))&lt;br /&gt;
	else&lt;br /&gt;
		table.insert(ret,&lt;br /&gt;
			p.formatImp(tgEntry, measurementToLink, setNowrapElement, unitlink == &amp;#039;on&amp;#039;, comma == &amp;#039;off&amp;#039;))&lt;br /&gt;
	end&lt;br /&gt;
	-- The joint and the second measure&lt;br /&gt;
	if disp == &amp;#039;1&amp;#039; then&lt;br /&gt;
	else&lt;br /&gt;
		local joinText = &amp;#039;&amp;#039;&lt;br /&gt;
		local closeDisp = &amp;#039;&amp;#039;&lt;br /&gt;
		if disp == &amp;#039;s&amp;#039; or disp == &amp;#039;/&amp;#039; then&lt;br /&gt;
			joinText = &amp;#039;&amp;amp;nbsp;/ &amp;#039; --spaces&lt;br /&gt;
		elseif disp == &amp;#039;br&amp;#039; then&lt;br /&gt;
			joinText = &amp;#039;&amp;lt;br /&amp;gt;(&amp;#039;&lt;br /&gt;
			closeDisp = &amp;#039;)&amp;#039;&lt;br /&gt;
		elseif disp == &amp;#039;[&amp;#039; or disp == &amp;#039;[]&amp;#039; then&lt;br /&gt;
			joinText = &amp;#039; [&amp;#039;&lt;br /&gt;
			closeDisp = &amp;#039;]&amp;#039;&lt;br /&gt;
		elseif disp ~= &amp;#039;&amp;#039; then -- Is anytext&lt;br /&gt;
			joinText = &amp;#039; &amp;#039; .. args[&amp;#039;rawDisp&amp;#039;] .. &amp;#039; &amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
			joinText = &amp;#039; (&amp;#039;&lt;br /&gt;
			closeDisp = &amp;#039;)&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		table.insert(ret, joinText)&lt;br /&gt;
		if first ~= &amp;#039;met&amp;#039; then&lt;br /&gt;
			table.insert(ret,&lt;br /&gt;
				p.formatMet(tgEntry, measurementToLink, setNowrapElement, unitlink == &amp;#039;on&amp;#039;, comma == &amp;#039;off&amp;#039;))&lt;br /&gt;
		else&lt;br /&gt;
			table.insert(ret,&lt;br /&gt;
				p.formatImp(tgEntry, measurementToLink, setNowrapElement, unitlink == &amp;#039;on&amp;#039;))&lt;br /&gt;
		end&lt;br /&gt;
		table.insert(ret, closeDisp) -- Could be &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	if nowrap == &amp;#039;on&amp;#039; then -- Closing tag&lt;br /&gt;
		table.insert(ret, &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	-- Alternative name&lt;br /&gt;
	if args.al == &amp;#039;on&amp;#039; or args.allk == &amp;#039;on&amp;#039; then&lt;br /&gt;
		local setNowrapAltname = (nowrap == &amp;#039;&amp;#039; or nowrap == &amp;#039;on&amp;#039;) -- Logic applied to prevent nested nowrap tags&lt;br /&gt;
		table.insert(ret, formatAltName(tgEntry, args.al == &amp;#039;on&amp;#039;, args.allk == &amp;#039;on&amp;#039;, disp, setNowrapAltname, args.engvar))&lt;br /&gt;
	end&lt;br /&gt;
	-- Closing nowrap tag&lt;br /&gt;
	if nowrap == &amp;#039;all&amp;#039; then&lt;br /&gt;
		table.insert(ret, &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Category mentionings (maintenance)&lt;br /&gt;
	if args.addcat or &amp;#039;&amp;#039; == &amp;#039;no&amp;#039; then&lt;br /&gt;
		-- No categorization&lt;br /&gt;
	elseif title:inNamespaces(0) then&lt;br /&gt;
		-- switched off per [[Wikipedia:Categories_for_discussion/Log/2016_December_6#Category:Articles_that_mention_a_specific_track_gauge]]&lt;br /&gt;
		-- 2016-12-19&lt;br /&gt;
		-- table.insert(ret, p.catMentions(tgEntry))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Now sting the table together&lt;br /&gt;
	return table.concat(ret, &amp;#039;&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;br /&gt;
--20161219: maintenance categorisation switched off per CfD&lt;br /&gt;
--20170602: fix bug, show name when al=on&lt;br /&gt;
--20180708: show preview warning when gauge is not in list&lt;br /&gt;
--20190124: with disp=/ (slash) value separator: surround by spaces&lt;br /&gt;
--20210304: add option comma=off (mm only)&lt;/div&gt;</summary>
		<author><name>&gt;Graham87</name></author>
	</entry>
</feed>