diff options
Diffstat (limited to 'src/syslua/lx/lxinit.lua')
-rw-r--r-- | src/syslua/lx/lxinit.lua | 48 |
1 files changed, 33 insertions, 15 deletions
diff --git a/src/syslua/lx/lxinit.lua b/src/syslua/lx/lxinit.lua index 6b23aa8..1c8d116 100644 --- a/src/syslua/lx/lxinit.lua +++ b/src/syslua/lx/lxinit.lua @@ -3,20 +3,38 @@ print "Lua eXtended helpers for Kogata v1" do local old_tostring = tostring function tostring(x) - if type(x) == "table" then - if next(x) == nil then - return '{}' - end - local q = '{\n ' - for k, v in pairs(x) do - if q:len() > 4 then - q = q .. ',\n ' - end - q = q .. k .. ': ' .. tostring(v):gsub('\n', '\n ') - end - return q .. '\n}' - else - return old_tostring(x) - end + local seen = {} + function aux(x) + if type(x) == "table" then + if next(x) == nil then + return '{}' + end + + if seen[x] then + return '...' + end + seen[x] = true + + local q = '{\n ' + for k, v in pairs(x) do + if q:len() > 4 then + q = q .. ',\n ' + end + q = q .. k .. ': ' .. aux(v):gsub('\n', '\n ') + end + return q .. '\n}' + else + return old_tostring(x) + end + end + return aux(x) end end + + +function string.split(str, sep) + local sep, fields = sep or ":", {} + local pattern = string.format("([^%s]*)", sep) + str:gsub(pattern, function(c) fields[#fields+1] = c end) + return fields +end |