模块:Hydrogina/sandbox/Luafunc

来自PRTS
跳转到导航 跳转到搜索

可在模块:Hydrogina/sandbox/Luafunc/doc创建此模块的帮助文档

p={}

function p.match(frame)
	local args = (frame == mw.getCurrentFrame() and frame.args) or frame
	
	str=args[1]
	pattern=args[2]
	local init=1
	
	if(args["str"])then
		str=args["str"]
	end
	
	if(args["pattern"])then
		pattern=args["pattern"]
	end
	
	if(args["init"])then
		init=tonumber(args["init"])
	end
	
	rtn=string.match(str, pattern, init)
	
	if(rtn==nil)then
		rtn=""
	end
	
	return rtn
end

function p.find(frame)
	local args = (frame == mw.getCurrentFrame() and frame.args) or frame
	rtn=""
	
	str=args[1]
	substr=args[2]
	local init=1
	
	if(args["str"])then
		str=args["str"]
	end
	
	if(args["substr"])then
		substr=args["substr"]
	end
	
	if(args["init"])then
		init=tonumber(args["init"])
	end
	
	if(args["iend"])then
		iend=tonumber(args["iend"])
		rtn=string.find (str, substr, init, iend)
	else
		rtn=string.find (str, substr, init)
	end
	
	if(rtn==nil)then
		rtn=""
	end
	
	return rtn
end

function p.gsub(frame)
	local args = (frame == mw.getCurrentFrame() and frame.args) or frame
	
	mainString=args[1]
	findString=args[2]
	replaceString=args[3]
	
	if(args["mainString"])then
		mainString=args["mainString"]
	end
	if(args["findString"])then
		findString=args["findString"]
	end
	if(args["replaceString"])then
		replaceString=args["replaceString"]
	end
	
	if(args["num"])then
		num=tonumber(args["num"])
		rtn=string.gsub(mainString,findString,replaceString,num)
	else
		rtn=string.gsub(mainString,findString,replaceString)
	end
	
	if(rtn==nil)then
		rtn=""
	end
	
	return rtn
end

function p.len(frame)
	local args = (frame == mw.getCurrentFrame() and frame.args) or frame
	
	str=args[1]
	
	if(args["str"])then
		str=args["str"]
	end
	
	rtn=string.len(str)
	
	if(rtn==nil)then
		rtn=""
	end
	
	return rtn
end

function p.preprocess(frame)
	local args = (frame == mw.getCurrentFrame() and frame.args) or frame
	
	str=args[1]
	
	if(args["str"])then
		str=args["str"]
	end
	
	rtn=frame:preprocess( str )
	
	if(rtn==nil)then
		rtn=""
	end
	
	return rtn
end

function p.jsonDecode(frame)
	local args = (frame == mw.getCurrentFrame() and frame.args) or frame
	
	s=args[1]
	
	if(args["s"])then
		s=args["s"]
	end
	
	rtn=mw.text.jsonDecode(s)
	
	if(rtn==nil)then
		rtn=""
	end
	
	rtn=getTableContent( rtn )
	
	return rtn
end

function p.decode(frame)
	local args = (frame == mw.getCurrentFrame() and frame.args) or frame
	
	s=args[1]
	
	if(args["s"])then
		s=args["s"]
	end
	
	rtn=mw.text.decode(s)
	
	if(rtn==nil)then
		rtn=""
	end
	
	return rtn
end

function getTableContent( obj )
    local getIndent, quoteStr, wrapKey, wrapVal, isArray, dumpObj  
    getIndent = function(level)  
        return string.rep("\t", level)  
    end  
    quoteStr = function(str)  
        str = string.gsub(str, "[%c\\\"]", {  
            ["\t"] = "\\t",  
            ["\r"] = "\\r",  
            ["\n"] = "\\n",  
            ["\""] = "\\\"",  
            ["\\"] = "\\\\",  
        })  
        return '"' .. str .. '"'  
    end  
    wrapKey = function(val)  
        if type(val) == "number" then  
            return "[" .. val .. "]"  
        elseif type(val) == "string" then  
            return "[" .. quoteStr(val) .. "]"  
        else  
            return "[" .. tostring(val) .. "]"  
        end  
    end  
    wrapVal = function(val, level)  
        if type(val) == "table" then  
            return dumpObj(val, level)  
        elseif type(val) == "number" then  
            return val  
        elseif type(val) == "string" then  
            return quoteStr(val)  
        else  
            return tostring(val)  
        end  
    end  
    local isArray = function(arr)  
        local count = 0   
        for k, v in pairs(arr) do  
            count = count + 1   
        end   
        for i = 1, count do  
            if arr[i] == nil then  
                return false  
            end   
        end   
        return true, count  
    end  
    dumpObj = function(obj, level)  
        if type(obj) ~= "table" then  
            return wrapVal(obj)  
        end  
        level = level + 1  
        local tokens = {}  
        tokens[#tokens + 1] = "{"  
        local ret, count = isArray(obj)  
        if ret then  
            for i = 1, count do  
                tokens[#tokens + 1] = getIndent(level) .. wrapVal(obj[i], level) .. ","  
            end  
        else  
            for k, v in pairs(obj) do  
                tokens[#tokens + 1] = getIndent(level) .. wrapKey(k) .. " = " .. wrapVal(v, level) .. ","  
            end  
        end  
        tokens[#tokens + 1] = getIndent(level - 1) .. "}"  
        return table.concat(tokens, "\n")  
    end  
    return dumpObj(obj, 0)
end

return p