Module:Loops

From Mr. Love Wiki
Jump to navigation Jump to search

Documentation for this module may be created at Module:Loops/doc

local loops = {};

local function explode(list, delimiter)
    if delimiter == nil then
		delimiter = "%s"
	end
	t = {}
	for str in string.gmatch(list, "([^" .. delimiter .. "]+)") do
		table.insert(t, str)
	end
	return t
end

function loops.parseList(frame)
	local list, delimiter, template;
	local frameArgs = frame.args;
	local templateArgs = {};
	local templateArgPrefix = 'template!';

	list = frameArgs.list;
	delimiter = frameArgs.delimiter;
	template = frameArgs.template;
	
	for key, value in pairs(frameArgs) do
		if string.find(key, templateArgPrefix) ~= nil then
			templateArgs[string.sub(key, #templateArgPrefix+1)] = value
		end
	end
	
	local result = {}
	local values = explode(list, delimiter)
	
	for key, value in pairs(values) do
		table.insert(templateArgs, 1, value);
		result[#result+1] = frame:expandTemplate{title = template, args = templateArgs };
	end
	
	return table.concat(result);
end

return loops;