local export = {}

-- index_limit: parameters larger than this can't be specified as numbered
-- parameters. This is so that invocations of {{ifmatch}} like the following work:
-- {{ifmatch|s|pattern|if_true|if_false}}
function export._getParameters(frame_args, arg_list, index_limit)
	local new_args = {};
	local index = 1;
	local value;
	
	for _, arg in ipairs(arg_list) do
		value = frame_args[arg]
		if value == nil and index <= index_limit then
			value = frame_args[index];
			index = index + 1;
		end
		new_args[arg] = value;
	end
	
	return new_args;
end


function export.ifmatch_helper(frame)
	local new_args = export._getParameters(
		frame:getParent().args,
		{'s', 'pattern', 'start', 'plain', 'unicode'},
		2
	)
	local s = assert(new_args.s)
	local pattern = assert(new_args.pattern)
	local start = new_args.start and math.floor(assert(tonumber(newargs.start), "start should be a number")) or 1
	local yesno = require('Module:yesno')
	local plain = yesno(new_args.plain)
	local unicode = new_args.unicode
	if unicode then
		unicode = yesno(unicode)
	else
		unicode = true
	end
	-- If plain is true, mw.ustring.find behaves like string.find and there is
	-- no point in potentially slowing down matching by using mw.ustring.find.
	if plain then
		unicode = false
	end
	local find = unicode and mw.ustring.find or string.find
	return find(s, pattern, start, plain) and '1' or ''
end

return export