From 01bfe73fc7a89406d1296979d05122d67427f2d6 Mon Sep 17 00:00:00 2001 From: Jules Aguillon Date: Sun, 4 Jun 2023 23:07:35 +0200 Subject: [PATCH] =?UTF-8?q?Explicitly=20map=20dead=20key=20for=20=C3=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `KeyCharacterMap.getDeadChar` seems to not give the expected result on Android 4.0. This might affect many more dead key combinations that are not fixed by this commit. --- srcs/juloo.keyboard2/KeyModifier.java | 29 ++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/srcs/juloo.keyboard2/KeyModifier.java b/srcs/juloo.keyboard2/KeyModifier.java index d9b5a47..ac67c91 100644 --- a/srcs/juloo.keyboard2/KeyModifier.java +++ b/srcs/juloo.keyboard2/KeyModifier.java @@ -42,7 +42,7 @@ class KeyModifier case GRAVE: return apply_dead_char(k, '\u02CB'); case AIGU: return apply_dead_char(k, '\u00B4'); case CIRCONFLEXE: return apply_dead_char(k, '\u02C6'); - case TILDE: return apply_dead_char(k, '\u02DC'); + case TILDE: return apply_map_or_dead_char(k, map_char_tilde, '\u02DC'); case CEDILLE: return apply_dead_char(k, '\u00B8'); case TREMA: return apply_dead_char(k, '\u00A8'); case CARON: return apply_dead_char(k, '\u02C7'); @@ -107,6 +107,21 @@ class KeyModifier } } + /** Apply a [Map_char] or fallback to [apply_dead_char]. */ + private static KeyValue apply_map_or_dead_char(KeyValue k, Map_char map, char dead_char) + { + switch (k.getKind()) + { + case Char: + char kc = k.getChar(); + char c = map.apply(kc); + if (kc == c) + return apply_dead_char(k, dead_char); + return k.withChar(c); + default: return k; + } + } + private static KeyValue apply_combining(KeyValue k, String combining) { switch (k.getKind()) @@ -459,6 +474,18 @@ class KeyModifier } } + private static final Map_char map_char_tilde = + new Map_char() { + public char apply(char c) + { + switch (c) + { + case 'n': return 'ñ'; + default: return c; + } + } + }; + private static final Map_char map_char_double_aigu = new Map_char() { public char apply(char c)