util/termcolours.lua
changeset 7206 be8b88ad35a3
parent 7202 5846e0bca4ff
child 7207 ab2b7496a617
equal deleted inserted replaced
7205:5bf0ff3882aa 7206:be8b88ad35a3
    12 local t_concat, t_insert = table.concat, table.insert;
    12 local t_concat, t_insert = table.concat, table.insert;
    13 local char, format = string.char, string.format;
    13 local char, format = string.char, string.format;
    14 local tonumber = tonumber;
    14 local tonumber = tonumber;
    15 local ipairs = ipairs;
    15 local ipairs = ipairs;
    16 local io_write = io.write;
    16 local io_write = io.write;
       
    17 local m_floor = math.floor;
    17 
    18 
    18 local windows;
    19 local windows;
    19 if os.getenv("WINDIR") then
    20 if os.getenv("WINDIR") then
    20 	windows = require "util.windows";
    21 	windows = require "util.windows";
    21 end
    22 end
    52 		return format(fmt_string, style, text);
    53 		return format(fmt_string, style, text);
    53 	else
    54 	else
    54 		return text;
    55 		return text;
    55 	end
    56 	end
    56 end
    57 end
       
    58 
       
    59 local function gray(n)
       
    60 	return m_floor(n*3/32)+0xe8;
       
    61 end
       
    62 local function color(r,g,b)
       
    63 	if r == g and g == b then
       
    64 		return gray(r);
       
    65 	end
       
    66 	r = m_floor(r*3/128);
       
    67 	g = m_floor(g*3/128);
       
    68 	b = m_floor(b*3/128);
       
    69 	return 0x10 + ( r * 36 ) + ( g * 6 ) + ( b );
       
    70 end
       
    71 local function hex2rgb(hex)
       
    72 	local r = tonumber(hex:sub(1,2),16);
       
    73 	local g = tonumber(hex:sub(3,4),16);
       
    74 	local b = tonumber(hex:sub(5,6),16);
       
    75 	return r,g,b;
       
    76 end
       
    77 
       
    78 setmetatable(stylemap, { __index = function(_, style)
       
    79 	local g = style:sub(7) == " background" and "48;5;" or "38;5;";
       
    80 	return g .. color(hex2rgb(style));
       
    81 end } );
    57 
    82 
    58 local function getstyle(...)
    83 local function getstyle(...)
    59 	local styles, result = { ... }, {};
    84 	local styles, result = { ... }, {};
    60 	for i, style in ipairs(styles) do
    85 	for i, style in ipairs(styles) do
    61 		style = stylemap[style];
    86 		style = stylemap[style];