Материал из Википедии ? свободной энциклопедии
Перейти к навигации
Перейти к поиску
| Этот модуль оценён как
готовый к использованию
. Предполагается, что все баги устранены и он готов для широкого использования. Его можно указывать на справочных страницах и рекомендовать к использованию новым участникам. Для его изменения и тестирования, пожалуйста,
используйте песочницу
.
|
Модуль обеспечивает работу шаблона
{{
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