summaryrefslogtreecommitdiff
path: root/quantum/unicode/unicodemap.c
diff options
context:
space:
mode:
authorRyan <fauxpark@gmail.com>2023-08-27 13:30:19 +1000
committerGitHub <noreply@github.com>2023-08-27 13:30:19 +1000
commit70e34e491c297231a3f987fd69760d38e79dbfa4 (patch)
treea3fe26ea27c9d020142f4c248fa0bab5d32c1f9c /quantum/unicode/unicodemap.c
parent95681b8ff4a92aacd0249e124d34cf16e510175e (diff)
Unicode, Unicodemap and UCIS refactor (#21659)
Diffstat (limited to 'quantum/unicode/unicodemap.c')
-rw-r--r--quantum/unicode/unicodemap.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/quantum/unicode/unicodemap.c b/quantum/unicode/unicodemap.c
new file mode 100644
index 0000000000..2f618056a2
--- /dev/null
+++ b/quantum/unicode/unicodemap.c
@@ -0,0 +1,43 @@
+// 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));
+}