sprites/util/lua-ext.lua
2020-05-02 21:42:45 -04:00

74 lines
1.5 KiB
Lua

-- Allow `for v in iter(table)` instead of `for _, v in ipairs(table)`
function iter(table)
local i = 1
return function ()
local v = table[i]
i = i + 1
return v
end
end
function astable(table)
local t = type(table)
if t == 'table' then
return table
elseif t == 'string' then
return {table}
elseif t == 'nil' then
return {}
end
end
-- Adapted from premake
function flatten(arr)
local result = { }
local function flatten(arr)
for v in iter(arr) do
if type(v) == "table" then
flatten(v)
else
table.insert(result, v)
end
end
end
flatten(arr)
return result
end
-- Adapted from lua wiki, originally called replace_vars
function rep(str, vars)
-- Allow replace_vars{str, vars} syntax as well as replace_vars(str, {vars})
if not vars then
vars = str
str = vars[1]
end
return (str:gsub("({([^}]+)})",
function(whole,i)
return vars[i] or whole
end))
end
-- Merge, preferring elem2 when f(elem1) == f(elem2)
function mergededup(table1, table2, f)
local seen = {}
for v in iter(table1) do
seen[f(v)] = v
end
for v in iter(table2) do
seen[f(v)] = v
end
local result = {}
-- Can't be iter, because non-numeric keys
for _, v in pairs(seen) do
table.insert(result, v)
end
return result
end
function trim(s)
return s:gsub("^%s*(.-)%s*$", "%1")
end