The wiki has moved!

Visit the new wiki at stationeers-wiki.com The old wiki here at legacy.stationeers-wiki.com will sunset eventually.

Edits made after the 7th of March 6PM EST were NOT carried over to the new server as previously announced right here in this box.

 Actions

Module

Difference between revisions of "Parameters"

From Unofficial Stationeers Wiki

(Testing compare fn)
(Finalise compare)
Line 16: Line 16:
  
 
local parameters = {}
 
local parameters = {}
 +
local paramIndex = {}
 
for parameter in string.gmatch(source, '{{{(.-)%f[}|<>]') do
 
for parameter in string.gmatch(source, '{{{(.-)%f[}|<>]') do
 
table.insert(parameters, transform(parameter))
 
table.insert(parameters, transform(parameter))
 +
paramIndex[transform(parameter)] = parameter
 
end
 
end
return removeDuplicates(parameters)
+
parameters = removeDuplicates(parameters)
 +
setmetatable(parameters, {__index = paramIndex})
 +
 
 +
return parameters
 
end
 
end
  
Line 32: Line 37:
 
local Set = require('Module:Set')
 
local Set = require('Module:Set')
  
local baseParams = extractParams(args.base,
+
local baseParams = extractParams(args.base)
function(s) return string.format('* %s\n', s) end)
 
 
local baseNormParams = extractParams(args.base,
 
local baseNormParams = extractParams(args.base,
function(s) return string.format('* %s\n',
+
function(s) return string.lower(string.gsub(s, '%A', '')) end)
string.gsub(string.lower(s), '%A', '')) end)
+
local otherParams = extractParams(args.other)
local otherParams = extractParams(args.other,
 
function(s) return string.format('* %s\n', s) end)
 
 
local otherNormParams = extractParams(args.other,
 
local otherNormParams = extractParams(args.other,
function(s) return string.format('* %s\n',
+
function(s) return string.lower(string.gsub(s, '%A', '')) end)
string.gsub(string.lower(s), '%A', '')) end)
+
 
 +
local similar = {}
 +
for _, v in pairs(Set.valueIntersection(Set.valueComplement(
 +
baseParams, baseNormParams), otherNormParams)) do
 +
table.insert(similar, string.format('%s (%s; %s)',
 +
v, baseNormParams[v], otherNormParams[v]))
 +
end
  
 
return string.format([[Identical:
 
return string.format([[Identical:
%s
+
* %s
 +
 
 
Similar:
 
Similar:
%s
+
* %s
 +
 
 
Not matched:
 
Not matched:
%s]],
+
* %s]],
table.concat(Set.valueIntersection(baseParams, otherParams)),
+
table.concat(Set.valueIntersection(baseParams, otherParams), '\n* '),
table.concat(Set.valueIntersection(
+
table.concat(similar, '\n* '),
Set.valueComplement(baseParams, baseNormParams), otherNormParams)),
+
table.concat(Set.valueComplement(otherNormParams,
table.concat(Set.valueComplement(otherNormParams, baseNormParams)))
+
baseNormParams), '\n* '))
 
end
 
end
  

Revision as of 07:39, 7 June 2015


-- This module implements [[Template:Parameters]].
-- [SublimeLinter luacheck-globals:mw]

local p = {}

local function makeInvokeFunction(funcName)
	return function(frame)
		local getArgs = require('Module:Arguments').getArgs
		return p[funcName](getArgs(frame))
	end
end

local function extractParams(source, transform)
	local removeDuplicates = require('Module:TableTools').removeDuplicates
	transform = transform or function(s) return s end

	local parameters = {}
	local paramIndex = {}
	for parameter in string.gmatch(source, '{{{(.-)%f[}|<>]') do
		table.insert(parameters, transform(parameter))
		paramIndex[transform(parameter)] = parameter
	end
	parameters = removeDuplicates(parameters)
	setmetatable(parameters, {__index = paramIndex})

	return parameters
end

function p._code(args)
	local title = args._base or mw.title.getCurrentTitle().baseText
	return string.format([[{{%s
%s}}]], title, table.concat(extractParams(args.base,
		function(s) return string.format('| %s = \n', s) end)))
end

function p._compare(args)
	local Set = require('Module:Set')

	local baseParams = extractParams(args.base)
	local baseNormParams = extractParams(args.base,
		function(s) return string.lower(string.gsub(s, '%A', '')) end)
	local otherParams = extractParams(args.other)
	local otherNormParams = extractParams(args.other,
		function(s) return string.lower(string.gsub(s, '%A', '')) end)

	local similar = {}
	for _, v in pairs(Set.valueIntersection(Set.valueComplement(
			baseParams, baseNormParams), otherNormParams)) do
		table.insert(similar, string.format('%s (%s; %s)',
			v, baseNormParams[v], otherNormParams[v]))
	end

	return string.format([[Identical:
* %s

Similar:
* %s

Not matched:
* %s]],
		table.concat(Set.valueIntersection(baseParams, otherParams), '\n* '),
		table.concat(similar, '\n* '),
		table.concat(Set.valueComplement(otherNormParams,
			baseNormParams), '\n* '))
end

function p._demo(args)
	local title = args._base and ('|_template=' .. args._base) or ''
	return string.format('{{Parameter names example%s|%s}}', title,
		table.concat(extractParams(args.base), '|'))
end

function p._list(args)
	return table.concat(extractParams(args.base,
		function(s) return string.format('* %s\n', s) end))
end

p.code    = makeInvokeFunction('_code')
p.compare = makeInvokeFunction('_compare')
p.demo    = makeInvokeFunction('_demo')
p.list    = makeInvokeFunction('_list')

return p