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]; |