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

Parameters

From Unofficial Stationeers Wiki

Revision as of 07:39, 7 June 2015 by Izkala (talk) (Finalise compare)

-- 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