diff options
Diffstat (limited to 'quantum/process_keycode/process_unicodemap.c')
| -rw-r--r-- | quantum/process_keycode/process_unicodemap.c | 95 | 
1 files changed, 48 insertions, 47 deletions
| diff --git a/quantum/process_keycode/process_unicodemap.c b/quantum/process_keycode/process_unicodemap.c index b887879860..4364f156c4 100644 --- a/quantum/process_keycode/process_unicodemap.c +++ b/quantum/process_keycode/process_unicodemap.c @@ -17,62 +17,63 @@  #include "process_unicodemap.h"  void register_hex32(uint32_t hex) { -  bool onzerostart = true; -  for(int i = 7; i >= 0; i--) { -    if (i <= 3) { -      onzerostart = false; +    bool onzerostart = true; +    for (int i = 7; i >= 0; i--) { +        if (i <= 3) { +            onzerostart = false; +        } +        uint8_t digit = ((hex >> (i * 4)) & 0xF); +        if (digit == 0) { +            if (!onzerostart) { +                register_code(hex_to_keycode(digit)); +                unregister_code(hex_to_keycode(digit)); +            } +        } else { +            register_code(hex_to_keycode(digit)); +            unregister_code(hex_to_keycode(digit)); +            onzerostart = false; +        }      } -    uint8_t digit = ((hex >> (i*4)) & 0xF); -    if (digit == 0) { -      if (!onzerostart) { -        register_code(hex_to_keycode(digit)); -        unregister_code(hex_to_keycode(digit)); -      } -    } else { -      register_code(hex_to_keycode(digit)); -      unregister_code(hex_to_keycode(digit)); -      onzerostart = false; -    } -  }  } -__attribute__((weak)) -uint16_t unicodemap_index(uint16_t keycode) { -  if (keycode >= QK_UNICODEMAP_PAIR) { -    // Keycode is a pair: extract index based on Shift / Caps Lock state -    uint16_t index = keycode - QK_UNICODEMAP_PAIR; +__attribute__((weak)) uint16_t unicodemap_index(uint16_t keycode) { +    if (keycode >= QK_UNICODEMAP_PAIR) { +        // Keycode is a pair: extract index based on Shift / Caps Lock state +        uint16_t index = keycode - QK_UNICODEMAP_PAIR; -    bool shift = unicode_saved_mods & MOD_MASK_SHIFT, caps = IS_HOST_LED_ON(USB_LED_CAPS_LOCK); -    if (shift ^ caps) { index >>= 7; } +        bool shift = unicode_saved_mods & MOD_MASK_SHIFT, caps = IS_HOST_LED_ON(USB_LED_CAPS_LOCK); +        if (shift ^ caps) { +            index >>= 7; +        } -    return index & 0x7F; -  } else { -    // Keycode is a regular index -    return keycode - QK_UNICODEMAP; -  } +        return index & 0x7F; +    } else { +        // Keycode is a regular index +        return keycode - QK_UNICODEMAP; +    }  }  bool process_unicodemap(uint16_t keycode, keyrecord_t *record) { -  if (keycode >= QK_UNICODEMAP && keycode <= QK_UNICODEMAP_PAIR_MAX && record->event.pressed) { -    unicode_input_start(); +    if (keycode >= QK_UNICODEMAP && keycode <= QK_UNICODEMAP_PAIR_MAX && record->event.pressed) { +        unicode_input_start(); -    uint32_t code = pgm_read_dword(unicode_map + unicodemap_index(keycode)); -    uint8_t input_mode = get_unicode_input_mode(); +        uint32_t code       = pgm_read_dword(unicode_map + unicodemap_index(keycode)); +        uint8_t  input_mode = get_unicode_input_mode(); -    if (code > 0x10FFFF || (code > 0xFFFF && input_mode == UC_WIN)) { -      // Character is out of range supported by the platform -      unicode_input_cancel(); -    } else if (code > 0xFFFF && input_mode == UC_OSX) { -      // Convert to UTF-16 surrogate pair on Mac -      code -= 0x10000; -      uint32_t lo = code & 0x3FF, hi = (code & 0xFFC00) >> 10; -      register_hex32(hi + 0xD800); -      register_hex32(lo + 0xDC00); -      unicode_input_finish(); -    } else { -      register_hex32(code); -      unicode_input_finish(); +        if (code > 0x10FFFF || (code > 0xFFFF && input_mode == UC_WIN)) { +            // Character is out of range supported by the platform +            unicode_input_cancel(); +        } else if (code > 0xFFFF && input_mode == UC_OSX) { +            // Convert to UTF-16 surrogate pair on Mac +            code -= 0x10000; +            uint32_t lo = code & 0x3FF, hi = (code & 0xFFC00) >> 10; +            register_hex32(hi + 0xD800); +            register_hex32(lo + 0xDC00); +            unicode_input_finish(); +        } else { +            register_hex32(code); +            unicode_input_finish(); +        }      } -  } -  return true; +    return true;  } | 
