forked from extern/Unexpected-Keyboard
Compare commits
4 Commits
combining_
...
1.29.0
Author | SHA1 | Date | |
---|---|---|---|
|
deb611a0d2 | ||
|
29f03d0e96 | ||
|
4629410230 | ||
|
b9526d918d |
@@ -10,8 +10,8 @@ android {
|
||||
applicationId "juloo.keyboard2"
|
||||
minSdk 11
|
||||
targetSdkVersion 34
|
||||
versionCode 40
|
||||
versionName "1.28.0"
|
||||
versionCode 41
|
||||
versionName "1.29.0"
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
|
8
fastlane/metadata/android/en-US/changelogs/41.txt
Normal file
8
fastlane/metadata/android/en-US/changelogs/41.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
Clipboard pane
|
||||
|
||||
New Monet theme
|
||||
Improvements to custom layouts
|
||||
Options to disable key repeat and the circle gesture
|
||||
Options to disable the Tab and Esc keys
|
||||
|
||||
Many thanks to the contributors: @alotbsol555 @ChasmSolacer @eandersons @polyctena @Sestowner @solokot @Spike-from-NH @TadaCZE @V6lhost @Validbit
|
@@ -68,9 +68,9 @@
|
||||
<string name="pref_theme_e_epaper">Электронная бумага</string>
|
||||
<string name="pref_theme_e_desert">Пустыня</string>
|
||||
<string name="pref_theme_e_jungle">Джунгли</string>
|
||||
<!-- <string name="pref_theme_e_monet">Monet (System)</string> -->
|
||||
<!-- <string name="pref_theme_e_monetlight">Monet (Light)</string> -->
|
||||
<!-- <string name="pref_theme_e_monetdark">Monet (Dark)</string> -->
|
||||
<string name="pref_theme_e_monet">Моне (системная)</string>
|
||||
<string name="pref_theme_e_monetlight">Моне (светлая)</string>
|
||||
<string name="pref_theme_e_monetdark">Моне (темная)</string>
|
||||
<string name="pref_swipe_dist_e_very_short">Очень короткая</string>
|
||||
<string name="pref_swipe_dist_e_short">Короткая</string>
|
||||
<string name="pref_swipe_dist_e_default">Обычная</string>
|
||||
@@ -119,9 +119,9 @@
|
||||
<string name="key_descr_page_down">Страница вниз</string>
|
||||
<string name="key_descr_home">Home</string>
|
||||
<string name="key_descr_end">End</string>
|
||||
<!-- <string name="key_descr_clipboard">Clipboard manager</string> -->
|
||||
<!-- <string name="clipboard_history_heading">Recently copied text</string> -->
|
||||
<!-- <string name="clipboard_pin_heading">Pinned</string> -->
|
||||
<!-- <string name="clipboard_remove_confirm">Remove this clipboard?</string> -->
|
||||
<!-- <string name="clipboard_remove_confirmed">Yes</string> -->
|
||||
<string name="key_descr_clipboard">Менеджер буфера обмена</string>
|
||||
<string name="clipboard_history_heading">Недавно скопированный текст</string>
|
||||
<string name="clipboard_pin_heading">Закреплено</string>
|
||||
<string name="clipboard_remove_confirm">Удалить этот буфер обмена?</string>
|
||||
<string name="clipboard_remove_confirmed">Да</string>
|
||||
</resources>
|
||||
|
@@ -12,7 +12,7 @@
|
||||
<subtype android:label="%s" android:languageTag="el" android:imeSubtypeLocale="el" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=grek_qwerty,extra_keys=£@l|€"/>
|
||||
<subtype android:label="%s" android:languageTag="en-CA" android:imeSubtypeLocale="en_CA" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us"/>
|
||||
<subtype android:label="%s" android:languageTag="en-GB" android:imeSubtypeLocale="en_GB" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_gb,extra_keys=£@l"/>
|
||||
<subtype android:label="%s" android:languageTag="en-US" android:imeSubtypeLocale="en_US" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us"/>
|
||||
<subtype android:label="%s" android:languageTag="en-US" android:imeSubtypeLocale="en_US" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us" android:overridesImplicitlyEnabledSubtype="true"/>
|
||||
<subtype android:label="%s" android:languageTag="es" android:imeSubtypeLocale="es_ES" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_es,extra_keys=accent_aigu:á:é:í:ó:ú@d|accent_tilde:ñ@n|accent_grave@f|accent_trema@u|€"/>
|
||||
<subtype android:label="%s" android:languageTag="fa" android:imeSubtypeLocale="fa_IR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=arab_pc_ir"/>
|
||||
<subtype android:label="%s" android:languageTag="fr-CA" android:imeSubtypeLocale="fr_CA" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_azerty_fr,extra_keys=accent_grave:à:è:ù@f|accent_aigu:é@d|accent_circonflexe:â:ê:ô@f|accent_cedille:ç@c|accent_trema:ë:ï:ü:ÿ@u"/>
|
||||
|
@@ -11,5 +11,15 @@
|
||||
"u": "ú",
|
||||
"y": "ý",
|
||||
"z": "ź",
|
||||
"ü": "ǘ"
|
||||
"ü": "ǘ",
|
||||
"j": "j\u0301",
|
||||
"у": "у\u0301",
|
||||
"е": "е\u0301",
|
||||
"а": "а\u0301",
|
||||
"о": "о\u0301",
|
||||
"и": "и\u0301",
|
||||
"ы": "ы\u0301",
|
||||
"э": "э\u0301",
|
||||
"ю": "ю\u0301",
|
||||
"я": "я\u0301"
|
||||
}
|
||||
|
@@ -1,5 +1,10 @@
|
||||
{
|
||||
"o": "ő",
|
||||
"u": "ű",
|
||||
" ": "˝"
|
||||
" ": "˝",
|
||||
"a": "a\u030b",
|
||||
"e": "e\u030b",
|
||||
"i": "i\u030b",
|
||||
"m": "m\u030b",
|
||||
"y": "y\u030b"
|
||||
}
|
||||
|
@@ -100,13 +100,14 @@ public final class ComposeKeyData
|
||||
"/\u2274\u0000/\u2275\u0000/\u2278\u0000/\u2279\u0000/\u2280\u0000/\u2281\u0000/\u22e0\u0000/\u22e1\u0000/_|\u2284\u2286\u2367\u0000/_\u2285\u2287\u0000/\u2288\u0000/\u2289\u0000/\u22e2\u0000/\u22e3\u0000/\u22ac\u0000\u00a8\u00af\u2218\u22a5\u2361\u2351\u2355\u2336\u0000_\u2218\u22a4\u234a\u234e\u2336\u0000/\u22ad\u0000/\u22ae" +
|
||||
"\u0000/\u22af\u0000/\u22ea\u0000/\u22eb\u0000/\u22ec\u0000/\u22ed\u0000_\u2395\u235a\u233a\u0000_\u2378\u0000_\u2379\u0000_\u2376\u0000'/:<=>?\\\u00f7\u2190\u2191\u2192\u2193\u2206\u2207\u2218\u2227\u2228\u2260\u22c4\u25cb\u235e\u2341\u2360\u2343\u2338\u2344\u2370\u2342\u2339\u2347\u2350\u2348\u2357\u234d\u2354\u233b\u2353\u234c\u236f\u233a\u233c" +
|
||||
"\u0000*-.\\_|\u00a8\u2218\u2395\u235f\u2296\u2299\u2349\u235c\u233d\u2365\u233e\u233c\u0000/\u2adc\u0000cdeghklnrst\u00e7\u1e11\u0229\u0123\u1e29\u0137\u013c\u0146\u0157\u015f\u0163\u0000ou\u00f2\u00f3\u00f5\u00f9\u00fa\u0169\u1ecd\u1ecf\u1ee5\u1ee7\u01a1\u01b0\u1edd\u1edb\u1ee1\u1eeb\u1ee9\u1eef\u1ee3\u1edf\u1ef1\u1eed\u0000a" +
|
||||
"u\u00e5\u016f\u0000acdeilnorstuz\u00fc\u01ce\u010d\u010f\u011b\u01d0\u013e\u0148\u01d2\u0159\u0161\u0165\u01d4\u017e\u01da\u0000aceghijouz\u015d\u00e2\u0109\u00ea\u011d\u0125\u00ee\u0135\u00f4\u00fb\u1e91\u015d\u0000 ou\u02dd\u0151\u0171\u0000.01234567" +
|
||||
"89\u2502\u2500\u2514\u2534\u2518\u251c\u253c\u2524\u250c\u252c\u2510\u0000aeiou\u00fc\u00e0\u00e8\u00ec\u00f2\u00f9\u01dc\u0000abcegklnorst\u2c65\u2422\u023c\u0247\uFFFF\ua7a1\uFFFF\ua743\u0142\uFFFF\ua7a5\u00f8\uFFFF\ua7a7\uFFFF\ua7a9\u2c66\u0000aeiouy\u00e2\u00ea\u00f4\u0103\u01a1\u01b0\u1ea3\u1ebb\u1ec9" +
|
||||
"\u1ecf\u1ee7\u1ef7\u1ea9\u1ec3\u1ed5\u1eb3\u1edf\u1eed\u0000()+-0123456789=aehijklmnoprstuvx\u208d\u208e\u208a\u208b\u2080\u2081\u2082\u2083\u2084\u2085\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()+-0123456789=abcdefghijklmnop" +
|
||||
"rstuvwxyz\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\u0000bcdgijklopqrtuyz\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\u0000abcdefghmnoprstwxyz\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();
|
||||
"u\u00e5\u016f\u0000acdeilnorstuz\u00fc\u01ce\u010d\u010f\u011b\u01d0\u013e\u0148\u01d2\u0159\u0161\u0165\u01d4\u017e\u01da\u0000aceghijouz\u015d\u00e2\u0109\u00ea\u011d\u0125\u00ee\u0135\u00f4\u00fb\u1e91\u015d\u0000 aeimouy\u02dd\uFFFF\u0061\u030b\uFFFF\u0065\u030b\uFFFF" +
|
||||
"\u0069\u030b\uFFFF\u006d\u030b\u0151\u0171\uFFFF\u0079\u030b\u0000.0123456789\u2502\u2500\u2514\u2534\u2518\u251c\u253c\u2524\u250c\u252c\u2510\u0000aeiou\u00fc\u00e0\u00e8\u00ec\u00f2\u00f9\u01dc\u0000abcegklnorst\u2c65\u2422\u023c\u0247\uFFFF\ua7a1\uFFFF\ua743\u0142\uFFFF\ua7a5\u00f8\uFFFF" +
|
||||
"\ua7a7\uFFFF\ua7a9\u2c66\u0000aeiouy\u00e2\u00ea\u00f4\u0103\u01a1\u01b0\u1ea3\u1ebb\u1ec9\u1ecf\u1ee7\u1ef7\u1ea9\u1ec3\u1ed5\u1eb3\u1edf\u1eed\u0000()+-0123456789=aehijklmnoprstuvx\u208d\u208e\u208a\u208b\u2080\u2081\u2082\u2083\u2084\u2085" +
|
||||
"\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" +
|
||||
"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" +
|
||||
"\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 =
|
||||
("\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" +
|
||||
@@ -204,13 +205,14 @@ public final class ComposeKeyData
|
||||
"\u19e1\u0001\u0002\u19e4\u0001\u0002\u19e7\u0001\u0002\u19ea\u0001\u0002\u19ed\u0001\u0002\u19f0\u0001\u0002\u19f3\u0001\u0002\u19f6\u0001\u0004\u19fb\u19fc\u19fd\u0001\u0001\u0001\u0003\u1a01\u1a02\u0001\u0001\u0002\u1a05\u0001\u0002\u1a08\u0001\u0002\u1a0b\u0001\u0002\u1a0e\u0001\u0002\u1a11\u0001\u0005\u1a17\u1a18\u1a19\u1a1a\u0001\u0001\u0001\u0001\u0004\u1a1f\u1a20\u1a21\u0001\u0001\u0001\u0002\u1a24\u0001\u0002\u1a27\u0001" +
|
||||
"\u0002\u1a2a\u0001\u0002\u1a2d\u0001\u0002\u1a30\u0001\u0002\u1a33\u0001\u0002\u1a36\u0001\u0003\u1a3a\u1a3b\u0001\u0001\u0002\u1a3e\u0001\u0002\u1a41\u0001\u0002\u1a44\u0001\u0016\u1a5b\u1a5c\u1a5d\u1a5e\u1a5f\u1a60\u1a61\u1a62\u1a63\u1a64\u1a65\u1a66\u1a67\u1a68\u1a69\u1a6a\u1a6b\u1a6c\u1a6d\u1a6e\u1a6f\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001" +
|
||||
"\n\u1a7a\u1a7b\u1a7c\u1a7d\u1a7e\u1a7f\u1a80\u1a81\u1a82\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u1a85\u0001\u000c\u1a92\u1a93\u1a94\u1a95\u1a96\u1a97\u1a98\u1a99\u1a9a\u1a9b\u1a9c\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\r\u1aaa\u1aab\u1aac\u1aad\u1aae\u1aaf\u1ab0\u1ab1\u1ab2\u1ab3\u1ab4\u1ab5\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u1ab9" +
|
||||
"\u1aba\u0001\u0001\u000f\u1aca\u1acb\u1acc\u1acd\u1ace\u1acf\u1ad0\u1ad1\u1ad2\u1ad3\u1ad4\u1ad5\u1ad6\u1ad7\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u000c\u1ae4\u1ae5\u1ae6\u1ae7\u1ae8\u1ae9\u1aea\u1aeb\u1aec\u1aed\u1aee\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0004\u1af3\u1af4\u1af5\u0001\u0001\u0001\u000c\u1b02\u1b03\u1b04\u1b05\u1b06\u1b07\u1b08\u1b09\u1b0a" +
|
||||
"\u1b0b\u1b0c\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0007\u1b14\u1b15\u1b16\u1b17\u1b18\u1b19\u0001\u0001\u0001\u0001\u0001\u0001\r\u1b27\u1b28\u1b29\u1b2a\u1b2b\u1b2d\u1b2f\u1b30\u1b32\u1b33\u1b35\u1b37\u0001\u0001\u0001\u0001\u0002\u0000\u0002\u0000\u0001\u0002\u0000\u0001\u0002\u0000\u0002\u0000\u0001\r\u1b45\u1b46\u1b47\u1b48\u1b49\u1b4a\u1b4b\u1b4c\u1b4d\u1b4e\u1b4f\u1b50\u0001\u0001\u0001" +
|
||||
"\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0021\u1b72\u1b73\u1b74\u1b75\u1b76\u1b77\u1b78\u1b79\u1b7a\u1b7b\u1b7c\u1b7d\u1b7e\u1b7f\u1b80\u1b81\u1b82\u1b83\u1b84\u1b85\u1b86\u1b87\u1b88\u1b89\u1b8a\u1b8b\u1b8c\u1b8d\u1b8e\u1b8f\u1b90\u1b91\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\u0007\u1b99\u1b9a\u1b9b\u1b9c\u1b9d\u1b9e\u0001\u0001\u0001\u0001\u0001\u0001\r\u1bac\u1bad\u1bae\u1baf\u1bb0\u1bb1\u1bb2\u1bb3\u1bb4\u1bb5\u1bb6\u1bb7\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0029\u1be1\u1be2\u1be3\u1be4\u1be5\u1be6\u1be7\u1be8\u1be9\u1bea\u1beb\u1bec\u1bed\u1bee\u1bef\u1bf0\u1bf1\u1bf2\u1bf3\u1bf4\u1bf5\u1bf6\u1bf7\u1bf8\u1bf9\u1bfa\u1bfb\u1bfc\u1bfd\u1bfe\u1bff" +
|
||||
"\u1c00\u1c01\u1c02\u1c03\u1c04\u1c05\u1c06\u1c07\u1c08\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\u1c1a\u1c1b\u1c1d\u1c1e\u1c1f\u1c20\u1c21\u1c23\u1c24\u1c25\u1c26\u1c28\u1c29\u1c2a\u1c2b\u1c2c\u0001\u0002\u0000\u0001\u0001\u0001" +
|
||||
"\u0001\u0002\u0000\u0001\u0001\u0001\u0002\u0000\u0001\u0001\u0001\u0001\u0001\r\u1c3a\u1c3b\u1c3c\u1c3d\u1c3e\u1c3f\u1c40\u1c41\u1c42\u1c43\u1c44\u1c45\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0007\u1c4d\u1c4e\u1c4f\u1c50\u1c51\u1c52\u0001\u0001\u0001\u0001\u0001\u0001\u0014\u1c67\u1c68\u1c69\u1c6a\u1c6b\u1c6c\u1c6d\u1c6e\u1c6f\u1c70\u1c71\u1c72\u1c73\u1c74\u1c75\u1c76\u1c77\u1c78\u1c79\u0001" +
|
||||
"\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u000e\u1c88\u1c89\u1c8a\u1c8b\u1c8c\u1c8d\u1c8e\u1c8f\u1c90\u1c91\u1c92\u1c93\u1c94\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001").toCharArray();
|
||||
"\u1aba\u0001\u0001\u000f\u1aca\u1acb\u1acc\u1acd\u1ace\u1acf\u1ad0\u1ad1\u1ad2\u1ad3\u1ad4\u1ad5\u1ad6\u1ad7\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u000c\u1ae4\u1ae5\u1ae6\u1ae7\u1ae8\u1ae9\u1aea\u1aeb\u1aec\u1aed\u1aee\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0009\u1af8\u1af9\u1afc\u1aff\u1b02\u1b05\u1b06\u1b07\u0001\u0003\u0000\u0000\u0003\u0000\u0000\u0003" +
|
||||
"\u0000\u0000\u0003\u0000\u0000\u0001\u0001\u0003\u0000\u0000\u000c\u1b16\u1b17\u1b18\u1b19\u1b1a\u1b1b\u1b1c\u1b1d\u1b1e\u1b1f\u1b20\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0007\u1b28\u1b29\u1b2a\u1b2b\u1b2c\u1b2d\u0001\u0001\u0001\u0001\u0001\u0001\r\u1b3b\u1b3c\u1b3d\u1b3e\u1b3f\u1b41\u1b43\u1b44\u1b46\u1b47\u1b49\u1b4b\u0001\u0001\u0001\u0001\u0002\u0000\u0002\u0000\u0001\u0002\u0000\u0001\u0002" +
|
||||
"\u0000\u0002\u0000\u0001\r\u1b59\u1b5a\u1b5b\u1b5c\u1b5d\u1b5e\u1b5f\u1b60\u1b61\u1b62\u1b63\u1b64\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0021\u1b86\u1b87\u1b88\u1b89\u1b8a\u1b8b\u1b8c\u1b8d\u1b8e\u1b8f\u1b90\u1b91\u1b92\u1b93\u1b94\u1b95\u1b96\u1b97\u1b98\u1b99\u1b9a\u1b9b\u1b9c\u1b9d\u1b9e\u1b9f\u1ba0\u1ba1\u1ba2\u1ba3\u1ba4\u1ba5\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\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" +
|
||||
"\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" +
|
||||
"\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_arrows = 18;
|
||||
@@ -222,17 +224,17 @@ public final class ComposeKeyData
|
||||
public static final int accent_caron = 6843;
|
||||
public static final int accent_circonflexe = 6872;
|
||||
public static final int accent_double_aigu = 6895;
|
||||
public static final int accent_box = 6902;
|
||||
public static final int accent_grave = 6925;
|
||||
public static final int accent_slash = 6938;
|
||||
public static final int accent_hook_above = 6968;
|
||||
public static final int accent_subscript = 6993;
|
||||
public static final int accent_trema = 7058;
|
||||
public static final int accent_dot_below = 7071;
|
||||
public static final int accent_superscript = 7096;
|
||||
public static final int accent_bar = 7177;
|
||||
public static final int accent_ordinal = 7213;
|
||||
public static final int accent_macron = 7238;
|
||||
public static final int accent_dot_above = 7251;
|
||||
public static final int accent_aigu = 7290;
|
||||
public static final int accent_box = 6922;
|
||||
public static final int accent_grave = 6945;
|
||||
public static final int accent_slash = 6958;
|
||||
public static final int accent_hook_above = 6988;
|
||||
public static final int accent_subscript = 7013;
|
||||
public static final int accent_trema = 7078;
|
||||
public static final int accent_dot_below = 7091;
|
||||
public static final int accent_superscript = 7116;
|
||||
public static final int accent_bar = 7197;
|
||||
public static final int accent_ordinal = 7233;
|
||||
public static final int accent_macron = 7258;
|
||||
public static final int accent_dot_above = 7271;
|
||||
public static final int accent_aigu = 7310;
|
||||
}
|
||||
|
@@ -2,7 +2,6 @@ package juloo.keyboard2;
|
||||
|
||||
import android.view.KeyCharacterMap;
|
||||
import android.view.KeyEvent;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
|
||||
public final class KeyModifier
|
||||
@@ -59,7 +58,7 @@ public final class KeyModifier
|
||||
case GESTURE: return apply_gesture(k);
|
||||
case SHIFT: return apply_shift(k);
|
||||
case GRAVE: return apply_compose_or_dead_char(k, ComposeKeyData.accent_grave, '\u02CB');
|
||||
case AIGU: return apply_diacritics(k, ComposeKeyData.accent_aigu, '\u00B4', '\u0301');
|
||||
case AIGU: return apply_compose_or_dead_char(k, ComposeKeyData.accent_aigu, '\u00B4');
|
||||
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 CEDILLE: return apply_compose_or_dead_char(k, ComposeKeyData.accent_cedille, '\u00B8');
|
||||
@@ -70,7 +69,7 @@ public final class KeyModifier
|
||||
case OGONEK: return apply_compose_or_dead_char(k, ComposeKeyData.accent_ogonek, '\u02DB');
|
||||
case DOT_ABOVE: return apply_compose_or_dead_char(k, ComposeKeyData.accent_dot_above, '\u02D9');
|
||||
case BREVE: return apply_dead_char(k, '\u02D8');
|
||||
case DOUBLE_AIGU: return apply_diacritics(k, ComposeKeyData.accent_double_aigu, '\0', '\u030b');
|
||||
case DOUBLE_AIGU: return apply_compose(k, ComposeKeyData.accent_double_aigu);
|
||||
case ORDINAL: return apply_compose(k, ComposeKeyData.accent_ordinal);
|
||||
case SUPERSCRIPT: return apply_compose(k, ComposeKeyData.accent_superscript);
|
||||
case SUBSCRIPT: return apply_compose(k, ComposeKeyData.accent_subscript);
|
||||
@@ -132,51 +131,43 @@ public final class KeyModifier
|
||||
return k;
|
||||
}
|
||||
|
||||
/** Apply the following mapping, in this order, and stop at the first that
|
||||
changes the key.
|
||||
|
||||
- The compose state, unless it is [0].
|
||||
- The dead char, unless it is ['\0'].
|
||||
- The combining diacritic, unless it is ['\0'].
|
||||
This is not done if the initial key matches [combining_disabled]. */
|
||||
private static KeyValue apply_diacritics(KeyValue k, int state, char dead_char, char combining)
|
||||
/** Apply the given compose state or fallback to the dead_char. */
|
||||
private static KeyValue apply_compose_or_dead_char(KeyValue k, int state, char dead_char)
|
||||
{
|
||||
switch (k.getKind())
|
||||
{
|
||||
case Char:
|
||||
char c = k.getChar();
|
||||
if (state != 0)
|
||||
{
|
||||
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' && !combining_disabled(c))
|
||||
return KeyValue.makeStringKey(new String(new char[]{ c, combining }));
|
||||
break;
|
||||
KeyValue r = ComposeKey.apply(state, c);
|
||||
if (r != null)
|
||||
return r;
|
||||
}
|
||||
return k;
|
||||
return apply_dead_char(k, dead_char);
|
||||
}
|
||||
|
||||
private static KeyValue apply_compose(KeyValue k, int state)
|
||||
{
|
||||
return apply_diacritics(k, state, '\0', '\0');
|
||||
switch (k.getKind())
|
||||
{
|
||||
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)
|
||||
{
|
||||
return apply_diacritics(k, 0, dead_char, '\0');
|
||||
}
|
||||
|
||||
private static KeyValue apply_compose_or_dead_char(KeyValue k, int state, char dead_char)
|
||||
{
|
||||
return apply_diacritics(k, state, dead_char, '\0');
|
||||
switch (k.getKind())
|
||||
{
|
||||
case Char:
|
||||
char c = k.getChar();
|
||||
char modified = (char)KeyCharacterMap.getDeadChar(dead_char, c);
|
||||
if (modified != 0 && modified != c)
|
||||
return KeyValue.makeStringKey(String.valueOf(modified));
|
||||
}
|
||||
return k;
|
||||
}
|
||||
|
||||
private static KeyValue apply_shift(KeyValue k)
|
||||
@@ -815,18 +806,4 @@ public final class KeyModifier
|
||||
}
|
||||
return KeyValue.makeHangulFinal(precomposed, final_idx);
|
||||
}
|
||||
|
||||
/** Characters for which combining diacritics should not be appeneded. */
|
||||
private static final char[] combining_disabled_chars =
|
||||
"0123456789@`!\"#$%&'()*:+;[{,<\\|-=]}.>^~/?_ \t\n¡¿«»‹›‘’“”‚„–—¬‰≈°…·¦¶‡∙€£₹¥¢₽₱₴₿".toCharArray();
|
||||
|
||||
static
|
||||
{
|
||||
Arrays.sort(combining_disabled_chars);
|
||||
}
|
||||
|
||||
private static boolean combining_disabled(char c)
|
||||
{
|
||||
return (Arrays.binarySearch(combining_disabled_chars, c) >= 0);
|
||||
}
|
||||
}
|
||||
|
@@ -136,13 +136,9 @@ public class Keyboard2 extends InputMethodService
|
||||
return ExtraKeys.EMPTY;
|
||||
}
|
||||
|
||||
@TargetApi(12)
|
||||
private void refreshAccentsOption(InputMethodManager imm, InputMethodSubtype subtype)
|
||||
private void refreshAccentsOption(InputMethodManager imm, List<InputMethodSubtype> enabled_subtypes)
|
||||
{
|
||||
List<InputMethodSubtype> enabled_subtypes = getEnabledSubtypes(imm);
|
||||
List<ExtraKeys> extra_keys = new ArrayList<ExtraKeys>();
|
||||
// Gather extra keys from all enabled subtypes
|
||||
extra_keys.add(extra_keys_of_subtype(subtype));
|
||||
for (InputMethodSubtype s : enabled_subtypes)
|
||||
extra_keys.add(extra_keys_of_subtype(s));
|
||||
_config.extra_keys_subtype = ExtraKeys.merge(extra_keys);
|
||||
@@ -153,6 +149,18 @@ public class Keyboard2 extends InputMethodService
|
||||
return (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
|
||||
}
|
||||
|
||||
@TargetApi(12)
|
||||
private String defaultLayoutForSubtypes(InputMethodManager imm, List<InputMethodSubtype> enabled_subtypes)
|
||||
{
|
||||
// Android might return a random subtype, for example, the first in the
|
||||
// list alphabetically.
|
||||
InputMethodSubtype current_subtype = imm.getCurrentInputMethodSubtype();
|
||||
for (InputMethodSubtype s : enabled_subtypes)
|
||||
if (s.getLanguageTag().equals(current_subtype.getLanguageTag()))
|
||||
return s.getExtraValueOf("default_layout");
|
||||
return null;
|
||||
}
|
||||
|
||||
private void refreshSubtypeImm()
|
||||
{
|
||||
InputMethodManager imm = get_imm();
|
||||
@@ -161,13 +169,14 @@ public class Keyboard2 extends InputMethodService
|
||||
_config.extra_keys_subtype = null;
|
||||
if (VERSION.SDK_INT >= 12)
|
||||
{
|
||||
List<InputMethodSubtype> enabled_subtypes = getEnabledSubtypes(imm);
|
||||
InputMethodSubtype subtype = imm.getCurrentInputMethodSubtype();
|
||||
if (subtype != null)
|
||||
{
|
||||
String s = subtype.getExtraValueOf("default_layout");
|
||||
String s = defaultLayoutForSubtypes(imm, enabled_subtypes);
|
||||
if (s != null)
|
||||
default_layout = LayoutsPreference.layout_of_string(getResources(), s);
|
||||
refreshAccentsOption(imm, subtype);
|
||||
refreshAccentsOption(imm, enabled_subtypes);
|
||||
}
|
||||
}
|
||||
if (default_layout == null)
|
||||
|
@@ -71,13 +71,15 @@ public final class KeyboardData
|
||||
KeyPos next_to_pos = getKeys().get(pos.next_to);
|
||||
// Use preferred direction if some preferred pos match
|
||||
if (next_to_pos != null)
|
||||
{
|
||||
for (KeyPos p : pos.positions)
|
||||
if ((p.row == -1 || p.row == next_to_pos.row)
|
||||
&& (p.col == -1 || p.col == next_to_pos.col)
|
||||
&& add_key_to_pos(rows, kv, next_to_pos.with_dir(p.dir)))
|
||||
return true;
|
||||
if (add_key_to_pos(rows, kv, next_to_pos.with_dir(-1)))
|
||||
return true;
|
||||
if (add_key_to_pos(rows, kv, next_to_pos.with_dir(-1)))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
for (KeyPos p : pos.positions)
|
||||
if (add_key_to_pos(rows, kv, p))
|
||||
|
Reference in New Issue
Block a user