Модуль:Multireplace
Перейти к навигации
Перейти к поиску
Для документации этого модуля может быть создана страница Модуль:Multireplace/doc
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