From 64f6e8fc0c6cb9254a6fe3db0b4ab31c51cf8524 Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Thu, 4 Apr 2019 14:11:01 +0200 Subject: 2019-04-04 13:38:00 --- tex/context/base/mkiv/l-table.lua | 104 +++++++++++++++++++++++--------------- 1 file changed, 64 insertions(+), 40 deletions(-) (limited to 'tex/context/base/mkiv/l-table.lua') diff --git a/tex/context/base/mkiv/l-table.lua b/tex/context/base/mkiv/l-table.lua index eae135139..192347b06 100644 --- a/tex/context/base/mkiv/l-table.lua +++ b/tex/context/base/mkiv/l-table.lua @@ -8,7 +8,7 @@ if not modules then modules = { } end modules ['l-table'] = { local type, next, tostring, tonumber, select = type, next, tostring, tonumber, select local table, string = table, string -local concat, sort, insert, remove = table.concat, table.sort, table.insert, table.remove +local concat, sort = table.concat, table.sort local format, lower, dump = string.format, string.lower, string.dump local getmetatable, setmetatable = getmetatable, setmetatable local lpegmatch, patterns = lpeg.match, lpeg.patterns @@ -26,7 +26,8 @@ function table.getn(t) end function table.strip(tab) - local lst, l = { }, 0 + local lst = { } + local l = 0 for i=1,#tab do local s = lpegmatch(stripper,tab[i]) or "" if s == "" then @@ -41,7 +42,8 @@ end function table.keys(t) if t then - local keys, k = { }, 0 + local keys = { } + local k = 0 for key in next, t do k = k + 1 keys[k] = key @@ -145,28 +147,30 @@ end local function sortedkeys(tab) if tab then - local srt, category, s = { }, 0, 0 -- 0=unknown 1=string, 2=number 3=mixed + local srt = { } + local category = 0 -- 0=unknown 1=string, 2=number 3=mixed + local s = 0 for key in next, tab do s = s + 1 srt[s] = key - if category == 3 then - -- no further check - elseif category == 1 then - if type(key) ~= "string" then - category = 3 - end - elseif category == 2 then - if type(key) ~= "number" then - category = 3 - end - else + if category ~= 3 then local tkey = type(key) - if tkey == "string" then - category = 1 - elseif tkey == "number" then - category = 2 + if category == 1 then + if tkey ~= "string" then + category = 3 + end + elseif category == 2 then + if tkey ~= "number" then + category = 3 + end else - category = 3 + if tkey == "string" then + category = 1 + elseif tkey == "number" then + category = 2 + else + category = 3 + end end end end @@ -185,7 +189,8 @@ end local function sortedhashonly(tab) if tab then - local srt, s = { }, 0 + local srt = { } + local s = 0 for key in next, tab do if type(key) == "string" then s = s + 1 @@ -203,7 +208,8 @@ end local function sortedindexonly(tab) if tab then - local srt, s = { }, 0 + local srt = { } + local s = 0 for key in next, tab do if type(key) == "number" then s = s + 1 @@ -221,7 +227,8 @@ end local function sortedhashkeys(tab,cmp) -- fast one if tab then - local srt, s = { }, 0 + local srt = { } + local s = 0 for key in next, tab do if key then s= s + 1 @@ -317,7 +324,9 @@ end -- end function table.merge(t, ...) -- first one is target - t = t or { } + if not t then + t = { } + end for i=1,select("#",...) do for k, v in next, (select(i,...)) do t[k] = v @@ -383,7 +392,8 @@ end -- end function table.imerged(...) - local tmp, ntmp = { }, 0 + local tmp = { } + local ntmp = 0 for i=1,select("#",...) do local nst = select(i,...) for j=1,#nst do @@ -420,7 +430,9 @@ end -- todo : copy without metatable local function copy(t,tables) -- taken from lua wiki, slightly adapted - tables = tables or { } + if not tables then + tables = { } + end local tcopy = { } if not tables[t] then tables[t] = tcopy @@ -471,7 +483,8 @@ function table.tohash(t,value) end function table.fromhash(t) - local hsh, h = { }, 0 + local hsh = { } + local h = 0 for k, v in next, t do if v then h = h + 1 @@ -669,7 +682,8 @@ local function do_serialize(root,name,depth,level,indexed) end -- we could check for k (index) being number (cardinal) if root and next(root) ~= nil then - local first, last = nil, 0 + local first = nil + local last = 0 if compact then last = #root for k=1,last do @@ -960,7 +974,8 @@ end -- number : [number] = { } function table.serialize(root,name,specification) - local t, n = { }, 0 + local t = { } + local n = 0 local function flush(s) n = n + 1 t[n] = s @@ -984,13 +999,15 @@ function table.tofile(filename,root,name,specification) local f = io.open(filename,'w') if f then if maxtab > 1 then - local t, n = { }, 0 + local t = { } + local n = 0 local function flush(s) n = n + 1 t[n] = s if n > maxtab then f:write(concat(t,"\n"),"\n") -- hm, write(sometable) should be nice - t, n = { }, 0 -- we could recycle t if needed + t = { } -- we could recycle t if needed + n = 0 end end serialize(flush,root,name,specification) @@ -1008,12 +1025,12 @@ end local function flattened(t,f,depth) -- also handles { nil, 1, nil, 2 } if f == nil then - f = { } + f = { } depth = 0xFFFF elseif tonumber(f) then -- assume that only two arguments are given depth = f - f = { } + f = { } elseif not depth then depth = 0xFFFF end @@ -1101,8 +1118,12 @@ local function are_equal(a,b,n,m) -- indexed if a == b then return true elseif a and b and #a == #b then - n = n or 1 - m = m or #a + if not n then + n = 1 + end + if not m then + m = #a + end for i=n,m do local ai, bi = a[i], b[i] if ai==bi then @@ -1215,7 +1236,8 @@ end function table.reversed(t) if t then - local tt, tn = { }, #t + local tt = { } + local tn = #t if tn > 0 then local ttn = 0 for i=tn,1,-1 do @@ -1332,8 +1354,8 @@ end function table.unique(old) local hash = { } - local new = { } - local n = 0 + local new = { } + local n = 0 for i=1,#old do local oi = old[i] if not hash[oi] then @@ -1354,12 +1376,14 @@ end function table.values(t,s) -- optional sort flag if t then - local values, keys, v = { }, { }, 0 + local values = { } + local keys = { } + local v = 0 for key, value in next, t do if not keys[value] then v = v + 1 values[v] = value - keys[k] = key + keys[k] = key end end if s then -- cgit v1.2.3