]> git.lizzy.rs Git - minetest.git/blob - builtin/misc_helpers.lua
Split builtin.lua to multiple files
[minetest.git] / builtin / misc_helpers.lua
1 -- Minetest: builtin/misc_helpers.lua
2
3 function basic_dump2(o)
4         if type(o) == "number" then
5                 return tostring(o)
6         elseif type(o) == "string" then
7                 return string.format("%q", o)
8         elseif type(o) == "boolean" then
9                 return tostring(o)
10         elseif type(o) == "function" then
11                 return "<function>"
12         elseif type(o) == "userdata" then
13                 return "<userdata>"
14         elseif type(o) == "nil" then
15                 return "nil"
16         else
17                 error("cannot dump a " .. type(o))
18                 return nil
19         end
20 end
21
22 function dump2(o, name, dumped)
23         name = name or "_"
24         dumped = dumped or {}
25         io.write(name, " = ")
26         if type(o) == "number" or type(o) == "string" or type(o) == "boolean"
27                         or type(o) == "function" or type(o) == "nil"
28                         or type(o) == "userdata" then
29                 io.write(basic_dump2(o), "\n")
30         elseif type(o) == "table" then
31                 if dumped[o] then
32                         io.write(dumped[o], "\n")
33                 else
34                         dumped[o] = name
35                         io.write("{}\n") -- new table
36                         for k,v in pairs(o) do
37                                 local fieldname = string.format("%s[%s]", name, basic_dump2(k))
38                                 dump2(v, fieldname, dumped)
39                         end
40                 end
41         else
42                 error("cannot dump a " .. type(o))
43                 return nil
44         end
45 end
46
47 function dump(o, dumped)
48         dumped = dumped or {}
49         if type(o) == "number" then
50                 return tostring(o)
51         elseif type(o) == "string" then
52                 return string.format("%q", o)
53         elseif type(o) == "table" then
54                 if dumped[o] then
55                         return "<circular reference>"
56                 end
57                 dumped[o] = true
58                 local t = {}
59                 for k,v in pairs(o) do
60                         t[#t+1] = "" .. k .. " = " .. dump(v, dumped)
61                 end
62                 return "{" .. table.concat(t, ", ") .. "}"
63         elseif type(o) == "boolean" then
64                 return tostring(o)
65         elseif type(o) == "function" then
66                 return "<function>"
67         elseif type(o) == "userdata" then
68                 return "<userdata>"
69         elseif type(o) == "nil" then
70                 return "nil"
71         else
72                 error("cannot dump a " .. type(o))
73                 return nil
74         end
75 end
76
77 function string:split(sep)
78         local sep, fields = sep or ",", {}
79         local pattern = string.format("([^%s]+)", sep)
80         self:gsub(pattern, function(c) fields[#fields+1] = c end)
81         return fields
82 end
83
84 function string:trim()
85         return (self:gsub("^%s*(.-)%s*$", "%1"))
86 end
87
88 assert(string.trim("\n \t\tfoo bar\t ") == "foo bar")
89
90 function minetest.pos_to_string(pos)
91         return "(" .. pos.x .. "," .. pos.y .. "," .. pos.z .. ")"
92 end
93
94