9 const char* palette16code[16][2] = {
 
   10     {
"30", 
"40"},  {
"31", 
"41"},  {
"32", 
"42"},  {
"33", 
"43"},
 
   11     {
"34", 
"44"},  {
"35", 
"45"},  {
"36", 
"46"},  {
"37", 
"47"},
 
   12     {
"90", 
"100"}, {
"91", 
"101"}, {
"92", 
"102"}, {
"93", 
"103"},
 
   13     {
"94", 
"104"}, {
"95", 
"105"}, {
"96", 
"106"}, {
"97", 
"107"},
 
   18   return red_ == rhs.red_ && green_ == rhs.green_ && blue_ == rhs.blue_ &&
 
   28     case ColorType::Palette1:
 
   29       return is_background_color ? 
"49" : 
"39";
 
   31     case ColorType::Palette16:
 
   32       return palette16code[index_][is_background_color];
 
   34     case ColorType::Palette256:
 
   35       return (is_background_color ? 
"48;5;" : 
"38;5;") + 
std::to_string(index_);
 
   37     case ColorType::TrueColor:
 
   38       return (is_background_color ? 
"48;2;" : 
"38;2;")  
 
   63   type_ = ColorType::Palette16;
 
   75     : type_(ColorType::
TrueColor), red_(red), green_(green), blue_(blue) {
 
   79   int closest = 256 * 256 * 3;
 
   81   for (
int i = 16; i < 256; ++i) {
 
   83     int dr = color_info.
red - red;
 
   84     int dg = color_info.
green - green;
 
   85     int db = color_info.
blue - blue;
 
   86     int dist = dr * dr + dg * dg + db * db;
 
   94     type_ = ColorType::Palette256;
 
   97     type_ = ColorType::Palette16;
 
  111   return Color(red, green, blue);
 
  124     return Color(v, v, v);
 
  126   uint8_t region = h / 43;
 
  127   uint8_t remainder = (h - (region * 43)) * 6;
 
  128   uint8_t p = (v * (255 - s)) >> 8;
 
  129   uint8_t q = (v * (255 - ((s * remainder) >> 8))) >> 8;
 
  130   uint8_t t = (v * (255 - ((s * (255 - remainder)) >> 8))) >> 8;
 
  134     case 0: 
return Color(v,t,p);
 
  135     case 1: 
return Color(q,v,p);
 
  136     case 2: 
return Color(p,v,t);
 
  137     case 3: 
return Color(p,q,v);
 
  138     case 4: 
return Color(t,p,v);
 
  139     case 5: 
return Color(v,p,q);
 
  143   return Color(0, 0, 0);