Accept names for (css-defined) colours, along with arg completion too for the color command too.

This commit is contained in:
Shpoike 2023-05-27 18:05:48 +01:00
parent 603eb89ca2
commit 00c45fbf10
1 changed files with 214 additions and 9 deletions

View File

@ -2437,21 +2437,221 @@ void CL_Users_f (void)
Con_TPrintf ("%i total users\n", c);
}
int CL_ParseColour(char *colt)
static struct {
const char *name;
unsigned int rgb;
} csscolours[] = {
//php-defined colours
{"aliceblue", 0xf0f8ff},
{"antiquewhite", 0xfaebd7},
{"aqua", 0x00ffff},
{"aquamarine", 0x7fffd4},
{"azure", 0xf0ffff},
{"beige", 0xf5f5dc},
{"bisque", 0xffe4c4},
{"black", 0x000000},
{"blanchedalmond", 0xffebcd},
{"blue", 0x0000ff},
{"blueviolet", 0x8a2be2},
{"brown", 0xa52a2a},
{"burlywood", 0xdeb887},
{"cadetblue", 0x5f9ea0},
{"chartreuse", 0x7fff00},
{"chocolate", 0xd2691e},
{"coral", 0xff7f50},
{"cornflowerblue", 0x6495ed},
{"cornsilk", 0xfff8dc},
{"crimson", 0xdc143c},
{"cyan", 0x00ffff},
{"darkblue", 0x00008b},
{"darkcyan", 0x008b8b},
{"darkgoldenrod", 0xb8860b},
{"darkgray", 0xa9a9a9},
{"darkgreen", 0x006400},
{"darkgrey", 0xa9a9a9},
{"darkkhaki", 0xbdb76b},
{"darkmagenta", 0x8b008b},
{"darkolivegreen", 0x556b2f},
{"darkorange", 0xff8c00},
{"darkorchid", 0x9932cc},
{"darkred", 0x8b0000},
{"darksalmon", 0xe9967a},
{"darkseagreen", 0x8fbc8f},
{"darkslateblue", 0x483d8b},
{"darkslategray", 0x2f4f4f},
{"darkslategrey", 0x2f4f4f},
{"darkturquoise", 0x00ced1},
{"darkviolet", 0x9400d3},
{"deeppink", 0xff1493},
{"deepskyblue", 0x00bfff},
{"dimgray", 0x696969},
{"dimgrey", 0x696969},
{"dodgerblue", 0x1e90ff},
{"firebrick", 0xb22222},
{"floralwhite", 0xfffaf0},
{"forestgreen", 0x228b22},
{"fuchsia", 0xff00ff},
{"gainsboro", 0xdcdcdc},
{"ghostwhite", 0xf8f8ff},
{"gold", 0xffd700},
{"goldenrod", 0xdaa520},
{"gray", 0x808080},
{"green", 0x008000},
{"greenyellow", 0xadff2f},
{"grey", 0x808080},
{"honeydew", 0xf0fff0},
{"hotpink", 0xff69b4},
{"indianred", 0xcd5c5c},
{"indigo", 0x4b0082},
{"ivory", 0xfffff0},
{"khaki", 0xf0e68c},
{"lavender", 0xe6e6fa},
{"lavenderblush", 0xfff0f5},
{"lawngreen", 0x7cfc00},
{"lemonchiffon", 0xfffacd},
{"lightblue", 0xadd8e6},
{"lightcoral", 0xf08080},
{"lightcyan", 0xe0ffff},
{"lightgoldenrodyellow",0xfafad2},
{"lightgray", 0xd3d3d3},
{"lightgreen", 0x90ee90},
{"lightgrey", 0xd3d3d3},
{"lightpink", 0xffb6c1},
{"lightsalmon", 0xffa07a},
{"lightseagreen", 0x20b2aa},
{"lightskyblue", 0x87cefa},
{"lightslategray", 0x778899},
{"lightslategrey", 0x778899},
{"lightsteelblue", 0xb0c4de},
{"lightyellow", 0xffffe0},
{"lime", 0x00ff00},
{"limegreen", 0x32cd32},
{"linen", 0xfaf0e6},
{"magenta", 0xff00ff},
{"maroon", 0x800000},
{"mediumaquamarine",0x66cdaa},
{"mediumblue", 0x0000cd},
{"mediumorchid", 0xba55d3},
{"mediumpurple", 0x9370db},
{"mediumseagreen", 0x3cb371},
{"mediumslateblue", 0x7b68ee},
{"mediumspringgreen",0x00fa9a},
{"mediumturquoise", 0x48d1cc},
{"mediumvioletred", 0xc71585},
{"midnightblue", 0x191970},
{"mintcream", 0xf5fffa},
{"mistyrose", 0xffe4e1},
{"moccasin", 0xffe4b5},
{"navajowhite", 0xffdead},
{"navy", 0x000080},
{"oldlace", 0xfdf5e6},
{"olive", 0x808000},
{"olivedrab", 0x6b8e23},
{"orange", 0xffa500},
{"orangered", 0xff4500},
{"orchid", 0xda70d6},
{"palegoldenrod", 0xeee8aa},
{"palegreen", 0x98fb98},
{"paleturquoise", 0xafeeee},
{"palevioletred", 0xdb7093},
{"papayawhip", 0xffefd5},
{"peachpuff", 0xffdab9},
{"peru", 0xcd853f},
{"pink", 0xffc0cb},
{"plum", 0xdda0dd},
{"powderblue", 0xb0e0e6},
{"purple", 0x800080},
{"red", 0xff0000},
{"rosybrown", 0xbc8f8f},
{"royalblue", 0x4169e1},
{"saddlebrown", 0x8b4513},
{"salmon", 0xfa8072},
{"sandybrown", 0xf4a460},
{"seagreen", 0x2e8b57},
{"seashell", 0xfff5ee},
{"sienna", 0xa0522d},
{"silver", 0xc0c0c0},
{"skyblue", 0x87ceeb},
{"slateblue", 0x6a5acd},
{"slategray", 0x708090},
{"slategrey", 0x708090},
{"snow", 0xfffafa},
{"springgreen", 0x00ff7f},
{"steelblue", 0x4682b4},
{"tan", 0xd2b48c},
{"teal", 0x008080},
{"thistle", 0xd8bfd8},
{"tomato", 0xff6347},
{"turquoise", 0x40e0d0},
{"violet", 0xee82ee},
{"wheat", 0xf5deb3},
{"white", 0xffffff},
{"whitesmoke", 0xf5f5f5},
{"yellow", 0xffff00},
{"yellowgreen", 0x9acd32},
};
int CL_ParseColour(const char *colt)
{
char *e;
int col;
size_t i;
if (!strncmp(colt, "0x", 2))
col = 0xff000000|strtoul(colt+2, NULL, 16);
else
{
col = atoi(colt);
col &= 15;
if (col > 13)
col = 13;
col = strtoul(colt, &e, 0);
if (*e)
{
col = 0;
for (i = 0; i < countof(csscolours); i++)
if (!Q_strcasecmp(colt, csscolours[i].name))
{
col = 0xff000000 | csscolours[i].rgb;
break;
}
}
else
{
col &= 15;
if (col > 13)
col = 13;
}
}
return col;
}
const char *CL_ColourName(const char *colt)
{
int col = CL_ParseColour(colt);
size_t i;
if (col & 0xff000000)
{
col &= ~0xff000000;
for (i = 0; i < countof(csscolours); i++)
if (csscolours[i].rgb == col)
colt = csscolours[i].name;
}
return colt;
}
void CL_Color_c(int argn, const char *partial, struct xcommandargcompletioncb_s *ctx)
{
int len;
size_t i;
if (argn == 1 || argn == 2)
{
len = strlen(partial);
if (*partial >= '0' && *partial <= '9')
;
else for (i = 0; i < countof(csscolours); i++)
{
if (!Q_strncasecmp(partial, csscolours[i].name, len))
ctx->cb(csscolours[i].name, va("^x%x%x%x%s", (csscolours[i].rgb>>20)&15, (csscolours[i].rgb>>12)&15, (csscolours[i].rgb>>4)&15, csscolours[i].name), NULL, ctx);
}
}
}
void CL_Color_f (void)
{
// just for quake compatability...
@ -2466,13 +2666,18 @@ void CL_Color_f (void)
if (Cmd_Argc() == 1)
{
char *t = InfoBuf_ValueForKey(&cls.userinfo[pnum], "topcolor");
char *b = InfoBuf_ValueForKey(&cls.userinfo[pnum], "bottomcolor");
const char *t = InfoBuf_ValueForKey(&cls.userinfo[pnum], "topcolor");
const char *b = InfoBuf_ValueForKey(&cls.userinfo[pnum], "bottomcolor");
t = CL_ColourName(t);
b = CL_ColourName(b);
if (!*t)
t = "0";
if (!*b)
b = "0";
Con_TPrintf ("\"color\" is \"%s %s\"\n", t, b);
if (!strcmp(t, b))
Con_TPrintf ("\"color\" is \"%s\"\n", t, b);
else
Con_TPrintf ("\"color\" is \"%s %s\"\n", t, b);
Con_TPrintf ("usage: color <0xRRGGBB> [0xRRGGBB]\n");
return;
}
@ -5441,7 +5646,7 @@ void CL_Init (void)
Cmd_AddCommand ("setinfo", CL_SetInfo_f);
Cmd_AddCommand ("fullinfo", CL_FullInfo_f);
Cmd_AddCommand ("color", CL_Color_f);
Cmd_AddCommandAD ("color", CL_Color_f, CL_Color_c, NULL);
#if defined(NQPROT) && defined(HAVE_LEGACY)
Cmd_AddCommand ("curl", CL_Curl_f);
#endif