Module:parameters/lite/list

From Linguifex
Jump to navigation Jump to search

Documentation for this module may be created at Module:parameters/lite/list/doc

local function clean(x) return x and #x > 0 and x or nil end

-- implements a list parameter, somewhat
return function (args, param, allow_holes, allow_empty)
	local results = {clean(args[param] and mw.text.trim(args[param]))}
	local maximum_index = 0
	local pattern = "^" .. require("Module:string/pattern escape")(param) .. "([0-9]+)$"
	
	for key, value in pairs(args) do
		local index = mw.ustring.match(key, pattern)
		if index then
			index = tonumber(index)
			if index and index > 0 then
				value = value and mw.text.trim(value)
				if not allow_empty then value = clean(value) end
				results[index] = value
				maximum_index = math.max(maximum_index, index)
			end
		end
	end
	
	if maximum_index > 0 then
		if not allow_holes then
			local i = 1
			local j = 1
			while i <= maximum_index do
				if results[i] then
					results[j] = results[i]
					if j < i then results[i] = nil end
					j = j + 1
				end
				i = i + 1
			end
		else
			results.maxindex = maximum_index
		end
	end
	
	return results
end