Módulo:Zona de pruebas/Qwertyytrewqqwerty/MiBucleFor

De Wikipedia, la enciclopedia libre
Este módulo no tiene página de documentación[crear]
p = {}

function p.main(frame)
	local paramPrefix = frame.args['paramPrefix'] or '$'
	local limit = tonumber(frame.args['limit']) or -1
	local lineSep = frame.args[1]
	local sep = frame.args[2]
	if not lineSep or not sep then
		error('Separators were not specified')
	end
	local template = frame.args['call']
	local expression = nil
	if not template then
		expression = frame.args['expr']
		if not expression then
			expression = frame.args[3]
		end
		if not expression then
			error('No expression or template name was specified')
		end
	end
	local content = p.retrieveContent(frame)
	if not content then
		return ''
	end
	return p.forLoop(frame, paramPrefix, limit, lineSep, sep, template, expression, content)
end

function p.forLoop(frame, paramPrefix, limit, lineSep, sep, template, expression, content)
	local result = ''
	for k, line in ipairs(mw.text.split(content, lineSep)) do
		if limit >= 0 and k > limit then
			break
		end
		local targs = mw.text.split(line, sep)
		local lineResult = ''
		if expression then
			lineResult = p.replaceParams(expression, targs, paramPrefix)
		else
			lineResult = frame:expandTemplate{title = template, args = targs}
		end
		result = result .. lineResult
	end
	return result
end

function p.replaceParams(expression, args, paramPrefix)
	for k, v in ipairs(args) do
		expression = string.gsub(expression, paramPrefix .. k, v)
	end
	return expression
end

function p.retrieveContent(frame)
	local page = frame.args['page']
	if page then
		return mw.title.new(page):getContent() 
	elseif frame.args['call'] or frame.args['expr'] then
		return frame.args[3]
	else
		return frame.args[4]
	end
end

return p