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)