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