From 0e263af3c64e337ca719b3b430141ea8b203cb5c Mon Sep 17 00:00:00 2001 From: Francesco Abbate Date: Wed, 30 Dec 2020 13:32:25 +0100 Subject: [PATCH] Create common.serialize function --- data/core/common.lua | 14 ++++++++++++++ data/core/init.lua | 11 +---------- data/plugins/workspace.lua | 19 +++---------------- 3 files changed, 18 insertions(+), 26 deletions(-) diff --git a/data/core/common.lua b/data/core/common.lua index 64ac2b6..47cf964 100644 --- a/data/core/common.lua +++ b/data/core/common.lua @@ -164,6 +164,20 @@ function common.bench(name, fn, ...) end +function common.serialize(val) + if type(val) == "string" then + return string.format("%q", val) + elseif type(val) == "table" then + local t = {} + for k, v in pairs(val) do + table.insert(t, "[" .. common.serialize(k) .. "]=" .. common.serialize(v)) + end + return "{" .. table.concat(t, ",") .. "}" + end + return tostring(val) +end + + function common.home_encode(text) if HOME then local n = #HOME diff --git a/data/core/init.lua b/data/core/init.lua index eaa0300..e2d92f1 100644 --- a/data/core/init.lua +++ b/data/core/init.lua @@ -11,15 +11,6 @@ local Doc local core = {} -local function table_serialize(t) - local ls = {"{"} - for i = 1, #t do - ls[#ls + 1] = string.format(" %q,", t[i]) - end - ls[#ls + 1] = "}" - return table.concat(ls, "\n") -end - local function load_projects() local ok, t = pcall(dofile, USERDIR .. "/recent_projects.lua") core.recent_projects = (ok and t or {}) @@ -42,7 +33,7 @@ end local function save_projects() local fp = io.open(USERDIR .. "/recent_projects.lua", "w") if fp then - fp:write("return ", table_serialize(core.recent_projects), "\n") + fp:write("return ", common.serialize(core.recent_projects), "\n") fp:close() end end diff --git a/data/plugins/workspace.lua b/data/plugins/workspace.lua index e50d1a3..7a05ae0 100644 --- a/data/plugins/workspace.lua +++ b/data/plugins/workspace.lua @@ -1,23 +1,10 @@ local core = require "core" +local common = require "core.common" local DocView = require "core.docview" local workspace_filename = ".lite_workspace.lua" -local function serialize(val) - if type(val) == "string" then - return string.format("%q", val) - elseif type(val) == "table" then - local t = {} - for k, v in pairs(val) do - table.insert(t, "[" .. serialize(k) .. "]=" .. serialize(v)) - end - return "{" .. table.concat(t, ",") .. "}" - end - return tostring(val) -end - - local function has_no_locked_children(node) if node.locked then return false end if node.type == "leaf" then return true end @@ -164,8 +151,8 @@ local function save_workspace() local root = get_unlocked_root(core.root_view.root_node) local fp = io.open(workspace_filename, "w") if fp then - local node_text = serialize(save_node(root)) - local dir_text = serialize(save_directories()) + local node_text = common.serialize(save_node(root)) + local dir_text = common.serialize(save_directories()) fp:write(string.format("return { documents = %s, directories = %s }\n", node_text, dir_text)) fp:close() end