Jump to content

Module:For nowiki/sandbox

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Pppery (talk | contribs) at 21:22, 14 October 2018. The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
local p = {}

local function doLoop(frame, values, config, offset, argstosub)
	local code, sep, passto
	local argnum = 0
	if config.passto then
		passto = config.passto
	else
		sep = config[argnum]
		argunm = argnum + 1
	end
	if config.code then
		code = config.code
	else
		code = config[argunm]
		argnum = argnum + 1
	end
	code = mw.text.unstripNoWiki(code)
	offset = offset or argnum
	
	local result = {}
	for i, value in ipairs(args) do
		if i > offset then
			argstosub["i"] = i - offset
			argstosub["1"] = value
			local actualCode = code:gsub("{{{([^{}|]*)|?[^{}]*}}}", argstosub)
			table.insert(result, frame:preprocess(actualCode))
		end
	end
	if passto then
		return frame:expandTemplate{title=passto,args=result}
	else
		return table.concat(result, sep)
	end
end

function p.main(frame)
	local args = frame:getParent().args
	local argstosub = {}
	for key, value in pairs(args) do
		if not tonumber(key) and key ~= "i" and key ~= "count" and key ~= "code" then
			argstosub[key] = value
		end
	end
	local countArg = args.count and tonumber(args.count);
	if countArg then
		offset = 0
		values = {}
		for i = 1, countArg do
		   values[i] = i
		end
	else
		values = args
	end
	return doLoop(frame, values, args, nil, argstosub)
end
function p.template(frame) 
	local offset = tonumber(frame.args.offset) or 0
	return doLoop(frame:getParent(), frame:getParent().args, frame.args, offset, {})
end
return p