编辑“Module:Loop”
跳到导航
跳到搜索
该编辑可以被撤销。 请检查下面的对比以核实您想要撤销的内容,然后发布下面的更改以完成撤销。
最后版本 | 您的文本 | ||
第2行: | 第2行: | ||
local getArgs = require('Module:Arguments').getArgs | local getArgs = require('Module:Arguments').getArgs | ||
function pack_inner_loop(loop) | function pack_inner_loop(loop) | ||
-- 给内层循环的do参数包裹<nowiki>标签 | -- 给内层循环的do参数包裹<nowiki>标签 | ||
loop = mw.ustring.gsub(loop, '{{%s-[ | loop = mw.ustring.gsub(loop, '{{%s-[lL][oO][oO][pP]%s-|', '{{#invoke:loop|main|') | ||
return mw.ustring.gsub(loop, '({{#invoke:loop.*)', function(a) | return mw.ustring.gsub(loop, '({{#invoke:loop.*)', function(a) | ||
local i = 1 | local i = 1 | ||
local stack = {} | local stack = {} | ||
local | local do_begin = -1 | ||
local | local do_end = -1 | ||
while (i < mw.ustring.len(a)) do | while (i < mw.ustring.len(a)) do | ||
if do_begin == -1 and mw.ustring.find(a, '^|%s-do%s-=', i) then | |||
_, do_begin = mw.ustring.find(a, '^|%s-do%s-=', i) | |||
do_begin = do_begin + 1 | |||
i = do_begin | |||
end | |||
if do_begin ~= -1 then | |||
if | |||
if mw.ustring.sub(a, i, i + 2) == '{{{' then | if mw.ustring.sub(a, i, i + 2) == '{{{' then | ||
i = i + 3 | i = i + 3 | ||
第40行: | 第32行: | ||
table.remove(stack) | table.remove(stack) | ||
else | else | ||
do_end = i - 1 | |||
break | break | ||
end | end | ||
第48行: | 第40行: | ||
table.remove(stack) | table.remove(stack) | ||
else | else | ||
do_end = i - 1 | |||
break | break | ||
end | end | ||
elseif mw.ustring.sub(a, i, i) == '|' and #stack == 0 then | elseif mw.ustring.sub(a, i, i) == '|' and #stack == 0 then | ||
do_end = i - 1 | |||
break | break | ||
else | else | ||
第61行: | 第53行: | ||
end | end | ||
end | end | ||
if | if do_begin ~= -1 and do_end == -1 then do_end = i - 1 end | ||
if | if do_begin ~= -1 and do_end ~= -1 then | ||
-- mw.log('发现内层循环 <nowiki>'..mw.ustring.sub(a, | -- mw.log('发现内层循环 <nowiki>'..mw.ustring.sub(a, do_begin, do_end)..'</nowiki>') | ||
return mw.ustring.sub(a, 1, | return mw.ustring.sub(a, 1, do_begin - 1)..'<nowiki>'.. | ||
mw.text.trim(mw.ustring.sub(a, | mw.text.trim(mw.ustring.sub(a, do_begin, do_end))..'</nowiki>'.. | ||
pack_inner_loop(mw.ustring.sub(a, | pack_inner_loop(mw.ustring.sub(a, do_end + 1, -1)) | ||
else | else | ||
return a | return a | ||
第73行: | 第65行: | ||
end | end | ||
function | function _main(args, frame) | ||
local name = '' | local name = '' | ||
local _min = 1 | local _min = 1 | ||
第112行: | 第104行: | ||
end | end | ||
function module. | function module.main(frame) | ||
if (frame:getParent() or frame):getTitle() == 'Template:Loop' and | if (frame:getParent() or frame):getTitle() == 'Template:Loop' and | ||
frame.args['do'] == nil then | frame.args['do'] == nil then | ||
第119行: | 第111行: | ||
args = frame.args | args = frame.args | ||
end | end | ||
return | return _main(args, frame:getParent() or frame) | ||
end | end | ||
return module | return module |