diff options
| author | skullY <skullydazed@gmail.com> | 2019-08-30 11:19:03 -0700 |
|---|---|---|
| committer | skullydazed <skullydazed@users.noreply.github.com> | 2019-08-30 15:01:52 -0700 |
| commit | b624f32f944acdc59dcb130674c09090c5c404cb (patch) | |
| tree | bc13adbba137d122d9a2c2fb2fafcbb08ac10e25 /quantum/process_keycode/process_unicodemap.c | |
| parent | 61af76a10d00aba185b8338604171de490a13e3b (diff) | |
clang-format changes
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 @@ | |||
| 17 | #include "process_unicodemap.h" | 17 | #include "process_unicodemap.h" |
| 18 | 18 | ||
| 19 | void register_hex32(uint32_t hex) { | 19 | void register_hex32(uint32_t hex) { |
| 20 | bool onzerostart = true; | 20 | bool onzerostart = true; |
| 21 | for(int i = 7; i >= 0; i--) { | 21 | for (int i = 7; i >= 0; i--) { |
| 22 | if (i <= 3) { | 22 | if (i <= 3) { |
| 23 | onzerostart = false; | 23 | onzerostart = false; |
| 24 | } | ||
| 25 | uint8_t digit = ((hex >> (i * 4)) & 0xF); | ||
| 26 | if (digit == 0) { | ||
| 27 | if (!onzerostart) { | ||
| 28 | register_code(hex_to_keycode(digit)); | ||
| 29 | unregister_code(hex_to_keycode(digit)); | ||
| 30 | } | ||
| 31 | } else { | ||
| 32 | register_code(hex_to_keycode(digit)); | ||
| 33 | unregister_code(hex_to_keycode(digit)); | ||
| 34 | onzerostart = false; | ||
| 35 | } | ||
| 24 | } | 36 | } |
| 25 | uint8_t digit = ((hex >> (i*4)) & 0xF); | ||
| 26 | if (digit == 0) { | ||
| 27 | if (!onzerostart) { | ||
| 28 | register_code(hex_to_keycode(digit)); | ||
| 29 | unregister_code(hex_to_keycode(digit)); | ||
| 30 | } | ||
| 31 | } else { | ||
| 32 | register_code(hex_to_keycode(digit)); | ||
| 33 | unregister_code(hex_to_keycode(digit)); | ||
| 34 | onzerostart = false; | ||
| 35 | } | ||
| 36 | } | ||
| 37 | } | 37 | } |
| 38 | 38 | ||
| 39 | __attribute__((weak)) | 39 | __attribute__((weak)) uint16_t unicodemap_index(uint16_t keycode) { |
| 40 | uint16_t unicodemap_index(uint16_t keycode) { | 40 | if (keycode >= QK_UNICODEMAP_PAIR) { |
| 41 | if (keycode >= QK_UNICODEMAP_PAIR) { | 41 | // Keycode is a pair: extract index based on Shift / Caps Lock state |
| 42 | // Keycode is a pair: extract index based on Shift / Caps Lock state | 42 | uint16_t index = keycode - QK_UNICODEMAP_PAIR; |
| 43 | uint16_t index = keycode - QK_UNICODEMAP_PAIR; | ||
| 44 | 43 | ||
| 45 | bool shift = unicode_saved_mods & MOD_MASK_SHIFT, caps = IS_HOST_LED_ON(USB_LED_CAPS_LOCK); | 44 | bool shift = unicode_saved_mods & MOD_MASK_SHIFT, caps = IS_HOST_LED_ON(USB_LED_CAPS_LOCK); |
| 46 | if (shift ^ caps) { index >>= 7; } | 45 | if (shift ^ caps) { |
| 46 | index >>= 7; | ||
| 47 | } | ||
| 47 | 48 | ||
| 48 | return index & 0x7F; | 49 | return index & 0x7F; |
| 49 | } else { | 50 | } else { |
| 50 | // Keycode is a regular index | 51 | // Keycode is a regular index |
| 51 | return keycode - QK_UNICODEMAP; | 52 | return keycode - QK_UNICODEMAP; |
| 52 | } | 53 | } |
| 53 | } | 54 | } |
| 54 | 55 | ||
| 55 | bool process_unicodemap(uint16_t keycode, keyrecord_t *record) { | 56 | bool process_unicodemap(uint16_t keycode, keyrecord_t *record) { |
| 56 | if (keycode >= QK_UNICODEMAP && keycode <= QK_UNICODEMAP_PAIR_MAX && record->event.pressed) { | 57 | if (keycode >= QK_UNICODEMAP && keycode <= QK_UNICODEMAP_PAIR_MAX && record->event.pressed) { |
| 57 | unicode_input_start(); | 58 | unicode_input_start(); |
| 58 | 59 | ||
| 59 | uint32_t code = pgm_read_dword(unicode_map + unicodemap_index(keycode)); | 60 | uint32_t code = pgm_read_dword(unicode_map + unicodemap_index(keycode)); |
| 60 | uint8_t input_mode = get_unicode_input_mode(); | 61 | uint8_t input_mode = get_unicode_input_mode(); |
| 61 | 62 | ||
| 62 | if (code > 0x10FFFF || (code > 0xFFFF && input_mode == UC_WIN)) { | 63 | if (code > 0x10FFFF || (code > 0xFFFF && input_mode == UC_WIN)) { |
| 63 | // Character is out of range supported by the platform | 64 | // Character is out of range supported by the platform |
| 64 | unicode_input_cancel(); | 65 | unicode_input_cancel(); |
| 65 | } else if (code > 0xFFFF && input_mode == UC_OSX) { | 66 | } else if (code > 0xFFFF && input_mode == UC_OSX) { |
| 66 | // Convert to UTF-16 surrogate pair on Mac | 67 | // Convert to UTF-16 surrogate pair on Mac |
| 67 | code -= 0x10000; | 68 | code -= 0x10000; |
| 68 | uint32_t lo = code & 0x3FF, hi = (code & 0xFFC00) >> 10; | 69 | uint32_t lo = code & 0x3FF, hi = (code & 0xFFC00) >> 10; |
| 69 | register_hex32(hi + 0xD800); | 70 | register_hex32(hi + 0xD800); |
| 70 | register_hex32(lo + 0xDC00); | 71 | register_hex32(lo + 0xDC00); |
| 71 | unicode_input_finish(); | 72 | unicode_input_finish(); |
| 72 | } else { | 73 | } else { |
| 73 | register_hex32(code); | 74 | register_hex32(code); |
| 74 | unicode_input_finish(); | 75 | unicode_input_finish(); |
| 76 | } | ||
| 75 | } | 77 | } |
| 76 | } | 78 | return true; |
| 77 | return true; | ||
| 78 | } | 79 | } |
