Binding of Isaac: Rebirth Wiki
mNo edit summary
m (contains)
Line 1: Line 1:
 
local p = {}
 
local p = {}
  +
  +
  +
-- Indicates if a table contains an element.
  +
function p.contains( t, e )
  +
for _, v in pairs( t ) do
  +
if v == e then
  +
return true
  +
end
  +
end
  +
return false
  +
end
   
   

Revision as of 17:30, 30 March 2020


local p = {}


-- Indicates if a table contains an element.
function p.contains( t, e )
	for _, v in pairs( t ) do
		if v == e then
			return true
		end
	end
	return false
end


-- Get parameters of the template and the article from the frame (usually f)
function p.getArgs( f )
	local args = {}
	if f.args then
		-- Add template parameters
		for i, j in pairs( f.args ) do
			args[i] = j
		end
		-- Add transclusion parameters (parent), overwrite template parameters
		for k, l in pairs( f:getParent().args ) do
			args[k] = l
		end
	else
		args = f
	end
	return args
end


function p.getParametersCount( f )
	local args = p.trimAll( p.getArgs( f ) )
	local parametersCount = 0
	if args.numerical then
		local i = 1
		while args[i] do
			parametersCount = parametersCount + 1
			i = i + 1
		end
	else
		for i, j in pairs( args ) do
			parametersCount = parametersCount + 1
		end
	end
	return parametersCount
end


-- Do string.gsub to all values in a table
function p.gsub( f, pattern, repl )
	local g = {}
	for i, j in pairs( f ) do
		if type( j ) == 'string' then
			g[i] = string.gsub( j, pattern, repl )
		else
			g[i] = j
		end
	end
	return g
end


-- Do string.gsub to all indexes in a table
function p.igsub( f, pattern, repl )
	local g = {}
	for i, j in pairs( f ) do
		g[string.gsub( i, pattern, repl )] = j
	end
	return g
end


function p.merge( ... )
	local result = {}
	for _, table in ipairs( arg ) do
		for k, v in pairs( table ) do
			result[k] = v
		end
	end
	return result
end


function p.search( f )
	local args = p.trimAll( p.getArgs( f ) )
	if args.index then
		for i, j in pairs( args ) do
			if args.object == j then
				return i
			end
		end
	else
		local k = 1
		repeat
			if args.object == args[k] then
				return k
			end
			k = k + 1
		until not args[k]
	end
	return nil
end


-- Do mw.text.trim to all values in a table
function p.trim( f, toRemove, keepEmptyParams )
	return p.trimAll( f, toRemove, keepEmptyParams )
end

function p.trimAll( f, toRemove, keepEmptyParams )
	local g = {}
	for i, j in pairs( f ) do
		if type( j ) == 'string' then
			g[i] = mw.text.trim( j ) ~= '' and ( toRemove and mw.text.trim( j, toRemove ) or mw.text.trim( j ) ) or keepEmptyParams and ''
		else
			g[i] = j
		end
	end
	return g
end


return p