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:
Joshua Diamond 2022-09-18 11:51:04 -04:00 committed by GitHub
parent f0940a6fe4
commit a3a47a6556
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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;
} }
} }
} }