模块:VarsUtil
此模块的文档可以在模块:VarsUtil/doc创建
local util_args = require ('Module:ArgsUtil')
local p = {}
function p.getVar(var)
local val = mw.getCurrentFrame():callParserFunction('#var', var)
if val == '' then
return nil
end
return val
end
function p.getBool(var)
local val = p.getVar(var)
return util_args.castAsBool(val)
end
function p.setBool(var, val)
local bool = util_args.castAsBool(val)
if bool then
p.setVar(var, 'Yes')
else
p.setVar(var, 'No')
end
return bool
end
function p.setVar(var, val)
mw.getCurrentFrame():callParserFunction('#vardefine:' .. var, val)
return val
end
function p.setVarOnlyIf(var, val)
if not val then return end
p.setVar(var, val)
end
function p.getGlobalIndex(name)
local val = p.getVar('luaGlobalIndex' .. name)
return tonumber(val or 0) or 0
end
function p.setGlobalIndex(name)
local n = p.getGlobalIndex(name) + 1
p.setVar('luaGlobalIndex' .. name, n)
return n
end
function p.resetGlobalIndex(name, val)
val = val or 0
p.setVar('luaGlobalIndex' .. name, val)
return val
end
function p.appendToList(name, val, sep)
-- this is just for helping to debug and shouldn't actually be used ever probably
sep = sep or ', '
local old_val = p.getVar(name) or ''
p.setVar(name, old_val .. sep .. val)
end
function p.log(val)
if type(val) == 'table' then
p.logObject(val)
return
end
p.appendToList('log', tostring(val))
end
function p.logObject(val)
local tbl = {}
for k, v in pairs(val) do
tbl[#tbl+1] = k .. ': ' .. tostring(v)
end
p.appendToList('log', table.concat(tbl,', '))
end
function p.clearAll(tbl)
for _, v in ipairs(tbl) do
p.setVar(v, '')
end
end
function p.setTypedVar(var, val)
local val_to_store = binser.serialize(val)
p.setVar(var, val_to_store)
end
function p.getTypedVar(var)
local val = p.getVar(var)
if not val then
return nil
end
return binser.deserialize(val)[1]
end
function p.setObject(var, val)
local val_to_store = binser.serialize(val)
p.setVar(var, val_to_store)
end
function p.getObject(var)
local val = p.getVar(var)
if not val then
return nil
end
return binser.deserialize(val)[1]
end
return p