From 4565f0f469cc16b573532cfc9cbcbab8f3d67085 Mon Sep 17 00:00:00 2001 From: ndom91 Date: Sat, 21 Feb 2026 20:54:18 +0100 Subject: [PATCH 01/25] Add Fleksy swipe mode --- java/res/values/strings-uix.xml | 3 +- .../futo/inputmethod/engine/IMEInterface.kt | 1 + .../general/ActionInputTransactionIME.kt | 3 +- .../inputmethod/engine/general/GeneralIME.kt | 114 +- .../inputmethod/engine/general/JapaneseIME.kt | 6 +- .../keyboard/KeyboardActionListener.java | 8 + .../inputmethod/keyboard/PointerTracker.java | 41 +- .../keyboard/internal/KeyboardTextsTable.java | 3426 +++++++++-------- .../inputmethod/latin/LatinIMELegacy.java | 7 + .../inputmethod/latin/settings/Settings.java | 1 + .../latin/uix/settings/pages/Typing.kt | 11 +- 11 files changed, 1920 insertions(+), 1701 deletions(-) diff --git a/java/res/values/strings-uix.xml b/java/res/values/strings-uix.xml index 6627fea9f4..3c16f1258c 100644 --- a/java/res/values/strings-uix.xml +++ b/java/res/values/strings-uix.xml @@ -421,6 +421,7 @@ Swiping moves cursor, long-pressing switches language Swiping changes language, long-pressing moves cursor Swiping and long-pressing only moves cursor + Swipe actions (Fleksy-style) Numbers @@ -638,4 +639,4 @@ Default is %1$s Delete extra dictionary file? %1$s will be deleted - \ No newline at end of file + diff --git a/java/src/org/futo/inputmethod/engine/IMEInterface.kt b/java/src/org/futo/inputmethod/engine/IMEInterface.kt index 4d8258d947..2922df7ae2 100644 --- a/java/src/org/futo/inputmethod/engine/IMEInterface.kt +++ b/java/src/org/futo/inputmethod/engine/IMEInterface.kt @@ -70,6 +70,7 @@ interface IMEInterface { fun onUpWithDeletePointerActive() fun onUpWithPointerActive() fun onSwipeLanguage(direction: Int) + fun onSwipeAction(direction: Int) fun onMovingCursorLockEvent(canMoveCursor: Boolean) fun clearUserHistoryDictionaries() diff --git a/java/src/org/futo/inputmethod/engine/general/ActionInputTransactionIME.kt b/java/src/org/futo/inputmethod/engine/general/ActionInputTransactionIME.kt index 8ebe7c81bc..43680e466b 100644 --- a/java/src/org/futo/inputmethod/engine/general/ActionInputTransactionIME.kt +++ b/java/src/org/futo/inputmethod/engine/general/ActionInputTransactionIME.kt @@ -59,6 +59,7 @@ class ActionInputTransactionIME(val helper: IMEHelper) : IMEInterface, ActionInp override fun onUpWithDeletePointerActive() {} override fun onUpWithPointerActive() {} override fun onSwipeLanguage(direction: Int) {} + override fun onSwipeAction(direction: Int) {} override fun onMovingCursorLockEvent(canMoveCursor: Boolean) {} override fun clearUserHistoryDictionaries() {} override fun requestSuggestionRefresh() {} @@ -104,4 +105,4 @@ class ActionInputTransactionIME(val helper: IMEHelper) : IMEInterface, ActionInp fun ensureFinished() { isFinished = true } -} \ No newline at end of file +} diff --git a/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt b/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt index 4509d688ad..597330a8ae 100644 --- a/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt +++ b/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt @@ -21,6 +21,7 @@ import org.futo.inputmethod.engine.IMEInterface import org.futo.inputmethod.engine.IMEMessage import org.futo.inputmethod.event.Event import org.futo.inputmethod.event.InputTransaction +import org.futo.inputmethod.keyboard.KeyboardActionListener import org.futo.inputmethod.keyboard.KeyboardSwitcher import org.futo.inputmethod.latin.BuildConfig import org.futo.inputmethod.latin.DictionaryFacilitator @@ -477,6 +478,8 @@ class GeneralIME(val helper: IMEHelper) : IMEInterface, WordLearner, SuggestionS private val sequenceIdCompleted = AtomicInteger(0) private val computationMutex = Mutex() private var timeTakenToUpdate = 40L + private var swipeSuggestionIndex = -1 + private var swipeSuggestionWord: String? = null fun updateSuggestions(inputStyle: Int) { updateSuggestionJob?.cancel() @@ -687,6 +690,115 @@ class GeneralIME(val helper: IMEHelper) : IMEInterface, WordLearner, SuggestionS switchToNextLanguage(context, direction) } + override fun onSwipeAction(direction: Int) { + when (direction) { + KeyboardActionListener.SWIPE_ACTION_RIGHT -> { + swipeSuggestionIndex = -1 + swipeSuggestionWord = null + onEvent( + Event.createSoftwareKeypressEvent( + Event.NOT_A_CODE_POINT, + Constants.CODE_SPACE, + Constants.NOT_A_COORDINATE, + Constants.NOT_A_COORDINATE, + false + ) + ) + } + + KeyboardActionListener.SWIPE_ACTION_LEFT -> { + swipeSuggestionIndex = -1 + swipeSuggestionWord = null + setNeutralSuggestionStrip() + + val beforeCursor = inputLogic.mConnection.getTextBeforeCursor(1, 0)?.toString() + if (!beforeCursor.isNullOrEmpty() && beforeCursor.last() == ' ') { + onEvent( + Event.createSoftwareKeypressEvent( + Event.NOT_A_CODE_POINT, + Constants.CODE_DELETE, + Constants.NOT_A_COORDINATE, + Constants.NOT_A_COORDINATE, + false + ) + ) + return + } + + if (inputLogic.mConnection.hasCursorPosition()) { + inputLogic.cursorLeft(-1, true, true) + onUpWithDeletePointerActive() + } else { + onEvent( + Event.createSoftwareKeypressEvent( + Event.NOT_A_CODE_POINT, + Constants.CODE_DELETE, + Constants.NOT_A_COORDINATE, + Constants.NOT_A_COORDINATE, + false + ) + ) + } + } + + KeyboardActionListener.SWIPE_ACTION_UP, + KeyboardActionListener.SWIPE_ACTION_DOWN -> { + inputLogic.restartSuggestionsOnWordTouchedByCursor( + settings.current, + null, + false, + helper.currentKeyboardScriptId + ) + + if (!ensureSuggestionsCompleted()) { + return + } + + val suggestions = inputLogic.mSuggestedWords + val candidates = ArrayList() + val seen = HashSet() + for (index in 0 until suggestions.size()) { + val info = suggestions.getInfo(index) + if (!info.isKindOf(SuggestedWordInfo.KIND_UNDO) && seen.add(info.mWord)) { + candidates.add(info) + } + } + + if (candidates.size < 2) { + return + } + + val typedWord = inputLogic.mWordComposer.typedWord ?: return + val currentIndex = candidates.indexOfFirst { it.mWord == typedWord } + if (currentIndex == -1) { + return + } + + val baseIndex = if (swipeSuggestionWord == typedWord + && swipeSuggestionIndex in candidates.indices) { + swipeSuggestionIndex + } else { + currentIndex + } + + val step = if (direction == KeyboardActionListener.SWIPE_ACTION_UP) -1 else 1 + var nextIndex = (baseIndex + step + candidates.size) % candidates.size + if (candidates[nextIndex].mWord == typedWord) { + nextIndex = (nextIndex + step + candidates.size) % candidates.size + } + + val selected = candidates[nextIndex] + if (selected.mWord == typedWord) { + return + } + + onEvent(Event.createSuggestionPickedEvent(selected)) + swipeSuggestionIndex = nextIndex + swipeSuggestionWord = selected.mWord + } + } + } + override fun onMovingCursorLockEvent(canMoveCursor: Boolean) { // GeneralIME does nothing } @@ -753,4 +865,4 @@ class GeneralIME(val helper: IMEHelper) : IMEInterface, WordLearner, SuggestionS @OptIn(ExperimentalCoroutinesApi::class) val dictionaryScope = Dispatchers.Default.limitedParallelism(1) } -} \ No newline at end of file +} diff --git a/java/src/org/futo/inputmethod/engine/general/JapaneseIME.kt b/java/src/org/futo/inputmethod/engine/general/JapaneseIME.kt index bb9ad475d6..8966ac94ef 100644 --- a/java/src/org/futo/inputmethod/engine/general/JapaneseIME.kt +++ b/java/src/org/futo/inputmethod/engine/general/JapaneseIME.kt @@ -1200,6 +1200,10 @@ class JapaneseIME(val helper: IMEHelper) : IMEInterface { } + override fun onSwipeAction(direction: Int) { + + } + override fun onMovingCursorLockEvent(canMoveCursor: Boolean) { } @@ -1237,4 +1241,4 @@ class JapaneseIME(val helper: IMEHelper) : IMEInterface { prevSuggestions = words helper.showSuggestionStrip(words, useExpandableUi) } -} \ No newline at end of file +} diff --git a/java/src/org/futo/inputmethod/keyboard/KeyboardActionListener.java b/java/src/org/futo/inputmethod/keyboard/KeyboardActionListener.java index 948fba78d3..70b82882e8 100644 --- a/java/src/org/futo/inputmethod/keyboard/KeyboardActionListener.java +++ b/java/src/org/futo/inputmethod/keyboard/KeyboardActionListener.java @@ -20,6 +20,11 @@ import org.futo.inputmethod.latin.common.InputPointers; public interface KeyboardActionListener { + public static final int SWIPE_ACTION_LEFT = -1; + public static final int SWIPE_ACTION_RIGHT = 1; + public static final int SWIPE_ACTION_UP = -2; + public static final int SWIPE_ACTION_DOWN = 2; + /** * Called when the user presses a key. This is sent before the {@link #onCodeInput} is called. * For keys that repeat, this is only called once. @@ -106,6 +111,7 @@ public interface KeyboardActionListener { public void onUpWithDeletePointerActive(); public void onUpWithPointerActive(); public void onSwipeLanguage(int direction); + public void onSwipeAction(int direction); public void onMovingCursorLockEvent(boolean canMoveCursor); public static final KeyboardActionListener EMPTY_LISTENER = new Adapter(); @@ -144,6 +150,8 @@ public void onUpWithPointerActive() {} @Override public void onSwipeLanguage(int direction) {} @Override + public void onSwipeAction(int direction) {} + @Override public void onMovingCursorLockEvent(boolean canMoveCursor) {} } } diff --git a/java/src/org/futo/inputmethod/keyboard/PointerTracker.java b/java/src/org/futo/inputmethod/keyboard/PointerTracker.java index e09c182dc5..0702f5f04e 100644 --- a/java/src/org/futo/inputmethod/keyboard/PointerTracker.java +++ b/java/src/org/futo/inputmethod/keyboard/PointerTracker.java @@ -150,6 +150,7 @@ public PointerTrackerParams(final TypedArray mainKeyboardViewAttr) { private boolean mStartedOnFastLongPress; private boolean mCursorMoved = false; private boolean mSpacebarLongPressed = false; + private boolean mSwipeActionTriggered = false; // true if keyboard layout has been changed. private boolean mKeyboardLayoutHasBeenChanged; @@ -745,8 +746,15 @@ private void onDownEventInternal(final int x, final int y, final long eventTime) mStartTime = System.currentTimeMillis(); mStartedOnFastLongPress = key.isFastLongPress(); mSpacebarLongPressed = false; + mSwipeActionTriggered = false; - mIsSlidingCursor = key.getCode() == Constants.CODE_DELETE || key.getCode() == Constants.CODE_SPACE; + final boolean swipeActionsMode = + Settings.getInstance().getCurrent().mSpacebarMode + == Settings.SPACEBAR_MODE_SWIPE_ACTIONS; + + mIsSlidingCursor = key.getCode() == Constants.CODE_DELETE + || key.getCode() == Constants.CODE_SPACE + || swipeActionsMode; mIsFlickingKey = !mIsSlidingCursor && key.getHasFlick(); mFlickDirection = key.flickDirection(0, 0); mCurrentKey = key; @@ -954,6 +962,37 @@ private void onMoveEventInternal(final int x, final int y, final long eventTime) final SettingsValues settingsValues = Settings.getInstance().getCurrent(); + if (mIsSlidingCursor && oldKey != null + && settingsValues.mSpacebarMode == Settings.SPACEBAR_MODE_SWIPE_ACTIONS) { + final int pointerStep = sPointerBigStep; + final int swipeIgnoreTime = settingsValues.mKeyLongpressTimeout + / MULTIPLIER_FOR_LONG_PRESS_TIMEOUT_IN_SLIDING_INPUT; + final int dx = x - mStartX; + final int dy = y - mStartY; + + if (!mSwipeActionTriggered + && mStartTime + swipeIgnoreTime < System.currentTimeMillis() + && (Math.abs(dx) >= pointerStep || Math.abs(dy) >= pointerStep)) { + sTimerProxy.cancelKeyTimersOf(this); + mCursorMoved = true; + mSwipeActionTriggered = true; + + if (Math.abs(dx) >= Math.abs(dy)) { + sListener.onSwipeAction(dx > 0 + ? KeyboardActionListener.SWIPE_ACTION_RIGHT + : KeyboardActionListener.SWIPE_ACTION_LEFT); + } else { + sListener.onSwipeAction(dy < 0 + ? KeyboardActionListener.SWIPE_ACTION_UP + : KeyboardActionListener.SWIPE_ACTION_DOWN); + } + } + + mLastX = x; + mLastY = y; + return; + } + if (mIsSlidingCursor && oldKey != null && oldKey.getCode() == Constants.CODE_SPACE) { int pointerStep = sPointerStep; if(settingsValues.mSpacebarMode == Settings.SPACEBAR_MODE_SWIPE_LANGUAGE && !mSpacebarLongPressed) { diff --git a/java/src/org/futo/inputmethod/keyboard/internal/KeyboardTextsTable.java b/java/src/org/futo/inputmethod/keyboard/internal/KeyboardTextsTable.java index a2aa6983c4..ad4dbf232a 100644 --- a/java/src/org/futo/inputmethod/keyboard/internal/KeyboardTextsTable.java +++ b/java/src/org/futo/inputmethod/keyboard/internal/KeyboardTextsTable.java @@ -90,21 +90,21 @@ public static String[] getTextsTable(final Locale locale) { "keylabel_to_alpha", "morekeys_a", "morekeys_o", - "morekeys_e", "morekeys_u", + "morekeys_e", "morekeys_i", - "double_quotes", "keyspec_currency", - "morekeys_c", + "double_quotes", "single_quotes", + "morekeys_c", "morekeys_s", - "morekeys_misc_a", "morekeys_misc_o", + "morekeys_misc_a", "morekeys_misc_u", "morekeys_z", "morekeys_misc_e", - "morekeys_n", "morekeys_misc_i", + "morekeys_n", "morekeys_misc_c", "morekeys_misc_s", "keyspec_symbols_1", @@ -127,34 +127,32 @@ public static String[] getTextsTable(final Locale locale) { "additional_morekeys_symbols_8", "additional_morekeys_symbols_9", "additional_morekeys_symbols_0", - "morekeys_y", "single_angle_quotes", "double_angle_quotes", - "keylabel_to_symbol", + "morekeys_y", "morekeys_d", + "keylabel_to_symbol", "morekeys_tablet_period", "morekeys_g", "morekeys_misc_z", - "morekeys_period", "keyspec_tablet_comma", - "morekeys_cyrillic_ie", "keyspec_period", + "morekeys_cyrillic_ie", + "morekeys_period", "morekeys_star", "keyspec_comma", + "keyspec_tablet_period", + "morekeys_t", "keyspec_east_slavic_row1_9", "keyspec_east_slavic_row2_2", "keyspec_east_slavic_row2_11", "keyspec_east_slavic_row3_5", "morekeys_l", - "morekeys_t", "morekeys_misc_n", "morekeys_nordic_row2_10", "keyspec_nordic_row1_11", "keyspec_nordic_row2_10", "keyspec_nordic_row2_11", - "keyspec_tablet_period", - "morekeys_question", - "morekeys_tablet_comma", "keyspec_left_parenthesis", "keyspec_right_parenthesis", "keyspec_left_square_bracket", @@ -169,10 +167,29 @@ public static String[] getTextsTable(final Locale locale) { "keyspec_right_double_angle_quote", "keyspec_left_single_angle_quote", "keyspec_right_single_angle_quote", - "keyhintlabel_period", - "morekeys_cyrillic_soft_sign", "morekeys_punctuation", + "morekeys_question", + "morekeys_cyrillic_soft_sign", "morekeys_nordic_row2_11", + "morekeys_tablet_comma", + "keyhintlabel_period", + "label_go_key", + "label_send_key", + "label_next_key", + "label_done_key", + "label_search_key", + "label_previous_key", + "label_pause_key", + "label_wait_key", + "morekeys_misc_y", + "morekeys_swiss_row1_11", + "morekeys_swiss_row2_10", + "morekeys_swiss_row2_11", + "keyspec_swiss_row1_11", + "keyspec_swiss_row2_10", + "keyspec_swiss_row2_11", + "keyspec_spanish_row2_10", + "morekeys_r", "morekeys_symbols_semicolon", "morekeys_symbols_percent", "morekeys_bullet", @@ -184,56 +201,39 @@ public static String[] getTextsTable(final Locale locale) { "keyspec_symbols_percent", "keyhintlabel_tablet_period", "keyhintlabel_tablet_comma", - "keyspec_spanish_row2_10", - "morekeys_r", - "morekeys_misc_y", - "morekeys_swiss_row1_11", - "morekeys_swiss_row2_10", - "morekeys_swiss_row2_11", - "keyspec_swiss_row1_11", - "keyspec_swiss_row2_10", - "keyspec_swiss_row2_11", - "label_go_key", - "label_send_key", - "label_next_key", - "label_done_key", - "label_search_key", - "label_previous_key", - "label_pause_key", - "label_wait_key", - "morekeys_tablet_punctuation", - "morekeys_h", - "morekeys_j", - "morekeys_misc_g", + "morekeys_cyrillic_i", + "keyspec_south_slavic_row1_6", + "keyspec_south_slavic_row2_11", + "keyspec_south_slavic_row3_1", + "keyspec_south_slavic_row3_8", "morekeys_cyrillic_u", "morekeys_cyrillic_en", "morekeys_cyrillic_ghe", "morekeys_east_slavic_row2_2", "morekeys_cyrillic_o", - "morekeys_k", + "morekeys_h", + "morekeys_j", + "morekeys_misc_g", "morekeys_misc_l", "morekeys_misc_r", - "morekeys_cyrillic_i", - "keyspec_south_slavic_row1_6", - "keyspec_south_slavic_row2_11", - "keyspec_south_slavic_row3_1", - "keyspec_south_slavic_row3_8", + "morekeys_k", + "morekeys_tablet_punctuation", + "morekeys_plus", + "morekeys_exclamation", + "morekeys_cyrillic_ka", + "morekeys_cyrillic_a", + "morekeys_east_slavic_row2_11", + "qwertysyms_x", + "qwertysyms_c", + "morekeys_misc_code_u044c", "morekeys_misc_h", "keyspec_q", "keyspec_w", "keyspec_y", "keyspec_x", - "morekeys_plus", - "morekeys_cyrillic_ka", - "morekeys_cyrillic_a", - "morekeys_east_slavic_row2_11", - "morekeys_currency_dollar", "morekeys_misc_t", - "morekeys_misc_code_u044c", "morekeys_w", - "qwertysyms_x", - "qwertysyms_c", - "morekeys_exclamation", + "morekeys_currency_dollar", "morekeys_less_than", "morekeys_greater_than", "morekeys_b", @@ -384,14 +384,15 @@ public static String[] getTextsTable(final Locale locale) { private static final String EMPTY = ""; - private static final String[] TEXTS_ar = { - "ar", - "\u0623\u200c\u0628\u200c\u062c", + private static final String[] TEXTS_hy = { + "hy", + "\u0531\u0532\u0533", null, null, null, null, null, + "\u058f", null, null, null, @@ -406,40 +407,14 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0661", - "\u0662", - "\u0663", - "\u0664", - "\u0665", - "\u0666", - "\u0667", - "\u0668", - "\u0669", - "\u0660", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "0,\u066b,\u066c", null, null, null, - "\u0663\u0662\u0661\u061f", null, - "!text/morekeys_arabic_diacritics", null, null, - "!text/morekeys_arabic_diacritics", - "\u060c", null, null, - "\u2605,\u066d", - "\u060c", null, null, null, @@ -452,58 +427,22 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "?,\u00bf", - "!fixedColumnOrder!4,:,!,\u061f,\u061b,-,\\\",\\'", - "(|)", - ")|(", - "[|]", - "]|[", - "{|}", - "}|{", - "<|>", - ">|<", - "\u2264|\u2265", - "\u2265|\u2264", - "\u00ab|\u00bb", - "\u00bb|\u00ab", - "\u2039|\u203a", - "\u203a|\u2039", - "\u0651", null, null, null, - ";", - "\\%,\u2030", - "\u266a", - "!fixedColumnOrder!4,\ufd3e|\ufd3f,!text/keyspecs_left_parenthesis_more_keys", - "!fixedColumnOrder!4,\ufd3f|\ufd3e,!text/keyspecs_right_parenthesis_more_keys", - "!fixedColumnOrder!8, \u0654\u25cc|\u0654, \u0652\u25cc|\u0652, \u064d\u25cc|\u064d, \u064c\u25cc|\u064c, \u0651\u25cc|\u0651, \u064b\u25cc|\u064b,!text/keyspec_symbols_question,!, \u0656\u25cc|\u0656, \u0670\u25cc|\u0670, \u0653\u25cc|\u0653, \u0650\u25cc|\u0650, \u064f\u25cc|\u064f,\u0640, \u0655\u25cc|\u0655, \u064e\u25cc|\u064e", - "\u061f", - "\u061b", - "\u066a", - "\u0651", - "\u061f" - }; - - private static final String[] TEXTS_az = { - "az", null, - "\u00e2,\u00e4,\u00e1", - "\u00f6,\u00f4,\u0153,\u00f2,\u00f3,\u00f5,\u00f8,\u014d", - "\u0259,\u00e9", - "\u00fc,\u00fb,\u00f9,\u00fa,\u016b", - "\u0131,\u00ee,\u00ef,\u00ec,\u00ed,\u012f,\u012b", + "!text/morekeys_punctuation", null, null, - "\u00e7,\u0107,\u010d", + ",", + "\u0589", null, - "\u015f,\u00df,\u015b,\u0161", null, null, + ",", + "\u0589", null, - "\u017e", null, - "\u0148,\u00f1", null, null, null, @@ -527,27 +466,20 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00fd", + "!autoColumnOrder!8,\\,,\u055e,\u055c,.,\u055a,\u0559,?,!,\u055d,\u055b,\u058a,\u00bb,\u00ab,\u055f,;,:", + "\u055e,\u00bf", null, null, null, null, null, - "\u011f" - }; - - private static final String[] TEXTS_be = { - "be", - "\u0410\u0411\u0412", null, null, null, null, null, - "!text/double_9qm_lqm", null, null, - "!text/single_9qm_lqm", null, null, null, @@ -586,20 +518,31 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u055c,\u00a1" + }; + + private static final String[] TEXTS_tr = { + "tr", null, null, - "\u0451", + "\u00f6", + "\u00fc", null, + "\u0131", null, null, - "\u045e", - "\u044b", - "\u044d", - "\u0456", null, + "\u00e7", + "\u015f", + "\u00f4,\u0153,\u00f2,\u00f3,\u00f5,\u00f8,\u014d", + null, + "\u00fb,\u00f9,\u00fa,\u016b", null, null, + "\u00ee,\u00ef,\u00ec,\u00ed,\u012f,\u012b", null, + "\u0107,\u010d", + "\u00df,\u015b,\u0161", null, null, null, @@ -621,30 +564,25 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u044a" - }; - - private static final String[] TEXTS_bg = { - "bg", - "\u0410\u0411\u0412", null, null, null, null, null, - "!text/double_9qm_lqm" + "\u011f" }; - private static final String[] TEXTS_bn_BD = { - "bn_BD", - "\u0995\u0996\u0997", + private static final String[] TEXTS_mk = { + "mk", + "\u0410\u0411\u0412", null, null, null, null, null, null, - "\u09f3", + "!text/double_9qm_lqm", + "!text/single_9qm_lqm", null, null, null, @@ -657,61 +595,14 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u09e7", - "\u09e8", - "\u09e9", - "\u09ea", - "\u09eb", - "\u09ec", - "\u09ed", - "\u09ee", - "\u09ef", - "\u09e6", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "0" - }; - - private static final String[] TEXTS_bn_IN = { - "bn_IN", - "\u0995\u0996\u0997", null, null, null, null, null, null, - "\u20b9" - }; - - private static final String[] TEXTS_ca = { - "ca", - null, - "\u00e0", - "\u00f2,\u00f3", - "\u00e8,\u00e9", - "\u00fa,\u00fc", - "\u00ed,\u00ef", - null, - null, - "\u00e7", - null, - null, - "\u00e1,\u00e4,\u00e2,\u00e3,\u00e5,\u0105,\u00e6,\u0101,\u00aa", - "\u00f6,\u00f4,\u00f5,\u00f8,\u0153,\u014d,\u00ba", - "\u00f9,\u00fb,\u016b", null, - "\u00eb,\u00ea,\u0119,\u0117,\u0113", null, - "\u00ec,\u00ee,\u012f,\u012b", - "\u0107,\u010d", null, null, null, @@ -733,6 +624,7 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0450", null, null, null, @@ -751,7 +643,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "l\u00b7l", null, null, null, @@ -777,7 +668,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "!autoColumnOrder!9,\\\\,?,!,\u00b7,#,),(,/,;,',@,:,-,\\\",+,\\%,&", null, null, null, @@ -790,7 +680,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00e7", null, null, null, @@ -799,22 +688,30 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u045d", + "\u0455", + "\u045c", + "\u0437", + "\u0453" + }; + + private static final String[] TEXTS_sr_ZZ = { + "sr_ZZ", null, null, null, null, + "\u00e8", + "\u00ec", null, null, null, + "\u010d,\u0107,%", + "\u0161,%", null, - "!autoColumnOrder!8,\\\\,',\u00b7,#,),(,/,;,@,:,-,\\\",+,\\%,&" - }; - - private static final String[] TEXTS_ckb = { - "ckb", - "\u0623\u200c\u0628\u200c\u062c", null, null, + "\u017e,%", null, null, null, @@ -832,44 +729,18 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0661", - "\u0662", - "\u0663", - "\u0664", - "\u0665", - "\u0666", - "\u0667", - "\u0668", - "\u0669", - "\u0660", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "0,\u066b,\u066c", null, null, null, - "\u0663\u0662\u0661\u061f", null, - "\u061f", null, null, - "\u061f", - "\u060c", null, - ".", - "\u2605,\u066d", - "\u060c", null, null, null, null, + "\u0111,%", null, null, null, @@ -878,61 +749,11 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "?,\u00bf", - "!fixedColumnOrder!4,:,!,\u061f,\u061b,-,\\\",\\'", - "(|)", - ")|(", - "[|]", - "]|[", - "{|}", - "}|{", - "<|>", - ">|<", - "\u2264|\u2265", - "\u2265|\u2264", - "\u00ab|\u00bb", - "\u00bb|\u00ab", - "\u2039|\u203a", - "\u203a|\u2039", - "\u0651", null, null, null, - ";", - "\\%,\u2030", - "\u266a", - "!fixedColumnOrder!4,\ufd3e|\ufd3f,!text/keyspecs_left_parenthesis_more_keys", - "!fixedColumnOrder!4,\ufd3f|\ufd3e,!text/keyspecs_right_parenthesis_more_keys", - "!fixedColumnOrder!7, \u0655\u25cc|\u0655, \u0654\u25cc|\u0654, \u0652\u25cc|\u0652, \u064d\u25cc|\u064d, \u064c\u25cc|\u064c, \u064b\u25cc|\u064b, \u0651\u25cc|\u0651, \u0656\u25cc|\u0656, \u0670\u25cc|\u0670, \u0653\u25cc|\u0653, \u0650\u25cc|\u0650, \u064f\u25cc|\u064f, \u064e\u25cc|\u064e,\u0640|\u0640", - "\u061f", - "\u061b", - "\u066a", - "\u0651", - "\u061f" - }; - - private static final String[] TEXTS_cs = { - "cs", null, - "\u00e1", - "\u00f3", - "\u00e9,\u011b", - "\u00fa,\u016f", - "\u00ed", - "!text/double_9qm_lqm", null, - "\u010d", - "!text/single_9qm_lqm", - "\u0161", - "\u00e0,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101", - "\u00f6,\u00f4,\u00f2,\u00f5,\u0153,\u00f8,\u014d", - "\u00fb,\u00fc,\u00f9,\u016b", - "\u017e", - "\u00e8,\u00ea,\u00eb,\u0119,\u0117,\u0113", - "\u0148", - "\u00ee,\u00ef,\u00ec,\u012f,\u012b", - "\u00e7,\u0107", - "\u00df,\u015b", null, null, null, @@ -953,35 +774,46 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00fd", - "!text/single_raqm_laqm", - "!text/double_raqm_laqm", null, - "\u010f", null, null, - "\u017a,\u017c", null, null, null, null, null, null, + "Idi", + "\u0160alji", + "Sled", + "Gotov", + "Tra\u017ei", + "Preth", + "Pauza", + "\u010cekaj" + }; + + private static final String[] TEXTS_sl = { + "sl", null, null, null, null, null, - "\u0165", - "\u00f1,\u0144", null, null, + "!text/double_9qm_lqm", + "!text/single_9qm_lqm", + "\u010d", + "\u0161", null, null, null, + "\u017e", null, null, null, + "\u0107", null, null, null, @@ -1003,49 +835,88 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "!text/single_raqm_laqm", + "!text/double_raqm_laqm" + }; + + private static final String[] TEXTS_new = { + "new", + "\ud805\udc0e\ud805\udc0f\ud805\udc10", null, null, null, null, null, + "\ud805\udc2c\ud805\udc38", null, null, null, - "\u0159", - "\u00ff" - }; - - private static final String[] TEXTS_da = { - "da", null, - "\u00e5,\u00e6", - "\u00f8", null, null, null, - "!text/double_9qm_lqm", null, null, - "!text/single_9qm_lqm", null, - "\u00e1,\u00e4,\u00e0,\u00e2,\u00e3,\u0101", - "\u00f6,\u00f3,\u00f4,\u00f2,\u00f5,\u0153,\u014d", null, null, null, + "\ud805\udc51", + "\ud805\udc52", + "\ud805\udc53", + "\ud805\udc54", + "\ud805\udc55", + "\ud805\udc56", + "\ud805\udc57", + "\ud805\udc58", + "\ud805\udc59", + "\ud805\udc50", + "1,\ud805\udc4a", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "0", null, null, null, null, + "?\ud805\udc51\ud805\udc52\ud805\udc53", + "!autoColumnOrder!8,.,\\,,?,!,\ud805\udc4d,\ud805\udc5a,\ud805\udc4c,#,),(,',/,@,:,;,-,\",+", null, null, + "\ud805\udc4d", + "\ud805\udc4b", null, + "!autoColumnOrder!8,\\,,.,?,!,\ud805\udc4d,\ud805\udc5a,\ud805\udc4c,#,),(,/,',@,:,;,-,\",+", null, + "\ud805\udc4d", + "\ud805\udc4b" + }; + + private static final String[] TEXTS_hu = { + "hu", null, + "\u00e1", + "\u00f3,\u00f6,\u0151", + "\u00fa,\u00fc,\u0171", + "\u00e9", + "\u00ed", null, + "!text/double_9qm_rqm", + "!text/single_9qm_rqm", null, null, + "\u00f4,\u00f2,\u00f5,\u0153,\u00f8,\u014d", + "\u00e0,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101", + "\u00fb,\u00f9,\u016b", null, + "\u00e8,\u00ea,\u00eb,\u0119,\u0117,\u0113", + "\u00ee,\u00ef,\u00ec,\u012f,\u012b", null, null, null, @@ -1058,8 +929,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "!text/single_raqm_laqm", - "!text/double_raqm_laqm", null, null, null, @@ -1071,17 +940,21 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "!text/single_raqm_laqm", + "!text/double_raqm_laqm" + }; + + private static final String[] TEXTS_mr = { + "mr", + "\u0915\u0916\u0917", null, null, null, null, null, + "\u20b9", null, null, - "\u00e4", - "\u00e5", - "\u00e6", - "\u00f8", null, null, null, @@ -1093,44 +966,82 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0967", + "\u0968", + "\u0969", + "\u096a", + "\u096b", + "\u096c", + "\u096d", + "\u096e", + "\u096f", + "\u0966", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "0", null, null, null, null, + "?\u0967\u0968\u0969" + }; + + private static final String[] TEXTS_bn_IN = { + "bn_IN", + "\u0995\u0996\u0997", null, null, null, null, null, - "\u00f6" + "\u20b9" }; - private static final String[] TEXTS_de = { - "de", - null, - "\u00e4", - "\u00f6", - null, - "\u00fc", - null, - "!text/double_9qm_lqm", + private static final String[] TEXTS_lt = { + "lt", null, + "\u0105", null, - "!text/single_9qm_lqm", - "\u00df", - "%,\u00e2,\u00e0,\u00e1,\u00e6,\u00e3,\u00e5,\u0101", - "%,\u00f4,\u00f2,\u00f3,\u00f5,\u0153,\u00f8,\u014d", - "%,\u00fb,\u00f9,\u00fa,\u016b", + "\u016b,\u0173", + "\u0117,\u0119", + "\u012f", null, + "\u201d,\u201e,\u201c", + "\u2019,\u201a,\u2018", + "\u010d", + "\u0161", null, null, null, + "\u017e" + }; + + private static final String[] TEXTS_is = { + "is", null, - "\u015b,\u0161", + "\u00e1,\u00e4,\u00e6", + "\u00f3,\u00f6", + "\u00fa", + "\u00e9", + "\u00ed", null, + "!text/double_9qm_lqm", + "!text/single_9qm_lqm", null, null, + "\u00f4,\u00f2,\u00f5,\u0153,\u00f8,\u014d", + "\u00e5,\u00e0,\u00e2,\u00e3,\u0101", + "\u00fc,\u00fb,\u00f9,\u016b", null, + "\u00eb,\u00e8,\u00ea,\u0119,\u0117,\u0113", + "\u00ef,\u00ee,\u00ec,\u012f,\u012b", null, null, null, @@ -1148,8 +1059,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "!text/single_raqm_laqm", - "!text/double_raqm_laqm", null, null, null, @@ -1158,6 +1067,8 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u00fd", + "\u00f0", null, null, null, @@ -1169,6 +1080,7 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u00fe", null, null, null, @@ -1207,45 +1119,26 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00e8", - "\u00e9", - "\u00e0", - "\u00fc", - "\u00f6", - "\u00e4" - }; - - private static final String[] TEXTS_el = { - "el", - "\u0391\u0392\u0393" - }; - - private static final String[] TEXTS_en = { - "en" + "\u00ff" }; - private static final String[] TEXTS_eo = { - "eo", + private static final String[] TEXTS_kk = { + "kk", + "\u0410\u0411\u0412", null, null, null, null, - "\u016d", null, null, null, - "\u0109", null, - "\u015d", null, null, - "\u00fa,\u016f,\u00fb,\u00fc,\u00f9,\u016b,\u0169,\u0171,\u0173,\u00b5", null, null, null, null, - "\u0107,\u010d,\u00e7,\u010b", - "\u00df,\u0161,\u015b,\u0219,\u015f", null, null, null, @@ -1272,7 +1165,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u011d", null, null, null, @@ -1282,11 +1174,16 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0451", null, null, null, null, null, + "\u0449", + "\u044b", + "\u044d", + "\u0438", null, null, null, @@ -1309,6 +1206,7 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u044a", null, null, null, @@ -1323,7 +1221,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0135", null, null, null, @@ -1341,14 +1238,16 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0125", - "\u0135", - "\u011f,\u0121,\u0123", null, null, null, null, null, + "\u04af,\u04b1", + "\u04a3", + "\u0493", + "\u0456", + "\u04e9", null, null, null, @@ -1357,53 +1256,76 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0127", - "\u015d", - "\u011d", - "\u016d", - "\u0109" + null, + "\u049b", + "\u04d9", + "\u04bb" }; - private static final String[] TEXTS_es = { - "es", + private static final String[] TEXTS_nl = { + "nl", null, - "\u00e1", - "\u00f3", - "\u00e9", + "\u00e1,\u00e4,\u00e2,\u00e0", + "\u00f3,\u00f6", "\u00fa,\u00fc", - "\u00ed", - null, - null, + "\u00e9,\u00eb,\u00ea,\u00e8", + "\u00ed,\u00ef,\u00ec,\u00ee,\u012f,\u012b,\u0133", null, + "!text/double_9qm_rqm", + "!text/single_9qm_rqm", null, null, - "\u00e0,\u00e4,\u00e2,\u00e3,\u00e5,\u0105,\u00e6,\u0101,\u00aa", - "\u00f2,\u00f6,\u00f4,\u00f5,\u00f8,\u0153,\u014d,\u00ba", - "\u00f9,\u00fb,\u016b", + "\u00f4,\u00f2,\u00f5,\u0153,\u00f8,\u014d", + "\u00e6,\u00e3,\u00e5,\u0101", + "\u00fb,\u00f9,\u016b", null, - "\u00e8,\u00eb,\u00ea,\u0119,\u0117,\u0113", - "\u00f1", - "\u00ef,\u00ec,\u00ee,\u012f,\u012b", + "\u0119,\u0117,\u0113" + }; + + private static final String[] TEXTS_ta_IN = { + "ta_IN", + "\u0ba4\u0bae\u0bbf\u0bb4\u0bcd", null, null, null, null, null, + "\u0bf9" + }; + + private static final String[] TEXTS_ja = { + "ja", + "\u2190", null, null, null, null, null, + "\u00a5" + }; + + private static final String[] TEXTS_de = { + "de", null, + "\u00e4", + "\u00f6", + "\u00fc", null, null, null, + "!text/double_9qm_lqm", + "!text/single_9qm_lqm", null, + "\u00df", + "%,\u00f4,\u00f2,\u00f3,\u00f5,\u0153,\u00f8,\u014d", + "%,\u00e2,\u00e0,\u00e1,\u00e6,\u00e3,\u00e5,\u0101", + "%,\u00fb,\u00f9,\u00fa,\u016b", null, null, null, null, null, + "\u015b,\u0161", null, null, null, @@ -1424,9 +1346,10 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "!text/single_raqm_laqm", + "!text/double_raqm_laqm", null, null, - "\u0144", null, null, null, @@ -1450,31 +1373,15 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "!autoColumnOrder!9,\\\\,?,!,#,),(,/,;,\u00a1,',@,:,-,\\\",+,\\%,&,\u00bf" - }; - - private static final String[] TEXTS_et = { - "et", null, - "\u00e4", - "\u00f6,\u00f5", null, - "\u00fc", null, - "!text/double_9qm_lqm", null, null, - "!text/single_9qm_lqm", - "\u0161", - "\u0101,\u00e0,\u00e1,\u00e2,\u00e3,\u00e5,\u00e6,\u0105", - "\u00f2,\u00f3,\u00f4,\u0153,\u0151,\u00f8", - "\u016b,\u0173,\u00f9,\u00fa,\u00fb,\u016f,\u0171", - "\u017e", null, null, null, null, - "\u00df,\u015b,\u015f", null, null, null, @@ -1494,15 +1401,27 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u00e8", + "\u00e9", + "\u00e0", + "\u00fc", + "\u00f6", + "\u00e4" + }; + + private static final String[] TEXTS_ru = { + "ru", + "\u0410\u0411\u0412", null, null, null, null, null, null, + "!text/double_9qm_lqm", + "!text/single_9qm_lqm", null, null, - "\u017c,\u017a", null, null, null, @@ -1516,23 +1435,9 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00f5", - "\u00fc", - "\u00f6", - "\u00e4" - }; - - private static final String[] TEXTS_eu = { - "eu", null, - "\u00e1,\u00e0,\u00e4,\u00e2,\u00e3,\u00e5,\u0105,\u00e6,\u0101,\u00aa", - "\u00f3,\u00f2,\u00f6,\u00f4,\u00f5,\u00f8,\u0153,\u014d,\u00ba", - "\u00e9,\u00e8,\u00eb,\u00ea,\u0119,\u0117,\u0113", - "\u00fa,\u00fc,\u00f9,\u00fb,\u016b", - "\u00ed,\u00ef,\u00ec,\u00ee,\u012f,\u012b", null, null, - "\u00e7,\u0107,\u010d", null, null, null, @@ -1540,14 +1445,7 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00f1,\u0144" - }; - - private static final String[] TEXTS_fi = { - "fi", null, - "\u00e4,\u00e5", - "\u00f6", null, null, null, @@ -1555,24 +1453,24 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0161", - "\u00e6,\u00e0,\u00e1,\u00e2,\u00e3,\u0101", - "\u00f8,\u00f4,\u00f2,\u00f3,\u00f5,\u0153,\u014d", null, - "\u017e", null, null, null, null, - "\u00df,\u015b", null, null, null, + "\u0451", null, null, null, null, null, + "\u0449", + "\u044b", + "\u044d", + "\u0438", null, null, null, @@ -1592,10 +1490,10 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u017a,\u017c", null, null, null, + "\u044a", null, null, null, @@ -1606,10 +1504,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00f8", - "\u00e5", - "\u00f6", - "\u00e4", null, null, null, @@ -1630,30 +1524,13 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00e6" - }; - - private static final String[] TEXTS_fr = { - "fr", null, - "\u00e0,\u00e2,%,\u00e6", - "\u00f4,\u0153", - "\u00e9,\u00e8,\u00ea,\u00eb", - "\u00f9,\u00fb,%,\u00fc", - "\u00ee,%,\u00ef", null, null, - "\u00e7", null, null, - "\u00e1,\u00e4,\u00e3,\u00e5,\u0101,\u00aa", - "%,\u00f6,\u00f2,\u00f3,\u00f5,\u00f8,\u014d,\u00ba", - "\u00fa,\u016b", null, - "%,\u0119,\u0117,\u0113", null, - "\u00ec,\u00ed,\u012f,\u012b", - "%,\u0107,\u010d", null, null, null, @@ -1670,13 +1547,32 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\",\u00bb,\u00ab", + "',\u203a,\u2039" + }; + + private static final String[] TEXTS_pl = { + "pl", null, + "\u0105", + "\u00f3", null, + "\u0119", null, null, + "!text/double_9qm_rqm", + "!text/single_9qm_rqm", + "\u0107", + "\u015b", + "\u00f6,\u00f4,\u00f2,\u00f5,\u0153,\u00f8,\u014d", + "\u00e1,\u00e0,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101", null, - "%,\u00ff", + "\u017c,\u017a", + "\u00e8,\u00e9,\u00ea,\u00eb,\u0117,\u0113", null, + "\u0144", + "\u00e7,\u010d", + "\u00df,\u0161", null, null, null, @@ -1704,6 +1600,7 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u017e", null, null, null, @@ -1716,11 +1613,21 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0142", + "\u00f1" + }; + + private static final String[] TEXTS_uk = { + "uk", + "\u0410\u0411\u0412", null, null, null, null, null, + "\u20b4", + "!text/double_9qm_lqm", + "!text/single_9qm_lqm", null, null, null, @@ -1735,25 +1642,9 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00fc", - "\u00f6", - "\u00e4", - "\u00e8", - "\u00e9", - "\u00e0" - }; - - private static final String[] TEXTS_gl = { - "gl", null, - "\u00e1,\u00e0,\u00e4,\u00e2,\u00e3,\u00e5,\u0105,\u00e6,\u0101,\u00aa", - "\u00f3,\u00f2,\u00f6,\u00f4,\u00f5,\u00f8,\u0153,\u014d,\u00ba", - "\u00e9,\u00e8,\u00eb,\u00ea,\u0119,\u0117,\u0113", - "\u00fa,\u00fc,\u00f9,\u00fb,\u016b", - "\u00ed,\u00ef,\u00ec,\u00ee,\u012f,\u012b", null, null, - "\u00e7,\u0107,\u010d", null, null, null, @@ -1761,19 +1652,12 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00f1,\u0144" - }; - - private static final String[] TEXTS_hi = { - "hi", - "\u0915\u0916\u0917", null, null, null, null, null, null, - "\u20b9", null, null, null, @@ -1786,38 +1670,18 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0967", - "\u0968", - "\u0969", - "\u096a", - "\u096b", - "\u096c", - "\u096d", - "\u096e", - "\u096f", - "\u0966", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "0", null, null, null, - "?\u0967\u0968\u0969", null, - "!autoColumnOrder!8,.,\\,,?,!,\u0965,#,),(,',/,@,:,;,-,\",+", null, + "\u0449", + "\u0456", + "\u0454", + "\u0438", null, - "!autoColumnOrder!8,\\,,.,?,!,\u0965,#,),(,/,',@,:,;,-,\",+", null, null, - "\u0964", null, null, null, @@ -1831,11 +1695,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0964" - }; - - private static final String[] TEXTS_hi_ZZ = { - "hi_ZZ", null, null, null, @@ -1843,7 +1702,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u20b9", null, null, null, @@ -1882,6 +1740,8 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0491", + "\u0457", null, null, null, @@ -1897,6 +1757,12 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u044a,\u044b" + }; + + private static final String[] TEXTS_ky = { + "ky", + "\u0410\u0411\u0412", null, null, null, @@ -1942,38 +1808,24 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "Go", - "Send", - "Next", - "Done", - "Search", - "Prev", - "Pause", - "Wait" - }; - - private static final String[] TEXTS_hr = { - "hr", null, null, null, null, + "\u0451", null, null, - "!text/double_9qm_rqm", null, - "\u010d,\u0107", - "!text/single_9qm_rqm", - "\u0161", null, null, + "\u0449", + "\u044b", + "\u044d", + "\u0438", null, - "\u017e", null, null, null, - "\u00e7", - "\u015b,\u00df", null, null, null, @@ -1992,38 +1844,19 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u044a", null, null, null, - "!text/single_raqm_laqm", - "!text/double_raqm_laqm", null, - "\u0111", null, null, - "\u017a,\u017c" - }; - - private static final String[] TEXTS_hu = { - "hu", null, - "\u00e1", - "\u00f3,\u00f6,\u0151", - "\u00e9", - "\u00fa,\u00fc,\u0171", - "\u00ed", - "!text/double_9qm_rqm", null, null, - "!text/single_9qm_rqm", null, - "\u00e0,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101", - "\u00f4,\u00f2,\u00f5,\u0153,\u00f8,\u014d", - "\u00fb,\u00f9,\u016b", null, - "\u00e8,\u00ea,\u00eb,\u0119,\u0117,\u0113", null, - "\u00ee,\u00ef,\u00ec,\u012f,\u012b", null, null, null, @@ -2047,40 +1880,36 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "!text/single_raqm_laqm", - "!text/double_raqm_laqm" - }; - - private static final String[] TEXTS_is = { - "is", null, - "\u00e1,\u00e4,\u00e6", - "\u00f3,\u00f6", - "\u00e9", - "\u00fa", - "\u00ed", - "!text/double_9qm_lqm", + "\u04af", + "\u04a3", null, null, - "!text/single_9qm_lqm", + "\u04e9" + }; + + private static final String[] TEXTS_fi = { + "fi", null, - "\u00e5,\u00e0,\u00e2,\u00e3,\u0101", - "\u00f4,\u00f2,\u00f5,\u0153,\u00f8,\u014d", - "\u00fc,\u00fb,\u00f9,\u016b", + "\u00e4,\u00e5", + "\u00f6", null, - "\u00eb,\u00e8,\u00ea,\u0119,\u0117,\u0113", null, - "\u00ef,\u00ee,\u00ec,\u012f,\u012b", null, null, null, null, null, + "\u0161", + "\u00f8,\u00f4,\u00f2,\u00f3,\u00f5,\u0153,\u014d", + "\u00e6,\u00e0,\u00e1,\u00e2,\u00e3,\u0101", null, + "\u017e", null, null, null, null, + "\u00df,\u015b", null, null, null, @@ -2093,11 +1922,9 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00fd", null, null, null, - "\u00f0", null, null, null, @@ -2110,9 +1937,9 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u017a,\u017c", null, null, - "\u00fe", null, null, null, @@ -2125,6 +1952,10 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u00f8", + "\u00e5", + "\u00f6", + "\u00e4", null, null, null, @@ -2142,31 +1973,33 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u00e6" + }; + + private static final String[] TEXTS_eo = { + "eo", null, null, null, + "\u016d", null, null, null, null, null, + "\u0109", + "\u015d", null, null, - "\u00ff" - }; - - private static final String[] TEXTS_iw = { - "iw", - "\u05d0\u05d1\u05d2", + "\u00fa,\u016f,\u00fb,\u00fc,\u00f9,\u016b,\u0169,\u0171,\u0173,\u00b5", null, null, null, null, + "\u0107,\u010d,\u00e7,\u010b", + "\u00df,\u0161,\u015b,\u0219,\u015f", null, - "!text/double_rqm_9qm", - "\u20aa", null, - "!text/single_rqm_9qm", null, null, null, @@ -2191,6 +2024,7 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u011d", null, null, null, @@ -2209,7 +2043,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u2605", null, null, null, @@ -2225,20 +2058,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "(|)", - ")|(", - "[|]", - "]|[", - "{|}", - "}|{", - "<|>", - ">|<", - "\u2264|\u2265", - "\u2265|\u2264", - "\u00ab|\u00bb", - "\u00bb|\u00ab", - "\u2039|\u203a", - "\u203a|\u2039", null, null, null, @@ -2260,6 +2079,8 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0135", + null, null, null, null, @@ -2281,6 +2102,9 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0125", + "\u0135", + "\u011f,\u0121,\u0123", null, null, null, @@ -2293,26 +2117,37 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00b1,\ufb29" + "\u0127", + "\u015d", + "\u011d", + "\u016d", + "\u0109" }; - private static final String[] TEXTS_ka = { - "ka", - "\u10d0\u10d1\u10d2", - null, - null, - null, + private static final String[] TEXTS_sk = { + "sk", null, + "\u00e1,\u00e4", + "\u00f4,\u00f3", + "\u00fa", + "\u00e9", + "\u00ed", null, "!text/double_9qm_lqm", + "!text/single_9qm_lqm", + "\u010d", + "\u0161", + "\u00f6,\u00f2,\u00f5,\u0153,\u0151,\u00f8", + "\u0101,\u00e0,\u00e2,\u00e3,\u00e5,\u00e6,\u0105", + "\u016f,\u00fc,\u016b,\u0173,\u00f9,\u00fb,\u0171", + "\u017e", + "\u011b,\u0113,\u0117,\u00e8,\u00ea,\u00eb,\u0119", + "\u012b,\u012f,\u00ec,\u00ee,\u00ef,\u0131", + "\u0148", + "\u00e7,\u0107", + "\u00df,\u015b,\u015f", null, null, - "!text/single_9qm_lqm" - }; - - private static final String[] TEXTS_kk = { - "kk", - "\u0410\u0411\u0412", null, null, null, @@ -2331,9 +2166,14 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "!text/single_raqm_laqm", + "!text/double_raqm_laqm", + "\u00fd", + "\u010f", null, null, null, + "\u017c,\u017a", null, null, null, @@ -2341,10 +2181,13 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0165", null, null, null, null, + "\u013e,\u013a", + "\u0146,\u00f1,\u0144", null, null, null, @@ -2362,14 +2205,9 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0451", null, null, null, - "\u0449", - "\u044b", - "\u044d", - "\u0438", null, null, null, @@ -2382,6 +2220,7 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u00ff", null, null, null, @@ -2389,13 +2228,13 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0155", null, null, null, null, null, null, - "\u044a", null, null, null, @@ -2414,6 +2253,8 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u013c,\u0142", + "\u0159,\u0157", null, null, null, @@ -2429,16 +2270,23 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0163" + }; + + private static final String[] TEXTS_ml = { + "ml", + "\u0d05", null, - "\u04af,\u04b1", - "\u04a3", - "\u0493", - "\u0456", - "\u04e9", null, null, null, null, + "\u20b9" + }; + + private static final String[] TEXTS_ckb = { + "ckb", + "\u0623\u200c\u0628\u200c\u062c", null, null, null, @@ -2449,14 +2297,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u049b", - "\u04d9", - "\u04bb" - }; - - private static final String[] TEXTS_km = { - "km", - "\u1780\u1781\u1782", null, null, null, @@ -2466,13 +2306,40 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0661", + "\u0662", + "\u0663", + "\u0664", + "\u0665", + "\u0666", + "\u0667", + "\u0668", + "\u0669", + "\u0660", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "0,\u066b,\u066c", null, null, null, null, + "\u0663\u0662\u0661\u061f", + "\u061f", null, null, + "\u060c", + ".", null, + "\u061f", + "\u2605,\u066d", + "\u060c", null, null, null, @@ -2485,9 +2352,26 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "(|)", + ")|(", + "[|]", + "]|[", + "{|}", + "}|{", + "<|>", + ">|<", + "\u2264|\u2265", + "\u2265|\u2264", + "\u00ab|\u00bb", + "\u00bb|\u00ab", + "\u2039|\u203a", + "\u203a|\u2039", null, + "?,\u00bf", null, null, + "!fixedColumnOrder!4,:,!,\u061f,\u061b,-,\\\",\\'", + "\u0651", null, null, null, @@ -2505,15 +2389,39 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + ";", + "\\%,\u2030", + "\u266a", + "!fixedColumnOrder!4,\ufd3e|\ufd3f,!text/keyspecs_left_parenthesis_more_keys", + "!fixedColumnOrder!4,\ufd3f|\ufd3e,!text/keyspecs_right_parenthesis_more_keys", + "!fixedColumnOrder!7, \u0655\u25cc|\u0655, \u0654\u25cc|\u0654, \u0652\u25cc|\u0652, \u064d\u25cc|\u064d, \u064c\u25cc|\u064c, \u064b\u25cc|\u064b, \u0651\u25cc|\u0651, \u0656\u25cc|\u0656, \u0670\u25cc|\u0670, \u0653\u25cc|\u0653, \u0650\u25cc|\u0650, \u064f\u25cc|\u064f, \u064e\u25cc|\u064e,\u0640|\u0640", + "\u061f", + "\u061b", + "\u066a", + "\u0651", + "\u061f" + }; + + private static final String[] TEXTS_az = { + "az", null, + "\u00e2,\u00e4,\u00e1", + "\u00f6,\u00f4,\u0153,\u00f2,\u00f3,\u00f5,\u00f8,\u014d", + "\u00fc,\u00fb,\u00f9,\u00fa,\u016b", + "\u0259,\u00e9", + "\u0131,\u00ee,\u00ef,\u00ec,\u00ed,\u012f,\u012b", null, null, null, + "\u00e7,\u0107,\u010d", + "\u015f,\u00df,\u015b,\u0161", null, null, null, + "\u017e", null, null, + "\u0148,\u00f1", null, null, null, @@ -2538,18 +2446,33 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u00fd", null, null, null, + "\u011f" + }; + + private static final String[] TEXTS_zz = { + "zz", null, + "\u00e0,\u00e1,\u00e2,\u00e3,\u00e4,\u00e5,\u00e6,\u0101,\u0103,\u0105,\u00aa", + "\u00f2,\u00f3,\u00f4,\u00f5,\u00f6,\u00f8,\u014d,\u014f,\u0151,\u0153,\u00ba", + "\u00f9,\u00fa,\u00fb,\u00fc,\u0169,\u016b,\u016d,\u016f,\u0171,\u0173", + "\u00e8,\u00e9,\u00ea,\u00eb,\u0113,\u0115,\u0117,\u0119,\u011b", + "\u00ec,\u00ed,\u00ee,\u00ef,\u0129,\u012b,\u012d,\u012f,\u0131,\u0133", null, null, null, + "\u00e7,\u0107,\u0109,\u010b,\u010d", + "\u00df,\u015b,\u015d,\u015f,\u0161,\u017f", null, null, null, + "\u017a,\u017c,\u017e", null, null, + "\u00f1,\u0144,\u0146,\u0148,\u0149,\u014b", null, null, null, @@ -2574,8 +2497,11 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u00fd,\u0177,\u00ff,\u0133", + "\u010f,\u0111,\u00f0", null, null, + "\u011d,\u011f,\u0121,\u0123", null, null, null, @@ -2584,10 +2510,12 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u00fe,\u0163,\u0165,\u0167", null, null, null, null, + "\u013a,\u013c,\u013e,\u0140,\u0142", null, null, null, @@ -2596,19 +2524,12 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u17db,\u00a2,\u00a3,\u20ac,\u00a5,\u20b1" - }; - - private static final String[] TEXTS_kn = { - "kn", - "\u0c85\u0c86\u0c87", null, null, null, null, null, null, - "\u20b9", null, null, null, @@ -2621,35 +2542,9 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0ce7", - "\u0ce8", - "\u0ce9", - "\u0cea", - "\u0ceb", - "\u0cec", - "\u0ced", - "\u0cee", - "\u0cef", - "\u0ce6", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "0", null, null, null, - "?\u0ce7\u0ce8\u0ce9" - }; - - private static final String[] TEXTS_ky = { - "ky", - "\u0410\u0411\u0412", null, null, null, @@ -2662,6 +2557,7 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0155,\u0157,\u0159", null, null, null, @@ -2683,9 +2579,12 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0125", + "\u0135", null, null, null, + "\u0137,\u0138", null, null, null, @@ -2699,20 +2598,32 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0451", null, null, + "\u0175" + }; + + private static final String[] TEXTS_pt = { + "pt", null, - "\u0449", - "\u044b", - "\u044d", - "\u0438", + "\u00e1,\u00e3,\u00e0,\u00e2", + "\u00f3,\u00f5,\u00f4", + "\u00fa,\u00fc", + "\u00e9,\u00ea", + "\u00ed", null, null, null, + "\u00e7", null, + "\u00f2,\u00f6,\u0153,\u00f8,\u014d,\u00ba", + "\u00e4,\u00e5,\u00e6,\u00aa", + "\u00f9,\u00fb,\u016b", null, + "\u00e8,\u0119,\u0117,\u0113,\u00eb", + "\u00ee,\u00ec,\u00ef,\u012f,\u012b", null, + "\u010d,\u0107", null, null, null, @@ -2732,7 +2643,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u044a", null, null, null, @@ -2767,66 +2677,23 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u04af", - "\u04a3", null, null, - "\u04e9" - }; - - private static final String[] TEXTS_lo = { - "lo", - "\u0e81\u0e82\u0e84", null, null, null, null, null, null, - "\u20ad" - }; - - private static final String[] TEXTS_lt = { - "lt", null, - "\u0105", null, - "\u0117,\u0119", - "\u016b,\u0173", - "\u012f", - "\u201d,\u201e,\u201c", null, - "\u010d", - "\u2019,\u201a,\u2018", - "\u0161", null, null, null, - "\u017e" - }; - - private static final String[] TEXTS_lv = { - "lv", null, - "\u0101", null, - "\u0113", - "\u016b", - "\u012b", - "!text/double_9qm_lqm", null, - "\u010d", - "!text/single_9qm_lqm", - "\u0161", - "\u00e0,\u00e1,\u00e2,\u00e3,\u00e4,\u00e5,\u00e6,\u0105", - "\u014d,\u00f2,\u00f3,\u00f4,\u00f5,\u00f6,\u0153,\u0151,\u00f8", - "\u0173,\u00f9,\u00fa,\u00fb,\u00fc,\u016f,\u0171", - "\u017e", - "\u0117,\u00e8,\u00e9,\u00ea,\u00eb,\u0119,\u011b", - "\u0146", - "\u012f,\u00ec,\u00ed,\u00ee,\u00ef,\u0131", - "\u00e7,\u0107", - "\u00df,\u015b,\u015f", null, null, null, @@ -2839,22 +2706,33 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u00e7" + }; + + private static final String[] TEXTS_rm = { + "rm", null, null, + "\u00f2,\u00f3,\u00f6,\u00f4,\u00f5,\u0153,\u00f8" + }; + + private static final String[] TEXTS_be = { + "be", + "\u0410\u0411\u0412", null, null, null, null, null, null, + "!text/double_9qm_lqm", + "!text/single_9qm_lqm", null, null, null, null, null, null, - "\u0123", - "\u017c,\u017a", null, null, null, @@ -2865,9 +2743,7 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u013c", null, - "\u00f1,\u0144", null, null, null, @@ -2892,11 +2768,16 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0451", null, null, null, null, null, + "\u045e", + "\u044b", + "\u044d", + "\u0456", null, null, null, @@ -2919,35 +2800,31 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u044a" + }; + + private static final String[] TEXTS_en = { + "en" + }; + + private static final String[] TEXTS_hi_ZZ = { + "hi_ZZ", null, null, null, null, null, - "\u011f", null, + "\u20b9", null, null, null, null, - "\u0137", - "\u0142,\u013a,\u013e", - "\u0157,\u0159,\u0155" - }; - - private static final String[] TEXTS_mk = { - "mk", - "\u0410\u0411\u0412", null, null, null, null, null, - "!text/double_9qm_lqm", - null, - null, - "!text/single_9qm_lqm", - null, null, null, null, @@ -2987,8 +2864,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0450", - null, null, null, null, @@ -3020,12 +2895,32 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "Go", + "Send", + "Next", + "Done", + "Search", + "Prev", + "Pause", + "Wait" + }; + + private static final String[] TEXTS_ka = { + "ka", + "\u10d0\u10d1\u10d2", null, null, null, null, null, null, + "!text/double_9qm_lqm", + "!text/single_9qm_lqm" + }; + + private static final String[] TEXTS_my = { + "my", + "\u1000\u1001\u1002", null, null, null, @@ -3063,47 +2958,27 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u045d", - "\u0455", - "\u045c", - "\u0437", - "\u0453" - }; - - private static final String[] TEXTS_ml = { - "ml", - "\u0d05", null, null, null, null, null, null, - "\u20b9" - }; - - private static final String[] TEXTS_mn = { - "mn", - "\u0410\u0411\u0412", null, null, null, null, + "\u104a", + "\u104b", null, null, - "\u20ae" - }; - - private static final String[] TEXTS_mr = { - "mr", - "\u0915\u0916\u0917", null, null, + "\u104b", null, null, null, null, - "\u20b9", null, null, null, @@ -3116,44 +2991,21 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0967", - "\u0968", - "\u0969", - "\u096a", - "\u096b", - "\u096c", - "\u096d", - "\u096e", - "\u096f", - "\u0966", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "0", null, null, null, - "?\u0967\u0968\u0969" - }; - - private static final String[] TEXTS_my = { - "my", - "\u1000\u1001\u1002", null, null, null, null, null, null, + "!autoColumnOrder!9,\u104a,.,?,!,#,),(,/,;,...,',@,:,-,\\\",+,\\%,&", null, null, null, + "\\", + "\u104a", null, null, null, @@ -3193,13 +3045,17 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u104a", null, - "\u104b", null, null, null, null, + "!autoColumnOrder!8,.,',#,),(,/,;,@,...,:,-,\\\",+,\\%,&" + }; + + private static final String[] TEXTS_km = { + "km", + "\u1780\u1781\u1782", null, null, null, @@ -3209,9 +3065,7 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u104b", null, - "\\", null, null, null, @@ -3226,9 +3080,7 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u104a", null, - "!autoColumnOrder!9,\u104a,.,?,!,#,),(,/,;,...,',@,:,-,\\\",+,\\%,&", null, null, null, @@ -3258,21 +3110,10 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "!autoColumnOrder!8,.,',#,),(,/,;,@,...,:,-,\\\",+,\\%,&" - }; - - private static final String[] TEXTS_nb = { - "nb", null, - "\u00e5,\u00e6,\u00e4,\u00e0,\u00e1,\u00e2,\u00e3,\u0101", - "\u00f8,\u00f6,\u00f4,\u00f2,\u00f3,\u00f5,\u0153,\u014d", - "\u00e9,\u00e8,\u00ea,\u00eb,\u0119,\u0117,\u0113", - "\u00fc,\u00fb,\u00f9,\u00fa,\u016b", null, - "!text/double_9qm_rqm", null, null, - "!text/single_9qm_rqm", null, null, null, @@ -3324,10 +3165,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00f6", - "\u00e5", - "\u00f8", - "\u00e6", null, null, null, @@ -3348,19 +3185,12 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00e4" - }; - - private static final String[] TEXTS_ne = { - "ne", - "\u0915\u0916\u0917", null, null, null, null, null, null, - "\u0930\u0941.", null, null, null, @@ -3371,40 +3201,31 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u17db,\u00a2,\u00a3,\u20ac,\u00a5,\u20b1" + }; + + private static final String[] TEXTS_it = { + "it", null, + "\u00e0", + "\u00f2", + "\u00f9", + "\u00e8,\u00e9", + "\u00ec", null, - "\u0967", - "\u0968", - "\u0969", - "\u096a", - "\u096b", - "\u096c", - "\u096d", - "\u096e", - "\u096f", - "\u0966", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "0", null, null, null, - "?\u0967\u0968\u0969", null, - "!autoColumnOrder!8,.,\\,,?,!,\u0965,#,),(,',/,@,:,;,-,\",+", + "\u00f3,\u00f4,\u00f6,\u00f5,\u0153,\u00f8,\u014d,\u00ba", + "\u00e1,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101,\u00aa", + "\u00fa,\u00fb,\u00fc,\u016b", null, + "\u00ea,\u00eb,\u0119,\u0117,\u0113,\u0259", + "\u00ed,\u00ee,\u00ef,\u012f,\u012b", null, - "!autoColumnOrder!8,\\,,.,?,!,\u0965,#,),(,/,',@,:,;,-,\",+", null, null, - "\u0964", null, null, null, @@ -3418,19 +3239,12 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0964" - }; - - private static final String[] TEXTS_new = { - "new", - "\ud805\udc0e\ud805\udc0f\ud805\udc10", null, null, null, null, null, null, - "\ud805\udc2c\ud805\udc38", null, null, null, @@ -3443,40 +3257,14 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\ud805\udc51", - "\ud805\udc52", - "\ud805\udc53", - "\ud805\udc54", - "\ud805\udc55", - "\ud805\udc56", - "\ud805\udc57", - "\ud805\udc58", - "\ud805\udc59", - "\ud805\udc50", - "1,\ud805\udc4a", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "0", null, null, null, - "?\ud805\udc51\ud805\udc52\ud805\udc53", null, - "!autoColumnOrder!8,.,\\,,?,!,\ud805\udc4d,\ud805\udc5a,\ud805\udc4c,#,),(,',/,@,:,;,-,\",+", null, null, - "!autoColumnOrder!8,\\,,.,?,!,\ud805\udc4d,\ud805\udc5a,\ud805\udc4c,#,),(,/,',@,:,;,-,\",+", - "\ud805\udc4d", null, - "\ud805\udc4b", null, - "\ud805\udc4d", null, null, null, @@ -3488,51 +3276,17 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\ud805\udc4b" - }; - - private static final String[] TEXTS_nl = { - "nl", null, - "\u00e1,\u00e4,\u00e2,\u00e0", - "\u00f3,\u00f6", - "\u00e9,\u00eb,\u00ea,\u00e8", - "\u00fa,\u00fc", - "\u00ed,\u00ef,\u00ec,\u00ee,\u012f,\u012b,\u0133", - "!text/double_9qm_rqm", null, null, - "!text/single_9qm_rqm", null, - "\u00e6,\u00e3,\u00e5,\u0101", - "\u00f4,\u00f2,\u00f5,\u0153,\u00f8,\u014d", - "\u00fb,\u00f9,\u016b", null, - "\u0119,\u0117,\u0113" - }; - - private static final String[] TEXTS_pl = { - "pl", null, - "\u0105", - "\u00f3", - "\u0119", null, null, - "!text/double_9qm_rqm", null, - "\u0107", - "!text/single_9qm_rqm", - "\u015b", - "\u00e1,\u00e0,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101", - "\u00f6,\u00f4,\u00f2,\u00f5,\u0153,\u00f8,\u014d", null, - "\u017c,\u017a", - "\u00e8,\u00e9,\u00ea,\u00eb,\u0117,\u0113", - "\u0144", null, - "\u00e7,\u010d", - "\u00df,\u0161", null, null, null, @@ -3547,12 +3301,25 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u00e8", + "\u00e9", + "\u00e0", + "\u00fc", + "\u00f6", + "\u00e4" + }; + + private static final String[] TEXTS_sr = { + "sr", + "\u0410\u0411\u0412", null, null, null, null, null, null, + "!text/double_9qm_lqm", + "!text/single_9qm_lqm", null, null, null, @@ -3560,7 +3327,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u017e", null, null, null, @@ -3571,38 +3337,22 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0142", null, - "\u00f1" - }; - - private static final String[] TEXTS_pt = { - "pt", null, - "\u00e1,\u00e3,\u00e0,\u00e2", - "\u00f3,\u00f5,\u00f4", - "\u00e9,\u00ea", - "\u00fa,\u00fc", - "\u00ed", null, null, - "\u00e7", null, null, - "\u00e4,\u00e5,\u00e6,\u00aa", - "\u00f2,\u00f6,\u0153,\u00f8,\u014d,\u00ba", - "\u00f9,\u00fb,\u016b", null, - "\u00e8,\u0119,\u0117,\u0113,\u00eb", null, - "\u00ee,\u00ec,\u00ef,\u012f,\u012b", - "\u010d,\u0107", null, null, null, null, null, null, + "!text/single_raqm_laqm", + "!text/double_raqm_laqm", null, null, null, @@ -3611,6 +3361,7 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0450", null, null, null, @@ -3674,39 +3425,35 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - null, - "\u00e7" + "\u045d", + "\u0437", + "\u045b", + "\u0455", + "\u0452" }; - private static final String[] TEXTS_rm = { - "rm", - null, + private static final String[] TEXTS_hr = { + "hr", null, - "\u00f2,\u00f3,\u00f6,\u00f4,\u00f5,\u0153,\u00f8" - }; - - private static final String[] TEXTS_ro = { - "ro", null, - "\u0103,\u00e2", null, null, null, - "\u00ee", - "!text/double_9qm_rqm", null, null, + "!text/double_9qm_rqm", "!text/single_9qm_rqm", - "\u0219", - "\u00e3,\u00e0,\u00e1,\u00e4,\u00e6,\u00e5,\u0101", + "\u010d,\u0107", + "\u0161", null, null, null, + "\u017e", null, null, - "\u00ef,\u00ec,\u00ed,\u012f,\u012b", null, - "\u00df,\u015b,\u0161", + "\u00e7", + "\u015b,\u00df", null, null, null, @@ -3727,14 +3474,28 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "!text/single_raqm_laqm", + "!text/double_raqm_laqm", null, + "\u0111", null, null, null, + "\u017a,\u017c" + }; + + private static final String[] TEXTS_tl = { + "tl", null, + "\u00e1,\u00e0,\u00e4,\u00e2,\u00e3,\u00e5,\u0105,\u00e6,\u0101,\u00aa", + "\u00f3,\u00f2,\u00f6,\u00f4,\u00f5,\u00f8,\u0153,\u014d,\u00ba", + "\u00fa,\u00fc,\u00f9,\u00fb,\u016b", + "\u00e9,\u00e8,\u00eb,\u00ea,\u0119,\u0117,\u0113", + "\u00ed,\u00ef,\u00ec,\u00ee,\u012f,\u012b", null, null, null, + "\u00e7,\u0107,\u010d", null, null, null, @@ -3742,51 +3503,53 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u00f1,\u0144" + }; + + private static final String[] TEXTS_zu = { + "zu", null, + "\u00e0,\u00e1,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101", + "\u00f3,\u00f4,\u00f6,\u00f2,\u0153,\u00f8,\u014d,\u00f5", + "\u00fa,\u00fb,\u00fc,\u00f9,\u016b", + "\u00e9,\u00e8,\u00ea,\u00eb,\u0113", + "\u00ed,\u00ee,\u00ef,\u012b,\u00ec", null, null, null, - "\u021b" - }; - - private static final String[] TEXTS_si = { - "si", - "\u0d85,\u0d86", + "\u00e7", + "\u00df", null, null, null, null, null, null, - "\u0dbb\u0dd4" + "\u00f1" }; - private static final String[] TEXTS_sk = { - "sk", + private static final String[] TEXTS_et = { + "et", null, - "\u00e1,\u00e4", - "\u00f4,\u00f3", - "\u00e9", - "\u00fa", - "\u00ed", - "!text/double_9qm_lqm", + "\u00e4", + "\u00f6,\u00f5", + "\u00fc", null, - "\u010d", + null, + null, + "!text/double_9qm_lqm", "!text/single_9qm_lqm", + null, "\u0161", - "\u0101,\u00e0,\u00e2,\u00e3,\u00e5,\u00e6,\u0105", - "\u00f6,\u00f2,\u00f5,\u0153,\u0151,\u00f8", - "\u016f,\u00fc,\u016b,\u0173,\u00f9,\u00fb,\u0171", + "\u00f2,\u00f3,\u00f4,\u0153,\u0151,\u00f8", + "\u0101,\u00e0,\u00e1,\u00e2,\u00e3,\u00e5,\u00e6,\u0105", + "\u016b,\u0173,\u00f9,\u00fa,\u00fb,\u016f,\u0171", "\u017e", - "\u011b,\u0113,\u0117,\u00e8,\u00ea,\u00eb,\u0119", - "\u0148", - "\u012b,\u012f,\u00ec,\u00ee,\u00ef,\u0131", - "\u00e7,\u0107", - "\u00df,\u015b,\u015f", null, null, null, null, + "\u00df,\u015b,\u015f", null, null, null, @@ -3803,14 +3566,9 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00fd", - "!text/single_raqm_laqm", - "!text/double_raqm_laqm", null, - "\u010f", null, null, - "\u017c,\u017a", null, null, null, @@ -3819,11 +3577,9 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u017c,\u017a", null, null, - "\u013e,\u013a", - "\u0165", - "\u0146,\u00f1,\u0144", null, null, null, @@ -3836,11 +3592,23 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u00f5", + "\u00fc", + "\u00f6", + "\u00e4" + }; + + private static final String[] TEXTS_iw = { + "iw", + "\u05d0\u05d1\u05d2", null, null, null, null, null, + "\u20aa", + "!text/double_rqm_9qm", + "!text/single_rqm_9qm", null, null, null, @@ -3861,8 +3629,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0155", - "\u00ff", null, null, null, @@ -3886,9 +3652,8 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u2605", null, - "\u013c,\u0142", - "\u0159,\u0157", null, null, null, @@ -3901,33 +3666,36 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "(|)", + ")|(", + "[|]", + "]|[", + "{|}", + "}|{", + "<|>", + ">|<", + "\u2264|\u2265", + "\u2265|\u2264", + "\u00ab|\u00bb", + "\u00bb|\u00ab", + "\u2039|\u203a", + "\u203a|\u2039", null, null, null, - "\u0163" - }; - - private static final String[] TEXTS_sl = { - "sl", null, null, null, null, null, null, - "!text/double_9qm_lqm", null, - "\u010d", - "!text/single_9qm_lqm", - "\u0161", null, null, null, - "\u017e", null, null, null, - "\u0107", null, null, null, @@ -3950,33 +3718,31 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "!text/single_raqm_laqm", - "!text/double_raqm_laqm" - }; - - private static final String[] TEXTS_sr = { - "sr", - "\u0410\u0411\u0412", null, null, null, null, null, - "!text/double_9qm_lqm", null, null, - "!text/single_9qm_lqm", null, null, null, null, null, null, + "\u00b1,\ufb29" + }; + + private static final String[] TEXTS_kn = { + "kn", + "\u0c85\u0c86\u0c87", null, null, null, null, null, + "\u20b9", null, null, null, @@ -3990,15 +3756,38 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0ce7", + "\u0ce8", + "\u0ce9", + "\u0cea", + "\u0ceb", + "\u0cec", + "\u0ced", + "\u0cee", + "\u0cef", + "\u0ce6", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "0", null, null, null, null, + "?\u0ce7\u0ce8\u0ce9" + }; + + private static final String[] TEXTS_bod = { + "bod", null, null, null, - "!text/single_raqm_laqm", - "!text/double_raqm_laqm", null, null, null, @@ -4006,9 +3795,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0450", - null, - null, null, null, null, @@ -4019,11 +3805,37 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0f21", + "\u0f22", + "\u0f23", + "\u0f24", + "\u0f25", + "\u0f26", + "\u0f27", + "\u0f28", + "\u0f29", + "\u0f20", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "0" + }; + + private static final String[] TEXTS_ne = { + "ne", + "\u0915\u0916\u0917", null, null, null, null, null, + "\u0930\u0941.", null, null, null, @@ -4037,23 +3849,64 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0967", + "\u0968", + "\u0969", + "\u096a", + "\u096b", + "\u096c", + "\u096d", + "\u096e", + "\u096f", + "\u0966", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "0", null, null, null, null, + "?\u0967\u0968\u0969", + "!autoColumnOrder!8,.,\\,,?,!,\u0965,#,),(,',/,@,:,;,-,\",+", null, null, null, + "\u0964", null, + "!autoColumnOrder!8,\\,,.,?,!,\u0965,#,),(,/,',@,:,;,-,\",+", null, null, + "\u0964" + }; + + private static final String[] TEXTS_fr = { + "fr", null, + "\u00e0,\u00e2,%,\u00e6", + "\u00f4,\u0153", + "\u00f9,\u00fb,%,\u00fc", + "\u00e9,\u00e8,\u00ea,\u00eb", + "\u00ee,%,\u00ef", null, null, null, + "\u00e7", null, + "%,\u00f6,\u00f2,\u00f3,\u00f5,\u00f8,\u014d,\u00ba", + "\u00e1,\u00e4,\u00e3,\u00e5,\u0101,\u00aa", + "\u00fa,\u016b", null, + "%,\u0119,\u0117,\u0113", + "\u00ec,\u00ed,\u012f,\u012b", null, + "%,\u0107,\u010d", null, null, null, @@ -4077,35 +3930,22 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "%,\u00ff", null, null, null, null, null, - "\u045d", - "\u0437", - "\u045b", - "\u0455", - "\u0452" - }; - - private static final String[] TEXTS_sr___Latn = { - "sr__#Latn", null, null, null, - "\u00e8", null, - "\u00ec", null, null, - "\u010d,\u0107,%", null, - "\u0161,%", null, null, null, - "\u017e,%", null, null, null, @@ -4135,7 +3975,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0111,%", null, null, null, @@ -4144,24 +3983,53 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u00fc", + "\u00f6", + "\u00e4", + "\u00e8", + "\u00e9", + "\u00e0" + }; + + private static final String[] TEXTS_el = { + "el", + "\u0391\u0392\u0393" + }; + + private static final String[] TEXTS_bg = { + "bg", + "\u0410\u0411\u0412", null, null, null, null, null, null, + "!text/double_9qm_lqm" + }; + + private static final String[] TEXTS_ro = { + "ro", null, + "\u0103,\u00e2", null, null, null, + "\u00ee", null, + "!text/double_9qm_rqm", + "!text/single_9qm_rqm", null, + "\u0219", null, + "\u00e3,\u00e0,\u00e1,\u00e4,\u00e6,\u00e5,\u0101", null, null, null, + "\u00ef,\u00ec,\u00ed,\u012f,\u012b", null, null, + "\u00df,\u015b,\u0161", null, null, null, @@ -4197,33 +4065,21 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "Idi", - "\u0160alji", - "Sled", - "Gotov", - "Tra\u017ei", - "Preth", - "Pauza", - "\u010cekaj" + "\u021b" }; - private static final String[] TEXTS_sr_ZZ = { - "sr_ZZ", - null, - null, + private static final String[] TEXTS_hi = { + "hi", + "\u0915\u0916\u0917", null, - "\u00e8", null, - "\u00ec", null, null, - "\u010d,\u0107,%", null, - "\u0161,%", + "\u20b9", null, null, null, - "\u017e,%", null, null, null, @@ -4234,26 +4090,66 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0967", + "\u0968", + "\u0969", + "\u096a", + "\u096b", + "\u096c", + "\u096d", + "\u096e", + "\u096f", + "\u0966", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "0", null, null, null, null, + "?\u0967\u0968\u0969", + "!autoColumnOrder!8,.,\\,,?,!,\u0965,#,),(,',/,@,:,;,-,\",+", null, null, null, + "\u0964", null, + "!autoColumnOrder!8,\\,,.,?,!,\u0965,#,),(,/,',@,:,;,-,\",+", null, null, + "\u0964" + }; + + private static final String[] TEXTS_ca = { + "ca", null, + "\u00e0", + "\u00f2,\u00f3", + "\u00fa,\u00fc", + "\u00e8,\u00e9", + "\u00ed,\u00ef", null, null, null, + "\u00e7", null, + "\u00f6,\u00f4,\u00f5,\u00f8,\u0153,\u014d,\u00ba", + "\u00e1,\u00e4,\u00e2,\u00e3,\u00e5,\u0105,\u00e6,\u0101,\u00aa", + "\u00f9,\u00fb,\u016b", null, + "\u00eb,\u00ea,\u0119,\u0117,\u0113", + "\u00ec,\u00ee,\u012f,\u012b", null, + "\u0107,\u010d", null, null, - "\u0111,%", null, null, null, @@ -4293,6 +4189,7 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "l\u00b7l", null, null, null, @@ -4312,25 +4209,11 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "!autoColumnOrder!9,\\\\,?,!,\u00b7,#,),(,/,;,',@,:,-,\\\",+,\\%,&", null, null, null, - "Idi", - "\u0160alji", - "Sled", - "Gotov", - "Tra\u017ei", - "Preth", - "Pauza", - "\u010cekaj" - }; - - private static final String[] TEXTS_sv = { - "sv", null, - "\u00e4,\u00e5", - "\u00f6", - "\u00e9", null, null, null, @@ -4338,11 +4221,8 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00e6,\u00e1,\u00e0,\u00e2,\u0105,\u00e3", - "\u00f8,\u0153,\u00f3,\u00f2,\u00f4,\u00f5,\u014d", null, null, - "\u00e8,\u00ea,\u00eb,\u0119", null, null, null, @@ -4350,6 +4230,7 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u00e7", null, null, null, @@ -4368,8 +4249,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "!text/single_raqm_laqm", - "!text/double_raqm_laqm", null, null, null, @@ -4380,30 +4259,48 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "!autoColumnOrder!8,\\\\,',\u00b7,#,),(,/,;,@,:,-,\\\",+,\\%,&" + }; + + private static final String[] TEXTS_mn = { + "mn", + "\u0410\u0411\u0412", null, null, null, null, null, + "\u20ae" + }; + + private static final String[] TEXTS_si = { + "si", + "\u0d85,\u0d86", null, null, null, - "\u00f8,\u0153", - "\u00e5", - "\u00f6", - "\u00e4", null, null, + "\u0dbb\u0dd4" + }; + + private static final String[] TEXTS_sr___Latn = { + "sr__#Latn", null, null, null, null, + "\u00e8", + "\u00ec", null, null, null, + "\u010d,\u0107,%", + "\u0161,%", null, null, null, + "\u017e,%", null, null, null, @@ -4412,28 +4309,15 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00e6" - }; - - private static final String[] TEXTS_sw = { - "sw", null, - "\u00e0,\u00e1,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101", - "\u00f4,\u00f6,\u00f2,\u00f3,\u0153,\u00f8,\u014d,\u00f5", - "\u00e8,\u00e9,\u00ea,\u00eb,\u0113", - "\u00fb,\u00fc,\u00f9,\u00fa,\u016b", - "\u00ee,\u00ef,\u00ed,\u012b,\u00ec", null, null, - "\u00e7", null, - "\u00df", null, null, null, null, null, - "\u00f1", null, null, null, @@ -4445,6 +4329,7 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0111,%", null, null, null, @@ -4463,105 +4348,65 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "g\\'" - }; - - private static final String[] TEXTS_ta_IN = { - "ta_IN", - "\u0ba4\u0bae\u0bbf\u0bb4\u0bcd", null, null, null, null, null, null, - "\u0bf9" - }; - - private static final String[] TEXTS_ta_LK = { - "ta_LK", - "\u0ba4\u0bae\u0bbf\u0bb4\u0bcd", null, null, null, null, null, null, - "\u0dbb\u0dd4" - }; - - private static final String[] TEXTS_ta_SG = { - "ta_SG", - "\u0ba4\u0bae\u0bbf\u0bb4\u0bcd" - }; - - private static final String[] TEXTS_te = { - "te", - "\u0c05\u0c06\u0c07", null, null, null, null, null, null, - "\u20b9" - }; - - private static final String[] TEXTS_th = { - "th", - "\u0e01\u0e02\u0e04", null, null, null, null, null, null, - "\u0e3f" + "Idi", + "\u0160alji", + "Sled", + "Gotov", + "Tra\u017ei", + "Preth", + "Pauza", + "\u010cekaj" }; - private static final String[] TEXTS_tl = { - "tl", + private static final String[] TEXTS_ko = { + "ko", + "\uac00\ub098\ub2e4", + null, null, - "\u00e1,\u00e0,\u00e4,\u00e2,\u00e3,\u00e5,\u0105,\u00e6,\u0101,\u00aa", - "\u00f3,\u00f2,\u00f6,\u00f4,\u00f5,\u00f8,\u0153,\u014d,\u00ba", - "\u00e9,\u00e8,\u00eb,\u00ea,\u0119,\u0117,\u0113", - "\u00fa,\u00fc,\u00f9,\u00fb,\u016b", - "\u00ed,\u00ef,\u00ec,\u00ee,\u012f,\u012b", null, null, - "\u00e7,\u0107,\u010d", null, + "\u20a9", null, null, null, null, null, null, - "\u00f1,\u0144" - }; - - private static final String[] TEXTS_tr = { - "tr", null, null, - "\u00f6", null, - "\u00fc", - "\u0131", null, null, - "\u00e7", null, - "\u015f", null, - "\u00f4,\u0153,\u00f2,\u00f3,\u00f5,\u00f8,\u014d", - "\u00fb,\u00f9,\u00fa,\u016b", null, null, null, - "\u00ee,\u00ef,\u00ec,\u00ed,\u012f,\u012b", - "\u0107,\u010d", - "\u00df,\u015b,\u0161", null, null, null, @@ -4588,28 +4433,46 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u011f" + null, + null, + null, + "\u203b" }; - private static final String[] TEXTS_uk = { - "uk", - "\u0410\u0411\u0412", + private static final String[] TEXTS_eu = { + "eu", null, + "\u00e1,\u00e0,\u00e4,\u00e2,\u00e3,\u00e5,\u0105,\u00e6,\u0101,\u00aa", + "\u00f3,\u00f2,\u00f6,\u00f4,\u00f5,\u00f8,\u0153,\u014d,\u00ba", + "\u00fa,\u00fc,\u00f9,\u00fb,\u016b", + "\u00e9,\u00e8,\u00eb,\u00ea,\u0119,\u0117,\u0113", + "\u00ed,\u00ef,\u00ec,\u00ee,\u012f,\u012b", null, null, null, + "\u00e7,\u0107,\u010d", + null, null, - "!text/double_9qm_lqm", - "\u20b4", null, - "!text/single_9qm_lqm", null, null, null, null, + "\u00f1,\u0144" + }; + + private static final String[] TEXTS_gl = { + "gl", + null, + "\u00e1,\u00e0,\u00e4,\u00e2,\u00e3,\u00e5,\u0105,\u00e6,\u0101,\u00aa", + "\u00f3,\u00f2,\u00f6,\u00f4,\u00f5,\u00f8,\u0153,\u014d,\u00ba", + "\u00fa,\u00fc,\u00f9,\u00fb,\u016b", + "\u00e9,\u00e8,\u00eb,\u00ea,\u0119,\u0117,\u0113", + "\u00ed,\u00ef,\u00ec,\u00ee,\u012f,\u012b", null, null, null, + "\u00e7,\u0107,\u010d", null, null, null, @@ -4617,11 +4480,20 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u00f1,\u0144" + }; + + private static final String[] TEXTS_he = { + "he", + "\u05d0\u05d1\u05d2", null, null, null, null, null, + "\u20aa", + "!text/double_rqm_9qm", + "!text/single_rqm_9qm", null, null, null, @@ -4647,10 +4519,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0449", - "\u0456", - "\u0454", - "\u0438", null, null, null, @@ -4669,6 +4537,7 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u2605", null, null, null, @@ -4682,6 +4551,20 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "(|)", + ")|(", + "[|]", + "]|[", + "{|}", + "}|{", + "<|>", + ">|<", + "\u2264|\u2265", + "\u2265|\u2264", + "\u00ab|\u00bb", + "\u00bb|\u00ab", + "\u2039|\u203a", + "\u203a|\u2039", null, null, null, @@ -4713,8 +4596,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0491", - "\u0457", null, null, null, @@ -4735,28 +4616,25 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u044a,\u044b" + "\u00b1,\ufb29" }; - private static final String[] TEXTS_uz = { - "uz", + private static final String[] TEXTS_vi = { + "vi", null, - "\u00e2,\u00e4,\u00e1", - "\u00f6,\u00f4,\u0153,\u00f2,\u00f3,\u00f5,\u00f8,\u014d", - "\u0259,\u00e9", - "\u00fc,\u00fb,\u00f9,\u00fa,\u016b", - "\u0131,\u00ee,\u00ef,\u00ec,\u00ed,\u012f,\u012b", + "\u00e0,\u00e1,\u1ea3,\u00e3,\u1ea1,\u0103,\u1eb1,\u1eaf,\u1eb3,\u1eb5,\u1eb7,\u00e2,\u1ea7,\u1ea5,\u1ea9,\u1eab,\u1ead", + "\u00f2,\u00f3,\u1ecf,\u00f5,\u1ecd,\u00f4,\u1ed3,\u1ed1,\u1ed5,\u1ed7,\u1ed9,\u01a1,\u1edd,\u1edb,\u1edf,\u1ee1,\u1ee3", + "\u00f9,\u00fa,\u1ee7,\u0169,\u1ee5,\u01b0,\u1eeb,\u1ee9,\u1eed,\u1eef,\u1ef1", + "\u00e8,\u00e9,\u1ebb,\u1ebd,\u1eb9,\u00ea,\u1ec1,\u1ebf,\u1ec3,\u1ec5,\u1ec7", + "\u00ec,\u00ed,\u1ec9,\u0129,\u1ecb", + "\u20ab", null, null, - "\u00e7,\u0107,\u010d", null, - "\u015f,\u00df,\u015b,\u0161", null, null, null, - "\u017e", null, - "\u0148,\u00f1", null, null, null, @@ -4780,28 +4658,24 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00fd", null, null, null, null, null, - "\u011f" + "\u1ef3,\u00fd,\u1ef7,\u1ef9,\u1ef5", + "\u0111" }; - private static final String[] TEXTS_vi = { - "vi", + private static final String[] TEXTS_fa = { + "fa", + "\u0627\u200c\u0628\u200c\u067e", null, - "\u00e0,\u00e1,\u1ea3,\u00e3,\u1ea1,\u0103,\u1eb1,\u1eaf,\u1eb3,\u1eb5,\u1eb7,\u00e2,\u1ea7,\u1ea5,\u1ea9,\u1eab,\u1ead", - "\u00f2,\u00f3,\u1ecf,\u00f5,\u1ecd,\u00f4,\u1ed3,\u1ed1,\u1ed5,\u1ed7,\u1ed9,\u01a1,\u1edd,\u1edb,\u1edf,\u1ee1,\u1ee3", - "\u00e8,\u00e9,\u1ebb,\u1ebd,\u1eb9,\u00ea,\u1ec1,\u1ebf,\u1ec3,\u1ec5,\u1ec7", - "\u00f9,\u00fa,\u1ee7,\u0169,\u1ee5,\u01b0,\u1eeb,\u1ee9,\u1eed,\u1eef,\u1ef1", - "\u00ec,\u00ed,\u1ec9,\u0129,\u1ecb", null, - "\u20ab", null, null, null, + "\ufdfc", null, null, null, @@ -4815,14 +4689,40 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u06f1", + "\u06f2", + "\u06f3", + "\u06f4", + "\u06f5", + "\u06f6", + "\u06f7", + "\u06f8", + "\u06f9", + "\u06f0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "0,\u066b,\u066c", null, null, null, null, + "\u06f3\u06f2\u06f1\u061f", + "!text/morekeys_arabic_diacritics", null, null, + "\u060c", null, null, + "!text/morekeys_arabic_diacritics", + "\u2605,\u066d", + "\u060c", null, null, null, @@ -4831,56 +4731,58 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u1ef3,\u00fd,\u1ef7,\u1ef9,\u1ef5", null, null, null, - "\u0111" - }; - - private static final String[] TEXTS_zu = { - "zu", null, - "\u00e0,\u00e1,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101", - "\u00f3,\u00f4,\u00f6,\u00f2,\u0153,\u00f8,\u014d,\u00f5", - "\u00e9,\u00e8,\u00ea,\u00eb,\u0113", - "\u00fa,\u00fb,\u00fc,\u00f9,\u016b", - "\u00ed,\u00ee,\u00ef,\u012b,\u00ec", + "(|)", + ")|(", + "[|]", + "]|[", + "{|}", + "}|{", + "<|>", + ">|<", + "\u2264|\u2265", + "\u2265|\u2264", + "\u00ab|\u00bb", + "\u00bb|\u00ab", + "\u2039|\u203a", + "\u203a|\u2039", null, + "\u061f", null, - "\u00e7", null, - "\u00df", + "!fixedColumnOrder!4,:,!,\u061f,\u061b,-,!text/keyspec_left_double_angle_quote,!text/keyspec_right_double_angle_quote", + "\u064b", + null, null, null, null, null, null, - "\u00f1" - }; - - private static final String[] TEXTS_zz = { - "zz", null, - "\u00e0,\u00e1,\u00e2,\u00e3,\u00e4,\u00e5,\u00e6,\u0101,\u0103,\u0105,\u00aa", - "\u00f2,\u00f3,\u00f4,\u00f5,\u00f6,\u00f8,\u014d,\u014f,\u0151,\u0153,\u00ba", - "\u00e8,\u00e9,\u00ea,\u00eb,\u0113,\u0115,\u0117,\u0119,\u011b", - "\u00f9,\u00fa,\u00fb,\u00fc,\u0169,\u016b,\u016d,\u016f,\u0171,\u0173", - "\u00ec,\u00ed,\u00ee,\u00ef,\u0129,\u012b,\u012d,\u012f,\u0131,\u0133", null, null, - "\u00e7,\u0107,\u0109,\u010b,\u010d", null, - "\u00df,\u015b,\u015d,\u015f,\u0161,\u017f", null, null, null, - "\u017a,\u017c,\u017e", null, - "\u00f1,\u0144,\u0146,\u0148,\u0149,\u014b", null, null, null, + ";", + "\\%,\u2030", + "\u266a", + "!fixedColumnOrder!4,\ufd3e|\ufd3f,!text/keyspecs_left_parenthesis_more_keys", + "!fixedColumnOrder!4,\ufd3f|\ufd3e,!text/keyspecs_right_parenthesis_more_keys", + "!fixedColumnOrder!8, \u0654\u25cc|\u0654, \u0652\u25cc|\u0652, \u064d\u25cc|\u064d, \u064c\u25cc|\u064c, \u0651\u25cc|\u0651, \u064b\u25cc|\u064b,!text/keyspec_symbols_question,!, \u0656\u25cc|\u0656, \u0670\u25cc|\u0670, \u0653\u25cc|\u0653, \u0650\u25cc|\u0650, \u064f\u25cc|\u064f,\u0640, \u0655\u25cc|\u0655, \u064e\u25cc|\u064e", + "\u061f", + "\u061b", + "\u066a", + "\u064b", + "\u061f", null, null, null, @@ -4901,13 +4803,10 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00fd,\u0177,\u00ff,\u0133", null, null, null, - "\u010f,\u0111,\u00f0", null, - "\u011d,\u011f,\u0121,\u0123", null, null, null, @@ -4917,15 +4816,43 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "!fixedColumnOrder!3,!text/keyspec_left_single_angle_quote,!text/keyspec_less_than_equal,!text/keyspec_less_than", + "!fixedColumnOrder!3,!text/keyspec_right_single_angle_quote,!text/keyspec_greater_than_equal,!text/keyspec_greater_than" + }; + + private static final String[] TEXTS_lo = { + "lo", + "\u0e81\u0e82\u0e84", null, null, - "\u013a,\u013c,\u013e,\u0140,\u0142", - "\u00fe,\u0163,\u0165,\u0167", null, null, null, + "\u20ad" + }; + + private static final String[] TEXTS_cs = { + "cs", null, + "\u00e1", + "\u00f3", + "\u00fa,\u016f", + "\u00e9,\u011b", + "\u00ed", null, + "!text/double_9qm_lqm", + "!text/single_9qm_lqm", + "\u010d", + "\u0161", + "\u00f6,\u00f4,\u00f2,\u00f5,\u0153,\u00f8,\u014d", + "\u00e0,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101", + "\u00fb,\u00fc,\u00f9,\u016b", + "\u017e", + "\u00e8,\u00ea,\u00eb,\u0119,\u0117,\u0113", + "\u00ee,\u00ef,\u00ec,\u012f,\u012b", + "\u0148", + "\u00e7,\u0107", + "\u00df,\u015b", null, null, null, @@ -4946,9 +4873,14 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "!text/single_raqm_laqm", + "!text/double_raqm_laqm", + "\u00fd", + "\u010f", null, null, null, + "\u017a,\u017c", null, null, null, @@ -4956,12 +4888,13 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0165", null, null, null, - "\u0155,\u0157,\u0159", null, null, + "\u00f1,\u0144", null, null, null, @@ -4976,15 +4909,12 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0125", - "\u0135", null, null, null, null, null, null, - "\u0137,\u0138", null, null, null, @@ -4997,6 +4927,7 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u00ff", null, null, null, @@ -5004,38 +4935,45 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0175" + "\u0159" }; - private static final String[] TEXTS_it = { - "it", - null, - "\u00e0", - "\u00f2", - "\u00e8,\u00e9", - "\u00f9", - "\u00ec", - null, - null, + private static final String[] TEXTS_te = { + "te", + "\u0c05\u0c06\u0c07", null, null, null, - "\u00e1,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101,\u00aa", - "\u00f3,\u00f4,\u00f6,\u00f5,\u0153,\u00f8,\u014d,\u00ba", - "\u00fa,\u00fb,\u00fc,\u016b", null, - "\u00ea,\u00eb,\u0119,\u0117,\u0113,\u0259", null, - "\u00ed,\u00ee,\u00ef,\u012f,\u012b", + "\u20b9" + }; + + private static final String[] TEXTS_ta_SG = { + "ta_SG", + "\u0ba4\u0bae\u0bbf\u0bb4\u0bcd" + }; + + private static final String[] TEXTS_uz = { + "uz", null, + "\u00e2,\u00e4,\u00e1", + "\u00f6,\u00f4,\u0153,\u00f2,\u00f3,\u00f5,\u00f8,\u014d", + "\u00fc,\u00fb,\u00f9,\u00fa,\u016b", + "\u0259,\u00e9", + "\u0131,\u00ee,\u00ef,\u00ec,\u00ed,\u012f,\u012b", null, null, null, + "\u00e7,\u0107,\u010d", + "\u015f,\u00df,\u015b,\u0161", null, null, null, + "\u017e", null, null, + "\u0148,\u00f1", null, null, null, @@ -5060,14 +4998,22 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u00fd", null, null, null, + "\u011f" + }; + + private static final String[] TEXTS_bn_BD = { + "bn_BD", + "\u0995\u0996\u0997", null, null, null, null, null, + "\u09f3", null, null, null, @@ -5081,123 +5027,50 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - "\u00e8", - "\u00e9", - "\u00e0", - "\u00fc", - "\u00f6", - "\u00e4" - }; - - private static final String[] TEXTS_ja = { - "ja", - "\u2190", - null, - null, - null, - null, - null, - null, - "\u00a5" - }; - - private static final String[] TEXTS_ko = { - "ko", - "\uac00\ub098\ub2e4", - null, - null, - null, - null, - null, - null, - "\u20a9", - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - "\u203b" + "\u09e7", + "\u09e8", + "\u09e9", + "\u09ea", + "\u09eb", + "\u09ec", + "\u09ed", + "\u09ee", + "\u09ef", + "\u09e6", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "0" }; - private static final String[] TEXTS_ru = { - "ru", - "\u0410\u0411\u0412", - null, - null, + private static final String[] TEXTS_lv = { + "lv", null, + "\u0101", null, + "\u016b", + "\u0113", + "\u012b", null, "!text/double_9qm_lqm", - null, - null, "!text/single_9qm_lqm", + "\u010d", + "\u0161", + "\u014d,\u00f2,\u00f3,\u00f4,\u00f5,\u00f6,\u0153,\u0151,\u00f8", + "\u00e0,\u00e1,\u00e2,\u00e3,\u00e4,\u00e5,\u00e6,\u0105", + "\u0173,\u00f9,\u00fa,\u00fb,\u00fc,\u016f,\u0171", + "\u017e", + "\u0117,\u00e8,\u00e9,\u00ea,\u00eb,\u0119,\u011b", + "\u012f,\u00ec,\u00ed,\u00ee,\u00ef,\u0131", + "\u0146", + "\u00e7,\u0107", + "\u00df,\u015b,\u015f", null, null, null, @@ -5224,6 +5097,8 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0123", + "\u017c,\u017a", null, null, null, @@ -5236,68 +5111,8 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - null, - null, - "\u0451", - null, - null, - null, - "\u0449", - "\u044b", - "\u044d", - "\u0438", - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - "\u044a", - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, + "\u013c", + "\u00f1,\u0144", null, null, null, @@ -5332,30 +5147,14 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\",\u00bb,\u00ab", - "',\u203a,\u2039" - }; - - private static final String[] TEXTS_af = { - "af", null, - "\u00e1", - "\u00f3,\u00f4", - "\u00e9,\u00e8,\u00ea,\u00eb", - "\u00fa,\u00fb", - "\u00ed,\u00ec,\u00ef,\u00ee", null, null, null, null, null, - "\u00e2,\u00e4,\u00e0,\u00e6,\u00e3,\u00e5,\u0101", - "\u00f6,\u00f2,\u00f5,\u0153,\u00f8,\u014d", - "\u00fc,\u00f9,\u016b", null, - "\u0119,\u0117,\u0113", null, - "\u012f,\u012b,\u0133", null, null, null, @@ -5378,202 +5177,10 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00fd" - }; - - private static final String[] TEXTS_bod = { - "bod", - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - "\u0f21", - "\u0f22", - "\u0f23", - "\u0f24", - "\u0f25", - "\u0f26", - "\u0f27", - "\u0f28", - "\u0f29", - "\u0f20", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "0" - }; - - private static final String[] TEXTS_hy = { - "hy", - "\u0531\u0532\u0533", - null, - null, - null, - null, - null, - null, - "\u058f", - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - "!text/morekeys_punctuation", - null, - null, - null, - ",", - null, - "\u0589", - null, - ",", - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - "\u0589", - "\u055e,\u00bf", - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - "!autoColumnOrder!8,\\,,\u055e,\u055c,.,\u055a,\u0559,?,!,\u055d,\u055b,\u058a,\u00bb,\u00ab,\u055f,;,:", - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - "\u055c,\u00a1" + "\u011f", + "\u0142,\u013a,\u013e", + "\u0157,\u0159,\u0155", + "\u0137" }; private static final String[] TEXTS_DEFAULT = { @@ -5584,18 +5191,18 @@ public static String[] getTextsTable(final Locale locale) { EMPTY, EMPTY, EMPTY, - "!text/double_lqm_rqm", "$", - EMPTY, + "!text/double_lqm_rqm", "!text/single_lqm_rqm", EMPTY, - "\u00e0,\u00e1,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101", + EMPTY, "\u00f3,\u00f4,\u00f6,\u00f2,\u0153,\u00f8,\u014d,\u00f5", + "\u00e0,\u00e1,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101", "\u00fa,\u00fb,\u00fc,\u00f9,\u016b", EMPTY, "\u00e9,\u00e8,\u00ea,\u00eb,\u0113", - EMPTY, "\u00ed,\u00ee,\u00ef,\u012b,\u00ec", + EMPTY, "\u00e7", "\u00df", "1", @@ -5618,20 +5225,21 @@ public static String[] getTextsTable(final Locale locale) { EMPTY, EMPTY, EMPTY, - EMPTY, "!text/single_laqm_raqm", "!text/double_laqm_raqm", - "?123", EMPTY, + EMPTY, + "?123", "!text/morekeys_tablet_punctuation", EMPTY, EMPTY, - "!text/morekeys_punctuation", ",", - EMPTY, ".", + EMPTY, + "!text/morekeys_punctuation", "\u2020,\u2021,\u2605", ",", + ".", EMPTY, EMPTY, EMPTY, @@ -5643,9 +5251,6 @@ public static String[] getTextsTable(final Locale locale) { "\u00e5", "\u00f6", "\u00e4", - ".", - "\u00bf", - EMPTY, "(", ")", "[", @@ -5660,11 +5265,30 @@ public static String[] getTextsTable(final Locale locale) { "\u00bb", "\u2039", "\u203a", - EMPTY, - EMPTY, "!autoColumnOrder!8,\\,,?,!,#,!text/keyspec_right_parenthesis,!text/keyspec_left_parenthesis,/,;,',@,:,-,\",+,\\%,&", + "\u00bf", + EMPTY, "\u00e6", EMPTY, + EMPTY, + "!string/label_go_key", + "!string/label_send_key", + "!string/label_next_key", + "!string/label_done_key", + "!string/label_search_key", + "!string/label_previous_key", + "!string/label_pause_key", + "!string/label_wait_key", + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + "\u00f1", + EMPTY, + EMPTY, "\u2030", "\u266a,\u2665,\u2660,\u2666,\u2663", "!autoColumnOrder!3,!text/keyspecs_left_parenthesis_more_keys", @@ -5675,25 +5299,11 @@ public static String[] getTextsTable(final Locale locale) { "%", EMPTY, EMPTY, - "\u00f1", - EMPTY, - EMPTY, - EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, - "!string/label_go_key", - "!string/label_send_key", - "!string/label_next_key", - "!string/label_done_key", - "!string/label_search_key", - "!string/label_previous_key", - "!string/label_pause_key", - "!string/label_wait_key", - "!autoColumnOrder!8,\\,,?,!,#,!text/keyspec_right_parenthesis,!text/keyspec_left_parenthesis,/,;,',@,:,-,\",+,\\%,&", - EMPTY, EMPTY, EMPTY, EMPTY, @@ -5705,26 +5315,23 @@ public static String[] getTextsTable(final Locale locale) { EMPTY, EMPTY, EMPTY, + "!autoColumnOrder!8,\\,,?,!,#,!text/keyspec_right_parenthesis,!text/keyspec_left_parenthesis,/,;,',@,:,-,\",+,\\%,&", + "\u00b1", + "\u00a1,\u203d", EMPTY, EMPTY, EMPTY, + "\"", + "'", EMPTY, EMPTY, "q", "w", "y", "x", - "\u00b1", - EMPTY, EMPTY, EMPTY, "\u00a2,\u00a3,\u20ac,\u00a5,\u20b1", - EMPTY, - EMPTY, - EMPTY, - "\"", - "'", - "\u00a1,\u203d", "!fixedColumnOrder!3,!text/keyspec_left_single_angle_quote,!text/keyspec_less_than_equal,!text/keyspec_left_double_angle_quote", "!fixedColumnOrder!3,!text/keyspec_right_single_angle_quote,!text/keyspec_greater_than_equal,!text/keyspec_right_double_angle_quote", EMPTY, @@ -5790,12 +5397,12 @@ public static String[] getTextsTable(final Locale locale) { "\\\\", "|", "=", - "[", - "]", - "<", - ">", - "{", - "}", + "!text/keyspec_left_square_bracket", + "!text/keyspec_right_square_bracket", + "!text/keyspec_less_than", + "!text/keyspec_greater_than", + "!text/keyspec_left_curly_bracket", + "!text/keyspec_right_curly_bracket", "@", "#", "!text/keyspec_currency,$", @@ -5873,16 +5480,385 @@ public static String[] getTextsTable(final Locale locale) { "0" }; - private static final String[] TEXTS_fa = { - "fa", - "\u0627\u200c\u0628\u200c\u067e", + private static final String[] TEXTS_af = { + "af", + null, + "\u00e1", + "\u00f3,\u00f4", + "\u00fa,\u00fb", + "\u00e9,\u00e8,\u00ea,\u00eb", + "\u00ed,\u00ec,\u00ef,\u00ee", + null, + null, + null, + null, + null, + "\u00f6,\u00f2,\u00f5,\u0153,\u00f8,\u014d", + "\u00e2,\u00e4,\u00e0,\u00e6,\u00e3,\u00e5,\u0101", + "\u00fc,\u00f9,\u016b", + null, + "\u0119,\u0117,\u0113", + "\u012f,\u012b,\u0133", + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + "\u00fd" + }; + + private static final String[] TEXTS_sw = { + "sw", + null, + "\u00e0,\u00e1,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101", + "\u00f4,\u00f6,\u00f2,\u00f3,\u0153,\u00f8,\u014d,\u00f5", + "\u00fb,\u00fc,\u00f9,\u00fa,\u016b", + "\u00e8,\u00e9,\u00ea,\u00eb,\u0113", + "\u00ee,\u00ef,\u00ed,\u012b,\u00ec", + null, + null, + null, + "\u00e7", + "\u00df", + null, + null, + null, + null, + null, + null, + "\u00f1", + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + "g\\'" + }; + + private static final String[] TEXTS_da = { + "da", + null, + "\u00e5,\u00e6", + "\u00f8", + null, + null, + null, + null, + "!text/double_9qm_lqm", + "!text/single_9qm_lqm", + null, + null, + "\u00f6,\u00f3,\u00f4,\u00f2,\u00f5,\u0153,\u014d", + "\u00e1,\u00e4,\u00e0,\u00e2,\u00e3,\u0101", + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + "!text/single_raqm_laqm", + "!text/double_raqm_laqm", + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + "\u00e4", + "\u00e5", + "\u00e6", + "\u00f8", + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + "\u00f6" + }; + + private static final String[] TEXTS_th = { + "th", + "\u0e01\u0e02\u0e04", + null, + null, + null, + null, + null, + "\u0e3f" + }; + + private static final String[] TEXTS_sv = { + "sv", + null, + "\u00e4,\u00e5", + "\u00f6", + null, + "\u00e9", + null, + null, + null, + null, + null, + null, + "\u00f8,\u0153,\u00f3,\u00f2,\u00f4,\u00f5,\u014d", + "\u00e6,\u00e1,\u00e0,\u00e2,\u0105,\u00e3", + null, + null, + "\u00e8,\u00ea,\u00eb,\u0119", + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + "!text/single_raqm_laqm", + "!text/double_raqm_laqm", + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + "\u00f8,\u0153", + "\u00e5", + "\u00f6", + "\u00e4", + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + "\u00e6" + }; + + private static final String[] TEXTS_es = { + "es", + null, + "\u00e1", + "\u00f3", + "\u00fa,\u00fc", + "\u00e9", + "\u00ed", + null, + null, + null, + null, + null, + "\u00f2,\u00f6,\u00f4,\u00f5,\u00f8,\u0153,\u014d,\u00ba", + "\u00e0,\u00e4,\u00e2,\u00e3,\u00e5,\u0105,\u00e6,\u0101,\u00aa", + "\u00f9,\u00fb,\u016b", + null, + "\u00e8,\u00eb,\u00ea,\u0119,\u0117,\u0113", + "\u00ef,\u00ec,\u00ee,\u012f,\u012b", + "\u00f1", + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + "\u0144", + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + "!autoColumnOrder!9,\\\\,?,!,#,),(,/,;,\u00a1,',@,:,-,\\\",+,\\%,&,\u00bf" + }; + + private static final String[] TEXTS_ar = { + "ar", + "\u0623\u200c\u0628\u200c\u062c", null, null, null, null, null, null, - "\ufdfc", null, null, null, @@ -5895,16 +5871,17 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u06f1", - "\u06f2", - "\u06f3", - "\u06f4", - "\u06f5", - "\u06f6", - "\u06f7", - "\u06f8", - "\u06f9", - "\u06f0", + null, + "\u0661", + "\u0662", + "\u0663", + "\u0664", + "\u0665", + "\u0666", + "\u0667", + "\u0668", + "\u0669", + "\u0660", "1", "2", "3", @@ -5918,15 +5895,15 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u06f3\u06f2\u06f1\u061f", null, + "\u0663\u0662\u0661\u061f", "!text/morekeys_arabic_diacritics", null, null, - "!text/morekeys_arabic_diacritics", "\u060c", null, null, + "!text/morekeys_arabic_diacritics", "\u2605,\u066d", "\u060c", null, @@ -5941,8 +5918,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u061f", - "!fixedColumnOrder!4,:,!,\u061f,\u061b,-,!text/keyspec_left_double_angle_quote,!text/keyspec_right_double_angle_quote", "(|)", ")|(", "[|]", @@ -5957,7 +5932,26 @@ public static String[] getTextsTable(final Locale locale) { "\u00bb|\u00ab", "\u2039|\u203a", "\u203a|\u2039", - "\u064b", + null, + "?,\u00bf", + null, + null, + "!fixedColumnOrder!4,:,!,\u061f,\u061b,-,\\\",\\'", + "\u0651", + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, null, null, null, @@ -5970,11 +5964,21 @@ public static String[] getTextsTable(final Locale locale) { "\u061f", "\u061b", "\u066a", - "\u064b", - "\u061f", + "\u0651", + "\u061f" + }; + + private static final String[] TEXTS_nb = { + "nb", null, + "\u00e5,\u00e6,\u00e4,\u00e0,\u00e1,\u00e2,\u00e3,\u0101", + "\u00f8,\u00f6,\u00f4,\u00f2,\u00f3,\u00f5,\u0153,\u014d", + "\u00fc,\u00fb,\u00f9,\u00fa,\u016b", + "\u00e9,\u00e8,\u00ea,\u00eb,\u0119,\u0117,\u0113", null, null, + "!text/double_9qm_rqm", + "!text/single_9qm_rqm", null, null, null, @@ -6022,89 +6026,127 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "!fixedColumnOrder!3,!text/keyspec_left_single_angle_quote,!text/keyspec_less_than_equal,!text/keyspec_less_than", - "!fixedColumnOrder!3,!text/keyspec_right_single_angle_quote,!text/keyspec_greater_than_equal,!text/keyspec_greater_than" + null, + null, + null, + null, + null, + null, + "\u00f6", + "\u00e5", + "\u00f8", + "\u00e6", + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + "\u00e4" + }; + + private static final String[] TEXTS_ta_LK = { + "ta_LK", + "\u0ba4\u0bae\u0bbf\u0bb4\u0bcd", + null, + null, + null, + null, + null, + "\u0dbb\u0dd4" }; private static final Object[] LOCALES_AND_TEXTS = { // "locale", TEXT_ARRAY, /* numberOfNonNullText/lengthOf_TEXT_ARRAY localeName */ - "ar", TEXTS_ar, - "az", TEXTS_az, - "be", TEXTS_be, - "bg", TEXTS_bg, - "bn_BD", TEXTS_bn_BD, + "hy", TEXTS_hy, + "tr", TEXTS_tr, + "mk", TEXTS_mk, + "sr_ZZ", TEXTS_sr_ZZ, + "sl", TEXTS_sl, + "new", TEXTS_new, + "hu", TEXTS_hu, + "mr", TEXTS_mr, "bn_IN", TEXTS_bn_IN, - "ca", TEXTS_ca, - "ckb", TEXTS_ckb, - "cs", TEXTS_cs, - "da", TEXTS_da, + "lt", TEXTS_lt, + "is", TEXTS_is, + "kk", TEXTS_kk, + "nl", TEXTS_nl, + "ta_IN", TEXTS_ta_IN, + "ja", TEXTS_ja, "de", TEXTS_de, - "el", TEXTS_el, - "en", TEXTS_en, - "eo", TEXTS_eo, - "es", TEXTS_es, - "et", TEXTS_et, - "eu", TEXTS_eu, + "ru", TEXTS_ru, + "pl", TEXTS_pl, + "uk", TEXTS_uk, + "ky", TEXTS_ky, "fi", TEXTS_fi, - "fr", TEXTS_fr, - "gl", TEXTS_gl, - "hi", TEXTS_hi, + "eo", TEXTS_eo, + "sk", TEXTS_sk, + "ml", TEXTS_ml, + "ckb", TEXTS_ckb, + "az", TEXTS_az, + "zz", TEXTS_zz, + "pt", TEXTS_pt, + "rm", TEXTS_rm, + "be", TEXTS_be, + "en", TEXTS_en, "hi_ZZ", TEXTS_hi_ZZ, - "hr", TEXTS_hr, - "hu", TEXTS_hu, - "is", TEXTS_is, - "iw", TEXTS_iw, "ka", TEXTS_ka, - "kk", TEXTS_kk, + "my", TEXTS_my, "km", TEXTS_km, + "it", TEXTS_it, + "sr", TEXTS_sr, + "hr", TEXTS_hr, + "tl", TEXTS_tl, + "zu", TEXTS_zu, + "et", TEXTS_et, + "iw", TEXTS_iw, "kn", TEXTS_kn, - "ky", TEXTS_ky, - "lo", TEXTS_lo, - "lt", TEXTS_lt, - "lv", TEXTS_lv, - "mk", TEXTS_mk, - "ml", TEXTS_ml, - "mn", TEXTS_mn, - "mr", TEXTS_mr, - "my", TEXTS_my, - "nb", TEXTS_nb, + "bod", TEXTS_bod, "ne", TEXTS_ne, - "new", TEXTS_new, - "nl", TEXTS_nl, - "pl", TEXTS_pl, - "pt", TEXTS_pt, - "rm", TEXTS_rm, + "fr", TEXTS_fr, + "el", TEXTS_el, + "bg", TEXTS_bg, "ro", TEXTS_ro, + "hi", TEXTS_hi, + "ca", TEXTS_ca, + "mn", TEXTS_mn, "si", TEXTS_si, - "sk", TEXTS_sk, - "sl", TEXTS_sl, - "sr", TEXTS_sr, "sr__#Latn", TEXTS_sr___Latn, - "sr_ZZ", TEXTS_sr_ZZ, - "sv", TEXTS_sv, - "sw", TEXTS_sw, - "ta_IN", TEXTS_ta_IN, - "ta_LK", TEXTS_ta_LK, - "ta_SG", TEXTS_ta_SG, + "ko", TEXTS_ko, + "eu", TEXTS_eu, + "gl", TEXTS_gl, + "he", TEXTS_he, + "vi", TEXTS_vi, + "fa", TEXTS_fa, + "lo", TEXTS_lo, + "cs", TEXTS_cs, "te", TEXTS_te, - "th", TEXTS_th, - "tl", TEXTS_tl, - "tr", TEXTS_tr, - "uk", TEXTS_uk, + "ta_SG", TEXTS_ta_SG, "uz", TEXTS_uz, - "vi", TEXTS_vi, - "zu", TEXTS_zu, - "zz", TEXTS_zz, - "it", TEXTS_it, - "ja", TEXTS_ja, - "ko", TEXTS_ko, - "ru", TEXTS_ru, - "af", TEXTS_af, - "bod", TEXTS_bod, - "hy", TEXTS_hy, + "bn_BD", TEXTS_bn_BD, + "lv", TEXTS_lv, "DEFAULT", TEXTS_DEFAULT, - "fa", TEXTS_fa + "af", TEXTS_af, + "sw", TEXTS_sw, + "da", TEXTS_da, + "th", TEXTS_th, + "sv", TEXTS_sv, + "es", TEXTS_es, + "ar", TEXTS_ar, + "nb", TEXTS_nb, + "ta_LK", TEXTS_ta_LK }; static { diff --git a/java/src/org/futo/inputmethod/latin/LatinIMELegacy.java b/java/src/org/futo/inputmethod/latin/LatinIMELegacy.java index 49bd237883..911f0a44f3 100644 --- a/java/src/org/futo/inputmethod/latin/LatinIMELegacy.java +++ b/java/src/org/futo/inputmethod/latin/LatinIMELegacy.java @@ -648,6 +648,13 @@ public void onSwipeLanguage(int direction) { Subtypes.INSTANCE.switchToNextLanguage(mInputMethodService, direction); } + @Override + public void onSwipeAction(int direction) { + mImeManager.getActiveIME( + mSettings.getCurrent() + ).onSwipeAction(direction); + } + @Override public void onMovingCursorLockEvent(boolean canMoveCursor) { if(canMoveCursor) { diff --git a/java/src/org/futo/inputmethod/latin/settings/Settings.java b/java/src/org/futo/inputmethod/latin/settings/Settings.java index 61ac200881..7ca3f89d2d 100644 --- a/java/src/org/futo/inputmethod/latin/settings/Settings.java +++ b/java/src/org/futo/inputmethod/latin/settings/Settings.java @@ -126,6 +126,7 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang public static final int SPACEBAR_MODE_SWIPE_CURSOR = 0; // Long-Press switches language, swipe moves cursor public static final int SPACEBAR_MODE_SWIPE_LANGUAGE = 1; // Swipe switches language, long-press+drag moves cursor public static final int SPACEBAR_MODE_SWIPE_CURSOR_ONLY = 2; // Swipe and long-press+drag moves cursor + public static final int SPACEBAR_MODE_SWIPE_ACTIONS = 3; // Swipe actions mode (Fleksy-style) public static final String PREF_BACKSPACE_MODE = "pref_backspace_mode"; public static final int BACKSPACE_MODE_CHARACTERS = 0; // Long-press backspace and swipe backspace removes just characters diff --git a/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt b/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt index de8fea13c6..3745588d17 100644 --- a/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt +++ b/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt @@ -591,7 +591,8 @@ val LongPressMenu = UserSettingsMenu( searchTagList = listOf( R.string.morekey_settings_space_behavior_swipe_cursor, R.string.morekey_settings_space_behavior_swipe_lang, - R.string.morekey_settings_space_behavior_only_cursor + R.string.morekey_settings_space_behavior_only_cursor, + R.string.morekey_settings_space_behavior_swipe_actions ) ) { SettingRadio( @@ -599,12 +600,14 @@ val LongPressMenu = UserSettingsMenu( options = listOf( Settings.SPACEBAR_MODE_SWIPE_CURSOR, Settings.SPACEBAR_MODE_SWIPE_LANGUAGE, - Settings.SPACEBAR_MODE_SWIPE_CURSOR_ONLY + Settings.SPACEBAR_MODE_SWIPE_CURSOR_ONLY, + Settings.SPACEBAR_MODE_SWIPE_ACTIONS ), optionNames = listOf( stringResource(R.string.morekey_settings_space_behavior_swipe_cursor), stringResource(R.string.morekey_settings_space_behavior_swipe_lang), - stringResource(R.string.morekey_settings_space_behavior_only_cursor) + stringResource(R.string.morekey_settings_space_behavior_only_cursor), + stringResource(R.string.morekey_settings_space_behavior_swipe_actions) ), setting = useSharedPrefsInt( key = Settings.PREF_SPACEBAR_MODE, @@ -1000,4 +1003,4 @@ fun KeyboardAndTypingScreen(navController: NavHostController = rememberNavContro BottomSpacer() } -} \ No newline at end of file +} From cffc4562b14ef40f3a0117f7d854fe5b6536eef0 Mon Sep 17 00:00:00 2001 From: ndom91 Date: Sat, 21 Feb 2026 21:27:19 +0100 Subject: [PATCH 02/25] Fix right swipe crashes --- java/res/values/strings-uix.xml | 3 + .../inputmethod/engine/general/GeneralIME.kt | 55 +++++++++++--- .../latin/settings/SettingsValues.java | 3 +- .../latin/uix/settings/pages/Typing.kt | 75 +++++++++++++++---- 4 files changed, 109 insertions(+), 27 deletions(-) diff --git a/java/res/values/strings-uix.xml b/java/res/values/strings-uix.xml index 3c16f1258c..d99f24787e 100644 --- a/java/res/values/strings-uix.xml +++ b/java/res/values/strings-uix.xml @@ -441,6 +441,9 @@ Swipe Typing (alpha) Allow swiping from key to key to write words. + Swipe Actions Mode (alpha) + Fleksy-style directional swipes anywhere on the keyboard. Disables Swipe Typing. + Only one swipe mode can be active at a time. Emoji Suggestions Suggest emojis while you\'re typing Vibration diff --git a/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt b/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt index 597330a8ae..8cc2c30256 100644 --- a/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt +++ b/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt @@ -697,7 +697,7 @@ class GeneralIME(val helper: IMEHelper) : IMEInterface, WordLearner, SuggestionS swipeSuggestionWord = null onEvent( Event.createSoftwareKeypressEvent( - Event.NOT_A_CODE_POINT, + Constants.CODE_SPACE, Constants.CODE_SPACE, Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE, @@ -743,6 +743,16 @@ class GeneralIME(val helper: IMEHelper) : IMEInterface, WordLearner, SuggestionS KeyboardActionListener.SWIPE_ACTION_UP, KeyboardActionListener.SWIPE_ACTION_DOWN -> { + var movedCursorToLastWord = false + val beforeCursor = inputLogic.mConnection.getTextBeforeCursor(1, 0)?.toString() + if (!beforeCursor.isNullOrEmpty() + && beforeCursor.last() == ' ' + && inputLogic.mConnection.hasCursorPosition() + && !inputLogic.mConnection.hasSelection()) { + inputLogic.cursorLeft(1, false, false) + movedCursorToLastWord = true + } + inputLogic.restartSuggestionsOnWordTouchedByCursor( settings.current, null, @@ -751,6 +761,9 @@ class GeneralIME(val helper: IMEHelper) : IMEInterface, WordLearner, SuggestionS ) if (!ensureSuggestionsCompleted()) { + if (movedCursorToLastWord) { + inputLogic.cursorRight(1, false, false) + } return } @@ -765,36 +778,58 @@ class GeneralIME(val helper: IMEHelper) : IMEInterface, WordLearner, SuggestionS } if (candidates.size < 2) { + if (movedCursorToLastWord) { + inputLogic.cursorRight(1, false, false) + } return } - val typedWord = inputLogic.mWordComposer.typedWord ?: return - val currentIndex = candidates.indexOfFirst { it.mWord == typedWord } - if (currentIndex == -1) { - return + val typedWord = inputLogic.mWordComposer.typedWord + val currentWord = swipeSuggestionWord ?: typedWord + val typedWordIndex = if (typedWord != null) { + candidates.indexOfFirst { it.mWord == typedWord } + } else { + -1 + } + val currentWordIndex = if (currentWord != null) { + candidates.indexOfFirst { it.mWord == currentWord } + } else { + -1 } - val baseIndex = if (swipeSuggestionWord == typedWord - && swipeSuggestionIndex in candidates.indices) { + val baseIndex = if (swipeSuggestionWord != null + && swipeSuggestionIndex in candidates.indices + && candidates[swipeSuggestionIndex].mWord == swipeSuggestionWord) { swipeSuggestionIndex + } else if (currentWordIndex >= 0) { + currentWordIndex + } else if (typedWordIndex >= 0) { + typedWordIndex } else { - currentIndex + 0 } val step = if (direction == KeyboardActionListener.SWIPE_ACTION_UP) -1 else 1 var nextIndex = (baseIndex + step + candidates.size) % candidates.size - if (candidates[nextIndex].mWord == typedWord) { + if (currentWord != null && candidates[nextIndex].mWord == currentWord) { nextIndex = (nextIndex + step + candidates.size) % candidates.size } val selected = candidates[nextIndex] - if (selected.mWord == typedWord) { + if (currentWord != null && selected.mWord == currentWord) { + if (movedCursorToLastWord) { + inputLogic.cursorRight(1, false, false) + } return } onEvent(Event.createSuggestionPickedEvent(selected)) swipeSuggestionIndex = nextIndex swipeSuggestionWord = selected.mWord + + if (movedCursorToLastWord) { + inputLogic.cursorRight(1, false, false) + } } } } diff --git a/java/src/org/futo/inputmethod/latin/settings/SettingsValues.java b/java/src/org/futo/inputmethod/latin/settings/SettingsValues.java index 8c25837adb..52b80fbd5c 100644 --- a/java/src/org/futo/inputmethod/latin/settings/SettingsValues.java +++ b/java/src/org/futo/inputmethod/latin/settings/SettingsValues.java @@ -216,7 +216,8 @@ public SettingsValues(final Context context, final SharedPreferences prefs, fina mAutoCorrectionThreshold = readAutoCorrectionThreshold(res, autoCorrectionThresholdRawValue); mPlausibilityThreshold = Settings.readPlausibilityThreshold(res); - mGestureInputEnabled = Settings.readGestureInputEnabled(prefs, res); + mGestureInputEnabled = Settings.readGestureInputEnabled(prefs, res) + && mSpacebarMode != Settings.SPACEBAR_MODE_SWIPE_ACTIONS; mGestureTrailEnabled = prefs.getBoolean(Settings.PREF_GESTURE_PREVIEW_TRAIL, true); mCloudSyncEnabled = prefs.getBoolean(LocalSettingsConstants.PREF_ENABLE_CLOUD_SYNC, false); mAccount = prefs.getString(LocalSettingsConstants.PREF_ACCOUNT_NAME, diff --git a/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt b/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt index 3745588d17..39caa51705 100644 --- a/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt +++ b/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt @@ -113,6 +113,7 @@ import org.futo.inputmethod.latin.uix.settings.SettingItem import org.futo.inputmethod.latin.uix.settings.SettingRadio import org.futo.inputmethod.latin.uix.settings.SettingSlider import org.futo.inputmethod.latin.uix.settings.SettingSliderSharedPrefsInt +import org.futo.inputmethod.latin.uix.settings.SettingToggleRaw import org.futo.inputmethod.latin.uix.settings.SyncDataStoreToPreferencesFloat import org.futo.inputmethod.latin.uix.settings.SyncDataStoreToPreferencesInt import org.futo.inputmethod.latin.uix.settings.Tip @@ -591,8 +592,7 @@ val LongPressMenu = UserSettingsMenu( searchTagList = listOf( R.string.morekey_settings_space_behavior_swipe_cursor, R.string.morekey_settings_space_behavior_swipe_lang, - R.string.morekey_settings_space_behavior_only_cursor, - R.string.morekey_settings_space_behavior_swipe_actions + R.string.morekey_settings_space_behavior_only_cursor ) ) { SettingRadio( @@ -600,14 +600,12 @@ val LongPressMenu = UserSettingsMenu( options = listOf( Settings.SPACEBAR_MODE_SWIPE_CURSOR, Settings.SPACEBAR_MODE_SWIPE_LANGUAGE, - Settings.SPACEBAR_MODE_SWIPE_CURSOR_ONLY, - Settings.SPACEBAR_MODE_SWIPE_ACTIONS + Settings.SPACEBAR_MODE_SWIPE_CURSOR_ONLY ), optionNames = listOf( stringResource(R.string.morekey_settings_space_behavior_swipe_cursor), stringResource(R.string.morekey_settings_space_behavior_swipe_lang), - stringResource(R.string.morekey_settings_space_behavior_only_cursor), - stringResource(R.string.morekey_settings_space_behavior_swipe_actions) + stringResource(R.string.morekey_settings_space_behavior_only_cursor) ), setting = useSharedPrefsInt( key = Settings.PREF_SPACEBAR_MODE, @@ -810,16 +808,9 @@ val TypingSettingsMenu = UserSettingsMenu( AutoSpacesSetting() } ), - userSettingToggleSharedPrefs( - title = R.string.typing_settings_swipe, - subtitle = R.string.typing_settings_swipe_subtitle, - key = Settings.PREF_GESTURE_INPUT, - default = {true}, - icon = { - Icon(painterResource(id = R.drawable.swipe_icon), contentDescription = null, - tint = MaterialTheme.colorScheme.onBackground.copy(alpha = 0.75f)) - } - ), + UserSetting(name = R.string.typing_settings_swipe) { + SwipeAlphaModesSetting() + }, userSettingToggleDataStore( title = R.string.typing_settings_suggest_emojis, subtitle = R.string.typing_settings_suggest_emojis_subtitle, @@ -974,6 +965,58 @@ val TypingSettingsMenu = UserSettingsMenu( ) ) +@Composable +private fun SwipeAlphaModesSetting() { + val gestureInput = useSharedPrefsBool(Settings.PREF_GESTURE_INPUT, true) + val spacebarMode = useSharedPrefsInt(Settings.PREF_SPACEBAR_MODE, Settings.SPACEBAR_MODE_SWIPE_CURSOR) + + val swipeActionsEnabled = spacebarMode.value == Settings.SPACEBAR_MODE_SWIPE_ACTIONS + val swipeTypingEnabled = gestureInput.value && !swipeActionsEnabled + + Column { + SettingToggleRaw( + title = stringResource(R.string.typing_settings_swipe), + subtitle = stringResource(R.string.typing_settings_swipe_subtitle), + enabled = swipeTypingEnabled, + setValue = { enabled -> + if (enabled) { + gestureInput.setValue(true) + if (swipeActionsEnabled) { + spacebarMode.setValue(Settings.SPACEBAR_MODE_SWIPE_CURSOR) + } + } else { + gestureInput.setValue(false) + } + }, + icon = { + Icon( + painterResource(id = R.drawable.swipe_icon), + contentDescription = null, + tint = MaterialTheme.colorScheme.onBackground.copy(alpha = 0.75f) + ) + } + ) + + SettingToggleRaw( + title = stringResource(R.string.typing_settings_swipe_actions_mode), + subtitle = stringResource(R.string.typing_settings_swipe_actions_mode_subtitle), + enabled = swipeActionsEnabled, + setValue = { enabled -> + if (enabled) { + spacebarMode.setValue(Settings.SPACEBAR_MODE_SWIPE_ACTIONS) + gestureInput.setValue(false) + } else { + if (spacebarMode.value == Settings.SPACEBAR_MODE_SWIPE_ACTIONS) { + spacebarMode.setValue(Settings.SPACEBAR_MODE_SWIPE_CURSOR) + } + } + } + ) + + Tip(stringResource(R.string.typing_settings_swipe_modes_mutual_exclusive)) + } +} + @Preview(showBackground = true) @Composable fun KeyboardAndTypingScreen(navController: NavHostController = rememberNavController()) { From ab36995893f7419afc5954d838300e145b9e1de0 Mon Sep 17 00:00:00 2001 From: ndom91 Date: Sat, 21 Feb 2026 21:58:37 +0100 Subject: [PATCH 03/25] Swap swipe suggestion direction and make vertical swipes more tolerant --- .../futo/inputmethod/engine/general/GeneralIME.kt | 2 +- .../futo/inputmethod/keyboard/PointerTracker.java | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt b/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt index 8cc2c30256..ac6c1eec1d 100644 --- a/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt +++ b/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt @@ -809,7 +809,7 @@ class GeneralIME(val helper: IMEHelper) : IMEInterface, WordLearner, SuggestionS 0 } - val step = if (direction == KeyboardActionListener.SWIPE_ACTION_UP) -1 else 1 + val step = if (direction == KeyboardActionListener.SWIPE_ACTION_UP) 1 else -1 var nextIndex = (baseIndex + step + candidates.size) % candidates.size if (currentWord != null && candidates[nextIndex].mWord == currentWord) { nextIndex = (nextIndex + step + candidates.size) % candidates.size diff --git a/java/src/org/futo/inputmethod/keyboard/PointerTracker.java b/java/src/org/futo/inputmethod/keyboard/PointerTracker.java index 0702f5f04e..17b579a89a 100644 --- a/java/src/org/futo/inputmethod/keyboard/PointerTracker.java +++ b/java/src/org/futo/inputmethod/keyboard/PointerTracker.java @@ -90,6 +90,8 @@ public PointerTrackerParams(final TypedArray mainKeyboardViewAttr) { private static PointerTrackerParams sParams; private static final int sPointerStep = (int)(16.0 * Resources.getSystem().getDisplayMetrics().density); private static final int sPointerBigStep = (int)(32.0 * Resources.getSystem().getDisplayMetrics().density); + private static final int sPointerSwipeActionStep = (int)(24.0 * Resources.getSystem().getDisplayMetrics().density); + private static final float SWIPE_ACTION_HORIZONTAL_DOMINANCE_RATIO = 1.2f; private static final int sPointerHugeStep = Integer.min( (int)(128.0 * Resources.getSystem().getDisplayMetrics().density), Resources.getSystem().getDisplayMetrics().widthPixels * 3 / 2 @@ -964,20 +966,24 @@ private void onMoveEventInternal(final int x, final int y, final long eventTime) if (mIsSlidingCursor && oldKey != null && settingsValues.mSpacebarMode == Settings.SPACEBAR_MODE_SWIPE_ACTIONS) { - final int pointerStep = sPointerBigStep; + final int pointerStep = sPointerSwipeActionStep; final int swipeIgnoreTime = settingsValues.mKeyLongpressTimeout / MULTIPLIER_FOR_LONG_PRESS_TIMEOUT_IN_SLIDING_INPUT; final int dx = x - mStartX; final int dy = y - mStartY; + final long swipeDistanceSquared = (long)dx * dx + (long)dy * dy; + final long swipeStepSquared = (long)pointerStep * pointerStep; if (!mSwipeActionTriggered && mStartTime + swipeIgnoreTime < System.currentTimeMillis() - && (Math.abs(dx) >= pointerStep || Math.abs(dy) >= pointerStep)) { + && swipeDistanceSquared >= swipeStepSquared) { sTimerProxy.cancelKeyTimersOf(this); mCursorMoved = true; mSwipeActionTriggered = true; - if (Math.abs(dx) >= Math.abs(dy)) { + final int absDx = Math.abs(dx); + final int absDy = Math.abs(dy); + if (absDx >= absDy * SWIPE_ACTION_HORIZONTAL_DOMINANCE_RATIO) { sListener.onSwipeAction(dx > 0 ? KeyboardActionListener.SWIPE_ACTION_RIGHT : KeyboardActionListener.SWIPE_ACTION_LEFT); From 90849b842840e1d177d49f71ef446b2aaea66e29 Mon Sep 17 00:00:00 2001 From: ndom91 Date: Sat, 21 Feb 2026 22:10:46 +0100 Subject: [PATCH 04/25] Make swipes more tolerant --- java/src/org/futo/inputmethod/keyboard/PointerTracker.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/src/org/futo/inputmethod/keyboard/PointerTracker.java b/java/src/org/futo/inputmethod/keyboard/PointerTracker.java index 17b579a89a..c3d17b7672 100644 --- a/java/src/org/futo/inputmethod/keyboard/PointerTracker.java +++ b/java/src/org/futo/inputmethod/keyboard/PointerTracker.java @@ -90,8 +90,8 @@ public PointerTrackerParams(final TypedArray mainKeyboardViewAttr) { private static PointerTrackerParams sParams; private static final int sPointerStep = (int)(16.0 * Resources.getSystem().getDisplayMetrics().density); private static final int sPointerBigStep = (int)(32.0 * Resources.getSystem().getDisplayMetrics().density); - private static final int sPointerSwipeActionStep = (int)(24.0 * Resources.getSystem().getDisplayMetrics().density); - private static final float SWIPE_ACTION_HORIZONTAL_DOMINANCE_RATIO = 1.2f; + private static final int sPointerSwipeActionStep = (int)(20.0 * Resources.getSystem().getDisplayMetrics().density); + private static final float SWIPE_ACTION_HORIZONTAL_DOMINANCE_RATIO = 1.3f; private static final int sPointerHugeStep = Integer.min( (int)(128.0 * Resources.getSystem().getDisplayMetrics().density), Resources.getSystem().getDisplayMetrics().widthPixels * 3 / 2 From 69afa6a1d59af0e636cb6fc38e12b6da5a4c6594 Mon Sep 17 00:00:00 2001 From: ndom91 Date: Sat, 21 Feb 2026 22:19:07 +0100 Subject: [PATCH 05/25] Use a cached version of suggestions to swipe through instead of swiping thorugh next suggestions from next word --- .../inputmethod/engine/general/GeneralIME.kt | 39 +++++++++++++------ 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt b/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt index ac6c1eec1d..481d4e0112 100644 --- a/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt +++ b/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt @@ -232,6 +232,7 @@ class GeneralIME(val helper: IMEHelper) : IMEInterface, WordLearner, SuggestionS override fun onStartInput() { useExpandableUi = helper.context.getSetting(UseExpandableSuggestionsForGeneralIME) + resetSwipeSuggestionSession() resetDictionaryFacilitator() setNeutralSuggestionStrip() @@ -270,6 +271,7 @@ class GeneralIME(val helper: IMEHelper) : IMEInterface, WordLearner, SuggestionS } override fun onFinishInput() { + resetSwipeSuggestionSession() inputLogic.finishInput() dictionaryFacilitator.onFinishInput(context) updateSuggestionJob?.cancel() @@ -298,6 +300,10 @@ class GeneralIME(val helper: IMEHelper) : IMEInterface, WordLearner, SuggestionS private fun onEventInternal(event: Event, ignoreSuggestionUpdate: Boolean = false) { helper.requestCursorUpdate() + if (event.eventType != Event.EVENT_TYPE_SUGGESTION_PICKED) { + resetSwipeSuggestionSession() + } + val inputTransaction = when (event.eventType) { Event.EVENT_TYPE_INPUT_KEYPRESS, Event.EVENT_TYPE_INPUT_KEYPRESS_RESUMED -> { @@ -480,6 +486,14 @@ class GeneralIME(val helper: IMEHelper) : IMEInterface, WordLearner, SuggestionS private var timeTakenToUpdate = 40L private var swipeSuggestionIndex = -1 private var swipeSuggestionWord: String? = null + private var swipeSuggestionCandidates: List? = null + + private fun resetSwipeSuggestionSession() { + swipeSuggestionIndex = -1 + swipeSuggestionWord = null + swipeSuggestionCandidates = null + } + fun updateSuggestions(inputStyle: Int) { updateSuggestionJob?.cancel() @@ -693,8 +707,7 @@ class GeneralIME(val helper: IMEHelper) : IMEInterface, WordLearner, SuggestionS override fun onSwipeAction(direction: Int) { when (direction) { KeyboardActionListener.SWIPE_ACTION_RIGHT -> { - swipeSuggestionIndex = -1 - swipeSuggestionWord = null + resetSwipeSuggestionSession() onEvent( Event.createSoftwareKeypressEvent( Constants.CODE_SPACE, @@ -707,8 +720,7 @@ class GeneralIME(val helper: IMEHelper) : IMEInterface, WordLearner, SuggestionS } KeyboardActionListener.SWIPE_ACTION_LEFT -> { - swipeSuggestionIndex = -1 - swipeSuggestionWord = null + resetSwipeSuggestionSession() setNeutralSuggestionStrip() val beforeCursor = inputLogic.mConnection.getTextBeforeCursor(1, 0)?.toString() @@ -767,17 +779,22 @@ class GeneralIME(val helper: IMEHelper) : IMEInterface, WordLearner, SuggestionS return } - val suggestions = inputLogic.mSuggestedWords - val candidates = ArrayList() - val seen = HashSet() - for (index in 0 until suggestions.size()) { - val info = suggestions.getInfo(index) - if (!info.isKindOf(SuggestedWordInfo.KIND_UNDO) && seen.add(info.mWord)) { - candidates.add(info) + val candidates = swipeSuggestionCandidates ?: run { + val suggestions = inputLogic.mSuggestedWords + val rebuiltCandidates = ArrayList() + val seen = HashSet() + for (index in 0 until suggestions.size()) { + val info = suggestions.getInfo(index) + if (!info.isKindOf(SuggestedWordInfo.KIND_UNDO) && seen.add(info.mWord)) { + rebuiltCandidates.add(info) + } } + swipeSuggestionCandidates = rebuiltCandidates + rebuiltCandidates } if (candidates.size < 2) { + resetSwipeSuggestionSession() if (movedCursorToLastWord) { inputLogic.cursorRight(1, false, false) } From 8caed40cc79bbedd41aba7c6682b0962ffa59fb6 Mon Sep 17 00:00:00 2001 From: ndom91 Date: Sat, 21 Feb 2026 23:22:05 +0100 Subject: [PATCH 06/25] Apply suggestion cache on swipe action mode only --- .../src/org/futo/inputmethod/engine/general/GeneralIME.kt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt b/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt index 481d4e0112..2fb622d651 100644 --- a/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt +++ b/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt @@ -300,7 +300,7 @@ class GeneralIME(val helper: IMEHelper) : IMEInterface, WordLearner, SuggestionS private fun onEventInternal(event: Event, ignoreSuggestionUpdate: Boolean = false) { helper.requestCursorUpdate() - if (event.eventType != Event.EVENT_TYPE_SUGGESTION_PICKED) { + if (isSwipeActionsModeEnabled() && event.eventType != Event.EVENT_TYPE_SUGGESTION_PICKED) { resetSwipeSuggestionSession() } @@ -494,6 +494,10 @@ class GeneralIME(val helper: IMEHelper) : IMEInterface, WordLearner, SuggestionS swipeSuggestionCandidates = null } + private fun isSwipeActionsModeEnabled(): Boolean { + return settings.current.mSpacebarMode == Settings.SPACEBAR_MODE_SWIPE_ACTIONS + } + fun updateSuggestions(inputStyle: Int) { updateSuggestionJob?.cancel() @@ -705,6 +709,8 @@ class GeneralIME(val helper: IMEHelper) : IMEInterface, WordLearner, SuggestionS } override fun onSwipeAction(direction: Int) { + if (!isSwipeActionsModeEnabled()) return + when (direction) { KeyboardActionListener.SWIPE_ACTION_RIGHT -> { resetSwipeSuggestionSession() From 1111c347a016e3cc9363353fe4bf8eaf08f4546e Mon Sep 17 00:00:00 2001 From: ndom91 Date: Sun, 22 Feb 2026 00:57:11 +0100 Subject: [PATCH 07/25] Refactor swipe mode to be a SWIPE_GESTURE, not an additional SPACEBAR_MODE --- .../inputmethod/engine/general/GeneralIME.kt | 2 +- .../inputmethod/keyboard/PointerTracker.java | 6 +++--- .../inputmethod/latin/settings/Settings.java | 10 ++++----- .../latin/settings/SettingsValues.java | 6 ++++-- .../latin/uix/settings/pages/Typing.kt | 21 +++++-------------- 5 files changed, 18 insertions(+), 27 deletions(-) diff --git a/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt b/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt index 2fb622d651..0a87db91b3 100644 --- a/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt +++ b/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt @@ -495,7 +495,7 @@ class GeneralIME(val helper: IMEHelper) : IMEInterface, WordLearner, SuggestionS } private fun isSwipeActionsModeEnabled(): Boolean { - return settings.current.mSpacebarMode == Settings.SPACEBAR_MODE_SWIPE_ACTIONS + return settings.current.mGestureInputMode == Settings.GESTURE_INPUT_MODE_ACTIONS } fun updateSuggestions(inputStyle: Int) { diff --git a/java/src/org/futo/inputmethod/keyboard/PointerTracker.java b/java/src/org/futo/inputmethod/keyboard/PointerTracker.java index c3d17b7672..ce88031b62 100644 --- a/java/src/org/futo/inputmethod/keyboard/PointerTracker.java +++ b/java/src/org/futo/inputmethod/keyboard/PointerTracker.java @@ -751,8 +751,8 @@ private void onDownEventInternal(final int x, final int y, final long eventTime) mSwipeActionTriggered = false; final boolean swipeActionsMode = - Settings.getInstance().getCurrent().mSpacebarMode - == Settings.SPACEBAR_MODE_SWIPE_ACTIONS; + Settings.getInstance().getCurrent().mGestureInputMode + == Settings.GESTURE_INPUT_MODE_ACTIONS; mIsSlidingCursor = key.getCode() == Constants.CODE_DELETE || key.getCode() == Constants.CODE_SPACE @@ -965,7 +965,7 @@ private void onMoveEventInternal(final int x, final int y, final long eventTime) final SettingsValues settingsValues = Settings.getInstance().getCurrent(); if (mIsSlidingCursor && oldKey != null - && settingsValues.mSpacebarMode == Settings.SPACEBAR_MODE_SWIPE_ACTIONS) { + && settingsValues.mGestureInputMode == Settings.GESTURE_INPUT_MODE_ACTIONS) { final int pointerStep = sPointerSwipeActionStep; final int swipeIgnoreTime = settingsValues.mKeyLongpressTimeout / MULTIPLIER_FOR_LONG_PRESS_TIMEOUT_IN_SLIDING_INPUT; diff --git a/java/src/org/futo/inputmethod/latin/settings/Settings.java b/java/src/org/futo/inputmethod/latin/settings/Settings.java index 7ca3f89d2d..f7e3be5536 100644 --- a/java/src/org/futo/inputmethod/latin/settings/Settings.java +++ b/java/src/org/futo/inputmethod/latin/settings/Settings.java @@ -85,7 +85,9 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang public static final String PREF_KEY_PREVIEW_POPUP_DISMISS_DELAY = "pref_key_preview_popup_dismiss_delay"; public static final String PREF_BIGRAM_PREDICTIONS = "next_word_prediction"; - public static final String PREF_GESTURE_INPUT = "gesture_input"; + public static final String PREF_GESTURE_INPUT_MODE = "pref_gesture_input_mode"; + public static final int GESTURE_INPUT_MODE_TYPING = 0; + public static final int GESTURE_INPUT_MODE_ACTIONS = 1; public static final String PREF_VIBRATION_DURATION_SETTINGS = "pref_vibration_duration_settings"; public static final String PREF_KEYPRESS_SOUND_VOLUME = "pref_keypress_sound_volume"; @@ -126,7 +128,6 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang public static final int SPACEBAR_MODE_SWIPE_CURSOR = 0; // Long-Press switches language, swipe moves cursor public static final int SPACEBAR_MODE_SWIPE_LANGUAGE = 1; // Swipe switches language, long-press+drag moves cursor public static final int SPACEBAR_MODE_SWIPE_CURSOR_ONLY = 2; // Swipe and long-press+drag moves cursor - public static final int SPACEBAR_MODE_SWIPE_ACTIONS = 3; // Swipe actions mode (Fleksy-style) public static final String PREF_BACKSPACE_MODE = "pref_backspace_mode"; public static final int BACKSPACE_MODE_CHARACTERS = 0; // Long-press backspace and swipe backspace removes just characters @@ -287,10 +288,9 @@ public static boolean readFromBuildConfigIfGestureInputEnabled(final Resources r return res.getBoolean(R.bool.config_gesture_input_enabled_by_build_config); } - public static boolean readGestureInputEnabled(final SharedPreferences prefs, + public static int readGestureInputMode(final SharedPreferences prefs, final Resources res) { - return readFromBuildConfigIfGestureInputEnabled(res) - && prefs.getBoolean(PREF_GESTURE_INPUT, true); + return prefs.getInt(PREF_GESTURE_INPUT_MODE, GESTURE_INPUT_MODE_TYPING); } public static boolean readFromBuildConfigIfToShowKeyPreviewPopupOption(final Resources res) { diff --git a/java/src/org/futo/inputmethod/latin/settings/SettingsValues.java b/java/src/org/futo/inputmethod/latin/settings/SettingsValues.java index 52b80fbd5c..70714c2ac8 100644 --- a/java/src/org/futo/inputmethod/latin/settings/SettingsValues.java +++ b/java/src/org/futo/inputmethod/latin/settings/SettingsValues.java @@ -81,6 +81,7 @@ public class SettingsValues { // Use bigrams to predict the next word when there is no input for it yet public final boolean mBigramPredictionEnabled; public final boolean mTransformerPredictionEnabled; + public final int mGestureInputMode; public final boolean mGestureInputEnabled; public final boolean mGestureTrailEnabled; public final boolean mGestureFloatingPreviewTextEnabled; @@ -216,8 +217,9 @@ public SettingsValues(final Context context, final SharedPreferences prefs, fina mAutoCorrectionThreshold = readAutoCorrectionThreshold(res, autoCorrectionThresholdRawValue); mPlausibilityThreshold = Settings.readPlausibilityThreshold(res); - mGestureInputEnabled = Settings.readGestureInputEnabled(prefs, res) - && mSpacebarMode != Settings.SPACEBAR_MODE_SWIPE_ACTIONS; + mGestureInputMode = Settings.readGestureInputMode(prefs, res); + mGestureInputEnabled = Settings.readFromBuildConfigIfGestureInputEnabled(res) + && mGestureInputMode == Settings.GESTURE_INPUT_MODE_TYPING; mGestureTrailEnabled = prefs.getBoolean(Settings.PREF_GESTURE_PREVIEW_TRAIL, true); mCloudSyncEnabled = prefs.getBoolean(LocalSettingsConstants.PREF_ENABLE_CLOUD_SYNC, false); mAccount = prefs.getString(LocalSettingsConstants.PREF_ACCOUNT_NAME, diff --git a/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt b/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt index 39caa51705..f770b9dced 100644 --- a/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt +++ b/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt @@ -967,11 +967,10 @@ val TypingSettingsMenu = UserSettingsMenu( @Composable private fun SwipeAlphaModesSetting() { - val gestureInput = useSharedPrefsBool(Settings.PREF_GESTURE_INPUT, true) - val spacebarMode = useSharedPrefsInt(Settings.PREF_SPACEBAR_MODE, Settings.SPACEBAR_MODE_SWIPE_CURSOR) + val gestureMode = useSharedPrefsInt(Settings.PREF_GESTURE_INPUT_MODE, Settings.GESTURE_INPUT_MODE_TYPING) - val swipeActionsEnabled = spacebarMode.value == Settings.SPACEBAR_MODE_SWIPE_ACTIONS - val swipeTypingEnabled = gestureInput.value && !swipeActionsEnabled + val swipeTypingEnabled = gestureMode.value == Settings.GESTURE_INPUT_MODE_TYPING + val swipeActionsEnabled = gestureMode.value == Settings.GESTURE_INPUT_MODE_ACTIONS Column { SettingToggleRaw( @@ -980,12 +979,7 @@ private fun SwipeAlphaModesSetting() { enabled = swipeTypingEnabled, setValue = { enabled -> if (enabled) { - gestureInput.setValue(true) - if (swipeActionsEnabled) { - spacebarMode.setValue(Settings.SPACEBAR_MODE_SWIPE_CURSOR) - } - } else { - gestureInput.setValue(false) + gestureMode.setValue(Settings.GESTURE_INPUT_MODE_TYPING) } }, icon = { @@ -1003,12 +997,7 @@ private fun SwipeAlphaModesSetting() { enabled = swipeActionsEnabled, setValue = { enabled -> if (enabled) { - spacebarMode.setValue(Settings.SPACEBAR_MODE_SWIPE_ACTIONS) - gestureInput.setValue(false) - } else { - if (spacebarMode.value == Settings.SPACEBAR_MODE_SWIPE_ACTIONS) { - spacebarMode.setValue(Settings.SPACEBAR_MODE_SWIPE_CURSOR) - } + gestureMode.setValue(Settings.GESTURE_INPUT_MODE_ACTIONS) } } ) From e40506cb5463c40aa026fd30f5b3e524f4be7265 Mon Sep 17 00:00:00 2001 From: ndom91 Date: Sun, 22 Feb 2026 01:04:23 +0100 Subject: [PATCH 08/25] Remove settings tip bar --- java/res/values/strings-uix.xml | 1 - java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt | 1 - 2 files changed, 2 deletions(-) diff --git a/java/res/values/strings-uix.xml b/java/res/values/strings-uix.xml index d99f24787e..faf2e7c786 100644 --- a/java/res/values/strings-uix.xml +++ b/java/res/values/strings-uix.xml @@ -443,7 +443,6 @@ Allow swiping from key to key to write words. Swipe Actions Mode (alpha) Fleksy-style directional swipes anywhere on the keyboard. Disables Swipe Typing. - Only one swipe mode can be active at a time. Emoji Suggestions Suggest emojis while you\'re typing Vibration diff --git a/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt b/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt index f770b9dced..a1c98f0728 100644 --- a/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt +++ b/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt @@ -1002,7 +1002,6 @@ private fun SwipeAlphaModesSetting() { } ) - Tip(stringResource(R.string.typing_settings_swipe_modes_mutual_exclusive)) } } From b5887c7ae725ca94644c467ea2f35c986cd9d242 Mon Sep 17 00:00:00 2001 From: ndom91 Date: Sun, 22 Feb 2026 01:10:53 +0100 Subject: [PATCH 09/25] Cleanup settings strings --- java/res/values/strings-uix.xml | 5 +- .../latin/uix/settings/pages/Typing.kt | 92 +++++++++++++------ 2 files changed, 69 insertions(+), 28 deletions(-) diff --git a/java/res/values/strings-uix.xml b/java/res/values/strings-uix.xml index faf2e7c786..7693d82a49 100644 --- a/java/res/values/strings-uix.xml +++ b/java/res/values/strings-uix.xml @@ -439,10 +439,11 @@ Typing preferences + Swipe input mode Swipe Typing (alpha) Allow swiping from key to key to write words. - Swipe Actions Mode (alpha) - Fleksy-style directional swipes anywhere on the keyboard. Disables Swipe Typing. + Swipe Actions (alpha) + Fleksy-style directional swipes anywhere on the keyboard. Emoji Suggestions Suggest emojis while you\'re typing Vibration diff --git a/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt b/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt index a1c98f0728..d02108e32d 100644 --- a/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt +++ b/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt @@ -4,7 +4,9 @@ import android.content.Context import android.media.AudioManager import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.background +import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.gestures.detectDragGestures +import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ExperimentalLayoutApi @@ -24,10 +26,12 @@ import androidx.compose.material.icons.filled.KeyboardArrowDown import androidx.compose.material.icons.filled.KeyboardArrowUp import androidx.compose.material.icons.filled.Menu import androidx.compose.material3.Button +import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.LocalContentColor import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect @@ -972,36 +976,72 @@ private fun SwipeAlphaModesSetting() { val swipeTypingEnabled = gestureMode.value == Settings.GESTURE_INPUT_MODE_TYPING val swipeActionsEnabled = gestureMode.value == Settings.GESTURE_INPUT_MODE_ACTIONS - Column { - SettingToggleRaw( - title = stringResource(R.string.typing_settings_swipe), - subtitle = stringResource(R.string.typing_settings_swipe_subtitle), - enabled = swipeTypingEnabled, - setValue = { enabled -> - if (enabled) { - gestureMode.setValue(Settings.GESTURE_INPUT_MODE_TYPING) - } - }, - icon = { - Icon( - painterResource(id = R.drawable.swipe_icon), - contentDescription = null, - tint = MaterialTheme.colorScheme.onBackground.copy(alpha = 0.75f) - ) - } + Surface( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 8.dp, vertical = 4.dp), + shape = RoundedCornerShape(12.dp), + color = MaterialTheme.colorScheme.surfaceVariant.copy(alpha = 0.35f), + border = BorderStroke( + width = 1.dp, + color = MaterialTheme.colorScheme.outlineVariant.copy(alpha = 0.7f) ) + ) { + Column(Modifier.fillMaxWidth()) { + Text( + text = stringResource(R.string.typing_settings_swipe_group_label), + style = Typography.Body.MediumMl, + color = MaterialTheme.colorScheme.onSurfaceVariant, + modifier = Modifier.padding(start = 16.dp, end = 16.dp, top = 10.dp, bottom = 8.dp) + ) + + HorizontalDivider( + color = MaterialTheme.colorScheme.outlineVariant.copy(alpha = 0.65f), + thickness = 0.75.dp + ) - SettingToggleRaw( - title = stringResource(R.string.typing_settings_swipe_actions_mode), - subtitle = stringResource(R.string.typing_settings_swipe_actions_mode_subtitle), - enabled = swipeActionsEnabled, - setValue = { enabled -> - if (enabled) { - gestureMode.setValue(Settings.GESTURE_INPUT_MODE_ACTIONS) + SettingToggleRaw( + title = stringResource(R.string.typing_settings_swipe), + subtitle = stringResource(R.string.typing_settings_swipe_subtitle), + enabled = swipeTypingEnabled, + setValue = { enabled -> + if (enabled) { + gestureMode.setValue(Settings.GESTURE_INPUT_MODE_TYPING) + } + }, + icon = { + Icon( + painterResource(id = R.drawable.swipe_icon), + contentDescription = null, + tint = MaterialTheme.colorScheme.onBackground.copy(alpha = 0.75f) + ) } - } - ) + ) + HorizontalDivider( + color = MaterialTheme.colorScheme.outlineVariant.copy(alpha = 0.55f), + thickness = 0.75.dp, + modifier = Modifier.padding(start = 16.dp) + ) + + SettingToggleRaw( + title = stringResource(R.string.typing_settings_swipe_actions_mode), + subtitle = stringResource(R.string.typing_settings_swipe_actions_mode_subtitle), + enabled = swipeActionsEnabled, + setValue = { enabled -> + if (enabled) { + gestureMode.setValue(Settings.GESTURE_INPUT_MODE_ACTIONS) + } + } + icon = { + Icon( + painterResource(id = R.drawable.swipe_icon), + contentDescription = null, + tint = MaterialTheme.colorScheme.onBackground.copy(alpha = 0.75f) + ) + } + ) + } } } From 28a6bb486b810bc9b84cacb26cd0b0eb8c0622b4 Mon Sep 17 00:00:00 2001 From: ndom91 Date: Sun, 22 Feb 2026 01:27:01 +0100 Subject: [PATCH 10/25] Refactor spaces mode to use native dropdown --- .../latin/uix/settings/Components.kt | 123 ++++++++---------- .../latin/uix/settings/pages/Typing.kt | 2 +- 2 files changed, 56 insertions(+), 69 deletions(-) diff --git a/java/src/org/futo/inputmethod/latin/uix/settings/Components.kt b/java/src/org/futo/inputmethod/latin/uix/settings/Components.kt index d9c83ee05e..7dd5a44fd4 100644 --- a/java/src/org/futo/inputmethod/latin/uix/settings/Components.kt +++ b/java/src/org/futo/inputmethod/latin/uix/settings/Components.kt @@ -1,9 +1,6 @@ package org.futo.inputmethod.latin.uix.settings -import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.core.animateFloatAsState -import androidx.compose.animation.expandVertically -import androidx.compose.animation.shrinkVertically import androidx.compose.foundation.Canvas import androidx.compose.foundation.background import androidx.compose.foundation.border @@ -41,6 +38,8 @@ import androidx.compose.material.icons.filled.ArrowForward import androidx.compose.material.icons.filled.Send import androidx.compose.material.icons.filled.Warning import androidx.compose.material3.Icon +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.LocalContentColor import androidx.compose.material3.MaterialTheme import androidx.compose.material3.RadioButton @@ -816,26 +815,22 @@ fun DropDownPicker( ) { var expanded by remember { mutableStateOf(false) } - - SpacedColumn(4.dp, modifier = modifier.semantics { - role = Role.DropdownList - }) { + Box(modifier = modifier.semantics { role = Role.DropdownList }) { Row( - Modifier.fillMaxWidth().background( - MaterialTheme.colorScheme.surfaceContainerHighest, DropDownShape - ).border( - if(expanded) { 2.dp } else { 1.dp }, - MaterialTheme.colorScheme.outline, - DropDownShape - ).heightIn(min = 44.dp).clip(DropDownShape).clickable { - expanded = !expanded - }.padding(16.dp).semantics { - // TODO: Localization - stateDescription = if(expanded) "Expanded" else "Collapsed" - role = Role.DropdownList - } + Modifier + .fillMaxWidth() + .background(MaterialTheme.colorScheme.surfaceContainerHighest, DropDownShape) + .border(1.dp, MaterialTheme.colorScheme.outline, DropDownShape) + .heightIn(min = 44.dp) + .clip(DropDownShape) + .clickable { expanded = !expanded } + .padding(16.dp) + .semantics { + stateDescription = if (expanded) "Expanded" else "Collapsed" + role = Role.DropdownList + } ) { - if(selection != null) { + if (selection != null) { Text( text = getDisplayName(selection), style = Typography.Body.Regular, @@ -849,54 +844,46 @@ fun DropDownPicker( RotatingChevronIcon(expanded, tint = MaterialTheme.colorScheme.onSurfaceVariant) } - AnimatedVisibility(expanded, enter = expandVertically(), exit = shrinkVertically()) { - val scrollState = rememberScrollState() - Column(Modifier.let { - if(scrollableOptions) { - it.verticalScroll(scrollState) - } else { - it - } - }) { - Spacer(Modifier.height(9.dp)) - Column( - Modifier.fillMaxWidth().background( - MaterialTheme.colorScheme.surfaceContainerHighest, DropDownShape - ).border( - 1.dp, - MaterialTheme.colorScheme.outline, - DropDownShape - ).clip(DropDownShape) - ) { - options.forEach { - Box( - Modifier.fillMaxWidth().heightIn(min = 44.dp).background( - if(selection == it) { - LocalKeyboardScheme.current.onSurfaceTransparent - } else { - Color.Transparent - } - ).clickable { - onSet(it) - expanded = false - }.padding(16.dp).semantics { - selected = selection == it - role = Role.DropdownList + DropdownMenu( + expanded = expanded, + onDismissRequest = { expanded = false }, + modifier = if (scrollableOptions) { + Modifier.heightIn(max = 280.dp) + } else { + Modifier + } + ) { + val selectedBackground = LocalKeyboardScheme.current.onSurfaceTransparent + for (option in options) { + DropdownMenuItem( + text = { + Text( + getDisplayName(option), + style = Typography.Body.Regular, + color = if (selection == option) { + MaterialTheme.colorScheme.onSurface + } else { + MaterialTheme.colorScheme.onSurfaceVariant } - ) { - Text( - getDisplayName(it), - style = Typography.Body.Regular, - color = if(selection == it) { - MaterialTheme.colorScheme.onSurface - } else { - MaterialTheme.colorScheme.onSurfaceVariant - }, - modifier = Modifier.align(Alignment.CenterStart) - ) + ) + }, + onClick = { + onSet(option) + expanded = false + }, + modifier = Modifier + .background( + if (selection == option) { + selectedBackground + } else { + Color.Transparent + } + ) + .semantics { + selected = selection == option + role = Role.DropdownList } - } - } + ) } } } @@ -979,4 +966,4 @@ fun PreviewPrimarySetting() { "Enable", dataStoreItem = DataStoreItem(false, { error("") }) ) -} \ No newline at end of file +} diff --git a/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt b/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt index d02108e32d..547dfe7e44 100644 --- a/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt +++ b/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt @@ -1032,7 +1032,7 @@ private fun SwipeAlphaModesSetting() { if (enabled) { gestureMode.setValue(Settings.GESTURE_INPUT_MODE_ACTIONS) } - } + }, icon = { Icon( painterResource(id = R.drawable.swipe_icon), From 1e77b507059ff646277e519b76655b4176b51017 Mon Sep 17 00:00:00 2001 From: ndom91 Date: Sun, 22 Feb 2026 01:30:08 +0100 Subject: [PATCH 11/25] Move swipe settings to be first setting as settings group looks better there --- .../org/futo/inputmethod/latin/uix/settings/pages/Typing.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt b/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt index 547dfe7e44..72e4f25928 100644 --- a/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt +++ b/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt @@ -806,15 +806,15 @@ val TypingSettingsMenu = UserSettingsMenu( title = R.string.typing_settings_title, navPath = "typing", registerNavPath = true, settings = listOf( + UserSetting(name = R.string.typing_settings_swipe) { + SwipeAlphaModesSetting() + }, UserSetting( name = R.string.typing_settings_auto_space_mode, component = { AutoSpacesSetting() } ), - UserSetting(name = R.string.typing_settings_swipe) { - SwipeAlphaModesSetting() - }, userSettingToggleDataStore( title = R.string.typing_settings_suggest_emojis, subtitle = R.string.typing_settings_suggest_emojis_subtitle, From 5796888cdb0e19ca11fe0157430dbf098e6c39cf Mon Sep 17 00:00:00 2001 From: ndom91 Date: Sun, 22 Feb 2026 01:36:21 +0100 Subject: [PATCH 12/25] Ensure users can disable swipe modes entirely --- java/res/values/strings-uix.xml | 2 +- .../org/futo/inputmethod/latin/settings/Settings.java | 9 ++++++++- .../futo/inputmethod/latin/uix/settings/pages/Typing.kt | 4 ++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/java/res/values/strings-uix.xml b/java/res/values/strings-uix.xml index 7693d82a49..b4c53d81f9 100644 --- a/java/res/values/strings-uix.xml +++ b/java/res/values/strings-uix.xml @@ -439,7 +439,7 @@ Typing preferences - Swipe input mode + Swipe input modes Swipe Typing (alpha) Allow swiping from key to key to write words. Swipe Actions (alpha) diff --git a/java/src/org/futo/inputmethod/latin/settings/Settings.java b/java/src/org/futo/inputmethod/latin/settings/Settings.java index f7e3be5536..46e07ff8ef 100644 --- a/java/src/org/futo/inputmethod/latin/settings/Settings.java +++ b/java/src/org/futo/inputmethod/latin/settings/Settings.java @@ -88,6 +88,7 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang public static final String PREF_GESTURE_INPUT_MODE = "pref_gesture_input_mode"; public static final int GESTURE_INPUT_MODE_TYPING = 0; public static final int GESTURE_INPUT_MODE_ACTIONS = 1; + public static final int GESTURE_INPUT_MODE_NONE = 2; public static final String PREF_VIBRATION_DURATION_SETTINGS = "pref_vibration_duration_settings"; public static final String PREF_KEYPRESS_SOUND_VOLUME = "pref_keypress_sound_volume"; @@ -290,7 +291,13 @@ public static boolean readFromBuildConfigIfGestureInputEnabled(final Resources r public static int readGestureInputMode(final SharedPreferences prefs, final Resources res) { - return prefs.getInt(PREF_GESTURE_INPUT_MODE, GESTURE_INPUT_MODE_TYPING); + final int mode = prefs.getInt(PREF_GESTURE_INPUT_MODE, GESTURE_INPUT_MODE_TYPING); + if (mode == GESTURE_INPUT_MODE_TYPING + || mode == GESTURE_INPUT_MODE_ACTIONS + || mode == GESTURE_INPUT_MODE_NONE) { + return mode; + } + return GESTURE_INPUT_MODE_TYPING; } public static boolean readFromBuildConfigIfToShowKeyPreviewPopupOption(final Resources res) { diff --git a/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt b/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt index 72e4f25928..2ccf6345b7 100644 --- a/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt +++ b/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt @@ -1007,6 +1007,8 @@ private fun SwipeAlphaModesSetting() { setValue = { enabled -> if (enabled) { gestureMode.setValue(Settings.GESTURE_INPUT_MODE_TYPING) + } else if (swipeTypingEnabled) { + gestureMode.setValue(Settings.GESTURE_INPUT_MODE_NONE) } }, icon = { @@ -1031,6 +1033,8 @@ private fun SwipeAlphaModesSetting() { setValue = { enabled -> if (enabled) { gestureMode.setValue(Settings.GESTURE_INPUT_MODE_ACTIONS) + } else if (swipeActionsEnabled) { + gestureMode.setValue(Settings.GESTURE_INPUT_MODE_NONE) } }, icon = { From 056a9dbf97e9fc4ed231077412134873dab3e490 Mon Sep 17 00:00:00 2001 From: ndom91 Date: Sun, 22 Feb 2026 01:39:16 +0100 Subject: [PATCH 13/25] Cleanup --- java/res/values/strings-uix.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/res/values/strings-uix.xml b/java/res/values/strings-uix.xml index b4c53d81f9..2d8d9f2fe7 100644 --- a/java/res/values/strings-uix.xml +++ b/java/res/values/strings-uix.xml @@ -421,7 +421,6 @@ Swiping moves cursor, long-pressing switches language Swiping changes language, long-pressing moves cursor Swiping and long-pressing only moves cursor - Swipe actions (Fleksy-style) Numbers @@ -643,3 +642,4 @@ Default is %1$s %1$s will be deleted + From 1fea5b4332d232a6ec99a76cad37d62dffcb3a82 Mon Sep 17 00:00:00 2001 From: ndom91 Date: Sun, 22 Feb 2026 01:55:32 +0100 Subject: [PATCH 14/25] Add legacy swipe input migration path --- .../inputmethod/latin/settings/Settings.java | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/java/src/org/futo/inputmethod/latin/settings/Settings.java b/java/src/org/futo/inputmethod/latin/settings/Settings.java index 46e07ff8ef..c20fcbe395 100644 --- a/java/src/org/futo/inputmethod/latin/settings/Settings.java +++ b/java/src/org/futo/inputmethod/latin/settings/Settings.java @@ -86,6 +86,7 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang "pref_key_preview_popup_dismiss_delay"; public static final String PREF_BIGRAM_PREDICTIONS = "next_word_prediction"; public static final String PREF_GESTURE_INPUT_MODE = "pref_gesture_input_mode"; + private static final String PREF_GESTURE_INPUT_LEGACY = "gesture_input"; public static final int GESTURE_INPUT_MODE_TYPING = 0; public static final int GESTURE_INPUT_MODE_ACTIONS = 1; public static final int GESTURE_INPUT_MODE_NONE = 2; @@ -291,12 +292,21 @@ public static boolean readFromBuildConfigIfGestureInputEnabled(final Resources r public static int readGestureInputMode(final SharedPreferences prefs, final Resources res) { - final int mode = prefs.getInt(PREF_GESTURE_INPUT_MODE, GESTURE_INPUT_MODE_TYPING); - if (mode == GESTURE_INPUT_MODE_TYPING - || mode == GESTURE_INPUT_MODE_ACTIONS - || mode == GESTURE_INPUT_MODE_NONE) { - return mode; + if (prefs.contains(PREF_GESTURE_INPUT_MODE)) { + final int mode = prefs.getInt(PREF_GESTURE_INPUT_MODE, GESTURE_INPUT_MODE_TYPING); + if (mode == GESTURE_INPUT_MODE_TYPING + || mode == GESTURE_INPUT_MODE_ACTIONS + || mode == GESTURE_INPUT_MODE_NONE) { + return mode; + } + } + + if (prefs.contains(PREF_GESTURE_INPUT_LEGACY)) { + return prefs.getBoolean(PREF_GESTURE_INPUT_LEGACY, true) + ? GESTURE_INPUT_MODE_TYPING + : GESTURE_INPUT_MODE_NONE; } + return GESTURE_INPUT_MODE_TYPING; } From 25485b43dc4d49d3885a09ccc61897e1d66e3dab Mon Sep 17 00:00:00 2001 From: ndom91 Date: Sun, 22 Feb 2026 01:58:26 +0100 Subject: [PATCH 15/25] Reset KeyboardTextsTable.java --- .../keyboard/internal/KeyboardTextsTable.java | 3524 ++++++++--------- 1 file changed, 1741 insertions(+), 1783 deletions(-) diff --git a/java/src/org/futo/inputmethod/keyboard/internal/KeyboardTextsTable.java b/java/src/org/futo/inputmethod/keyboard/internal/KeyboardTextsTable.java index ad4dbf232a..a2aa6983c4 100644 --- a/java/src/org/futo/inputmethod/keyboard/internal/KeyboardTextsTable.java +++ b/java/src/org/futo/inputmethod/keyboard/internal/KeyboardTextsTable.java @@ -90,21 +90,21 @@ public static String[] getTextsTable(final Locale locale) { "keylabel_to_alpha", "morekeys_a", "morekeys_o", - "morekeys_u", "morekeys_e", + "morekeys_u", "morekeys_i", - "keyspec_currency", "double_quotes", - "single_quotes", + "keyspec_currency", "morekeys_c", + "single_quotes", "morekeys_s", - "morekeys_misc_o", "morekeys_misc_a", + "morekeys_misc_o", "morekeys_misc_u", "morekeys_z", "morekeys_misc_e", - "morekeys_misc_i", "morekeys_n", + "morekeys_misc_i", "morekeys_misc_c", "morekeys_misc_s", "keyspec_symbols_1", @@ -127,32 +127,34 @@ public static String[] getTextsTable(final Locale locale) { "additional_morekeys_symbols_8", "additional_morekeys_symbols_9", "additional_morekeys_symbols_0", + "morekeys_y", "single_angle_quotes", "double_angle_quotes", - "morekeys_y", - "morekeys_d", "keylabel_to_symbol", + "morekeys_d", "morekeys_tablet_period", "morekeys_g", "morekeys_misc_z", + "morekeys_period", "keyspec_tablet_comma", - "keyspec_period", "morekeys_cyrillic_ie", - "morekeys_period", + "keyspec_period", "morekeys_star", "keyspec_comma", - "keyspec_tablet_period", - "morekeys_t", "keyspec_east_slavic_row1_9", "keyspec_east_slavic_row2_2", "keyspec_east_slavic_row2_11", "keyspec_east_slavic_row3_5", "morekeys_l", + "morekeys_t", "morekeys_misc_n", "morekeys_nordic_row2_10", "keyspec_nordic_row1_11", "keyspec_nordic_row2_10", "keyspec_nordic_row2_11", + "keyspec_tablet_period", + "morekeys_question", + "morekeys_tablet_comma", "keyspec_left_parenthesis", "keyspec_right_parenthesis", "keyspec_left_square_bracket", @@ -167,29 +169,10 @@ public static String[] getTextsTable(final Locale locale) { "keyspec_right_double_angle_quote", "keyspec_left_single_angle_quote", "keyspec_right_single_angle_quote", - "morekeys_punctuation", - "morekeys_question", + "keyhintlabel_period", "morekeys_cyrillic_soft_sign", + "morekeys_punctuation", "morekeys_nordic_row2_11", - "morekeys_tablet_comma", - "keyhintlabel_period", - "label_go_key", - "label_send_key", - "label_next_key", - "label_done_key", - "label_search_key", - "label_previous_key", - "label_pause_key", - "label_wait_key", - "morekeys_misc_y", - "morekeys_swiss_row1_11", - "morekeys_swiss_row2_10", - "morekeys_swiss_row2_11", - "keyspec_swiss_row1_11", - "keyspec_swiss_row2_10", - "keyspec_swiss_row2_11", - "keyspec_spanish_row2_10", - "morekeys_r", "morekeys_symbols_semicolon", "morekeys_symbols_percent", "morekeys_bullet", @@ -201,39 +184,56 @@ public static String[] getTextsTable(final Locale locale) { "keyspec_symbols_percent", "keyhintlabel_tablet_period", "keyhintlabel_tablet_comma", - "morekeys_cyrillic_i", - "keyspec_south_slavic_row1_6", - "keyspec_south_slavic_row2_11", - "keyspec_south_slavic_row3_1", - "keyspec_south_slavic_row3_8", + "keyspec_spanish_row2_10", + "morekeys_r", + "morekeys_misc_y", + "morekeys_swiss_row1_11", + "morekeys_swiss_row2_10", + "morekeys_swiss_row2_11", + "keyspec_swiss_row1_11", + "keyspec_swiss_row2_10", + "keyspec_swiss_row2_11", + "label_go_key", + "label_send_key", + "label_next_key", + "label_done_key", + "label_search_key", + "label_previous_key", + "label_pause_key", + "label_wait_key", + "morekeys_tablet_punctuation", + "morekeys_h", + "morekeys_j", + "morekeys_misc_g", "morekeys_cyrillic_u", "morekeys_cyrillic_en", "morekeys_cyrillic_ghe", "morekeys_east_slavic_row2_2", "morekeys_cyrillic_o", - "morekeys_h", - "morekeys_j", - "morekeys_misc_g", + "morekeys_k", "morekeys_misc_l", "morekeys_misc_r", - "morekeys_k", - "morekeys_tablet_punctuation", - "morekeys_plus", - "morekeys_exclamation", - "morekeys_cyrillic_ka", - "morekeys_cyrillic_a", - "morekeys_east_slavic_row2_11", - "qwertysyms_x", - "qwertysyms_c", - "morekeys_misc_code_u044c", + "morekeys_cyrillic_i", + "keyspec_south_slavic_row1_6", + "keyspec_south_slavic_row2_11", + "keyspec_south_slavic_row3_1", + "keyspec_south_slavic_row3_8", "morekeys_misc_h", "keyspec_q", "keyspec_w", "keyspec_y", "keyspec_x", + "morekeys_plus", + "morekeys_cyrillic_ka", + "morekeys_cyrillic_a", + "morekeys_east_slavic_row2_11", + "morekeys_currency_dollar", "morekeys_misc_t", + "morekeys_misc_code_u044c", "morekeys_w", - "morekeys_currency_dollar", + "qwertysyms_x", + "qwertysyms_c", + "morekeys_exclamation", "morekeys_less_than", "morekeys_greater_than", "morekeys_b", @@ -384,15 +384,13 @@ public static String[] getTextsTable(final Locale locale) { private static final String EMPTY = ""; - private static final String[] TEXTS_hy = { - "hy", - "\u0531\u0532\u0533", - null, + private static final String[] TEXTS_ar = { + "ar", + "\u0623\u200c\u0628\u200c\u062c", null, null, null, null, - "\u058f", null, null, null, @@ -408,14 +406,40 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0661", + "\u0662", + "\u0663", + "\u0664", + "\u0665", + "\u0666", + "\u0667", + "\u0668", + "\u0669", + "\u0660", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "0,\u066b,\u066c", null, null, null, + "\u0663\u0662\u0661\u061f", null, + "!text/morekeys_arabic_diacritics", null, null, + "!text/morekeys_arabic_diacritics", + "\u060c", null, null, + "\u2605,\u066d", + "\u060c", null, null, null, @@ -428,22 +452,58 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "?,\u00bf", + "!fixedColumnOrder!4,:,!,\u061f,\u061b,-,\\\",\\'", + "(|)", + ")|(", + "[|]", + "]|[", + "{|}", + "}|{", + "<|>", + ">|<", + "\u2264|\u2265", + "\u2265|\u2264", + "\u00ab|\u00bb", + "\u00bb|\u00ab", + "\u2039|\u203a", + "\u203a|\u2039", + "\u0651", null, null, null, - "!text/morekeys_punctuation", + ";", + "\\%,\u2030", + "\u266a", + "!fixedColumnOrder!4,\ufd3e|\ufd3f,!text/keyspecs_left_parenthesis_more_keys", + "!fixedColumnOrder!4,\ufd3f|\ufd3e,!text/keyspecs_right_parenthesis_more_keys", + "!fixedColumnOrder!8, \u0654\u25cc|\u0654, \u0652\u25cc|\u0652, \u064d\u25cc|\u064d, \u064c\u25cc|\u064c, \u0651\u25cc|\u0651, \u064b\u25cc|\u064b,!text/keyspec_symbols_question,!, \u0656\u25cc|\u0656, \u0670\u25cc|\u0670, \u0653\u25cc|\u0653, \u0650\u25cc|\u0650, \u064f\u25cc|\u064f,\u0640, \u0655\u25cc|\u0655, \u064e\u25cc|\u064e", + "\u061f", + "\u061b", + "\u066a", + "\u0651", + "\u061f" + }; + + private static final String[] TEXTS_az = { + "az", null, + "\u00e2,\u00e4,\u00e1", + "\u00f6,\u00f4,\u0153,\u00f2,\u00f3,\u00f5,\u00f8,\u014d", + "\u0259,\u00e9", + "\u00fc,\u00fb,\u00f9,\u00fa,\u016b", + "\u0131,\u00ee,\u00ef,\u00ec,\u00ed,\u012f,\u012b", null, - ",", - "\u0589", null, + "\u00e7,\u0107,\u010d", null, + "\u015f,\u00df,\u015b,\u0161", null, - ",", - "\u0589", null, null, + "\u017e", null, + "\u0148,\u00f1", null, null, null, @@ -466,21 +526,28 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "!autoColumnOrder!8,\\,,\u055e,\u055c,.,\u055a,\u0559,?,!,\u055d,\u055b,\u058a,\u00bb,\u00ab,\u055f,;,:", - "\u055e,\u00bf", null, + "\u00fd", null, null, null, null, null, + "\u011f" + }; + + private static final String[] TEXTS_be = { + "be", + "\u0410\u0411\u0412", null, null, null, null, null, + "!text/double_9qm_lqm", null, null, + "!text/single_9qm_lqm", null, null, null, @@ -518,31 +585,21 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u055c,\u00a1" - }; - - private static final String[] TEXTS_tr = { - "tr", null, null, - "\u00f6", - "\u00fc", null, - "\u0131", + "\u0451", null, null, null, - "\u00e7", - "\u015f", - "\u00f4,\u0153,\u00f2,\u00f3,\u00f5,\u00f8,\u014d", + "\u045e", + "\u044b", + "\u044d", + "\u0456", null, - "\u00fb,\u00f9,\u00fa,\u016b", null, null, - "\u00ee,\u00ef,\u00ec,\u00ed,\u012f,\u012b", null, - "\u0107,\u010d", - "\u00df,\u015b,\u0161", null, null, null, @@ -564,26 +621,30 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u044a" + }; + + private static final String[] TEXTS_bg = { + "bg", + "\u0410\u0411\u0412", null, null, null, null, null, - "\u011f" + "!text/double_9qm_lqm" }; - private static final String[] TEXTS_mk = { - "mk", - "\u0410\u0411\u0412", - null, + private static final String[] TEXTS_bn_BD = { + "bn_BD", + "\u0995\u0996\u0997", null, null, null, null, null, - "!text/double_9qm_lqm", - "!text/single_9qm_lqm", null, + "\u09f3", null, null, null, @@ -596,19 +657,61 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u09e7", + "\u09e8", + "\u09e9", + "\u09ea", + "\u09eb", + "\u09ec", + "\u09ed", + "\u09ee", + "\u09ef", + "\u09e6", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "0" + }; + + private static final String[] TEXTS_bn_IN = { + "bn_IN", + "\u0995\u0996\u0997", null, null, null, null, null, null, + "\u20b9" + }; + + private static final String[] TEXTS_ca = { + "ca", null, + "\u00e0", + "\u00f2,\u00f3", + "\u00e8,\u00e9", + "\u00fa,\u00fc", + "\u00ed,\u00ef", null, null, + "\u00e7", null, null, + "\u00e1,\u00e4,\u00e2,\u00e3,\u00e5,\u0105,\u00e6,\u0101,\u00aa", + "\u00f6,\u00f4,\u00f5,\u00f8,\u0153,\u014d,\u00ba", + "\u00f9,\u00fb,\u016b", null, + "\u00eb,\u00ea,\u0119,\u0117,\u0113", null, + "\u00ec,\u00ee,\u012f,\u012b", + "\u0107,\u010d", null, null, null, @@ -624,7 +727,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0450", null, null, null, @@ -649,6 +751,7 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "l\u00b7l", null, null, null, @@ -674,6 +777,7 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "!autoColumnOrder!9,\\\\,?,!,\u00b7,#,),(,/,;,',@,:,-,\\\",+,\\%,&", null, null, null, @@ -686,36 +790,29 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u00e7", null, null, - "\u045d", - "\u0455", - "\u045c", - "\u0437", - "\u0453" - }; - - private static final String[] TEXTS_sr_ZZ = { - "sr_ZZ", null, null, null, null, - "\u00e8", - "\u00ec", null, null, null, - "\u010d,\u0107,%", - "\u0161,%", null, null, null, - "\u017e,%", null, null, null, null, + "!autoColumnOrder!8,\\\\,',\u00b7,#,),(,/,;,@,:,-,\\\",+,\\%,&" + }; + + private static final String[] TEXTS_ckb = { + "ckb", + "\u0623\u200c\u0628\u200c\u062c", null, null, null, @@ -735,14 +832,40 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0661", + "\u0662", + "\u0663", + "\u0664", + "\u0665", + "\u0666", + "\u0667", + "\u0668", + "\u0669", + "\u0660", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "0,\u066b,\u066c", null, null, null, + "\u0663\u0662\u0661\u061f", null, + "\u061f", null, - "\u0111,%", null, + "\u061f", + "\u060c", null, + ".", + "\u2605,\u066d", + "\u060c", null, null, null, @@ -755,11 +878,61 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "?,\u00bf", + "!fixedColumnOrder!4,:,!,\u061f,\u061b,-,\\\",\\'", + "(|)", + ")|(", + "[|]", + "]|[", + "{|}", + "}|{", + "<|>", + ">|<", + "\u2264|\u2265", + "\u2265|\u2264", + "\u00ab|\u00bb", + "\u00bb|\u00ab", + "\u2039|\u203a", + "\u203a|\u2039", + "\u0651", null, null, null, + ";", + "\\%,\u2030", + "\u266a", + "!fixedColumnOrder!4,\ufd3e|\ufd3f,!text/keyspecs_left_parenthesis_more_keys", + "!fixedColumnOrder!4,\ufd3f|\ufd3e,!text/keyspecs_right_parenthesis_more_keys", + "!fixedColumnOrder!7, \u0655\u25cc|\u0655, \u0654\u25cc|\u0654, \u0652\u25cc|\u0652, \u064d\u25cc|\u064d, \u064c\u25cc|\u064c, \u064b\u25cc|\u064b, \u0651\u25cc|\u0651, \u0656\u25cc|\u0656, \u0670\u25cc|\u0670, \u0653\u25cc|\u0653, \u0650\u25cc|\u0650, \u064f\u25cc|\u064f, \u064e\u25cc|\u064e,\u0640|\u0640", + "\u061f", + "\u061b", + "\u066a", + "\u0651", + "\u061f" + }; + + private static final String[] TEXTS_cs = { + "cs", null, + "\u00e1", + "\u00f3", + "\u00e9,\u011b", + "\u00fa,\u016f", + "\u00ed", + "!text/double_9qm_lqm", null, + "\u010d", + "!text/single_9qm_lqm", + "\u0161", + "\u00e0,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101", + "\u00f6,\u00f4,\u00f2,\u00f5,\u0153,\u00f8,\u014d", + "\u00fb,\u00fc,\u00f9,\u016b", + "\u017e", + "\u00e8,\u00ea,\u00eb,\u0119,\u0117,\u0113", + "\u0148", + "\u00ee,\u00ef,\u00ec,\u012f,\u012b", + "\u00e7,\u0107", + "\u00df,\u015b", null, null, null, @@ -780,21 +953,14 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u00fd", + "!text/single_raqm_laqm", + "!text/double_raqm_laqm", null, + "\u010f", null, null, - "Idi", - "\u0160alji", - "Sled", - "Gotov", - "Tra\u017ei", - "Preth", - "Pauza", - "\u010cekaj" - }; - - private static final String[] TEXTS_sl = { - "sl", + "\u017a,\u017c", null, null, null, @@ -802,18 +968,14 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "!text/double_9qm_lqm", - "!text/single_9qm_lqm", - "\u010d", - "\u0161", null, null, null, - "\u017e", null, + "\u0165", + "\u00f1,\u0144", null, null, - "\u0107", null, null, null, @@ -835,19 +997,11 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "!text/single_raqm_laqm", - "!text/double_raqm_laqm" - }; - - private static final String[] TEXTS_new = { - "new", - "\ud805\udc0e\ud805\udc0f\ud805\udc10", null, null, null, null, null, - "\ud805\udc2c\ud805\udc38", null, null, null, @@ -857,66 +1011,35 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0159", + "\u00ff" + }; + + private static final String[] TEXTS_da = { + "da", null, + "\u00e5,\u00e6", + "\u00f8", null, null, null, - "\ud805\udc51", - "\ud805\udc52", - "\ud805\udc53", - "\ud805\udc54", - "\ud805\udc55", - "\ud805\udc56", - "\ud805\udc57", - "\ud805\udc58", - "\ud805\udc59", - "\ud805\udc50", - "1,\ud805\udc4a", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "0", + "!text/double_9qm_lqm", null, null, + "!text/single_9qm_lqm", null, + "\u00e1,\u00e4,\u00e0,\u00e2,\u00e3,\u0101", + "\u00f6,\u00f3,\u00f4,\u00f2,\u00f5,\u0153,\u014d", null, - "?\ud805\udc51\ud805\udc52\ud805\udc53", - "!autoColumnOrder!8,.,\\,,?,!,\ud805\udc4d,\ud805\udc5a,\ud805\udc4c,#,),(,',/,@,:,;,-,\",+", null, null, - "\ud805\udc4d", - "\ud805\udc4b", null, - "!autoColumnOrder!8,\\,,.,?,!,\ud805\udc4d,\ud805\udc5a,\ud805\udc4c,#,),(,/,',@,:,;,-,\",+", null, - "\ud805\udc4d", - "\ud805\udc4b" - }; - - private static final String[] TEXTS_hu = { - "hu", null, - "\u00e1", - "\u00f3,\u00f6,\u0151", - "\u00fa,\u00fc,\u0171", - "\u00e9", - "\u00ed", null, - "!text/double_9qm_rqm", - "!text/single_9qm_rqm", null, null, - "\u00f4,\u00f2,\u00f5,\u0153,\u00f8,\u014d", - "\u00e0,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101", - "\u00fb,\u00f9,\u016b", null, - "\u00e8,\u00ea,\u00eb,\u0119,\u0117,\u0113", - "\u00ee,\u00ef,\u00ec,\u012f,\u012b", null, null, null, @@ -935,24 +1058,18 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "!text/single_raqm_laqm", + "!text/double_raqm_laqm", null, null, null, null, null, - "!text/single_raqm_laqm", - "!text/double_raqm_laqm" - }; - - private static final String[] TEXTS_mr = { - "mr", - "\u0915\u0916\u0917", null, null, null, null, null, - "\u20b9", null, null, null, @@ -961,87 +1078,55 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u00e4", + "\u00e5", + "\u00e6", + "\u00f8", null, null, null, null, null, - "\u0967", - "\u0968", - "\u0969", - "\u096a", - "\u096b", - "\u096c", - "\u096d", - "\u096e", - "\u096f", - "\u0966", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "0", null, null, null, null, - "?\u0967\u0968\u0969" - }; - - private static final String[] TEXTS_bn_IN = { - "bn_IN", - "\u0995\u0996\u0997", null, null, null, null, null, - "\u20b9" - }; - - private static final String[] TEXTS_lt = { - "lt", null, - "\u0105", null, - "\u016b,\u0173", - "\u0117,\u0119", - "\u012f", null, - "\u201d,\u201e,\u201c", - "\u2019,\u201a,\u2018", - "\u010d", - "\u0161", null, null, null, - "\u017e" + "\u00f6" }; - private static final String[] TEXTS_is = { - "is", + private static final String[] TEXTS_de = { + "de", null, - "\u00e1,\u00e4,\u00e6", - "\u00f3,\u00f6", - "\u00fa", - "\u00e9", - "\u00ed", + "\u00e4", + "\u00f6", + null, + "\u00fc", null, "!text/double_9qm_lqm", + null, + null, "!text/single_9qm_lqm", + "\u00df", + "%,\u00e2,\u00e0,\u00e1,\u00e6,\u00e3,\u00e5,\u0101", + "%,\u00f4,\u00f2,\u00f3,\u00f5,\u0153,\u00f8,\u014d", + "%,\u00fb,\u00f9,\u00fa,\u016b", null, null, - "\u00f4,\u00f2,\u00f5,\u0153,\u00f8,\u014d", - "\u00e5,\u00e0,\u00e2,\u00e3,\u0101", - "\u00fc,\u00fb,\u00f9,\u016b", null, - "\u00eb,\u00e8,\u00ea,\u0119,\u0117,\u0113", - "\u00ef,\u00ee,\u00ec,\u012f,\u012b", + null, + null, + "\u015b,\u0161", null, null, null, @@ -1063,12 +1148,12 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "!text/single_raqm_laqm", + "!text/double_raqm_laqm", null, null, null, null, - "\u00fd", - "\u00f0", null, null, null, @@ -1080,7 +1165,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00fe", null, null, null, @@ -1119,27 +1203,49 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00ff" + null, + null, + null, + null, + "\u00e8", + "\u00e9", + "\u00e0", + "\u00fc", + "\u00f6", + "\u00e4" }; - private static final String[] TEXTS_kk = { - "kk", - "\u0410\u0411\u0412", - null, + private static final String[] TEXTS_el = { + "el", + "\u0391\u0392\u0393" + }; + + private static final String[] TEXTS_en = { + "en" + }; + + private static final String[] TEXTS_eo = { + "eo", null, null, null, null, + "\u016d", null, null, null, + "\u0109", null, + "\u015d", null, null, + "\u00fa,\u016f,\u00fb,\u00fc,\u00f9,\u016b,\u0169,\u0171,\u0173,\u00b5", null, null, null, null, + "\u0107,\u010d,\u00e7,\u010b", + "\u00df,\u0161,\u015b,\u0219,\u015f", null, null, null, @@ -1166,6 +1272,7 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u011d", null, null, null, @@ -1174,16 +1281,11 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0451", null, null, null, null, null, - "\u0449", - "\u044b", - "\u044d", - "\u0438", null, null, null, @@ -1206,7 +1308,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u044a", null, null, null, @@ -1222,6 +1323,7 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0135", null, null, null, @@ -1239,15 +1341,13 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0125", + "\u0135", + "\u011f,\u0121,\u0123", null, null, null, null, - "\u04af,\u04b1", - "\u04a3", - "\u0493", - "\u0456", - "\u04e9", null, null, null, @@ -1257,75 +1357,51 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u049b", - "\u04d9", - "\u04bb" + "\u0127", + "\u015d", + "\u011d", + "\u016d", + "\u0109" }; - private static final String[] TEXTS_nl = { - "nl", + private static final String[] TEXTS_es = { + "es", null, - "\u00e1,\u00e4,\u00e2,\u00e0", - "\u00f3,\u00f6", + "\u00e1", + "\u00f3", + "\u00e9", "\u00fa,\u00fc", - "\u00e9,\u00eb,\u00ea,\u00e8", - "\u00ed,\u00ef,\u00ec,\u00ee,\u012f,\u012b,\u0133", + "\u00ed", null, - "!text/double_9qm_rqm", - "!text/single_9qm_rqm", null, null, - "\u00f4,\u00f2,\u00f5,\u0153,\u00f8,\u014d", - "\u00e6,\u00e3,\u00e5,\u0101", - "\u00fb,\u00f9,\u016b", null, - "\u0119,\u0117,\u0113" - }; - - private static final String[] TEXTS_ta_IN = { - "ta_IN", - "\u0ba4\u0bae\u0bbf\u0bb4\u0bcd", null, + "\u00e0,\u00e4,\u00e2,\u00e3,\u00e5,\u0105,\u00e6,\u0101,\u00aa", + "\u00f2,\u00f6,\u00f4,\u00f5,\u00f8,\u0153,\u014d,\u00ba", + "\u00f9,\u00fb,\u016b", null, + "\u00e8,\u00eb,\u00ea,\u0119,\u0117,\u0113", + "\u00f1", + "\u00ef,\u00ec,\u00ee,\u012f,\u012b", null, null, null, - "\u0bf9" - }; - - private static final String[] TEXTS_ja = { - "ja", - "\u2190", null, null, null, null, null, - "\u00a5" - }; - - private static final String[] TEXTS_de = { - "de", null, - "\u00e4", - "\u00f6", - "\u00fc", null, null, null, - "!text/double_9qm_lqm", - "!text/single_9qm_lqm", null, - "\u00df", - "%,\u00f4,\u00f2,\u00f3,\u00f5,\u0153,\u00f8,\u014d", - "%,\u00e2,\u00e0,\u00e1,\u00e6,\u00e3,\u00e5,\u0101", - "%,\u00fb,\u00f9,\u00fa,\u016b", null, null, null, null, null, - "\u015b,\u0161", null, null, null, @@ -1346,12 +1422,11 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "!text/single_raqm_laqm", - "!text/double_raqm_laqm", null, null, null, null, + "\u0144", null, null, null, @@ -1375,15 +1450,31 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "!autoColumnOrder!9,\\\\,?,!,#,),(,/,;,\u00a1,',@,:,-,\\\",+,\\%,&,\u00bf" + }; + + private static final String[] TEXTS_et = { + "et", null, + "\u00e4", + "\u00f6,\u00f5", null, + "\u00fc", null, + "!text/double_9qm_lqm", null, null, + "!text/single_9qm_lqm", + "\u0161", + "\u0101,\u00e0,\u00e1,\u00e2,\u00e3,\u00e5,\u00e6,\u0105", + "\u00f2,\u00f3,\u00f4,\u0153,\u0151,\u00f8", + "\u016b,\u0173,\u00f9,\u00fa,\u00fb,\u016f,\u0171", + "\u017e", null, null, null, null, + "\u00df,\u015b,\u015f", null, null, null, @@ -1401,29 +1492,17 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00e8", - "\u00e9", - "\u00e0", - "\u00fc", - "\u00f6", - "\u00e4" - }; - - private static final String[] TEXTS_ru = { - "ru", - "\u0410\u0411\u0412", null, null, null, null, null, null, - "!text/double_9qm_lqm", - "!text/single_9qm_lqm", null, null, null, null, + "\u017c,\u017a", null, null, null, @@ -1437,9 +1516,23 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u00f5", + "\u00fc", + "\u00f6", + "\u00e4" + }; + + private static final String[] TEXTS_eu = { + "eu", null, + "\u00e1,\u00e0,\u00e4,\u00e2,\u00e3,\u00e5,\u0105,\u00e6,\u0101,\u00aa", + "\u00f3,\u00f2,\u00f6,\u00f4,\u00f5,\u00f8,\u0153,\u014d,\u00ba", + "\u00e9,\u00e8,\u00eb,\u00ea,\u0119,\u0117,\u0113", + "\u00fa,\u00fc,\u00f9,\u00fb,\u016b", + "\u00ed,\u00ef,\u00ec,\u00ee,\u012f,\u012b", null, null, + "\u00e7,\u0107,\u010d", null, null, null, @@ -1447,7 +1540,14 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u00f1,\u0144" + }; + + private static final String[] TEXTS_fi = { + "fi", null, + "\u00e4,\u00e5", + "\u00f6", null, null, null, @@ -1455,22 +1555,22 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0161", + "\u00e6,\u00e0,\u00e1,\u00e2,\u00e3,\u0101", + "\u00f8,\u00f4,\u00f2,\u00f3,\u00f5,\u0153,\u014d", null, + "\u017e", null, null, null, null, + "\u00df,\u015b", null, - "\u0451", null, null, null, null, null, - "\u0449", - "\u044b", - "\u044d", - "\u0438", null, null, null, @@ -1492,8 +1592,8 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u017a,\u017c", null, - "\u044a", null, null, null, @@ -1506,6 +1606,10 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u00f8", + "\u00e5", + "\u00f6", + "\u00e4", null, null, null, @@ -1526,13 +1630,30 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u00e6" + }; + + private static final String[] TEXTS_fr = { + "fr", null, + "\u00e0,\u00e2,%,\u00e6", + "\u00f4,\u0153", + "\u00e9,\u00e8,\u00ea,\u00eb", + "\u00f9,\u00fb,%,\u00fc", + "\u00ee,%,\u00ef", null, null, + "\u00e7", null, null, + "\u00e1,\u00e4,\u00e3,\u00e5,\u0101,\u00aa", + "%,\u00f6,\u00f2,\u00f3,\u00f5,\u00f8,\u014d,\u00ba", + "\u00fa,\u016b", null, + "%,\u0119,\u0117,\u0113", null, + "\u00ec,\u00ed,\u012f,\u012b", + "%,\u0107,\u010d", null, null, null, @@ -1547,33 +1668,14 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\",\u00bb,\u00ab", - "',\u203a,\u2039" - }; - - private static final String[] TEXTS_pl = { - "pl", null, - "\u0105", - "\u00f3", null, - "\u0119", null, null, - "!text/double_9qm_rqm", - "!text/single_9qm_rqm", - "\u0107", - "\u015b", - "\u00f6,\u00f4,\u00f2,\u00f5,\u0153,\u00f8,\u014d", - "\u00e1,\u00e0,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101", null, - "\u017c,\u017a", - "\u00e8,\u00e9,\u00ea,\u00eb,\u0117,\u0113", null, - "\u0144", - "\u00e7,\u010d", - "\u00df,\u0161", null, + "%,\u00ff", null, null, null, @@ -1600,7 +1702,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u017e", null, null, null, @@ -1613,21 +1714,10 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0142", - "\u00f1" - }; - - private static final String[] TEXTS_uk = { - "uk", - "\u0410\u0411\u0412", - null, null, null, null, null, - "\u20b4", - "!text/double_9qm_lqm", - "!text/single_9qm_lqm", null, null, null, @@ -1645,9 +1735,25 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u00fc", + "\u00f6", + "\u00e4", + "\u00e8", + "\u00e9", + "\u00e0" + }; + + private static final String[] TEXTS_gl = { + "gl", null, + "\u00e1,\u00e0,\u00e4,\u00e2,\u00e3,\u00e5,\u0105,\u00e6,\u0101,\u00aa", + "\u00f3,\u00f2,\u00f6,\u00f4,\u00f5,\u00f8,\u0153,\u014d,\u00ba", + "\u00e9,\u00e8,\u00eb,\u00ea,\u0119,\u0117,\u0113", + "\u00fa,\u00fc,\u00f9,\u00fb,\u016b", + "\u00ed,\u00ef,\u00ec,\u00ee,\u012f,\u012b", null, null, + "\u00e7,\u0107,\u010d", null, null, null, @@ -1655,12 +1761,19 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u00f1,\u0144" + }; + + private static final String[] TEXTS_hi = { + "hi", + "\u0915\u0916\u0917", null, null, null, null, null, null, + "\u20b9", null, null, null, @@ -1673,18 +1786,38 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0967", + "\u0968", + "\u0969", + "\u096a", + "\u096b", + "\u096c", + "\u096d", + "\u096e", + "\u096f", + "\u0966", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "0", null, null, - "\u0449", - "\u0456", - "\u0454", - "\u0438", null, + "?\u0967\u0968\u0969", null, + "!autoColumnOrder!8,.,\\,,?,!,\u0965,#,),(,',/,@,:,;,-,\",+", null, null, + "!autoColumnOrder!8,\\,,.,?,!,\u0965,#,),(,/,',@,:,;,-,\",+", null, null, + "\u0964", null, null, null, @@ -1698,6 +1831,11 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0964" + }; + + private static final String[] TEXTS_hi_ZZ = { + "hi_ZZ", null, null, null, @@ -1705,6 +1843,7 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u20b9", null, null, null, @@ -1740,8 +1879,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0491", - "\u0457", null, null, null, @@ -1757,12 +1894,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u044a,\u044b" - }; - - private static final String[] TEXTS_ky = { - "ky", - "\u0410\u0411\u0412", null, null, null, @@ -1811,24 +1942,38 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "Go", + "Send", + "Next", + "Done", + "Search", + "Prev", + "Pause", + "Wait" + }; + + private static final String[] TEXTS_hr = { + "hr", null, - "\u0451", null, null, null, null, null, - "\u0449", - "\u044b", - "\u044d", - "\u0438", + "!text/double_9qm_rqm", null, + "\u010d,\u0107", + "!text/single_9qm_rqm", + "\u0161", null, null, null, + "\u017e", null, null, null, + "\u00e7", + "\u015b,\u00df", null, null, null, @@ -1844,22 +1989,41 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u044a", null, null, null, null, null, null, + "!text/single_raqm_laqm", + "!text/double_raqm_laqm", null, + "\u0111", null, null, + "\u017a,\u017c" + }; + + private static final String[] TEXTS_hu = { + "hu", null, + "\u00e1", + "\u00f3,\u00f6,\u0151", + "\u00e9", + "\u00fa,\u00fc,\u0171", + "\u00ed", + "!text/double_9qm_rqm", null, null, + "!text/single_9qm_rqm", null, + "\u00e0,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101", + "\u00f4,\u00f2,\u00f5,\u0153,\u00f8,\u014d", + "\u00fb,\u00f9,\u016b", null, + "\u00e8,\u00ea,\u00eb,\u0119,\u0117,\u0113", null, + "\u00ee,\u00ef,\u00ec,\u012f,\u012b", null, null, null, @@ -1881,35 +2045,39 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u04af", - "\u04a3", null, null, - "\u04e9" + "!text/single_raqm_laqm", + "!text/double_raqm_laqm" }; - private static final String[] TEXTS_fi = { - "fi", + private static final String[] TEXTS_is = { + "is", null, - "\u00e4,\u00e5", - "\u00f6", + "\u00e1,\u00e4,\u00e6", + "\u00f3,\u00f6", + "\u00e9", + "\u00fa", + "\u00ed", + "!text/double_9qm_lqm", null, null, + "!text/single_9qm_lqm", null, + "\u00e5,\u00e0,\u00e2,\u00e3,\u0101", + "\u00f4,\u00f2,\u00f5,\u0153,\u00f8,\u014d", + "\u00fc,\u00fb,\u00f9,\u016b", null, + "\u00eb,\u00e8,\u00ea,\u0119,\u0117,\u0113", null, + "\u00ef,\u00ee,\u00ec,\u012f,\u012b", null, null, - "\u0161", - "\u00f8,\u00f4,\u00f2,\u00f3,\u00f5,\u0153,\u014d", - "\u00e6,\u00e0,\u00e1,\u00e2,\u00e3,\u0101", null, - "\u017e", null, null, null, null, - "\u00df,\u015b", null, null, null, @@ -1925,9 +2093,11 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u00fd", null, null, null, + "\u00f0", null, null, null, @@ -1937,12 +2107,12 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u017a,\u017c", null, null, null, null, null, + "\u00fe", null, null, null, @@ -1952,10 +2122,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00f8", - "\u00e5", - "\u00f6", - "\u00e4", null, null, null, @@ -1973,36 +2139,34 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00e6" - }; - - private static final String[] TEXTS_eo = { - "eo", null, null, null, - "\u016d", null, null, null, null, null, - "\u0109", - "\u015d", null, null, - "\u00fa,\u016f,\u00fb,\u00fc,\u00f9,\u016b,\u0169,\u0171,\u0173,\u00b5", null, null, null, + "\u00ff" + }; + + private static final String[] TEXTS_iw = { + "iw", + "\u05d0\u05d1\u05d2", null, - "\u0107,\u010d,\u00e7,\u010b", - "\u00df,\u0161,\u015b,\u0219,\u015f", null, null, null, null, + "!text/double_rqm_9qm", + "\u20aa", null, + "!text/single_rqm_9qm", null, null, null, @@ -2024,7 +2188,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u011d", null, null, null, @@ -2046,6 +2209,7 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u2605", null, null, null, @@ -2061,6 +2225,20 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "(|)", + ")|(", + "[|]", + "]|[", + "{|}", + "}|{", + "<|>", + ">|<", + "\u2264|\u2265", + "\u2265|\u2264", + "\u00ab|\u00bb", + "\u00bb|\u00ab", + "\u2039|\u203a", + "\u203a|\u2039", null, null, null, @@ -2079,7 +2257,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0135", null, null, null, @@ -2102,9 +2279,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0125", - "\u0135", - "\u011f,\u0121,\u0123", null, null, null, @@ -2117,41 +2291,28 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0127", - "\u015d", - "\u011d", - "\u016d", - "\u0109" + null, + null, + "\u00b1,\ufb29" }; - private static final String[] TEXTS_sk = { - "sk", - null, - "\u00e1,\u00e4", - "\u00f4,\u00f3", - "\u00fa", - "\u00e9", - "\u00ed", + private static final String[] TEXTS_ka = { + "ka", + "\u10d0\u10d1\u10d2", null, - "!text/double_9qm_lqm", - "!text/single_9qm_lqm", - "\u010d", - "\u0161", - "\u00f6,\u00f2,\u00f5,\u0153,\u0151,\u00f8", - "\u0101,\u00e0,\u00e2,\u00e3,\u00e5,\u00e6,\u0105", - "\u016f,\u00fc,\u016b,\u0173,\u00f9,\u00fb,\u0171", - "\u017e", - "\u011b,\u0113,\u0117,\u00e8,\u00ea,\u00eb,\u0119", - "\u012b,\u012f,\u00ec,\u00ee,\u00ef,\u0131", - "\u0148", - "\u00e7,\u0107", - "\u00df,\u015b,\u015f", null, null, null, null, + "!text/double_9qm_lqm", null, null, + "!text/single_9qm_lqm" + }; + + private static final String[] TEXTS_kk = { + "kk", + "\u0410\u0411\u0412", null, null, null, @@ -2166,14 +2327,9 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "!text/single_raqm_laqm", - "!text/double_raqm_laqm", - "\u00fd", - "\u010f", null, null, null, - "\u017c,\u017a", null, null, null, @@ -2181,13 +2337,10 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0165", null, null, null, null, - "\u013e,\u013a", - "\u0146,\u00f1,\u0144", null, null, null, @@ -2209,9 +2362,14 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0451", null, null, null, + "\u0449", + "\u044b", + "\u044d", + "\u0438", null, null, null, @@ -2220,7 +2378,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00ff", null, null, null, @@ -2228,7 +2385,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0155", null, null, null, @@ -2239,6 +2395,7 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u044a", null, null, null, @@ -2253,8 +2410,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u013c,\u0142", - "\u0159,\u0157", null, null, null, @@ -2270,23 +2425,16 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0163" - }; - - private static final String[] TEXTS_ml = { - "ml", - "\u0d05", null, null, null, null, null, - "\u20b9" - }; - - private static final String[] TEXTS_ckb = { - "ckb", - "\u0623\u200c\u0628\u200c\u062c", + "\u04af,\u04b1", + "\u04a3", + "\u0493", + "\u0456", + "\u04e9", null, null, null, @@ -2301,45 +2449,26 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u049b", + "\u04d9", + "\u04bb" + }; + + private static final String[] TEXTS_km = { + "km", + "\u1780\u1781\u1782", null, null, null, null, null, - "\u0661", - "\u0662", - "\u0663", - "\u0664", - "\u0665", - "\u0666", - "\u0667", - "\u0668", - "\u0669", - "\u0660", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "0,\u066b,\u066c", null, null, null, null, - "\u0663\u0662\u0661\u061f", - "\u061f", null, null, - "\u060c", - ".", null, - "\u061f", - "\u2605,\u066d", - "\u060c", null, null, null, @@ -2352,26 +2481,9 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "(|)", - ")|(", - "[|]", - "]|[", - "{|}", - "}|{", - "<|>", - ">|<", - "\u2264|\u2265", - "\u2265|\u2264", - "\u00ab|\u00bb", - "\u00bb|\u00ab", - "\u2039|\u203a", - "\u203a|\u2039", null, - "?,\u00bf", null, null, - "!fixedColumnOrder!4,:,!,\u061f,\u061b,-,\\\",\\'", - "\u0651", null, null, null, @@ -2389,39 +2501,15 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - ";", - "\\%,\u2030", - "\u266a", - "!fixedColumnOrder!4,\ufd3e|\ufd3f,!text/keyspecs_left_parenthesis_more_keys", - "!fixedColumnOrder!4,\ufd3f|\ufd3e,!text/keyspecs_right_parenthesis_more_keys", - "!fixedColumnOrder!7, \u0655\u25cc|\u0655, \u0654\u25cc|\u0654, \u0652\u25cc|\u0652, \u064d\u25cc|\u064d, \u064c\u25cc|\u064c, \u064b\u25cc|\u064b, \u0651\u25cc|\u0651, \u0656\u25cc|\u0656, \u0670\u25cc|\u0670, \u0653\u25cc|\u0653, \u0650\u25cc|\u0650, \u064f\u25cc|\u064f, \u064e\u25cc|\u064e,\u0640|\u0640", - "\u061f", - "\u061b", - "\u066a", - "\u0651", - "\u061f" - }; - - private static final String[] TEXTS_az = { - "az", null, - "\u00e2,\u00e4,\u00e1", - "\u00f6,\u00f4,\u0153,\u00f2,\u00f3,\u00f5,\u00f8,\u014d", - "\u00fc,\u00fb,\u00f9,\u00fa,\u016b", - "\u0259,\u00e9", - "\u0131,\u00ee,\u00ef,\u00ec,\u00ed,\u012f,\u012b", null, null, null, - "\u00e7,\u0107,\u010d", - "\u015f,\u00df,\u015b,\u0161", null, null, null, - "\u017e", null, null, - "\u0148,\u00f1", null, null, null, @@ -2446,33 +2534,18 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00fd", null, null, null, - "\u011f" - }; - - private static final String[] TEXTS_zz = { - "zz", null, - "\u00e0,\u00e1,\u00e2,\u00e3,\u00e4,\u00e5,\u00e6,\u0101,\u0103,\u0105,\u00aa", - "\u00f2,\u00f3,\u00f4,\u00f5,\u00f6,\u00f8,\u014d,\u014f,\u0151,\u0153,\u00ba", - "\u00f9,\u00fa,\u00fb,\u00fc,\u0169,\u016b,\u016d,\u016f,\u0171,\u0173", - "\u00e8,\u00e9,\u00ea,\u00eb,\u0113,\u0115,\u0117,\u0119,\u011b", - "\u00ec,\u00ed,\u00ee,\u00ef,\u0129,\u012b,\u012d,\u012f,\u0131,\u0133", null, null, null, - "\u00e7,\u0107,\u0109,\u010b,\u010d", - "\u00df,\u015b,\u015d,\u015f,\u0161,\u017f", null, null, null, - "\u017a,\u017c,\u017e", null, null, - "\u00f1,\u0144,\u0146,\u0148,\u0149,\u014b", null, null, null, @@ -2497,11 +2570,8 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00fd,\u0177,\u00ff,\u0133", - "\u010f,\u0111,\u00f0", null, null, - "\u011d,\u011f,\u0121,\u0123", null, null, null, @@ -2510,12 +2580,10 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00fe,\u0163,\u0165,\u0167", null, null, null, null, - "\u013a,\u013c,\u013e,\u0140,\u0142", null, null, null, @@ -2528,12 +2596,19 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u17db,\u00a2,\u00a3,\u20ac,\u00a5,\u20b1" + }; + + private static final String[] TEXTS_kn = { + "kn", + "\u0c85\u0c86\u0c87", null, null, null, null, null, null, + "\u20b9", null, null, null, @@ -2546,9 +2621,35 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0ce7", + "\u0ce8", + "\u0ce9", + "\u0cea", + "\u0ceb", + "\u0cec", + "\u0ced", + "\u0cee", + "\u0cef", + "\u0ce6", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "0", null, null, null, + "?\u0ce7\u0ce8\u0ce9" + }; + + private static final String[] TEXTS_ky = { + "ky", + "\u0410\u0411\u0412", null, null, null, @@ -2557,7 +2658,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0155,\u0157,\u0159", null, null, null, @@ -2579,12 +2679,9 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0125", - "\u0135", null, null, null, - "\u0137,\u0138", null, null, null, @@ -2600,30 +2697,18 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0175" - }; - - private static final String[] TEXTS_pt = { - "pt", null, - "\u00e1,\u00e3,\u00e0,\u00e2", - "\u00f3,\u00f5,\u00f4", - "\u00fa,\u00fc", - "\u00e9,\u00ea", - "\u00ed", null, + "\u0451", null, null, - "\u00e7", null, - "\u00f2,\u00f6,\u0153,\u00f8,\u014d,\u00ba", - "\u00e4,\u00e5,\u00e6,\u00aa", - "\u00f9,\u00fb,\u016b", + "\u0449", + "\u044b", + "\u044d", + "\u0438", null, - "\u00e8,\u0119,\u0117,\u0113,\u00eb", - "\u00ee,\u00ec,\u00ef,\u012f,\u012b", null, - "\u010d,\u0107", null, null, null, @@ -2647,6 +2732,7 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u044a", null, null, null, @@ -2681,23 +2767,66 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u04af", + "\u04a3", null, null, + "\u04e9" + }; + + private static final String[] TEXTS_lo = { + "lo", + "\u0e81\u0e82\u0e84", null, null, null, null, null, null, + "\u20ad" + }; + + private static final String[] TEXTS_lt = { + "lt", null, + "\u0105", null, + "\u0117,\u0119", + "\u016b,\u0173", + "\u012f", + "\u201d,\u201e,\u201c", null, + "\u010d", + "\u2019,\u201a,\u2018", + "\u0161", null, null, null, + "\u017e" + }; + + private static final String[] TEXTS_lv = { + "lv", null, + "\u0101", null, + "\u0113", + "\u016b", + "\u012b", + "!text/double_9qm_lqm", null, + "\u010d", + "!text/single_9qm_lqm", + "\u0161", + "\u00e0,\u00e1,\u00e2,\u00e3,\u00e4,\u00e5,\u00e6,\u0105", + "\u014d,\u00f2,\u00f3,\u00f4,\u00f5,\u00f6,\u0153,\u0151,\u00f8", + "\u0173,\u00f9,\u00fa,\u00fb,\u00fc,\u016f,\u0171", + "\u017e", + "\u0117,\u00e8,\u00e9,\u00ea,\u00eb,\u0119,\u011b", + "\u0146", + "\u012f,\u00ec,\u00ed,\u00ee,\u00ef,\u0131", + "\u00e7,\u0107", + "\u00df,\u015b,\u015f", null, null, null, @@ -2706,27 +2835,14 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00e7" - }; - - private static final String[] TEXTS_rm = { - "rm", null, null, - "\u00f2,\u00f3,\u00f6,\u00f4,\u00f5,\u0153,\u00f8" - }; - - private static final String[] TEXTS_be = { - "be", - "\u0410\u0411\u0412", null, null, null, null, null, null, - "!text/double_9qm_lqm", - "!text/single_9qm_lqm", null, null, null, @@ -2737,6 +2853,8 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0123", + "\u017c,\u017a", null, null, null, @@ -2747,7 +2865,9 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u013c", null, + "\u00f1,\u0144", null, null, null, @@ -2768,16 +2888,11 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0451", null, null, null, null, null, - "\u045e", - "\u044b", - "\u044d", - "\u0456", null, null, null, @@ -2800,37 +2915,38 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u044a" - }; - - private static final String[] TEXTS_en = { - "en" - }; - - private static final String[] TEXTS_hi_ZZ = { - "hi_ZZ", null, null, null, null, null, null, - "\u20b9", null, null, null, + "\u011f", null, null, null, null, null, + "\u0137", + "\u0142,\u013a,\u013e", + "\u0157,\u0159,\u0155" + }; + + private static final String[] TEXTS_mk = { + "mk", + "\u0410\u0411\u0412", null, null, null, null, null, + "!text/double_9qm_lqm", null, null, + "!text/single_9qm_lqm", null, null, null, @@ -2871,6 +2987,7 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0450", null, null, null, @@ -2895,32 +3012,12 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "Go", - "Send", - "Next", - "Done", - "Search", - "Prev", - "Pause", - "Wait" - }; - - private static final String[] TEXTS_ka = { - "ka", - "\u10d0\u10d1\u10d2", null, null, null, null, null, null, - "!text/double_9qm_lqm", - "!text/single_9qm_lqm" - }; - - private static final String[] TEXTS_my = { - "my", - "\u1000\u1001\u1002", null, null, null, @@ -2966,27 +3063,47 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u045d", + "\u0455", + "\u045c", + "\u0437", + "\u0453" + }; + + private static final String[] TEXTS_ml = { + "ml", + "\u0d05", null, null, - "\u104a", - "\u104b", null, null, null, null, - "\u104b", + "\u20b9" + }; + + private static final String[] TEXTS_mn = { + "mn", + "\u0410\u0411\u0412", null, null, null, null, null, null, + "\u20ae" + }; + + private static final String[] TEXTS_mr = { + "mr", + "\u0915\u0916\u0917", null, null, null, null, null, null, + "\u20b9", null, null, null, @@ -2999,13 +3116,36 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0967", + "\u0968", + "\u0969", + "\u096a", + "\u096b", + "\u096c", + "\u096d", + "\u096e", + "\u096f", + "\u0966", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "0", null, - "!autoColumnOrder!9,\u104a,.,?,!,#,),(,/,;,...,',@,:,-,\\\",+,\\%,&", null, null, + "?\u0967\u0968\u0969" + }; + + private static final String[] TEXTS_my = { + "my", + "\u1000\u1001\u1002", null, - "\\", - "\u104a", null, null, null, @@ -3050,16 +3190,12 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "!autoColumnOrder!8,.,',#,),(,/,;,@,...,:,-,\\\",+,\\%,&" - }; - - private static final String[] TEXTS_km = { - "km", - "\u1780\u1781\u1782", null, null, null, + "\u104a", null, + "\u104b", null, null, null, @@ -3073,7 +3209,9 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u104b", null, + "\\", null, null, null, @@ -3088,7 +3226,9 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u104a", null, + "!autoColumnOrder!9,\u104a,.,?,!,#,),(,/,;,...,',@,:,-,\\\",+,\\%,&", null, null, null, @@ -3118,10 +3258,21 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "!autoColumnOrder!8,.,',#,),(,/,;,@,...,:,-,\\\",+,\\%,&" + }; + + private static final String[] TEXTS_nb = { + "nb", null, + "\u00e5,\u00e6,\u00e4,\u00e0,\u00e1,\u00e2,\u00e3,\u0101", + "\u00f8,\u00f6,\u00f4,\u00f2,\u00f3,\u00f5,\u0153,\u014d", + "\u00e9,\u00e8,\u00ea,\u00eb,\u0119,\u0117,\u0113", + "\u00fc,\u00fb,\u00f9,\u00fa,\u016b", null, + "!text/double_9qm_rqm", null, null, + "!text/single_9qm_rqm", null, null, null, @@ -3173,6 +3324,10 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u00f6", + "\u00e5", + "\u00f8", + "\u00e6", null, null, null, @@ -3193,47 +3348,63 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u00e4" + }; + + private static final String[] TEXTS_ne = { + "ne", + "\u0915\u0916\u0917", null, null, null, null, null, null, + "\u0930\u0941.", null, null, - "\u17db,\u00a2,\u00a3,\u20ac,\u00a5,\u20b1" - }; - - private static final String[] TEXTS_it = { - "it", null, - "\u00e0", - "\u00f2", - "\u00f9", - "\u00e8,\u00e9", - "\u00ec", null, null, null, null, null, - "\u00f3,\u00f4,\u00f6,\u00f5,\u0153,\u00f8,\u014d,\u00ba", - "\u00e1,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101,\u00aa", - "\u00fa,\u00fb,\u00fc,\u016b", null, - "\u00ea,\u00eb,\u0119,\u0117,\u0113,\u0259", - "\u00ed,\u00ee,\u00ef,\u012f,\u012b", null, null, null, + "\u0967", + "\u0968", + "\u0969", + "\u096a", + "\u096b", + "\u096c", + "\u096d", + "\u096e", + "\u096f", + "\u0966", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "0", null, null, null, + "?\u0967\u0968\u0969", null, + "!autoColumnOrder!8,.,\\,,?,!,\u0965,#,),(,',/,@,:,;,-,\",+", null, null, + "!autoColumnOrder!8,\\,,.,?,!,\u0965,#,),(,/,',@,:,;,-,\",+", null, null, + "\u0964", null, null, null, @@ -3247,12 +3418,19 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0964" + }; + + private static final String[] TEXTS_new = { + "new", + "\ud805\udc0e\ud805\udc0f\ud805\udc10", null, null, null, null, null, null, + "\ud805\udc2c\ud805\udc38", null, null, null, @@ -3265,14 +3443,40 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\ud805\udc51", + "\ud805\udc52", + "\ud805\udc53", + "\ud805\udc54", + "\ud805\udc55", + "\ud805\udc56", + "\ud805\udc57", + "\ud805\udc58", + "\ud805\udc59", + "\ud805\udc50", + "1,\ud805\udc4a", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "0", null, null, null, + "?\ud805\udc51\ud805\udc52\ud805\udc53", null, + "!autoColumnOrder!8,.,\\,,?,!,\ud805\udc4d,\ud805\udc5a,\ud805\udc4c,#,),(,',/,@,:,;,-,\",+", null, null, + "!autoColumnOrder!8,\\,,.,?,!,\ud805\udc4d,\ud805\udc5a,\ud805\udc4c,#,),(,/,',@,:,;,-,\",+", + "\ud805\udc4d", null, + "\ud805\udc4b", null, + "\ud805\udc4d", null, null, null, @@ -3284,42 +3488,63 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\ud805\udc4b" + }; + + private static final String[] TEXTS_nl = { + "nl", null, + "\u00e1,\u00e4,\u00e2,\u00e0", + "\u00f3,\u00f6", + "\u00e9,\u00eb,\u00ea,\u00e8", + "\u00fa,\u00fc", + "\u00ed,\u00ef,\u00ec,\u00ee,\u012f,\u012b,\u0133", + "!text/double_9qm_rqm", null, null, + "!text/single_9qm_rqm", null, + "\u00e6,\u00e3,\u00e5,\u0101", + "\u00f4,\u00f2,\u00f5,\u0153,\u00f8,\u014d", + "\u00fb,\u00f9,\u016b", null, + "\u0119,\u0117,\u0113" + }; + + private static final String[] TEXTS_pl = { + "pl", null, + "\u0105", + "\u00f3", + "\u0119", null, null, + "!text/double_9qm_rqm", null, + "\u0107", + "!text/single_9qm_rqm", + "\u015b", + "\u00e1,\u00e0,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101", + "\u00f6,\u00f4,\u00f2,\u00f5,\u0153,\u00f8,\u014d", null, + "\u017c,\u017a", + "\u00e8,\u00e9,\u00ea,\u00eb,\u0117,\u0113", + "\u0144", null, + "\u00e7,\u010d", + "\u00df,\u0161", null, null, null, null, null, null, - "\u00e8", - "\u00e9", - "\u00e0", - "\u00fc", - "\u00f6", - "\u00e4" - }; - - private static final String[] TEXTS_sr = { - "sr", - "\u0410\u0411\u0412", null, null, null, null, null, null, - "!text/double_9qm_lqm", - "!text/single_9qm_lqm", null, null, null, @@ -3335,6 +3560,7 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u017e", null, null, null, @@ -3345,23 +3571,38 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0142", null, + "\u00f1" + }; + + private static final String[] TEXTS_pt = { + "pt", null, + "\u00e1,\u00e3,\u00e0,\u00e2", + "\u00f3,\u00f5,\u00f4", + "\u00e9,\u00ea", + "\u00fa,\u00fc", + "\u00ed", null, null, + "\u00e7", null, null, - "!text/single_raqm_laqm", - "!text/double_raqm_laqm", + "\u00e4,\u00e5,\u00e6,\u00aa", + "\u00f2,\u00f6,\u0153,\u00f8,\u014d,\u00ba", + "\u00f9,\u00fb,\u016b", null, + "\u00e8,\u0119,\u0117,\u0113,\u00eb", null, + "\u00ee,\u00ec,\u00ef,\u012f,\u012b", + "\u010d,\u0107", null, null, null, null, null, null, - "\u0450", null, null, null, @@ -3425,15 +3666,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u045d", - "\u0437", - "\u045b", - "\u0455", - "\u0452" - }; - - private static final String[] TEXTS_hr = { - "hr", null, null, null, @@ -3441,29 +3673,40 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "!text/double_9qm_rqm", - "!text/single_9qm_rqm", - "\u010d,\u0107", - "\u0161", null, null, + "\u00e7" + }; + + private static final String[] TEXTS_rm = { + "rm", null, - "\u017e", null, + "\u00f2,\u00f3,\u00f6,\u00f4,\u00f5,\u0153,\u00f8" + }; + + private static final String[] TEXTS_ro = { + "ro", null, + "\u0103,\u00e2", null, - "\u00e7", - "\u015b,\u00df", null, null, + "\u00ee", + "!text/double_9qm_rqm", null, null, + "!text/single_9qm_rqm", + "\u0219", + "\u00e3,\u00e0,\u00e1,\u00e4,\u00e6,\u00e5,\u0101", null, null, null, null, null, + "\u00ef,\u00ec,\u00ed,\u012f,\u012b", null, + "\u00df,\u015b,\u0161", null, null, null, @@ -3474,28 +3717,14 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "!text/single_raqm_laqm", - "!text/double_raqm_laqm", null, - "\u0111", null, null, null, - "\u017a,\u017c" - }; - - private static final String[] TEXTS_tl = { - "tl", null, - "\u00e1,\u00e0,\u00e4,\u00e2,\u00e3,\u00e5,\u0105,\u00e6,\u0101,\u00aa", - "\u00f3,\u00f2,\u00f6,\u00f4,\u00f5,\u00f8,\u0153,\u014d,\u00ba", - "\u00fa,\u00fc,\u00f9,\u00fb,\u016b", - "\u00e9,\u00e8,\u00eb,\u00ea,\u0119,\u0117,\u0113", - "\u00ed,\u00ef,\u00ec,\u00ee,\u012f,\u012b", null, null, null, - "\u00e7,\u0107,\u010d", null, null, null, @@ -3503,54 +3732,61 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00f1,\u0144" - }; - - private static final String[] TEXTS_zu = { - "zu", null, - "\u00e0,\u00e1,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101", - "\u00f3,\u00f4,\u00f6,\u00f2,\u0153,\u00f8,\u014d,\u00f5", - "\u00fa,\u00fb,\u00fc,\u00f9,\u016b", - "\u00e9,\u00e8,\u00ea,\u00eb,\u0113", - "\u00ed,\u00ee,\u00ef,\u012b,\u00ec", null, null, null, - "\u00e7", - "\u00df", null, null, null, null, null, null, - "\u00f1" + null, + null, + null, + null, + "\u021b" }; - private static final String[] TEXTS_et = { - "et", + private static final String[] TEXTS_si = { + "si", + "\u0d85,\u0d86", null, - "\u00e4", - "\u00f6,\u00f5", - "\u00fc", null, null, null, + null, + null, + "\u0dbb\u0dd4" + }; + + private static final String[] TEXTS_sk = { + "sk", + null, + "\u00e1,\u00e4", + "\u00f4,\u00f3", + "\u00e9", + "\u00fa", + "\u00ed", "!text/double_9qm_lqm", - "!text/single_9qm_lqm", null, + "\u010d", + "!text/single_9qm_lqm", "\u0161", - "\u00f2,\u00f3,\u00f4,\u0153,\u0151,\u00f8", - "\u0101,\u00e0,\u00e1,\u00e2,\u00e3,\u00e5,\u00e6,\u0105", - "\u016b,\u0173,\u00f9,\u00fa,\u00fb,\u016f,\u0171", + "\u0101,\u00e0,\u00e2,\u00e3,\u00e5,\u00e6,\u0105", + "\u00f6,\u00f2,\u00f5,\u0153,\u0151,\u00f8", + "\u016f,\u00fc,\u016b,\u0173,\u00f9,\u00fb,\u0171", "\u017e", + "\u011b,\u0113,\u0117,\u00e8,\u00ea,\u00eb,\u0119", + "\u0148", + "\u012b,\u012f,\u00ec,\u00ee,\u00ef,\u0131", + "\u00e7,\u0107", + "\u00df,\u015b,\u015f", null, null, null, null, - "\u00df,\u015b,\u015f", - null, null, null, null, @@ -3567,9 +3803,14 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u00fd", + "!text/single_raqm_laqm", + "!text/double_raqm_laqm", null, + "\u010f", null, null, + "\u017c,\u017a", null, null, null, @@ -3577,10 +3818,12 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u017c,\u017a", null, null, null, + "\u013e,\u013a", + "\u0165", + "\u0146,\u00f1,\u0144", null, null, null, @@ -3592,23 +3835,11 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00f5", - "\u00fc", - "\u00f6", - "\u00e4" - }; - - private static final String[] TEXTS_iw = { - "iw", - "\u05d0\u05d1\u05d2", null, null, null, null, null, - "\u20aa", - "!text/double_rqm_9qm", - "!text/single_rqm_9qm", null, null, null, @@ -3630,6 +3861,8 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0155", + "\u00ff", null, null, null, @@ -3652,9 +3885,10 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u2605", null, null, + "\u013c,\u0142", + "\u0159,\u0157", null, null, null, @@ -3666,37 +3900,34 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "(|)", - ")|(", - "[|]", - "]|[", - "{|}", - "}|{", - "<|>", - ">|<", - "\u2264|\u2265", - "\u2265|\u2264", - "\u00ab|\u00bb", - "\u00bb|\u00ab", - "\u2039|\u203a", - "\u203a|\u2039", null, null, null, null, + "\u0163" + }; + + private static final String[] TEXTS_sl = { + "sl", null, null, null, null, null, null, + "!text/double_9qm_lqm", null, + "\u010d", + "!text/single_9qm_lqm", + "\u0161", null, null, null, + "\u017e", null, null, null, + "\u0107", null, null, null, @@ -3719,30 +3950,32 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "!text/single_raqm_laqm", + "!text/double_raqm_laqm" + }; + + private static final String[] TEXTS_sr = { + "sr", + "\u0410\u0411\u0412", null, null, null, null, null, + "!text/double_9qm_lqm", null, null, + "!text/single_9qm_lqm", null, null, null, null, null, - "\u00b1,\ufb29" - }; - - private static final String[] TEXTS_kn = { - "kn", - "\u0c85\u0c86\u0c87", null, null, null, null, null, - "\u20b9", null, null, null, @@ -3756,39 +3989,16 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0ce7", - "\u0ce8", - "\u0ce9", - "\u0cea", - "\u0ceb", - "\u0cec", - "\u0ced", - "\u0cee", - "\u0cef", - "\u0ce6", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "0", null, null, null, null, - "?\u0ce7\u0ce8\u0ce9" - }; - - private static final String[] TEXTS_bod = { - "bod", null, null, null, null, + "!text/single_raqm_laqm", + "!text/double_raqm_laqm", null, null, null, @@ -3796,6 +4006,7 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0450", null, null, null, @@ -3805,37 +4016,11 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0f21", - "\u0f22", - "\u0f23", - "\u0f24", - "\u0f25", - "\u0f26", - "\u0f27", - "\u0f28", - "\u0f29", - "\u0f20", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "0" - }; - - private static final String[] TEXTS_ne = { - "ne", - "\u0915\u0916\u0917", null, null, null, null, null, - "\u0930\u0941.", null, null, null, @@ -3849,64 +4034,23 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0967", - "\u0968", - "\u0969", - "\u096a", - "\u096b", - "\u096c", - "\u096d", - "\u096e", - "\u096f", - "\u0966", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "0", null, null, null, null, - "?\u0967\u0968\u0969", - "!autoColumnOrder!8,.,\\,,?,!,\u0965,#,),(,',/,@,:,;,-,\",+", null, null, null, - "\u0964", null, - "!autoColumnOrder!8,\\,,.,?,!,\u0965,#,),(,/,',@,:,;,-,\",+", null, null, - "\u0964" - }; - - private static final String[] TEXTS_fr = { - "fr", null, - "\u00e0,\u00e2,%,\u00e6", - "\u00f4,\u0153", - "\u00f9,\u00fb,%,\u00fc", - "\u00e9,\u00e8,\u00ea,\u00eb", - "\u00ee,%,\u00ef", null, null, null, - "\u00e7", null, - "%,\u00f6,\u00f2,\u00f3,\u00f5,\u00f8,\u014d,\u00ba", - "\u00e1,\u00e4,\u00e3,\u00e5,\u0101,\u00aa", - "\u00fa,\u016b", null, - "%,\u0119,\u0117,\u0113", - "\u00ec,\u00ed,\u012f,\u012b", null, - "%,\u0107,\u010d", null, null, null, @@ -3930,8 +4074,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "%,\u00ff", - null, null, null, null, @@ -3940,16 +4082,30 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u045d", + "\u0437", + "\u045b", + "\u0455", + "\u0452" + }; + + private static final String[] TEXTS_sr___Latn = { + "sr__#Latn", null, null, null, + "\u00e8", null, + "\u00ec", null, null, + "\u010d,\u0107,%", null, + "\u0161,%", null, null, null, + "\u017e,%", null, null, null, @@ -3979,57 +4135,29 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0111,%", null, null, null, null, - "\u00fc", - "\u00f6", - "\u00e4", - "\u00e8", - "\u00e9", - "\u00e0" - }; - - private static final String[] TEXTS_el = { - "el", - "\u0391\u0392\u0393" - }; - - private static final String[] TEXTS_bg = { - "bg", - "\u0410\u0411\u0412", null, null, null, null, null, null, - "!text/double_9qm_lqm" - }; - - private static final String[] TEXTS_ro = { - "ro", null, - "\u0103,\u00e2", null, null, null, - "\u00ee", null, - "!text/double_9qm_rqm", - "!text/single_9qm_rqm", null, - "\u0219", null, - "\u00e3,\u00e0,\u00e1,\u00e4,\u00e6,\u00e5,\u0101", null, null, null, - "\u00ef,\u00ec,\u00ed,\u012f,\u012b", null, null, - "\u00df,\u015b,\u0161", null, null, null, @@ -4065,89 +4193,58 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u021b" - }; - - private static final String[] TEXTS_hi = { - "hi", - "\u0915\u0916\u0917", null, null, null, null, + "Idi", + "\u0160alji", + "Sled", + "Gotov", + "Tra\u017ei", + "Preth", + "Pauza", + "\u010cekaj" + }; + + private static final String[] TEXTS_sr_ZZ = { + "sr_ZZ", null, - "\u20b9", null, null, + "\u00e8", null, + "\u00ec", null, null, + "\u010d,\u0107,%", null, + "\u0161,%", null, null, null, + "\u017e,%", null, null, null, null, - "\u0967", - "\u0968", - "\u0969", - "\u096a", - "\u096b", - "\u096c", - "\u096d", - "\u096e", - "\u096f", - "\u0966", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "0", null, null, null, null, - "?\u0967\u0968\u0969", - "!autoColumnOrder!8,.,\\,,?,!,\u0965,#,),(,',/,@,:,;,-,\",+", null, null, null, - "\u0964", null, - "!autoColumnOrder!8,\\,,.,?,!,\u0965,#,),(,/,',@,:,;,-,\",+", null, null, - "\u0964" - }; - - private static final String[] TEXTS_ca = { - "ca", null, - "\u00e0", - "\u00f2,\u00f3", - "\u00fa,\u00fc", - "\u00e8,\u00e9", - "\u00ed,\u00ef", null, null, null, - "\u00e7", null, - "\u00f6,\u00f4,\u00f5,\u00f8,\u0153,\u014d,\u00ba", - "\u00e1,\u00e4,\u00e2,\u00e3,\u00e5,\u0105,\u00e6,\u0101,\u00aa", - "\u00f9,\u00fb,\u016b", null, - "\u00eb,\u00ea,\u0119,\u0117,\u0113", - "\u00ec,\u00ee,\u012f,\u012b", null, - "\u0107,\u010d", null, null, null, @@ -4156,6 +4253,7 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0111,%", null, null, null, @@ -4189,7 +4287,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "l\u00b7l", null, null, null, @@ -4209,7 +4306,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "!autoColumnOrder!9,\\\\,?,!,\u00b7,#,),(,/,;,',@,:,-,\\\",+,\\%,&", null, null, null, @@ -4219,7 +4315,22 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "Idi", + "\u0160alji", + "Sled", + "Gotov", + "Tra\u017ei", + "Preth", + "Pauza", + "\u010cekaj" + }; + + private static final String[] TEXTS_sv = { + "sv", null, + "\u00e4,\u00e5", + "\u00f6", + "\u00e9", null, null, null, @@ -4227,10 +4338,12 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u00e6,\u00e1,\u00e0,\u00e2,\u0105,\u00e3", + "\u00f8,\u0153,\u00f3,\u00f2,\u00f4,\u00f5,\u014d", null, null, + "\u00e8,\u00ea,\u00eb,\u0119", null, - "\u00e7", null, null, null, @@ -4255,52 +4368,36 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "!text/single_raqm_laqm", + "!text/double_raqm_laqm", null, null, null, null, - "!autoColumnOrder!8,\\\\,',\u00b7,#,),(,/,;,@,:,-,\\\",+,\\%,&" - }; - - private static final String[] TEXTS_mn = { - "mn", - "\u0410\u0411\u0412", null, null, null, null, null, - "\u20ae" - }; - - private static final String[] TEXTS_si = { - "si", - "\u0d85,\u0d86", null, null, null, null, null, - "\u0dbb\u0dd4" - }; - - private static final String[] TEXTS_sr___Latn = { - "sr__#Latn", null, null, null, null, - "\u00e8", - "\u00ec", + "\u00f8,\u0153", + "\u00e5", + "\u00f6", + "\u00e4", null, null, null, - "\u010d,\u0107,%", - "\u0161,%", null, null, null, - "\u017e,%", null, null, null, @@ -4315,21 +4412,33 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u00e6" + }; + + private static final String[] TEXTS_sw = { + "sw", null, + "\u00e0,\u00e1,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101", + "\u00f4,\u00f6,\u00f2,\u00f3,\u0153,\u00f8,\u014d,\u00f5", + "\u00e8,\u00e9,\u00ea,\u00eb,\u0113", + "\u00fb,\u00fc,\u00f9,\u00fa,\u016b", + "\u00ee,\u00ef,\u00ed,\u012b,\u00ec", null, null, + "\u00e7", null, + "\u00df", null, null, null, null, null, + "\u00f1", null, null, null, null, null, - "\u0111,%", null, null, null, @@ -4354,45 +4463,73 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "g\\'" + }; + + private static final String[] TEXTS_ta_IN = { + "ta_IN", + "\u0ba4\u0bae\u0bbf\u0bb4\u0bcd", null, null, null, null, null, null, + "\u0bf9" + }; + + private static final String[] TEXTS_ta_LK = { + "ta_LK", + "\u0ba4\u0bae\u0bbf\u0bb4\u0bcd", null, null, null, null, null, null, + "\u0dbb\u0dd4" + }; + + private static final String[] TEXTS_ta_SG = { + "ta_SG", + "\u0ba4\u0bae\u0bbf\u0bb4\u0bcd" + }; + + private static final String[] TEXTS_te = { + "te", + "\u0c05\u0c06\u0c07", null, null, null, null, null, null, - "Idi", - "\u0160alji", - "Sled", - "Gotov", - "Tra\u017ei", - "Preth", - "Pauza", - "\u010cekaj" + "\u20b9" }; - private static final String[] TEXTS_ko = { - "ko", - "\uac00\ub098\ub2e4", + private static final String[] TEXTS_th = { + "th", + "\u0e01\u0e02\u0e04", null, null, null, null, null, - "\u20a9", + null, + "\u0e3f" + }; + + private static final String[] TEXTS_tl = { + "tl", + null, + "\u00e1,\u00e0,\u00e4,\u00e2,\u00e3,\u00e5,\u0105,\u00e6,\u0101,\u00aa", + "\u00f3,\u00f2,\u00f6,\u00f4,\u00f5,\u00f8,\u0153,\u014d,\u00ba", + "\u00e9,\u00e8,\u00eb,\u00ea,\u0119,\u0117,\u0113", + "\u00fa,\u00fc,\u00f9,\u00fb,\u016b", + "\u00ed,\u00ef,\u00ec,\u00ee,\u012f,\u012b", null, null, + "\u00e7,\u0107,\u010d", null, null, null, @@ -4400,16 +4537,31 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u00f1,\u0144" + }; + + private static final String[] TEXTS_tr = { + "tr", null, null, + "\u00f6", null, + "\u00fc", + "\u0131", null, null, + "\u00e7", null, + "\u015f", null, + "\u00f4,\u0153,\u00f2,\u00f3,\u00f5,\u00f8,\u014d", + "\u00fb,\u00f9,\u00fa,\u016b", null, null, null, + "\u00ee,\u00ef,\u00ec,\u00ed,\u012f,\u012b", + "\u0107,\u010d", + "\u00df,\u015b,\u0161", null, null, null, @@ -4436,43 +4588,28 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u203b" + "\u011f" }; - private static final String[] TEXTS_eu = { - "eu", + private static final String[] TEXTS_uk = { + "uk", + "\u0410\u0411\u0412", null, - "\u00e1,\u00e0,\u00e4,\u00e2,\u00e3,\u00e5,\u0105,\u00e6,\u0101,\u00aa", - "\u00f3,\u00f2,\u00f6,\u00f4,\u00f5,\u00f8,\u0153,\u014d,\u00ba", - "\u00fa,\u00fc,\u00f9,\u00fb,\u016b", - "\u00e9,\u00e8,\u00eb,\u00ea,\u0119,\u0117,\u0113", - "\u00ed,\u00ef,\u00ec,\u00ee,\u012f,\u012b", null, null, null, - "\u00e7,\u0107,\u010d", - null, - null, null, + "!text/double_9qm_lqm", + "\u20b4", null, + "!text/single_9qm_lqm", null, null, null, - "\u00f1,\u0144" - }; - - private static final String[] TEXTS_gl = { - "gl", null, - "\u00e1,\u00e0,\u00e4,\u00e2,\u00e3,\u00e5,\u0105,\u00e6,\u0101,\u00aa", - "\u00f3,\u00f2,\u00f6,\u00f4,\u00f5,\u00f8,\u0153,\u014d,\u00ba", - "\u00fa,\u00fc,\u00f9,\u00fb,\u016b", - "\u00e9,\u00e8,\u00eb,\u00ea,\u0119,\u0117,\u0113", - "\u00ed,\u00ef,\u00ec,\u00ee,\u012f,\u012b", null, null, null, - "\u00e7,\u0107,\u010d", null, null, null, @@ -4480,20 +4617,11 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00f1,\u0144" - }; - - private static final String[] TEXTS_he = { - "he", - "\u05d0\u05d1\u05d2", null, null, null, null, null, - "\u20aa", - "!text/double_rqm_9qm", - "!text/single_rqm_9qm", null, null, null, @@ -4519,6 +4647,10 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0449", + "\u0456", + "\u0454", + "\u0438", null, null, null, @@ -4537,7 +4669,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u2605", null, null, null, @@ -4551,20 +4682,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "(|)", - ")|(", - "[|]", - "]|[", - "{|}", - "}|{", - "<|>", - ">|<", - "\u2264|\u2265", - "\u2265|\u2264", - "\u00ab|\u00bb", - "\u00bb|\u00ab", - "\u2039|\u203a", - "\u203a|\u2039", null, null, null, @@ -4596,6 +4713,8 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0491", + "\u0457", null, null, null, @@ -4616,25 +4735,28 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00b1,\ufb29" + "\u044a,\u044b" }; - private static final String[] TEXTS_vi = { - "vi", + private static final String[] TEXTS_uz = { + "uz", null, - "\u00e0,\u00e1,\u1ea3,\u00e3,\u1ea1,\u0103,\u1eb1,\u1eaf,\u1eb3,\u1eb5,\u1eb7,\u00e2,\u1ea7,\u1ea5,\u1ea9,\u1eab,\u1ead", - "\u00f2,\u00f3,\u1ecf,\u00f5,\u1ecd,\u00f4,\u1ed3,\u1ed1,\u1ed5,\u1ed7,\u1ed9,\u01a1,\u1edd,\u1edb,\u1edf,\u1ee1,\u1ee3", - "\u00f9,\u00fa,\u1ee7,\u0169,\u1ee5,\u01b0,\u1eeb,\u1ee9,\u1eed,\u1eef,\u1ef1", - "\u00e8,\u00e9,\u1ebb,\u1ebd,\u1eb9,\u00ea,\u1ec1,\u1ebf,\u1ec3,\u1ec5,\u1ec7", - "\u00ec,\u00ed,\u1ec9,\u0129,\u1ecb", - "\u20ab", + "\u00e2,\u00e4,\u00e1", + "\u00f6,\u00f4,\u0153,\u00f2,\u00f3,\u00f5,\u00f8,\u014d", + "\u0259,\u00e9", + "\u00fc,\u00fb,\u00f9,\u00fa,\u016b", + "\u0131,\u00ee,\u00ef,\u00ec,\u00ed,\u012f,\u012b", null, null, + "\u00e7,\u0107,\u010d", null, + "\u015f,\u00df,\u015b,\u0161", null, null, null, + "\u017e", null, + "\u0148,\u00f1", null, null, null, @@ -4658,24 +4780,27 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u00fd", null, null, null, null, null, - "\u1ef3,\u00fd,\u1ef7,\u1ef9,\u1ef5", - "\u0111" + "\u011f" }; - private static final String[] TEXTS_fa = { - "fa", - "\u0627\u200c\u0628\u200c\u067e", - null, + private static final String[] TEXTS_vi = { + "vi", null, + "\u00e0,\u00e1,\u1ea3,\u00e3,\u1ea1,\u0103,\u1eb1,\u1eaf,\u1eb3,\u1eb5,\u1eb7,\u00e2,\u1ea7,\u1ea5,\u1ea9,\u1eab,\u1ead", + "\u00f2,\u00f3,\u1ecf,\u00f5,\u1ecd,\u00f4,\u1ed3,\u1ed1,\u1ed5,\u1ed7,\u1ed9,\u01a1,\u1edd,\u1edb,\u1edf,\u1ee1,\u1ee3", + "\u00e8,\u00e9,\u1ebb,\u1ebd,\u1eb9,\u00ea,\u1ec1,\u1ebf,\u1ec3,\u1ec5,\u1ec7", + "\u00f9,\u00fa,\u1ee7,\u0169,\u1ee5,\u01b0,\u1eeb,\u1ee9,\u1eed,\u1eef,\u1ef1", + "\u00ec,\u00ed,\u1ec9,\u0129,\u1ecb", null, + "\u20ab", null, null, - "\ufdfc", null, null, null, @@ -4689,40 +4814,14 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u06f1", - "\u06f2", - "\u06f3", - "\u06f4", - "\u06f5", - "\u06f6", - "\u06f7", - "\u06f8", - "\u06f9", - "\u06f0", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "0,\u066b,\u066c", null, null, null, null, - "\u06f3\u06f2\u06f1\u061f", - "!text/morekeys_arabic_diacritics", null, null, - "\u060c", null, null, - "!text/morekeys_arabic_diacritics", - "\u2605,\u066d", - "\u060c", null, null, null, @@ -4732,57 +4831,56 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u1ef3,\u00fd,\u1ef7,\u1ef9,\u1ef5", null, null, null, - "(|)", - ")|(", - "[|]", - "]|[", - "{|}", - "}|{", - "<|>", - ">|<", - "\u2264|\u2265", - "\u2265|\u2264", - "\u00ab|\u00bb", - "\u00bb|\u00ab", - "\u2039|\u203a", - "\u203a|\u2039", + "\u0111" + }; + + private static final String[] TEXTS_zu = { + "zu", null, - "\u061f", + "\u00e0,\u00e1,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101", + "\u00f3,\u00f4,\u00f6,\u00f2,\u0153,\u00f8,\u014d,\u00f5", + "\u00e9,\u00e8,\u00ea,\u00eb,\u0113", + "\u00fa,\u00fb,\u00fc,\u00f9,\u016b", + "\u00ed,\u00ee,\u00ef,\u012b,\u00ec", null, null, - "!fixedColumnOrder!4,:,!,\u061f,\u061b,-,!text/keyspec_left_double_angle_quote,!text/keyspec_right_double_angle_quote", - "\u064b", + "\u00e7", null, + "\u00df", null, null, null, null, null, + "\u00f1" + }; + + private static final String[] TEXTS_zz = { + "zz", null, + "\u00e0,\u00e1,\u00e2,\u00e3,\u00e4,\u00e5,\u00e6,\u0101,\u0103,\u0105,\u00aa", + "\u00f2,\u00f3,\u00f4,\u00f5,\u00f6,\u00f8,\u014d,\u014f,\u0151,\u0153,\u00ba", + "\u00e8,\u00e9,\u00ea,\u00eb,\u0113,\u0115,\u0117,\u0119,\u011b", + "\u00f9,\u00fa,\u00fb,\u00fc,\u0169,\u016b,\u016d,\u016f,\u0171,\u0173", + "\u00ec,\u00ed,\u00ee,\u00ef,\u0129,\u012b,\u012d,\u012f,\u0131,\u0133", null, null, + "\u00e7,\u0107,\u0109,\u010b,\u010d", null, + "\u00df,\u015b,\u015d,\u015f,\u0161,\u017f", null, null, null, + "\u017a,\u017c,\u017e", null, + "\u00f1,\u0144,\u0146,\u0148,\u0149,\u014b", null, null, null, - ";", - "\\%,\u2030", - "\u266a", - "!fixedColumnOrder!4,\ufd3e|\ufd3f,!text/keyspecs_left_parenthesis_more_keys", - "!fixedColumnOrder!4,\ufd3f|\ufd3e,!text/keyspecs_right_parenthesis_more_keys", - "!fixedColumnOrder!8, \u0654\u25cc|\u0654, \u0652\u25cc|\u0652, \u064d\u25cc|\u064d, \u064c\u25cc|\u064c, \u0651\u25cc|\u0651, \u064b\u25cc|\u064b,!text/keyspec_symbols_question,!, \u0656\u25cc|\u0656, \u0670\u25cc|\u0670, \u0653\u25cc|\u0653, \u0650\u25cc|\u0650, \u064f\u25cc|\u064f,\u0640, \u0655\u25cc|\u0655, \u064e\u25cc|\u064e", - "\u061f", - "\u061b", - "\u066a", - "\u064b", - "\u061f", null, null, null, @@ -4803,10 +4901,13 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u00fd,\u0177,\u00ff,\u0133", null, null, null, + "\u010f,\u0111,\u00f0", null, + "\u011d,\u011f,\u0121,\u0123", null, null, null, @@ -4816,43 +4917,15 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "!fixedColumnOrder!3,!text/keyspec_left_single_angle_quote,!text/keyspec_less_than_equal,!text/keyspec_less_than", - "!fixedColumnOrder!3,!text/keyspec_right_single_angle_quote,!text/keyspec_greater_than_equal,!text/keyspec_greater_than" - }; - - private static final String[] TEXTS_lo = { - "lo", - "\u0e81\u0e82\u0e84", null, null, + "\u013a,\u013c,\u013e,\u0140,\u0142", + "\u00fe,\u0163,\u0165,\u0167", null, null, null, - "\u20ad" - }; - - private static final String[] TEXTS_cs = { - "cs", null, - "\u00e1", - "\u00f3", - "\u00fa,\u016f", - "\u00e9,\u011b", - "\u00ed", null, - "!text/double_9qm_lqm", - "!text/single_9qm_lqm", - "\u010d", - "\u0161", - "\u00f6,\u00f4,\u00f2,\u00f5,\u0153,\u00f8,\u014d", - "\u00e0,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101", - "\u00fb,\u00fc,\u00f9,\u016b", - "\u017e", - "\u00e8,\u00ea,\u00eb,\u0119,\u0117,\u0113", - "\u00ee,\u00ef,\u00ec,\u012f,\u012b", - "\u0148", - "\u00e7,\u0107", - "\u00df,\u015b", null, null, null, @@ -4873,14 +4946,9 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "!text/single_raqm_laqm", - "!text/double_raqm_laqm", - "\u00fd", - "\u010f", null, null, null, - "\u017a,\u017c", null, null, null, @@ -4888,13 +4956,12 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0165", null, null, null, + "\u0155,\u0157,\u0159", null, null, - "\u00f1,\u0144", null, null, null, @@ -4909,12 +4976,15 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0125", + "\u0135", null, null, null, null, null, null, + "\u0137,\u0138", null, null, null, @@ -4927,7 +4997,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00ff", null, null, null, @@ -4935,45 +5004,35 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0159" + "\u0175" }; - private static final String[] TEXTS_te = { - "te", - "\u0c05\u0c06\u0c07", + private static final String[] TEXTS_it = { + "it", null, + "\u00e0", + "\u00f2", + "\u00e8,\u00e9", + "\u00f9", + "\u00ec", null, null, null, null, - "\u20b9" - }; - - private static final String[] TEXTS_ta_SG = { - "ta_SG", - "\u0ba4\u0bae\u0bbf\u0bb4\u0bcd" - }; - - private static final String[] TEXTS_uz = { - "uz", null, - "\u00e2,\u00e4,\u00e1", - "\u00f6,\u00f4,\u0153,\u00f2,\u00f3,\u00f5,\u00f8,\u014d", - "\u00fc,\u00fb,\u00f9,\u00fa,\u016b", - "\u0259,\u00e9", - "\u0131,\u00ee,\u00ef,\u00ec,\u00ed,\u012f,\u012b", + "\u00e1,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101,\u00aa", + "\u00f3,\u00f4,\u00f6,\u00f5,\u0153,\u00f8,\u014d,\u00ba", + "\u00fa,\u00fb,\u00fc,\u016b", null, + "\u00ea,\u00eb,\u0119,\u0117,\u0113,\u0259", null, + "\u00ed,\u00ee,\u00ef,\u012f,\u012b", null, - "\u00e7,\u0107,\u010d", - "\u015f,\u00df,\u015b,\u0161", null, null, null, - "\u017e", null, null, - "\u0148,\u00f1", null, null, null, @@ -4998,22 +5057,14 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00fd", null, null, null, - "\u011f" - }; - - private static final String[] TEXTS_bn_BD = { - "bn_BD", - "\u0995\u0996\u0997", null, null, null, null, null, - "\u09f3", null, null, null, @@ -5027,50 +5078,126 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u09e7", - "\u09e8", - "\u09e9", - "\u09ea", - "\u09eb", - "\u09ec", - "\u09ed", - "\u09ee", - "\u09ef", - "\u09e6", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "0" + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + "\u00e8", + "\u00e9", + "\u00e0", + "\u00fc", + "\u00f6", + "\u00e4" }; - private static final String[] TEXTS_lv = { - "lv", + private static final String[] TEXTS_ja = { + "ja", + "\u2190", + null, + null, + null, + null, + null, + null, + "\u00a5" + }; + + private static final String[] TEXTS_ko = { + "ko", + "\uac00\ub098\ub2e4", + null, + null, + null, + null, + null, + null, + "\u20a9", + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + "\u203b" + }; + + private static final String[] TEXTS_ru = { + "ru", + "\u0410\u0411\u0412", + null, + null, null, - "\u0101", null, - "\u016b", - "\u0113", - "\u012b", null, "!text/double_9qm_lqm", + null, + null, "!text/single_9qm_lqm", - "\u010d", - "\u0161", - "\u014d,\u00f2,\u00f3,\u00f4,\u00f5,\u00f6,\u0153,\u0151,\u00f8", - "\u00e0,\u00e1,\u00e2,\u00e3,\u00e4,\u00e5,\u00e6,\u0105", - "\u0173,\u00f9,\u00fa,\u00fb,\u00fc,\u016f,\u0171", - "\u017e", - "\u0117,\u00e8,\u00e9,\u00ea,\u00eb,\u0119,\u011b", - "\u012f,\u00ec,\u00ed,\u00ee,\u00ef,\u0131", - "\u0146", - "\u00e7,\u0107", - "\u00df,\u015b,\u015f", null, null, null, @@ -5097,8 +5224,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0123", - "\u017c,\u017a", null, null, null, @@ -5111,11 +5236,16 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u013c", - "\u00f1,\u0144", + null, + null, + "\u0451", null, null, null, + "\u0449", + "\u044b", + "\u044d", + "\u0438", null, null, null, @@ -5141,6 +5271,7 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u044a", null, null, null, @@ -5177,307 +5308,32 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u011f", - "\u0142,\u013a,\u013e", - "\u0157,\u0159,\u0155", - "\u0137" - }; - - private static final String[] TEXTS_DEFAULT = { - "DEFAULT", - "ABC", - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - "$", - "!text/double_lqm_rqm", - "!text/single_lqm_rqm", - EMPTY, - EMPTY, - "\u00f3,\u00f4,\u00f6,\u00f2,\u0153,\u00f8,\u014d,\u00f5", - "\u00e0,\u00e1,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101", - "\u00fa,\u00fb,\u00fc,\u00f9,\u016b", - EMPTY, - "\u00e9,\u00e8,\u00ea,\u00eb,\u0113", - "\u00ed,\u00ee,\u00ef,\u012b,\u00ec", - EMPTY, - "\u00e7", - "\u00df", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "0", - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - "!text/single_laqm_raqm", - "!text/double_laqm_raqm", - EMPTY, - EMPTY, - "?123", - "!text/morekeys_tablet_punctuation", - EMPTY, - EMPTY, - ",", - ".", - EMPTY, - "!text/morekeys_punctuation", - "\u2020,\u2021,\u2605", - ",", - ".", - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - "\u00f1", - "\u00f8", - "\u00e5", - "\u00f6", - "\u00e4", - "(", - ")", - "[", - "]", - "{", - "}", - "<", - ">", - "\u2264", - "\u2265", - "\u00ab", - "\u00bb", - "\u2039", - "\u203a", - "!autoColumnOrder!8,\\,,?,!,#,!text/keyspec_right_parenthesis,!text/keyspec_left_parenthesis,/,;,',@,:,-,\",+,\\%,&", - "\u00bf", - EMPTY, - "\u00e6", - EMPTY, - EMPTY, - "!string/label_go_key", - "!string/label_send_key", - "!string/label_next_key", - "!string/label_done_key", - "!string/label_search_key", - "!string/label_previous_key", - "!string/label_pause_key", - "!string/label_wait_key", - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - "\u00f1", - EMPTY, - EMPTY, - "\u2030", - "\u266a,\u2665,\u2660,\u2666,\u2663", - "!autoColumnOrder!3,!text/keyspecs_left_parenthesis_more_keys", - "!autoColumnOrder!3,!text/keyspecs_right_parenthesis_more_keys", - EMPTY, - "?", - ";", - "%", - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - "!autoColumnOrder!8,\\,,?,!,#,!text/keyspec_right_parenthesis,!text/keyspec_left_parenthesis,/,;,',@,:,-,\",+,\\%,&", - "\u00b1", - "\u00a1,\u203d", - EMPTY, - EMPTY, - EMPTY, - "\"", - "'", - EMPTY, - EMPTY, - "q", - "w", - "y", - "x", - EMPTY, - EMPTY, - "\u00a2,\u00a3,\u20ac,\u00a5,\u20b1", - "!fixedColumnOrder!3,!text/keyspec_left_single_angle_quote,!text/keyspec_less_than_equal,!text/keyspec_left_double_angle_quote", - "!fixedColumnOrder!3,!text/keyspec_right_single_angle_quote,!text/keyspec_greater_than_equal,!text/keyspec_right_double_angle_quote", - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - "$,\u00a2,\u00a3,\u20ac,\u00a5,\u20b1", - "\u00b9,\u2081,\u00bd,\u2153,\u00bc,\u215b", - "\u00b2,\u2082,\u2154", - "\u00b3,\u2083,\u00be,\u215c", - "\u2074,\u2084", - "\u2075,\u2085,\u215d", - "\u2076,\u2086", - "\u2077,\u2087,\u215e", - "\u2078,\u2088", - "\u2079,\u2089", - "\u2070,\u2080,\u207f,\u2205", - "!icon/action_settings|!code/action_settings", - "!fixedColumnOrder!2,!hasLabels!,!text/keylabel_time_am,!text/keylabel_time_pm", - "!hasLabels!,.net,.org,.gov,.edu", - "!fixedColumnOrder!5,!text/single_quotes,!text/single_angle_quotes", - "!fixedColumnOrder!5,!text/double_quotes,!text/double_angle_quotes", - "!fixedColumnOrder!6,!text/double_quotes,!text/single_quotes,!text/double_angle_quotes,!text/single_angle_quotes", - "!icon/settings_key|!code/key_settings", - "!icon/shortcut_key|!code/key_shortcut", - "!hasLabels!,!text/label_next_key|!code/key_action_next", - "!hasLabels!,!text/label_previous_key|!code/key_action_previous", - ".com", - "!fixedColumnOrder!4,!needsDividers!,!hasLabels!,!icon/action_switch_language|!code/action_switch_language,!icon/action_text_edit|!code/action_text_edit,!icon/action_clipboard_history|!code/action_clipboard_history,!icon/action_emoji|!code/action_emoji,!icon/action_undo|!code/action_undo,!icon/action_redo|!code/action_redo", - "!fixedColumnOrder!4,!needsDividers!,!hasLabels!,!icon/action_switch_language|!code/action_switch_language,!icon/action_text_edit|!code/action_text_edit,!icon/action_clipboard_history|!code/action_clipboard_history,!icon/action_emoji|!code/action_emoji,!icon/enter_key|!code/key_shift_enter,!icon/action_undo|!code/action_undo,!icon/action_redo|!code/action_redo", - "!fixedColumnOrder!4,!needsDividers!,!hasLabels!,!icon/action_switch_language|!code/action_switch_language,!icon/action_text_edit|!code/action_text_edit,!icon/action_clipboard_history|!code/action_clipboard_history,!icon/action_emoji|!code/action_emoji,!icon/previous_key|!code/key_action_previous,!icon/next_key|!code/key_action_next,!icon/action_undo|!code/action_undo,!icon/action_redo|!code/action_redo", - "= \\\\ <", - "~ [ <", - "123", - "\uff0a\uff03", - "AM", - "PM", - "!", - "@", - "#", - "$", - "%", - "^", - "&", - "*", - "!text/keyspec_left_parenthesis", - "!text/keyspec_right_parenthesis", - "_", - "\\\\", - "|", - "=", - "!text/keyspec_left_square_bracket", - "!text/keyspec_right_square_bracket", - "!text/keyspec_less_than", - "!text/keyspec_greater_than", - "!text/keyspec_left_curly_bracket", - "!text/keyspec_right_curly_bracket", - "@", - "#", - "!text/keyspec_currency,$", - "\\%", - "&,|", - "-,\u2013,\u2014,_", - "+,=", - "!text/keyspec_left_parenthesis,!text/keyspec_left_square_bracket,!text/keyspec_left_curly_bracket,!text/keyspec_less_than", - "!text/keyspec_right_parenthesis,!text/keyspec_right_square_bracket,!text/keyspec_right_curly_bracket,!text/keyspec_greater_than", - "*", - ":", - "!text/keyspec_symbols_semicolon", - "!", - "!text/keyspec_symbols_question,/", - "/", - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - "!icon/action_redo|!code/action_redo", - EMPTY, - EMPTY, - EMPTY, - EMPTY, - "!icon/action_select_all|!code/action_select_all", - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - "!icon/action_undo|!code/action_undo", - "!icon/action_cut|!code/action_cut", - "!icon/action_copy|!code/action_copy", - "!icon/action_paste|!code/action_paste", - EMPTY, - EMPTY, - EMPTY, - "!text/keyspec_less_than,!text/keyspec_left_curly_bracket,!text/keyspec_left_square_bracket", - "!text/keyspec_greater_than,!text/keyspec_right_curly_bracket,!text/keyspec_right_square_bracket", - "!text/keyspec_left_single_angle_quote,!text/keyspec_right_single_angle_quote", - "!text/keyspec_right_single_angle_quote,!text/keyspec_left_single_angle_quote", - "!text/keyspec_left_double_angle_quote,!text/keyspec_right_double_angle_quote", - "!text/keyspec_right_double_angle_quote,!text/keyspec_left_double_angle_quote", - "\u201a,\u2018,\u2019", - "\u2019,\u201a,\u2018", - "\u2018,\u201a,\u2019", - "\u2018,\u2019,\u201a", - "\u201e,\u201c,\u201d", - "\u201d,\u201e,\u201c", - "\u201c,\u201e,\u201d", - "\u201c,\u201d,\u201e", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "0" + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + "\",\u00bb,\u00ab", + "',\u203a,\u2039" }; private static final String[] TEXTS_af = { @@ -5485,23 +5341,21 @@ public static String[] getTextsTable(final Locale locale) { null, "\u00e1", "\u00f3,\u00f4", - "\u00fa,\u00fb", "\u00e9,\u00e8,\u00ea,\u00eb", + "\u00fa,\u00fb", "\u00ed,\u00ec,\u00ef,\u00ee", null, null, null, null, null, - "\u00f6,\u00f2,\u00f5,\u0153,\u00f8,\u014d", "\u00e2,\u00e4,\u00e0,\u00e6,\u00e3,\u00e5,\u0101", + "\u00f6,\u00f2,\u00f5,\u0153,\u00f8,\u014d", "\u00fc,\u00f9,\u016b", null, "\u0119,\u0117,\u0113", - "\u012f,\u012b,\u0133", - null, - null, null, + "\u012f,\u012b,\u0133", null, null, null, @@ -5527,32 +5381,8 @@ public static String[] getTextsTable(final Locale locale) { "\u00fd" }; - private static final String[] TEXTS_sw = { - "sw", - null, - "\u00e0,\u00e1,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101", - "\u00f4,\u00f6,\u00f2,\u00f3,\u0153,\u00f8,\u014d,\u00f5", - "\u00fb,\u00fc,\u00f9,\u00fa,\u016b", - "\u00e8,\u00e9,\u00ea,\u00eb,\u0113", - "\u00ee,\u00ef,\u00ed,\u012b,\u00ec", - null, - null, - null, - "\u00e7", - "\u00df", - null, - null, - null, - null, - null, - null, - "\u00f1", - null, - null, - null, - null, - null, - null, + private static final String[] TEXTS_bod = { + "bod", null, null, null, @@ -5573,35 +5403,38 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - null, - null, - "g\\'" + "\u0f21", + "\u0f22", + "\u0f23", + "\u0f24", + "\u0f25", + "\u0f26", + "\u0f27", + "\u0f28", + "\u0f29", + "\u0f20", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "0" }; - private static final String[] TEXTS_da = { - "da", - null, - "\u00e5,\u00e6", - "\u00f8", - null, - null, - null, - null, - "!text/double_9qm_lqm", - "!text/single_9qm_lqm", - null, - null, - "\u00f6,\u00f3,\u00f4,\u00f2,\u00f5,\u0153,\u014d", - "\u00e1,\u00e4,\u00e0,\u00e2,\u00e3,\u0101", - null, - null, - null, + private static final String[] TEXTS_hy = { + "hy", + "\u0531\u0532\u0533", null, null, null, null, null, null, + "\u058f", null, null, null, @@ -5620,8 +5453,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "!text/single_raqm_laqm", - "!text/double_raqm_laqm", null, null, null, @@ -5641,15 +5472,15 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "!text/morekeys_punctuation", null, - "\u00e4", - "\u00e5", - "\u00e6", - "\u00f8", null, null, + ",", null, + "\u0589", null, + ",", null, null, null, @@ -5661,40 +5492,26 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u0589", + "\u055e,\u00bf", null, null, - "\u00f6" - }; - - private static final String[] TEXTS_th = { - "th", - "\u0e01\u0e02\u0e04", null, null, null, null, null, - "\u0e3f" - }; - - private static final String[] TEXTS_sv = { - "sv", null, - "\u00e4,\u00e5", - "\u00f6", null, - "\u00e9", null, null, null, null, null, null, - "\u00f8,\u0153,\u00f3,\u00f2,\u00f4,\u00f5,\u014d", - "\u00e6,\u00e1,\u00e0,\u00e2,\u0105,\u00e3", null, null, - "\u00e8,\u00ea,\u00eb,\u0119", + "!autoColumnOrder!8,\\,,\u055e,\u055c,.,\u055a,\u0559,?,!,\u055d,\u055b,\u058a,\u00bb,\u00ab,\u055f,;,:", null, null, null, @@ -5719,8 +5536,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "!text/single_raqm_laqm", - "!text/double_raqm_laqm", null, null, null, @@ -5741,10 +5556,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00f8,\u0153", - "\u00e5", - "\u00f6", - "\u00e4", null, null, null, @@ -5762,104 +5573,316 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00e6" + "\u055c,\u00a1" }; - private static final String[] TEXTS_es = { - "es", - null, - "\u00e1", - "\u00f3", - "\u00fa,\u00fc", - "\u00e9", - "\u00ed", - null, - null, - null, - null, - null, - "\u00f2,\u00f6,\u00f4,\u00f5,\u00f8,\u0153,\u014d,\u00ba", - "\u00e0,\u00e4,\u00e2,\u00e3,\u00e5,\u0105,\u00e6,\u0101,\u00aa", - "\u00f9,\u00fb,\u016b", - null, - "\u00e8,\u00eb,\u00ea,\u0119,\u0117,\u0113", - "\u00ef,\u00ec,\u00ee,\u012f,\u012b", + private static final String[] TEXTS_DEFAULT = { + "DEFAULT", + "ABC", + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + "!text/double_lqm_rqm", + "$", + EMPTY, + "!text/single_lqm_rqm", + EMPTY, + "\u00e0,\u00e1,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101", + "\u00f3,\u00f4,\u00f6,\u00f2,\u0153,\u00f8,\u014d,\u00f5", + "\u00fa,\u00fb,\u00fc,\u00f9,\u016b", + EMPTY, + "\u00e9,\u00e8,\u00ea,\u00eb,\u0113", + EMPTY, + "\u00ed,\u00ee,\u00ef,\u012b,\u00ec", + "\u00e7", + "\u00df", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "0", + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + "!text/single_laqm_raqm", + "!text/double_laqm_raqm", + "?123", + EMPTY, + "!text/morekeys_tablet_punctuation", + EMPTY, + EMPTY, + "!text/morekeys_punctuation", + ",", + EMPTY, + ".", + "\u2020,\u2021,\u2605", + ",", + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, "\u00f1", - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - "\u0144", - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - "!autoColumnOrder!9,\\\\,?,!,#,),(,/,;,\u00a1,',@,:,-,\\\",+,\\%,&,\u00bf" + "\u00f8", + "\u00e5", + "\u00f6", + "\u00e4", + ".", + "\u00bf", + EMPTY, + "(", + ")", + "[", + "]", + "{", + "}", + "<", + ">", + "\u2264", + "\u2265", + "\u00ab", + "\u00bb", + "\u2039", + "\u203a", + EMPTY, + EMPTY, + "!autoColumnOrder!8,\\,,?,!,#,!text/keyspec_right_parenthesis,!text/keyspec_left_parenthesis,/,;,',@,:,-,\",+,\\%,&", + "\u00e6", + EMPTY, + "\u2030", + "\u266a,\u2665,\u2660,\u2666,\u2663", + "!autoColumnOrder!3,!text/keyspecs_left_parenthesis_more_keys", + "!autoColumnOrder!3,!text/keyspecs_right_parenthesis_more_keys", + EMPTY, + "?", + ";", + "%", + EMPTY, + EMPTY, + "\u00f1", + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + "!string/label_go_key", + "!string/label_send_key", + "!string/label_next_key", + "!string/label_done_key", + "!string/label_search_key", + "!string/label_previous_key", + "!string/label_pause_key", + "!string/label_wait_key", + "!autoColumnOrder!8,\\,,?,!,#,!text/keyspec_right_parenthesis,!text/keyspec_left_parenthesis,/,;,',@,:,-,\",+,\\%,&", + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + "q", + "w", + "y", + "x", + "\u00b1", + EMPTY, + EMPTY, + EMPTY, + "\u00a2,\u00a3,\u20ac,\u00a5,\u20b1", + EMPTY, + EMPTY, + EMPTY, + "\"", + "'", + "\u00a1,\u203d", + "!fixedColumnOrder!3,!text/keyspec_left_single_angle_quote,!text/keyspec_less_than_equal,!text/keyspec_left_double_angle_quote", + "!fixedColumnOrder!3,!text/keyspec_right_single_angle_quote,!text/keyspec_greater_than_equal,!text/keyspec_right_double_angle_quote", + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + "$,\u00a2,\u00a3,\u20ac,\u00a5,\u20b1", + "\u00b9,\u2081,\u00bd,\u2153,\u00bc,\u215b", + "\u00b2,\u2082,\u2154", + "\u00b3,\u2083,\u00be,\u215c", + "\u2074,\u2084", + "\u2075,\u2085,\u215d", + "\u2076,\u2086", + "\u2077,\u2087,\u215e", + "\u2078,\u2088", + "\u2079,\u2089", + "\u2070,\u2080,\u207f,\u2205", + "!icon/action_settings|!code/action_settings", + "!fixedColumnOrder!2,!hasLabels!,!text/keylabel_time_am,!text/keylabel_time_pm", + "!hasLabels!,.net,.org,.gov,.edu", + "!fixedColumnOrder!5,!text/single_quotes,!text/single_angle_quotes", + "!fixedColumnOrder!5,!text/double_quotes,!text/double_angle_quotes", + "!fixedColumnOrder!6,!text/double_quotes,!text/single_quotes,!text/double_angle_quotes,!text/single_angle_quotes", + "!icon/settings_key|!code/key_settings", + "!icon/shortcut_key|!code/key_shortcut", + "!hasLabels!,!text/label_next_key|!code/key_action_next", + "!hasLabels!,!text/label_previous_key|!code/key_action_previous", + ".com", + "!fixedColumnOrder!4,!needsDividers!,!hasLabels!,!icon/action_switch_language|!code/action_switch_language,!icon/action_text_edit|!code/action_text_edit,!icon/action_clipboard_history|!code/action_clipboard_history,!icon/action_emoji|!code/action_emoji,!icon/action_undo|!code/action_undo,!icon/action_redo|!code/action_redo", + "!fixedColumnOrder!4,!needsDividers!,!hasLabels!,!icon/action_switch_language|!code/action_switch_language,!icon/action_text_edit|!code/action_text_edit,!icon/action_clipboard_history|!code/action_clipboard_history,!icon/action_emoji|!code/action_emoji,!icon/enter_key|!code/key_shift_enter,!icon/action_undo|!code/action_undo,!icon/action_redo|!code/action_redo", + "!fixedColumnOrder!4,!needsDividers!,!hasLabels!,!icon/action_switch_language|!code/action_switch_language,!icon/action_text_edit|!code/action_text_edit,!icon/action_clipboard_history|!code/action_clipboard_history,!icon/action_emoji|!code/action_emoji,!icon/previous_key|!code/key_action_previous,!icon/next_key|!code/key_action_next,!icon/action_undo|!code/action_undo,!icon/action_redo|!code/action_redo", + "= \\\\ <", + "~ [ <", + "123", + "\uff0a\uff03", + "AM", + "PM", + "!", + "@", + "#", + "$", + "%", + "^", + "&", + "*", + "!text/keyspec_left_parenthesis", + "!text/keyspec_right_parenthesis", + "_", + "\\\\", + "|", + "=", + "[", + "]", + "<", + ">", + "{", + "}", + "@", + "#", + "!text/keyspec_currency,$", + "\\%", + "&,|", + "-,\u2013,\u2014,_", + "+,=", + "!text/keyspec_left_parenthesis,!text/keyspec_left_square_bracket,!text/keyspec_left_curly_bracket,!text/keyspec_less_than", + "!text/keyspec_right_parenthesis,!text/keyspec_right_square_bracket,!text/keyspec_right_curly_bracket,!text/keyspec_greater_than", + "*", + ":", + "!text/keyspec_symbols_semicolon", + "!", + "!text/keyspec_symbols_question,/", + "/", + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + "!icon/action_redo|!code/action_redo", + EMPTY, + EMPTY, + EMPTY, + EMPTY, + "!icon/action_select_all|!code/action_select_all", + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + "!icon/action_undo|!code/action_undo", + "!icon/action_cut|!code/action_cut", + "!icon/action_copy|!code/action_copy", + "!icon/action_paste|!code/action_paste", + EMPTY, + EMPTY, + EMPTY, + "!text/keyspec_less_than,!text/keyspec_left_curly_bracket,!text/keyspec_left_square_bracket", + "!text/keyspec_greater_than,!text/keyspec_right_curly_bracket,!text/keyspec_right_square_bracket", + "!text/keyspec_left_single_angle_quote,!text/keyspec_right_single_angle_quote", + "!text/keyspec_right_single_angle_quote,!text/keyspec_left_single_angle_quote", + "!text/keyspec_left_double_angle_quote,!text/keyspec_right_double_angle_quote", + "!text/keyspec_right_double_angle_quote,!text/keyspec_left_double_angle_quote", + "\u201a,\u2018,\u2019", + "\u2019,\u201a,\u2018", + "\u2018,\u201a,\u2019", + "\u2018,\u2019,\u201a", + "\u201e,\u201c,\u201d", + "\u201d,\u201e,\u201c", + "\u201c,\u201e,\u201d", + "\u201c,\u201d,\u201e", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "0" }; - private static final String[] TEXTS_ar = { - "ar", - "\u0623\u200c\u0628\u200c\u062c", - null, + private static final String[] TEXTS_fa = { + "fa", + "\u0627\u200c\u0628\u200c\u067e", null, null, null, null, null, null, + "\ufdfc", null, null, null, @@ -5872,16 +5895,16 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u0661", - "\u0662", - "\u0663", - "\u0664", - "\u0665", - "\u0666", - "\u0667", - "\u0668", - "\u0669", - "\u0660", + "\u06f1", + "\u06f2", + "\u06f3", + "\u06f4", + "\u06f5", + "\u06f6", + "\u06f7", + "\u06f8", + "\u06f9", + "\u06f0", "1", "2", "3", @@ -5895,15 +5918,15 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u06f3\u06f2\u06f1\u061f", null, - "\u0663\u0662\u0661\u061f", "!text/morekeys_arabic_diacritics", null, null, + "!text/morekeys_arabic_diacritics", "\u060c", null, null, - "!text/morekeys_arabic_diacritics", "\u2605,\u066d", "\u060c", null, @@ -5918,6 +5941,8 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, + "\u061f", + "!fixedColumnOrder!4,:,!,\u061f,\u061b,-,!text/keyspec_left_double_angle_quote,!text/keyspec_right_double_angle_quote", "(|)", ")|(", "[|]", @@ -5932,26 +5957,7 @@ public static String[] getTextsTable(final Locale locale) { "\u00bb|\u00ab", "\u2039|\u203a", "\u203a|\u2039", - null, - "?,\u00bf", - null, - null, - "!fixedColumnOrder!4,:,!,\u061f,\u061b,-,\\\",\\'", - "\u0651", - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, + "\u064b", null, null, null, @@ -5964,46 +5970,8 @@ public static String[] getTextsTable(final Locale locale) { "\u061f", "\u061b", "\u066a", - "\u0651", - "\u061f" - }; - - private static final String[] TEXTS_nb = { - "nb", - null, - "\u00e5,\u00e6,\u00e4,\u00e0,\u00e1,\u00e2,\u00e3,\u0101", - "\u00f8,\u00f6,\u00f4,\u00f2,\u00f3,\u00f5,\u0153,\u014d", - "\u00fc,\u00fb,\u00f9,\u00fa,\u016b", - "\u00e9,\u00e8,\u00ea,\u00eb,\u0119,\u0117,\u0113", - null, - null, - "!text/double_9qm_rqm", - "!text/single_9qm_rqm", - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, + "\u064b", + "\u061f", null, null, null, @@ -6032,10 +6000,6 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00f6", - "\u00e5", - "\u00f8", - "\u00e6", null, null, null, @@ -6053,100 +6017,94 @@ public static String[] getTextsTable(final Locale locale) { null, null, null, - "\u00e4" - }; - - private static final String[] TEXTS_ta_LK = { - "ta_LK", - "\u0ba4\u0bae\u0bbf\u0bb4\u0bcd", null, null, null, null, null, - "\u0dbb\u0dd4" + "!fixedColumnOrder!3,!text/keyspec_left_single_angle_quote,!text/keyspec_less_than_equal,!text/keyspec_less_than", + "!fixedColumnOrder!3,!text/keyspec_right_single_angle_quote,!text/keyspec_greater_than_equal,!text/keyspec_greater_than" }; private static final Object[] LOCALES_AND_TEXTS = { // "locale", TEXT_ARRAY, /* numberOfNonNullText/lengthOf_TEXT_ARRAY localeName */ - "hy", TEXTS_hy, - "tr", TEXTS_tr, - "mk", TEXTS_mk, - "sr_ZZ", TEXTS_sr_ZZ, - "sl", TEXTS_sl, - "new", TEXTS_new, - "hu", TEXTS_hu, - "mr", TEXTS_mr, - "bn_IN", TEXTS_bn_IN, - "lt", TEXTS_lt, - "is", TEXTS_is, - "kk", TEXTS_kk, - "nl", TEXTS_nl, - "ta_IN", TEXTS_ta_IN, - "ja", TEXTS_ja, - "de", TEXTS_de, - "ru", TEXTS_ru, - "pl", TEXTS_pl, - "uk", TEXTS_uk, - "ky", TEXTS_ky, - "fi", TEXTS_fi, - "eo", TEXTS_eo, - "sk", TEXTS_sk, - "ml", TEXTS_ml, - "ckb", TEXTS_ckb, + "ar", TEXTS_ar, "az", TEXTS_az, - "zz", TEXTS_zz, - "pt", TEXTS_pt, - "rm", TEXTS_rm, "be", TEXTS_be, + "bg", TEXTS_bg, + "bn_BD", TEXTS_bn_BD, + "bn_IN", TEXTS_bn_IN, + "ca", TEXTS_ca, + "ckb", TEXTS_ckb, + "cs", TEXTS_cs, + "da", TEXTS_da, + "de", TEXTS_de, + "el", TEXTS_el, "en", TEXTS_en, + "eo", TEXTS_eo, + "es", TEXTS_es, + "et", TEXTS_et, + "eu", TEXTS_eu, + "fi", TEXTS_fi, + "fr", TEXTS_fr, + "gl", TEXTS_gl, + "hi", TEXTS_hi, "hi_ZZ", TEXTS_hi_ZZ, - "ka", TEXTS_ka, - "my", TEXTS_my, - "km", TEXTS_km, - "it", TEXTS_it, - "sr", TEXTS_sr, "hr", TEXTS_hr, - "tl", TEXTS_tl, - "zu", TEXTS_zu, - "et", TEXTS_et, + "hu", TEXTS_hu, + "is", TEXTS_is, "iw", TEXTS_iw, + "ka", TEXTS_ka, + "kk", TEXTS_kk, + "km", TEXTS_km, "kn", TEXTS_kn, - "bod", TEXTS_bod, + "ky", TEXTS_ky, + "lo", TEXTS_lo, + "lt", TEXTS_lt, + "lv", TEXTS_lv, + "mk", TEXTS_mk, + "ml", TEXTS_ml, + "mn", TEXTS_mn, + "mr", TEXTS_mr, + "my", TEXTS_my, + "nb", TEXTS_nb, "ne", TEXTS_ne, - "fr", TEXTS_fr, - "el", TEXTS_el, - "bg", TEXTS_bg, + "new", TEXTS_new, + "nl", TEXTS_nl, + "pl", TEXTS_pl, + "pt", TEXTS_pt, + "rm", TEXTS_rm, "ro", TEXTS_ro, - "hi", TEXTS_hi, - "ca", TEXTS_ca, - "mn", TEXTS_mn, "si", TEXTS_si, + "sk", TEXTS_sk, + "sl", TEXTS_sl, + "sr", TEXTS_sr, "sr__#Latn", TEXTS_sr___Latn, - "ko", TEXTS_ko, - "eu", TEXTS_eu, - "gl", TEXTS_gl, - "he", TEXTS_he, - "vi", TEXTS_vi, - "fa", TEXTS_fa, - "lo", TEXTS_lo, - "cs", TEXTS_cs, - "te", TEXTS_te, + "sr_ZZ", TEXTS_sr_ZZ, + "sv", TEXTS_sv, + "sw", TEXTS_sw, + "ta_IN", TEXTS_ta_IN, + "ta_LK", TEXTS_ta_LK, "ta_SG", TEXTS_ta_SG, + "te", TEXTS_te, + "th", TEXTS_th, + "tl", TEXTS_tl, + "tr", TEXTS_tr, + "uk", TEXTS_uk, "uz", TEXTS_uz, - "bn_BD", TEXTS_bn_BD, - "lv", TEXTS_lv, - "DEFAULT", TEXTS_DEFAULT, + "vi", TEXTS_vi, + "zu", TEXTS_zu, + "zz", TEXTS_zz, + "it", TEXTS_it, + "ja", TEXTS_ja, + "ko", TEXTS_ko, + "ru", TEXTS_ru, "af", TEXTS_af, - "sw", TEXTS_sw, - "da", TEXTS_da, - "th", TEXTS_th, - "sv", TEXTS_sv, - "es", TEXTS_es, - "ar", TEXTS_ar, - "nb", TEXTS_nb, - "ta_LK", TEXTS_ta_LK + "bod", TEXTS_bod, + "hy", TEXTS_hy, + "DEFAULT", TEXTS_DEFAULT, + "fa", TEXTS_fa }; static { From f4c0e18134a41ea2d31871847188f5477321e92e Mon Sep 17 00:00:00 2001 From: ndom91 Date: Sun, 22 Feb 2026 02:03:34 +0100 Subject: [PATCH 16/25] Wire up the swipe gesture build flag to disable this new mode as well --- java/src/org/futo/inputmethod/engine/general/GeneralIME.kt | 2 +- java/src/org/futo/inputmethod/keyboard/PointerTracker.java | 5 ++--- .../futo/inputmethod/latin/settings/SettingsValues.java | 7 ++++++- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt b/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt index 0a87db91b3..9f0f7daae4 100644 --- a/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt +++ b/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt @@ -495,7 +495,7 @@ class GeneralIME(val helper: IMEHelper) : IMEInterface, WordLearner, SuggestionS } private fun isSwipeActionsModeEnabled(): Boolean { - return settings.current.mGestureInputMode == Settings.GESTURE_INPUT_MODE_ACTIONS + return settings.current.mGestureActionsEnabled } fun updateSuggestions(inputStyle: Int) { diff --git a/java/src/org/futo/inputmethod/keyboard/PointerTracker.java b/java/src/org/futo/inputmethod/keyboard/PointerTracker.java index ce88031b62..c7c3546075 100644 --- a/java/src/org/futo/inputmethod/keyboard/PointerTracker.java +++ b/java/src/org/futo/inputmethod/keyboard/PointerTracker.java @@ -751,8 +751,7 @@ private void onDownEventInternal(final int x, final int y, final long eventTime) mSwipeActionTriggered = false; final boolean swipeActionsMode = - Settings.getInstance().getCurrent().mGestureInputMode - == Settings.GESTURE_INPUT_MODE_ACTIONS; + Settings.getInstance().getCurrent().mGestureActionsEnabled; mIsSlidingCursor = key.getCode() == Constants.CODE_DELETE || key.getCode() == Constants.CODE_SPACE @@ -965,7 +964,7 @@ private void onMoveEventInternal(final int x, final int y, final long eventTime) final SettingsValues settingsValues = Settings.getInstance().getCurrent(); if (mIsSlidingCursor && oldKey != null - && settingsValues.mGestureInputMode == Settings.GESTURE_INPUT_MODE_ACTIONS) { + && settingsValues.mGestureActionsEnabled) { final int pointerStep = sPointerSwipeActionStep; final int swipeIgnoreTime = settingsValues.mKeyLongpressTimeout / MULTIPLIER_FOR_LONG_PRESS_TIMEOUT_IN_SLIDING_INPUT; diff --git a/java/src/org/futo/inputmethod/latin/settings/SettingsValues.java b/java/src/org/futo/inputmethod/latin/settings/SettingsValues.java index 70714c2ac8..9c0ff4d807 100644 --- a/java/src/org/futo/inputmethod/latin/settings/SettingsValues.java +++ b/java/src/org/futo/inputmethod/latin/settings/SettingsValues.java @@ -83,6 +83,7 @@ public class SettingsValues { public final boolean mTransformerPredictionEnabled; public final int mGestureInputMode; public final boolean mGestureInputEnabled; + public final boolean mGestureActionsEnabled; public final boolean mGestureTrailEnabled; public final boolean mGestureFloatingPreviewTextEnabled; public final boolean mSlidingKeyInputPreviewEnabled; @@ -218,8 +219,12 @@ public SettingsValues(final Context context, final SharedPreferences prefs, fina autoCorrectionThresholdRawValue); mPlausibilityThreshold = Settings.readPlausibilityThreshold(res); mGestureInputMode = Settings.readGestureInputMode(prefs, res); - mGestureInputEnabled = Settings.readFromBuildConfigIfGestureInputEnabled(res) + final boolean gestureInputAllowedByBuild = + Settings.readFromBuildConfigIfGestureInputEnabled(res); + mGestureInputEnabled = gestureInputAllowedByBuild && mGestureInputMode == Settings.GESTURE_INPUT_MODE_TYPING; + mGestureActionsEnabled = gestureInputAllowedByBuild + && mGestureInputMode == Settings.GESTURE_INPUT_MODE_ACTIONS; mGestureTrailEnabled = prefs.getBoolean(Settings.PREF_GESTURE_PREVIEW_TRAIL, true); mCloudSyncEnabled = prefs.getBoolean(LocalSettingsConstants.PREF_ENABLE_CLOUD_SYNC, false); mAccount = prefs.getString(LocalSettingsConstants.PREF_ACCOUNT_NAME, From 0dde10db36c61d335b270a0e9b7185aab0760151 Mon Sep 17 00:00:00 2001 From: ndom91 Date: Sun, 22 Feb 2026 02:06:42 +0100 Subject: [PATCH 17/25] Extract some of the swipeActions fns --- .../inputmethod/engine/general/GeneralIME.kt | 77 +++++++++---------- 1 file changed, 38 insertions(+), 39 deletions(-) diff --git a/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt b/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt index 9f0f7daae4..d50180c942 100644 --- a/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt +++ b/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt @@ -498,6 +498,37 @@ class GeneralIME(val helper: IMEHelper) : IMEInterface, WordLearner, SuggestionS return settings.current.mGestureActionsEnabled } + private fun sendDeleteKeypress() { + onEvent( + Event.createSoftwareKeypressEvent( + Event.NOT_A_CODE_POINT, + Constants.CODE_DELETE, + Constants.NOT_A_COORDINATE, + Constants.NOT_A_COORDINATE, + false + ) + ) + } + + private fun moveCursorToLastWordIfTrailingSpace(): Boolean { + val beforeCursor = inputLogic.mConnection.getTextBeforeCursor(1, 0)?.toString() + if (!beforeCursor.isNullOrEmpty() + && beforeCursor.last() == ' ' + && inputLogic.mConnection.hasCursorPosition() + && !inputLogic.mConnection.hasSelection()) { + inputLogic.cursorLeft(1, false, false) + return true + } + + return false + } + + private fun restoreCursorIfMoved(movedCursorToLastWord: Boolean) { + if (movedCursorToLastWord) { + inputLogic.cursorRight(1, false, false) + } + } + fun updateSuggestions(inputStyle: Int) { updateSuggestionJob?.cancel() @@ -731,15 +762,7 @@ class GeneralIME(val helper: IMEHelper) : IMEInterface, WordLearner, SuggestionS val beforeCursor = inputLogic.mConnection.getTextBeforeCursor(1, 0)?.toString() if (!beforeCursor.isNullOrEmpty() && beforeCursor.last() == ' ') { - onEvent( - Event.createSoftwareKeypressEvent( - Event.NOT_A_CODE_POINT, - Constants.CODE_DELETE, - Constants.NOT_A_COORDINATE, - Constants.NOT_A_COORDINATE, - false - ) - ) + sendDeleteKeypress() return } @@ -747,29 +770,13 @@ class GeneralIME(val helper: IMEHelper) : IMEInterface, WordLearner, SuggestionS inputLogic.cursorLeft(-1, true, true) onUpWithDeletePointerActive() } else { - onEvent( - Event.createSoftwareKeypressEvent( - Event.NOT_A_CODE_POINT, - Constants.CODE_DELETE, - Constants.NOT_A_COORDINATE, - Constants.NOT_A_COORDINATE, - false - ) - ) + sendDeleteKeypress() } } KeyboardActionListener.SWIPE_ACTION_UP, KeyboardActionListener.SWIPE_ACTION_DOWN -> { - var movedCursorToLastWord = false - val beforeCursor = inputLogic.mConnection.getTextBeforeCursor(1, 0)?.toString() - if (!beforeCursor.isNullOrEmpty() - && beforeCursor.last() == ' ' - && inputLogic.mConnection.hasCursorPosition() - && !inputLogic.mConnection.hasSelection()) { - inputLogic.cursorLeft(1, false, false) - movedCursorToLastWord = true - } + val movedCursorToLastWord = moveCursorToLastWordIfTrailingSpace() inputLogic.restartSuggestionsOnWordTouchedByCursor( settings.current, @@ -779,9 +786,7 @@ class GeneralIME(val helper: IMEHelper) : IMEInterface, WordLearner, SuggestionS ) if (!ensureSuggestionsCompleted()) { - if (movedCursorToLastWord) { - inputLogic.cursorRight(1, false, false) - } + restoreCursorIfMoved(movedCursorToLastWord) return } @@ -801,9 +806,7 @@ class GeneralIME(val helper: IMEHelper) : IMEInterface, WordLearner, SuggestionS if (candidates.size < 2) { resetSwipeSuggestionSession() - if (movedCursorToLastWord) { - inputLogic.cursorRight(1, false, false) - } + restoreCursorIfMoved(movedCursorToLastWord) return } @@ -840,9 +843,7 @@ class GeneralIME(val helper: IMEHelper) : IMEInterface, WordLearner, SuggestionS val selected = candidates[nextIndex] if (currentWord != null && selected.mWord == currentWord) { - if (movedCursorToLastWord) { - inputLogic.cursorRight(1, false, false) - } + restoreCursorIfMoved(movedCursorToLastWord) return } @@ -850,9 +851,7 @@ class GeneralIME(val helper: IMEHelper) : IMEInterface, WordLearner, SuggestionS swipeSuggestionIndex = nextIndex swipeSuggestionWord = selected.mWord - if (movedCursorToLastWord) { - inputLogic.cursorRight(1, false, false) - } + restoreCursorIfMoved(movedCursorToLastWord) } } } From 38566d0771210f0a801855144d7a586d05b93fbc Mon Sep 17 00:00:00 2001 From: ndom91 Date: Sun, 22 Feb 2026 02:34:27 +0100 Subject: [PATCH 18/25] Refactor to using radio options --- java/res/values/strings-uix.xml | 15 +-- .../latin/uix/settings/Components.kt | 14 ++- .../latin/uix/settings/pages/Typing.kt | 114 +++++------------- 3 files changed, 49 insertions(+), 94 deletions(-) diff --git a/java/res/values/strings-uix.xml b/java/res/values/strings-uix.xml index 2d8d9f2fe7..686bfbde34 100644 --- a/java/res/values/strings-uix.xml +++ b/java/res/values/strings-uix.xml @@ -436,13 +436,15 @@ e.g. [ß] on [s] in all Latin script languages - Typing preferences - Swipe input modes - Swipe Typing (alpha) - Allow swiping from key to key to write words. - Swipe Actions (alpha) - Fleksy-style directional swipes anywhere on the keyboard. + Swipe input modes + Swipe Typing (alpha) + Disabled + Allow swiping from key to key to write words. + Swipe Actions (alpha) + Fleksy-style directional action swipes. + Turn off swipe typing and swipe actions. + Typing preferences Emoji Suggestions Suggest emojis while you\'re typing Vibration @@ -642,4 +644,3 @@ Default is %1$s %1$s will be deleted - diff --git a/java/src/org/futo/inputmethod/latin/uix/settings/Components.kt b/java/src/org/futo/inputmethod/latin/uix/settings/Components.kt index 7dd5a44fd4..0ba1644463 100644 --- a/java/src/org/futo/inputmethod/latin/uix/settings/Components.kt +++ b/java/src/org/futo/inputmethod/latin/uix/settings/Components.kt @@ -438,19 +438,25 @@ fun SettingToggleSharedPrefs( @Composable fun SettingRadio( - title: String, + title: String? = null, options: List, optionNames: List, setting: DataStoreItem, + optionSubtitles: List? = null, hints: List<@Composable () -> Unit>? = null, ) { - ScreenTitle(title, showBack = false) + if (!title.isNullOrBlank()) { + ScreenTitle(title, showBack = false) + } Column { options.zip(optionNames).forEachIndexed { i, it -> - SettingItem(title = it.second, onClick = { setting.setValue(it.first) }, icon = { + val subtitle = optionSubtitles?.getOrNull(i) + SettingItem(title = it.second, subtitle = subtitle, onClick = { setting.setValue(it.first) }, icon = { RadioButton(selected = setting.value == it.first, onClick = null) }, modifier = Modifier.clearAndSetSemantics { - this.text = AnnotatedString(it.second) + this.text = AnnotatedString( + if (subtitle.isNullOrBlank()) it.second else "${it.second}. $subtitle" + ) this.role = Role.RadioButton this.selected = setting.value == it.first }) { diff --git a/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt b/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt index 2ccf6345b7..1575dd7987 100644 --- a/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt +++ b/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt @@ -4,9 +4,7 @@ import android.content.Context import android.media.AudioManager import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.background -import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.gestures.detectDragGestures -import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ExperimentalLayoutApi @@ -26,12 +24,10 @@ import androidx.compose.material.icons.filled.KeyboardArrowDown import androidx.compose.material.icons.filled.KeyboardArrowUp import androidx.compose.material.icons.filled.Menu import androidx.compose.material3.Button -import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.LocalContentColor import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect @@ -117,7 +113,6 @@ import org.futo.inputmethod.latin.uix.settings.SettingItem import org.futo.inputmethod.latin.uix.settings.SettingRadio import org.futo.inputmethod.latin.uix.settings.SettingSlider import org.futo.inputmethod.latin.uix.settings.SettingSliderSharedPrefsInt -import org.futo.inputmethod.latin.uix.settings.SettingToggleRaw import org.futo.inputmethod.latin.uix.settings.SyncDataStoreToPreferencesFloat import org.futo.inputmethod.latin.uix.settings.SyncDataStoreToPreferencesInt import org.futo.inputmethod.latin.uix.settings.Tip @@ -802,13 +797,19 @@ val KeyboardSettingsMenu = UserSettingsMenu( ) ) +val SwipeInputSettingsMenu = UserSettingsMenu( + title = R.string.swipe_input_settings_title, + navPath = "swipe", registerNavPath = true, + settings = listOf( + UserSetting(name = R.string.swipe_input_settings_title) { + SwipeAlphaModesSetting() + } + ) +) val TypingSettingsMenu = UserSettingsMenu( title = R.string.typing_settings_title, navPath = "typing", registerNavPath = true, settings = listOf( - UserSetting(name = R.string.typing_settings_swipe) { - SwipeAlphaModesSetting() - }, UserSetting( name = R.string.typing_settings_auto_space_mode, component = { @@ -971,82 +972,28 @@ val TypingSettingsMenu = UserSettingsMenu( @Composable private fun SwipeAlphaModesSetting() { - val gestureMode = useSharedPrefsInt(Settings.PREF_GESTURE_INPUT_MODE, Settings.GESTURE_INPUT_MODE_TYPING) - - val swipeTypingEnabled = gestureMode.value == Settings.GESTURE_INPUT_MODE_TYPING - val swipeActionsEnabled = gestureMode.value == Settings.GESTURE_INPUT_MODE_ACTIONS - - Surface( - modifier = Modifier - .fillMaxWidth() - .padding(horizontal = 8.dp, vertical = 4.dp), - shape = RoundedCornerShape(12.dp), - color = MaterialTheme.colorScheme.surfaceVariant.copy(alpha = 0.35f), - border = BorderStroke( - width = 1.dp, - color = MaterialTheme.colorScheme.outlineVariant.copy(alpha = 0.7f) + SettingRadio( + title = stringResource(R.string.swipe_input_settings_title), + options = listOf( + Settings.GESTURE_INPUT_MODE_TYPING, + Settings.GESTURE_INPUT_MODE_ACTIONS, + Settings.GESTURE_INPUT_MODE_NONE + ), + optionNames = listOf( + stringResource(R.string.swipe_input_settings_swipe), + stringResource(R.string.swipe_input_settings_swipe_actions_mode), + stringResource(R.string.swipe_input_settings_swipe_disabled) + ), + optionSubtitles = listOf( + stringResource(R.string.swipe_input_settings_swipe_subtitle), + stringResource(R.string.swipe_input_settings_swipe_actions_mode_subtitle), + stringResource(R.string.swipe_input_settings_swipe_disabled_subtitle) + ), + setting = useSharedPrefsInt( + key = Settings.PREF_GESTURE_INPUT_MODE, + default = Settings.GESTURE_INPUT_MODE_TYPING ) - ) { - Column(Modifier.fillMaxWidth()) { - Text( - text = stringResource(R.string.typing_settings_swipe_group_label), - style = Typography.Body.MediumMl, - color = MaterialTheme.colorScheme.onSurfaceVariant, - modifier = Modifier.padding(start = 16.dp, end = 16.dp, top = 10.dp, bottom = 8.dp) - ) - - HorizontalDivider( - color = MaterialTheme.colorScheme.outlineVariant.copy(alpha = 0.65f), - thickness = 0.75.dp - ) - - SettingToggleRaw( - title = stringResource(R.string.typing_settings_swipe), - subtitle = stringResource(R.string.typing_settings_swipe_subtitle), - enabled = swipeTypingEnabled, - setValue = { enabled -> - if (enabled) { - gestureMode.setValue(Settings.GESTURE_INPUT_MODE_TYPING) - } else if (swipeTypingEnabled) { - gestureMode.setValue(Settings.GESTURE_INPUT_MODE_NONE) - } - }, - icon = { - Icon( - painterResource(id = R.drawable.swipe_icon), - contentDescription = null, - tint = MaterialTheme.colorScheme.onBackground.copy(alpha = 0.75f) - ) - } - ) - - HorizontalDivider( - color = MaterialTheme.colorScheme.outlineVariant.copy(alpha = 0.55f), - thickness = 0.75.dp, - modifier = Modifier.padding(start = 16.dp) - ) - - SettingToggleRaw( - title = stringResource(R.string.typing_settings_swipe_actions_mode), - subtitle = stringResource(R.string.typing_settings_swipe_actions_mode_subtitle), - enabled = swipeActionsEnabled, - setValue = { enabled -> - if (enabled) { - gestureMode.setValue(Settings.GESTURE_INPUT_MODE_ACTIONS) - } else if (swipeActionsEnabled) { - gestureMode.setValue(Settings.GESTURE_INPUT_MODE_NONE) - } - }, - icon = { - Icon( - painterResource(id = R.drawable.swipe_icon), - contentDescription = null, - tint = MaterialTheme.colorScheme.onBackground.copy(alpha = 0.75f) - ) - } - ) - } - } + ) } @Preview(showBackground = true) @@ -1074,6 +1021,7 @@ fun KeyboardAndTypingScreen(navController: NavHostController = rememberNavContro } KeyboardSettingsMenu.render(showBack = false, showTitle = false) + SwipeInputSettingsMenu.render(showBack = false, showTitle = false) TypingSettingsMenu.render(showBack = false) BottomSpacer() From 143867d6a970ad12bc2eff26581715bbbe76d77b Mon Sep 17 00:00:00 2001 From: ndom91 Date: Sun, 22 Feb 2026 12:29:42 +0100 Subject: [PATCH 19/25] Cleanup --- java/res/values/strings-uix.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/java/res/values/strings-uix.xml b/java/res/values/strings-uix.xml index 686bfbde34..124e4ce2cb 100644 --- a/java/res/values/strings-uix.xml +++ b/java/res/values/strings-uix.xml @@ -435,7 +435,7 @@ Misc. letters from common languages e.g. [ß] on [s] in all Latin script languages - + Swipe input modes Swipe Typing (alpha) @@ -444,6 +444,8 @@ Swipe Actions (alpha) Fleksy-style directional action swipes. Turn off swipe typing and swipe actions. + + Typing preferences Emoji Suggestions Suggest emojis while you\'re typing From 20335dc768a6f40bea30442bad2961d05e09bc9d Mon Sep 17 00:00:00 2001 From: ndom91 Date: Sun, 22 Feb 2026 13:03:26 +0100 Subject: [PATCH 20/25] Add compact mode to ScreenTitle used as settings section header --- .../org/futo/inputmethod/latin/uix/settings/Components.kt | 7 ++++--- .../futo/inputmethod/latin/uix/settings/pages/Typing.kt | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/java/src/org/futo/inputmethod/latin/uix/settings/Components.kt b/java/src/org/futo/inputmethod/latin/uix/settings/Components.kt index 0ba1644463..8aa1b7fcc2 100644 --- a/java/src/org/futo/inputmethod/latin/uix/settings/Components.kt +++ b/java/src/org/futo/inputmethod/latin/uix/settings/Components.kt @@ -123,7 +123,7 @@ fun ScreenTitle(title: String, showBack: Boolean = false, navController: NavHost } Text(title, style = Typography.Heading.Medium, modifier = Modifier .align(CenterVertically) - .padding(0.dp, 16.dp)) + .padding(top = 16.dp, bottom = 10.dp)) } } @@ -136,7 +136,7 @@ fun ScreenTitleWithIcon(title: String, painter: Painter) { Spacer(modifier = Modifier.width(18.dp)) Text(title, style = Typography.Heading.Medium, modifier = Modifier .align(CenterVertically) - .padding(0.dp, 16.dp)) + .padding(top = 16.dp, bottom = 10.dp)) } } @@ -443,6 +443,7 @@ fun SettingRadio( optionNames: List, setting: DataStoreItem, optionSubtitles: List? = null, + compact: Boolean = false, hints: List<@Composable () -> Unit>? = null, ) { if (!title.isNullOrBlank()) { @@ -459,7 +460,7 @@ fun SettingRadio( ) this.role = Role.RadioButton this.selected = setting.value == it.first - }) { + }, compact = compact) { hints?.getOrNull(i)?.let { it() } } } diff --git a/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt b/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt index 1575dd7987..8e0856f858 100644 --- a/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt +++ b/java/src/org/futo/inputmethod/latin/uix/settings/pages/Typing.kt @@ -989,6 +989,7 @@ private fun SwipeAlphaModesSetting() { stringResource(R.string.swipe_input_settings_swipe_actions_mode_subtitle), stringResource(R.string.swipe_input_settings_swipe_disabled_subtitle) ), + compact = true, setting = useSharedPrefsInt( key = Settings.PREF_GESTURE_INPUT_MODE, default = Settings.GESTURE_INPUT_MODE_TYPING From f08707b690f52067fed4599e262ed5f8d24d82c7 Mon Sep 17 00:00:00 2001 From: ndom91 Date: Sun, 22 Feb 2026 23:18:13 +0100 Subject: [PATCH 21/25] First swipe up will always return you to your exact input, even if its a misspelling of a dictionary word --- .../inputmethod/engine/general/GeneralIME.kt | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt b/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt index d50180c942..324084ebb1 100644 --- a/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt +++ b/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt @@ -810,6 +810,31 @@ class GeneralIME(val helper: IMEHelper) : IMEInterface, WordLearner, SuggestionS return } + if (direction == KeyboardActionListener.SWIPE_ACTION_UP + && swipeSuggestionWord == null) { + val touchedWord = inputLogic.mWordComposer.typedWord + val lastComposedWord = inputLogic.mLastComposedWord + val committedWord = lastComposedWord.mCommittedWord?.toString() + val typedWordFromLastCommit = lastComposedWord.mTypedWord + + if (lastComposedWord.canRevertCommit() + && !typedWordFromLastCommit.isNullOrEmpty() + && !committedWord.isNullOrEmpty() + && touchedWord == committedWord + && typedWordFromLastCommit != committedWord) { + val typedWordIndexFromLastCommit = + candidates.indexOfFirst { it.mWord == typedWordFromLastCommit } + if (typedWordIndexFromLastCommit >= 0) { + val selected = candidates[typedWordIndexFromLastCommit] + onEvent(Event.createSuggestionPickedEvent(selected)) + swipeSuggestionIndex = typedWordIndexFromLastCommit + swipeSuggestionWord = selected.mWord + restoreCursorIfMoved(movedCursorToLastWord) + return + } + } + } + val typedWord = inputLogic.mWordComposer.typedWord val currentWord = swipeSuggestionWord ?: typedWord val typedWordIndex = if (typedWord != null) { From 9e60cad2677165e987d6fa92e036d8d01992b88a Mon Sep 17 00:00:00 2001 From: ndom91 Date: Sun, 22 Feb 2026 23:41:52 +0100 Subject: [PATCH 22/25] Swipe suggestions through punctuation when punctuation is the most recent character (other than space) --- .../inputmethod/engine/general/GeneralIME.kt | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) diff --git a/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt b/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt index 324084ebb1..6a26438d73 100644 --- a/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt +++ b/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt @@ -45,6 +45,7 @@ import org.futo.inputmethod.latin.uix.isDirectBootUnlocked import org.futo.inputmethod.latin.utils.AsyncResultHolder import org.futo.inputmethod.latin.xlm.LanguageModelFacilitator import org.futo.inputmethod.v2keyboard.KeyboardLayoutSetV2 +import java.util.LinkedHashSet import java.util.concurrent.atomic.AtomicInteger interface WordLearner { @@ -529,6 +530,89 @@ class GeneralIME(val helper: IMEHelper) : IMEInterface, WordLearner, SuggestionS } } + private fun getSwipePunctuationCycle(): List { + val cycle = LinkedHashSet() + + val suggestedPunctuation = settings.current.mSpacingAndPunctuations.mSuggestPuncList + for (index in 0 until suggestedPunctuation.size()) { + val punctuation = suggestedPunctuation.getWord(index) + if (!punctuation.isNullOrEmpty() && punctuation.codePointCount(0, punctuation.length) == 1) { + cycle.add(punctuation) + } + } + + if (cycle.isEmpty()) { + return emptyList() + } + + val ordered = cycle.toMutableList() + val commaIndex = ordered.indexOf(",") + if (commaIndex > 0) { + ordered.removeAt(commaIndex) + ordered.add(0, ",") + } + + return ordered + } + + private fun replacePunctuationWith(replacement: String): Boolean { + if (replacement.codePointCount(0, replacement.length) != 1) { + return false + } + + resetSwipeSuggestionSession() + sendDeleteKeypress() + + val replacementCodePoint = replacement.codePointAt(0) + onEvent( + Event.createSoftwareKeypressEvent( + replacementCodePoint, + replacementCodePoint, + Constants.NOT_A_COORDINATE, + Constants.NOT_A_COORDINATE, + false + ) + ) + + return true + } + + private fun trySwipeCyclePunctuation(direction: Int): Boolean { + val beforeCursor = inputLogic.mConnection.getTextBeforeCursor(1, 0)?.toString() + if (beforeCursor.isNullOrEmpty()) { + return false + } + + val currentPunctuation = beforeCursor.last().toString() + val cycle = getSwipePunctuationCycle() + if (cycle.size < 2) { + return false + } + + val currentIndex = cycle.indexOf(currentPunctuation) + if (currentIndex < 0) { + if (currentPunctuation == ".") { + val replacement = if (direction == KeyboardActionListener.SWIPE_ACTION_UP) { + cycle.first() + } else { + cycle.last() + } + return replacePunctuationWith(replacement) + } + + return false + } + + val step = if (direction == KeyboardActionListener.SWIPE_ACTION_UP) 1 else -1 + val nextIndex = (currentIndex + step + cycle.size) % cycle.size + val replacement = cycle[nextIndex] + if (replacement == currentPunctuation) { + return false + } + + return replacePunctuationWith(replacement) + } + fun updateSuggestions(inputStyle: Int) { updateSuggestionJob?.cancel() @@ -778,6 +862,11 @@ class GeneralIME(val helper: IMEHelper) : IMEInterface, WordLearner, SuggestionS KeyboardActionListener.SWIPE_ACTION_DOWN -> { val movedCursorToLastWord = moveCursorToLastWordIfTrailingSpace() + if (trySwipeCyclePunctuation(direction)) { + restoreCursorIfMoved(movedCursorToLastWord) + return + } + inputLogic.restartSuggestionsOnWordTouchedByCursor( settings.current, null, From ed56db2bffcc9915f4ceb673be2dcbdd408cc45a Mon Sep 17 00:00:00 2001 From: ndom91 Date: Mon, 23 Feb 2026 00:38:26 +0100 Subject: [PATCH 23/25] Swap swipe up/down autosuggest cycle direction and fix bug re:swiping back up to non-dictionary words --- .../inputmethod/engine/general/GeneralIME.kt | 54 +++++++++++-------- 1 file changed, 33 insertions(+), 21 deletions(-) diff --git a/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt b/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt index 6a26438d73..10cefb2236 100644 --- a/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt +++ b/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt @@ -24,6 +24,7 @@ import org.futo.inputmethod.event.InputTransaction import org.futo.inputmethod.keyboard.KeyboardActionListener import org.futo.inputmethod.keyboard.KeyboardSwitcher import org.futo.inputmethod.latin.BuildConfig +import org.futo.inputmethod.latin.Dictionary import org.futo.inputmethod.latin.DictionaryFacilitator import org.futo.inputmethod.latin.DictionaryFacilitatorProvider import org.futo.inputmethod.latin.NgramContext @@ -593,9 +594,9 @@ class GeneralIME(val helper: IMEHelper) : IMEInterface, WordLearner, SuggestionS if (currentIndex < 0) { if (currentPunctuation == ".") { val replacement = if (direction == KeyboardActionListener.SWIPE_ACTION_UP) { - cycle.first() - } else { cycle.last() + } else { + cycle.first() } return replacePunctuationWith(replacement) } @@ -603,7 +604,7 @@ class GeneralIME(val helper: IMEHelper) : IMEInterface, WordLearner, SuggestionS return false } - val step = if (direction == KeyboardActionListener.SWIPE_ACTION_UP) 1 else -1 + val step = if (direction == KeyboardActionListener.SWIPE_ACTION_UP) -1 else 1 val nextIndex = (currentIndex + step + cycle.size) % cycle.size val replacement = cycle[nextIndex] if (replacement == currentPunctuation) { @@ -860,6 +861,7 @@ class GeneralIME(val helper: IMEHelper) : IMEInterface, WordLearner, SuggestionS KeyboardActionListener.SWIPE_ACTION_UP, KeyboardActionListener.SWIPE_ACTION_DOWN -> { + val lastComposedWordAtSwipeStart = inputLogic.mLastComposedWord val movedCursorToLastWord = moveCursorToLastWordIfTrailingSpace() if (trySwipeCyclePunctuation(direction)) { @@ -893,37 +895,47 @@ class GeneralIME(val helper: IMEHelper) : IMEInterface, WordLearner, SuggestionS rebuiltCandidates } - if (candidates.size < 2) { - resetSwipeSuggestionSession() - restoreCursorIfMoved(movedCursorToLastWord) - return - } - if (direction == KeyboardActionListener.SWIPE_ACTION_UP && swipeSuggestionWord == null) { val touchedWord = inputLogic.mWordComposer.typedWord - val lastComposedWord = inputLogic.mLastComposedWord - val committedWord = lastComposedWord.mCommittedWord?.toString() - val typedWordFromLastCommit = lastComposedWord.mTypedWord + val committedWord = lastComposedWordAtSwipeStart.mCommittedWord?.toString() + val typedWordFromLastCommit = lastComposedWordAtSwipeStart.mTypedWord - if (lastComposedWord.canRevertCommit() + if (lastComposedWordAtSwipeStart.canRevertCommit() && !typedWordFromLastCommit.isNullOrEmpty() && !committedWord.isNullOrEmpty() && touchedWord == committedWord && typedWordFromLastCommit != committedWord) { val typedWordIndexFromLastCommit = candidates.indexOfFirst { it.mWord == typedWordFromLastCommit } - if (typedWordIndexFromLastCommit >= 0) { - val selected = candidates[typedWordIndexFromLastCommit] - onEvent(Event.createSuggestionPickedEvent(selected)) - swipeSuggestionIndex = typedWordIndexFromLastCommit - swipeSuggestionWord = selected.mWord - restoreCursorIfMoved(movedCursorToLastWord) - return + val selected = if (typedWordIndexFromLastCommit >= 0) { + candidates[typedWordIndexFromLastCommit] + } else { + SuggestedWordInfo( + typedWordFromLastCommit, + "", + SuggestedWordInfo.MAX_SCORE, + SuggestedWordInfo.KIND_TYPED, + Dictionary.DICTIONARY_USER_TYPED, + SuggestedWordInfo.NOT_AN_INDEX, + SuggestedWordInfo.NOT_A_CONFIDENCE + ) } + + onEvent(Event.createSuggestionPickedEvent(selected)) + swipeSuggestionIndex = typedWordIndexFromLastCommit + swipeSuggestionWord = selected.mWord + restoreCursorIfMoved(movedCursorToLastWord) + return } } + if (candidates.size < 2) { + resetSwipeSuggestionSession() + restoreCursorIfMoved(movedCursorToLastWord) + return + } + val typedWord = inputLogic.mWordComposer.typedWord val currentWord = swipeSuggestionWord ?: typedWord val typedWordIndex = if (typedWord != null) { @@ -949,7 +961,7 @@ class GeneralIME(val helper: IMEHelper) : IMEInterface, WordLearner, SuggestionS 0 } - val step = if (direction == KeyboardActionListener.SWIPE_ACTION_UP) 1 else -1 + val step = if (direction == KeyboardActionListener.SWIPE_ACTION_UP) -1 else 1 var nextIndex = (baseIndex + step + candidates.size) % candidates.size if (currentWord != null && candidates[nextIndex].mWord == currentWord) { nextIndex = (nextIndex + step + candidates.size) % candidates.size From 934fe7f9445c766b81751492b58ab584321bf92a Mon Sep 17 00:00:00 2001 From: ndom91 Date: Mon, 23 Feb 2026 14:28:01 +0100 Subject: [PATCH 24/25] Swipe left deletes whole word, not from cursor position to beginning of word --- .../inputmethod/engine/general/GeneralIME.kt | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt b/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt index 10cefb2236..6f6e4c5608 100644 --- a/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt +++ b/java/src/org/futo/inputmethod/engine/general/GeneralIME.kt @@ -852,8 +852,25 @@ class GeneralIME(val helper: IMEHelper) : IMEInterface, WordLearner, SuggestionS } if (inputLogic.mConnection.hasCursorPosition()) { - inputLogic.cursorLeft(-1, true, true) - onUpWithDeletePointerActive() + val wordRangeAtCursor = inputLogic.mConnection.getWordRangeAtCursor( + settings.current.mSpacingAndPunctuations, + helper.currentKeyboardScriptId, + true + ) + + if (wordRangeAtCursor != null && wordRangeAtCursor.length() > 0) { + val selectionStart = inputLogic.mConnection.getExpectedSelectionStart() + val selectionEnd = inputLogic.mConnection.getExpectedSelectionEnd() + val startOfWord = (selectionStart - wordRangeAtCursor.numberOfCharsInWordBeforeCursor) + .coerceAtLeast(0) + val endOfWord = (selectionEnd + wordRangeAtCursor.numberOfCharsInWordAfterCursor) + .coerceAtLeast(startOfWord) + + inputLogic.mConnection.setSelection(startOfWord, endOfWord) + onUpWithDeletePointerActive() + } else { + sendDeleteKeypress() + } } else { sendDeleteKeypress() } From ab90841876ea16883b4b31e789b7d1b7fa0baecc Mon Sep 17 00:00:00 2001 From: ndom91 Date: Mon, 23 Feb 2026 14:54:01 +0100 Subject: [PATCH 25/25] Set vertical/horizontal swipe leniency independentally --- .../inputmethod/keyboard/PointerTracker.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/java/src/org/futo/inputmethod/keyboard/PointerTracker.java b/java/src/org/futo/inputmethod/keyboard/PointerTracker.java index c7c3546075..e2f0065df7 100644 --- a/java/src/org/futo/inputmethod/keyboard/PointerTracker.java +++ b/java/src/org/futo/inputmethod/keyboard/PointerTracker.java @@ -90,8 +90,9 @@ public PointerTrackerParams(final TypedArray mainKeyboardViewAttr) { private static PointerTrackerParams sParams; private static final int sPointerStep = (int)(16.0 * Resources.getSystem().getDisplayMetrics().density); private static final int sPointerBigStep = (int)(32.0 * Resources.getSystem().getDisplayMetrics().density); - private static final int sPointerSwipeActionStep = (int)(20.0 * Resources.getSystem().getDisplayMetrics().density); - private static final float SWIPE_ACTION_HORIZONTAL_DOMINANCE_RATIO = 1.3f; + private static final int sPointerSwipeActionStep = (int)(18.0 * Resources.getSystem().getDisplayMetrics().density); + private static final float SWIPE_ACTION_HORIZONTAL_DOMINANCE_RATIO = 1.0f; + private static final float SWIPE_ACTION_VERTICAL_DOMINANCE_RATIO = 0.70f; private static final int sPointerHugeStep = Integer.min( (int)(128.0 * Resources.getSystem().getDisplayMetrics().density), Resources.getSystem().getDisplayMetrics().widthPixels * 3 / 2 @@ -982,7 +983,16 @@ private void onMoveEventInternal(final int x, final int y, final long eventTime) final int absDx = Math.abs(dx); final int absDy = Math.abs(dy); - if (absDx >= absDy * SWIPE_ACTION_HORIZONTAL_DOMINANCE_RATIO) { + final float horizontalScore = absDx + - absDy * SWIPE_ACTION_HORIZONTAL_DOMINANCE_RATIO; + final float verticalScore = absDy + - absDx * SWIPE_ACTION_VERTICAL_DOMINANCE_RATIO; + final boolean isHorizontalSwipe = horizontalScore >= 0.0f; + final boolean isVerticalSwipe = verticalScore >= 0.0f; + + if ((isHorizontalSwipe && !isVerticalSwipe) + || (isHorizontalSwipe == isVerticalSwipe + && horizontalScore >= verticalScore)) { sListener.onSwipeAction(dx > 0 ? KeyboardActionListener.SWIPE_ACTION_RIGHT : KeyboardActionListener.SWIPE_ACTION_LEFT);