forked from extern/Unexpected-Keyboard
Apply combining diacritic for accent aigu
Any characters that were not affected by the compose or the dead char mappings are now outputted with a combining diacritic when enabling the accent aigu.
This commit is contained in:
@ -11,15 +11,5 @@
|
|||||||
"u": "ú",
|
"u": "ú",
|
||||||
"y": "ý",
|
"y": "ý",
|
||||||
"z": "ź",
|
"z": "ź",
|
||||||
"ü": "ǘ",
|
"ü": "ǘ"
|
||||||
"j": "j\u0301",
|
|
||||||
"у": "у\u0301",
|
|
||||||
"е": "е\u0301",
|
|
||||||
"а": "а\u0301",
|
|
||||||
"о": "о\u0301",
|
|
||||||
"и": "и\u0301",
|
|
||||||
"ы": "ы\u0301",
|
|
||||||
"э": "э\u0301",
|
|
||||||
"ю": "ю\u0301",
|
|
||||||
"я": "я\u0301"
|
|
||||||
}
|
}
|
||||||
|
@ -106,8 +106,7 @@ public final class ComposeKeyData
|
|||||||
"\u2086\u2087\u2088\u2089\u208c\u2090\u2091\u2095\u1d62\u2c7c\u2096\u2097\u2098\u2099\u2092\u209a\u1d63\u209b\u209c\u1d64\u1d65\u2093\u0000aeiouy\u00e4\u00eb\u00ef\u00f6\u00fc\u00ff\u0000aeiouy\u00e2\u00ea\u00f4\u0103\u01a1\u01b0\u1ea1\u1eb9\u1ecb\u1ecd\u1ee5\u1ef5\u1ead\u1ec7\u1ed9\u1eb7\u1ee3\u1ef1\u0000()+-0123456" +
|
"\u2086\u2087\u2088\u2089\u208c\u2090\u2091\u2095\u1d62\u2c7c\u2096\u2097\u2098\u2099\u2092\u209a\u1d63\u209b\u209c\u1d64\u1d65\u2093\u0000aeiouy\u00e4\u00eb\u00ef\u00f6\u00fc\u00ff\u0000aeiouy\u00e2\u00ea\u00f4\u0103\u01a1\u01b0\u1ea1\u1eb9\u1ecb\u1ecd\u1ee5\u1ef5\u1ead\u1ec7\u1ed9\u1eb7\u1ee3\u1ef1\u0000()+-0123456" +
|
||||||
"789=abcdefghijklmnoprstuvwxyz\u207d\u207e\u207a\u207b\u2070\u00b9\u00b2\u00b3\u2074\u2075\u2076\u2077\u2078\u2079\u207c\u1d43\u1d47\u1d9c\u1d48\u1d49\u1da0\u1d4d\u02b0\u2071\u02b2\u1d4f\u02e1\u1d50\u207f\u1d52\u1d56\u02b3\u02e2\u1d57\u1d58\u1d5b\u02b7\u02e3\u02b8\u1dbb\u0000bc" +
|
"789=abcdefghijklmnoprstuvwxyz\u207d\u207e\u207a\u207b\u2070\u00b9\u00b2\u00b3\u2074\u2075\u2076\u2077\u2078\u2079\u207c\u1d43\u1d47\u1d9c\u1d48\u1d49\u1da0\u1d4d\u02b0\u2071\u02b2\u1d4f\u02e1\u1d50\u207f\u1d52\u1d56\u02b3\u02e2\u1d57\u1d58\u1d5b\u02b7\u02e3\u02b8\u1dbb\u0000bc" +
|
||||||
"dgijklopqrtuyz\u0180\uFFFF\ua793\u0111\u01e5\u0268\u0249\uFFFF\ua741\u019a\u0275\u1d7d\uFFFF\ua757\u024d\u0167\u0289\u024f\u01b6\u0000*123456789ao\u00b0\u00aa\u00ba\u207f\u1d48\u1d49\u02b3\u02e2\u1d57\u02b0\u00aa\u00ba\u0000aeiou\u00fc\u0101\u0113\u012b\u014d\u016b\u01d6\u0000" +
|
"dgijklopqrtuyz\u0180\uFFFF\ua793\u0111\u01e5\u0268\u0249\uFFFF\ua741\u019a\u0275\u1d7d\uFFFF\ua757\u024d\u0167\u0289\u024f\u01b6\u0000*123456789ao\u00b0\u00aa\u00ba\u207f\u1d48\u1d49\u02b3\u02e2\u1d57\u02b0\u00aa\u00ba\u0000aeiou\u00fc\u0101\u0113\u012b\u014d\u016b\u01d6\u0000" +
|
||||||
"abcdefghmnoprstwxyz\u0227\u1e03\u010b\u1e0b\u0117\u1e1f\u0121\u1e23\u1e41\u1e45\u022f\u1e57\u1e59\u1e61\u1e6b\u1e87\u1e8b\u1e8f\u017c\u0000aceijlorsuyz\u00fc\u0144\u0430\u0435\u0438\u043e\u0443\u044b\u044d\u044e\u044f\u00e1\u0107\u00e9\u00ed\uFFFF\u006a\u0301\u013a\u00f3\u0155" +
|
"abcdefghmnoprstwxyz\u0227\u1e03\u010b\u1e0b\u0117\u1e1f\u0121\u1e23\u1e41\u1e45\u022f\u1e57\u1e59\u1e61\u1e6b\u1e87\u1e8b\u1e8f\u017c\u0000aceilorsuyz\u00fc\u0144\u00e1\u0107\u00e9\u00ed\u013a\u00f3\u0155\u015b\u00fa\u00fd\u017a\u01d8\u0144").toCharArray();
|
||||||
"\u015b\u00fa\u00fd\u017a\u01d8\u0144\uFFFF\u0430\u0301\uFFFF\u0435\u0301\uFFFF\u0438\u0301\uFFFF\u043e\u0301\uFFFF\u0443\u0301\uFFFF\u044b\u0301\uFFFF\u044d\u0301\uFFFF\u044e\u0301\uFFFF\u044f\u0301").toCharArray();
|
|
||||||
|
|
||||||
public static final char[] edges =
|
public static final char[] edges =
|
||||||
("\u0001\u0009\n\u000b\u000c\r\u000e\u000f\u0010\u0011\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u000c\u001e\u001f\u0020\u0021\"\u0023\u0024\u0025\u0026\u0027\u0028\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u000c\u0035\u0036\u0037\u0038\u0039\u003a\u003b\u003c\u003d\u003e\u003f\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0108\u0148\u0159\u01be\u024b\u025a\u025d\u03fa" +
|
("\u0001\u0009\n\u000b\u000c\r\u000e\u000f\u0010\u0011\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u000c\u001e\u001f\u0020\u0021\"\u0023\u0024\u0025\u0026\u0027\u0028\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u000c\u0035\u0036\u0037\u0038\u0039\u003a\u003b\u003c\u003d\u003e\u003f\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0108\u0148\u0159\u01be\u024b\u025a\u025d\u03fa" +
|
||||||
@ -211,8 +210,7 @@ public final class ComposeKeyData
|
|||||||
"\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0007\u1bad\u1bae\u1baf\u1bb0\u1bb1\u1bb2\u0001\u0001\u0001\u0001\u0001\u0001\r\u1bc0\u1bc1\u1bc2\u1bc3\u1bc4\u1bc5\u1bc6\u1bc7\u1bc8\u1bc9\u1bca\u1bcb\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0029\u1bf5\u1bf6\u1bf7\u1bf8\u1bf9\u1bfa\u1bfb\u1bfc\u1bfd\u1bfe\u1bff" +
|
"\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0007\u1bad\u1bae\u1baf\u1bb0\u1bb1\u1bb2\u0001\u0001\u0001\u0001\u0001\u0001\r\u1bc0\u1bc1\u1bc2\u1bc3\u1bc4\u1bc5\u1bc6\u1bc7\u1bc8\u1bc9\u1bca\u1bcb\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0029\u1bf5\u1bf6\u1bf7\u1bf8\u1bf9\u1bfa\u1bfb\u1bfc\u1bfd\u1bfe\u1bff" +
|
||||||
"\u1c00\u1c01\u1c02\u1c03\u1c04\u1c05\u1c06\u1c07\u1c08\u1c09\u1c0a\u1c0b\u1c0c\u1c0d\u1c0e\u1c0f\u1c10\u1c11\u1c12\u1c13\u1c14\u1c15\u1c16\u1c17\u1c18\u1c19\u1c1a\u1c1b\u1c1c\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0011\u1c2e\u1c2f" +
|
"\u1c00\u1c01\u1c02\u1c03\u1c04\u1c05\u1c06\u1c07\u1c08\u1c09\u1c0a\u1c0b\u1c0c\u1c0d\u1c0e\u1c0f\u1c10\u1c11\u1c12\u1c13\u1c14\u1c15\u1c16\u1c17\u1c18\u1c19\u1c1a\u1c1b\u1c1c\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0011\u1c2e\u1c2f" +
|
||||||
"\u1c31\u1c32\u1c33\u1c34\u1c35\u1c37\u1c38\u1c39\u1c3a\u1c3c\u1c3d\u1c3e\u1c3f\u1c40\u0001\u0002\u0000\u0001\u0001\u0001\u0001\u0002\u0000\u0001\u0001\u0001\u0002\u0000\u0001\u0001\u0001\u0001\u0001\r\u1c4e\u1c4f\u1c50\u1c51\u1c52\u1c53\u1c54\u1c55\u1c56\u1c57\u1c58\u1c59\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0007\u1c61\u1c62\u1c63\u1c64\u1c65\u1c66\u0001\u0001\u0001\u0001\u0001\u0001\u0014" +
|
"\u1c31\u1c32\u1c33\u1c34\u1c35\u1c37\u1c38\u1c39\u1c3a\u1c3c\u1c3d\u1c3e\u1c3f\u1c40\u0001\u0002\u0000\u0001\u0001\u0001\u0001\u0002\u0000\u0001\u0001\u0001\u0002\u0000\u0001\u0001\u0001\u0001\u0001\r\u1c4e\u1c4f\u1c50\u1c51\u1c52\u1c53\u1c54\u1c55\u1c56\u1c57\u1c58\u1c59\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0007\u1c61\u1c62\u1c63\u1c64\u1c65\u1c66\u0001\u0001\u0001\u0001\u0001\u0001\u0014" +
|
||||||
"\u1c7b\u1c7c\u1c7d\u1c7e\u1c7f\u1c80\u1c81\u1c82\u1c83\u1c84\u1c85\u1c86\u1c87\u1c88\u1c89\u1c8a\u1c8b\u1c8c\u1c8d\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0018\u1ca6\u1ca7\u1ca8\u1ca9\u1caa\u1cad\u1cae\u1caf\u1cb0\u1cb1\u1cb2\u1cb3\u1cb4\u1cb5\u1cb6\u1cb9\u1cbc\u1cbf\u1cc2\u1cc5\u1cc8\u1ccb\u1cce\u0001\u0001\u0001\u0001\u0003\u0000\u0000\u0001\u0001\u0001" +
|
"\u1c7b\u1c7c\u1c7d\u1c7e\u1c7f\u1c80\u1c81\u1c82\u1c83\u1c84\u1c85\u1c86\u1c87\u1c88\u1c89\u1c8a\u1c8b\u1c8c\u1c8d\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u000e\u1c9c\u1c9d\u1c9e\u1c9f\u1ca0\u1ca1\u1ca2\u1ca3\u1ca4\u1ca5\u1ca6\u1ca7\u1ca8\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001").toCharArray();
|
||||||
"\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0000\u0000\u0003\u0000\u0000\u0003\u0000\u0000\u0003\u0000\u0000\u0003\u0000\u0000\u0003\u0000\u0000\u0003\u0000\u0000\u0003\u0000\u0000\u0003\u0000\u0000").toCharArray();
|
|
||||||
|
|
||||||
public static final int accent_ogonek = 1;
|
public static final int accent_ogonek = 1;
|
||||||
public static final int accent_arrows = 18;
|
public static final int accent_arrows = 18;
|
||||||
|
@ -58,7 +58,7 @@ public final class KeyModifier
|
|||||||
case GESTURE: return apply_gesture(k);
|
case GESTURE: return apply_gesture(k);
|
||||||
case SHIFT: return apply_shift(k);
|
case SHIFT: return apply_shift(k);
|
||||||
case GRAVE: return apply_compose_or_dead_char(k, ComposeKeyData.accent_grave, '\u02CB');
|
case GRAVE: return apply_compose_or_dead_char(k, ComposeKeyData.accent_grave, '\u02CB');
|
||||||
case AIGU: return apply_compose_or_dead_char(k, ComposeKeyData.accent_aigu, '\u00B4');
|
case AIGU: return apply_diacritics(k, ComposeKeyData.accent_aigu, '\u00B4', '\u0301');
|
||||||
case CIRCONFLEXE: return apply_compose_or_dead_char(k, ComposeKeyData.accent_circonflexe, '\u02C6');
|
case CIRCONFLEXE: return apply_compose_or_dead_char(k, ComposeKeyData.accent_circonflexe, '\u02C6');
|
||||||
case TILDE: return apply_compose_or_dead_char(k, ComposeKeyData.accent_tilde, '\u02DC');
|
case TILDE: return apply_compose_or_dead_char(k, ComposeKeyData.accent_tilde, '\u02DC');
|
||||||
case CEDILLE: return apply_compose_or_dead_char(k, ComposeKeyData.accent_cedille, '\u00B8');
|
case CEDILLE: return apply_compose_or_dead_char(k, ComposeKeyData.accent_cedille, '\u00B8');
|
||||||
@ -131,43 +131,50 @@ public final class KeyModifier
|
|||||||
return k;
|
return k;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Apply the given compose state or fallback to the dead_char. */
|
/** Apply the following mapping, in this order, and stop at the first that
|
||||||
private static KeyValue apply_compose_or_dead_char(KeyValue k, int state, char dead_char)
|
changes the key.
|
||||||
|
|
||||||
|
- The compose state, unless it is [0].
|
||||||
|
- The dead char, unless it is ['\0'].
|
||||||
|
- The combining diacritic, unless it is ['\0']. */
|
||||||
|
private static KeyValue apply_diacritics(KeyValue k, int state, char dead_char, char combining)
|
||||||
{
|
{
|
||||||
switch (k.getKind())
|
switch (k.getKind())
|
||||||
{
|
{
|
||||||
case Char:
|
case Char:
|
||||||
char c = k.getChar();
|
char c = k.getChar();
|
||||||
KeyValue r = ComposeKey.apply(state, c);
|
if (state != 0)
|
||||||
if (r != null)
|
{
|
||||||
return r;
|
KeyValue r = ComposeKey.apply(state, c);
|
||||||
|
if (r != null)
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
if (dead_char != '\0')
|
||||||
|
{
|
||||||
|
char modified = (char)KeyCharacterMap.getDeadChar(dead_char, c);
|
||||||
|
if (modified != 0 && modified != c)
|
||||||
|
return KeyValue.makeStringKey(String.valueOf(modified));
|
||||||
|
}
|
||||||
|
if (combining != '\0')
|
||||||
|
return KeyValue.makeStringKey(new String(new char[]{ c, combining }));
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return apply_dead_char(k, dead_char);
|
return k;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static KeyValue apply_compose(KeyValue k, int state)
|
private static KeyValue apply_compose(KeyValue k, int state)
|
||||||
{
|
{
|
||||||
switch (k.getKind())
|
return apply_diacritics(k, state, '\0', '\0');
|
||||||
{
|
|
||||||
case Char:
|
|
||||||
KeyValue r = ComposeKey.apply(state, k.getChar());
|
|
||||||
if (r != null)
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
return k;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static KeyValue apply_dead_char(KeyValue k, char dead_char)
|
private static KeyValue apply_dead_char(KeyValue k, char dead_char)
|
||||||
{
|
{
|
||||||
switch (k.getKind())
|
return apply_diacritics(k, 0, dead_char, '\0');
|
||||||
{
|
}
|
||||||
case Char:
|
|
||||||
char c = k.getChar();
|
private static KeyValue apply_compose_or_dead_char(KeyValue k, int state, char dead_char)
|
||||||
char modified = (char)KeyCharacterMap.getDeadChar(dead_char, c);
|
{
|
||||||
if (modified != 0 && modified != c)
|
return apply_diacritics(k, state, dead_char, '\0');
|
||||||
return KeyValue.makeStringKey(String.valueOf(modified));
|
|
||||||
}
|
|
||||||
return k;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static KeyValue apply_shift(KeyValue k)
|
private static KeyValue apply_shift(KeyValue k)
|
||||||
|
Reference in New Issue
Block a user