模块:Hydrogina/sandbox/Luafunc
跳转到导航
跳转到搜索
可在模块: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