refer to color by HTML name in commandline arguments

This commit is contained in:
Zeno Rogue 2021-10-17 09:18:31 +02:00
parent 9d26e98fcd
commit 839ca440ea
8 changed files with 60 additions and 19 deletions

View File

@ -273,5 +273,38 @@ EX int weakfirecolor(int phase) {
return gradient(0xFF8000, 0xFF0000, -1, sintick(500, phase/1000./M_PI), 1);
}
/* HTML color names */
EX vector<pair<const char*, color_t>> color_names = {
{"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}, {"darkkhaki", 0xbdb76b}, {"darkmagenta", 0x8b008b}, {"darkolivegreen", 0x556b2f},
{"darkorange", 0xff8c00}, {"darkorchid", 0x9932cc}, {"darkred", 0x8b0000}, {"darksalmon", 0xe9967a}, {"darkseagreen", 0x8fbc8f}, {"darkslateblue", 0x483d8b}, {"darkslategray", 0x2f4f4f}, {"darkturquoise", 0x00ced1},
{"darkviolet", 0x9400d3}, {"deeppink", 0xff1493}, {"deepskyblue", 0x00bfff}, {"dimgray", 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},
{"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},
{"lightgrey", 0xd3d3d3}, {"lightgreen", 0x90ee90}, {"lightpink", 0xffb6c1}, {"lightsalmon", 0xffa07a}, {"lightseagreen", 0x20b2aa}, {"lightskyblue", 0x87cefa}, {"lightslategray", 0x778899}, {"lightsteelblue", 0xb0c4de},
{"lightyellow", 0xffffe0}, {"lime", 0x00ff00}, {"limegreen", 0x32cd32}, {"linen", 0xfaf0e6},
{"magenta", 0xff00ff}, {"maroon", 0x800000}, {"mediumaquamarine", 0x66cdaa}, {"mediumblue", 0x0000cd}, {"mediumorchid", 0xba55d3}, {"mediumpurple", 0x9370d8}, {"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", 0xd87093}, {"papayawhip", 0xffefd5}, {"peachpuff", 0xffdab9}, {"peru", 0xcd853f}, {"pink", 0xffc0cb}, {"plum", 0xdda0dd}, {"powderblue", 0xb0e0e6}, {"purple", 0x800080},
{"rebeccapurple", 0x663399}, {"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}, {"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}
};
EX pair<const char*, color_t>* find_color_by_name(const string& s) {
for(auto& c: color_names) if(c.first == s) return &c;
return nullptr;
}
}

View File

@ -102,6 +102,14 @@ EX namespace arg {
}
}
EX bool argis(const string& s) { if(args()[0] == '-' && args()[1] == '-') return args().substr(1) == s; return args() == s; }
EX color_t argcolor(int bits) {
string s = args();
auto p = find_color_by_name(s);
if(p && bits == 24) return p->second;
if(p && bits == 32) return (p->second << 8) | 0xFF;
return strtoll(argcs(), NULL, 16);
}
EX void shift_arg_formula(ld& x, const reaction_t& r IS(reaction_t())) {
shift(); ld old = x; x = argf();

View File

@ -2951,38 +2951,38 @@ EX int read_color_args() {
using namespace arg;
if(argis("-back")) {
PHASEFROM(2); shift(); backcolor = arghex();
PHASEFROM(2); shift(); backcolor = argcolor(24);
}
else if(argis("-fillmodel")) {
PHASEFROM(2); shift(); modelcolor = arghex();
PHASEFROM(2); shift(); modelcolor = argcolor(32);
}
else if(argis("-ring")) {
PHASEFROM(2); shift(); ringcolor = arghex();
PHASEFROM(2); shift(); ringcolor = argcolor(32);
}
else if(argis("-ringw")) {
PHASEFROM(2); shift_arg_formula(vid.multiplier_ring);
}
else if(argis("-stdgrid")) {
PHASEFROM(2); shift(); stdgridcolor = arghex();
PHASEFROM(2); shift(); stdgridcolor = argcolor(32);
}
else if(argis("-gridw")) {
PHASEFROM(2); shift_arg_formula(vid.multiplier_grid);
}
else if(argis("-period")) {
PHASEFROM(2); shift(); periodcolor = arghex();
PHASEFROM(2); shift(); periodcolor = argcolor(32);
}
else if(argis("-crosshair")) {
PHASEFROM(2); shift(); crosshair_color = arghex();
PHASEFROM(2); shift(); crosshair_color = argcolor(32);
shift_arg_formula(crosshair_size);
}
else if(argis("-borders")) {
PHASEFROM(2); shift(); bordcolor = arghex();
PHASEFROM(2); shift(); bordcolor = argcolor(24);
}
else if(argis("-fore")) {
PHASEFROM(2); shift(); forecolor = arghex();
PHASEFROM(2); shift(); forecolor = argcolor(24);
}
else if(argis("-dialog")) {
PHASEFROM(2); shift(); dialog::dialogcolor = arghex();
PHASEFROM(2); shift(); dialog::dialogcolor = argcolor(24);
}
else if(argis("-d:color"))
launch_dialog(show_color_dialog);

View File

@ -1406,7 +1406,7 @@ int readArgs() {
launch_dialog(show);
else if(argis("-cvcol")) {
shift(); int d = argi();
shift(); coordcolors[d] = arghex();
shift(); coordcolors[d] = argcolor(24);
}
else return 1;
return 0;

View File

@ -934,7 +934,7 @@ int expansion_readArgs() {
else if(argis("-expansion-labelcolor")) {
dist_label_colored = false;
shift(); dist_label_color = arghex();
shift(); dist_label_color = argcolor(24);
}
else if(argis("-expansion-off")) {

View File

@ -3072,7 +3072,7 @@ int read_pattern_args() {
shift();
for(auto& lp: linepatterns::patterns)
if(appears(lp->lpname, ss))
lp->color = arghex();
lp->color = argcolor(32);
}
else if(argis("-fat-edges")) {
@ -3102,10 +3102,10 @@ int read_pattern_args() {
if(c == 't') ct = &nestcolors;
else if(c == 'd') ct = &distcolors;
else if(c == 'm') ct = &minecolors;
else if(c == 'E') { shift(); int d = argi(); shift(); expcolors[d] = arghex(); return 0; }
else if(c == 'E') { shift(); int d = argi(); shift(); expcolors[d] = argcolor(24); return 0; }
else if(c == 'P') {
shift(); int d = argi(); shift();
color_t h = arghex();
color_t h = argcolor(32);
if(d >= 0 && d < 7)
((color_t*)(&vid.cs.skincolor)) [d] = h;
return 0;
@ -3115,7 +3115,7 @@ int read_pattern_args() {
}
int d = argi();
ct->allocate(d+1);
shift(); (*ct)[d] = arghex();
shift(); (*ct)[d] = argcolor(24);
}
else if(argis("-canvas")) {
PHASEFROM(2);
@ -3124,7 +3124,7 @@ int read_pattern_args() {
shift();
if(args() == "i") canvas_default_wall = waInvisibleFloor;
else if(args().size() == 1) patterns::whichCanvas = args()[0];
else patterns::canvasback = arghex();
else patterns::canvasback = argcolor(24);
stop_game_and_switch_mode(rg::nothing);
}
else if(argis("-canvas-random")) {

View File

@ -2904,7 +2904,7 @@ int readArgs() {
shift_arg_formula(hard_limit);
}
else if(argis("-ray-out")) {
PHASEFROM(2); shift(); color_out_of_range = arghex();
PHASEFROM(2); shift(); color_out_of_range = argcolor(32);
}
else if(argis("-ray-comp")) {
PHASEFROM(2);
@ -2947,7 +2947,7 @@ int readArgs() {
else if(argis("-ray-cursor")) {
start_game();
volumetric::enable();
shift(); volumetric::vmap[centerover] = arghex();
shift(); volumetric::vmap[centerover] = argcolor(32);
}
else return 1;
return 0;

View File

@ -1762,7 +1762,7 @@ int readArgs() {
rotation_center_View = View;
shift_arg_formula(circle_spins);
shift_arg_formula(circle_radius);
shift(); circle_display_color = arghex();
shift(); circle_display_color = argcolor(24);
}
else if(argis("-animmove")) {
ma = maTranslation;