From f5145d6ba13aaf48a8bf10c8cef7d1a8ea6f2708 Mon Sep 17 00:00:00 2001 From: Anthony Zhang Date: Sat, 20 Apr 2013 20:28:21 -0400 Subject: [PATCH] Horrible, vile, disgusting hack. But it works. --- worldedit/serialization.lua | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/worldedit/serialization.lua b/worldedit/serialization.lua index cc3297e..985e3d7 100644 --- a/worldedit/serialization.lua +++ b/worldedit/serialization.lua @@ -214,7 +214,22 @@ worldedit.deserialize = function(originpos, value) count = count + 1 end elseif version == 4 then --current nested table format - local nodes = minetest.deserialize(value) + --wip: this is a filthy hack that works surprisingly well + value = value:gsub("return%s*{", "", 1):gsub("}%s*$", "", 1) + local escaped = value:gsub("\\\\", "@@"):gsub("\\\"", "@@"):gsub("(\"[^\"]+\")", function(s) return string.rep("@", #s) end) + local startpos, startpos1, endpos = 1, 1 + local nodes = {} + while true do + startpos, endpos = escaped:find("},%s*{", startpos) + if not startpos then + break + end + local current = value:sub(startpos1, startpos) + table.insert(nodes, minetest.deserialize("return " .. current)) + startpos, startpos1 = endpos, endpos + end + + --local nodes = minetest.deserialize(value) --wip: this is broken for larger tables in the current version of LuaJIT count = #nodes for index = 1, count do local entry = nodes[index]