<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://stationeers-wiki.com/index.php?action=history&amp;feed=atom&amp;title=Module%3AParameters</id>
	<title>Module:Parameters - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stationeers-wiki.com/index.php?action=history&amp;feed=atom&amp;title=Module%3AParameters"/>
	<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Module:Parameters&amp;action=history"/>
	<updated>2026-04-05T03:59:31Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Module:Parameters&amp;diff=4682&amp;oldid=prev</id>
		<title>Kalnook: 33 revisions imported</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Module:Parameters&amp;diff=4682&amp;oldid=prev"/>
		<updated>2018-07-14T20:00:53Z</updated>

		<summary type="html">&lt;p&gt;33 revisions imported&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- This module implements [[Template:Parameters]].&lt;br /&gt;
-- [SublimeLinter luacheck-globals:mw]&lt;br /&gt;
&lt;br /&gt;
local DEFINITIONS = {&lt;br /&gt;
	alt = {&lt;br /&gt;
		code = &amp;#039;&amp;lt;!-- text alternative for image; see WP:ALT --&amp;gt;&amp;#039;,&lt;br /&gt;
		dlist = &amp;#039;text alternative for image; see [[WP:ALT]]&amp;#039;},&lt;br /&gt;
	coordinates = {&lt;br /&gt;
		code = &amp;#039;&amp;lt;!-- use {{Coord}} --&amp;gt;&amp;#039;,&lt;br /&gt;
		dlist = &amp;#039;using {{tl|Coord}}&amp;#039;},&lt;br /&gt;
	coords = {&lt;br /&gt;
		code = &amp;#039;&amp;lt;!-- use {{Coord}} --&amp;gt;&amp;#039;,&lt;br /&gt;
		dlist = &amp;#039;using {{tl|Coord}}&amp;#039;},&lt;br /&gt;
	native_name = {&lt;br /&gt;
		code = &amp;#039;&amp;lt;!-- name in local language; if more than one, separate &amp;#039; ..&lt;br /&gt;
			&amp;#039;using {{Plainlist}} use {{lang}}, and omit native_name_lang --&amp;gt;&amp;#039;,&lt;br /&gt;
		dlist = &amp;#039;name in local language; if more than one, separate &amp;#039; ..&lt;br /&gt;
			&amp;#039;using {{tl|Plainlist}}, use {{tl|lang}}, and omit {{para|native_name_lang}}&amp;#039;},&lt;br /&gt;
	native_name_lang = {&lt;br /&gt;
		code = &amp;#039;&amp;lt;!-- language two- or three-letter ISO code --&amp;gt;&amp;#039;,&lt;br /&gt;
		dlist = &amp;#039;language two- or three-letter ISO code&amp;#039;},&lt;br /&gt;
	start_date = {&lt;br /&gt;
		code = &amp;#039;&amp;lt;!-- {{Start date|YYYY|MM|DD|df=y}} --&amp;gt;&amp;#039;,&lt;br /&gt;
		dlist = &amp;#039;use {{tlx|Start date|YYYY|MM|DD|df=y}}&amp;#039;},&lt;br /&gt;
	end_date = {&lt;br /&gt;
		code = &amp;#039;&amp;lt;!-- {{End date|YYYY|MM|DD|df=y}} --&amp;gt;&amp;#039;,&lt;br /&gt;
		dlist = &amp;#039;use {{tlx|Start date|YYYY|MM|DD|df=y}}&amp;#039;},&lt;br /&gt;
	url = {&lt;br /&gt;
		code = &amp;#039;&amp;lt;!-- use {{URL|example.com}} --&amp;gt;&amp;#039;,&lt;br /&gt;
		dlist = &amp;#039;using {{tl|URL}}&amp;#039;},&lt;br /&gt;
	website = {&lt;br /&gt;
		code = &amp;#039;&amp;lt;!-- use {{URL|example.com}} --&amp;gt;&amp;#039;,&lt;br /&gt;
		dlist = &amp;#039;using {{tls|URL|example.com}}&amp;#039;},}&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
local removeDuplicates = require(&amp;#039;Module:TableTools&amp;#039;).removeDuplicates&lt;br /&gt;
local yesno = require(&amp;#039;Module:Yesno&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local function makeInvokeFunction(funcName)&lt;br /&gt;
	return function(frame)&lt;br /&gt;
		local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
		return p[funcName](getArgs(frame, {removeBlanks = false}))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function extractParams(page)&lt;br /&gt;
	local source = mw.title.new(page, &amp;#039;Template&amp;#039;):getContent()&lt;br /&gt;
&lt;br /&gt;
	local parameters = {}&lt;br /&gt;
	for parameter in string.gmatch(source, &amp;#039;{{{(.-)%f[}|&amp;lt;&amp;gt;]&amp;#039;) do&lt;br /&gt;
		table.insert(parameters, parameter)&lt;br /&gt;
	end&lt;br /&gt;
	return removeDuplicates(parameters)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function map(tbl, transform)&lt;br /&gt;
	local returnTable = {}&lt;br /&gt;
	for k, v in pairs(tbl) do&lt;br /&gt;
		returnTable[k] = transform(v)&lt;br /&gt;
	end&lt;br /&gt;
	return returnTable&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function strMap(tbl, transform)&lt;br /&gt;
	local returnTable = map(tbl, transform)&lt;br /&gt;
	return table.concat(returnTable)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._check(args)&lt;br /&gt;
	local title = args._base or mw.title.getCurrentTitle().fullText&lt;br /&gt;
	return string.format(&lt;br /&gt;
		&amp;#039;{{#invoke:Check for unknown parameters|check|unknown=&amp;#039; ..&lt;br /&gt;
		&amp;#039;[[Category:Pages using %s with unknown parameters]]|%s}}&amp;#039;, title,&lt;br /&gt;
		table.concat(extractParams(args.base), &amp;#039;|&amp;#039;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._code(args)&lt;br /&gt;
	local definitions = yesno(args.definitions)&lt;br /&gt;
	local pad = yesno(args.pad)&lt;br /&gt;
&lt;br /&gt;
	local parameters = extractParams(args.base)&lt;br /&gt;
	-- Space-pad the parameters to align the equal signs vertically&lt;br /&gt;
	if pad then&lt;br /&gt;
		local lengthPerPara = map(parameters, function (parameter)&lt;br /&gt;
			return string.len(parameter) end)&lt;br /&gt;
		-- Lua doesn&amp;#039;t support printf&amp;#039;s &amp;lt;*&amp;gt; to specify the width, apparently&lt;br /&gt;
		local fs = string.format(&amp;#039;%%-%ss&amp;#039;, math.max(unpack(lengthPerPara)))&lt;br /&gt;
		for i, parameter in pairs(parameters) do&lt;br /&gt;
			parameters[i] = string.format(fs, parameter)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local title = args._base or mw.title.getCurrentTitle().baseText&lt;br /&gt;
	return string.format([[{{%s&lt;br /&gt;
%s}}]], title, strMap(parameters,&lt;br /&gt;
		function(s)&lt;br /&gt;
			if definitions then&lt;br /&gt;
				return string.format(&amp;#039;| %s = %s\n&amp;#039;, s,&lt;br /&gt;
					DEFINITIONS[s] and DEFINITIONS[s].code or &amp;#039;&amp;#039;)&lt;br /&gt;
			else&lt;br /&gt;
				return string.format(&amp;#039;| %s = \n&amp;#039;, s)&lt;br /&gt;
			end&lt;br /&gt;
		end))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._compare(args)&lt;br /&gt;
	local Set = require(&amp;#039;Module:Set&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	local function normaliseParams(parameters)&lt;br /&gt;
		local paramsNorm = {}&lt;br /&gt;
		-- Prepare a key lookup metatable, which will hold the original&lt;br /&gt;
		-- parameter names for each normalised parameter, e.g.&lt;br /&gt;
		-- [test] = {TEST, Test}. paramIndex functions like a Python&lt;br /&gt;
		-- defaultdict, where the default is a table.&lt;br /&gt;
		local paramIndex = setmetatable({}, {__index = function(t, k)&lt;br /&gt;
			if not rawget(t, k) then&lt;br /&gt;
				rawset(t, k, {})&lt;br /&gt;
			end&lt;br /&gt;
			return rawget(t, k)&lt;br /&gt;
		end})&lt;br /&gt;
		for _, parameter in pairs(parameters) do&lt;br /&gt;
			table.insert(paramsNorm,&lt;br /&gt;
				string.lower(string.gsub(parameter, &amp;#039;%A&amp;#039;, &amp;#039;&amp;#039;)))&lt;br /&gt;
			table.insert(paramIndex[&lt;br /&gt;
				string.lower(string.gsub(parameter, &amp;#039;%A&amp;#039;, &amp;#039;&amp;#039;))], parameter)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		paramsNorm = removeDuplicates(paramsNorm)&lt;br /&gt;
		-- Overload key lookup in paramsNorm. While [[Module:Set]] will&lt;br /&gt;
		-- operate on the table (which is to say, the normalised parameters&lt;br /&gt;
		-- array), key access will be by way of the paramIndex metatable.&lt;br /&gt;
		setmetatable(paramsNorm, {__index = paramIndex})&lt;br /&gt;
		return paramsNorm&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local baseParams = extractParams(args.base)&lt;br /&gt;
	local otherParams = extractParams(args.other)&lt;br /&gt;
	local baseNormParams = normaliseParams(Set.valueComplement(&lt;br /&gt;
			otherParams, baseParams))&lt;br /&gt;
	local otherNormParams = normaliseParams(otherParams)&lt;br /&gt;
&lt;br /&gt;
	return string.format([[Identical:&lt;br /&gt;
%s&lt;br /&gt;
Similar:&lt;br /&gt;
%s&lt;br /&gt;
Disparate:&lt;br /&gt;
%s]],&lt;br /&gt;
	strMap(Set.valueIntersection(baseParams, otherParams),&lt;br /&gt;
		function(v) return string.format(&amp;#039;* %s\n&amp;#039;, v) end),&lt;br /&gt;
	strMap(Set.valueIntersection(baseNormParams, otherNormParams),&lt;br /&gt;
		function(v) return string.format(&amp;#039;* %s &amp;lt; %s [%s]\n&amp;#039;,&lt;br /&gt;
			table.concat(baseNormParams[v], &amp;#039;; &amp;#039;),&lt;br /&gt;
			table.concat(otherNormParams[v], &amp;#039;; &amp;#039;),&lt;br /&gt;
			v)&lt;br /&gt;
		end),&lt;br /&gt;
	strMap(Set.valueComplement(otherNormParams, baseNormParams),&lt;br /&gt;
		function(v) return strMap(baseNormParams[v],&lt;br /&gt;
			function(s) return string.format(&amp;#039;* %s\n&amp;#039;, s) end)&lt;br /&gt;
		end))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._demo(args)&lt;br /&gt;
	local title = args._base and (&amp;#039;|_template=&amp;#039; .. args._base) or &amp;#039;&amp;#039;&lt;br /&gt;
	return string.format(&amp;#039;{{Parameter names example%s|%s}}&amp;#039;, title,&lt;br /&gt;
		table.concat(extractParams(args.base), &amp;#039;|&amp;#039;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._dlist(args)&lt;br /&gt;
	local definitions = yesno(args.definitions, true)&lt;br /&gt;
	return strMap(extractParams(args.base),&lt;br /&gt;
		function(s)&lt;br /&gt;
			if definitions then&lt;br /&gt;
				return string.format(&amp;#039;; %s: %s\n&amp;#039;, s,&lt;br /&gt;
					DEFINITIONS[s] and DEFINITIONS[s].dlist or &amp;#039;&amp;#039;)&lt;br /&gt;
			else&lt;br /&gt;
				return string.format(&amp;#039;; %s: \n&amp;#039;, s)&lt;br /&gt;
			end&lt;br /&gt;
		end)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._list(args)&lt;br /&gt;
	return strMap(extractParams(args.base),&lt;br /&gt;
		function(s) return string.format(&amp;#039;* %s\n&amp;#039;, s) end)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.check = makeInvokeFunction(&amp;#039;_check&amp;#039;)&lt;br /&gt;
p.code = makeInvokeFunction(&amp;#039;_code&amp;#039;)&lt;br /&gt;
p.compare = makeInvokeFunction(&amp;#039;_compare&amp;#039;)&lt;br /&gt;
p.demo = makeInvokeFunction(&amp;#039;_demo&amp;#039;)&lt;br /&gt;
p.dlist = makeInvokeFunction(&amp;#039;_dlist&amp;#039;)&lt;br /&gt;
p.list = makeInvokeFunction(&amp;#039;_list&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Kalnook</name></author>
	</entry>
</feed>