Модуль:Multireplace

Документация

Модуль обеспечивает работу шаблона {{multireplace}}.

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] do 		local change = {pattern = args['?' .. i], repl = args['!' .. i]} 		if not change.repl then 			return frame:expandTemplate{ 				title = 'Error', 				args = { 'Ошибка: непарный аргумент: <code>?' .. (i) .. ' = ' .. 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  return p