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

(Flip compl)
(t/v)
Line 33: Line 33:
  
 
local function normaliseParams(parameters)
 
local function normaliseParams(parameters)
local paramsNorm = {}
+
local paramsNorm, paramIndex = {}, {}
local paramIndex = {}
 
 
for _, parameter in pairs(parameters) do
 
for _, parameter in pairs(parameters) do
 
table.insert(paramsNorm,
 
table.insert(paramsNorm,
Line 54: Line 53:
 
local similar = {}
 
local similar = {}
 
for _, v in pairs(Set.valueIntersection(baseNormParams, otherNormParams)) do
 
for _, v in pairs(Set.valueIntersection(baseNormParams, otherNormParams)) do
table.insert(similar, string.format('%s (%s; %s)',
+
table.insert(similar, string.format('%s < %s (%s)',
v, baseNormParams[v], otherNormParams[v]))
+
baseNormParams[v] or '', otherNormParams[v], v))
 
end
 
end
 
return string.format([[Identical:
 
return string.format([[Identical:
Line 67: Line 66:
 
table.concat(Set.valueIntersection(baseParams, otherParams), '\n* '),
 
table.concat(Set.valueIntersection(baseParams, otherParams), '\n* '),
 
table.concat(similar, '\n* '),
 
table.concat(similar, '\n* '),
table.concat(Set.valueComplement(otherNormParams,
+
table.concat(Set.valueComplement(otherParams, baseParams), '\n* '))
baseNormParams), '\n* '))
 
 
end
 
end
  
Line 82: Line 80:
 
end
 
end
  
p.code   = makeInvokeFunction('_code')
+
p.code = makeInvokeFunction('_code')
 
p.compare = makeInvokeFunction('_compare')
 
p.compare = makeInvokeFunction('_compare')
p.demo   = makeInvokeFunction('_demo')
+
p.demo = makeInvokeFunction('_demo')
p.list   = makeInvokeFunction('_list')
+
p.list = makeInvokeFunction('_list')
  
 
return p
 
return p

Revision as of 08:35, 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 = {}
	for parameter in string.gmatch(source, '{{{(.-)%f[}|<>]') do
		table.insert(parameters, transform(parameter))
	end
	return removeDuplicates(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 function normaliseParams(parameters)
		local paramsNorm, paramIndex = {}, {}
		for _, parameter in pairs(parameters) do
			table.insert(paramsNorm,
				string.lower(string.gsub(parameter, '%A', '')))
			paramIndex[
				string.lower(string.gsub(parameter, '%A', ''))] = parameter
		end

		setmetatable(paramsNorm, {__index = paramIndex})
		return paramsNorm
	end

	local baseParams = extractParams(args.base)
	local otherParams = extractParams(args.other)
	local baseNormParams = normaliseParams(Set.valueComplement(
			otherParams, baseParams))
	local otherNormParams = normaliseParams(otherParams)

	local similar = {}
	for _, v in pairs(Set.valueIntersection(baseNormParams, otherNormParams)) do
		table.insert(similar, string.format('%s < %s (%s)',
			baseNormParams[v] or '', otherNormParams[v], 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(otherParams, baseParams), '\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