/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "config.h" #include "terminal/palette.h" #include #include /** * A guac_terminal_color definition associated with a descriptive name. */ typedef struct guac_terminal_named_color { /** * The color associated with the name. */ guac_terminal_color color; /** * The name of the color. Each name must be lowercase and may not contain * any whitespace. */ const char* name; } guac_terminal_named_color; /** * An array of several colors and their corresponding names. This array must at * least contain the color names accepted by xterm. */ const guac_terminal_named_color GUAC_TERMINAL_NAMED_COLORS[] = { /* Color names supported by xterm */ {{ -1, 0xF0, 0xF8, 0xFF }, "aliceblue" }, {{ -1, 0xFA, 0xEB, 0xD7 }, "antiquewhite" }, {{ -1, 0xFF, 0xEF, 0xDB }, "antiquewhite1" }, {{ -1, 0xEE, 0xDF, 0xCC }, "antiquewhite2" }, {{ -1, 0xCD, 0xC0, 0xB0 }, "antiquewhite3" }, {{ -1, 0x8B, 0x83, 0x78 }, "antiquewhite4" }, {{ -1, 0x00, 0xFF, 0xFF }, "aqua" }, {{ -1, 0x7F, 0xFF, 0xD4 }, "aquamarine" }, {{ -1, 0x7F, 0xFF, 0xD4 }, "aquamarine1" }, {{ -1, 0x76, 0xEE, 0xC6 }, "aquamarine2" }, {{ -1, 0x66, 0xCD, 0xAA }, "aquamarine3" }, {{ -1, 0x45, 0x8B, 0x74 }, "aquamarine4" }, {{ -1, 0xF0, 0xFF, 0xFF }, "azure" }, {{ -1, 0xF0, 0xFF, 0xFF }, "azure1" }, {{ -1, 0xE0, 0xEE, 0xEE }, "azure2" }, {{ -1, 0xC1, 0xCD, 0xCD }, "azure3" }, {{ -1, 0x83, 0x8B, 0x8B }, "azure4" }, {{ -1, 0xF5, 0xF5, 0xDC }, "beige" }, {{ -1, 0xFF, 0xE4, 0xC4 }, "bisque" }, {{ -1, 0xFF, 0xE4, 0xC4 }, "bisque1" }, {{ -1, 0xEE, 0xD5, 0xB7 }, "bisque2" }, {{ -1, 0xCD, 0xB7, 0x9E }, "bisque3" }, {{ -1, 0x8B, 0x7D, 0x6B }, "bisque4" }, {{ -1, 0x00, 0x00, 0x00 }, "black" }, {{ -1, 0xFF, 0xEB, 0xCD }, "blanchedalmond" }, {{ -1, 0x00, 0x00, 0xFF }, "blue" }, {{ -1, 0x00, 0x00, 0xFF }, "blue1" }, {{ -1, 0x00, 0x00, 0xEE }, "blue2" }, {{ -1, 0x00, 0x00, 0xCD }, "blue3" }, {{ -1, 0x00, 0x00, 0x8B }, "blue4" }, {{ -1, 0x8A, 0x2B, 0xE2 }, "blueviolet" }, {{ -1, 0xA5, 0x2A, 0x2A }, "brown" }, {{ -1, 0xFF, 0x40, 0x40 }, "brown1" }, {{ -1, 0xEE, 0x3B, 0x3B }, "brown2" }, {{ -1, 0xCD, 0x33, 0x33 }, "brown3" }, {{ -1, 0x8B, 0x23, 0x23 }, "brown4" }, {{ -1, 0xDE, 0xB8, 0x87 }, "burlywood" }, {{ -1, 0xFF, 0xD3, 0x9B }, "burlywood1" }, {{ -1, 0xEE, 0xC5, 0x91 }, "burlywood2" }, {{ -1, 0xCD, 0xAA, 0x7D }, "burlywood3" }, {{ -1, 0x8B, 0x73, 0x55 }, "burlywood4" }, {{ -1, 0x5F, 0x9E, 0xA0 }, "cadetblue" }, {{ -1, 0x98, 0xF5, 0xFF }, "cadetblue1" }, {{ -1, 0x8E, 0xE5, 0xEE }, "cadetblue2" }, {{ -1, 0x7A, 0xC5, 0xCD }, "cadetblue3" }, {{ -1, 0x53, 0x86, 0x8B }, "cadetblue4" }, {{ -1, 0x7F, 0xFF, 0x00 }, "chartreuse" }, {{ -1, 0x7F, 0xFF, 0x00 }, "chartreuse1" }, {{ -1, 0x76, 0xEE, 0x00 }, "chartreuse2" }, {{ -1, 0x66, 0xCD, 0x00 }, "chartreuse3" }, {{ -1, 0x45, 0x8B, 0x00 }, "chartreuse4" }, {{ -1, 0xD2, 0x69, 0x1E }, "chocolate" }, {{ -1, 0xFF, 0x7F, 0x24 }, "chocolate1" }, {{ -1, 0xEE, 0x76, 0x21 }, "chocolate2" }, {{ -1, 0xCD, 0x66, 0x1D }, "chocolate3" }, {{ -1, 0x8B, 0x45, 0x13 }, "chocolate4" }, {{ -1, 0xFF, 0x7F, 0x50 }, "coral" }, {{ -1, 0xFF, 0x72, 0x56 }, "coral1" }, {{ -1, 0xEE, 0x6A, 0x50 }, "coral2" }, {{ -1, 0xCD, 0x5B, 0x45 }, "coral3" }, {{ -1, 0x8B, 0x3E, 0x2F }, "coral4" }, {{ -1, 0x64, 0x95, 0xED }, "cornflowerblue" }, {{ -1, 0xFF, 0xF8, 0xDC }, "cornsilk" }, {{ -1, 0xFF, 0xF8, 0xDC }, "cornsilk1" }, {{ -1, 0xEE, 0xE8, 0xCD }, "cornsilk2" }, {{ -1, 0xCD, 0xC8, 0xB1 }, "cornsilk3" }, {{ -1, 0x8B, 0x88, 0x78 }, "cornsilk4" }, {{ -1, 0xDC, 0x14, 0x3C }, "crimson" }, {{ -1, 0x00, 0xFF, 0xFF }, "cyan" }, {{ -1, 0x00, 0xFF, 0xFF }, "cyan1" }, {{ -1, 0x00, 0xEE, 0xEE }, "cyan2" }, {{ -1, 0x00, 0xCD, 0xCD }, "cyan3" }, {{ -1, 0x00, 0x8B, 0x8B }, "cyan4" }, {{ -1, 0x00, 0x00, 0x8B }, "darkblue" }, {{ -1, 0x00, 0x8B, 0x8B }, "darkcyan" }, {{ -1, 0xB8, 0x86, 0x0B }, "darkgoldenrod" }, {{ -1, 0xFF, 0xB9, 0x0F }, "darkgoldenrod1" }, {{ -1, 0xEE, 0xAD, 0x0E }, "darkgoldenrod2" }, {{ -1, 0xCD, 0x95, 0x0C }, "darkgoldenrod3" }, {{ -1, 0x8B, 0x65, 0x08 }, "darkgoldenrod4" }, {{ -1, 0xA9, 0xA9, 0xA9 }, "darkgray" }, {{ -1, 0x00, 0x64, 0x00 }, "darkgreen" }, {{ -1, 0xA9, 0xA9, 0xA9 }, "darkgrey" }, {{ -1, 0xBD, 0xB7, 0x6B }, "darkkhaki" }, {{ -1, 0x8B, 0x00, 0x8B }, "darkmagenta" }, {{ -1, 0x55, 0x6B, 0x2F }, "darkolivegreen" }, {{ -1, 0xCA, 0xFF, 0x70 }, "darkolivegreen1" }, {{ -1, 0xBC, 0xEE, 0x68 }, "darkolivegreen2" }, {{ -1, 0xA2, 0xCD, 0x5A }, "darkolivegreen3" }, {{ -1, 0x6E, 0x8B, 0x3D }, "darkolivegreen4" }, {{ -1, 0xFF, 0x8C, 0x00 }, "darkorange" }, {{ -1, 0xFF, 0x7F, 0x00 }, "darkorange1" }, {{ -1, 0xEE, 0x76, 0x00 }, "darkorange2" }, {{ -1, 0xCD, 0x66, 0x00 }, "darkorange3" }, {{ -1, 0x8B, 0x45, 0x00 }, "darkorange4" }, {{ -1, 0x99, 0x32, 0xCC }, "darkorchid" }, {{ -1, 0xBF, 0x3E, 0xFF }, "darkorchid1" }, {{ -1, 0xB2, 0x3A, 0xEE }, "darkorchid2" }, {{ -1, 0x9A, 0x32, 0xCD }, "darkorchid3" }, {{ -1, 0x68, 0x22, 0x8B }, "darkorchid4" }, {{ -1, 0x8B, 0x00, 0x00 }, "darkred" }, {{ -1, 0xE9, 0x96, 0x7A }, "darksalmon" }, {{ -1, 0x8F, 0xBC, 0x8F }, "darkseagreen" }, {{ -1, 0xC1, 0xFF, 0xC1 }, "darkseagreen1" }, {{ -1, 0xB4, 0xEE, 0xB4 }, "darkseagreen2" }, {{ -1, 0x9B, 0xCD, 0x9B }, "darkseagreen3" }, {{ -1, 0x69, 0x8B, 0x69 }, "darkseagreen4" }, {{ -1, 0x48, 0x3D, 0x8B }, "darkslateblue" }, {{ -1, 0x2F, 0x4F, 0x4F }, "darkslategray" }, {{ -1, 0x97, 0xFF, 0xFF }, "darkslategray1" }, {{ -1, 0x8D, 0xEE, 0xEE }, "darkslategray2" }, {{ -1, 0x79, 0xCD, 0xCD }, "darkslategray3" }, {{ -1, 0x52, 0x8B, 0x8B }, "darkslategray4" }, {{ -1, 0x2F, 0x4F, 0x4F }, "darkslategrey" }, {{ -1, 0x00, 0xCE, 0xD1 }, "darkturquoise" }, {{ -1, 0x94, 0x00, 0xD3 }, "darkviolet" }, {{ -1, 0xFF, 0x14, 0x93 }, "deeppink" }, {{ -1, 0xFF, 0x14, 0x93 }, "deeppink1" }, {{ -1, 0xEE, 0x12, 0x89 }, "deeppink2" }, {{ -1, 0xCD, 0x10, 0x76 }, "deeppink3" }, {{ -1, 0x8B, 0x0A, 0x50 }, "deeppink4" }, {{ -1, 0x00, 0xBF, 0xFF }, "deepskyblue" }, {{ -1, 0x00, 0xBF, 0xFF }, "deepskyblue1" }, {{ -1, 0x00, 0xB2, 0xEE }, "deepskyblue2" }, {{ -1, 0x00, 0x9A, 0xCD }, "deepskyblue3" }, {{ -1, 0x00, 0x68, 0x8B }, "deepskyblue4" }, {{ -1, 0x69, 0x69, 0x69 }, "dimgray" }, {{ -1, 0x69, 0x69, 0x69 }, "dimgrey" }, {{ -1, 0x1E, 0x90, 0xFF }, "dodgerblue" }, {{ -1, 0x1E, 0x90, 0xFF }, "dodgerblue1" }, {{ -1, 0x1C, 0x86, 0xEE }, "dodgerblue2" }, {{ -1, 0x18, 0x74, 0xCD }, "dodgerblue3" }, {{ -1, 0x10, 0x4E, 0x8B }, "dodgerblue4" }, {{ -1, 0xB2, 0x22, 0x22 }, "firebrick" }, {{ -1, 0xFF, 0x30, 0x30 }, "firebrick1" }, {{ -1, 0xEE, 0x2C, 0x2C }, "firebrick2" }, {{ -1, 0xCD, 0x26, 0x26 }, "firebrick3" }, {{ -1, 0x8B, 0x1A, 0x1A }, "firebrick4" }, {{ -1, 0xFF, 0xFA, 0xF0 }, "floralwhite" }, {{ -1, 0x22, 0x8B, 0x22 }, "forestgreen" }, {{ -1, 0xFF, 0x00, 0xFF }, "fuchsia" }, {{ -1, 0xDC, 0xDC, 0xDC }, "gainsboro" }, {{ -1, 0xF8, 0xF8, 0xFF }, "ghostwhite" }, {{ -1, 0xFF, 0xD7, 0x00 }, "gold" }, {{ -1, 0xFF, 0xD7, 0x00 }, "gold1" }, {{ -1, 0xEE, 0xC9, 0x00 }, "gold2" }, {{ -1, 0xCD, 0xAD, 0x00 }, "gold3" }, {{ -1, 0x8B, 0x75, 0x00 }, "gold4" }, {{ -1, 0xDA, 0xA5, 0x20 }, "goldenrod" }, {{ -1, 0xFF, 0xC1, 0x25 }, "goldenrod1" }, {{ -1, 0xEE, 0xB4, 0x22 }, "goldenrod2" }, {{ -1, 0xCD, 0x9B, 0x1D }, "goldenrod3" }, {{ -1, 0x8B, 0x69, 0x14 }, "goldenrod4" }, {{ -1, 0xBE, 0xBE, 0xBE }, "gray" }, {{ -1, 0x00, 0x00, 0x00 }, "gray0" }, {{ -1, 0x03, 0x03, 0x03 }, "gray1" }, {{ -1, 0x1A, 0x1A, 0x1A }, "gray10" }, {{ -1, 0xFF, 0xFF, 0xFF }, "gray100" }, {{ -1, 0x1C, 0x1C, 0x1C }, "gray11" }, {{ -1, 0x1F, 0x1F, 0x1F }, "gray12" }, {{ -1, 0x21, 0x21, 0x21 }, "gray13" }, {{ -1, 0x24, 0x24, 0x24 }, "gray14" }, {{ -1, 0x26, 0x26, 0x26 }, "gray15" }, {{ -1, 0x29, 0x29, 0x29 }, "gray16" }, {{ -1, 0x2B, 0x2B, 0x2B }, "gray17" }, {{ -1, 0x2E, 0x2E, 0x2E }, "gray18" }, {{ -1, 0x30, 0x30, 0x30 }, "gray19" }, {{ -1, 0x05, 0x05, 0x05 }, "gray2" }, {{ -1, 0x33, 0x33, 0x33 }, "gray20" }, {{ -1, 0x36, 0x36, 0x36 }, "gray21" }, {{ -1, 0x38, 0x38, 0x38 }, "gray22" }, {{ -1, 0x3B, 0x3B, 0x3B }, "gray23" }, {{ -1, 0x3D, 0x3D, 0x3D }, "gray24" }, {{ -1, 0x40, 0x40, 0x40 }, "gray25" }, {{ -1, 0x42, 0x42, 0x42 }, "gray26" }, {{ -1, 0x45, 0x45, 0x45 }, "gray27" }, {{ -1, 0x47, 0x47, 0x47 }, "gray28" }, {{ -1, 0x4A, 0x4A, 0x4A }, "gray29" }, {{ -1, 0x08, 0x08, 0x08 }, "gray3" }, {{ -1, 0x4D, 0x4D, 0x4D }, "gray30" }, {{ -1, 0x4F, 0x4F, 0x4F }, "gray31" }, {{ -1, 0x52, 0x52, 0x52 }, "gray32" }, {{ -1, 0x54, 0x54, 0x54 }, "gray33" }, {{ -1, 0x57, 0x57, 0x57 }, "gray34" }, {{ -1, 0x59, 0x59, 0x59 }, "gray35" }, {{ -1, 0x5C, 0x5C, 0x5C }, "gray36" }, {{ -1, 0x5E, 0x5E, 0x5E }, "gray37" }, {{ -1, 0x61, 0x61, 0x61 }, "gray38" }, {{ -1, 0x63, 0x63, 0x63 }, "gray39" }, {{ -1, 0x0A, 0x0A, 0x0A }, "gray4" }, {{ -1, 0x66, 0x66, 0x66 }, "gray40" }, {{ -1, 0x69, 0x69, 0x69 }, "gray41" }, {{ -1, 0x6B, 0x6B, 0x6B }, "gray42" }, {{ -1, 0x6E, 0x6E, 0x6E }, "gray43" }, {{ -1, 0x70, 0x70, 0x70 }, "gray44" }, {{ -1, 0x73, 0x73, 0x73 }, "gray45" }, {{ -1, 0x75, 0x75, 0x75 }, "gray46" }, {{ -1, 0x78, 0x78, 0x78 }, "gray47" }, {{ -1, 0x7A, 0x7A, 0x7A }, "gray48" }, {{ -1, 0x7D, 0x7D, 0x7D }, "gray49" }, {{ -1, 0x0D, 0x0D, 0x0D }, "gray5" }, {{ -1, 0x7F, 0x7F, 0x7F }, "gray50" }, {{ -1, 0x82, 0x82, 0x82 }, "gray51" }, {{ -1, 0x85, 0x85, 0x85 }, "gray52" }, {{ -1, 0x87, 0x87, 0x87 }, "gray53" }, {{ -1, 0x8A, 0x8A, 0x8A }, "gray54" }, {{ -1, 0x8C, 0x8C, 0x8C }, "gray55" }, {{ -1, 0x8F, 0x8F, 0x8F }, "gray56" }, {{ -1, 0x91, 0x91, 0x91 }, "gray57" }, {{ -1, 0x94, 0x94, 0x94 }, "gray58" }, {{ -1, 0x96, 0x96, 0x96 }, "gray59" }, {{ -1, 0x0F, 0x0F, 0x0F }, "gray6" }, {{ -1, 0x99, 0x99, 0x99 }, "gray60" }, {{ -1, 0x9C, 0x9C, 0x9C }, "gray61" }, {{ -1, 0x9E, 0x9E, 0x9E }, "gray62" }, {{ -1, 0xA1, 0xA1, 0xA1 }, "gray63" }, {{ -1, 0xA3, 0xA3, 0xA3 }, "gray64" }, {{ -1, 0xA6, 0xA6, 0xA6 }, "gray65" }, {{ -1, 0xA8, 0xA8, 0xA8 }, "gray66" }, {{ -1, 0xAB, 0xAB, 0xAB }, "gray67" }, {{ -1, 0xAD, 0xAD, 0xAD }, "gray68" }, {{ -1, 0xB0, 0xB0, 0xB0 }, "gray69" }, {{ -1, 0x12, 0x12, 0x12 }, "gray7" }, {{ -1, 0xB3, 0xB3, 0xB3 }, "gray70" }, {{ -1, 0xB5, 0xB5, 0xB5 }, "gray71" }, {{ -1, 0xB8, 0xB8, 0xB8 }, "gray72" }, {{ -1, 0xBA, 0xBA, 0xBA }, "gray73" }, {{ -1, 0xBD, 0xBD, 0xBD }, "gray74" }, {{ -1, 0xBF, 0xBF, 0xBF }, "gray75" }, {{ -1, 0xC2, 0xC2, 0xC2 }, "gray76" }, {{ -1, 0xC4, 0xC4, 0xC4 }, "gray77" }, {{ -1, 0xC7, 0xC7, 0xC7 }, "gray78" }, {{ -1, 0xC9, 0xC9, 0xC9 }, "gray79" }, {{ -1, 0x14, 0x14, 0x14 }, "gray8" }, {{ -1, 0xCC, 0xCC, 0xCC }, "gray80" }, {{ -1, 0xCF, 0xCF, 0xCF }, "gray81" }, {{ -1, 0xD1, 0xD1, 0xD1 }, "gray82" }, {{ -1, 0xD4, 0xD4, 0xD4 }, "gray83" }, {{ -1, 0xD6, 0xD6, 0xD6 }, "gray84" }, {{ -1, 0xD9, 0xD9, 0xD9 }, "gray85" }, {{ -1, 0xDB, 0xDB, 0xDB }, "gray86" }, {{ -1, 0xDE, 0xDE, 0xDE }, "gray87" }, {{ -1, 0xE0, 0xE0, 0xE0 }, "gray88" }, {{ -1, 0xE3, 0xE3, 0xE3 }, "gray89" }, {{ -1, 0x17, 0x17, 0x17 }, "gray9" }, {{ -1, 0xE5, 0xE5, 0xE5 }, "gray90" }, {{ -1, 0xE8, 0xE8, 0xE8 }, "gray91" }, {{ -1, 0xEB, 0xEB, 0xEB }, "gray92" }, {{ -1, 0xED, 0xED, 0xED }, "gray93" }, {{ -1, 0xF0, 0xF0, 0xF0 }, "gray94" }, {{ -1, 0xF2, 0xF2, 0xF2 }, "gray95" }, {{ -1, 0xF5, 0xF5, 0xF5 }, "gray96" }, {{ -1, 0xF7, 0xF7, 0xF7 }, "gray97" }, {{ -1, 0xFA, 0xFA, 0xFA }, "gray98" }, {{ -1, 0xFC, 0xFC, 0xFC }, "gray99" }, {{ -1, 0x00, 0xFF, 0x00 }, "green" }, {{ -1, 0x00, 0xFF, 0x00 }, "green1" }, {{ -1, 0x00, 0xEE, 0x00 }, "green2" }, {{ -1, 0x00, 0xCD, 0x00 }, "green3" }, {{ -1, 0x00, 0x8B, 0x00 }, "green4" }, {{ -1, 0xAD, 0xFF, 0x2F }, "greenyellow" }, {{ -1, 0xBE, 0xBE, 0xBE }, "grey" }, {{ -1, 0x00, 0x00, 0x00 }, "grey0" }, {{ -1, 0x03, 0x03, 0x03 }, "grey1" }, {{ -1, 0x1A, 0x1A, 0x1A }, "grey10" }, {{ -1, 0xFF, 0xFF, 0xFF }, "grey100" }, {{ -1, 0x1C, 0x1C, 0x1C }, "grey11" }, {{ -1, 0x1F, 0x1F, 0x1F }, "grey12" }, {{ -1, 0x21, 0x21, 0x21 }, "grey13" }, {{ -1, 0x24, 0x24, 0x24 }, "grey14" }, {{ -1, 0x26, 0x26, 0x26 }, "grey15" }, {{ -1, 0x29, 0x29, 0x29 }, "grey16" }, {{ -1, 0x2B, 0x2B, 0x2B }, "grey17" }, {{ -1, 0x2E, 0x2E, 0x2E }, "grey18" }, {{ -1, 0x30, 0x30, 0x30 }, "grey19" }, {{ -1, 0x05, 0x05, 0x05 }, "grey2" }, {{ -1, 0x33, 0x33, 0x33 }, "grey20" }, {{ -1, 0x36, 0x36, 0x36 }, "grey21" }, {{ -1, 0x38, 0x38, 0x38 }, "grey22" }, {{ -1, 0x3B, 0x3B, 0x3B }, "grey23" }, {{ -1, 0x3D, 0x3D, 0x3D }, "grey24" }, {{ -1, 0x40, 0x40, 0x40 }, "grey25" }, {{ -1, 0x42, 0x42, 0x42 }, "grey26" }, {{ -1, 0x45, 0x45, 0x45 }, "grey27" }, {{ -1, 0x47, 0x47, 0x47 }, "grey28" }, {{ -1, 0x4A, 0x4A, 0x4A }, "grey29" }, {{ -1, 0x08, 0x08, 0x08 }, "grey3" }, {{ -1, 0x4D, 0x4D, 0x4D }, "grey30" }, {{ -1, 0x4F, 0x4F, 0x4F }, "grey31" }, {{ -1, 0x52, 0x52, 0x52 }, "grey32" }, {{ -1, 0x54, 0x54, 0x54 }, "grey33" }, {{ -1, 0x57, 0x57, 0x57 }, "grey34" }, {{ -1, 0x59, 0x59, 0x59 }, "grey35" }, {{ -1, 0x5C, 0x5C, 0x5C }, "grey36" }, {{ -1, 0x5E, 0x5E, 0x5E }, "grey37" }, {{ -1, 0x61, 0x61, 0x61 }, "grey38" }, {{ -1, 0x63, 0x63, 0x63 }, "grey39" }, {{ -1, 0x0A, 0x0A, 0x0A }, "grey4" }, {{ -1, 0x66, 0x66, 0x66 }, "grey40" }, {{ -1, 0x69, 0x69, 0x69 }, "grey41" }, {{ -1, 0x6B, 0x6B, 0x6B }, "grey42" }, {{ -1, 0x6E, 0x6E, 0x6E }, "grey43" }, {{ -1, 0x70, 0x70, 0x70 }, "grey44" }, {{ -1, 0x73, 0x73, 0x73 }, "grey45" }, {{ -1, 0x75, 0x75, 0x75 }, "grey46" }, {{ -1, 0x78, 0x78, 0x78 }, "grey47" }, {{ -1, 0x7A, 0x7A, 0x7A }, "grey48" }, {{ -1, 0x7D, 0x7D, 0x7D }, "grey49" }, {{ -1, 0x0D, 0x0D, 0x0D }, "grey5" }, {{ -1, 0x7F, 0x7F, 0x7F }, "grey50" }, {{ -1, 0x82, 0x82, 0x82 }, "grey51" }, {{ -1, 0x85, 0x85, 0x85 }, "grey52" }, {{ -1, 0x87, 0x87, 0x87 }, "grey53" }, {{ -1, 0x8A, 0x8A, 0x8A }, "grey54" }, {{ -1, 0x8C, 0x8C, 0x8C }, "grey55" }, {{ -1, 0x8F, 0x8F, 0x8F }, "grey56" }, {{ -1, 0x91, 0x91, 0x91 }, "grey57" }, {{ -1, 0x94, 0x94, 0x94 }, "grey58" }, {{ -1, 0x96, 0x96, 0x96 }, "grey59" }, {{ -1, 0x0F, 0x0F, 0x0F }, "grey6" }, {{ -1, 0x99, 0x99, 0x99 }, "grey60" }, {{ -1, 0x9C, 0x9C, 0x9C }, "grey61" }, {{ -1, 0x9E, 0x9E, 0x9E }, "grey62" }, {{ -1, 0xA1, 0xA1, 0xA1 }, "grey63" }, {{ -1, 0xA3, 0xA3, 0xA3 }, "grey64" }, {{ -1, 0xA6, 0xA6, 0xA6 }, "grey65" }, {{ -1, 0xA8, 0xA8, 0xA8 }, "grey66" }, {{ -1, 0xAB, 0xAB, 0xAB }, "grey67" }, {{ -1, 0xAD, 0xAD, 0xAD }, "grey68" }, {{ -1, 0xB0, 0xB0, 0xB0 }, "grey69" }, {{ -1, 0x12, 0x12, 0x12 }, "grey7" }, {{ -1, 0xB3, 0xB3, 0xB3 }, "grey70" }, {{ -1, 0xB5, 0xB5, 0xB5 }, "grey71" }, {{ -1, 0xB8, 0xB8, 0xB8 }, "grey72" }, {{ -1, 0xBA, 0xBA, 0xBA }, "grey73" }, {{ -1, 0xBD, 0xBD, 0xBD }, "grey74" }, {{ -1, 0xBF, 0xBF, 0xBF }, "grey75" }, {{ -1, 0xC2, 0xC2, 0xC2 }, "grey76" }, {{ -1, 0xC4, 0xC4, 0xC4 }, "grey77" }, {{ -1, 0xC7, 0xC7, 0xC7 }, "grey78" }, {{ -1, 0xC9, 0xC9, 0xC9 }, "grey79" }, {{ -1, 0x14, 0x14, 0x14 }, "grey8" }, {{ -1, 0xCC, 0xCC, 0xCC }, "grey80" }, {{ -1, 0xCF, 0xCF, 0xCF }, "grey81" }, {{ -1, 0xD1, 0xD1, 0xD1 }, "grey82" }, {{ -1, 0xD4, 0xD4, 0xD4 }, "grey83" }, {{ -1, 0xD6, 0xD6, 0xD6 }, "grey84" }, {{ -1, 0xD9, 0xD9, 0xD9 }, "grey85" }, {{ -1, 0xDB, 0xDB, 0xDB }, "grey86" }, {{ -1, 0xDE, 0xDE, 0xDE }, "grey87" }, {{ -1, 0xE0, 0xE0, 0xE0 }, "grey88" }, {{ -1, 0xE3, 0xE3, 0xE3 }, "grey89" }, {{ -1, 0x17, 0x17, 0x17 }, "grey9" }, {{ -1, 0xE5, 0xE5, 0xE5 }, "grey90" }, {{ -1, 0xE8, 0xE8, 0xE8 }, "grey91" }, {{ -1, 0xEB, 0xEB, 0xEB }, "grey92" }, {{ -1, 0xED, 0xED, 0xED }, "grey93" }, {{ -1, 0xF0, 0xF0, 0xF0 }, "grey94" }, {{ -1, 0xF2, 0xF2, 0xF2 }, "grey95" }, {{ -1, 0xF5, 0xF5, 0xF5 }, "grey96" }, {{ -1, 0xF7, 0xF7, 0xF7 }, "grey97" }, {{ -1, 0xFA, 0xFA, 0xFA }, "grey98" }, {{ -1, 0xFC, 0xFC, 0xFC }, "grey99" }, {{ -1, 0xF0, 0xFF, 0xF0 }, "honeydew" }, {{ -1, 0xF0, 0xFF, 0xF0 }, "honeydew1" }, {{ -1, 0xE0, 0xEE, 0xE0 }, "honeydew2" }, {{ -1, 0xC1, 0xCD, 0xC1 }, "honeydew3" }, {{ -1, 0x83, 0x8B, 0x83 }, "honeydew4" }, {{ -1, 0xFF, 0x69, 0xB4 }, "hotpink" }, {{ -1, 0xFF, 0x6E, 0xB4 }, "hotpink1" }, {{ -1, 0xEE, 0x6A, 0xA7 }, "hotpink2" }, {{ -1, 0xCD, 0x60, 0x90 }, "hotpink3" }, {{ -1, 0x8B, 0x3A, 0x62 }, "hotpink4" }, {{ -1, 0xCD, 0x5C, 0x5C }, "indianred" }, {{ -1, 0xFF, 0x6A, 0x6A }, "indianred1" }, {{ -1, 0xEE, 0x63, 0x63 }, "indianred2" }, {{ -1, 0xCD, 0x55, 0x55 }, "indianred3" }, {{ -1, 0x8B, 0x3A, 0x3A }, "indianred4" }, {{ -1, 0x4B, 0x00, 0x82 }, "indigo" }, {{ -1, 0xFF, 0xFF, 0xF0 }, "ivory" }, {{ -1, 0xFF, 0xFF, 0xF0 }, "ivory1" }, {{ -1, 0xEE, 0xEE, 0xE0 }, "ivory2" }, {{ -1, 0xCD, 0xCD, 0xC1 }, "ivory3" }, {{ -1, 0x8B, 0x8B, 0x83 }, "ivory4" }, {{ -1, 0xF0, 0xE6, 0x8C }, "khaki" }, {{ -1, 0xFF, 0xF6, 0x8F }, "khaki1" }, {{ -1, 0xEE, 0xE6, 0x85 }, "khaki2" }, {{ -1, 0xCD, 0xC6, 0x73 }, "khaki3" }, {{ -1, 0x8B, 0x86, 0x4E }, "khaki4" }, {{ -1, 0xE6, 0xE6, 0xFA }, "lavender" }, {{ -1, 0xFF, 0xF0, 0xF5 }, "lavenderblush" }, {{ -1, 0xFF, 0xF0, 0xF5 }, "lavenderblush1" }, {{ -1, 0xEE, 0xE0, 0xE5 }, "lavenderblush2" }, {{ -1, 0xCD, 0xC1, 0xC5 }, "lavenderblush3" }, {{ -1, 0x8B, 0x83, 0x86 }, "lavenderblush4" }, {{ -1, 0x7C, 0xFC, 0x00 }, "lawngreen" }, {{ -1, 0xFF, 0xFA, 0xCD }, "lemonchiffon" }, {{ -1, 0xFF, 0xFA, 0xCD }, "lemonchiffon1" }, {{ -1, 0xEE, 0xE9, 0xBF }, "lemonchiffon2" }, {{ -1, 0xCD, 0xC9, 0xA5 }, "lemonchiffon3" }, {{ -1, 0x8B, 0x89, 0x70 }, "lemonchiffon4" }, {{ -1, 0xAD, 0xD8, 0xE6 }, "lightblue" }, {{ -1, 0xBF, 0xEF, 0xFF }, "lightblue1" }, {{ -1, 0xB2, 0xDF, 0xEE }, "lightblue2" }, {{ -1, 0x9A, 0xC0, 0xCD }, "lightblue3" }, {{ -1, 0x68, 0x83, 0x8B }, "lightblue4" }, {{ -1, 0xF0, 0x80, 0x80 }, "lightcoral" }, {{ -1, 0xE0, 0xFF, 0xFF }, "lightcyan" }, {{ -1, 0xE0, 0xFF, 0xFF }, "lightcyan1" }, {{ -1, 0xD1, 0xEE, 0xEE }, "lightcyan2" }, {{ -1, 0xB4, 0xCD, 0xCD }, "lightcyan3" }, {{ -1, 0x7A, 0x8B, 0x8B }, "lightcyan4" }, {{ -1, 0xEE, 0xDD, 0x82 }, "lightgoldenrod" }, {{ -1, 0xFF, 0xEC, 0x8B }, "lightgoldenrod1" }, {{ -1, 0xEE, 0xDC, 0x82 }, "lightgoldenrod2" }, {{ -1, 0xCD, 0xBE, 0x70 }, "lightgoldenrod3" }, {{ -1, 0x8B, 0x81, 0x4C }, "lightgoldenrod4" }, {{ -1, 0xFA, 0xFA, 0xD2 }, "lightgoldenrodyellow" }, {{ -1, 0xD3, 0xD3, 0xD3 }, "lightgray" }, {{ -1, 0x90, 0xEE, 0x90 }, "lightgreen" }, {{ -1, 0xD3, 0xD3, 0xD3 }, "lightgrey" }, {{ -1, 0xFF, 0xB6, 0xC1 }, "lightpink" }, {{ -1, 0xFF, 0xAE, 0xB9 }, "lightpink1" }, {{ -1, 0xEE, 0xA2, 0xAD }, "lightpink2" }, {{ -1, 0xCD, 0x8C, 0x95 }, "lightpink3" }, {{ -1, 0x8B, 0x5F, 0x65 }, "lightpink4" }, {{ -1, 0xFF, 0xA0, 0x7A }, "lightsalmon" }, {{ -1, 0xFF, 0xA0, 0x7A }, "lightsalmon1" }, {{ -1, 0xEE, 0x95, 0x72 }, "lightsalmon2" }, {{ -1, 0xCD, 0x81, 0x62 }, "lightsalmon3" }, {{ -1, 0x8B, 0x57, 0x42 }, "lightsalmon4" }, {{ -1, 0x20, 0xB2, 0xAA }, "lightseagreen" }, {{ -1, 0x87, 0xCE, 0xFA }, "lightskyblue" }, {{ -1, 0xB0, 0xE2, 0xFF }, "lightskyblue1" }, {{ -1, 0xA4, 0xD3, 0xEE }, "lightskyblue2" }, {{ -1, 0x8D, 0xB6, 0xCD }, "lightskyblue3" }, {{ -1, 0x60, 0x7B, 0x8B }, "lightskyblue4" }, {{ -1, 0x84, 0x70, 0xFF }, "lightslateblue" }, {{ -1, 0x77, 0x88, 0x99 }, "lightslategray" }, {{ -1, 0x77, 0x88, 0x99 }, "lightslategrey" }, {{ -1, 0xB0, 0xC4, 0xDE }, "lightsteelblue" }, {{ -1, 0xCA, 0xE1, 0xFF }, "lightsteelblue1" }, {{ -1, 0xBC, 0xD2, 0xEE }, "lightsteelblue2" }, {{ -1, 0xA2, 0xB5, 0xCD }, "lightsteelblue3" }, {{ -1, 0x6E, 0x7B, 0x8B }, "lightsteelblue4" }, {{ -1, 0xFF, 0xFF, 0xE0 }, "lightyellow" }, {{ -1, 0xFF, 0xFF, 0xE0 }, "lightyellow1" }, {{ -1, 0xEE, 0xEE, 0xD1 }, "lightyellow2" }, {{ -1, 0xCD, 0xCD, 0xB4 }, "lightyellow3" }, {{ -1, 0x8B, 0x8B, 0x7A }, "lightyellow4" }, {{ -1, 0x00, 0xFF, 0x00 }, "lime" }, {{ -1, 0x32, 0xCD, 0x32 }, "limegreen" }, {{ -1, 0xFA, 0xF0, 0xE6 }, "linen" }, {{ -1, 0xFF, 0x00, 0xFF }, "magenta" }, {{ -1, 0xFF, 0x00, 0xFF }, "magenta1" }, {{ -1, 0xEE, 0x00, 0xEE }, "magenta2" }, {{ -1, 0xCD, 0x00, 0xCD }, "magenta3" }, {{ -1, 0x8B, 0x00, 0x8B }, "magenta4" }, {{ -1, 0xB0, 0x30, 0x60 }, "maroon" }, {{ -1, 0xFF, 0x34, 0xB3 }, "maroon1" }, {{ -1, 0xEE, 0x30, 0xA7 }, "maroon2" }, {{ -1, 0xCD, 0x29, 0x90 }, "maroon3" }, {{ -1, 0x8B, 0x1C, 0x62 }, "maroon4" }, {{ -1, 0x66, 0xCD, 0xAA }, "mediumaquamarine" }, {{ -1, 0x00, 0x00, 0xCD }, "mediumblue" }, {{ -1, 0xBA, 0x55, 0xD3 }, "mediumorchid" }, {{ -1, 0xE0, 0x66, 0xFF }, "mediumorchid1" }, {{ -1, 0xD1, 0x5F, 0xEE }, "mediumorchid2" }, {{ -1, 0xB4, 0x52, 0xCD }, "mediumorchid3" }, {{ -1, 0x7A, 0x37, 0x8B }, "mediumorchid4" }, {{ -1, 0x93, 0x70, 0xDB }, "mediumpurple" }, {{ -1, 0xAB, 0x82, 0xFF }, "mediumpurple1" }, {{ -1, 0x9F, 0x79, 0xEE }, "mediumpurple2" }, {{ -1, 0x89, 0x68, 0xCD }, "mediumpurple3" }, {{ -1, 0x5D, 0x47, 0x8B }, "mediumpurple4" }, {{ -1, 0x3C, 0xB3, 0x71 }, "mediumseagreen" }, {{ -1, 0x7B, 0x68, 0xEE }, "mediumslateblue" }, {{ -1, 0x00, 0xFA, 0x9A }, "mediumspringgreen" }, {{ -1, 0x48, 0xD1, 0xCC }, "mediumturquoise" }, {{ -1, 0xC7, 0x15, 0x85 }, "mediumvioletred" }, {{ -1, 0x19, 0x19, 0x70 }, "midnightblue" }, {{ -1, 0xF5, 0xFF, 0xFA }, "mintcream" }, {{ -1, 0xFF, 0xE4, 0xE1 }, "mistyrose" }, {{ -1, 0xFF, 0xE4, 0xE1 }, "mistyrose1" }, {{ -1, 0xEE, 0xD5, 0xD2 }, "mistyrose2" }, {{ -1, 0xCD, 0xB7, 0xB5 }, "mistyrose3" }, {{ -1, 0x8B, 0x7D, 0x7B }, "mistyrose4" }, {{ -1, 0xFF, 0xE4, 0xB5 }, "moccasin" }, {{ -1, 0xFF, 0xDE, 0xAD }, "navajowhite" }, {{ -1, 0xFF, 0xDE, 0xAD }, "navajowhite1" }, {{ -1, 0xEE, 0xCF, 0xA1 }, "navajowhite2" }, {{ -1, 0xCD, 0xB3, 0x8B }, "navajowhite3" }, {{ -1, 0x8B, 0x79, 0x5E }, "navajowhite4" }, {{ -1, 0x00, 0x00, 0x80 }, "navy" }, {{ -1, 0x00, 0x00, 0x80 }, "navyblue" }, {{ -1, 0xFD, 0xF5, 0xE6 }, "oldlace" }, {{ -1, 0x80, 0x80, 0x00 }, "olive" }, {{ -1, 0x6B, 0x8E, 0x23 }, "olivedrab" }, {{ -1, 0xC0, 0xFF, 0x3E }, "olivedrab1" }, {{ -1, 0xB3, 0xEE, 0x3A }, "olivedrab2" }, {{ -1, 0x9A, 0xCD, 0x32 }, "olivedrab3" }, {{ -1, 0x69, 0x8B, 0x22 }, "olivedrab4" }, {{ -1, 0xFF, 0xA5, 0x00 }, "orange" }, {{ -1, 0xFF, 0xA5, 0x00 }, "orange1" }, {{ -1, 0xEE, 0x9A, 0x00 }, "orange2" }, {{ -1, 0xCD, 0x85, 0x00 }, "orange3" }, {{ -1, 0x8B, 0x5A, 0x00 }, "orange4" }, {{ -1, 0xFF, 0x45, 0x00 }, "orangered" }, {{ -1, 0xFF, 0x45, 0x00 }, "orangered1" }, {{ -1, 0xEE, 0x40, 0x00 }, "orangered2" }, {{ -1, 0xCD, 0x37, 0x00 }, "orangered3" }, {{ -1, 0x8B, 0x25, 0x00 }, "orangered4" }, {{ -1, 0xDA, 0x70, 0xD6 }, "orchid" }, {{ -1, 0xFF, 0x83, 0xFA }, "orchid1" }, {{ -1, 0xEE, 0x7A, 0xE9 }, "orchid2" }, {{ -1, 0xCD, 0x69, 0xC9 }, "orchid3" }, {{ -1, 0x8B, 0x47, 0x89 }, "orchid4" }, {{ -1, 0xEE, 0xE8, 0xAA }, "palegoldenrod" }, {{ -1, 0x98, 0xFB, 0x98 }, "palegreen" }, {{ -1, 0x9A, 0xFF, 0x9A }, "palegreen1" }, {{ -1, 0x90, 0xEE, 0x90 }, "palegreen2" }, {{ -1, 0x7C, 0xCD, 0x7C }, "palegreen3" }, {{ -1, 0x54, 0x8B, 0x54 }, "palegreen4" }, {{ -1, 0xAF, 0xEE, 0xEE }, "paleturquoise" }, {{ -1, 0xBB, 0xFF, 0xFF }, "paleturquoise1" }, {{ -1, 0xAE, 0xEE, 0xEE }, "paleturquoise2" }, {{ -1, 0x96, 0xCD, 0xCD }, "paleturquoise3" }, {{ -1, 0x66, 0x8B, 0x8B }, "paleturquoise4" }, {{ -1, 0xDB, 0x70, 0x93 }, "palevioletred" }, {{ -1, 0xFF, 0x82, 0xAB }, "palevioletred1" }, {{ -1, 0xEE, 0x79, 0x9F }, "palevioletred2" }, {{ -1, 0xCD, 0x68, 0x89 }, "palevioletred3" }, {{ -1, 0x8B, 0x47, 0x5D }, "palevioletred4" }, {{ -1, 0xFF, 0xEF, 0xD5 }, "papayawhip" }, {{ -1, 0xFF, 0xDA, 0xB9 }, "peachpuff" }, {{ -1, 0xFF, 0xDA, 0xB9 }, "peachpuff1" }, {{ -1, 0xEE, 0xCB, 0xAD }, "peachpuff2" }, {{ -1, 0xCD, 0xAF, 0x95 }, "peachpuff3" }, {{ -1, 0x8B, 0x77, 0x65 }, "peachpuff4" }, {{ -1, 0xCD, 0x85, 0x3F }, "peru" }, {{ -1, 0xFF, 0xC0, 0xCB }, "pink" }, {{ -1, 0xFF, 0xB5, 0xC5 }, "pink1" }, {{ -1, 0xEE, 0xA9, 0xB8 }, "pink2" }, {{ -1, 0xCD, 0x91, 0x9E }, "pink3" }, {{ -1, 0x8B, 0x63, 0x6C }, "pink4" }, {{ -1, 0xDD, 0xA0, 0xDD }, "plum" }, {{ -1, 0xFF, 0xBB, 0xFF }, "plum1" }, {{ -1, 0xEE, 0xAE, 0xEE }, "plum2" }, {{ -1, 0xCD, 0x96, 0xCD }, "plum3" }, {{ -1, 0x8B, 0x66, 0x8B }, "plum4" }, {{ -1, 0xB0, 0xE0, 0xE6 }, "powderblue" }, {{ -1, 0xA0, 0x20, 0xF0 }, "purple" }, {{ -1, 0x9B, 0x30, 0xFF }, "purple1" }, {{ -1, 0x91, 0x2C, 0xEE }, "purple2" }, {{ -1, 0x7D, 0x26, 0xCD }, "purple3" }, {{ -1, 0x55, 0x1A, 0x8B }, "purple4" }, {{ -1, 0x66, 0x33, 0x99 }, "rebeccapurple" }, {{ -1, 0xFF, 0x00, 0x00 }, "red" }, {{ -1, 0xFF, 0x00, 0x00 }, "red1" }, {{ -1, 0xEE, 0x00, 0x00 }, "red2" }, {{ -1, 0xCD, 0x00, 0x00 }, "red3" }, {{ -1, 0x8B, 0x00, 0x00 }, "red4" }, {{ -1, 0xBC, 0x8F, 0x8F }, "rosybrown" }, {{ -1, 0xFF, 0xC1, 0xC1 }, "rosybrown1" }, {{ -1, 0xEE, 0xB4, 0xB4 }, "rosybrown2" }, {{ -1, 0xCD, 0x9B, 0x9B }, "rosybrown3" }, {{ -1, 0x8B, 0x69, 0x69 }, "rosybrown4" }, {{ -1, 0x41, 0x69, 0xE1 }, "royalblue" }, {{ -1, 0x48, 0x76, 0xFF }, "royalblue1" }, {{ -1, 0x43, 0x6E, 0xEE }, "royalblue2" }, {{ -1, 0x3A, 0x5F, 0xCD }, "royalblue3" }, {{ -1, 0x27, 0x40, 0x8B }, "royalblue4" }, {{ -1, 0x8B, 0x45, 0x13 }, "saddlebrown" }, {{ -1, 0xFA, 0x80, 0x72 }, "salmon" }, {{ -1, 0xFF, 0x8C, 0x69 }, "salmon1" }, {{ -1, 0xEE, 0x82, 0x62 }, "salmon2" }, {{ -1, 0xCD, 0x70, 0x54 }, "salmon3" }, {{ -1, 0x8B, 0x4C, 0x39 }, "salmon4" }, {{ -1, 0xF4, 0xA4, 0x60 }, "sandybrown" }, {{ -1, 0x2E, 0x8B, 0x57 }, "seagreen" }, {{ -1, 0x54, 0xFF, 0x9F }, "seagreen1" }, {{ -1, 0x4E, 0xEE, 0x94 }, "seagreen2" }, {{ -1, 0x43, 0xCD, 0x80 }, "seagreen3" }, {{ -1, 0x2E, 0x8B, 0x57 }, "seagreen4" }, {{ -1, 0xFF, 0xF5, 0xEE }, "seashell" }, {{ -1, 0xFF, 0xF5, 0xEE }, "seashell1" }, {{ -1, 0xEE, 0xE5, 0xDE }, "seashell2" }, {{ -1, 0xCD, 0xC5, 0xBF }, "seashell3" }, {{ -1, 0x8B, 0x86, 0x82 }, "seashell4" }, {{ -1, 0xA0, 0x52, 0x2D }, "sienna" }, {{ -1, 0xFF, 0x82, 0x47 }, "sienna1" }, {{ -1, 0xEE, 0x79, 0x42 }, "sienna2" }, {{ -1, 0xCD, 0x68, 0x39 }, "sienna3" }, {{ -1, 0x8B, 0x47, 0x26 }, "sienna4" }, {{ -1, 0xC0, 0xC0, 0xC0 }, "silver" }, {{ -1, 0x87, 0xCE, 0xEB }, "skyblue" }, {{ -1, 0x87, 0xCE, 0xFF }, "skyblue1" }, {{ -1, 0x7E, 0xC0, 0xEE }, "skyblue2" }, {{ -1, 0x6C, 0xA6, 0xCD }, "skyblue3" }, {{ -1, 0x4A, 0x70, 0x8B }, "skyblue4" }, {{ -1, 0x6A, 0x5A, 0xCD }, "slateblue" }, {{ -1, 0x83, 0x6F, 0xFF }, "slateblue1" }, {{ -1, 0x7A, 0x67, 0xEE }, "slateblue2" }, {{ -1, 0x69, 0x59, 0xCD }, "slateblue3" }, {{ -1, 0x47, 0x3C, 0x8B }, "slateblue4" }, {{ -1, 0x70, 0x80, 0x90 }, "slategray" }, {{ -1, 0xC6, 0xE2, 0xFF }, "slategray1" }, {{ -1, 0xB9, 0xD3, 0xEE }, "slategray2" }, {{ -1, 0x9F, 0xB6, 0xCD }, "slategray3" }, {{ -1, 0x6C, 0x7B, 0x8B }, "slategray4" }, {{ -1, 0x70, 0x80, 0x90 }, "slategrey" }, {{ -1, 0xFF, 0xFA, 0xFA }, "snow" }, {{ -1, 0xFF, 0xFA, 0xFA }, "snow1" }, {{ -1, 0xEE, 0xE9, 0xE9 }, "snow2" }, {{ -1, 0xCD, 0xC9, 0xC9 }, "snow3" }, {{ -1, 0x8B, 0x89, 0x89 }, "snow4" }, {{ -1, 0x00, 0xFF, 0x7F }, "springgreen" }, {{ -1, 0x00, 0xFF, 0x7F }, "springgreen1" }, {{ -1, 0x00, 0xEE, 0x76 }, "springgreen2" }, {{ -1, 0x00, 0xCD, 0x66 }, "springgreen3" }, {{ -1, 0x00, 0x8B, 0x45 }, "springgreen4" }, {{ -1, 0x46, 0x82, 0xB4 }, "steelblue" }, {{ -1, 0x63, 0xB8, 0xFF }, "steelblue1" }, {{ -1, 0x5C, 0xAC, 0xEE }, "steelblue2" }, {{ -1, 0x4F, 0x94, 0xCD }, "steelblue3" }, {{ -1, 0x36, 0x64, 0x8B }, "steelblue4" }, {{ -1, 0xD2, 0xB4, 0x8C }, "tan" }, {{ -1, 0xFF, 0xA5, 0x4F }, "tan1" }, {{ -1, 0xEE, 0x9A, 0x49 }, "tan2" }, {{ -1, 0xCD, 0x85, 0x3F }, "tan3" }, {{ -1, 0x8B, 0x5A, 0x2B }, "tan4" }, {{ -1, 0x00, 0x80, 0x80 }, "teal" }, {{ -1, 0xD8, 0xBF, 0xD8 }, "thistle" }, {{ -1, 0xFF, 0xE1, 0xFF }, "thistle1" }, {{ -1, 0xEE, 0xD2, 0xEE }, "thistle2" }, {{ -1, 0xCD, 0xB5, 0xCD }, "thistle3" }, {{ -1, 0x8B, 0x7B, 0x8B }, "thistle4" }, {{ -1, 0xFF, 0x63, 0x47 }, "tomato" }, {{ -1, 0xFF, 0x63, 0x47 }, "tomato1" }, {{ -1, 0xEE, 0x5C, 0x42 }, "tomato2" }, {{ -1, 0xCD, 0x4F, 0x39 }, "tomato3" }, {{ -1, 0x8B, 0x36, 0x26 }, "tomato4" }, {{ -1, 0x40, 0xE0, 0xD0 }, "turquoise" }, {{ -1, 0x00, 0xF5, 0xFF }, "turquoise1" }, {{ -1, 0x00, 0xE5, 0xEE }, "turquoise2" }, {{ -1, 0x00, 0xC5, 0xCD }, "turquoise3" }, {{ -1, 0x00, 0x86, 0x8B }, "turquoise4" }, {{ -1, 0xEE, 0x82, 0xEE }, "violet" }, {{ -1, 0xD0, 0x20, 0x90 }, "violetred" }, {{ -1, 0xFF, 0x3E, 0x96 }, "violetred1" }, {{ -1, 0xEE, 0x3A, 0x8C }, "violetred2" }, {{ -1, 0xCD, 0x32, 0x78 }, "violetred3" }, {{ -1, 0x8B, 0x22, 0x52 }, "violetred4" }, {{ -1, 0x80, 0x80, 0x80 }, "webgray" }, {{ -1, 0x00, 0x80, 0x00 }, "webgreen" }, {{ -1, 0x80, 0x80, 0x80 }, "webgrey" }, {{ -1, 0x80, 0x00, 0x00 }, "webmaroon" }, {{ -1, 0x80, 0x00, 0x80 }, "webpurple" }, {{ -1, 0xF5, 0xDE, 0xB3 }, "wheat" }, {{ -1, 0xFF, 0xE7, 0xBA }, "wheat1" }, {{ -1, 0xEE, 0xD8, 0xAE }, "wheat2" }, {{ -1, 0xCD, 0xBA, 0x96 }, "wheat3" }, {{ -1, 0x8B, 0x7E, 0x66 }, "wheat4" }, {{ -1, 0xFF, 0xFF, 0xFF }, "white" }, {{ -1, 0xF5, 0xF5, 0xF5 }, "whitesmoke" }, {{ -1, 0xBE, 0xBE, 0xBE }, "x11gray" }, {{ -1, 0x00, 0xFF, 0x00 }, "x11green" }, {{ -1, 0xBE, 0xBE, 0xBE }, "x11grey" }, {{ -1, 0xB0, 0x30, 0x60 }, "x11maroon" }, {{ -1, 0xA0, 0x20, 0xF0 }, "x11purple" }, {{ -1, 0xFF, 0xFF, 0x00 }, "yellow" }, {{ -1, 0xFF, 0xFF, 0x00 }, "yellow1" }, {{ -1, 0xEE, 0xEE, 0x00 }, "yellow2" }, {{ -1, 0xCD, 0xCD, 0x00 }, "yellow3" }, {{ -1, 0x8B, 0x8B, 0x00 }, "yellow4" }, {{ -1, 0x9A, 0xCD, 0x32 }, "yellowgreen" } }; /** * The number of elements within the GUAC_TERMINAL_NAMED_COLORS array. */ #define GUAC_TERMINAL_NAMED_COLORS_LENGTH \ (sizeof(GUAC_TERMINAL_NAMED_COLORS) / sizeof(guac_terminal_named_color)) /** * Compares the string search key given to bsearch() with the name of a * guac_terminal_named_color, ignoring case and whitespace. * * @param a * A pointer to a string containing the search key (color name). * * @param b * A pointer to a guac_terminal_named_color structure whose name should be * compared against the search key. * * @returns * Zero if the search key and color name are identical, a negative value if * the search key sorts before the color name, or a positive value if the * search key sorts after the color name. */ static int guac_terminal_named_color_search(const void* a, const void* b) { const char* key = (const char*) a; const char* name = ((const guac_terminal_named_color*) b)->name; /* For each corresponding character pair in each string */ for (; *key && *name; key++, name++) { /* Skip any spaces in key (name will never have spaces) */ while (*key && isspace(*key)) key++; /* Treat semi-colon as string terminator, to support parsing color names within a larger string (e.g. within the terminal color-scheme configuration string). */ const int keyChar = (*key == ';') ? '\0' : tolower(*key); /* Compare, ignoring case (name is already known to be lowercase) */ int difference = keyChar - *name; if (difference) return difference; } /* If we haven't reached the end of name yet, key is shorter */ if (*name) return -1; /* The strings are identical */ return 0; } int guac_terminal_find_color(const char* name, guac_terminal_color* color) { /* Search for the color having the given name */ guac_terminal_named_color* found = bsearch(name, GUAC_TERMINAL_NAMED_COLORS, GUAC_TERMINAL_NAMED_COLORS_LENGTH, sizeof(guac_terminal_named_color), guac_terminal_named_color_search); /* Fail if no such color is found */ if (found == NULL) return 1; /* Otherwise copy the found color */ *color = found->color; return 0; }