<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wiki.caricature.org/wiki/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="http://wiki.caricature.org/wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3AParameters"/>
	<link rel="alternate" type="text/html" href="http://wiki.caricature.org/wiki/index.php?title=Module:Parameters&amp;action=history"/>
	<updated>2026-06-01T16:28:07Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.34.1</generator>
	<entry>
		<id>http://wiki.caricature.org/wiki/index.php?title=Module:Parameters&amp;diff=4484&amp;oldid=prev</id>
		<title>TheChairman: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="http://wiki.caricature.org/wiki/index.php?title=Module:Parameters&amp;diff=4484&amp;oldid=prev"/>
		<updated>2020-06-03T23:28:56Z</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 class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 23:28, 3 June 2020&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&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>TheChairman</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.caricature.org/wiki/index.php?title=Module:Parameters&amp;diff=4483&amp;oldid=prev</id>
		<title>en&gt;Izkala: Don't sort compare's output</title>
		<link rel="alternate" type="text/html" href="http://wiki.caricature.org/wiki/index.php?title=Module:Parameters&amp;diff=4483&amp;oldid=prev"/>
		<updated>2015-09-14T15:53:08Z</updated>

		<summary type="html">&lt;p&gt;Don&amp;#039;t sort compare&amp;#039;s output&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;lt;!-- text alternative for image; see WP:ALT --&amp;gt;',&lt;br /&gt;
		dlist = 'text alternative for image; see [[WP:ALT]]'},&lt;br /&gt;
	coordinates = {&lt;br /&gt;
		code = '&amp;lt;!-- use {{Coord}} --&amp;gt;',&lt;br /&gt;
		dlist = 'using {{tl|Coord}}'},&lt;br /&gt;
	coords = {&lt;br /&gt;
		code = '&amp;lt;!-- use {{Coord}} --&amp;gt;',&lt;br /&gt;
		dlist = 'using {{tl|Coord}}'},&lt;br /&gt;
	native_name = {&lt;br /&gt;
		code = '&amp;lt;!-- name in local language; if more than one, separate ' ..&lt;br /&gt;
			'using {{Plainlist}} use {{lang}}, and omit native_name_lang --&amp;gt;',&lt;br /&gt;
		dlist = 'name in local language; if more than one, separate ' ..&lt;br /&gt;
			'using {{tl|Plainlist}}, use {{tl|lang}}, and omit {{para|native_name_lang}}'},&lt;br /&gt;
	native_name_lang = {&lt;br /&gt;
		code = '&amp;lt;!-- language two- or three-letter ISO code --&amp;gt;',&lt;br /&gt;
		dlist = 'language two- or three-letter ISO code'},&lt;br /&gt;
	start_date = {&lt;br /&gt;
		code = '&amp;lt;!-- {{Start date|YYYY|MM|DD|df=y}} --&amp;gt;',&lt;br /&gt;
		dlist = 'use {{tlx|Start date|YYYY|MM|DD|df=y}}'},&lt;br /&gt;
	end_date = {&lt;br /&gt;
		code = '&amp;lt;!-- {{End date|YYYY|MM|DD|df=y}} --&amp;gt;',&lt;br /&gt;
		dlist = 'use {{tlx|Start date|YYYY|MM|DD|df=y}}'},&lt;br /&gt;
	url = {&lt;br /&gt;
		code = '&amp;lt;!-- use {{URL|example.com}} --&amp;gt;',&lt;br /&gt;
		dlist = 'using {{tl|URL}}'},&lt;br /&gt;
	website = {&lt;br /&gt;
		code = '&amp;lt;!-- use {{URL|example.com}} --&amp;gt;',&lt;br /&gt;
		dlist = 'using {{tls|URL|example.com}}'},}&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
local removeDuplicates = require('Module:TableTools').removeDuplicates&lt;br /&gt;
local yesno = require('Module:Yesno')&lt;br /&gt;
&lt;br /&gt;
local function makeInvokeFunction(funcName)&lt;br /&gt;
	return function(frame)&lt;br /&gt;
		local getArgs = require('Module:Arguments').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, 'Template'):getContent()&lt;br /&gt;
&lt;br /&gt;
	local parameters = {}&lt;br /&gt;
	for parameter in string.gmatch(source, '{{{(.-)%f[}|&amp;lt;&amp;gt;]') 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;
		'{{#invoke:Check for unknown parameters|check|unknown=' ..&lt;br /&gt;
		'[[Category:Pages using %s with unknown parameters]]|%s}}', title,&lt;br /&gt;
		table.concat(extractParams(args.base), '|'))&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't support printf's &amp;lt;*&amp;gt; to specify the width, apparently&lt;br /&gt;
		local fs = string.format('%%-%ss', 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('| %s = %s\n', s,&lt;br /&gt;
					DEFINITIONS[s] and DEFINITIONS[s].code or '')&lt;br /&gt;
			else&lt;br /&gt;
				return string.format('| %s = \n', 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('Module:Set')&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, '%A', '')))&lt;br /&gt;
			table.insert(paramIndex[&lt;br /&gt;
				string.lower(string.gsub(parameter, '%A', ''))], 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('* %s\n', v) end),&lt;br /&gt;
	strMap(Set.valueIntersection(baseNormParams, otherNormParams),&lt;br /&gt;
		function(v) return string.format('* %s &amp;lt; %s [%s]\n',&lt;br /&gt;
			table.concat(baseNormParams[v], '; '),&lt;br /&gt;
			table.concat(otherNormParams[v], '; '),&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('* %s\n', 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 ('|_template=' .. args._base) or ''&lt;br /&gt;
	return string.format('{{Parameter names example%s|%s}}', title,&lt;br /&gt;
		table.concat(extractParams(args.base), '|'))&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('; %s: %s\n', s,&lt;br /&gt;
					DEFINITIONS[s] and DEFINITIONS[s].dlist or '')&lt;br /&gt;
			else&lt;br /&gt;
				return string.format('; %s: \n', 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('* %s\n', s) end)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.check = makeInvokeFunction('_check')&lt;br /&gt;
p.code = makeInvokeFunction('_code')&lt;br /&gt;
p.compare = makeInvokeFunction('_compare')&lt;br /&gt;
p.demo = makeInvokeFunction('_demo')&lt;br /&gt;
p.dlist = makeInvokeFunction('_dlist')&lt;br /&gt;
p.list = makeInvokeFunction('_list')&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>en&gt;Izkala</name></author>
		
	</entry>
</feed>