diff options
author | 2016-02-21 11:48:45 +0100 | |
---|---|---|
committer | 2016-02-21 11:48:45 +0100 | |
commit | cc24a339d8c0517259084b5c178d784626ba965c (patch) | |
tree | 9868e9687b5802ae0a3733712a3bbeb3bc75c953 /3rdparty/luv/lib/utils.lua | |
parent | b5daabda5495dea5c50e17961ecfed2ea8619d76 (diff) |
Merge remote-tracking branch 'refs/remotes/mamedev/master'
Second attempt
Diffstat (limited to '3rdparty/luv/lib/utils.lua')
-rw-r--r-- | 3rdparty/luv/lib/utils.lua | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/3rdparty/luv/lib/utils.lua b/3rdparty/luv/lib/utils.lua new file mode 100644 index 00000000000..777879ec28c --- /dev/null +++ b/3rdparty/luv/lib/utils.lua @@ -0,0 +1,165 @@ + +local uv = require('luv') +local utils = {} +local usecolors + +if uv.guess_handle(1) == "tty" then + utils.stdout = uv.new_tty(1, false) + usecolors = true +else + utils.stdout = uv.new_pipe(false) + uv.pipe_open(utils.stdout, 1) + usecolors = false +end + +local colors = { + black = "0;30", + red = "0;31", + green = "0;32", + yellow = "0;33", + blue = "0;34", + magenta = "0;35", + cyan = "0;36", + white = "0;37", + B = "1;", + Bblack = "1;30", + Bred = "1;31", + Bgreen = "1;32", + Byellow = "1;33", + Bblue = "1;34", + Bmagenta = "1;35", + Bcyan = "1;36", + Bwhite = "1;37" +} + +function utils.color(color_name) + if usecolors then + return "\27[" .. (colors[color_name] or "0") .. "m" + else + return "" + end +end + +function utils.colorize(color_name, string, reset_name) + return utils.color(color_name) .. tostring(string) .. utils.color(reset_name) +end + +local backslash, null, newline, carriage, tab, quote, quote2, obracket, cbracket + +function utils.loadColors(n) + if n ~= nil then usecolors = n end + backslash = utils.colorize("Bgreen", "\\\\", "green") + null = utils.colorize("Bgreen", "\\0", "green") + newline = utils.colorize("Bgreen", "\\n", "green") + carriage = utils.colorize("Bgreen", "\\r", "green") + tab = utils.colorize("Bgreen", "\\t", "green") + quote = utils.colorize("Bgreen", '"', "green") + quote2 = utils.colorize("Bgreen", '"') + obracket = utils.colorize("B", '[') + cbracket = utils.colorize("B", ']') +end + +utils.loadColors() + +function utils.dump(o, depth) + local t = type(o) + if t == 'string' then + return quote .. o:gsub("\\", backslash):gsub("%z", null):gsub("\n", newline):gsub("\r", carriage):gsub("\t", tab) .. quote2 + end + if t == 'nil' then + return utils.colorize("Bblack", "nil") + end + if t == 'boolean' then + return utils.colorize("yellow", tostring(o)) + end + if t == 'number' then + return utils.colorize("blue", tostring(o)) + end + if t == 'userdata' then + return utils.colorize("magenta", tostring(o)) + end + if t == 'thread' then + return utils.colorize("Bred", tostring(o)) + end + if t == 'function' then + return utils.colorize("cyan", tostring(o)) + end + if t == 'cdata' then + return utils.colorize("Bmagenta", tostring(o)) + end + if t == 'table' then + if type(depth) == 'nil' then + depth = 0 + end + if depth > 1 then + return utils.colorize("yellow", tostring(o)) + end + local indent = (" "):rep(depth) + + -- Check to see if this is an array + local is_array = true + local i = 1 + for k,v in pairs(o) do + if not (k == i) then + is_array = false + end + i = i + 1 + end + + local first = true + local lines = {} + i = 1 + local estimated = 0 + for k,v in (is_array and ipairs or pairs)(o) do + local s + if is_array then + s = "" + else + if type(k) == "string" and k:find("^[%a_][%a%d_]*$") then + s = k .. ' = ' + else + s = '[' .. utils.dump(k, 100) .. '] = ' + end + end + s = s .. utils.dump(v, depth + 1) + lines[i] = s + estimated = estimated + #s + i = i + 1 + end + if estimated > 200 then + return "{\n " .. indent .. table.concat(lines, ",\n " .. indent) .. "\n" .. indent .. "}" + else + return "{ " .. table.concat(lines, ", ") .. " }" + end + end + -- This doesn't happen right? + return tostring(o) +end + + + +-- Print replacement that goes through libuv. This is useful on windows +-- to use libuv's code to translate ansi escape codes to windows API calls. +function print(...) + local n = select('#', ...) + local arguments = {...} + for i = 1, n do + arguments[i] = tostring(arguments[i]) + end + uv.write(utils.stdout, table.concat(arguments, "\t") .. "\n") +end + +-- A nice global data dumper +function utils.prettyPrint(...) + local n = select('#', ...) + local arguments = { ... } + + for i = 1, n do + arguments[i] = utils.dump(arguments[i]) + end + + print(table.concat(arguments, "\t")) +end + +return utils + |