Module:ArgsUtil
Jump to navigation
Jump to search
This module has no documentation. If you know how to use this template, please add some.
This module depends on: |
The above documentation is transcluded from Module:ArgsUtil/doc. (edit | history)
local util_text = require('Module:TextUtil')
local util_table = require('Module:TableUtil')
local bool_false = { ['false'] = true, ['no'] = true, [''] = true, ['0'] = true, ['nil'] = true }
local bool_true = { ['true'] = true, ['yes'] = true }
local lang = mw.getLanguage('en')
local p = {}
function p.norm(v)
if not v then
return false
end
local lc = lang:lc(v)
if bool_false[lc] then
return false
elseif bool_true[lc] then
return true
end
return v
end
function p.castAsBool(str)
if not str or bool_false[lang:lc(str)] then
return false
end
return true
end
function p.nilToFalse(val)
-- casts nil as false
-- does not change anything else
-- used if needing to have false but non-nil values in a table
-- for ipairs, util_table.removeFalseEntries, etc
return not not val and val
end
function p.lookupVars(str, lookup_tbl, skipdefault)
-- for rolenames etc. if a default table is supplied, this will be
-- returned with priority over lookup.DEFAULT in the case of no match
local vars = str and lookup_tbl[lang:lc(str)]
if not vars then
if skipdefault then
return nil
end
return lookup_tbl.DEFAULT
end
if type(vars) == 'string' then
vars = lookup_tbl[vars]
end
return vars
end
function p.merge(norm)
local f = mw.getCurrentFrame()
local origArgs = f.args
local parentArgs = f:getParent().args
local args = {}
for k, v in pairs(origArgs) do
v = mw.text.trim(tostring(v))
if norm and v ~= '' or not norm then
args[k] = v
end
end
for k, v in pairs(parentArgs) do
v = mw.text.trim(v)
if norm and v ~= '' or not norm then
args[k] = v
end
end
return args
end
function p.overwrite(origArgs, parentArgs, norm)
if type(origArgs) ~= 'table' then
norm = origArgs
local f = mw.getCurrentFrame()
origArgs = f.args
parentArgs = f:getParent().args
end
local args = {}
for k, v in pairs(parentArgs) do
v = mw.text.trim(v)
if norm and v ~= '' or not norm then
args[k] = v
end
end
for k, v in pairs(origArgs) do
v = mw.text.trim(tostring(v))
if norm and v ~= '' or not norm then
args[k] = v
end
end
return args
end
function p.numberedArgsToTable(args, argname, disallowUnnamedFirst, max)
if not max then max = -1 end
local i = 1
local tbl = {}
if args[argname] and not disallowUnnamedFirst then
tbl[1] = args[argname]
i = 2
end
while args[argname .. i] or i <= max do
tbl[i] = args[argname .. i]
i = i + 1
end
if not next(tbl) then
return nil
end
return tbl
end
function p.numberedArgsToList(args, argname, disallowUnnamedFirst, max, sep, removeEmpty)
local tbl = p.numberedArgsToTable(args, argname, disallowUnnamedFirst, max)
if removeEmpty then
util_table.removeFalseEntries(tbl, max)
elseif max then
for k = 1, max do
tbl[k] = tbl[k] or ''
end
end
return table.concat(tbl, sep or ',')
end
function p.splitAndMap(str, sep, f)
if not sep then
sep = '%s*,%s*'
end
local tbl = util_text.split(str,sep)
if f then
return util_table.mapInPlace(tbl, f)
else
return tbl
end
end
function p.splitMapConcat(str, sep, f, sep2)
if not sep2 then sep2 = '' end
local tbl = p.splitAndMap(str, sep, f)
return table.concat(tbl, sep2)
end
function p.ifArg(arg, display)
if not arg then
return false
end
return display
end
function p.splitArgs(input, fieldlist, sep)
sep = sep or '%s*;;;%s*'
local result = {}
local tbl = util_text.split(input,sep)
for i, v in ipairs(fieldlist) do
if tbl[i] ~= '' then
result[v] = tbl[i]
end
end
return result
end
function p.parseNumber(value)
local result = tonumber(value)
if (result ~= result) then
return nil
end
return result
end
return p