aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2016-02-28 15:06:56 +0100
committerKim Alvefur <zash@zash.se>2016-02-28 15:06:56 +0100
commitddb3486cfebc3eff77ae8817e7a65f1d3073c9bc (patch)
treef4be8fd8748b09429e518c34024b79b273d76845
parente8ae582f9096da3eb413f4b2dd31ac1a494f361c (diff)
parentb1e82b124c1689dca204bd533843984dbe369c77 (diff)
downloadprosody-ddb3486cfebc3eff77ae8817e7a65f1d3073c9bc.tar.gz
prosody-ddb3486cfebc3eff77ae8817e7a65f1d3073c9bc.zip
Merge 0.10->trunk
-rw-r--r--util/datamanager.lua29
-rw-r--r--util/template.lua10
-rw-r--r--util/termcolours.lua46
3 files changed, 66 insertions, 19 deletions
diff --git a/util/datamanager.lua b/util/datamanager.lua
index 83f3dd13..dc98bd13 100644
--- a/util/datamanager.lua
+++ b/util/datamanager.lua
@@ -144,23 +144,26 @@ end
local function atomic_store(filename, data)
local scratch = filename.."~";
local f, ok, msg;
- repeat
- f, msg = io_open(scratch, "w");
- if not f then break end
- ok, msg = f:write(data);
- if not ok then break end
+ f, msg = io_open(scratch, "w");
+ if not f then
+ return nil, msg;
+ end
- ok, msg = f:close();
- if not ok then break end
+ ok, msg = f:write(data);
+ if not ok then
+ f:close();
+ os_remove(scratch);
+ return nil, msg;
+ end
- return os_rename(scratch, filename);
- until false;
+ ok, msg = f:close();
+ if not ok then
+ os_remove(scratch);
+ return nil, msg;
+ end
- -- Cleanup
- if f then f:close(); end
- os_remove(scratch);
- return nil, msg;
+ return os_rename(scratch, filename);
end
if prosody and prosody.platform ~= "posix" then
diff --git a/util/template.lua b/util/template.lua
index a26dd7ca..04ebb93d 100644
--- a/util/template.lua
+++ b/util/template.lua
@@ -1,4 +1,4 @@
-
+-- luacheck: ignore 213/i
local stanza_mt = require "util.stanza".stanza_mt;
local setmetatable = setmetatable;
local pairs = pairs;
@@ -67,12 +67,12 @@ end
local function create_cloner(stanza, chunkname)
local lookup = {};
local name = create_clone_string(stanza, lookup, "");
- local f = "local setmetatable,stanza_mt=...;return function(data)";
+ local src = "local setmetatable,stanza_mt=...;return function(data)";
for i=1,#lookup do
- f = f.."local _"..i.."="..lookup[i]..";";
+ src = src.."local _"..i.."="..lookup[i]..";";
end
- f = f.."return "..name..";end";
- local f,err = loadstring(f, chunkname);
+ src = src.."return "..name..";end";
+ local f,err = loadstring(src, chunkname);
if not f then error(err); end
return f(setmetatable, stanza_mt);
end
diff --git a/util/termcolours.lua b/util/termcolours.lua
index a1c01aa5..53633b45 100644
--- a/util/termcolours.lua
+++ b/util/termcolours.lua
@@ -5,6 +5,8 @@
-- This project is MIT/X11 licensed. Please see the
-- COPYING file in the source package for more information.
--
+--
+-- luacheck: ignore 213/i
local t_concat, t_insert = table.concat, table.insert;
@@ -12,6 +14,10 @@ local char, format = string.char, string.format;
local tonumber = tonumber;
local ipairs = ipairs;
local io_write = io.write;
+local m_floor = math.floor;
+local type = type;
+local setmetatable = setmetatable;
+local pairs = pairs;
local windows;
if os.getenv("WINDIR") then
@@ -53,6 +59,44 @@ local function getstring(style, text)
end
end
+local function gray(n)
+ return m_floor(n*3/32)+0xe8;
+end
+local function color(r,g,b)
+ if r == g and g == b then
+ return gray(r);
+ end
+ r = m_floor(r*3/128);
+ g = m_floor(g*3/128);
+ b = m_floor(b*3/128);
+ return 0x10 + ( r * 36 ) + ( g * 6 ) + ( b );
+end
+local function hex2rgb(hex)
+ local r = tonumber(hex:sub(1,2),16);
+ local g = tonumber(hex:sub(3,4),16);
+ local b = tonumber(hex:sub(5,6),16);
+ return r,g,b;
+end
+
+setmetatable(stylemap, { __index = function(_, style)
+ if type(style) == "string" and style:find("%x%x%x%x%x%x") == 1 then
+ local g = style:sub(7) == " background" and "48;5;" or "38;5;";
+ return g .. color(hex2rgb(style));
+ end
+end } );
+
+local csscolors = {
+ red = "ff0000"; fuchsia = "ff00ff"; green = "008000"; white = "ffffff";
+ lime = "00ff00"; yellow = "ffff00"; purple = "800080"; blue = "0000ff";
+ aqua = "00ffff"; olive = "808000"; black = "000000"; navy = "000080";
+ teal = "008080"; silver = "c0c0c0"; maroon = "800000"; gray = "808080";
+}
+for colorname, rgb in pairs(csscolors) do
+ stylemap[colorname] = stylemap[colorname] or stylemap[rgb];
+ colorname, rgb = colorname .. " background", rgb .. " background"
+ stylemap[colorname] = stylemap[colorname] or stylemap[rgb];
+end
+
local function getstyle(...)
local styles, result = { ... }, {};
for i, style in ipairs(styles) do
@@ -82,7 +126,7 @@ if windows then
end
end
if not orig_color then
- function setstyle(style) end
+ function setstyle() end
end
end