跳转到内容

模組:TryError

被永久保护的模块
维基百科,自由的百科全书

这是本页的一个历史版本,由A2569875留言 | 贡献2020年2月18日 (二) 08:48 建立内容为“local p={} local lib_arg={}; function p.try(frame) local args, working_frame if frame == mw.getCurrentFrame() then -- We're being calle…”的新页面)编辑。这可能和当前版本存在着巨大的差异。

(差异) ←上一修订 | 最后版本 (差异) | 下一修订→ (差异)
local p={}
local lib_arg={};
function p.try(frame)
	local args, working_frame
    if frame == mw.getCurrentFrame() then
        -- We're being called via #invoke. The args are passed through to the module
        -- from the template page, so use the args that were passed into the template.
        if lib_arg.getArgs == nil then lib_arg = require('Module:Arguments') end
        args = lib_arg.getArgs(frame, {parentFirst=true})
        working_frame = frame
    else
        -- We're being called from another module or from the debug console, so assume
        -- the args are passed in directly.
        args = frame
        working_frame = mw.getCurrentFrame()
        if type(args) ~= type({}) then args = {frame} end
    end
    local input_try = args[1] or args['1']
    local catch_list = {}
    local default_catch = {["value"]="{{{throw|error()}}}", ["exception"]={} }
    for key,value in pairs(args) do
    	local argname = mw.ustring.lower(tostring(key))
    	local exception_data ,checker = mw.ustring.gsub(argname,'^%s*catch%s*%((.-)%)%s*$','%1')
    	if checker > 0 then
    		catch_list[#catch_list+1] = {["value"]=value, ["exception"]=(mw.text.split(exception_data,',') or exception_data)}
    	elseif mw.text.trim(argname) == 'catch' then
    		default_catch.value=value
    	end
    end
    local find_error = ' ' .. input_try .. ' '--/^...$/
    local error_tags = {'strong', 'span', 'p', 'div'}
    local exceptions = {}
    for i=1,#error_tags do
    	local check_tag = error_tags[i]:gsub('^(.-)$','<%1[^>]+error.-</%1>')
    	find_error = mw.ustring.gsub(find_error,check_tag,function(exception)
    		exceptions[#exceptions + 1] = exception
    	return''end)
    end
    
    catch_list[#catch_list+1]=default_catch
    mw.logObject(catch_list)
    mw.logObject(exception)
    return ''
end
return p