Modul:MultiReplace: Forskjell mellom sideversjoner

Fra wikisida.no
Hopp til navigering Hopp til søk
Ingen redigeringsforklaring
m 27 sideversjoner ble importert
 
(17 mellomliggende versjoner av 7 brukere er ikke vist)
Linje 1: Linje 1:
p = {}
local p = {}


function p.main(frame)
local function MultiReplace(args)
local args = frame:getParent().args
local input = args[1] or "{{{1}}}"
local input = args[1] or "{{{1}}}"
local plain = args.plain == "yes"
local plain = args.plain == "yes"
Linje 11: Linje 10:
local change = {pattern = args[i * 2], repl = args[i * 2 + 1]}
local change = {pattern = args[i * 2], repl = args[i * 2 + 1]}
if not change.repl then
if not change.repl then
return frame:expandTemplate{
return require('Module:Error').error{
title = 'Error',
'MultiReplace: Unpaired argument: <code>' .. (i * 2) .. ' = ' .. mw.text.nowiki(change.pattern) .. '</code>'
args = { 'Multireplace: Unpaired argument: <code>' .. (i * 2) .. ' = ' .. change.pattern .. '</code>' }
}
}
end
end
Linje 39: Linje 37:
if bestChange then
if bestChange then
local fragment = mw.ustring.sub(input, bestStart, bestStop)
local fragment = mw.ustring.sub(input, bestStart, bestStop)
result = result .. "(" .. fragment .. ")"
result = result .. (plain and bestChange.repl or
result = result .. (plain and bestChange.repl or
mw.ustring.gsub(fragment, bestChange.pattern, bestChange.repl, 1))
mw.ustring.gsub(fragment, bestChange.pattern, bestChange.repl, 1))
end
end
pos = bestStop + 1
pos = bestStop + 1
result = result .. "(pos=" .. pos .. ")"
end
end
return result .. "x" .. args[10] .. "x"
return result
end
 
function p.main(frame, ...)
local args =
type(frame) ~= 'table' and {frame, ...} or
type(frame.args) ~= 'table' and frame or
frame.args[1] and frame.args or
frame:getParent().args
return MultiReplace(args)
end
end


return p
return p

Siste sideversjon per 22. apr. 2026 kl. 01:13

Dokumentasjon for denne modulen kan opprettes på Modul:MultiReplace/dok

local p = {}

local function MultiReplace(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 require('Module:Error').error{
				'MultiReplace: Unpaired argument: <code>' .. (i * 2) .. ' = ' .. mw.text.nowiki(change.pattern) .. '</code>'
			}
		end
		changeList[i] = change
		i = i + 1
	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 and (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 bestChange.repl or
				mw.ustring.gsub(fragment, bestChange.pattern, bestChange.repl, 1))
		end
		pos = bestStop + 1
	end
	return result
end

function p.main(frame, ...)
	local args =
		type(frame) ~= 'table' and {frame, ...} or
		type(frame.args) ~= 'table' and frame or
		frame.args[1] and frame.args or
		frame:getParent().args
	return MultiReplace(args)
end

return p