summaryrefslogtreecommitdiff
path: root/xmake/core/base/table.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2018-12-05 00:32:14 +0800
committerruki <[email protected]>2018-12-04 23:29:11 +0800
commit80d75d7bb8b1635562bc7bd6a0a54cdf9715cdb2 (patch)
treed95308f5e1bde457dbcb2b83cf25aff8db6b4172 /xmake/core/base/table.lua
parent691915c6ff4629fc53337615a1a8c63a880c5633 (diff)
dump table
Diffstat (limited to 'xmake/core/base/table.lua')
-rw-r--r--xmake/core/base/table.lua150
1 files changed, 74 insertions, 76 deletions
diff --git a/xmake/core/base/table.lua b/xmake/core/base/table.lua
index dde5fa23c..3de4be277 100644
--- a/xmake/core/base/table.lua
+++ b/xmake/core/base/table.lua
@@ -25,6 +25,74 @@
-- define module: table
local table = table or {}
+-- make string with the level
+function table._makestr(self, deflate, level)
+ if type(self) == "string" or type(self) == "boolean" or type(self) == "number" then
+ return tostring(self)
+ elseif type(self) == "table" and (getmetatable(self) or {}).__tostring then
+ return tostring(self)
+ elseif type(self) == "table" then
+
+ -- make head
+ local s = ""
+ if deflate then
+ s = s .. "{"
+ else
+ s = s .. "\n"
+ for l = 1, level do
+ s = s .. " "
+ end
+ s = s .. "{\n"
+ end
+
+ -- make body
+ local i = 0
+ for k, v in pairs(self) do
+
+ if deflate then
+ s = s .. (i ~= 0 and "," or "")
+ else
+ for l = 1, level do
+ s = s .. " "
+ end
+ if i == 0 then
+ s = s .. " "
+ else
+ s = s .. ", "
+ end
+ end
+
+ -- make key = value
+ if type(k) == "string" then
+ if deflate then
+ s = s .. k .. "="
+ else
+ s = s .. k .. " = "
+ end
+ end
+ s = s .. table._makestr(v, deflate, level + 1)
+
+ if not deflate then
+ s = s .. "\n"
+ end
+ i = i + 1
+ end
+
+ -- make tail
+ if not deflate then
+ for l = 1, level do
+ s = s .. " "
+ end
+ end
+ s = s .. "}"
+ return s
+ elseif self ~= nil then
+ return "<" .. tostring(self) .. ">"
+ else
+ return "nil"
+ end
+end
+
-- clear the table
function table.clear(self)
for k in next, self do
@@ -190,84 +258,14 @@ function table.is_dictionary(dict)
return type(dict) == "table" and dict[1] == nil
end
--- dump it with the level
-function table._dump(self, exclude, level)
-
- -- dump basic type
- if type(self) == "string" or type(self) == "boolean" or type(self) == "number" then
- io.write(tostring(self))
- elseif type(self) == "table" and (getmetatable(self) or {}).__tostring then
- io.write(tostring(self))
- -- dump table
- elseif type(self) == "table" then
-
- -- dump head
- io.write("\n")
- for l = 1, level do
- io.write(" ")
- end
- io.write("{\n")
-
- -- dump body
- local i = 0
- for k, v in pairs(self) do
-
- -- exclude some keys
- if not exclude or type(k) ~= "string" or not k:find(exclude) then
-
- -- dump spaces and separator
- for l = 1, level do
- io.write(" ")
- end
-
- if i == 0 then
- io.write(" ")
- else
- io.write(", ")
- end
-
- -- dump key
- if type(k) == "string" then
- io.write(k, " = ")
- end
-
- -- dump value
- table._dump(v, exclude, level + 1)
-
- -- dump newline
- io.write("\n")
- i = i + 1
- end
- end
-
- -- dump tail
- for l = 1, level do
- io.write(" ")
- end
- io.write("}\n")
- elseif self ~= nil then
- io.write("<" .. tostring(self) .. ">")
- else
- io.write("nil")
- end
+-- dump table
+function table.dump(self, deflate)
+ io.write(table.makestr(self, deflate))
end
--- dump it
-function table.dump(self, exclude, prefix)
-
- -- dump prefix
- if prefix then
- io.write(prefix)
- end
-
- -- dump it
- table._dump(self, exclude, 0)
-
- -- end
- print("")
-
- -- return it
- return self
+-- make string from the given table
+function table.makestr(self, deflate)
+ return table._makestr(self, deflate, 0)
end
-- unwrap object if be only one