Module:Table

local p = {}

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

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

-- 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

-- Do mw.text.trim to all values in a table 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