Jump to content

Module:Indexed arguments

From Wikisource

require('strict')

local p = {}

local TableTools = require('Module:TableTools')

function p.group_indexed_args(args, opts)
	local indexed_args = {}
	for k, v in pairs(args) do
		local n = string.match(k, '%d+$')
		if n then
			n = tonumber(n)
			indexed_args[n] = indexed_args[n] or {}
			local newk = string.gsub(k, '%d+$', '')
			if newk == '' then
				newk = 1
			end
			indexed_args[n][newk] = indexed_args[n][newk] or v
		end
	end
	indexed_args = TableTools.compressSparseArray(indexed_args)
	
	opts = opts or {}
	for i, alias in ipairs(opts.first_index_aliases or {}) do
		if args[alias] then
			indexed_args[1] = indexed_args[1] or {}
			indexed_args[1][alias] = indexed_args[1][alias] or args[alias]
		end
	end
	
	return indexed_args
end

return p