Work around WinCompose issue for U+Axxx or U+Exxx (#18260)
* Work around WinCompose issue for U+Axxx or U+Exxx * tzarc's more efficient version Co-authored-by: Thomas <mail@tpreisner.de>
This commit is contained in:
parent
f0940a6fe4
commit
a3a47a6556
@ -324,19 +324,26 @@ void register_hex(uint16_t hex) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void register_hex32(uint32_t hex) {
|
void register_hex32(uint32_t hex) {
|
||||||
bool onzerostart = true;
|
bool first_digit = true;
|
||||||
|
bool needs_leading_zero = (unicode_config.input_mode == UC_WINC);
|
||||||
for (int i = 7; i >= 0; i--) {
|
for (int i = 7; i >= 0; i--) {
|
||||||
if (i <= 3) {
|
// Work out the digit we're going to transmit
|
||||||
onzerostart = false;
|
|
||||||
}
|
|
||||||
uint8_t digit = ((hex >> (i * 4)) & 0xF);
|
uint8_t digit = ((hex >> (i * 4)) & 0xF);
|
||||||
if (digit == 0) {
|
|
||||||
if (!onzerostart) {
|
// If we're still searching for the first digit, and found one
|
||||||
send_nibble_wrapper(digit);
|
// that needs a leading zero sent out, send the zero.
|
||||||
}
|
if (first_digit && needs_leading_zero && digit > 9) {
|
||||||
} else {
|
send_nibble_wrapper(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Always send digits (including zero) if we're down to the last
|
||||||
|
// two bytes of nibbles.
|
||||||
|
bool must_send = i < 4;
|
||||||
|
|
||||||
|
// If we've found a digit worth transmitting, do so.
|
||||||
|
if (digit != 0 || !first_digit || must_send) {
|
||||||
send_nibble_wrapper(digit);
|
send_nibble_wrapper(digit);
|
||||||
onzerostart = false;
|
first_digit = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user