From f60e809b87c6d9b0ea87ceeb54507d486f2934eb Mon Sep 17 00:00:00 2001 From: Philipp Gesang Date: Sat, 26 Jul 2014 12:46:53 +0200 Subject: sync with Context as of 2014-07-26 --- lualibs-table.lua | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) (limited to 'lualibs-table.lua') diff --git a/lualibs-table.lua b/lualibs-table.lua index ca067fb..e642106 100644 --- a/lualibs-table.lua +++ b/lualibs-table.lua @@ -922,16 +922,27 @@ end table.identical = identical table.are_equal = are_equal --- maybe also make a combined one - -function table.compact(t) -- remove empty tables, assumes subtables - if t then - for k, v in next, t do - if not next(v) then -- no type checking - t[k] = nil +local function sparse(old,nest,keeptables) + local new = { } + for k, v in next, old do + if not (v == "" or v == false) then + if nest and type(v) == "table" then + v = sparse(v,nest) + if keeptables or next(v) then + new[k] = v + end + else + new[k] = v end end end + return new +end + +table.sparse = sparse + +function table.compact(t) + return sparse(t,true,true) end function table.contains(t, v) -- cgit v1.2.3