forked from mirrors/qmk_firmware
43 lines
1.1 KiB
C
43 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));
|
|
}
|