summaryrefslogtreecommitdiff
path: root/tex/context/base/util-tab.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/util-tab.lua')
-rw-r--r--tex/context/base/util-tab.lua13
1 files changed, 9 insertions, 4 deletions
diff --git a/tex/context/base/util-tab.lua b/tex/context/base/util-tab.lua
index c1cedf9bb..cd6826983 100644
--- a/tex/context/base/util-tab.lua
+++ b/tex/context/base/util-tab.lua
@@ -15,6 +15,7 @@ local concat, insert, remove = table.concat, table.insert, table.remove
local setmetatable, getmetatable, tonumber, tostring = setmetatable, getmetatable, tonumber, tostring
local type, next, rawset, tonumber, loadstring = type, next, rawset, tonumber, loadstring
local lpegmatch, P, Cs = lpeg.match, lpeg.P, lpeg.Cs
+local serialize = table.serialize
-- function tables.definetable(target) -- defines undefined tables
-- local composed, t, n = nil, { }, 0
@@ -193,7 +194,7 @@ function tables.encapsulate(core,capsule,protect)
end
end
-local function serialize(t,r,outer) -- no mixes
+local function fastserialize(t,r,outer) -- no mixes
r[#r+1] = "{"
local n = #t
if n > 0 then
@@ -205,7 +206,7 @@ local function serialize(t,r,outer) -- no mixes
elseif tv == "number" then
r[#r+1] = format("%s,",v)
elseif tv == "table" then
- serialize(v,r)
+ fastserialize(v,r)
elseif tv == "boolean" then
r[#r+1] = format("%s,",tostring(v))
end
@@ -219,7 +220,7 @@ local function serialize(t,r,outer) -- no mixes
r[#r+1] = format("[%q]=%s,",k,v)
elseif tv == "table" then
r[#r+1] = format("[%q]=",k)
- serialize(v,r)
+ fastserialize(v,r)
elseif tv == "boolean" then
r[#r+1] = format("[%q]=%s,",k,tostring(v))
end
@@ -234,7 +235,7 @@ local function serialize(t,r,outer) -- no mixes
end
function table.fastserialize(t,prefix) -- so prefix should contain the =
- return concat(serialize(t,{ prefix or "return" },true))
+ return concat(fastserialize(t,{ prefix or "return" },true))
end
function table.deserialize(str)
@@ -269,6 +270,10 @@ function table.load(filename)
end
end
+function table.save(filename,t,n,...)
+ io.savedata(filename,serialize(t,n == nil and true or n,...))
+end
+
local function slowdrop(t)
local r = { }
local l = { }