Fortnite Esports Wiki
m (Syncing content across wikis)
Ispoonz (talk | contribs)
No edit summary
 
(5 intermediate revisions by 2 users not shown)
Line 1: Line 1:
  +
local util_map = require('Module:MapUtil')
 
local util_text = require('Module:TextUtil')
 
local util_text = require('Module:TextUtil')
 
local util_table = require('Module:TableUtil')
 
local util_table = require('Module:TableUtil')
Line 8: Line 9:
   
 
local p = {}
 
local p = {}
  +
local h = {}
  +
  +
--- LEGACY FUNCTIONS ---
 
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 str then return nil end
  +
if not sep2 then sep2 = '' end
 
local tbl = p.splitAndMap(str, sep, f)
 
return table.concat(tbl, sep2)
 
end
  +
-----------------------
   
 
function p.norm(v)
 
function p.norm(v)
Line 23: Line 46:
   
 
function p.castAsBool(str)
 
function p.castAsBool(str)
  +
if type(str) == 'boolean' then return str end
 
if not str or bool_false[lang:lc(str)] then
 
if not str or bool_false[lang:lc(str)] then
 
return false
 
return false
 
end
 
end
 
return true
 
return true
 
end
  +
  +
function p.isDefined(str)
  +
if not str then return false end
  +
return true
 
end
  +
  +
function p.boolToStringYN(str)
  +
if str then return 'Yes' end
  +
return 'No'
 
end
  +
  +
function p.boolToStringTF(str)
  +
if str then return 'True' end
  +
return 'False'
 
end
 
end
   
Line 49: Line 88:
 
if type(vars) == 'string' then
 
if type(vars) == 'string' then
 
vars = lookup_tbl[vars]
 
vars = lookup_tbl[vars]
  +
if type(vars) == 'string' then
  +
error(('Error in lookup module for input %s'):format(str))
 
end
 
end
 
end
 
return vars
 
return vars
 
end
 
end
   
function p.merge(norm)
+
function p.merge()
 
local f = mw.getCurrentFrame()
 
local f = mw.getCurrentFrame()
 
local origArgs = f.args
 
local origArgs = f.args
Line 62: Line 104:
 
for k, v in pairs(origArgs) do
 
for k, v in pairs(origArgs) do
 
v = mw.text.trim(tostring(v))
 
v = mw.text.trim(tostring(v))
if norm and v ~= '' or not norm then
+
if v ~= '' then
 
args[k] = v
 
args[k] = v
 
end
 
end
Line 69: Line 111:
 
for k, v in pairs(parentArgs) do
 
for k, v in pairs(parentArgs) do
 
v = mw.text.trim(v)
 
v = mw.text.trim(v)
if norm and v ~= '' or not norm then
+
if v ~= '' then
 
args[k] = v
 
args[k] = v
 
end
 
end
Line 77: Line 119:
 
end
 
end
   
function p.overwrite(norm)
+
function p.mergeKeepEmpty()
 
local f = mw.getCurrentFrame()
 
local f = mw.getCurrentFrame()
 
local origArgs = f.args
 
local origArgs = f.args
Line 83: Line 125:
   
 
local args = {}
 
local args = {}
  +
  +
for k, v in pairs(origArgs) do
  +
v = mw.text.trim(tostring(v))
 
args[k] = v
 
end
 
 
 
for k, v in pairs(parentArgs) do
 
for k, v in pairs(parentArgs) do
 
v = mw.text.trim(v)
 
v = mw.text.trim(v)
 
args[k] = v
if norm and v ~= '' or not norm then
 
  +
end
args[k] = v
 
  +
end
 
  +
return args
  +
end
  +
  +
function p.overwrite()
  +
local f = mw.getCurrentFrame()
  +
local origArgs = f.args
  +
local parentArgs = f:getParent().args
  +
  +
local args = {}
  +
  +
for k, v in pairs(parentArgs) do
  +
v = mw.text.trim(v)
  +
args[k] = v
 
end
 
end
 
 
 
for k, v in pairs(origArgs) do
 
for k, v in pairs(origArgs) do
 
v = mw.text.trim(tostring(v))
 
v = mw.text.trim(tostring(v))
  +
args[k] = v
if norm and v ~= '' or not norm then
 
args[k] = v
 
end
 
 
end
 
end
 
 
  +
return args
  +
end
  +
  +
function p.original()
  +
local f = mw.getCurrentFrame()
  +
local origArgs = f.args
  +
  +
local args = {}
  +
  +
for k, v in pairs(origArgs) do
  +
v = mw.text.trim(tostring(v))
  +
args[k] = v
  +
end
  +
 
return args
 
return args
 
end
 
end
Line 117: Line 189:
 
end
 
end
 
return tbl
 
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
 
end
   
Line 156: Line 198:
 
end
 
end
   
function p.splitArgs(input, fieldlist, sep)
+
function p.splitArgs(input, fieldlist, sep, outersep)
  +
-- outersep 99.9% of the time is going to be nil here, but on the off chance
sep = sep or '%s*;;;%s*'
 
  +
-- that we have to specify it, it's important to make it available
  +
-- so yeah it's shitty that we're switching arg order
  +
-- but blame lua for not having named params zzzzzzzzzzzz
  +
return p.splitArgsArray(input, fieldlist, outersep, sep)[1]
  +
