From 0ae761faf91795444bd63a9478aad14ee3f99c19 Mon Sep 17 00:00:00 2001 From: Aleksandras Kostarevas Date: Sat, 24 Aug 2024 18:37:09 +0300 Subject: [PATCH] Remove some unnecessary fields and add KDoc comments to some of the layout data structures --- java/assets/layouts/Arabic/arabic.yaml | 1 - java/assets/layouts/Arabic/lulua.yaml | 1 - java/assets/layouts/README.md | 145 +- java/assets/layouts/Special/symbols.yaml | 1 - .../assets/layouts/Special/symbols_shift.yaml | 1 - .../keyboard/internal/KeyboardTextsTable.java | 2192 ++++++++--------- .../futo/inputmethod/v2keyboard/BaseKey.kt | 265 +- .../futo/inputmethod/v2keyboard/KeyData.kt | 3 +- .../futo/inputmethod/v2keyboard/Keyboard.kt | 169 +- .../v2keyboard/KeyboardLayoutSet.kt | 45 +- .../inputmethod/v2keyboard/LayoutEngine.kt | 6 +- .../inputmethod/v2keyboard/LayoutManager.kt | 4 +- .../inputmethod/v2keyboard/MoreKeysMapping.kt | 5 +- 13 files changed, 1498 insertions(+), 1340 deletions(-) diff --git a/java/assets/layouts/Arabic/arabic.yaml b/java/assets/layouts/Arabic/arabic.yaml index 7650d68a2..dc7f06125 100644 --- a/java/assets/layouts/Arabic/arabic.yaml +++ b/java/assets/layouts/Arabic/arabic.yaml @@ -1,7 +1,6 @@ name: Arabic (AOSP) description: The default Arabic keyboard from AOSP Keyboard. languages: ar -script: Arabic rows: - letters: # U+0636: "ض" ARABIC LETTER DAD diff --git a/java/assets/layouts/Arabic/lulua.yaml b/java/assets/layouts/Arabic/lulua.yaml index d1d1cc766..5481d87c4 100644 --- a/java/assets/layouts/Arabic/lulua.yaml +++ b/java/assets/layouts/Arabic/lulua.yaml @@ -2,7 +2,6 @@ name: "العربية/لؤلؤة" description: Arabic/lulua keyboard from AnySoftKeyboard languages: ar -script: Arabic attributes: width: Grow overrideWidths: diff --git a/java/assets/layouts/README.md b/java/assets/layouts/README.md index 20d805eb7..3790bbfac 100644 --- a/java/assets/layouts/README.md +++ b/java/assets/layouts/README.md @@ -92,7 +92,7 @@ rows: - "d" - type: base spec: "e" - moreKeys: "ę,ė" + moreKeys: ["ę", "ė"] # You can use list syntax anywhere that expects a Key, such as `case` - letters: @@ -251,145 +251,6 @@ rows: --- -## Type reference +# API Reference -### Keyboard -#### name: `String` -Describes the name of the keyboard layout. If this is a layout for a specific language, this should be written localized to that language. For example, "Lietuvių QWERTY klaviatūra" instead of "Lithuanian QWERTY Keyboard". - -#### rows: `List` -List of rows to be included in the layout. - -#### symbolsLayout: `String` (optional) -Which symbols layout to use. Normally this should be left to the default "symbols" layout. - -#### symbolsShiftLayout: `string` (optional) -Which shifted symbols layout to use. Normally this should be left to the default "symbols_shift" layout. - -#### numberRowMode: `NumberRowMode` (optional) -This can be set to one of the following: - -* `UserConfigurable` - settings number row toggle will toggle this layout's number row -* `AlwaysEnabled` - this layout's number row is always enabled -* `AlwaysDisabled` - this layout's number row is always disabled - -#### script: `Script` (optional) = Latin -This can be set to one of the following: - -* `Arabic` -* `Armenian` -* `Bengali` -* `Cyrillic` -* `Devanagari` -* `Georgian` -* `Greek` -* `Hebrew` -* `Kannada` -* `Khmer` -* `Lao` -* `Latin` -* `Malayalam` -* `Myanmar` -* `Sinhala` -* `Tamil` -* `Telugu` -* `Thai` - ---- - -### Row -#### (numbers|letters|bottom): `List` -When defining a row, at most one of `numbers`, `letters`, or `bottom` can be set. This is mainly done as a yaml shorthand for defining the row type. The row type also has some effects on the keys. Number rows hide key backgrounds by default, and have a shorter height. They are also unsplittable, like action rows. - -For most cases, you only need to define `letters` rows. The default numbers and bottom rows are added automatically. - -An example of defining a QWERTY layout: -```yaml -name: "QWERTY" -rows: - - letters: q w e r t y u i o p - - letters: a s d f g h j k l - - letters: z x c v b n m -``` - -If your layout is more complex, you can override all rows: -```yaml -name: "DVORAK" -rows: - - letters: "$delete $delete ' p y f g c r l" - - letters: "a o e u i d h t n s" - - letters: "$shift q j k x b m w v z" - - bottom: "$symbols , $space . $enter $enter" -``` - -#### rowHeight: `Double` (optional) = `1.0` - -#### splittable: `Boolean` (optional) = `true` - -#### fillerRowForNumberRow: `Boolean` (optional) = `false` -When set, the row will only appear if the number row is active in the primary layout. Mainly used for symbol layouts. - ---- - -### KeyAttributes -#### width: `KeyWidth` (optional) -Can be set to one of the following: - -* `Regular` - default regular key width -* `FunctionalKey` - width used for enter, backspace, etc -* `Grow` - fills all empty space in the row, used for spacebar and number row -* `Custom1` - if used, override width for `Custom1` must be defined in the keyboard -* `Custom2` - if used, override width for `Custom2` must be defined in the keyboard -* `Custom3` - if used, override width for `Custom3` must be defined in the keyboard - -#### style: `KeyVisualStyle` (optional) -Defines mainly the background for the key. Valid values: - -* `Normal` - default visual style -* `NoBackground` - no background, used for number row -* `Functional` - darker key, used for shift and backspace -* `Action` - rounded bright key, used for enter -* `Spacebar` - used for spacebar -* `StickyOff` -* `StickyOn` - -#### showPopup: `Boolean` (optional) -Whether or not to show a popup to indicate the key was tapped - -#### moreKeyMode: `MoreKeyMode` (optional) -Declares how more keys should be inserted automatically. Valid values: - -* `All` - add all automatic morekeys -* `OnlyFromKeyspec` - add only for matching keyspec shortcut -* `` - -### Key (`type: base`) -#### spec: `String` -This is the key spec. Usually it should just be a letter. - -Text references are permitted, such as `!text/keyspec_q` - -You can set a custom icon and code here as well: `!icon/action_paste|!code/action_paste` - -#### code: `Int` (optional) -Override the code for this key - -#### icon: `String` (optional) -Custom icon for the key. For example, can be `action_settings`. - -#### shiftedCode: `Int` -#### anchored: `Boolean` -#### showPopup: `Boolean` -#### moreKeys: `String` -#### longPressEnabled: `Boolean` -#### repeatableEnabled: `Boolean` - -### Key (`type: case`) -#### normal: `Key` -#### shifted: `Key` = normal -#### automaticShifted: `Key` = shifted -#### manualShifted: `Key` = shifted -#### shiftLocked: `Key` = shifted -#### shiftLockShifted: `Key` = shiftLocked -#### symbols: `Key` = normal -#### symbolsShifted: `Key` = normal +TODO \ No newline at end of file diff --git a/java/assets/layouts/Special/symbols.yaml b/java/assets/layouts/Special/symbols.yaml index 3f1dabc95..78f47b3d3 100644 --- a/java/assets/layouts/Special/symbols.yaml +++ b/java/assets/layouts/Special/symbols.yaml @@ -1,5 +1,4 @@ name: "Symbols" -element: Symbols attributes: shiftable: false rows: diff --git a/java/assets/layouts/Special/symbols_shift.yaml b/java/assets/layouts/Special/symbols_shift.yaml index ab1e720bb..dec5d6b1d 100644 --- a/java/assets/layouts/Special/symbols_shift.yaml +++ b/java/assets/layouts/Special/symbols_shift.yaml @@ -1,5 +1,4 @@ name: "Symbols (Shifted)" -element: SymbolsShifted numberRowMode: UserConfigurable attributes: shiftable: false diff --git a/java/src/org/futo/inputmethod/keyboard/internal/KeyboardTextsTable.java b/java/src/org/futo/inputmethod/keyboard/internal/KeyboardTextsTable.java index d76442431..51af24e3d 100644 --- a/java/src/org/futo/inputmethod/keyboard/internal/KeyboardTextsTable.java +++ b/java/src/org/futo/inputmethod/keyboard/internal/KeyboardTextsTable.java @@ -79,8 +79,8 @@ public final class KeyboardTextsTable { // /* index:histogram */ "name", "locale", "keylabel_to_alpha", - "morekeys_o", "morekeys_a", + "morekeys_o", "morekeys_u", "morekeys_e", "morekeys_i", @@ -88,285 +88,285 @@ public final class KeyboardTextsTable { "single_quotes", "morekeys_c", "keyspec_currency", - "morekeys_misc_o", "morekeys_misc_a", "morekeys_s", + "morekeys_misc_o", "morekeys_misc_u", "morekeys_misc_e", "morekeys_misc_i", - "morekeys_n", "morekeys_z", + "morekeys_n", "morekeys_misc_c", "morekeys_misc_s", "double_angle_quotes", "single_angle_quotes", "morekeys_y", - "additional_morekeys_symbols_9", - "keyspec_symbols_2", - "keyspec_symbols_3", - "additional_morekeys_symbols_0", + "keyspec_symbols_9", + "keyspec_symbols_8", "additional_morekeys_symbols_4", + "additional_morekeys_symbols_8", + "additional_morekeys_symbols_3", + "additional_morekeys_symbols_5", + "additional_morekeys_symbols_9", + "additional_morekeys_symbols_7", + "keyspec_symbols_3", + "keyspec_symbols_2", "morekeys_misc_z", "additional_morekeys_symbols_2", - "additional_morekeys_symbols_5", - "keyspec_symbols_4", - "keyspec_symbols_0", - "additional_morekeys_symbols_7", - "morekeys_g", - "keyspec_symbols_7", - "keyspec_symbols_1", - "additional_morekeys_symbols_8", - "keyspec_symbols_9", - "keyspec_symbols_6", - "morekeys_d", - "keyspec_symbols_8", - "additional_morekeys_symbols_1", - "additional_morekeys_symbols_6", - "additional_morekeys_symbols_3", "keyspec_symbols_5", + "additional_morekeys_symbols_1", + "keyspec_symbols_7", + "morekeys_g", + "keyspec_symbols_4", + "keyspec_symbols_6", + "additional_morekeys_symbols_0", + "keyspec_symbols_1", + "morekeys_d", + "additional_morekeys_symbols_6", + "keyspec_symbols_0", + "keylabel_to_symbol", "morekeys_tablet_period", "morekeys_cyrillic_ie", - "keylabel_to_symbol", "keyspec_nordic_row2_10", - "keyspec_nordic_row2_11", - "keyspec_east_slavic_row2_11", - "morekeys_misc_n", - "keyspec_period", - "keyspec_east_slavic_row1_9", - "morekeys_t", - "morekeys_nordic_row2_10", - "keyspec_nordic_row1_11", - "keyspec_east_slavic_row3_5", - "morekeys_cyrillic_soft_sign", "keyspec_east_slavic_row2_2", - "morekeys_period", + "morekeys_t", + "keyspec_east_slavic_row3_5", "keyspec_tablet_comma", - "morekeys_punctuation", - "keyspec_right_curly_bracket", - "keyspec_left_single_angle_quote", - "keyspec_right_double_angle_quote", - "keyspec_left_parenthesis", - "keyspec_right_single_angle_quote", - "morekeys_r", - "keyspec_left_square_bracket", - "morekeys_star", - "keyspec_greater_than_equal", - "keyspec_less_than", - "morekeys_nordic_row2_11", - "morekeys_tablet_comma", - "keyspec_tablet_period", - "keyspec_less_than_equal", - "keyspec_comma", - "morekeys_l", - "keyspec_left_curly_bracket", + "morekeys_nordic_row2_10", + "keyspec_east_slavic_row2_11", + "keyspec_period", + "keyspec_nordic_row1_11", + "morekeys_period", + "morekeys_misc_n", + "keyspec_nordic_row2_11", + "keyspec_east_slavic_row1_9", + "morekeys_cyrillic_soft_sign", "keyspec_left_double_angle_quote", + "morekeys_l", + "keyspec_right_curly_bracket", + "keyspec_comma", + "morekeys_punctuation", + "keyspec_tablet_period", + "keyspec_less_than", "morekeys_question", - "keyspec_right_square_bracket", - "keyhintlabel_period", + "morekeys_star", + "keyspec_left_curly_bracket", "keyspec_right_parenthesis", + "keyspec_right_double_angle_quote", "keyspec_greater_than", - "morekeys_swiss_row2_11", - "morekeys_symbols_semicolon", - "keyspec_symbols_percent", - "morekeys_symbols_percent", - "morekeys_right_parenthesis", + "keyspec_greater_than_equal", + "keyspec_left_parenthesis", + "keyspec_left_single_angle_quote", + "morekeys_tablet_comma", + "keyspec_less_than_equal", + "morekeys_r", + "keyspec_right_square_bracket", + "keyspec_right_single_angle_quote", + "keyhintlabel_period", + "morekeys_nordic_row2_11", + "keyspec_left_square_bracket", "keyspec_spanish_row2_10", - "morekeys_swiss_row1_11", - "morekeys_bullet", - "keyspec_symbols_semicolon", - "morekeys_arabic_diacritics", - "keyspec_swiss_row2_10", + "morekeys_symbols_percent", "morekeys_misc_y", - "keyhintlabel_tablet_period", - "morekeys_swiss_row2_10", + "morekeys_symbols_semicolon", + "morekeys_right_parenthesis", + "morekeys_arabic_diacritics", "keyspec_symbols_question", - "keyspec_swiss_row1_11", - "keyhintlabel_tablet_comma", + "keyspec_swiss_row2_10", + "keyspec_symbols_percent", + "morekeys_bullet", "keyspec_swiss_row2_11", + "morekeys_swiss_row2_11", + "morekeys_swiss_row2_10", + "keyhintlabel_tablet_comma", + "keyspec_swiss_row1_11", + "keyhintlabel_tablet_period", + "morekeys_swiss_row1_11", + "keyspec_symbols_semicolon", "morekeys_left_parenthesis", - "morekeys_h", - "label_search_key", - "morekeys_k", - "label_wait_key", - "label_go_key", - "keyspec_south_slavic_row1_6", - "morekeys_cyrillic_ghe", "morekeys_tablet_punctuation", - "keyspec_south_slavic_row3_1", - "morekeys_misc_g", - "keyspec_south_slavic_row2_11", - "morekeys_east_slavic_row2_2", "morekeys_misc_r", - "morekeys_cyrillic_o", - "morekeys_misc_l", - "label_previous_key", - "label_send_key", - "morekeys_cyrillic_u", - "keyspec_south_slavic_row3_8", - "morekeys_cyrillic_en", + "label_search_key", "label_pause_key", + "morekeys_cyrillic_o", + "morekeys_east_slavic_row2_2", + "morekeys_h", + "label_previous_key", + "morekeys_cyrillic_ghe", "morekeys_cyrillic_i", "label_done_key", + "keyspec_south_slavic_row3_8", + "keyspec_south_slavic_row2_11", + "label_wait_key", + "morekeys_misc_g", + "morekeys_k", + "morekeys_cyrillic_u", + "morekeys_misc_l", + "keyspec_south_slavic_row1_6", + "label_send_key", + "keyspec_south_slavic_row3_1", + "morekeys_cyrillic_en", + "label_go_key", "label_next_key", - "morekeys_w", - "morekeys_cyrillic_a", - "morekeys_j", - "morekeys_less_than", - "morekeys_misc_h", - "morekeys_misc_t", - "keyspec_y", - "morekeys_east_slavic_row2_11", - "morekeys_exclamation", - "morekeys_cyrillic_ka", - "morekeys_greater_than", - "morekeys_currency_dollar", "morekeys_plus", - "keyspec_w", + "morekeys_exclamation", + "morekeys_greater_than", "keyspec_q", "keyspec_x", - "keyspec_emoji_action_key_navigation", - "qwertysyms_n", - "morekeys_misc_m", - "qwertysyms_7", - "qwertysyms_8", - "morekeys_f", - "single_lqm_rqm", - "morekeys_misc_k", - "qwertysyms_p", - "morekeys_symbols_4", - "morekeys_symbols_5", - "actions_d", - "actions_u", - "morekeys_x", - "morekeys_misc_v", - "morekeys_tablet_double_quote", - "morekeys_q", - "keylabel_to_phone_numeric", - "morekeys_symbols_6", + "morekeys_w", + "morekeys_east_slavic_row2_11", + "morekeys_cyrillic_a", + "morekeys_misc_t", + "morekeys_j", + "morekeys_currency_dollar", + "morekeys_cyrillic_ka", + "keyspec_y", + "morekeys_misc_h", + "morekeys_less_than", + "keyspec_w", + "actions_6", + "actions_b", "double_9qm_rqm", - "keyspec_emoji_action_key", - "morekeys_b", - "actions_l", - "actions_2", - "actions_h", - "single_rqm_9qm", - "actions_1", - "actions_p", - "actions_5", "keylabel_to_more_symbol", - "number_6", - "morekeys_p", - "morekeys_misc_b", - "keylabel_time_pm", - "actions_4", - "actions_j", - "number_1", - "morekeys_symbols_8", - "actions_9", - "number_3", - "actions_0", - "keyspec_action_next", - "double_9qm_lqm", - "actions_s", - "double_lqm_rqm", - "actions_t", - "number_4", - "qwertysyms_m", - "qwertysyms_u", - "actions_k", - "double_laqm_raqm", - "keyspec_action_previous", - "actions_a", - "number_7", - "morekeys_currency_generic", - "qwertysyms_5", - "qwertysyms_t", - "qwertysyms_g", - "morekeys_v", - "qwertysyms_z", - "actions_8", - "number_9", - "morekeys_double_quote", - "keyspec_shortcut", - "actions_x", - "single_9qm_rqm", - "qwertysyms_y", - "number_8", - "actions_q", - "morekeys_symbols_2", - "number_0", - "qwertysyms_x", - "actions_o", - "actions_z", - "qwertysyms_4", + "actions_1", + "qwertysyms_s", "qwertysyms_e", - "morekeys_symbols_3", - "actions_e", - "morekeys_misc_p", - "morekeys_symbols_9", - "qwertysyms_v", + "qwertysyms_p", + "actions_t", + "qwertysyms_z", + "qwertysyms_m", + "actions_2", + "actions_l", + "morekeys_symbols_0", + "actions_7", + "actions_n", + "single_lqm_rqm", + "keyspec_emoji_action_key", + "actions_i", + "morekeys_symbols_4", + "morekeys_misc_j", + "single_rqm_9qm", + "qwertysyms_j", + "morekeys_misc_d", "actions_v", "qwertysyms_h", - "morekeys_misc_w", - "qwertysyms_r", - "actions_f", - "number_5", - "single_laqm_raqm", - "actions_i", - "actions_n", - "morekeys_am_pm", - "double_raqm_laqm", - "number_2", - "morekeys_misc_x", - "actions_w", - "keyspecs_left_parenthesis_more_keys", - "morekeys_m", + "actions_o", "qwertysyms_q", - "qwertysyms_i", - "actions_y", - "actions_b", - "actions_r", - "morekeys_misc_q", - "qwertysyms_w", - "keyspecs_right_parenthesis_more_keys", - "morekeys_symbols_7", - "single_raqm_laqm", - "keyspec_settings", - "morekeys_symbols_1", - "keylabel_tablet_to_more_symbol", - "keylabel_to_phone_symbols", - "qwertysyms_l", - "actions_7", - "morekeys_misc_d", - "morekeys_popular_domain", - "actions_m", - "morekeys_single_quote", - "qwertysyms_2", - "keylabel_time_am", - "qwertysyms_9", - "qwertysyms_k", - "actions_3", - "qwertysyms_0", - "single_9qm_lqm", - "keyspec_popular_domain", - "qwertysyms_1", - "qwertysyms_s", - "qwertysyms_j", - "morekeys_misc_f", - "morekeys_symbols_0", - "qwertysyms_b", - "qwertysyms_3", - "morekeys_misc_j", - "qwertysyms_d", - "actions_g", - "qwertysyms_c", - "qwertysyms_6", - "qwertysyms_o", - "qwertysyms_a", + "morekeys_misc_p", + "actions_f", "double_rqm_9qm", - "qwertysyms_f", + "actions_s", + "actions_h", + "morekeys_misc_w", + "morekeys_symbols_7", + "actions_3", + "actions_0", + "number_4", + "qwertysyms_t", + "morekeys_misc_q", + "actions_q", + "keylabel_tablet_to_more_symbol", + "qwertysyms_a", + "keylabel_time_am", + "qwertysyms_b", + "actions_x", + "single_9qm_lqm", + "morekeys_currency_generic", + "keyspec_popular_domain", + "actions_e", + "keyspecs_left_parenthesis_more_keys", + "qwertysyms_c", + "morekeys_v", + "qwertysyms_y", + "actions_y", + "number_6", + "number_9", + "number_5", + "actions_z", + "morekeys_symbols_3", + "qwertysyms_n", + "qwertysyms_d", + "number_1", + "keylabel_time_pm", + "morekeys_am_pm", + "number_8", + "actions_j", + "actions_g", + "morekeys_symbols_9", + "morekeys_b", + "actions_m", + "qwertysyms_8", + "qwertysyms_v", + "actions_r", + "actions_d", + "double_laqm_raqm", + "actions_9", + "actions_k", + "morekeys_p", + "qwertysyms_0", + "actions_p", + "qwertysyms_5", + "morekeys_symbols_2", + "actions_a", + "double_raqm_laqm", + "qwertysyms_1", + "qwertysyms_l", + "keylabel_to_phone_symbols", + "single_laqm_raqm", + "morekeys_misc_b", + "qwertysyms_k", + "keyspec_settings", + "morekeys_misc_f", + "keyspec_shortcut", + "double_9qm_lqm", + "morekeys_symbols_6", + "qwertysyms_3", + "morekeys_x", + "qwertysyms_9", + "actions_w", "actions_c", - "actions_6" + "qwertysyms_r", + "qwertysyms_x", + "actions_8", + "qwertysyms_f", + "number_7", + "qwertysyms_i", + "double_lqm_rqm", + "number_2", + "morekeys_m", + "morekeys_f", + "qwertysyms_4", + "morekeys_misc_x", + "qwertysyms_7", + "actions_4", + "morekeys_misc_v", + "single_9qm_rqm", + "keyspecs_right_parenthesis_more_keys", + "single_raqm_laqm", + "morekeys_misc_m", + "morekeys_symbols_1", + "qwertysyms_6", + "qwertysyms_2", + "qwertysyms_o", + "morekeys_popular_domain", + "qwertysyms_g", + "morekeys_symbols_8", + "keyspec_action_next", + "keyspec_action_previous", + "actions_5", + "morekeys_symbols_5", + "number_0", + "morekeys_double_quote", + "morekeys_tablet_double_quote", + "qwertysyms_w", + "qwertysyms_u", + "keylabel_to_phone_numeric", + "morekeys_misc_k", + "keyspec_emoji_action_key_navigation", + "morekeys_q", + "morekeys_single_quote", + "actions_u", + "number_3" }; private static final String EMPTY = ""; @@ -374,8 +374,8 @@ public final class KeyboardTextsTable { private static final String[] TEXTS_af = { "af", null, - "\u00f3,\u00f4", "\u00e1", + "\u00f3,\u00f4", "\u00fa,\u00fb", "\u00e9,\u00e8,\u00ea,\u00eb", "\u00ed,\u00ec,\u00ef,\u00ee", @@ -383,9 +383,9 @@ public final class KeyboardTextsTable { null, null, null, - "\u00f6,\u00f2,\u00f5,\u0153,\u00f8,\u014d", "\u00e2,\u00e4,\u00e0,\u00e6,\u00e3,\u00e5,\u0101", null, + "\u00f6,\u00f2,\u00f5,\u0153,\u00f8,\u014d", "\u00fc,\u00f9,\u016b", "\u0119,\u0117,\u0113", "\u012f,\u012b,\u0133" @@ -416,96 +416,96 @@ public final class KeyboardTextsTable { null, null, null, - "9", - "\u0662", - "\u0663", - "0,\u066b,\u066c", + "\u0669", + "\u0668", "4", + "8", + "3", + "5", + "9", + "7", + "\u0663", + "\u0662", null, "2", - "5", - "\u0664", - "\u0660", - "7", - null, - "\u0667", - "\u0661", - "8", - "\u0669", - "\u0666", - null, - "\u0668", - "1", - "6", - "3", "\u0665", - "!text/morekeys_arabic_diacritics", + "1", + "\u0667", null, + "\u0664", + "\u0666", + "0,\u066b,\u066c", + "\u0661", + null, + "6", + "\u0660", "\u0663\u0662\u0661\u061f", + "!text/morekeys_arabic_diacritics", null, null, null, null, null, - null, - null, - null, + "\u060c", null, null, null, null, "!text/morekeys_arabic_diacritics", - "\u060c", + null, + null, + null, + null, + "\u00ab|\u00bb", null, "}|{", - "\u2039|\u203a", - "\u00bb|\u00ab", - "(|)", - "\u203a|\u2039", - null, - "[|]", - "\u2605,\u066d", - "\u2265|\u2264", - "<|>", - null, - "!fixedColumnOrder!4,:,!,\u061f,\u061b,-,\\\",\\'", - null, - "\u2264|\u2265", "\u060c", null, - "{|}", - "\u00ab|\u00bb", + null, + "<|>", "?,\u00bf", - "]|[", - "\u0651", + "\u2605,\u066d", + "{|}", ")|(", + "\u00bb|\u00ab", ">|<", + "\u2265|\u2264", + "(|)", + "\u2039|\u203a", + "!fixedColumnOrder!4,:,!,\u061f,\u061b,-,\\\",\\'", + "\u2264|\u2265", + null, + "]|[", + "\u203a|\u2039", + "\u0651", + null, + "[|]", + null, + "\\%,\u2030", null, ";", - "\u066a", - "\\%,\u2030", "!fixedColumnOrder!4,\ufd3f|\ufd3e,!text/keyspecs_right_parenthesis_more_keys", - null, - null, - "\u266a", - "\u061b", "!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", null, + "\u066a", + "\u266a", + null, + null, + null, + "\u061f", null, "\u0651", null, - "\u061f", - null, - "\u061f", - null, + "\u061b", "!fixedColumnOrder!4,\ufd3e|\ufd3f,!text/keyspecs_left_parenthesis_more_keys" }; private static final String[] TEXTS_az = { "az", null, - "\u00f6,\u00f4,\u0153,\u00f2,\u00f3,\u00f5,\u00f8,\u014d", "\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", @@ -514,13 +514,13 @@ public final class KeyboardTextsTable { "\u00e7,\u0107,\u010d", null, null, - null, "\u015f,\u00df,\u015b,\u0161", null, null, null, - "\u0148,\u00f1", + null, "\u017e", + "\u0148,\u00f1", null, null, null, @@ -537,6 +537,10 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, + null, "\u011f" }; @@ -589,20 +593,22 @@ public final class KeyboardTextsTable { null, null, null, + null, "\u0451", null, + "\u044b", + null, + "\u0456", null, null, "\u044d", null, null, + null, + null, + null, "\u045e", - null, - null, - null, - "\u0456", - "\u044a", - "\u044b" + "\u044a" }; private static final String[] TEXTS_bg = { @@ -641,29 +647,29 @@ public final class KeyboardTextsTable { null, null, null, - "9", - "\u09e8", - "\u09e9", - "0", + "\u09ef", + "\u09ee", "4", + "8", + "3", + "5", + "9", + "7", + "\u09e9", + "\u09e8", null, "2", - "5", - "\u09ea", - "\u09e6", - "7", - null, - "\u09ed", - "\u09e7", - "8", - "\u09ef", - "\u09ec", - null, - "\u09ee", + "\u09eb", "1", + "\u09ed", + null, + "\u09ea", + "\u09ec", + "0", + "\u09e7", + null, "6", - "3", - "\u09eb" + "\u09e6" }; private static final String[] TEXTS_bn_IN = { @@ -683,8 +689,8 @@ public final class KeyboardTextsTable { private static final String[] TEXTS_ca = { "ca", null, - "\u00f2,\u00f3", "\u00e0", + "\u00f2,\u00f3", "\u00fa,\u00fc", "\u00e8,\u00e9", "\u00ed,\u00ef", @@ -692,9 +698,9 @@ public final class KeyboardTextsTable { null, "\u00e7", null, - "\u00f6,\u00f4,\u00f5,\u00f8,\u0153,\u014d,\u00ba", "\u00e1,\u00e4,\u00e2,\u00e3,\u00e5,\u0105,\u00e6,\u0101,\u00aa", null, + "\u00f6,\u00f4,\u00f5,\u00f8,\u0153,\u014d,\u00ba", "\u00f9,\u00fb,\u016b", "\u00eb,\u00ea,\u0119,\u0117,\u0113", "\u00ec,\u00ee,\u012f,\u012b", @@ -745,6 +751,10 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, + null, "!autoColumnOrder!9,\\\\,?,!,\u00b7,#,),(,/,;,',@,:,-,\\\",+,\\%,&", null, null, @@ -765,15 +775,6 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - null, - null, - null, - null, - null, - null, - null, "\u00e7", null, null, @@ -793,8 +794,6 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, "!autoColumnOrder!8,\\\\,',\u00b7,#,),(,/,;,@,:,-,\\\",+,\\%,&" }; @@ -823,96 +822,96 @@ public final class KeyboardTextsTable { null, null, null, - "9", - "\u0662", - "\u0663", - "0,\u066b,\u066c", + "\u0669", + "\u0668", "4", + "8", + "3", + "5", + "9", + "7", + "\u0663", + "\u0662", null, "2", - "5", - "\u0664", - "\u0660", - "7", - null, - "\u0667", - "\u0661", - "8", - "\u0669", - "\u0666", - null, - "\u0668", - "1", - "6", - "3", "\u0665", + "1", + "\u0667", + null, + "\u0664", + "\u0666", + "0,\u066b,\u066c", + "\u0661", + null, + "6", + "\u0660", + "\u0663\u0662\u0661\u061f", "\u061f", null, - "\u0663\u0662\u0661\u061f", null, null, null, null, + "\u060c", + null, + null, ".", null, - null, - null, - null, - null, - null, - null, "\u061f", - "\u060c", + null, + null, + null, + null, + "\u00ab|\u00bb", null, "}|{", - "\u2039|\u203a", - "\u00bb|\u00ab", - "(|)", - "\u203a|\u2039", - null, - "[|]", - "\u2605,\u066d", - "\u2265|\u2264", - "<|>", - null, - "!fixedColumnOrder!4,:,!,\u061f,\u061b,-,\\\",\\'", - null, - "\u2264|\u2265", "\u060c", null, - "{|}", - "\u00ab|\u00bb", + null, + "<|>", "?,\u00bf", - "]|[", - "\u0651", + "\u2605,\u066d", + "{|}", ")|(", + "\u00bb|\u00ab", ">|<", + "\u2265|\u2264", + "(|)", + "\u2039|\u203a", + "!fixedColumnOrder!4,:,!,\u061f,\u061b,-,\\\",\\'", + "\u2264|\u2265", + null, + "]|[", + "\u203a|\u2039", + "\u0651", + null, + "[|]", + null, + "\\%,\u2030", null, ";", - "\u066a", - "\\%,\u2030", "!fixedColumnOrder!4,\ufd3f|\ufd3e,!text/keyspecs_right_parenthesis_more_keys", - null, - null, - "\u266a", - "\u061b", "!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", null, + "\u066a", + "\u266a", + null, + null, + null, + "\u061f", null, "\u0651", null, - "\u061f", - null, - "\u061f", - null, + "\u061b", "!fixedColumnOrder!4,\ufd3e|\ufd3f,!text/keyspecs_left_parenthesis_more_keys" }; private static final String[] TEXTS_cs = { "cs", null, - "\u00f3", "\u00e1", + "\u00f3", "\u00fa,\u016f", "\u00e9,\u011b", "\u00ed", @@ -920,14 +919,14 @@ public final class KeyboardTextsTable { "!text/single_9qm_lqm", "\u010d", null, - "\u00f6,\u00f4,\u00f2,\u00f5,\u0153,\u00f8,\u014d", "\u00e0,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101", "\u0161", + "\u00f6,\u00f4,\u00f2,\u00f5,\u0153,\u00f8,\u014d", "\u00fb,\u00fc,\u00f9,\u016b", "\u00e8,\u00ea,\u00eb,\u0119,\u0117,\u0113", "\u00ee,\u00ef,\u00ec,\u012f,\u012b", - "\u0148", "\u017e", + "\u0148", "\u00e7,\u0107", "\u00df,\u015b", "!text/double_raqm_laqm", @@ -938,6 +937,11 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, + null, + null, "\u017a,\u017c", null, null, @@ -948,8 +952,6 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, "\u010f", null, null, @@ -958,6 +960,10 @@ public final class KeyboardTextsTable { null, null, null, + "\u0165", + null, + null, + null, null, null, null, @@ -965,7 +971,12 @@ public final class KeyboardTextsTable { "\u00f1,\u0144", null, null, - "\u0165", + null, + null, + null, + null, + null, + null, null, null, null, @@ -987,35 +998,14 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, "\u00ff" }; private static final String[] TEXTS_da = { "da", null, - "\u00f8", "\u00e5,\u00e6", + "\u00f8", null, null, null, @@ -1023,9 +1013,9 @@ public final class KeyboardTextsTable { "!text/single_9qm_lqm", null, null, - "\u00f6,\u00f3,\u00f4,\u00f2,\u00f5,\u0153,\u014d", "\u00e1,\u00e4,\u00e0,\u00e2,\u00e3,\u0101", null, + "\u00f6,\u00f3,\u00f4,\u00f2,\u00f5,\u0153,\u014d", null, null, null, @@ -1063,14 +1053,25 @@ public final class KeyboardTextsTable { null, null, "\u00e6", + null, + null, + null, + null, + "\u00e4", + null, + null, + "\u00e5", + null, + null, "\u00f8", null, null, null, null, null, - "\u00e4", - "\u00e5", + null, + null, + null, null, null, null, @@ -1093,8 +1094,8 @@ public final class KeyboardTextsTable { private static final String[] TEXTS_de = { "de", null, - "\u00f6", "\u00e4", + "\u00f6", "\u00fc", null, null, @@ -1102,9 +1103,9 @@ public final class KeyboardTextsTable { "!text/single_9qm_lqm", null, null, - "%,\u00f4,\u00f2,\u00f3,\u00f5,\u0153,\u00f8,\u014d", "%,\u00e2,\u00e0,\u00e1,\u00e6,\u00e3,\u00e5,\u0101", "\u00df", + "%,\u00f4,\u00f2,\u00f3,\u00f5,\u0153,\u00f8,\u014d", "%,\u00fb,\u00f9,\u00fa,\u016b", null, null, @@ -1179,24 +1180,23 @@ public final class KeyboardTextsTable { null, null, null, - "\u00e0", null, null, null, null, null, - "\u00e8", - null, null, null, "\u00f6", null, null, + "\u00e4", + "\u00e0", "\u00e9", null, "\u00fc", null, - "\u00e4" + "\u00e8" }; private static final String[] TEXTS_el = { @@ -1221,8 +1221,8 @@ public final class KeyboardTextsTable { "\u0109", null, null, - null, "\u015d", + null, "\u00fa,\u016f,\u00fb,\u00fc,\u00f9,\u016b,\u0169,\u0171,\u0173,\u00b5", null, null, @@ -1244,6 +1244,10 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, + null, "\u011d", null, null, @@ -1293,15 +1297,6 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - null, - null, - null, - null, - null, - null, - null, "\u0135", null, null, @@ -1316,7 +1311,6 @@ public final class KeyboardTextsTable { null, null, null, - "\u0125", null, null, null, @@ -1325,6 +1319,17 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, + "\u0125", + null, + null, + null, + null, + null, + null, + null, "\u011f,\u0121,\u0123", null, null, @@ -1338,31 +1343,26 @@ public final class KeyboardTextsTable { null, null, null, + "\u015d", + "\u0109", null, null, null, null, null, null, - "\u0127", null, "\u016d", + "\u0127", null, - null, - null, - null, - null, - null, - "\u011d", - "\u015d", - "\u0109" + "\u011d" }; private static final String[] TEXTS_es = { "es", null, - "\u00f3", "\u00e1", + "\u00f3", "\u00fa,\u00fc", "\u00e9", "\u00ed", @@ -1370,12 +1370,13 @@ public final class KeyboardTextsTable { null, null, null, - "\u00f2,\u00f6,\u00f4,\u00f5,\u00f8,\u0153,\u014d,\u00ba", "\u00e0,\u00e4,\u00e2,\u00e3,\u00e5,\u0105,\u00e6,\u0101,\u00aa", null, + "\u00f2,\u00f6,\u00f4,\u00f5,\u00f8,\u0153,\u014d,\u00ba", "\u00f9,\u00fb,\u016b", "\u00e8,\u00eb,\u00ea,\u0119,\u0117,\u0113", "\u00ef,\u00ec,\u00ee,\u012f,\u012b", + null, "\u00f1", null, null, @@ -1412,6 +1413,12 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, + null, + null, + null, "\u0144", null, null, @@ -1420,17 +1427,14 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - null, "!autoColumnOrder!9,\\\\,?,!,#,),(,/,;,\u00a1,',@,:,-,\\\",+,\\%,&,\u00bf" }; private static final String[] TEXTS_et = { "et", null, - "\u00f6,\u00f5", "\u00e4", + "\u00f6,\u00f5", "\u00fc", null, null, @@ -1438,15 +1442,15 @@ public final class KeyboardTextsTable { "!text/single_9qm_lqm", null, null, - "\u00f2,\u00f3,\u00f4,\u0153,\u0151,\u00f8", "\u0101,\u00e0,\u00e1,\u00e2,\u00e3,\u00e5,\u00e6,\u0105", "\u0161", + "\u00f2,\u00f3,\u00f4,\u0153,\u0151,\u00f8", "\u016b,\u0173,\u00f9,\u00fa,\u00fb,\u016f,\u0171", null, null, - null, "\u017e", null, + null, "\u00df,\u015b,\u015f", null, null, @@ -1456,6 +1460,11 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, + null, + null, "\u017c,\u017a", null, null, @@ -1472,27 +1481,25 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - null, - null, - null, "\u00f6", - "\u00e4", - null, null, null, null, null, "\u00f5", - "\u00fc" + null, + null, + "\u00fc", + null, + null, + "\u00e4" }; private static final String[] TEXTS_eu = { "eu", null, - "\u00f3,\u00f2,\u00f6,\u00f4,\u00f5,\u00f8,\u0153,\u014d,\u00ba", "\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", @@ -1506,6 +1513,7 @@ public final class KeyboardTextsTable { null, null, null, + null, "\u00f1,\u0144" }; @@ -1534,88 +1542,88 @@ public final class KeyboardTextsTable { null, null, null, - "9", - "\u06f2", - "\u06f3", - "0,\u066b,\u066c", + "\u06f9", + "\u06f8", "4", + "8", + "3", + "5", + "9", + "7", + "\u06f3", + "\u06f2", null, "2", - "5", - "\u06f4", - "\u06f0", - "7", - null, - "\u06f7", - "\u06f1", - "8", - "\u06f9", - "\u06f6", - null, - "\u06f8", - "1", - "6", - "3", "\u06f5", - "!text/morekeys_arabic_diacritics", + "1", + "\u06f7", null, + "\u06f4", + "\u06f6", + "0,\u066b,\u066c", + "\u06f1", + null, + "6", + "\u06f0", "\u06f3\u06f2\u06f1\u061f", + "!text/morekeys_arabic_diacritics", null, null, null, null, null, - null, - null, - null, + "\u060c", null, null, null, null, "!text/morekeys_arabic_diacritics", - "\u060c", + null, + null, + null, + null, + "\u00ab|\u00bb", null, "}|{", - "\u2039|\u203a", - "\u00bb|\u00ab", - "(|)", - "\u203a|\u2039", - null, - "[|]", - "\u2605,\u066d", - "\u2265|\u2264", - "<|>", - null, - "!fixedColumnOrder!4,:,!,\u061f,\u061b,-,!text/keyspec_left_double_angle_quote,!text/keyspec_right_double_angle_quote", - null, - "\u2264|\u2265", "\u060c", null, - "{|}", - "\u00ab|\u00bb", + null, + "<|>", "?,\u00bf", - "]|[", - "\u064b", + "\u2605,\u066d", + "{|}", ")|(", + "\u00bb|\u00ab", ">|<", + "\u2265|\u2264", + "(|)", + "\u2039|\u203a", + "!fixedColumnOrder!4,:,!,\u061f,\u061b,-,!text/keyspec_left_double_angle_quote,!text/keyspec_right_double_angle_quote", + "\u2264|\u2265", + null, + "]|[", + "\u203a|\u2039", + "\u064b", + null, + "[|]", + null, + "\\%,\u2030", null, ";", - "\u066a", - "\\%,\u2030", "!fixedColumnOrder!4,\ufd3f|\ufd3e,!text/keyspecs_right_parenthesis_more_keys", - null, - null, - "\u266a", - "\u061b", "!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", null, + "\u066a", + "\u266a", + null, + null, + null, + "\u061f", null, "\u064b", null, - "\u061f", - null, - "\u061f", - null, + "\u061b", "!fixedColumnOrder!4,\ufd3e|\ufd3f,!text/keyspecs_left_parenthesis_more_keys", null, null, @@ -1643,22 +1651,26 @@ public final class KeyboardTextsTable { null, 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, - "!fixedColumnOrder!3,!text/keyspec_right_single_angle_quote,!text/keyspec_greater_than_equal,!text/keyspec_greater_than" + null, + null, + null, + null, + null, + "!fixedColumnOrder!3,!text/keyspec_left_single_angle_quote,!text/keyspec_less_than_equal,!text/keyspec_less_than" }; private static final String[] TEXTS_fi = { "fi", null, - "\u00f6", "\u00e4,\u00e5", + "\u00f6", null, null, null, @@ -1666,15 +1678,15 @@ public final class KeyboardTextsTable { null, null, null, - "\u00f8,\u00f4,\u00f2,\u00f3,\u00f5,\u0153,\u014d", "\u00e6,\u00e0,\u00e1,\u00e2,\u00e3,\u0101", "\u0161", - null, + "\u00f8,\u00f4,\u00f2,\u00f3,\u00f5,\u0153,\u014d", null, null, null, "\u017e", null, + null, "\u00df,\u015b", null, null, @@ -1684,6 +1696,11 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, + null, + null, "\u017a,\u017c", null, null, @@ -1700,20 +1717,26 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - null, - null, - null, "\u00f6", + null, + null, + null, + null, + "\u00f8", + null, + null, + "\u00e5", + null, + null, "\u00e4", null, null, null, null, null, - "\u00f8", - "\u00e5", + null, + null, + null, null, null, null, @@ -1736,8 +1759,8 @@ public final class KeyboardTextsTable { private static final String[] TEXTS_fr = { "fr", null, - "\u00f4,\u0153", "\u00e0,\u00e2,%,\u00e6", + "\u00f4,\u0153", "\u00f9,\u00fb,%,\u00fc", "\u00e9,\u00e8,\u00ea,\u00eb", "\u00ee,%,\u00ef", @@ -1745,9 +1768,9 @@ public final class KeyboardTextsTable { null, "\u00e7", null, - "%,\u00f6,\u00f2,\u00f3,\u00f5,\u00f8,\u014d,\u00ba", "\u00e1,\u00e4,\u00e3,\u00e5,\u0101,\u00aa", null, + "%,\u00f6,\u00f2,\u00f3,\u00f5,\u00f8,\u014d,\u00ba", "\u00fa,\u016b", "%,\u0119,\u0117,\u0113", "\u00ec,\u00ed,\u012f,\u012b", @@ -1822,31 +1845,30 @@ public final class KeyboardTextsTable { null, null, null, - "\u00e4", null, null, null, null, null, - "\u00fc", - null, null, null, "\u00e9", null, null, + "\u00e0", + "\u00e4", "\u00f6", null, "\u00e8", null, - "\u00e0" + "\u00fc" }; private static final String[] TEXTS_gl = { "gl", null, - "\u00f3,\u00f2,\u00f6,\u00f4,\u00f5,\u00f8,\u0153,\u014d,\u00ba", "\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", @@ -1860,6 +1882,7 @@ public final class KeyboardTextsTable { null, null, null, + null, "\u00f1,\u0144" }; @@ -1888,44 +1911,41 @@ public final class KeyboardTextsTable { null, null, null, - "9", - "\u0968", - "\u0969", - "0", + "\u096f", + "\u096e", "4", + "8", + "3", + "5", + "9", + "7", + "\u0969", + "\u0968", null, "2", - "5", - "\u096a", - "\u0966", - "7", - null, - "\u096d", - "\u0967", - "8", - "\u096f", - "\u096c", - null, - "\u096e", - "1", - "6", - "3", "\u096b", + "1", + "\u096d", + null, + "\u096a", + "\u096c", + "0", + "\u0967", + null, + "6", + "\u0966", + "?\u0967\u0968\u0969", "!autoColumnOrder!8,\\\\,.,',#,),(,/,;,@,:,-,\\\",+,\\%,&", null, - "?\u0967\u0968\u0969", + null, + null, + null, null, null, null, null, "\u0964", null, - null, - null, - null, - null, - null, - null, "!autoColumnOrder!9,\\\\,.,?,!,#,),(,/,;,',@,:,-,\\\",+,\\%,&", null, null, @@ -1936,11 +1956,6 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - null, - null, - null, "\u0964" }; @@ -2053,28 +2068,28 @@ public final class KeyboardTextsTable { null, null, null, + null, "Search", - null, - "Wait", - "Go", - null, - null, - null, - null, - null, - null, - null, + "Pause", null, null, null, "Prev", + null, + null, + "Done", + null, + null, + "Wait", + null, + null, + null, + null, + null, "Send", null, null, - null, - "Pause", - null, - "Done", + "Go", "Next" }; @@ -2091,13 +2106,13 @@ public final class KeyboardTextsTable { "\u010d,\u0107", null, null, - null, "\u0161", null, null, null, null, "\u017e", + null, "\u00e7", "\u015b,\u00df", "!text/double_raqm_laqm", @@ -2108,6 +2123,11 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, + null, + null, "\u017a,\u017c", null, null, @@ -2118,16 +2138,14 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, "\u0111" }; private static final String[] TEXTS_hu = { "hu", null, - "\u00f3,\u00f6,\u0151", "\u00e1", + "\u00f3,\u00f6,\u0151", "\u00fa,\u00fc,\u0171", "\u00e9", "\u00ed", @@ -2135,9 +2153,9 @@ public final class KeyboardTextsTable { "!text/single_9qm_rqm", null, null, - "\u00f4,\u00f2,\u00f5,\u0153,\u00f8,\u014d", "\u00e0,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101", null, + "\u00f4,\u00f2,\u00f5,\u0153,\u00f8,\u014d", "\u00fb,\u00f9,\u016b", "\u00e8,\u00ea,\u00eb,\u0119,\u0117,\u0113", "\u00ee,\u00ef,\u00ec,\u012f,\u012b", @@ -2197,12 +2215,15 @@ public final class KeyboardTextsTable { null, null, null, + null, "!text/morekeys_punctuation", null, null, null, null, null, + "\u055d", + null, null, "\u0589", null, @@ -2213,26 +2234,11 @@ public final class KeyboardTextsTable { null, null, null, + null, "\u055d", "!autoColumnOrder!8,\\,,\u055e,\u055c,.,\u055a,\u0559,?,!,\u055d,\u055b,\u058a,\u00bb,\u00ab,\u055f,;,:", - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, "\u0589", null, - "\u055d", - null, - null, - null, "\u055e,\u00bf", null, null, @@ -2289,14 +2295,19 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, + null, + null, "\u055c,\u00a1" }; private static final String[] TEXTS_is = { "is", null, - "\u00f3,\u00f6", "\u00e1,\u00e4,\u00e6", + "\u00f3,\u00f6", "\u00fa", "\u00e9", "\u00ed", @@ -2304,9 +2315,9 @@ public final class KeyboardTextsTable { "!text/single_9qm_lqm", null, null, - "\u00f4,\u00f2,\u00f5,\u0153,\u00f8,\u014d", "\u00e5,\u00e0,\u00e2,\u00e3,\u0101", null, + "\u00f4,\u00f2,\u00f5,\u0153,\u00f8,\u014d", "\u00fc,\u00fb,\u00f9,\u016b", "\u00eb,\u00e8,\u00ea,\u0119,\u0117,\u0113", "\u00ef,\u00ee,\u00ec,\u012f,\u012b", @@ -2334,6 +2345,9 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, "\u00f0", null, null, @@ -2342,13 +2356,6 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - null, - null, - null, - null, - null, "\u00fe", null, null, @@ -2387,19 +2394,14 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - null, - null, - null, "\u00ff" }; private static final String[] TEXTS_it = { "it", null, - "\u00f2", "\u00e0", + "\u00f2", "\u00f9", "\u00e8,\u00e9", "\u00ec", @@ -2407,9 +2409,9 @@ public final class KeyboardTextsTable { null, null, null, - "\u00f3,\u00f4,\u00f6,\u00f5,\u0153,\u00f8,\u014d,\u00ba", "\u00e1,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101,\u00aa", null, + "\u00f3,\u00f4,\u00f6,\u00f5,\u0153,\u00f8,\u014d,\u00ba", "\u00fa,\u00fb,\u00fc,\u016b", "\u00ea,\u00eb,\u0119,\u0117,\u0113", "\u00ed,\u00ee,\u00ef,\u012f,\u012b", @@ -2484,24 +2486,23 @@ public final class KeyboardTextsTable { null, null, null, - "\u00e0", null, null, null, null, null, - "\u00e8", - null, null, null, "\u00f6", null, null, + "\u00e4", + "\u00e0", "\u00e9", null, "\u00fc", null, - "\u00e4" + "\u00e8" }; private static final String[] TEXTS_iw = { @@ -2569,42 +2570,30 @@ public final class KeyboardTextsTable { null, null, null, + "\u00ab|\u00bb", null, "}|{", - "\u2039|\u203a", - "\u00bb|\u00ab", - "(|)", - "\u203a|\u2039", null, - "[|]", - "\u2605", - "\u2265|\u2264", + null, + null, "<|>", null, - null, + "\u2605", + "{|}", + ")|(", + "\u00bb|\u00ab", + ">|<", + "\u2265|\u2264", + "(|)", + "\u2039|\u203a", null, "\u2264|\u2265", null, - null, - "{|}", - "\u00ab|\u00bb", - null, "]|[", - null, - ")|(", - ">|<", - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, + "\u203a|\u2039", null, null, + "[|]", null, null, null, @@ -2712,22 +2701,22 @@ public final class KeyboardTextsTable { null, null, null, + null, "\u0451", null, + "\u044b", + null, + "\u0438", null, null, "\u044d", null, null, + null, + null, + null, "\u0449", - null, - null, - null, - "\u0438", "\u044a", - "\u044b", - null, - null, null, null, null, @@ -2775,6 +2764,8 @@ public final class KeyboardTextsTable { null, null, null, + "\u04e9", + "\u0456", null, null, "\u0493", @@ -2782,27 +2773,27 @@ public final class KeyboardTextsTable { null, null, null, - "\u0456", - null, - "\u04e9", null, null, null, "\u04af,\u04b1", null, + null, + null, + null, "\u04a3", null, null, null, null, null, - "\u04d9", - null, - null, null, null, null, "\u04bb", + "\u04d9", + null, + null, null, "\u049b" }; @@ -2949,7 +2940,6 @@ public final class KeyboardTextsTable { null, null, null, - null, "\u17db,\u00a2,\u00a3,\u20ac,\u00a5,\u20b1" }; @@ -3016,31 +3006,22 @@ public final class KeyboardTextsTable { null, null, null, + null, "\u0451", null, + "\u044b", + null, + "\u0438", null, null, "\u044d", null, null, + null, + null, + null, "\u0449", - null, - null, - null, - "\u0438", "\u044a", - "\u044b", - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, null, null, null, @@ -3092,8 +3073,19 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, + null, + null, + null, + null, + null, "\u04af", null, + null, + null, + null, "\u04a3" }; @@ -3114,8 +3106,8 @@ public final class KeyboardTextsTable { private static final String[] TEXTS_lt = { "lt", null, - null, "\u0105", + null, "\u016b,\u0173", "\u0117,\u0119", "\u012f", @@ -3124,7 +3116,6 @@ public final class KeyboardTextsTable { "\u010d", null, null, - null, "\u0161", null, null, @@ -3136,8 +3127,8 @@ public final class KeyboardTextsTable { private static final String[] TEXTS_lv = { "lv", null, - "\u014d", "\u0101", + "\u014d", "\u016b", "\u0113", "\u012b", @@ -3145,14 +3136,14 @@ public final class KeyboardTextsTable { "!text/single_9qm_lqm", "\u010d", null, - "\u00f2,\u00f3,\u00f4,\u00f5,\u00f6,\u0153,\u0151,\u00f8", "\u00e0,\u00e1,\u00e2,\u00e3,\u00e4,\u00e5,\u00e6,\u0105", "\u0161", + "\u00f2,\u00f3,\u00f4,\u00f5,\u00f6,\u0153,\u0151,\u00f8", "\u0173,\u00f9,\u00fa,\u00fb,\u00fc,\u016f,\u0171", "\u0117,\u00e8,\u00e9,\u00ea,\u00eb,\u0119,\u011b", "\u012f,\u00ec,\u00ed,\u00ee,\u00ef,\u0131", - "\u0146", "\u017e", + "\u0146", "\u00e7,\u0107", "\u00df,\u015b,\u015f", null, @@ -3163,12 +3154,16 @@ public final class KeyboardTextsTable { null, null, null, - "\u017c,\u017a", null, null, null, null, null, + "\u017c,\u017a", + null, + null, + null, + null, "\u0123", null, null, @@ -3187,11 +3182,19 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, "\u00f1,\u0144", null, null, null, null, + "\u013c", + null, + null, + null, + null, null, null, null, @@ -3214,7 +3217,6 @@ public final class KeyboardTextsTable { null, null, null, - "\u013c", null, null, null, @@ -3231,6 +3233,7 @@ public final class KeyboardTextsTable { null, null, null, + "\u0159,\u0155", null, null, null, @@ -3243,17 +3246,8 @@ public final class KeyboardTextsTable { null, null, null, - "\u0137", - null, - null, - null, - null, - null, - null, "\u011f", - null, - null, - "\u0159,\u0155", + "\u0137", null, "\u0142,\u013a,\u013e" }; @@ -3307,6 +3301,7 @@ public final class KeyboardTextsTable { null, null, null, + null, "\u0450", null, null, @@ -3371,23 +3366,21 @@ public final class KeyboardTextsTable { null, null, null, - "\u0455", null, null, - "\u0437", null, + "\u045d", + null, + "\u0453", "\u045c", null, null, null, null, null, + "\u0455", null, - null, - "\u0453", - null, - null, - "\u045d" + "\u0437" }; private static final String[] TEXTS_ml = { @@ -3443,31 +3436,29 @@ public final class KeyboardTextsTable { null, null, null, - "9", - "\u0968", - "\u0969", - "0", + "\u096f", + "\u096e", "4", + "8", + "3", + "5", + "9", + "7", + "\u0969", + "\u0968", null, "2", - "5", - "\u096a", - "\u0966", - "7", - null, - "\u096d", - "\u0967", - "8", - "\u096f", - "\u096c", - null, - "\u096e", - "1", - "6", - "3", "\u096b", + "1", + "\u096d", null, + "\u096a", + "\u096c", + "0", + "\u0967", null, + "6", + "\u0966", "?\u0967\u0968\u0969" }; @@ -3526,6 +3517,9 @@ public final class KeyboardTextsTable { null, null, null, + "\u104a", + null, + null, "\u104b", null, null, @@ -3535,10 +3529,11 @@ public final class KeyboardTextsTable { null, null, null, - "\u104a", - "!autoColumnOrder!9,\u104a,.,?,!,#,),(,/,;,...,',@,:,-,\\\",+,\\%,&", null, null, + "!autoColumnOrder!9,\u104a,.,?,!,#,),(,/,;,...,',@,:,-,\\\",+,\\%,&", + "\u104b", + null, null, null, null, @@ -3549,10 +3544,6 @@ public final class KeyboardTextsTable { null, null, "\\", - "\u104b", - null, - null, - null, null, null, null, @@ -3579,21 +3570,14 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - null, - null, - null, - null, - null, "!autoColumnOrder!8,.,',#,),(,/,;,@,...,:,-,\\\",+,\\%,&" }; private static final String[] TEXTS_nb = { "nb", null, - "\u00f8,\u00f6,\u00f4,\u00f2,\u00f3,\u00f5,\u0153,\u014d", "\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, @@ -3641,14 +3625,25 @@ public final class KeyboardTextsTable { null, null, "\u00f8", + null, + null, + null, + null, + "\u00f6", + null, + null, + "\u00e5", + null, + null, "\u00e6", null, null, null, null, null, - "\u00f6", - "\u00e5", + null, + null, + null, null, null, null, @@ -3693,44 +3688,41 @@ public final class KeyboardTextsTable { null, null, null, - "9", - "\u0968", - "\u0969", - "0", + "\u096f", + "\u096e", "4", + "8", + "3", + "5", + "9", + "7", + "\u0969", + "\u0968", null, "2", - "5", - "\u096a", - "\u0966", - "7", - null, - "\u096d", - "\u0967", - "8", - "\u096f", - "\u096c", - null, - "\u096e", - "1", - "6", - "3", "\u096b", + "1", + "\u096d", + null, + "\u096a", + "\u096c", + "0", + "\u0967", + null, + "6", + "\u0966", + "?\u0967\u0968\u0969", "!autoColumnOrder!8,.,\\\\,',#,),(,/,;,@,:,-,\\\",+,\\%,&", null, - "?\u0967\u0968\u0969", + null, + null, + null, null, null, null, null, "\u0964", null, - null, - null, - null, - null, - null, - null, "!autoColumnOrder!9,.,\\\\,?,!,#,),(,/,;,',@,:,-,\\\",+,\\%,&", null, null, @@ -3741,19 +3733,14 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - null, - null, - null, "\u0964" }; private static final String[] TEXTS_nl = { "nl", null, - "\u00f3,\u00f6", "\u00e1,\u00e4,\u00e2,\u00e0", + "\u00f3,\u00f6", "\u00fa,\u00fc", "\u00e9,\u00eb,\u00ea,\u00e8", "\u00ed,\u00ef,\u00ec,\u00ee,\u012f,\u012b,\u0133", @@ -3761,9 +3748,9 @@ public final class KeyboardTextsTable { "!text/single_9qm_rqm", null, null, - "\u00f4,\u00f2,\u00f5,\u0153,\u00f8,\u014d", "\u00e6,\u00e3,\u00e5,\u0101", null, + "\u00f4,\u00f2,\u00f5,\u0153,\u00f8,\u014d", "\u00fb,\u00f9,\u016b", "\u0119,\u0117,\u0113" }; @@ -3771,8 +3758,8 @@ public final class KeyboardTextsTable { private static final String[] TEXTS_pl = { "pl", null, - "\u00f3", "\u0105", + "\u00f3", null, "\u0119", null, @@ -3780,14 +3767,14 @@ public final class KeyboardTextsTable { "!text/single_9qm_rqm", "\u0107", null, - "\u00f6,\u00f4,\u00f2,\u00f5,\u0153,\u00f8,\u014d", "\u00e1,\u00e0,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101", "\u015b", + "\u00f6,\u00f4,\u00f2,\u00f5,\u0153,\u00f8,\u014d", null, "\u00e8,\u00e9,\u00ea,\u00eb,\u0117,\u0113", null, - "\u0144", "\u017c,\u017a", + "\u0144", "\u00e7,\u010d", "\u00df,\u0161", null, @@ -3798,6 +3785,11 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, + null, + null, "\u017e", null, null, @@ -3822,41 +3814,21 @@ public final class KeyboardTextsTable { 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, "\u0142" }; private static final String[] TEXTS_pt = { "pt", null, - "\u00f3,\u00f5,\u00f4", "\u00e1,\u00e3,\u00e0,\u00e2", + "\u00f3,\u00f5,\u00f4", "\u00fa,\u00fc", "\u00e9,\u00ea", "\u00ed", @@ -3864,9 +3836,9 @@ public final class KeyboardTextsTable { null, "\u00e7", null, - "\u00f2,\u00f6,\u0153,\u00f8,\u014d,\u00ba", "\u00e4,\u00e5,\u00e6,\u00aa", null, + "\u00f2,\u00f6,\u0153,\u00f8,\u014d,\u00ba", "\u00f9,\u00fb,\u016b", "\u00e8,\u0119,\u0117,\u0113,\u00eb", "\u00ee,\u00ec,\u00ef,\u012f,\u012b", @@ -3941,37 +3913,33 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - 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_ro = { "ro", null, - null, "\u0103,\u00e2", null, null, + null, "\u00ee", "!text/double_9qm_rqm", "!text/single_9qm_rqm", null, null, - null, "\u00e3,\u00e0,\u00e1,\u00e4,\u00e6,\u00e5,\u0101", "\u0219", null, null, + null, "\u00ef,\u00ec,\u00ed,\u012f,\u012b", null, null, @@ -4008,10 +3976,6 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - null, - null, "\u021b" }; @@ -4064,20 +4028,22 @@ public final class KeyboardTextsTable { null, null, null, + null, "\u0451", null, + "\u044b", + null, + "\u0438", null, null, "\u044d", null, null, + null, + null, + null, "\u0449", - null, - null, - null, - "\u0438", - "\u044a", - "\u044b" + "\u044a" }; private static final String[] TEXTS_si = { @@ -4097,8 +4063,8 @@ public final class KeyboardTextsTable { private static final String[] TEXTS_sk = { "sk", null, - "\u00f4,\u00f3", "\u00e1,\u00e4", + "\u00f4,\u00f3", "\u00fa", "\u00e9", "\u00ed", @@ -4106,14 +4072,14 @@ public final class KeyboardTextsTable { "!text/single_9qm_lqm", "\u010d", null, - "\u00f6,\u00f2,\u00f5,\u0153,\u0151,\u00f8", "\u0101,\u00e0,\u00e2,\u00e3,\u00e5,\u00e6,\u0105", "\u0161", + "\u00f6,\u00f2,\u00f5,\u0153,\u0151,\u00f8", "\u016f,\u00fc,\u016b,\u0173,\u00f9,\u00fb,\u0171", "\u011b,\u0113,\u0117,\u00e8,\u00ea,\u00eb,\u0119", "\u012b,\u012f,\u00ec,\u00ee,\u00ef,\u0131", - "\u0148", "\u017e", + "\u0148", "\u00e7,\u0107", "\u00df,\u015b,\u015f", "!text/double_raqm_laqm", @@ -4124,6 +4090,11 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, + null, + null, "\u017c,\u017a", null, null, @@ -4134,8 +4105,6 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, "\u010f", null, null, @@ -4144,13 +4113,6 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - null, - null, - "\u0146,\u00f1,\u0144", - null, - null, "\u0165", null, null, @@ -4159,18 +4121,7 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - null, - null, - null, - null, - "\u0155", - null, - null, - null, - null, - null, + "\u0146,\u00f1,\u0144", null, null, null, @@ -4192,6 +4143,12 @@ public final class KeyboardTextsTable { null, null, null, + "\u0155", + null, + null, + null, + null, + null, null, null, "\u00ff", @@ -4212,10 +4169,22 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, "\u0159,\u0157", null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, "\u013c,\u0142", null, null, @@ -4247,13 +4216,13 @@ public final class KeyboardTextsTable { "\u010d", null, null, - null, "\u0161", null, null, null, null, "\u017e", + null, "\u0107", null, "!text/double_raqm_laqm", @@ -4309,6 +4278,7 @@ public final class KeyboardTextsTable { null, null, null, + null, "\u0450", null, null, @@ -4373,23 +4343,21 @@ public final class KeyboardTextsTable { null, null, null, - "\u0437", null, null, - "\u0455", null, + "\u045d", + null, + "\u0452", "\u045b", null, null, null, null, null, + "\u0437", null, - null, - "\u0452", - null, - null, - "\u045d" + "\u0455" }; private static final String[] TEXTS_sr_ZZ = { @@ -4405,7 +4373,6 @@ public final class KeyboardTextsTable { "\u010d,\u0107,%", null, null, - null, "\u0161,%", null, null, @@ -4434,6 +4401,10 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, + null, "\u0111,%", null, null, @@ -4499,38 +4470,35 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, "Tra\u017ei", - null, - "\u010cekaj", - "Idi", - null, - null, - null, - null, - null, - null, - null, + "Pauza", null, null, null, "Preth", + null, + null, + "Gotov", + null, + null, + "\u010cekaj", + null, + null, + null, + null, + null, "\u0160alji", null, null, - null, - "Pauza", - null, - "Gotov", + "Idi", "Sled" }; private static final String[] TEXTS_sv = { "sv", null, - "\u00f6", "\u00e4,\u00e5", + "\u00f6", null, "\u00e9", null, @@ -4538,9 +4506,9 @@ public final class KeyboardTextsTable { null, null, null, - "\u00f8,\u0153,\u00f3,\u00f2,\u00f4,\u00f5,\u014d", "\u00e6,\u00e1,\u00e0,\u00e2,\u0105,\u00e3", null, + "\u00f8,\u0153,\u00f3,\u00f2,\u00f4,\u00f5,\u014d", null, "\u00e8,\u00ea,\u00eb,\u0119", null, @@ -4578,14 +4546,25 @@ public final class KeyboardTextsTable { null, null, "\u00f6", + null, + null, + null, + null, + "\u00f8,\u0153", + null, + null, + "\u00e5", + null, + null, "\u00e4", null, null, null, null, null, - "\u00f8,\u0153", - "\u00e5", + null, + null, + null, null, null, null, @@ -4608,8 +4587,8 @@ public final class KeyboardTextsTable { private static final String[] TEXTS_sw = { "sw", null, - "\u00f4,\u00f6,\u00f2,\u00f3,\u0153,\u00f8,\u014d,\u00f5", "\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", @@ -4618,11 +4597,12 @@ public final class KeyboardTextsTable { "\u00e7", null, null, - null, "\u00df", null, null, null, + null, + null, "\u00f1", null, null, @@ -4641,6 +4621,9 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, "g\\'" }; @@ -4708,8 +4691,8 @@ public final class KeyboardTextsTable { private static final String[] TEXTS_tl = { "tl", null, - "\u00f3,\u00f2,\u00f6,\u00f4,\u00f5,\u00f8,\u0153,\u014d,\u00ba", "\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", @@ -4723,14 +4706,15 @@ public final class KeyboardTextsTable { null, null, null, + null, "\u00f1,\u0144" }; private static final String[] TEXTS_tr = { "tr", null, - "\u00f6", null, + "\u00f6", "\u00fc", null, "\u0131", @@ -4738,9 +4722,9 @@ public final class KeyboardTextsTable { null, "\u00e7", null, - "\u00f4,\u0153,\u00f2,\u00f3,\u00f5,\u00f8,\u014d", null, "\u015f", + "\u00f4,\u0153,\u00f2,\u00f3,\u00f5,\u00f8,\u014d", "\u00fb,\u00f9,\u00fa,\u016b", null, "\u00ee,\u00ef,\u00ec,\u00ed,\u012f,\u012b", @@ -4762,6 +4746,10 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, + null, "\u011f" }; @@ -4817,17 +4805,19 @@ public final class KeyboardTextsTable { null, null, null, + "\u0456", + null, + "\u0438", + null, null, "\u0454", null, null, + null, + null, + null, "\u0449", - null, - null, - null, - "\u0438", "\u044a", - "\u0456", null, null, null, @@ -4876,22 +4866,17 @@ public final class KeyboardTextsTable { null, null, null, + "\u0457", null, null, - null, - "\u0491", - null, - null, - null, - null, - "\u0457" + "\u0491" }; private static final String[] TEXTS_uz = { "uz", null, - "\u00f6,\u00f4,\u0153,\u00f2,\u00f3,\u00f5,\u00f8,\u014d", "\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", @@ -4900,13 +4885,13 @@ public final class KeyboardTextsTable { "\u00e7,\u0107,\u010d", null, null, - null, "\u015f,\u00df,\u015b,\u0161", null, null, null, - "\u0148,\u00f1", + null, "\u017e", + "\u0148,\u00f1", null, null, null, @@ -4923,14 +4908,18 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, + null, "\u011f" }; private static final String[] TEXTS_vi = { "vi", null, - "\u00f2,\u00f3,\u1ecf,\u00f5,\u1ecd,\u00f4,\u1ed3,\u1ed1,\u1ed5,\u1ed7,\u1ed9,\u01a1,\u1edd,\u1edb,\u1edf,\u1ee1,\u1ee3", "\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", @@ -4968,14 +4957,17 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, "\u0111" }; private static final String[] TEXTS_zu = { "zu", null, - "\u00f3,\u00f4,\u00f6,\u00f2,\u0153,\u00f8,\u014d,\u00f5", "\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", @@ -4984,19 +4976,20 @@ public final class KeyboardTextsTable { "\u00e7", null, null, - null, "\u00df", null, null, null, + null, + null, "\u00f1" }; private static final String[] TEXTS_zz = { "zz", null, - "\u00f2,\u00f3,\u00f4,\u00f5,\u00f6,\u00f8,\u014d,\u014f,\u0151,\u0153,\u00ba", "\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", @@ -5005,13 +4998,13 @@ public final class KeyboardTextsTable { "\u00e7,\u0107,\u0109,\u010b,\u010d", null, null, - null, "\u00df,\u015b,\u015d,\u015f,\u0161,\u017f", null, null, null, - "\u00f1,\u0144,\u0146,\u0148,\u0149,\u014b", + null, "\u017a,\u017c,\u017e", + "\u00f1,\u0144,\u0146,\u0148,\u0149,\u014b", null, null, null, @@ -5028,12 +5021,15 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, + null, "\u011d,\u011f,\u0121,\u0123", null, null, null, null, - null, "\u010f,\u0111,\u00f0", null, null, @@ -5042,13 +5038,6 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - null, - null, - null, - null, - null, "\u00fe,\u0163,\u0165,\u0167", null, null, @@ -5062,6 +5051,22 @@ public final class KeyboardTextsTable { null, null, null, + "\u013a,\u013c,\u013e,\u0140,\u0142", + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, null, "\u0155,\u0157,\u0159", null, @@ -5073,12 +5078,6 @@ public final class KeyboardTextsTable { null, null, null, - "\u013a,\u013c,\u013e,\u0140,\u0142", - null, - null, - null, - null, - null, null, null, null, @@ -5102,6 +5101,13 @@ public final class KeyboardTextsTable { null, "\u0125", null, + null, + null, + null, + null, + null, + null, + null, "\u0137,\u0138", null, null, @@ -5116,16 +5122,10 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - null, - null, - null, - null, - null, - null, "\u0175", null, + null, + null, "\u0135" }; @@ -5141,9 +5141,9 @@ public final class KeyboardTextsTable { "!text/single_lqm_rqm", EMPTY, "$", - "\u00f3,\u00f4,\u00f6,\u00f2,\u0153,\u00f8,\u014d,\u00f5", "\u00e0,\u00e1,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101", EMPTY, + "\u00f3,\u00f4,\u00f6,\u00f2,\u0153,\u00f8,\u014d,\u00f5", "\u00fa,\u00fb,\u00fc,\u00f9,\u016b", "\u00e9,\u00e8,\u00ea,\u00eb,\u0113", "\u00ed,\u00ee,\u00ef,\u012b,\u00ec", @@ -5154,272 +5154,272 @@ public final class KeyboardTextsTable { "!text/double_laqm_raqm", "!text/single_laqm_raqm", EMPTY, - EMPTY, - "2", - "3", - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - "4", - "0", - EMPTY, - EMPTY, - "7", - "1", - EMPTY, "9", - "6", - EMPTY, "8", EMPTY, EMPTY, EMPTY, + EMPTY, + EMPTY, + EMPTY, + "3", + "2", + EMPTY, + EMPTY, "5", + EMPTY, + "7", + EMPTY, + "4", + "6", + EMPTY, + "1", + EMPTY, + EMPTY, + "0", + "?123", "!text/morekeys_tablet_punctuation", EMPTY, - "?123", "\u00f6", + EMPTY, + EMPTY, + EMPTY, + ",", + "\u00f8", + EMPTY, + ".", + "\u00e5", + "!text/morekeys_punctuation", + "\u00f1", "\u00e4", EMPTY, - "\u00f1", - ".", EMPTY, + "\u00ab", EMPTY, - "\u00f8", - "\u00e5", - EMPTY, - EMPTY, - EMPTY, - "!text/morekeys_punctuation", + "}", ",", "!autoColumnOrder!8,\\,,?,!,#,!text/keyspec_right_parenthesis,!text/keyspec_left_parenthesis,/,;,',@,:,-,\",+,\\%,&", - "}", - "\u2039", + ".", + "<", + "\u00bf", + "\u2020,\u2021,\u2605", + "{", + ")", "\u00bb", + ">", + "\u2265", "(", + "\u2039", + EMPTY, + "\u2264", + EMPTY, + "]", "\u203a", EMPTY, - "[", - "\u2020,\u2021,\u2605", - "\u2265", - "<", "\u00e6", - EMPTY, - ".", - "\u2264", - ",", - EMPTY, - "{", - "\u00ab", - "\u00bf", - "]", - EMPTY, - ")", - ">", - EMPTY, - EMPTY, - "%", - "\u2030", - "!fixedColumnOrder!3,!text/keyspecs_right_parenthesis_more_keys", + "[", "\u00f1", - EMPTY, - "\u266a,\u2665,\u2660,\u2666,\u2663", - ";", - EMPTY, - EMPTY, + "\u2030", EMPTY, EMPTY, + "!fixedColumnOrder!3,!text/keyspecs_right_parenthesis_more_keys", EMPTY, "?", EMPTY, + "%", + "\u266a,\u2665,\u2660,\u2666,\u2663", EMPTY, EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, + ";", "!fixedColumnOrder!3,!text/keyspecs_left_parenthesis_more_keys", - EMPTY, - "!string/label_search_key", - EMPTY, - "!string/label_wait_key", - "!string/label_go_key", - EMPTY, - EMPTY, "!autoColumnOrder!8,\\,,?,!,#,!text/keyspec_right_parenthesis,!text/keyspec_left_parenthesis,/,;,',@,:,-,\",+,\\%,&", EMPTY, - EMPTY, - EMPTY, - EMPTY, + "!string/label_search_key", + "!string/label_pause_key", EMPTY, EMPTY, EMPTY, "!string/label_previous_key", + EMPTY, + EMPTY, + "!string/label_done_key", + EMPTY, + EMPTY, + "!string/label_wait_key", + EMPTY, + EMPTY, + EMPTY, + EMPTY, + EMPTY, "!string/label_send_key", EMPTY, EMPTY, - EMPTY, - "!string/label_pause_key", - EMPTY, - "!string/label_done_key", + "!string/label_go_key", "!string/label_next_key", + "\u00b1", + "\u00a1,\u203d", + "!fixedColumnOrder!3,!text/keyspec_right_single_angle_quote,!text/keyspec_greater_than_equal,!text/keyspec_right_double_angle_quote", + "q", + "x", EMPTY, EMPTY, EMPTY, - "!fixedColumnOrder!3,!text/keyspec_left_single_angle_quote,!text/keyspec_less_than_equal,!text/keyspec_left_double_angle_quote", EMPTY, EMPTY, + "\u00a2,\u00a3,\u20ac,\u00a5,\u20b1", + EMPTY, "y", EMPTY, - "\u00a1,\u203d", - EMPTY, - "!fixedColumnOrder!3,!text/keyspec_right_single_angle_quote,!text/keyspec_greater_than_equal,!text/keyspec_right_double_angle_quote", - "\u00a2,\u00a3,\u20ac,\u00a5,\u20b1", - "\u00b1", + "!fixedColumnOrder!3,!text/keyspec_left_single_angle_quote,!text/keyspec_less_than_equal,!text/keyspec_left_double_angle_quote", "w", - "q", - "x", - "!fixedColumnOrder!4,!needsDividers!,!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", - "!", EMPTY, - "&", + EMPTY, + "\u201c,\u201e,\u201d", + "= \\\\ <", + EMPTY, + "#", + "|", + "}", + EMPTY, "*", + "?,/", + EMPTY, + EMPTY, + "\u2070,\u2080,\u207f,\u2205", + EMPTY, EMPTY, "\u201a,\u2018,\u2019", - EMPTY, - "}", - "\u2074,\u2084", - "\u2075,\u2085,\u215d", - EMPTY, - EMPTY, - EMPTY, - EMPTY, - "!fixedColumnOrder!6,!text/double_quotes,!text/single_quotes,!text/double_angle_quotes,!text/single_angle_quotes", - EMPTY, - "123", - "\u2076,\u2086", - "\u201c,\u201e,\u201d", "!fixedColumnOrder!4,!needsDividers!,!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", EMPTY, - EMPTY, - EMPTY, + "\u2074,\u2084", EMPTY, "\u2018,\u2019,\u201a", + "+,=", EMPTY, - EMPTY, - EMPTY, - "= \\\\ <", - "6", - EMPTY, - EMPTY, - "PM", - EMPTY, - EMPTY, - "1", - "\u2078,\u2088", - EMPTY, - "3", - EMPTY, - "!hasLabels!,!text/label_next_key|!code/key_action_next", - "\u201d,\u201e,\u201c", - EMPTY, - "\u201e,\u201c,\u201d", - EMPTY, - "4", - "?,/", - "<", - EMPTY, - "!text/keyspec_left_double_angle_quote,!text/keyspec_right_double_angle_quote", - "!hasLabels!,!text/label_previous_key|!code/key_action_previous", - "!icon/action_select_all|!code/action_select_all", - "7", - "$,\u00a2,\u20ac,\u00a3,\u00a5,\u20b1", - "%", - "[", - "&,|", - EMPTY, - "*", - EMPTY, - "9", - "!fixedColumnOrder!5,!text/double_quotes,!text/double_angle_quotes", - "!icon/shortcut_key|!code/key_shortcut", - "!icon/action_cut|!code/action_cut", - "\u2018,\u201a,\u2019", - "]", - "8", - EMPTY, - "\u00b2,\u2082,\u2154", - "0", - "\"", - EMPTY, - "!icon/action_undo|!code/action_undo", - "$", - "|", - "\u00b3,\u2083,\u00be,\u215c", - EMPTY, - EMPTY, - "\u2079,\u2089", - ":", "!icon/action_paste|!code/action_paste", "-,\u2013,\u2014,_", EMPTY, - "=", + "\\%", EMPTY, + EMPTY, + "\u201c,\u201d,\u201e", + EMPTY, + EMPTY, + EMPTY, + "\u2077,\u2087,\u215e", + EMPTY, + EMPTY, + "4", + "[", + EMPTY, + EMPTY, + "~ [ <", + "@", + "AM", + ";", + "!icon/action_cut|!code/action_cut", + "\u2019,\u201a,\u2018", + "$,\u00a2,\u20ac,\u00a3,\u00a5,\u20b1", + ".com", + EMPTY, + "!text/keyspec_less_than,!text/keyspec_left_curly_bracket,!text/keyspec_left_square_bracket", + "'", + EMPTY, + "]", + "!icon/action_redo|!code/action_redo", + "6", + "9", "5", + "!icon/action_undo|!code/action_undo", + "\u00b3,\u2083,\u00be,\u215c", + "!", + "$,\u20ac,\u00a3,\u00a5,\u00a2", + "1", + "PM", + "!fixedColumnOrder!2,!hasLabels!,!text/keylabel_time_am,!text/keylabel_time_pm", + "8", + EMPTY, + EMPTY, + "\u2079,\u2089", + EMPTY, + EMPTY, + "*", + ":", + EMPTY, + EMPTY, + "!text/keyspec_left_double_angle_quote,!text/keyspec_right_double_angle_quote", + EMPTY, + EMPTY, + EMPTY, + ")", + EMPTY, + "%", + "\u00b2,\u2082,\u2154", + "!icon/action_select_all|!code/action_select_all", + "!text/keyspec_right_double_angle_quote,!text/keyspec_left_double_angle_quote", + "!", + "),],},>", + "\uff0a\uff03", "!text/keyspec_left_single_angle_quote,!text/keyspec_right_single_angle_quote", EMPTY, + "(,[,{,<", + "!icon/settings_key|!code/key_settings", EMPTY, - "!fixedColumnOrder!2,!hasLabels!,!text/keylabel_time_am,!text/keylabel_time_pm", - "!text/keyspec_right_double_angle_quote,!text/keyspec_left_double_angle_quote", + "!icon/shortcut_key|!code/key_shortcut", + "\u201d,\u201e,\u201c", + "\u2076,\u2086", + "#", + EMPTY, + "(", + EMPTY, + "!icon/action_copy|!code/action_copy", + "=", + "\"", + EMPTY, + "\\%", + "7", + ">", + "\u201e,\u201c,\u201d", "2", EMPTY, EMPTY, - "!text/keyspec_less_than,!text/keyspec_left_curly_bracket,!text/keyspec_left_square_bracket", + "$", EMPTY, - "\\%", - ">", - "!icon/action_redo|!code/action_redo", + "&", EMPTY, EMPTY, - EMPTY, - "\\\\", + "\u2018,\u201a,\u2019", "!text/keyspec_greater_than,!text/keyspec_right_curly_bracket,!text/keyspec_right_square_bracket", - "\u2077,\u2087,\u215e", "!text/keyspec_right_single_angle_quote,!text/keyspec_left_single_angle_quote", - "!icon/settings_key|!code/key_settings", + EMPTY, "\u00b9,\u2081,\u00bd,\u2153,\u00bc,\u215b", - "~ [ <", - "\uff0a\uff03", - "),],},>", - EMPTY, - EMPTY, + "^", + "@", + "{", "!hasLabels!,.net,.org,.gov,.edu", + "&,|", + "\u2078,\u2088", + "!hasLabels!,!text/label_next_key|!code/key_action_next", + "!hasLabels!,!text/label_previous_key|!code/key_action_previous", + EMPTY, + "\u2075,\u2085,\u215d", + "0", + "!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", + "\\\\", + "<", + "123", + EMPTY, + "!fixedColumnOrder!4,!needsDividers!,!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", EMPTY, "!fixedColumnOrder!5,!text/single_quotes,!text/single_angle_quotes", - "@", - "AM", - "(", - "(,[,{,<", EMPTY, - ")", - "\u2019,\u201a,\u2018", - ".com", - "!", - "#", - "+,=", - EMPTY, - "\u2070,\u2080,\u207f,\u2205", - ";", - "#", - EMPTY, - "$,\u20ac,\u00a3,\u00a5,\u00a2", - EMPTY, - "'", - "^", - "{", - "@", - "\u201c,\u201d,\u201e", - "\\%", - "!icon/action_copy|!code/action_copy", - EMPTY + "3" }; diff --git a/java/src/org/futo/inputmethod/v2keyboard/BaseKey.kt b/java/src/org/futo/inputmethod/v2keyboard/BaseKey.kt index 08a9009a1..d3619a48b 100644 --- a/java/src/org/futo/inputmethod/v2keyboard/BaseKey.kt +++ b/java/src/org/futo/inputmethod/v2keyboard/BaseKey.kt @@ -12,14 +12,68 @@ import org.futo.inputmethod.latin.common.StringUtils typealias KeyJ = org.futo.inputmethod.keyboard.Key +/** + * Width tokens for keys. Rather than explicitly specifying a width in percentage as is common in + * other layout systems, we instead use width tokens, which eliminates the need to explicitly + * calculate and specify width percentages for most cases. + */ @Serializable enum class KeyWidth { + /** + * Regular key width. Used for normal letters (QWERTY etc) + * + * ##### Width calculation + * Simply put, the width of this is calculated by dividing the total keyboard width by the + * maximum number of keys in a row. It is consistent across the entire keyboard. + * + * For example, if a keyboard has 3 rows, with 10, 9, and 7 keys respectively, + * the regular key width will be 100% / 10 = 10% for the entire keyboard. + * The rows with 9 and 7 keys will receive padding by default to keep them centered due + * to the extra space. + */ Regular, + + /** + * Functional key width. Used for functional keys (Shift, Backspace, Enter, Symbols, etc) + * + * ##### Width calculation + * The width of this is at least the value specified in [Keyboard.minimumFunctionalKeyWidth] + * or, for the bottom row, [Keyboard.minimumBottomRowFunctionalKeyWidth]. + * + * The width may be larger than the minimum if the available space is there. + * For example on the QWERTY layout, the ZXCV row has only 7 keys at a width of 10%, using up + * only 70% of space. The remaining 30% of space is divided among the shift and backspace, + * meaning the functional width is 15%. + */ FunctionalKey, + + /** + * Grow width. Takes up all remaining space divided evenly among all grow keys in the row. + * Mainly used for spacebar. + * + * Grow keys are not supported in split layouts, and their presence can complicate width + * calculation for functional keys and others. Avoid use when possible. + */ Grow, + + /** + * The Custom1 width as defined in [Keyboard.overrideWidths] (values are between 0.0 and 1.0) + */ Custom1, + + /** + * The Custom2 width as defined in [Keyboard.overrideWidths] (values are between 0.0 and 1.0) + */ Custom2, + + /** + * The Custom3 width as defined in [Keyboard.overrideWidths] (values are between 0.0 and 1.0) + */ Custom3, + + /** + * The Custom4 width as defined in [Keyboard.overrideWidths] (values are between 0.0 and 1.0) + */ Custom4, } @@ -91,14 +145,29 @@ internal fun filterMoreKeysFlags(moreKeys: List): List = !it.startsWith(KeyJ.MORE_KEYS_NO_PANEL_AUTO_MORE_KEY) } +/** + * Specifies which morekeys can be automatically added to the key. + */ @Serializable enum class MoreKeyMode( val autoFromKeyspec: Boolean, val autoNumFromCoord: Boolean, val autoSymFromCoord: Boolean ) { + /** + * Automatically insert morekeys from keyspec shortcuts, as well as numbers, symbols and actions + * (if not disabled by user). These count towards KeyCoordinate. + */ All(true, true, true), + + /** + * Only automatically insert morekeys from keyspec shortcut. + */ OnlyFromKeyspec(true, false, false), + + /** + * Do not automatically insert any morekeys. + */ OnlyExplicit(false, false, false) } @@ -106,7 +175,9 @@ private fun Int.and(other: Boolean): Int { return if(other) { this } else { 0 } } - +/** + * Flags for the key label + */ @Serializable data class LabelFlags( val alignHintLabelToBottom: Boolean = false, @@ -129,17 +200,73 @@ data class LabelFlags( KeyJ.LABEL_FLAGS_AUTO_X_SCALE.and(autoXScale) } +/** + * Attributes for keys. + * + * Values are inherited in the following order: + * `Key.attributes > Row.attributes > Keyboard.attributes > DefaultKeyAttributes` + */ @Serializable data class KeyAttributes( + /** + * Key width token + */ val width: KeyWidth? = null, + + /** + * Visual style (background) for the key + */ val style: KeyVisualStyle? = null, + + /** + * Whether or not to anchor the key to the edges. + * + * When a row is not wide enough to fill 100%, padding is added to the edges of the row. + * If there are anchored keys in the row, the padding will be added after the anchored + * keys, keeping the anchored keys at the edge. + */ val anchored: Boolean? = null, + + /** + * Whether or not to show the popup indicator when the key is pressed. + * This is usually desirable for letters on normal layouts (QWERTY letters), but undesirable + * for functional keys (Shift, Backspace), or certain layouts (phone layout) + */ val showPopup: Boolean? = null, + + /** + * Which moreKeys to add automatically + */ val moreKeyMode: MoreKeyMode? = null, + + /** + * Whether or not to use keyspec shortcuts. + * For example, `$` gets automatically converted to `!text/keyspec_currency`. + * + * The full list of keyspec shortcuts is defined in `KeySpecShortcuts`. + */ val useKeySpecShortcut: Boolean? = null, + + /** + * Whether or not longpress is enabled for the key + */ val longPressEnabled: Boolean? = null, + + /** + * Label flags for how the key's label (and its hint) should be presented + */ val labelFlags: LabelFlags? = null, + + /** + * Whether or not the key is repeatable, intended for backspace + */ val repeatableEnabled: Boolean? = null, + + /** + * Whether or not the key is automatically shiftable. If true, it automatically becomes + * uppercased when the layout is shifted. If this is not desired, this can be set to false. + * Shift behavior can be customized by using a [CaseSelector]. + */ val shiftable: Boolean? = null, ) { fun getEffectiveAttributes(row: Row, keyboard: Keyboard): KeyAttributes { @@ -190,24 +317,56 @@ object MoreKeysListSerializer: SpacedListSerializer(String.serializer(), MoreKeySpec.splitKeySpecs(it)?.toList() ?: listOf() }) +/** + * The base key + */ @Serializable @SerialName("base") data class BaseKey( - // AOSP Keyboard key spec + /** + * AOSP key spec. It can contain a custom label, code, icon, output text. + * + * Each key specification is one of the following: + * - Label optionally followed by keyOutputText (keyLabel|keyOutputText). + * - Label optionally followed by code point (keyLabel|!code/code_name). + * - Icon followed by keyOutputText (!icon/icon_name|keyOutputText). + * - Icon followed by code point (!icon/icon_name|!code/code_name). + * + * Label and keyOutputText are one of the following: + * - Literal string. + * - Label reference represented by (!text/label_name), see {@link KeyboardTextsSet}. + * - String resource reference represented by (!text/resource_name), see {@link KeyboardTextsSet}. + * + * Icon is represented by (!icon/icon_name), see {@link KeyboardIconsSet}. + * + * Code is one of the following: + * - Code point presented by hexadecimal string prefixed with "0x" + * - Code reference represented by (!code/code_name), see {@link KeyboardCodesSet}. + * + * Special character, comma ',' backslash '\', and bar '|' can be escaped by '\' character. + * Note that the '\' is also parsed by XML parser and {@link MoreKeySpec#splitKeySpecs(String)} + * as well. + */ val spec: String, - // Attributes + /** + * Attributes for this key. Values defined here supersede any other values. Values which are + * not defined are inherited from the row, keyboard, or default attributes. + */ val attributes: KeyAttributes = KeyAttributes(), + /** + * More keys for this key. In YAML, it can be defined as a list or a comma-separated string. + * + * The values here are key specs. + */ val moreKeys: @Serializable(with = MoreKeysListSerializer::class) List = listOf(), - // If these values are set, they override spec values - val outputText: String? = null, - val label: String? = null, - val code: Int? = null, - val icon: String? = null, - - // If set, will override default hint from moreKeys + /** + * If set, overrides a default hint from the value of moreKeys. + * + * TODO: Currently does not override + */ val hint: String? = null, ) : AbstractKey { override fun computeData(params: KeyboardParams, row: Row, keyboard: Keyboard, coordinate: KeyCoordinate): ComputedKeyData { @@ -232,10 +391,10 @@ data class BaseKey( ?: spec ) - val label = label ?: expandedSpec?.let { KeySpecParser.getLabel(it) } ?: "" - val icon = icon ?: expandedSpec?.let { KeySpecParser.getIconId(it) } ?: "" - val code = code ?: KeySpecParser.getCode(expandedSpec) - val outputText = outputText ?: KeySpecParser.getOutputText(expandedSpec) + val label = expandedSpec?.let { KeySpecParser.getLabel(it) } ?: "" + val icon = expandedSpec?.let { KeySpecParser.getIconId(it) } ?: "" + val code = KeySpecParser.getCode(expandedSpec) + val outputText = KeySpecParser.getOutputText(expandedSpec) val moreKeyMode = attributes.moreKeyMode!! @@ -295,16 +454,38 @@ data class BaseKey( } } +/** + * Case selector key. Allows specifying a different type of key depending on when the layout is + * shifted or not. + */ @Serializable @SerialName("case") data class CaseSelector( + /** + * Key to use normally + */ val normal: Key, + + /** + * Key to use when shifted + */ val shifted: Key = normal, - val automaticShifted: Key = shifted, - val manualShifted: Key = shifted, + + /** + * Key to use when shift locked (caps lock), defaults to [shifted] + */ val shiftLocked: Key = shifted, - val shiftLockShifted: Key = shiftLocked, + + /** + * Key to use when in symbols layout, defaults to [normal]. Mainly used internally for + * [TemplateShiftKey] + */ val symbols: Key = normal, + + /** + * Key to use when in symbols layout, defaults to [normal]. Mainly used internally for + * [TemplateShiftKey] + */ val symbolsShifted: Key = normal ) : AbstractKey { override fun computeData( @@ -315,10 +496,15 @@ data class CaseSelector( ): ComputedKeyData? = when(params.mId.mElementId) { KeyboardId.ELEMENT_ALPHABET -> normal - KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED -> automaticShifted - KeyboardId.ELEMENT_ALPHABET_MANUAL_SHIFTED -> manualShifted - KeyboardId.ELEMENT_ALPHABET_SHIFT_LOCKED -> shiftLocked - KeyboardId.ELEMENT_ALPHABET_SHIFT_LOCK_SHIFTED -> shiftLockShifted + + // KeyboardState.kt currently doesn't distinguish between these + KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED, + KeyboardId.ELEMENT_ALPHABET_MANUAL_SHIFTED -> shifted + + // KeyboardState.kt currently doesn't distinguish between these + KeyboardId.ELEMENT_ALPHABET_SHIFT_LOCKED, + KeyboardId.ELEMENT_ALPHABET_SHIFT_LOCK_SHIFTED -> shiftLocked + KeyboardId.ELEMENT_SYMBOLS -> symbols KeyboardId.ELEMENT_SYMBOLS_SHIFTED -> symbolsShifted else -> normal @@ -356,15 +542,47 @@ object KeyContextualSerializer : ClassOrScalarsSerializer( ) - +/** + * Affects the background for the key. Depending on the user theme settings, backgrounds may be + * different. + */ @Serializable enum class KeyVisualStyle { + /** + * Uses a normal key background, intended for all letters. + */ Normal, + + /** + * Uses no key background, intended for number row numbers. + */ NoBackground, + + /** + * Uses a slightly darker colored background, intended for functional keys (backspace, etc) + */ Functional, + + /** + * Intended for Shift when it's not shiftlocked + */ StickyOff, + + /** + * Intended for Shift to indicate it's shiftlocked. Uses a more bright background + */ StickyOn, + + /** + * Uses a bright fully rounded background, normally used for the enter key + */ Action, + + /** + * Depending on the key borders setting, this is either + * the same as [Normal] (key borders enabled) or a + * fully rounded rectangle (key borders disabled) + */ Spacebar } @@ -379,6 +597,9 @@ fun KeyVisualStyle.toBackgroundTypeInt(): Int = when(this) { } +/** + * An empty gap in place of a key + */ @Serializable @SerialName("gap") class GapKey(val attributes: KeyAttributes = KeyAttributes()) : AbstractKey { diff --git a/java/src/org/futo/inputmethod/v2keyboard/KeyData.kt b/java/src/org/futo/inputmethod/v2keyboard/KeyData.kt index 4256f5bfd..cd6796003 100644 --- a/java/src/org/futo/inputmethod/v2keyboard/KeyData.kt +++ b/java/src/org/futo/inputmethod/v2keyboard/KeyData.kt @@ -1,13 +1,14 @@ package org.futo.inputmethod.v2keyboard import kotlinx.serialization.Serializable +import org.futo.inputmethod.keyboard.internal.KeyboardLayoutElement import org.futo.inputmethod.keyboard.internal.KeyboardParams import org.futo.inputmethod.keyboard.internal.MoreKeySpec data class KeyCoordinate( val regularRow: Int, val regularColumn: Int, - val element: KeyboardElement + val element: KeyboardLayoutElement ) @Serializable diff --git a/java/src/org/futo/inputmethod/v2keyboard/Keyboard.kt b/java/src/org/futo/inputmethod/v2keyboard/Keyboard.kt index 79fbed86e..788ffc80b 100644 --- a/java/src/org/futo/inputmethod/v2keyboard/Keyboard.kt +++ b/java/src/org/futo/inputmethod/v2keyboard/Keyboard.kt @@ -16,16 +16,58 @@ enum class RowNumberRowMode(val displayByDefault: Boolean, val displayWhenExplic Hideable(false, false, true), } +typealias KeyList = @Serializable(with = RowKeyListSerializer::class) List + +/** + * A keyboard row. Only one of [numbers], [letters], or [bottom] must be defined. The row type is + * determined by which one of those is defined. + */ @Serializable data class Row( - // Only one of these must be defined - val numbers: @Serializable(with = RowKeyListSerializer::class) List? = null, - val letters: @Serializable(with = RowKeyListSerializer::class) List? = null, - val bottom: @Serializable(with = RowKeyListSerializer::class) List? = null, + /** + * If defined, this is a number row. Number rows by default have grow keys, no background, + * and smaller height. They may also be hidden depending on the user settings and the value + * of [Keyboard.numberRowMode]. + * + * See [DefaultNumberRow] + */ + val numbers: KeyList? = null, + /** + * If defined, this is a letters row. Letter rows by default are splittable. + */ + val letters: KeyList? = null, + + /** + * If defined, this is a bottom row. Bottom row should typically contain: + * $symbols $action $space $contextual $enter + * + * See [DefaultBottomRow] + */ + val bottom: KeyList? = null, + + /** + * (optional) The height multiplier for this row + */ val rowHeight: Double = if(numbers == null) { 1.0 } else { NumberRowHeight }, + + /** + * (optional) Whether or not this row is splittable. Enabled for letter rows by default. + */ val splittable: Boolean = letters != null, + + /** + * (optional) How this row should behave with respect to the number row. Valid values: + * * `Default` - always display this row + * * `Filler` - only display when the number row is explicitly active + * * `Hideable` - only display when the number row is explicitly inactive + */ val numRowMode: RowNumberRowMode = RowNumberRowMode.Default, + + /** + * (optional) Default key attributes for keys in this row. Values set here supersede values + * set in `Keyboard.attributes`. + */ val attributes: KeyAttributes = KeyAttributes( style = when { numbers != null -> KeyVisualStyle.NoBackground @@ -80,15 +122,6 @@ val DefaultBottomRow = Row( ) ) -public enum class KeyboardElement { - Alphabet, - Symbols, - SymbolsShifted, - Phone, - PhoneSymbols, - Number -} - enum class NumberRowMode { UserConfigurable, AlwaysEnabled, @@ -105,16 +138,6 @@ enum class BottomRowWidthMode(val separateFunctional: Boolean) { Identical(false) } -enum class RowWidthMode { - PadSides, - FillSpace -} - -enum class LongPressKeysMode { - UserConfigurable, - LayoutOnly -} - enum class RowHeightMode(val clampHeight: Boolean) { ClampHeight(true), FillHeight(false) @@ -123,33 +146,113 @@ enum class RowHeightMode(val clampHeight: Boolean) { object SpacedLanguageListSerializer : SpacedListSerializer(String.serializer(), { it.split(" ") }) typealias SpacedStringList = @Serializable(with = SpacedLanguageListSerializer::class) List + +/** + * Override the symbols and other layouts for a specific layout. + */ +@Serializable +data class LayoutSetOverrides( + val symbols: String = "symbols", + val symbolsShifted: String = "symbols_shift", + val number: String = "number", + val numberShifted: String = "number_shift", + val phone: String = "phone", + val phoneShifted: String = "phone_shift" +) + +/** + * A keyboard layout definition, the entry point for the layout yaml files. + */ @Serializable data class Keyboard( + /** + * The human-readable name of the layout. If the layout is for a specific language, this should + * be written in the relevant language. + */ val name: String, - @SerialName("rows") - private val definedRows: List, + /** + * The rows defined for the layout. Defining the number row, bottom row, or the functional + * keys (shift/backspace) is optional here. If they are missing, defaults will automatically be + * added to `effectiveRows`. + */ + private val rows: List, - val description: String = "", + /** + * List of languages this layout is intended for. It will be displayed as an option for the + * specified languages. + */ val languages: SpacedStringList = listOf(), - val symbolsLayout: String = "symbols", - val symbolsShiftLayout: String = "symbols_shift", - val element: KeyboardElement = KeyboardElement.Alphabet, + + /** + * (optional) A human-readable description of the layout. Authorship/origin information may + * be added here. This is intended to be displayed to the user when they are selecting layouts. + */ + val description: String = "", + + /** + * (optional) Override the symbols layout or other layouts for this layout set. + */ + val layoutSetOverrides: LayoutSetOverrides = LayoutSetOverrides(), + + /** + * (optional) Whether the number row should be user-configurable, always displayed, or never. + */ val numberRowMode: NumberRowMode = NumberRowMode.UserConfigurable, + + /** + * (optional) Whether the bottom row should always maintain a consistent height, or whether + * it should grow and shrink. + */ val bottomRowHeightMode: BottomRowHeightMode = BottomRowHeightMode.Fixed, + + /** + * (optional) Whether the bottom row should follow key widths of other rows, or should maintain + * separate widths for consistency. + */ val bottomRowWidthMode: BottomRowWidthMode = BottomRowWidthMode.SeparateFunctional, - val rowWidthMode: RowWidthMode = RowWidthMode.PadSides, - val script: Script = Script.Latin, - val longPressKeysMode: LongPressKeysMode = LongPressKeysMode.UserConfigurable, + + /** + * (optional) Default attributes to use for all rows + */ val attributes: KeyAttributes = KeyAttributes(), + + /** + * (optional) Definitions of custom key widths. Values are between 0.0 and 1.0, with 1.0 + * representing 100% of the keyboard width. + */ val overrideWidths: Map = mapOf(), + + /** + * (optional) Whether or not rows should fill the vertical space, or have vertical gaps added. + */ val rowHeightMode: RowHeightMode = RowHeightMode.ClampHeight, + + /** + * (optional) Whether or not the ZWNJ key should be shown in place of the contextual key. + */ val useZWNJKey: Boolean = false, + /** + * (optional) Minimum width for functional keys. + */ val minimumFunctionalKeyWidth: Float = 0.125f, + + /** + * (optional) Minimum width for functional keys in the bottom row. + */ val minimumBottomRowFunctionalKeyWidth: Float = 0.15f, + /** + * (optional) Alternative pages for this layout, use in conjunction with $alt0, $alt1, $alt2 + */ val altPages: List> = listOf() + + // TODO: Custom long-press key settings configuration + //val element: KeyboardElement = KeyboardElement.Alphabet, + //val rowWidthMode: RowWidthMode = RowWidthMode.PadSides, + //val script: Script = Script.Latin, + //val longPressKeysMode: LongPressKeysMode = LongPressKeysMode.UserConfigurable, ) { var id: String = "" @@ -161,7 +264,7 @@ data class Keyboard( assert(rows.count { it.isLetterRow } in 1..8) { "Keyboard must contain between 1 and 8 letter rows" } } - val effectiveRows = definedRows.toMutableList().apply { + val effectiveRows = rows.toMutableList().apply { if(find { it.isNumberRow } == null) { add(0, DefaultNumberRow) } diff --git a/java/src/org/futo/inputmethod/v2keyboard/KeyboardLayoutSet.kt b/java/src/org/futo/inputmethod/v2keyboard/KeyboardLayoutSet.kt index dc9f12bd9..afea93293 100644 --- a/java/src/org/futo/inputmethod/v2keyboard/KeyboardLayoutSet.kt +++ b/java/src/org/futo/inputmethod/v2keyboard/KeyboardLayoutSet.kt @@ -105,12 +105,12 @@ class KeyboardLayoutSetV2 internal constructor( val layoutName = forcedLayout ?: params.keyboardLayoutSet val mainLayout = LayoutManager.getLayout(context, layoutName) - val symbolsLayout = LayoutManager.getLayout(context, mainLayout.symbolsLayout) - val symbolsShiftedLayout = LayoutManager.getLayout(context, mainLayout.symbolsShiftLayout) - val numberLayout = LayoutManager.getLayout(context, "number") - val numberShiftLayout = LayoutManager.getLayout(context, "number_shift") - val phoneLayout = LayoutManager.getLayout(context, "phone") - val phoneSymbolsLayout = LayoutManager.getLayout(context, "phone_shift") + val symbolsLayout = LayoutManager.getLayout(context, mainLayout.layoutSetOverrides.symbols) + val symbolsShiftedLayout = LayoutManager.getLayout(context, mainLayout.layoutSetOverrides.symbolsShifted) + val numberLayout = LayoutManager.getLayout(context, mainLayout.layoutSetOverrides.number) + val numberShiftLayout = LayoutManager.getLayout(context, mainLayout.layoutSetOverrides.numberShifted) + val phoneLayout = LayoutManager.getLayout(context, mainLayout.layoutSetOverrides.phone) + val phoneSymbolsLayout = LayoutManager.getLayout(context, mainLayout.layoutSetOverrides.phoneShifted) val errorLayout = LayoutManager.getLayout(context, "error") val elements = mapOf( @@ -170,7 +170,7 @@ class KeyboardLayoutSetV2 internal constructor( val baseLayout = elements[baseElement] baseLayout?.altPages?.get(altIdx) }?.let { - mainLayout.copy(definedRows = it) + mainLayout.copy(rows = it) } } ?: run { // If all else fails, show the error layout @@ -240,7 +240,8 @@ class KeyboardLayoutSetV2 internal constructor( val layoutParams = LayoutParams( gap = params.gap.dp, useSplitLayout = params.useSplitLayout, - standardRowHeight = singularRowHeight + standardRowHeight = singularRowHeight, + element = element ) try { @@ -269,34 +270,6 @@ Stack trace: ${e.stackTrace.map { it.toString() }} } } -private fun elementIdToElement(id: Int): KeyboardElement = - when(id) { - KeyboardId.ELEMENT_ALPHABET, - KeyboardId.ELEMENT_ALPHABET_MANUAL_SHIFTED, - KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED, - KeyboardId.ELEMENT_ALPHABET_SHIFT_LOCKED, - KeyboardId.ELEMENT_ALPHABET_SHIFT_LOCK_SHIFTED -> - KeyboardElement.Alphabet - - KeyboardId.ELEMENT_SYMBOLS -> - KeyboardElement.Symbols - - KeyboardId.ELEMENT_SYMBOLS_SHIFTED -> - KeyboardElement.SymbolsShifted - - KeyboardId.ELEMENT_PHONE -> - KeyboardElement.Phone - - KeyboardId.ELEMENT_PHONE_SYMBOLS -> - KeyboardElement.PhoneSymbols - - KeyboardId.ELEMENT_NUMBER -> - KeyboardElement.Number - - else -> KeyboardElement.Alphabet - } - - public fun getKeyboardMode(editorInfo: EditorInfo): Int { val inputType = editorInfo.inputType val variation = inputType and InputType.TYPE_MASK_VARIATION diff --git a/java/src/org/futo/inputmethod/v2keyboard/LayoutEngine.kt b/java/src/org/futo/inputmethod/v2keyboard/LayoutEngine.kt index 340b1f9af..7e5b62408 100644 --- a/java/src/org/futo/inputmethod/v2keyboard/LayoutEngine.kt +++ b/java/src/org/futo/inputmethod/v2keyboard/LayoutEngine.kt @@ -6,6 +6,7 @@ import androidx.compose.ui.unit.Dp import org.futo.inputmethod.keyboard.Key.ACTION_FLAGS_ENABLE_LONG_PRESS import org.futo.inputmethod.keyboard.Key.ACTION_FLAGS_IS_REPEATABLE import org.futo.inputmethod.keyboard.Key.ACTION_FLAGS_NO_KEY_PREVIEW +import org.futo.inputmethod.keyboard.internal.KeyboardLayoutElement import org.futo.inputmethod.keyboard.internal.KeyboardParams import org.futo.inputmethod.latin.R import org.futo.inputmethod.latin.common.Constants @@ -85,7 +86,8 @@ data class LayoutRow( data class LayoutParams( val gap: Dp, val useSplitLayout: Boolean, - val standardRowHeight: Double + val standardRowHeight: Double, + val element: KeyboardLayoutElement, ) data class LayoutEngine( @@ -365,7 +367,7 @@ data class LayoutEngine( val computedRowWithoutWidths = rows.map { row -> var regularColumn = 0 row.keys.mapNotNull { key -> - key.computeData(params, row, keyboard, KeyCoordinate(regularRow, regularColumn, keyboard.element))?.let { data -> + key.computeData(params, row, keyboard, KeyCoordinate(regularRow, regularColumn, layoutParams.element))?.let { data -> if(data.countsToKeyCoordinate) { regularColumn += 1 } diff --git a/java/src/org/futo/inputmethod/v2keyboard/LayoutManager.kt b/java/src/org/futo/inputmethod/v2keyboard/LayoutManager.kt index 41ab49de5..ff2fd9be9 100644 --- a/java/src/org/futo/inputmethod/v2keyboard/LayoutManager.kt +++ b/java/src/org/futo/inputmethod/v2keyboard/LayoutManager.kt @@ -67,8 +67,8 @@ object LayoutManager { fun queryLayoutsForLocale(locale: Locale): List { val language = locale.language - val script = locale.getKeyboardScript() - return layoutsById!!.values.filter { it.languages.contains(language) || it.script == script } + //val script = locale.getKeyboardScript() + return layoutsById!!.values.filter { it.languages.contains(language) } } fun getAllLayoutNames(context: Context): List { diff --git a/java/src/org/futo/inputmethod/v2keyboard/MoreKeysMapping.kt b/java/src/org/futo/inputmethod/v2keyboard/MoreKeysMapping.kt index bce281fea..8272b885a 100644 --- a/java/src/org/futo/inputmethod/v2keyboard/MoreKeysMapping.kt +++ b/java/src/org/futo/inputmethod/v2keyboard/MoreKeysMapping.kt @@ -1,5 +1,6 @@ package org.futo.inputmethod.v2keyboard +import org.futo.inputmethod.keyboard.internal.KeyboardLayoutKind import org.futo.inputmethod.latin.common.Constants fun getDefaultMoreKeysForKey(code: Int, relevantSpecShortcut: List?): String { @@ -21,7 +22,7 @@ val QwertySymbols = listOf( ) fun getSymsForCoordinate(keyCoordinate: KeyCoordinate): String { - if(keyCoordinate.element != KeyboardElement.Alphabet) return "" + if(keyCoordinate.element.kind != KeyboardLayoutKind.Alphabet) return "" val row = QwertySymbols.getOrNull(keyCoordinate.regularRow) val letter = row?.getOrNull(keyCoordinate.regularColumn) @@ -33,7 +34,7 @@ fun getSymsForCoordinate(keyCoordinate: KeyCoordinate): String { } fun getNumForCoordinate(keyCoordinate: KeyCoordinate): String { - if(keyCoordinate.element != KeyboardElement.Alphabet) return "" + if(keyCoordinate.element.kind != KeyboardLayoutKind.Alphabet) return "" if(keyCoordinate.regularRow == 0 && keyCoordinate.regularColumn <= 9) { if(keyCoordinate.regularColumn == 9) {