summaryrefslogtreecommitdiff
path: root/util.lua
diff options
context:
space:
mode:
Diffstat (limited to 'util.lua')
-rw-r--r--util.lua30
1 files changed, 30 insertions, 0 deletions
diff --git a/util.lua b/util.lua
index 99bba7b..d678a9e 100644
--- a/util.lua
+++ b/util.lua
@@ -125,6 +125,36 @@ function util.stable_kmerge(t, u, k)
return res
end
+function util.flatten_table(src, dst, prefix)
+ local dst = dst or {}
+ for k, v in pairs(src) do
+ local k = prefix and prefix .. '.' .. k or k
+ if type(v) == 'table' then
+ util.flatten_table(v, dst, k)
+ else
+ dst[k] = v
+ end
+ end
+ return dst
+end
+
+function util.unflatten_table(src, dst)
+ local dst = dst or {}
+ for k, v in pairs(src) do
+ local t = dst
+ local prev
+ for curr in (k .. '.'):gmatch('(.-)%.') do
+ if prev then
+ t[prev] = t[prev] or {}
+ t = t[prev]
+ end
+ prev = curr
+ end
+ t[prev] = v
+ end
+ return dst
+end
+
function util.str_seek_prev_char(str, pos)
return util.utf8_seek(str, pos, -1)
end