mirror of
https://github.com/fish-shell/fish-shell.git
synced 2025-02-21 05:06:27 +08:00
color: Use convert_digit
I can't believe how many "read this one hex digit" functions we have.
This commit is contained in:
parent
5e0f5eff37
commit
227e1f6300
@ -55,68 +55,6 @@ bool rgb_color_t::try_parse_special(const wcstring &special) {
|
||||
return this->type != type_none;
|
||||
}
|
||||
|
||||
static int parse_hex_digit(wchar_t x) {
|
||||
switch (x) {
|
||||
case L'0': {
|
||||
return 0x0;
|
||||
}
|
||||
case L'1': {
|
||||
return 0x1;
|
||||
}
|
||||
case L'2': {
|
||||
return 0x2;
|
||||
}
|
||||
case L'3': {
|
||||
return 0x3;
|
||||
}
|
||||
case L'4': {
|
||||
return 0x4;
|
||||
}
|
||||
case L'5': {
|
||||
return 0x5;
|
||||
}
|
||||
case L'6': {
|
||||
return 0x6;
|
||||
}
|
||||
case L'7': {
|
||||
return 0x7;
|
||||
}
|
||||
case L'8': {
|
||||
return 0x8;
|
||||
}
|
||||
case L'9': {
|
||||
return 0x9;
|
||||
}
|
||||
case L'a':
|
||||
case L'A': {
|
||||
return 0xA;
|
||||
}
|
||||
case L'b':
|
||||
case L'B': {
|
||||
return 0xB;
|
||||
}
|
||||
case L'c':
|
||||
case L'C': {
|
||||
return 0xC;
|
||||
}
|
||||
case L'd':
|
||||
case L'D': {
|
||||
return 0xD;
|
||||
}
|
||||
case L'e':
|
||||
case L'E': {
|
||||
return 0xE;
|
||||
}
|
||||
case L'f':
|
||||
case L'F': {
|
||||
return 0xF;
|
||||
}
|
||||
default: {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static unsigned long squared_difference(long p1, long p2) {
|
||||
auto diff = static_cast<unsigned long>(labs(p1 - p2));
|
||||
return diff * diff;
|
||||
@ -157,7 +95,7 @@ bool rgb_color_t::try_parse_rgb(const wcstring &name) {
|
||||
if (len - digit_idx == 3) {
|
||||
// Format: FA3
|
||||
for (i = 0; i < 3; i++) {
|
||||
int val = parse_hex_digit(name.at(digit_idx++));
|
||||
int val = convert_digit(name.at(digit_idx++), 16);
|
||||
if (val < 0) break;
|
||||
data.color.rgb[i] = val * 16 + val;
|
||||
}
|
||||
@ -165,8 +103,8 @@ bool rgb_color_t::try_parse_rgb(const wcstring &name) {
|
||||
} else if (len - digit_idx == 6) {
|
||||
// Format: F3A035
|
||||
for (i = 0; i < 3; i++) {
|
||||
int hi = parse_hex_digit(name.at(digit_idx++));
|
||||
int lo = parse_hex_digit(name.at(digit_idx++));
|
||||
int hi = convert_digit(name.at(digit_idx++), 16);
|
||||
int lo = convert_digit(name.at(digit_idx++), 16);
|
||||
if (lo < 0 || hi < 0) break;
|
||||
data.color.rgb[i] = hi * 16 + lo;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user