Jump to content

Module:Replace

From SiIvaGunner Wiki

This module implements {{Replace}}.


local p = {}
local lib = require('Module:Feature')
local ie = lib.isEmpty

function p.main(frame)
	local args = require('Module:Arguments').getArgs(frame, {
		parentFirst = true,
		wrapper = { 'Template:Replace' }
	})
	return p._main(args)
end

function p._main(args)
	local inputString = args[1] or nil
	local search = args[2] or args.s1 or nil
	local replace = args[3] or args.r1 or ''

	-- argument validation
	if ie(inputString) then
		return ''
	end
	if ie(search) then
		return inputstring
	end
	
	if args.unstrip then
		inputString = mw.text.unstrip(inputString)
	end
	
	if args[4] or args.s2 then
		local y = 2
		while args[y] or args['s' .. y/2] do
			inputString = p.Replace(inputString, (args[y] or args['s'..y/2]), (args[y+1] or args['r'..y/2] or ''), (args.n or args['n'..y/2]))
			y = y + 2
		end
	else
		inputString = p.Replace(inputString, search, replace)
	end
	return inputString
end

function p.Replace(str, search, replace, num)
	-- replace key terms
	search = search:gsub('{space}', ' ')
	replace = replace:gsub('{space}', ' '):gsub('{newline}', '<br />')

	-- result
	if num then
		local nums = {}
		local curr = 0
		for n in lib.gsplit(num, ',') do 
			if tonumber(n)~=nil then nums[tonumber(n)] = true end
		end
		str = str:gsub(search, function()
			curr = curr + 1
			if nums[curr] then return replace
			else return false end
		end)
		return str
	else
		return str:gsub(search, replace)
	end
end

return p

Debug data: