mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-10-30 21:02:32 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			44 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| // Copyright 2023 QMK
 | |
| // SPDX-License-Identifier: GPL-2.0-or-later
 | |
| 
 | |
| #include "unicodemap.h"
 | |
| #include "unicode.h"
 | |
| #include "keycodes.h"
 | |
| #include "quantum_keycodes.h"
 | |
| #include "modifiers.h"
 | |
| #include "host.h"
 | |
| #include "action_util.h"
 | |
| 
 | |
| uint8_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;
 | |
| 
 | |
|         uint8_t mods = get_mods() | get_weak_mods();
 | |
| #ifndef NO_ACTION_ONESHOT
 | |
|         mods |= get_oneshot_mods();
 | |
| #endif
 | |
| 
 | |
|         bool shift = mods & MOD_MASK_SHIFT;
 | |
|         bool caps  = host_keyboard_led_state().caps_lock;
 | |
|         if (shift ^ caps) {
 | |
|             index = QK_UNICODEMAP_PAIR_GET_SHIFTED_INDEX(keycode);
 | |
|         } else {
 | |
|             index = QK_UNICODEMAP_PAIR_GET_UNSHIFTED_INDEX(keycode);
 | |
|         }
 | |
| 
 | |
|         return index;
 | |
|     } else {
 | |
|         // Keycode is a regular index
 | |
|         return QK_UNICODEMAP_GET_INDEX(keycode);
 | |
|     }
 | |
| }
 | |
| 
 | |
| uint32_t unicodemap_get_code_point(uint8_t index) {
 | |
|     return pgm_read_dword(unicode_map + index);
 | |
| }
 | |
| 
 | |
| void register_unicodemap(uint8_t index) {
 | |
|     register_unicode(unicodemap_get_code_point(index));
 | |
| }
 | 
