Download
82 lines 1.5 KiBLuaModified 2019-02-12 raw
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
if COLOR_ENABLED then
  local codes = {
    normal = 0,
    reset = 0,
    bright = 1,
    bold = 1,
    dim = 2,
    italic = 3,
    underscore = 4,
    ["slow blink"] = 5,
    ["fast blink"] = 6,
    reverse = 7,
    inverse = 7,
    inverted = 7,
    hidden = 8,
    strikethrough = 9,
    black = 30,
    red = 31,
    green = 32,
    yellow = 33,
    blue = 34,
    magenta = 35,
    cyan = 36,
    white = 37,
    on_black = 40,
    on_red = 41,
    on_green = 42,
    on_yellow = 43,
    on_blue = 44,
    on_magenta = 45,
    on_cyan = 46,
    on_white = 47
  }
  local inverses = {
    [0] = 0,
    [1] = 22,
    [2] = 22,
    [3] = 23,
    [4] = 24,
    [5] = 25,
    [6] = 25,
    [7] = 27,
    [8] = 28,
    [9] = 29,
    [30] = 39,
    [31] = 39,
    [32] = 39,
    [33] = 39,
    [34] = 39,
    [35] = 39,
    [36] = 39,
    [37] = 39,
    [38] = 39,
    [40] = 49,
    [41] = 49,
    [42] = 49,
    [43] = 49,
    [44] = 49,
    [45] = 49,
    [46] = 49,
    [47] = 49,
    [48] = 49
  }
  return function(colors, s)
    colors = colors:gsub("on (%a+)", function(self)
      return codes['on_' .. self]
    end)
    colors = colors:gsub("(%a+)", function(self)
      return codes[self]
    end)
    colors = colors:gsub(" ", ";")
    local colorize = "\x1b[" .. colors .. 'm'
    local reset = colorize:gsub("%d+", function(c)
      return inverses[tonumber(c)]
    end)
    return s and (colorize .. s .. reset) or colorize
  end
else
  return function(colors, s)
    return (s or '')
  end
end