mirror of
https://github.com/smogon/sprites.git
synced 2026-03-22 01:45:27 -05:00
70 lines
1.4 KiB
Lua
70 lines
1.4 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
|