end
  +
  +
function p.splitArgsArray(input, fieldlist, outersep, innersep)
  +
if not input or input == '' then return {} end
 
outersep = outersep or '%s*:::%s*'
  +
local ret = util_map.split(input, outersep, h.splitArgs, fieldlist, innersep)
  +
return ret
  +
end
  +
  +
function h.splitArgs(input, fieldlist, sep)
  +
if not input or input == '' then return end
  +
sep = (sep and ('%s*' .. sep .. '%s*')) or '%s*;;;%s*'
 
local result = {}
 
local result = {}
 
local inputTbl = util_text.split(input,sep)
 
local inputTbl = util_text.split(input,sep)
Line 169: Line 227:
 
end
 
end
 
return result
 
return result
  +
end
  +
  +
function p.isSplitArg(input)
  +
if not input then return false end
  +
return input:find(';;;')
  +
end
  +
  +
function p.strOrTitle(str)
  +
return str or mw.title.getCurrentTitle().rootText
  +
end
  +
  +
function p.require(n, ...)
  +
local params = {...}
  +
local numberSpecified = util_table.generalLength(params)
  +
if numberSpecified < n then
  +
local traceback = debug.traceback('', 2)
  +
relevantTraceback = util_text.split(traceback, '\n')[3]
  +
error(('Missing params in %s! %s expected, %s non-nil'):format(
  +
relevantTraceback,
  +
n,
  +
numberSpecified
  +
))
  +
end
 
end
 
end
   

Latest revision as of 19:29, 27 December 2020

Edit the documentation or categories for this module.


local util_map = require('Module:MapUtil')
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 = {}
local h = {}

--- LEGACY FUNCTIONS ---
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 str then return nil end
	if not sep2 then sep2 = '' end
	local tbl = p.splitAndMap(str, sep, f)
	return table.concat(tbl, sep2)
end
-----------------------

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 type(str) == 'boolean' then return str end
	if not str or bool_false[lang:lc(str)] then
		return false
	end
	return true
end

function p.isDefined(str)
	if not str then return false end
	return true
end

function p.boolToStringYN(str)
	if str then return 'Yes' end
	return 'No'
end

function p.boolToStringTF(str)
	if str then return 'True' end
	return 'False'
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]
		if type(vars) == 'string' then
			error(('Error in lookup module for input %s'):format(str))
		end
	end
	return vars
end

function p.merge()
	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 v ~= '' then
			args[k] = v
		end
	end
	
	for k, v in pairs(parentArgs) do
		v = mw.text.trim(v)
		if v ~= '' then
			args[k] = v
		end
	end
	
	return args
end

function p.mergeKeepEmpty()
	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))
		args[k] = v
	end
	
	for k, v in pairs(parentArgs) do
		v = mw.text.trim(v)
		args[k] = v
	end
	
	return args
end

function p.overwrite()
	local f = mw.getCurrentFrame()
	local origArgs = f.args
	local parentArgs = f:getParent().args

	local args = {}
	
	for k, v in pairs(parentArgs) do
		v = mw.text.trim(v)
		args[k] = v
	end
	
	for k, v in pairs(origArgs) do
		v = mw.text.trim(tostring(v))
		args[k] = v
	end
	
	return args
end

function p.original()
	local f = mw.getCurrentFrame()
	local origArgs = f.args

	local args = {}
	
	for k, v in pairs(origArgs) do
		v = mw.text.trim(tostring(v))
		args[k] = v
	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.ifArg(arg, display)
	if not arg then
		return false
	end
	return display
end

function p.splitArgs(input, fieldlist, sep, outersep)
	-- outersep 99.9% of the time is going to be nil here, but on the off chance
	-- that we have to specify it, it's important to make it available
	-- so yeah it's shitty that we're switching arg order
	-- but blame lua for not having named params zzzzzzzzzzzz
	return p.splitArgsArray(input, fieldlist, outersep, sep)[1]
end

function p.splitArgsArray(input, fieldlist, outersep, innersep)
	if not input or input == '' then return {} end
	outersep = outersep or '%s*:::%s*'
	local ret = util_map.split(input, outersep, h.splitArgs, fieldlist, innersep)
	return ret
end

function h.splitArgs(input, fieldlist, sep)
	if not input or input == '' then return end
	sep = (sep and ('%s*' .. sep .. '%s*')) or '%s*;;;%s*'
	local result = {}
	local inputTbl = util_text.split(input,sep)
	for i, v in ipairs(fieldlist) do
		if not inputTbl[i] then
			error(('Missing parameter %s - maybe wrong child template?'):format(v))
		end
		if inputTbl[i] ~= '' then
			result[v] = inputTbl[i]
		end
	end
	return result
end

function p.isSplitArg(input)
	if not input then return false end
	return input:find(';;;')
end

function p.strOrTitle(str)
	return str or mw.title.getCurrentTitle().rootText
end

function p.require(n, ...)
	local params = {...}
	local numberSpecified = util_table.generalLength(params)
	if numberSpecified < n then
		local traceback = debug.traceback('', 2)
		relevantTraceback = util_text.split(traceback, '\n')[3]
		error(('Missing params in %s! %s expected, %s non-nil'):format(
			relevantTraceback,
			n,
			numberSpecified
		))
	end
end

return p