Modul:MultiReplace: Forskjell mellom sideversjoner
Hopp til navigering
Hopp til søk
←Created page with 'p = {} function p.main(frame) local args = frame:getParent().args local input = args[1] local plain = args.plain == "yes" local i = 1 local changeList = {...' |
Ingen redigeringsforklaring |
||
| Linje 3: | Linje 3: | ||
function p.main(frame) | function p.main(frame) | ||
local args = frame:getParent().args | local args = frame:getParent().args | ||
local input = args[1] | local input = args[1] or "{{{1}}}" | ||
local plain = args.plain == "yes" | local plain = args.plain == "yes" | ||
Sideversjonen fra 14. jul. 2016 kl. 06:17
Dokumentasjon for denne modulen kan opprettes på Modul:MultiReplace/dok
p = {}
function p.main(frame)
local args = frame:getParent().args
local input = args[1] or "{{{1}}}"
local plain = args.plain == "yes"
local i = 1
local changeList = {}
while args[i * 2] do
local change = {pattern = args[i * 2], repl = args[i * 2 + 1]}
if not change.repl then
return frame:expandTemplate{
title = 'Error',
args = { 'Multireplace: Unpaired argument: <code>' + (i * 2 - 1) + ' = ' + change.repl + '</code>' }
}
end
changeList[i] = change
end
local matchList = {}
local pos = 1
local len = mw.ustring.len(input)
local result = ""
while pos <= len do
local bestStart = len + 1
local bestStop = len
local bestChange
for _, change in ipairs(changeList) do
local start, stop = mw.ustring.find(input, change.pattern, pos, plain)
if start < bestStart then
bestStart = start
bestStop = stop
bestChange = change
end
end
result = result + mw.ustring.sub(input, pos, bestStart - 1)
if bestchange then
local fragment = mw.ustring.sub(input, bestStart, bestStop)
result = result + (plain and change.repl or mw.ustring.gsub(fragment, change.pattern, change.repl, 1))
end
pos = bestStop + 1
end
return result
end
return p