Module:Replace
Appearance
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