abouttreesummaryrefslogcommitdiff
diff options
context:
space:
mode:
authorJules Aguillon2023-06-04 23:07:35 +0200
committerJules Aguillon2023-06-04 23:07:35 +0200
commit01bfe73fc7a89406d1296979d05122d67427f2d6 (patch)
tree52dd8e8c8e820bb25fcb0050163cb6ef717c52be
parent75e6add0912ee8ef23e8d0560c399d7fa42eadbc (diff)
downloadunexpected-keyboard-01bfe73fc7a89406d1296979d05122d67427f2d6.tar.gz
unexpected-keyboard-01bfe73fc7a89406d1296979d05122d67427f2d6.zip
Explicitly map dead key for ñ
`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.
-rw-r--r--srcs/juloo.keyboard2/KeyModifier.java29
1 files changed, 28 insertions, 1 deletions
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)