From c943082f98802e6e2499e8e6722e643366d2a56b Mon Sep 17 00:00:00 2001 From: Helium314 Date: Thu, 21 Dec 2023 15:02:18 +0100 Subject: [PATCH] Remove old keyboard parser (#344) * remove stuff that is not used any more after parser removal * fix some small warnings --- .../openboard/inputmethod/keyboard/Key.java | 248 +- .../inputmethod/keyboard/KeyboardId.java | 92 +- .../inputmethod/keyboard/KeyboardLayout.java | 5 +- .../keyboard/KeyboardLayoutSet.java | 94 +- .../keyboard/KeyboardSwitcher.java | 3 +- .../inputmethod/keyboard/KeyboardView.java | 7 +- .../keyboard/MainKeyboardView.java | 8 +- .../keyboard/MoreKeysKeyboard.java | 3 +- .../inputmethod/keyboard/PointerTracker.java | 53 +- .../keyboard/internal/AlphabetShiftState.java | 50 +- .../keyboard/internal/KeySpecParser.java | 6 +- .../keyboard/internal/KeyStyle.java | 42 - .../keyboard/internal/KeyStylesSet.java | 220 - .../internal/KeyVisualAttributes.java | 7 +- .../keyboard/internal/KeyboardBuilder.kt | 72 +- .../keyboard/internal/KeyboardParams.java | 5 - .../keyboard/internal/KeyboardTextsSet.java | 196 - .../keyboard/internal/KeyboardTextsTable.java | 4480 ----------------- .../keyboard/internal/ModifierKeyState.java | 12 +- .../keyboard/internal/MoreKeySpec.java | 3 +- .../keyboard/internal/ShiftKeyState.java | 10 +- .../internal/keyboard_parser/EmojiParser.kt | 36 +- .../keyboard_parser/KeyboardParser.kt | 22 +- .../keyboard_parser/LocaleKeyTexts.kt | 6 +- .../keyboard_parser/SimpleKeyboardParser.kt | 1 - .../keyboard_parser/XmlKeyboardParser.java | 781 --- .../keyboard_parser/XmlKeyboardRow.java | 184 - .../settings/AdvancedSettingsFragment.kt | 2 +- .../inputmethod/latin/settings/Settings.java | 1 - .../latin/settings/SettingsValues.java | 2 - .../AndroidSpellCheckerService.java | 3 +- .../inputmethod/latin/utils/ScriptUtils.java | 12 +- .../keyboard_background_holo.9.png | Bin 227 -> 0 bytes ...eyboard_key_feedback_more_background.9.png | Bin 903 -> 0 bytes ...ey_feedback_more_background_lxx_dark.9.png | Bin 958 -> 0 bytes .../keyboard_suggest_strip_holo.9.png | Bin 156 -> 0 bytes .../keyboard_background_holo.9.png | Bin 204 -> 0 bytes ...eyboard_key_feedback_more_background.9.png | Bin 811 -> 0 bytes ...ey_feedback_more_background_lxx_dark.9.png | Bin 639 -> 0 bytes .../keyboard_suggest_strip_holo.9.png | Bin 151 -> 0 bytes .../keyboard_background_holo.9.png | Bin 267 -> 0 bytes ...eyboard_key_feedback_more_background.9.png | Bin 928 -> 0 bytes ...ey_feedback_more_background_lxx_dark.9.png | Bin 1097 -> 0 bytes .../keyboard_suggest_strip_holo.9.png | Bin 168 -> 0 bytes .../keyboard_background_holo.9.png | Bin 1151 -> 0 bytes ...ey_feedback_more_background_lxx_dark.9.png | Bin 2104 -> 0 bytes .../keyboard_suggest_strip_holo.9.png | Bin 1062 -> 0 bytes ...ey_feedback_more_background_lxx_dark.9.png | Bin 3507 -> 0 bytes .../btn_keyboard_key_holo_white_no_border.xml | 5 - .../keyboard_suggest_strip_lxx_base.xml | 6 - app/src/main/res/layout/more_suggestions.xml | 3 +- app/src/main/res/values-land/config.xml | 5 - .../main/res/values-sw600dp-land/config.xml | 5 - app/src/main/res/values-sw600dp/config.xml | 5 - .../main/res/values-sw768dp-land/config.xml | 5 - app/src/main/res/values-sw768dp/config.xml | 5 - app/src/main/res/values-v31/colors.xml | 4 - app/src/main/res/values/attrs.xml | 37 - app/src/main/res/values/colors.xml | 13 - app/src/main/res/values/config.xml | 5 - app/src/main/res/values/strings.xml | 4 - app/src/main/res/values/themes-holo_base.xml | 5 - app/src/main/res/values/themes-lxx-base.xml | 5 - .../main/res/values/themes-rounded-base.xml | 5 - app/src/main/res/xml-land/kbd_number.xml | 16 - app/src/main/res/xml-land/kbd_numpad.xml | 12 - app/src/main/res/xml-land/kbd_phone.xml | 16 - .../main/res/xml-land/kbd_phone_symbols.xml | 16 - .../res/xml-land/row_optional_number_row.xml | 35 - app/src/main/res/xml-land/row_qwerty4.xml | 59 - app/src/main/res/xml-land/rows_azerty.xml | 102 - .../main/res/xml-land/rows_bengali_unijoy.xml | 103 - app/src/main/res/xml-land/rows_numpad.xml | 207 - app/src/main/res/xml-land/rows_qwerty.xml | 103 - app/src/main/res/xml-land/rows_qwertz.xml | 103 - .../main/res/xml-sw600dp-land/kbd_number.xml | 16 - .../main/res/xml-sw600dp-land/kbd_phone.xml | 16 - .../xml-sw600dp-land/kbd_phone_symbols.xml | 17 - .../res/xml-sw600dp-land/key_space_3kw.xml | 55 - .../main/res/xml-sw600dp-land/row_qwerty4.xml | 61 - .../main/res/xml-sw600dp-land/rows_azerty.xml | 120 - .../xml-sw600dp-land/rows_bengali_unijoy.xml | 121 - .../main/res/xml-sw600dp-land/rows_german.xml | 145 - .../main/res/xml-sw600dp-land/rows_qwerty.xml | 121 - .../main/res/xml-sw600dp-land/rows_qwertz.xml | 121 - app/src/main/res/xml-sw600dp/kbd_number.xml | 14 - app/src/main/res/xml-sw600dp/kbd_phone.xml | 14 - .../res/xml-sw600dp/kbd_phone_symbols.xml | 15 - app/src/main/res/xml-sw600dp/key_comma.xml | 42 - app/src/main/res/xml-sw600dp/key_period.xml | 30 - .../main/res/xml-sw600dp/key_space_3kw.xml | 49 - .../res/xml-sw600dp/key_space_symbols.xml | 13 - .../res/xml-sw600dp/key_styles_common.xml | 172 - .../main/res/xml-sw600dp/key_styles_enter.xml | 158 - .../res/xml-sw600dp/keys_arabic3_left.xml | 16 - .../main/res/xml-sw600dp/keys_dvorak_123.xml | 45 - .../res/xml-sw600dp/keys_farsi3_right.xml | 16 - .../res/xml-sw600dp/keys_pcqwerty2_right3.xml | 40 - .../res/xml-sw600dp/keys_pcqwerty3_right2.xml | 35 - .../res/xml-sw600dp/keys_pcqwerty4_right3.xml | 50 - app/src/main/res/xml-sw600dp/row_halmak4.xml | 66 - .../xml-sw600dp/row_optional_number_row.xml | 35 - .../main/res/xml-sw600dp/row_pcqwerty5.xml | 41 - app/src/main/res/xml-sw600dp/row_qwerty4.xml | 61 - .../main/res/xml-sw600dp/rowkeys_dvorak3.xml | 33 - .../main/res/xml-sw600dp/rowkeys_halmak3.xml | 25 - .../res/xml-sw600dp/rowkeys_pcqwerty1.xml | 104 - app/src/main/res/xml-sw600dp/rows_arabic.xml | 36 - .../main/res/xml-sw600dp/rows_arabic_pc.xml | 36 - .../xml-sw600dp/rows_armenian_phonetic.xml | 51 - app/src/main/res/xml-sw600dp/rows_azerty.xml | 116 - app/src/main/res/xml-sw600dp/rows_bengali.xml | 37 - .../res/xml-sw600dp/rows_bengali_akkhor.xml | 38 - .../res/xml-sw600dp/rows_bengali_unijoy.xml | 124 - app/src/main/res/xml-sw600dp/rows_bepo.xml | 48 - .../main/res/xml-sw600dp/rows_bulgarian.xml | 48 - .../res/xml-sw600dp/rows_bulgarian_bds.xml | 45 - .../res/xml-sw600dp/rows_bulgarian_bekl.xml | 45 - app/src/main/res/xml-sw600dp/rows_colemak.xml | 48 - .../main/res/xml-sw600dp/rows_colemak_dh.xml | 48 - app/src/main/res/xml-sw600dp/rows_dvorak.xml | 48 - .../main/res/xml-sw600dp/rows_east_slavic.xml | 45 - app/src/main/res/xml-sw600dp/rows_farsi.xml | 38 - .../main/res/xml-sw600dp/rows_georgian.xml | 49 - app/src/main/res/xml-sw600dp/rows_german.xml | 145 - app/src/main/res/xml-sw600dp/rows_greek.xml | 49 - app/src/main/res/xml-sw600dp/rows_halmak.xml | 45 - app/src/main/res/xml-sw600dp/rows_hebrew.xml | 43 - app/src/main/res/xml-sw600dp/rows_hindi.xml | 40 - .../res/xml-sw600dp/rows_hindi_compact.xml | 37 - app/src/main/res/xml-sw600dp/rows_kannada.xml | 37 - app/src/main/res/xml-sw600dp/rows_khmer.xml | 53 - .../rows_korean_dubeolsik_standard.xml | 35 - .../xml-sw600dp/rows_korean_sebeolsik_390.xml | 108 - .../rows_korean_sebeolsik_final.xml | 108 - app/src/main/res/xml-sw600dp/rows_lao.xml | 53 - .../main/res/xml-sw600dp/rows_malayalam.xml | 37 - app/src/main/res/xml-sw600dp/rows_marathi.xml | 37 - .../main/res/xml-sw600dp/rows_mongolian.xml | 45 - .../res/xml-sw600dp/rows_nepali_romanized.xml | 43 - .../xml-sw600dp/rows_nepali_traditional.xml | 40 - app/src/main/res/xml-sw600dp/rows_nordic.xml | 51 - .../res/xml-sw600dp/rows_number_normal.xml | 149 - .../res/xml-sw600dp/rows_number_password.xml | 67 - .../main/res/xml-sw600dp/rows_pcqwerty.xml | 58 - app/src/main/res/xml-sw600dp/rows_phone.xml | 114 - app/src/main/res/xml-sw600dp/rows_qwerty.xml | 124 - app/src/main/res/xml-sw600dp/rows_qwertz.xml | 124 - .../res/xml-sw600dp/rows_serbian_qwertz.xml | 29 - app/src/main/res/xml-sw600dp/rows_sinhala.xml | 40 - .../res/xml-sw600dp/rows_south_slavic.xml | 45 - app/src/main/res/xml-sw600dp/rows_spanish.xml | 48 - app/src/main/res/xml-sw600dp/rows_swiss.xml | 51 - app/src/main/res/xml-sw600dp/rows_symbols.xml | 84 - .../res/xml-sw600dp/rows_symbols_shift.xml | 65 - app/src/main/res/xml-sw600dp/rows_tamil.xml | 37 - app/src/main/res/xml-sw600dp/rows_telugu.xml | 37 - app/src/main/res/xml-sw600dp/rows_thai.xml | 58 - app/src/main/res/xml-sw600dp/rows_uzbek.xml | 36 - app/src/main/res/xml-sw600dp/rows_workman.xml | 52 - app/src/main/res/xml/kbd_arabic.xml | 12 - app/src/main/res/xml/kbd_arabic_pc.xml | 12 - .../main/res/xml/kbd_armenian_phonetic.xml | 17 - app/src/main/res/xml/kbd_azerty.xml | 12 - app/src/main/res/xml/kbd_bengali.xml | 12 - app/src/main/res/xml/kbd_bengali_akkhor.xml | 8 - app/src/main/res/xml/kbd_bengali_unijoy.xml | 9 - app/src/main/res/xml/kbd_bepo.xml | 12 - app/src/main/res/xml/kbd_bulgarian.xml | 12 - app/src/main/res/xml/kbd_bulgarian_bds.xml | 12 - app/src/main/res/xml/kbd_bulgarian_bekl.xml | 11 - app/src/main/res/xml/kbd_colemak.xml | 12 - app/src/main/res/xml/kbd_colemak_dh.xml | 11 - app/src/main/res/xml/kbd_dvorak.xml | 12 - app/src/main/res/xml/kbd_east_slavic.xml | 12 - app/src/main/res/xml/kbd_farsi.xml | 13 - app/src/main/res/xml/kbd_georgian.xml | 13 - app/src/main/res/xml/kbd_german.xml | 11 - app/src/main/res/xml/kbd_greek.xml | 12 - app/src/main/res/xml/kbd_halmak.xml | 11 - app/src/main/res/xml/kbd_hebrew.xml | 12 - app/src/main/res/xml/kbd_hindi.xml | 12 - app/src/main/res/xml/kbd_hindi_compact.xml | 12 - app/src/main/res/xml/kbd_kannada.xml | 12 - app/src/main/res/xml/kbd_khmer.xml | 17 - .../res/xml/kbd_korean_dubeolsik_standard.xml | 11 - .../main/res/xml/kbd_korean_sebeolsik_390.xml | 11 - .../res/xml/kbd_korean_sebeolsik_final.xml | 11 - app/src/main/res/xml/kbd_lao.xml | 17 - app/src/main/res/xml/kbd_malayalam.xml | 12 - app/src/main/res/xml/kbd_marathi.xml | 12 - app/src/main/res/xml/kbd_mongolian.xml | 12 - app/src/main/res/xml/kbd_nepali_romanized.xml | 12 - .../main/res/xml/kbd_nepali_traditional.xml | 12 - app/src/main/res/xml/kbd_nordic.xml | 12 - app/src/main/res/xml/kbd_number.xml | 14 - app/src/main/res/xml/kbd_numpad.xml | 12 - app/src/main/res/xml/kbd_pcqwerty.xml | 17 - app/src/main/res/xml/kbd_phone.xml | 14 - app/src/main/res/xml/kbd_phone_symbols.xml | 14 - app/src/main/res/xml/kbd_qwerty.xml | 12 - app/src/main/res/xml/kbd_qwertz.xml | 12 - app/src/main/res/xml/kbd_serbian_qwertz.xml | 9 - app/src/main/res/xml/kbd_sinhala.xml | 12 - app/src/main/res/xml/kbd_south_slavic.xml | 12 - app/src/main/res/xml/kbd_spanish.xml | 12 - .../res/xml/kbd_suggestions_pane_template.xml | 2 +- app/src/main/res/xml/kbd_swiss.xml | 12 - app/src/main/res/xml/kbd_symbols.xml | 13 - app/src/main/res/xml/kbd_symbols_shift.xml | 13 - app/src/main/res/xml/kbd_tamil.xml | 12 - app/src/main/res/xml/kbd_telugu.xml | 12 - app/src/main/res/xml/kbd_thai.xml | 17 - app/src/main/res/xml/kbd_turkish.xml | 10 - app/src/main/res/xml/kbd_urdu.xml | 7 - app/src/main/res/xml/kbd_uzbek.xml | 9 - app/src/main/res/xml/kbd_workman.xml | 11 - app/src/main/res/xml/key_armenian_sha.xml | 13 - app/src/main/res/xml/key_armenian_xeh.xml | 13 - app/src/main/res/xml/key_comma.xml | 49 - app/src/main/res/xml/key_emoji.xml | 24 - app/src/main/res/xml/key_period.xml | 36 - app/src/main/res/xml/key_settings.xml | 22 - app/src/main/res/xml/key_space_3kw.xml | 76 - app/src/main/res/xml/key_space_5kw.xml | 76 - app/src/main/res/xml/key_space_7kw.xml | 49 - app/src/main/res/xml/key_space_symbols.xml | 13 - app/src/main/res/xml/key_styles_actions.xml | 106 - app/src/main/res/xml/key_styles_common.xml | 172 - app/src/main/res/xml/key_styles_currency.xml | 145 - .../res/xml/key_styles_currency_dollar.xml | 32 - .../main/res/xml/key_styles_currency_dram.xml | 32 - .../main/res/xml/key_styles_currency_euro.xml | 34 - .../res/xml/key_styles_currency_generic.xml | 36 - .../xml/key_styles_currency_indian_rupee.xml | 34 - .../res/xml/key_styles_currency_pound.xml | 35 - .../res/xml/key_styles_currency_ruble.xml | 32 - .../xml/key_styles_currency_turkish_lira.xml | 32 - app/src/main/res/xml/key_styles_enter.xml | 290 -- .../main/res/xml/key_styles_less_greater.xml | 44 - .../res/xml/key_styles_navigate_more_keys.xml | 72 - app/src/main/res/xml/key_styles_number.xml | 115 - app/src/main/res/xml/key_styles_settings.xml | 97 - app/src/main/res/xml/key_thai_kho_khuat.xml | 24 - .../res/xml/keyboard_layout_set_arabic.xml | 33 - .../res/xml/keyboard_layout_set_arabic_pc.xml | 33 - .../keyboard_layout_set_armenian_phonetic.xml | 33 - .../res/xml/keyboard_layout_set_azerty.xml | 32 - .../res/xml/keyboard_layout_set_bengali.xml | 33 - .../keyboard_layout_set_bengali_akkhor.xml | 47 - .../keyboard_layout_set_bengali_unijoy.xml | 34 - .../main/res/xml/keyboard_layout_set_bepo.xml | 31 - .../res/xml/keyboard_layout_set_bulgarian.xml | 33 - .../xml/keyboard_layout_set_bulgarian_bds.xml | 33 - .../keyboard_layout_set_bulgarian_bekl.xml | 33 - .../res/xml/keyboard_layout_set_colemak.xml | 31 - .../xml/keyboard_layout_set_colemak_dh.xml | 29 - ...ty.xml => keyboard_layout_set_default.xml} | 17 +- .../res/xml/keyboard_layout_set_dvorak.xml | 31 - .../xml/keyboard_layout_set_east_slavic.xml | 33 - .../res/xml/keyboard_layout_set_farsi.xml | 33 - .../res/xml/keyboard_layout_set_georgian.xml | 49 - .../res/xml/keyboard_layout_set_german.xml | 33 - .../res/xml/keyboard_layout_set_greek.xml | 33 - .../res/xml/keyboard_layout_set_halmak.xml | 31 - .../res/xml/keyboard_layout_set_hebrew.xml | 33 - .../res/xml/keyboard_layout_set_hindi.xml | 49 - .../xml/keyboard_layout_set_hindi_compact.xml | 33 - .../res/xml/keyboard_layout_set_kannada.xml | 33 - .../res/xml/keyboard_layout_set_khmer.xml | 49 - .../res/xml/keyboard_layout_set_korean.xml | 33 - ...yboard_layout_set_korean_sebeolsik_390.xml | 33 - ...oard_layout_set_korean_sebeolsik_final.xml | 33 - .../main/res/xml/keyboard_layout_set_lao.xml | 49 - .../res/xml/keyboard_layout_set_malayalam.xml | 33 - .../res/xml/keyboard_layout_set_marathi.xml | 33 - .../res/xml/keyboard_layout_set_mongolian.xml | 33 - .../keyboard_layout_set_nepali_romanized.xml | 49 - ...keyboard_layout_set_nepali_traditional.xml | 49 - .../res/xml/keyboard_layout_set_nordic.xml | 32 - .../res/xml/keyboard_layout_set_qwerty.xml | 32 - .../res/xml/keyboard_layout_set_qwertz.xml | 32 - .../keyboard_layout_set_serbian_qwertz.xml | 31 - .../res/xml/keyboard_layout_set_sinhala.xml | 49 - .../xml/keyboard_layout_set_south_slavic.xml | 33 - .../res/xml/keyboard_layout_set_spanish.xml | 31 - .../res/xml/keyboard_layout_set_swiss.xml | 32 - .../res/xml/keyboard_layout_set_tamil.xml | 33 - .../res/xml/keyboard_layout_set_telugu.xml | 33 - .../main/res/xml/keyboard_layout_set_thai.xml | 49 - .../res/xml/keyboard_layout_set_turkish.xml | 30 - .../main/res/xml/keyboard_layout_set_urdu.xml | 30 - .../res/xml/keyboard_layout_set_uzbek.xml | 31 - .../res/xml/keyboard_layout_set_workman.xml | 32 - app/src/main/res/xml/keys_arabic3_left.xml | 13 - app/src/main/res/xml/keys_curly_brackets.xml | 14 - app/src/main/res/xml/keys_dvorak_123.xml | 69 - .../res/xml/keys_exclamation_question.xml | 18 - app/src/main/res/xml/keys_farsi3_right.xml | 13 - app/src/main/res/xml/keys_parentheses.xml | 16 - .../main/res/xml/keys_pcqwerty2_right3.xml | 34 - .../main/res/xml/keys_pcqwerty3_right2.xml | 31 - .../main/res/xml/keys_pcqwerty4_right3.xml | 44 - app/src/main/res/xml/keys_square_brackets.xml | 14 - .../xml/keystyle_devanagari_sign_anusvara.xml | 38 - .../keystyle_devanagari_sign_candrabindu.xml | 29 - .../xml/keystyle_devanagari_sign_nukta.xml | 37 - .../xml/keystyle_devanagari_sign_virama.xml | 40 - .../xml/keystyle_devanagari_sign_visarga.xml | 17 - .../xml/keystyle_devanagari_vowel_sign_aa.xml | 42 - .../xml/keystyle_devanagari_vowel_sign_ai.xml | 47 - .../xml/keystyle_devanagari_vowel_sign_au.xml | 41 - ...eystyle_devanagari_vowel_sign_candra_e.xml | 35 - ...eystyle_devanagari_vowel_sign_candra_o.xml | 35 - .../xml/keystyle_devanagari_vowel_sign_e.xml | 48 - .../xml/keystyle_devanagari_vowel_sign_i.xml | 41 - .../xml/keystyle_devanagari_vowel_sign_ii.xml | 41 - .../xml/keystyle_devanagari_vowel_sign_o.xml | 43 - .../xml/keystyle_devanagari_vowel_sign_u.xml | 42 - .../xml/keystyle_devanagari_vowel_sign_uu.xml | 42 - ...ystyle_devanagari_vowel_sign_vocalic_r.xml | 50 - .../main/res/xml/prefs_screen_advanced.xml | 6 - .../main/res/xml/prefs_screen_languages.xml | 17 - app/src/main/res/xml/row_halmak4.xml | 27 - .../main/res/xml/row_optional_number_row.xml | 19 - app/src/main/res/xml/row_pcqwerty5.xml | 47 - app/src/main/res/xml/row_qwerty4.xml | 27 - app/src/main/res/xml/row_symbols4.xml | 22 - app/src/main/res/xml/row_symbols_shift4.xml | 24 - app/src/main/res/xml/rowkeys_arabic1.xml | 85 - app/src/main/res/xml/rowkeys_arabic1_pc.xml | 82 - app/src/main/res/xml/rowkeys_arabic2.xml | 62 - app/src/main/res/xml/rowkeys_arabic2_pc.xml | 60 - app/src/main/res/xml/rowkeys_arabic3.xml | 33 - app/src/main/res/xml/rowkeys_arabic3_pc.xml | 32 - .../res/xml/rowkeys_armenian_phonetic1.xml | 95 - .../res/xml/rowkeys_armenian_phonetic2.xml | 32 - .../res/xml/rowkeys_armenian_phonetic3.xml | 29 - .../res/xml/rowkeys_armenian_phonetic4.xml | 22 - app/src/main/res/xml/rowkeys_azerty1.xml | 15 - .../main/res/xml/rowkeys_azerty1_left5.xml | 67 - .../main/res/xml/rowkeys_azerty1_right5.xml | 66 - app/src/main/res/xml/rowkeys_azerty2.xml | 16 - .../main/res/xml/rowkeys_azerty2_left5.xml | 35 - .../main/res/xml/rowkeys_azerty2_right5.xml | 33 - app/src/main/res/xml/rowkeys_azerty3.xml | 15 - .../main/res/xml/rowkeys_azerty3_left4.xml | 29 - .../main/res/xml/rowkeys_azerty3_right3.xml | 33 - app/src/main/res/xml/rowkeys_bengali1.xml | 87 - app/src/main/res/xml/rowkeys_bengali2.xml | 67 - app/src/main/res/xml/rowkeys_bengali3.xml | 54 - .../main/res/xml/rowkeys_bengali_akkhor1.xml | 171 - .../main/res/xml/rowkeys_bengali_akkhor2.xml | 138 - .../main/res/xml/rowkeys_bengali_akkhor3.xml | 114 - .../main/res/xml/rowkeys_bengali_unijoy1.xml | 16 - .../res/xml/rowkeys_bengali_unijoy1_left5.xml | 65 - .../xml/rowkeys_bengali_unijoy1_right5.xml | 65 - .../main/res/xml/rowkeys_bengali_unijoy2.xml | 16 - .../res/xml/rowkeys_bengali_unijoy2_left5.xml | 70 - .../xml/rowkeys_bengali_unijoy2_right4.xml | 50 - .../main/res/xml/rowkeys_bengali_unijoy3.xml | 16 - .../res/xml/rowkeys_bengali_unijoy3_left4.xml | 44 - .../xml/rowkeys_bengali_unijoy3_right3.xml | 33 - app/src/main/res/xml/rowkeys_bepo1.xml | 113 - app/src/main/res/xml/rowkeys_bepo2.xml | 58 - app/src/main/res/xml/rowkeys_bepo3.xml | 43 - app/src/main/res/xml/rowkeys_bulgarian1.xml | 65 - app/src/main/res/xml/rowkeys_bulgarian2.xml | 43 - app/src/main/res/xml/rowkeys_bulgarian3.xml | 34 - .../main/res/xml/rowkeys_bulgarian_bds1.xml | 65 - .../main/res/xml/rowkeys_bulgarian_bds2.xml | 43 - .../main/res/xml/rowkeys_bulgarian_bds3.xml | 37 - .../main/res/xml/rowkeys_bulgarian_bekl1.xml | 65 - .../main/res/xml/rowkeys_bulgarian_bekl2.xml | 43 - .../main/res/xml/rowkeys_bulgarian_bekl3.xml | 43 - app/src/main/res/xml/rowkeys_colemak1.xml | 69 - app/src/main/res/xml/rowkeys_colemak2.xml | 62 - app/src/main/res/xml/rowkeys_colemak3.xml | 43 - app/src/main/res/xml/rowkeys_colemak_dh1.xml | 68 - app/src/main/res/xml/rowkeys_colemak_dh2.xml | 61 - app/src/main/res/xml/rowkeys_colemak_dh3.xml | 42 - app/src/main/res/xml/rowkeys_dvorak1.xml | 45 - app/src/main/res/xml/rowkeys_dvorak2.xml | 40 - app/src/main/res/xml/rowkeys_dvorak3.xml | 28 - app/src/main/res/xml/rowkeys_east_slavic1.xml | 67 - app/src/main/res/xml/rowkeys_east_slavic2.xml | 68 - app/src/main/res/xml/rowkeys_east_slavic3.xml | 55 - app/src/main/res/xml/rowkeys_farsi1.xml | 75 - app/src/main/res/xml/rowkeys_farsi2.xml | 49 - app/src/main/res/xml/rowkeys_farsi3.xml | 30 - app/src/main/res/xml/rowkeys_georgian1.xml | 117 - app/src/main/res/xml/rowkeys_georgian2.xml | 75 - app/src/main/res/xml/rowkeys_georgian3.xml | 61 - app/src/main/res/xml/rowkeys_german1.xml | 15 - app/src/main/res/xml/rowkeys_german2.xml | 17 - app/src/main/res/xml/rowkeys_german3.xml | 28 - app/src/main/res/xml/rowkeys_greek1.xml | 104 - app/src/main/res/xml/rowkeys_greek2.xml | 60 - app/src/main/res/xml/rowkeys_greek3.xml | 47 - app/src/main/res/xml/rowkeys_halmak1.xml | 49 - app/src/main/res/xml/rowkeys_halmak2.xml | 34 - app/src/main/res/xml/rowkeys_halmak3.xml | 23 - app/src/main/res/xml/rowkeys_hebrew1.xml | 76 - app/src/main/res/xml/rowkeys_hebrew2.xml | 46 - app/src/main/res/xml/rowkeys_hebrew3.xml | 45 - app/src/main/res/xml/rowkeys_hindi1.xml | 151 - app/src/main/res/xml/rowkeys_hindi2.xml | 117 - app/src/main/res/xml/rowkeys_hindi3.xml | 83 - .../main/res/xml/rowkeys_hindi_compact1.xml | 107 - .../main/res/xml/rowkeys_hindi_compact2.xml | 82 - .../main/res/xml/rowkeys_hindi_compact3.xml | 55 - app/src/main/res/xml/rowkeys_kannada1.xml | 93 - app/src/main/res/xml/rowkeys_kannada2.xml | 64 - app/src/main/res/xml/rowkeys_kannada3.xml | 51 - app/src/main/res/xml/rowkeys_khmer1.xml | 162 - app/src/main/res/xml/rowkeys_khmer2.xml | 83 - app/src/main/res/xml/rowkeys_khmer3.xml | 79 - app/src/main/res/xml/rowkeys_khmer4.xml | 65 - .../rowkeys_korean_dubeolsik_standard_1.xml | 68 - .../rowkeys_korean_dubeolsik_standard_2.xml | 25 - .../rowkeys_korean_dubeolsik_standard_3.xml | 21 - .../xml/rowkeys_korean_sebeolsik_390_0.xml | 74 - .../xml/rowkeys_korean_sebeolsik_390_1.xml | 73 - .../xml/rowkeys_korean_sebeolsik_390_2.xml | 73 - .../xml/rowkeys_korean_sebeolsik_390_3.xml | 65 - .../xml/rowkeys_korean_sebeolsik_final_0.xml | 75 - .../xml/rowkeys_korean_sebeolsik_final_1.xml | 74 - .../xml/rowkeys_korean_sebeolsik_final_2.xml | 74 - .../xml/rowkeys_korean_sebeolsik_final_3.xml | 62 - app/src/main/res/xml/rowkeys_lao1.xml | 109 - app/src/main/res/xml/rowkeys_lao2.xml | 81 - app/src/main/res/xml/rowkeys_lao3.xml | 76 - app/src/main/res/xml/rowkeys_lao4.xml | 63 - app/src/main/res/xml/rowkeys_malayalam1.xml | 86 - app/src/main/res/xml/rowkeys_malayalam2.xml | 63 - app/src/main/res/xml/rowkeys_malayalam3.xml | 62 - app/src/main/res/xml/rowkeys_marathi1.xml | 96 - app/src/main/res/xml/rowkeys_marathi2.xml | 67 - app/src/main/res/xml/rowkeys_marathi3.xml | 52 - app/src/main/res/xml/rowkeys_mongolian1.xml | 69 - app/src/main/res/xml/rowkeys_mongolian2.xml | 43 - app/src/main/res/xml/rowkeys_mongolian3.xml | 43 - .../res/xml/rowkeys_nepali_romanized1.xml | 130 - .../res/xml/rowkeys_nepali_romanized2.xml | 64 - .../res/xml/rowkeys_nepali_romanized3.xml | 58 - .../res/xml/rowkeys_nepali_traditional1.xml | 142 - .../res/xml/rowkeys_nepali_traditional2.xml | 87 - .../res/xml/rowkeys_nepali_traditional3.xml | 75 - app/src/main/res/xml/rowkeys_nordic1.xml | 14 - app/src/main/res/xml/rowkeys_nordic2.xml | 18 - app/src/main/res/xml/rowkeys_pcqwerty1.xml | 78 - .../main/res/xml/rowkeys_pcqwerty1_shift.xml | 45 - app/src/main/res/xml/rowkeys_pcqwerty2.xml | 17 - app/src/main/res/xml/rowkeys_pcqwerty3.xml | 16 - app/src/main/res/xml/rowkeys_pcqwerty4.xml | 16 - app/src/main/res/xml/rowkeys_qwerty1.xml | 16 - .../main/res/xml/rowkeys_qwerty1_left5.xml | 67 - .../main/res/xml/rowkeys_qwerty1_right5.xml | 69 - app/src/main/res/xml/rowkeys_qwerty2.xml | 16 - .../main/res/xml/rowkeys_qwerty2_left5.xml | 35 - .../main/res/xml/rowkeys_qwerty2_right4.xml | 30 - app/src/main/res/xml/rowkeys_qwerty3.xml | 16 - .../main/res/xml/rowkeys_qwerty3_left4.xml | 30 - .../main/res/xml/rowkeys_qwerty3_right3.xml | 23 - app/src/main/res/xml/rowkeys_qwertz1.xml | 16 - .../main/res/xml/rowkeys_qwertz1_left5.xml | 65 - .../main/res/xml/rowkeys_qwertz1_right5.xml | 67 - app/src/main/res/xml/rowkeys_qwertz2.xml | 16 - .../main/res/xml/rowkeys_qwertz2_left5.xml | 35 - .../main/res/xml/rowkeys_qwertz2_right4.xml | 30 - app/src/main/res/xml/rowkeys_qwertz3.xml | 16 - .../main/res/xml/rowkeys_qwertz3_left4.xml | 29 - .../main/res/xml/rowkeys_qwertz3_right3.xml | 23 - .../main/res/xml/rowkeys_serbian_qwertz1.xml | 11 - .../main/res/xml/rowkeys_serbian_qwertz2.xml | 13 - .../main/res/xml/rowkeys_serbian_qwertz3.xml | 13 - app/src/main/res/xml/rowkeys_sinhala1.xml | 96 - app/src/main/res/xml/rowkeys_sinhala2.xml | 58 - app/src/main/res/xml/rowkeys_sinhala3.xml | 62 - .../main/res/xml/rowkeys_south_slavic1.xml | 64 - .../main/res/xml/rowkeys_south_slavic2.xml | 42 - .../main/res/xml/rowkeys_south_slavic3.xml | 35 - app/src/main/res/xml/rowkeys_spanish2.xml | 15 - app/src/main/res/xml/rowkeys_swiss1.xml | 15 - app/src/main/res/xml/rowkeys_swiss2.xml | 18 - app/src/main/res/xml/rowkeys_symbols1.xml | 50 - .../main/res/xml/rowkeys_symbols1_left1.xml | 30 - .../main/res/xml/rowkeys_symbols1_right1.xml | 30 - app/src/main/res/xml/rowkeys_symbols2.xml | 51 - app/src/main/res/xml/rowkeys_symbols3.xml | 44 - .../main/res/xml/rowkeys_symbols_shift1.xml | 42 - .../main/res/xml/rowkeys_symbols_shift2.xml | 39 - .../main/res/xml/rowkeys_symbols_shift3.xml | 26 - app/src/main/res/xml/rowkeys_tamil1.xml | 70 - app/src/main/res/xml/rowkeys_tamil2.xml | 54 - app/src/main/res/xml/rowkeys_tamil3.xml | 37 - app/src/main/res/xml/rowkeys_telugu1.xml | 83 - app/src/main/res/xml/rowkeys_telugu2.xml | 64 - app/src/main/res/xml/rowkeys_telugu3.xml | 57 - app/src/main/res/xml/rowkeys_thai1.xml | 123 - app/src/main/res/xml/rowkeys_thai2.xml | 89 - app/src/main/res/xml/rowkeys_thai3.xml | 79 - app/src/main/res/xml/rowkeys_thai4.xml | 77 - app/src/main/res/xml/rowkeys_turkish1.xml | 25 - app/src/main/res/xml/rowkeys_turkish2.xml | 24 - app/src/main/res/xml/rowkeys_turkish3.xml | 24 - app/src/main/res/xml/rowkeys_urdu1.xml | 86 - app/src/main/res/xml/rowkeys_urdu2.xml | 80 - app/src/main/res/xml/rowkeys_urdu3.xml | 81 - app/src/main/res/xml/rowkeys_uzbek1.xml | 13 - app/src/main/res/xml/rowkeys_uzbek2.xml | 15 - app/src/main/res/xml/rowkeys_workman1.xml | 60 - app/src/main/res/xml/rowkeys_workman2.xml | 58 - app/src/main/res/xml/rowkeys_workman3.xml | 44 - app/src/main/res/xml/rows_arabic.xml | 33 - app/src/main/res/xml/rows_arabic_pc.xml | 33 - .../main/res/xml/rows_armenian_phonetic.xml | 45 - app/src/main/res/xml/rows_azerty.xml | 40 - app/src/main/res/xml/rows_bengali.xml | 33 - app/src/main/res/xml/rows_bengali_akkhor.xml | 33 - app/src/main/res/xml/rows_bengali_unijoy.xml | 41 - app/src/main/res/xml/rows_bepo.xml | 40 - app/src/main/res/xml/rows_bulgarian.xml | 40 - app/src/main/res/xml/rows_bulgarian_bds.xml | 40 - app/src/main/res/xml/rows_bulgarian_bekl.xml | 40 - app/src/main/res/xml/rows_colemak.xml | 40 - app/src/main/res/xml/rows_colemak_dh.xml | 40 - app/src/main/res/xml/rows_dvorak.xml | 42 - app/src/main/res/xml/rows_east_slavic.xml | 40 - app/src/main/res/xml/rows_farsi.xml | 33 - app/src/main/res/xml/rows_georgian.xml | 41 - app/src/main/res/xml/rows_german.xml | 41 - app/src/main/res/xml/rows_greek.xml | 41 - app/src/main/res/xml/rows_halmak.xml | 39 - app/src/main/res/xml/rows_hebrew.xml | 37 - app/src/main/res/xml/rows_hindi.xml | 36 - app/src/main/res/xml/rows_hindi_compact.xml | 33 - app/src/main/res/xml/rows_kannada.xml | 33 - app/src/main/res/xml/rows_khmer.xml | 38 - .../xml/rows_korean_dubeolsik_standard.xml | 53 - .../res/xml/rows_korean_sebeolsik_390.xml | 95 - .../res/xml/rows_korean_sebeolsik_final.xml | 95 - app/src/main/res/xml/rows_lao.xml | 38 - app/src/main/res/xml/rows_malayalam.xml | 33 - app/src/main/res/xml/rows_marathi.xml | 33 - app/src/main/res/xml/rows_mongolian.xml | 40 - .../main/res/xml/rows_nepali_romanized.xml | 36 - .../main/res/xml/rows_nepali_traditional.xml | 37 - app/src/main/res/xml/rows_nordic.xml | 43 - app/src/main/res/xml/rows_number.xml | 26 - app/src/main/res/xml/rows_number_normal.xml | 117 - app/src/main/res/xml/rows_number_password.xml | 67 - app/src/main/res/xml/rows_numpad.xml | 150 - app/src/main/res/xml/rows_pcqwerty.xml | 53 - app/src/main/res/xml/rows_phone.xml | 67 - app/src/main/res/xml/rows_phone_symbols.xml | 80 - app/src/main/res/xml/rows_qwerty.xml | 41 - app/src/main/res/xml/rows_qwertz.xml | 41 - app/src/main/res/xml/rows_serbian_qwertz.xml | 27 - app/src/main/res/xml/rows_sinhala.xml | 36 - app/src/main/res/xml/rows_south_slavic.xml | 40 - app/src/main/res/xml/rows_spanish.xml | 40 - app/src/main/res/xml/rows_swiss.xml | 43 - app/src/main/res/xml/rows_symbols.xml | 64 - app/src/main/res/xml/rows_symbols_shift.xml | 54 - app/src/main/res/xml/rows_tamil.xml | 33 - app/src/main/res/xml/rows_telugu.xml | 33 - app/src/main/res/xml/rows_thai.xml | 39 - app/src/main/res/xml/rows_turkish.xml | 34 - app/src/main/res/xml/rows_urdu.xml | 34 - app/src/main/res/xml/rows_uzbek.xml | 29 - app/src/main/res/xml/rows_workman.xml | 41 - 572 files changed, 208 insertions(+), 30476 deletions(-) delete mode 100644 app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyStyle.java delete mode 100644 app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyStylesSet.java delete mode 100644 app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardTextsSet.java delete mode 100644 app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardTextsTable.java delete mode 100644 app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/XmlKeyboardParser.java delete mode 100644 app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/XmlKeyboardRow.java delete mode 100644 app/src/main/res/drawable-hdpi/keyboard_background_holo.9.png delete mode 100644 app/src/main/res/drawable-hdpi/keyboard_key_feedback_more_background.9.png delete mode 100644 app/src/main/res/drawable-hdpi/keyboard_key_feedback_more_background_lxx_dark.9.png delete mode 100644 app/src/main/res/drawable-hdpi/keyboard_suggest_strip_holo.9.png delete mode 100644 app/src/main/res/drawable-mdpi/keyboard_background_holo.9.png delete mode 100644 app/src/main/res/drawable-mdpi/keyboard_key_feedback_more_background.9.png delete mode 100644 app/src/main/res/drawable-mdpi/keyboard_key_feedback_more_background_lxx_dark.9.png delete mode 100644 app/src/main/res/drawable-mdpi/keyboard_suggest_strip_holo.9.png delete mode 100644 app/src/main/res/drawable-xhdpi/keyboard_background_holo.9.png delete mode 100644 app/src/main/res/drawable-xhdpi/keyboard_key_feedback_more_background.9.png delete mode 100644 app/src/main/res/drawable-xhdpi/keyboard_key_feedback_more_background_lxx_dark.9.png delete mode 100644 app/src/main/res/drawable-xhdpi/keyboard_suggest_strip_holo.9.png delete mode 100644 app/src/main/res/drawable-xxhdpi/keyboard_background_holo.9.png delete mode 100644 app/src/main/res/drawable-xxhdpi/keyboard_key_feedback_more_background_lxx_dark.9.png delete mode 100644 app/src/main/res/drawable-xxhdpi/keyboard_suggest_strip_holo.9.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/keyboard_key_feedback_more_background_lxx_dark.9.png delete mode 100644 app/src/main/res/drawable/btn_keyboard_key_holo_white_no_border.xml delete mode 100644 app/src/main/res/drawable/keyboard_suggest_strip_lxx_base.xml delete mode 100644 app/src/main/res/xml-land/kbd_number.xml delete mode 100644 app/src/main/res/xml-land/kbd_numpad.xml delete mode 100644 app/src/main/res/xml-land/kbd_phone.xml delete mode 100644 app/src/main/res/xml-land/kbd_phone_symbols.xml delete mode 100644 app/src/main/res/xml-land/row_optional_number_row.xml delete mode 100644 app/src/main/res/xml-land/row_qwerty4.xml delete mode 100644 app/src/main/res/xml-land/rows_azerty.xml delete mode 100644 app/src/main/res/xml-land/rows_bengali_unijoy.xml delete mode 100644 app/src/main/res/xml-land/rows_numpad.xml delete mode 100644 app/src/main/res/xml-land/rows_qwerty.xml delete mode 100644 app/src/main/res/xml-land/rows_qwertz.xml delete mode 100644 app/src/main/res/xml-sw600dp-land/kbd_number.xml delete mode 100644 app/src/main/res/xml-sw600dp-land/kbd_phone.xml delete mode 100644 app/src/main/res/xml-sw600dp-land/kbd_phone_symbols.xml delete mode 100644 app/src/main/res/xml-sw600dp-land/key_space_3kw.xml delete mode 100644 app/src/main/res/xml-sw600dp-land/row_qwerty4.xml delete mode 100644 app/src/main/res/xml-sw600dp-land/rows_azerty.xml delete mode 100644 app/src/main/res/xml-sw600dp-land/rows_bengali_unijoy.xml delete mode 100644 app/src/main/res/xml-sw600dp-land/rows_german.xml delete mode 100644 app/src/main/res/xml-sw600dp-land/rows_qwerty.xml delete mode 100644 app/src/main/res/xml-sw600dp-land/rows_qwertz.xml delete mode 100644 app/src/main/res/xml-sw600dp/kbd_number.xml delete mode 100644 app/src/main/res/xml-sw600dp/kbd_phone.xml delete mode 100644 app/src/main/res/xml-sw600dp/kbd_phone_symbols.xml delete mode 100644 app/src/main/res/xml-sw600dp/key_comma.xml delete mode 100644 app/src/main/res/xml-sw600dp/key_period.xml delete mode 100644 app/src/main/res/xml-sw600dp/key_space_3kw.xml delete mode 100644 app/src/main/res/xml-sw600dp/key_space_symbols.xml delete mode 100644 app/src/main/res/xml-sw600dp/key_styles_common.xml delete mode 100644 app/src/main/res/xml-sw600dp/key_styles_enter.xml delete mode 100644 app/src/main/res/xml-sw600dp/keys_arabic3_left.xml delete mode 100644 app/src/main/res/xml-sw600dp/keys_dvorak_123.xml delete mode 100644 app/src/main/res/xml-sw600dp/keys_farsi3_right.xml delete mode 100644 app/src/main/res/xml-sw600dp/keys_pcqwerty2_right3.xml delete mode 100644 app/src/main/res/xml-sw600dp/keys_pcqwerty3_right2.xml delete mode 100644 app/src/main/res/xml-sw600dp/keys_pcqwerty4_right3.xml delete mode 100644 app/src/main/res/xml-sw600dp/row_halmak4.xml delete mode 100644 app/src/main/res/xml-sw600dp/row_optional_number_row.xml delete mode 100644 app/src/main/res/xml-sw600dp/row_pcqwerty5.xml delete mode 100644 app/src/main/res/xml-sw600dp/row_qwerty4.xml delete mode 100644 app/src/main/res/xml-sw600dp/rowkeys_dvorak3.xml delete mode 100644 app/src/main/res/xml-sw600dp/rowkeys_halmak3.xml delete mode 100644 app/src/main/res/xml-sw600dp/rowkeys_pcqwerty1.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_arabic.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_arabic_pc.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_armenian_phonetic.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_azerty.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_bengali.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_bengali_akkhor.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_bengali_unijoy.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_bepo.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_bulgarian.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_bulgarian_bds.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_bulgarian_bekl.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_colemak.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_colemak_dh.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_dvorak.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_east_slavic.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_farsi.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_georgian.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_german.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_greek.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_halmak.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_hebrew.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_hindi.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_hindi_compact.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_kannada.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_khmer.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_korean_dubeolsik_standard.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_korean_sebeolsik_390.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_korean_sebeolsik_final.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_lao.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_malayalam.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_marathi.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_mongolian.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_nepali_romanized.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_nepali_traditional.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_nordic.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_number_normal.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_number_password.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_pcqwerty.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_phone.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_qwerty.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_qwertz.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_serbian_qwertz.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_sinhala.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_south_slavic.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_spanish.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_swiss.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_symbols.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_symbols_shift.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_tamil.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_telugu.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_thai.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_uzbek.xml delete mode 100644 app/src/main/res/xml-sw600dp/rows_workman.xml delete mode 100644 app/src/main/res/xml/kbd_arabic.xml delete mode 100644 app/src/main/res/xml/kbd_arabic_pc.xml delete mode 100644 app/src/main/res/xml/kbd_armenian_phonetic.xml delete mode 100644 app/src/main/res/xml/kbd_azerty.xml delete mode 100644 app/src/main/res/xml/kbd_bengali.xml delete mode 100644 app/src/main/res/xml/kbd_bengali_akkhor.xml delete mode 100644 app/src/main/res/xml/kbd_bengali_unijoy.xml delete mode 100644 app/src/main/res/xml/kbd_bepo.xml delete mode 100644 app/src/main/res/xml/kbd_bulgarian.xml delete mode 100644 app/src/main/res/xml/kbd_bulgarian_bds.xml delete mode 100644 app/src/main/res/xml/kbd_bulgarian_bekl.xml delete mode 100644 app/src/main/res/xml/kbd_colemak.xml delete mode 100644 app/src/main/res/xml/kbd_colemak_dh.xml delete mode 100644 app/src/main/res/xml/kbd_dvorak.xml delete mode 100644 app/src/main/res/xml/kbd_east_slavic.xml delete mode 100644 app/src/main/res/xml/kbd_farsi.xml delete mode 100644 app/src/main/res/xml/kbd_georgian.xml delete mode 100644 app/src/main/res/xml/kbd_german.xml delete mode 100644 app/src/main/res/xml/kbd_greek.xml delete mode 100644 app/src/main/res/xml/kbd_halmak.xml delete mode 100644 app/src/main/res/xml/kbd_hebrew.xml delete mode 100644 app/src/main/res/xml/kbd_hindi.xml delete mode 100644 app/src/main/res/xml/kbd_hindi_compact.xml delete mode 100644 app/src/main/res/xml/kbd_kannada.xml delete mode 100644 app/src/main/res/xml/kbd_khmer.xml delete mode 100644 app/src/main/res/xml/kbd_korean_dubeolsik_standard.xml delete mode 100644 app/src/main/res/xml/kbd_korean_sebeolsik_390.xml delete mode 100644 app/src/main/res/xml/kbd_korean_sebeolsik_final.xml delete mode 100644 app/src/main/res/xml/kbd_lao.xml delete mode 100644 app/src/main/res/xml/kbd_malayalam.xml delete mode 100644 app/src/main/res/xml/kbd_marathi.xml delete mode 100644 app/src/main/res/xml/kbd_mongolian.xml delete mode 100644 app/src/main/res/xml/kbd_nepali_romanized.xml delete mode 100644 app/src/main/res/xml/kbd_nepali_traditional.xml delete mode 100644 app/src/main/res/xml/kbd_nordic.xml delete mode 100644 app/src/main/res/xml/kbd_number.xml delete mode 100644 app/src/main/res/xml/kbd_numpad.xml delete mode 100644 app/src/main/res/xml/kbd_pcqwerty.xml delete mode 100644 app/src/main/res/xml/kbd_phone.xml delete mode 100644 app/src/main/res/xml/kbd_phone_symbols.xml delete mode 100644 app/src/main/res/xml/kbd_qwerty.xml delete mode 100644 app/src/main/res/xml/kbd_qwertz.xml delete mode 100644 app/src/main/res/xml/kbd_serbian_qwertz.xml delete mode 100644 app/src/main/res/xml/kbd_sinhala.xml delete mode 100644 app/src/main/res/xml/kbd_south_slavic.xml delete mode 100644 app/src/main/res/xml/kbd_spanish.xml delete mode 100644 app/src/main/res/xml/kbd_swiss.xml delete mode 100644 app/src/main/res/xml/kbd_symbols.xml delete mode 100644 app/src/main/res/xml/kbd_symbols_shift.xml delete mode 100644 app/src/main/res/xml/kbd_tamil.xml delete mode 100644 app/src/main/res/xml/kbd_telugu.xml delete mode 100644 app/src/main/res/xml/kbd_thai.xml delete mode 100644 app/src/main/res/xml/kbd_turkish.xml delete mode 100644 app/src/main/res/xml/kbd_urdu.xml delete mode 100644 app/src/main/res/xml/kbd_uzbek.xml delete mode 100644 app/src/main/res/xml/kbd_workman.xml delete mode 100644 app/src/main/res/xml/key_armenian_sha.xml delete mode 100644 app/src/main/res/xml/key_armenian_xeh.xml delete mode 100644 app/src/main/res/xml/key_comma.xml delete mode 100644 app/src/main/res/xml/key_emoji.xml delete mode 100644 app/src/main/res/xml/key_period.xml delete mode 100644 app/src/main/res/xml/key_settings.xml delete mode 100644 app/src/main/res/xml/key_space_3kw.xml delete mode 100644 app/src/main/res/xml/key_space_5kw.xml delete mode 100644 app/src/main/res/xml/key_space_7kw.xml delete mode 100644 app/src/main/res/xml/key_space_symbols.xml delete mode 100644 app/src/main/res/xml/key_styles_actions.xml delete mode 100644 app/src/main/res/xml/key_styles_common.xml delete mode 100644 app/src/main/res/xml/key_styles_currency.xml delete mode 100644 app/src/main/res/xml/key_styles_currency_dollar.xml delete mode 100644 app/src/main/res/xml/key_styles_currency_dram.xml delete mode 100644 app/src/main/res/xml/key_styles_currency_euro.xml delete mode 100644 app/src/main/res/xml/key_styles_currency_generic.xml delete mode 100644 app/src/main/res/xml/key_styles_currency_indian_rupee.xml delete mode 100644 app/src/main/res/xml/key_styles_currency_pound.xml delete mode 100644 app/src/main/res/xml/key_styles_currency_ruble.xml delete mode 100644 app/src/main/res/xml/key_styles_currency_turkish_lira.xml delete mode 100644 app/src/main/res/xml/key_styles_enter.xml delete mode 100644 app/src/main/res/xml/key_styles_less_greater.xml delete mode 100644 app/src/main/res/xml/key_styles_navigate_more_keys.xml delete mode 100644 app/src/main/res/xml/key_styles_number.xml delete mode 100644 app/src/main/res/xml/key_styles_settings.xml delete mode 100644 app/src/main/res/xml/key_thai_kho_khuat.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_arabic.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_arabic_pc.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_armenian_phonetic.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_azerty.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_bengali.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_bengali_akkhor.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_bengali_unijoy.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_bepo.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_bulgarian.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_bulgarian_bds.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_bulgarian_bekl.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_colemak.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_colemak_dh.xml rename app/src/main/res/xml/{keyboard_layout_set_pcqwerty.xml => keyboard_layout_set_default.xml} (51%) delete mode 100644 app/src/main/res/xml/keyboard_layout_set_dvorak.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_east_slavic.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_farsi.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_georgian.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_german.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_greek.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_halmak.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_hebrew.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_hindi.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_hindi_compact.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_kannada.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_khmer.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_korean.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_korean_sebeolsik_390.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_korean_sebeolsik_final.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_lao.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_malayalam.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_marathi.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_mongolian.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_nepali_romanized.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_nepali_traditional.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_nordic.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_qwerty.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_qwertz.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_serbian_qwertz.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_sinhala.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_south_slavic.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_spanish.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_swiss.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_tamil.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_telugu.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_thai.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_turkish.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_urdu.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_uzbek.xml delete mode 100644 app/src/main/res/xml/keyboard_layout_set_workman.xml delete mode 100644 app/src/main/res/xml/keys_arabic3_left.xml delete mode 100644 app/src/main/res/xml/keys_curly_brackets.xml delete mode 100644 app/src/main/res/xml/keys_dvorak_123.xml delete mode 100644 app/src/main/res/xml/keys_exclamation_question.xml delete mode 100644 app/src/main/res/xml/keys_farsi3_right.xml delete mode 100644 app/src/main/res/xml/keys_parentheses.xml delete mode 100644 app/src/main/res/xml/keys_pcqwerty2_right3.xml delete mode 100644 app/src/main/res/xml/keys_pcqwerty3_right2.xml delete mode 100644 app/src/main/res/xml/keys_pcqwerty4_right3.xml delete mode 100644 app/src/main/res/xml/keys_square_brackets.xml delete mode 100644 app/src/main/res/xml/keystyle_devanagari_sign_anusvara.xml delete mode 100644 app/src/main/res/xml/keystyle_devanagari_sign_candrabindu.xml delete mode 100644 app/src/main/res/xml/keystyle_devanagari_sign_nukta.xml delete mode 100644 app/src/main/res/xml/keystyle_devanagari_sign_virama.xml delete mode 100644 app/src/main/res/xml/keystyle_devanagari_sign_visarga.xml delete mode 100644 app/src/main/res/xml/keystyle_devanagari_vowel_sign_aa.xml delete mode 100644 app/src/main/res/xml/keystyle_devanagari_vowel_sign_ai.xml delete mode 100644 app/src/main/res/xml/keystyle_devanagari_vowel_sign_au.xml delete mode 100644 app/src/main/res/xml/keystyle_devanagari_vowel_sign_candra_e.xml delete mode 100644 app/src/main/res/xml/keystyle_devanagari_vowel_sign_candra_o.xml delete mode 100644 app/src/main/res/xml/keystyle_devanagari_vowel_sign_e.xml delete mode 100644 app/src/main/res/xml/keystyle_devanagari_vowel_sign_i.xml delete mode 100644 app/src/main/res/xml/keystyle_devanagari_vowel_sign_ii.xml delete mode 100644 app/src/main/res/xml/keystyle_devanagari_vowel_sign_o.xml delete mode 100644 app/src/main/res/xml/keystyle_devanagari_vowel_sign_u.xml delete mode 100644 app/src/main/res/xml/keystyle_devanagari_vowel_sign_uu.xml delete mode 100644 app/src/main/res/xml/keystyle_devanagari_vowel_sign_vocalic_r.xml delete mode 100644 app/src/main/res/xml/prefs_screen_languages.xml delete mode 100644 app/src/main/res/xml/row_halmak4.xml delete mode 100644 app/src/main/res/xml/row_optional_number_row.xml delete mode 100644 app/src/main/res/xml/row_pcqwerty5.xml delete mode 100644 app/src/main/res/xml/row_qwerty4.xml delete mode 100644 app/src/main/res/xml/row_symbols4.xml delete mode 100644 app/src/main/res/xml/row_symbols_shift4.xml delete mode 100644 app/src/main/res/xml/rowkeys_arabic1.xml delete mode 100644 app/src/main/res/xml/rowkeys_arabic1_pc.xml delete mode 100644 app/src/main/res/xml/rowkeys_arabic2.xml delete mode 100644 app/src/main/res/xml/rowkeys_arabic2_pc.xml delete mode 100644 app/src/main/res/xml/rowkeys_arabic3.xml delete mode 100644 app/src/main/res/xml/rowkeys_arabic3_pc.xml delete mode 100644 app/src/main/res/xml/rowkeys_armenian_phonetic1.xml delete mode 100644 app/src/main/res/xml/rowkeys_armenian_phonetic2.xml delete mode 100644 app/src/main/res/xml/rowkeys_armenian_phonetic3.xml delete mode 100644 app/src/main/res/xml/rowkeys_armenian_phonetic4.xml delete mode 100644 app/src/main/res/xml/rowkeys_azerty1.xml delete mode 100644 app/src/main/res/xml/rowkeys_azerty1_left5.xml delete mode 100644 app/src/main/res/xml/rowkeys_azerty1_right5.xml delete mode 100644 app/src/main/res/xml/rowkeys_azerty2.xml delete mode 100644 app/src/main/res/xml/rowkeys_azerty2_left5.xml delete mode 100644 app/src/main/res/xml/rowkeys_azerty2_right5.xml delete mode 100644 app/src/main/res/xml/rowkeys_azerty3.xml delete mode 100644 app/src/main/res/xml/rowkeys_azerty3_left4.xml delete mode 100644 app/src/main/res/xml/rowkeys_azerty3_right3.xml delete mode 100644 app/src/main/res/xml/rowkeys_bengali1.xml delete mode 100644 app/src/main/res/xml/rowkeys_bengali2.xml delete mode 100644 app/src/main/res/xml/rowkeys_bengali3.xml delete mode 100644 app/src/main/res/xml/rowkeys_bengali_akkhor1.xml delete mode 100644 app/src/main/res/xml/rowkeys_bengali_akkhor2.xml delete mode 100644 app/src/main/res/xml/rowkeys_bengali_akkhor3.xml delete mode 100644 app/src/main/res/xml/rowkeys_bengali_unijoy1.xml delete mode 100644 app/src/main/res/xml/rowkeys_bengali_unijoy1_left5.xml delete mode 100644 app/src/main/res/xml/rowkeys_bengali_unijoy1_right5.xml delete mode 100644 app/src/main/res/xml/rowkeys_bengali_unijoy2.xml delete mode 100644 app/src/main/res/xml/rowkeys_bengali_unijoy2_left5.xml delete mode 100644 app/src/main/res/xml/rowkeys_bengali_unijoy2_right4.xml delete mode 100644 app/src/main/res/xml/rowkeys_bengali_unijoy3.xml delete mode 100644 app/src/main/res/xml/rowkeys_bengali_unijoy3_left4.xml delete mode 100644 app/src/main/res/xml/rowkeys_bengali_unijoy3_right3.xml delete mode 100644 app/src/main/res/xml/rowkeys_bepo1.xml delete mode 100644 app/src/main/res/xml/rowkeys_bepo2.xml delete mode 100644 app/src/main/res/xml/rowkeys_bepo3.xml delete mode 100644 app/src/main/res/xml/rowkeys_bulgarian1.xml delete mode 100644 app/src/main/res/xml/rowkeys_bulgarian2.xml delete mode 100644 app/src/main/res/xml/rowkeys_bulgarian3.xml delete mode 100644 app/src/main/res/xml/rowkeys_bulgarian_bds1.xml delete mode 100644 app/src/main/res/xml/rowkeys_bulgarian_bds2.xml delete mode 100644 app/src/main/res/xml/rowkeys_bulgarian_bds3.xml delete mode 100644 app/src/main/res/xml/rowkeys_bulgarian_bekl1.xml delete mode 100644 app/src/main/res/xml/rowkeys_bulgarian_bekl2.xml delete mode 100644 app/src/main/res/xml/rowkeys_bulgarian_bekl3.xml delete mode 100644 app/src/main/res/xml/rowkeys_colemak1.xml delete mode 100644 app/src/main/res/xml/rowkeys_colemak2.xml delete mode 100644 app/src/main/res/xml/rowkeys_colemak3.xml delete mode 100644 app/src/main/res/xml/rowkeys_colemak_dh1.xml delete mode 100644 app/src/main/res/xml/rowkeys_colemak_dh2.xml delete mode 100644 app/src/main/res/xml/rowkeys_colemak_dh3.xml delete mode 100644 app/src/main/res/xml/rowkeys_dvorak1.xml delete mode 100644 app/src/main/res/xml/rowkeys_dvorak2.xml delete mode 100644 app/src/main/res/xml/rowkeys_dvorak3.xml delete mode 100644 app/src/main/res/xml/rowkeys_east_slavic1.xml delete mode 100644 app/src/main/res/xml/rowkeys_east_slavic2.xml delete mode 100644 app/src/main/res/xml/rowkeys_east_slavic3.xml delete mode 100644 app/src/main/res/xml/rowkeys_farsi1.xml delete mode 100644 app/src/main/res/xml/rowkeys_farsi2.xml delete mode 100644 app/src/main/res/xml/rowkeys_farsi3.xml delete mode 100644 app/src/main/res/xml/rowkeys_georgian1.xml delete mode 100644 app/src/main/res/xml/rowkeys_georgian2.xml delete mode 100644 app/src/main/res/xml/rowkeys_georgian3.xml delete mode 100644 app/src/main/res/xml/rowkeys_german1.xml delete mode 100644 app/src/main/res/xml/rowkeys_german2.xml delete mode 100644 app/src/main/res/xml/rowkeys_german3.xml delete mode 100644 app/src/main/res/xml/rowkeys_greek1.xml delete mode 100644 app/src/main/res/xml/rowkeys_greek2.xml delete mode 100644 app/src/main/res/xml/rowkeys_greek3.xml delete mode 100644 app/src/main/res/xml/rowkeys_halmak1.xml delete mode 100644 app/src/main/res/xml/rowkeys_halmak2.xml delete mode 100644 app/src/main/res/xml/rowkeys_halmak3.xml delete mode 100644 app/src/main/res/xml/rowkeys_hebrew1.xml delete mode 100644 app/src/main/res/xml/rowkeys_hebrew2.xml delete mode 100644 app/src/main/res/xml/rowkeys_hebrew3.xml delete mode 100644 app/src/main/res/xml/rowkeys_hindi1.xml delete mode 100644 app/src/main/res/xml/rowkeys_hindi2.xml delete mode 100644 app/src/main/res/xml/rowkeys_hindi3.xml delete mode 100644 app/src/main/res/xml/rowkeys_hindi_compact1.xml delete mode 100644 app/src/main/res/xml/rowkeys_hindi_compact2.xml delete mode 100644 app/src/main/res/xml/rowkeys_hindi_compact3.xml delete mode 100644 app/src/main/res/xml/rowkeys_kannada1.xml delete mode 100644 app/src/main/res/xml/rowkeys_kannada2.xml delete mode 100644 app/src/main/res/xml/rowkeys_kannada3.xml delete mode 100644 app/src/main/res/xml/rowkeys_khmer1.xml delete mode 100644 app/src/main/res/xml/rowkeys_khmer2.xml delete mode 100644 app/src/main/res/xml/rowkeys_khmer3.xml delete mode 100644 app/src/main/res/xml/rowkeys_khmer4.xml delete mode 100644 app/src/main/res/xml/rowkeys_korean_dubeolsik_standard_1.xml delete mode 100644 app/src/main/res/xml/rowkeys_korean_dubeolsik_standard_2.xml delete mode 100644 app/src/main/res/xml/rowkeys_korean_dubeolsik_standard_3.xml delete mode 100644 app/src/main/res/xml/rowkeys_korean_sebeolsik_390_0.xml delete mode 100644 app/src/main/res/xml/rowkeys_korean_sebeolsik_390_1.xml delete mode 100644 app/src/main/res/xml/rowkeys_korean_sebeolsik_390_2.xml delete mode 100644 app/src/main/res/xml/rowkeys_korean_sebeolsik_390_3.xml delete mode 100644 app/src/main/res/xml/rowkeys_korean_sebeolsik_final_0.xml delete mode 100644 app/src/main/res/xml/rowkeys_korean_sebeolsik_final_1.xml delete mode 100644 app/src/main/res/xml/rowkeys_korean_sebeolsik_final_2.xml delete mode 100644 app/src/main/res/xml/rowkeys_korean_sebeolsik_final_3.xml delete mode 100644 app/src/main/res/xml/rowkeys_lao1.xml delete mode 100644 app/src/main/res/xml/rowkeys_lao2.xml delete mode 100644 app/src/main/res/xml/rowkeys_lao3.xml delete mode 100644 app/src/main/res/xml/rowkeys_lao4.xml delete mode 100644 app/src/main/res/xml/rowkeys_malayalam1.xml delete mode 100644 app/src/main/res/xml/rowkeys_malayalam2.xml delete mode 100644 app/src/main/res/xml/rowkeys_malayalam3.xml delete mode 100644 app/src/main/res/xml/rowkeys_marathi1.xml delete mode 100644 app/src/main/res/xml/rowkeys_marathi2.xml delete mode 100644 app/src/main/res/xml/rowkeys_marathi3.xml delete mode 100644 app/src/main/res/xml/rowkeys_mongolian1.xml delete mode 100644 app/src/main/res/xml/rowkeys_mongolian2.xml delete mode 100644 app/src/main/res/xml/rowkeys_mongolian3.xml delete mode 100644 app/src/main/res/xml/rowkeys_nepali_romanized1.xml delete mode 100644 app/src/main/res/xml/rowkeys_nepali_romanized2.xml delete mode 100644 app/src/main/res/xml/rowkeys_nepali_romanized3.xml delete mode 100644 app/src/main/res/xml/rowkeys_nepali_traditional1.xml delete mode 100644 app/src/main/res/xml/rowkeys_nepali_traditional2.xml delete mode 100644 app/src/main/res/xml/rowkeys_nepali_traditional3.xml delete mode 100644 app/src/main/res/xml/rowkeys_nordic1.xml delete mode 100644 app/src/main/res/xml/rowkeys_nordic2.xml delete mode 100644 app/src/main/res/xml/rowkeys_pcqwerty1.xml delete mode 100644 app/src/main/res/xml/rowkeys_pcqwerty1_shift.xml delete mode 100644 app/src/main/res/xml/rowkeys_pcqwerty2.xml delete mode 100644 app/src/main/res/xml/rowkeys_pcqwerty3.xml delete mode 100644 app/src/main/res/xml/rowkeys_pcqwerty4.xml delete mode 100644 app/src/main/res/xml/rowkeys_qwerty1.xml delete mode 100644 app/src/main/res/xml/rowkeys_qwerty1_left5.xml delete mode 100644 app/src/main/res/xml/rowkeys_qwerty1_right5.xml delete mode 100644 app/src/main/res/xml/rowkeys_qwerty2.xml delete mode 100644 app/src/main/res/xml/rowkeys_qwerty2_left5.xml delete mode 100644 app/src/main/res/xml/rowkeys_qwerty2_right4.xml delete mode 100644 app/src/main/res/xml/rowkeys_qwerty3.xml delete mode 100644 app/src/main/res/xml/rowkeys_qwerty3_left4.xml delete mode 100644 app/src/main/res/xml/rowkeys_qwerty3_right3.xml delete mode 100644 app/src/main/res/xml/rowkeys_qwertz1.xml delete mode 100644 app/src/main/res/xml/rowkeys_qwertz1_left5.xml delete mode 100644 app/src/main/res/xml/rowkeys_qwertz1_right5.xml delete mode 100644 app/src/main/res/xml/rowkeys_qwertz2.xml delete mode 100644 app/src/main/res/xml/rowkeys_qwertz2_left5.xml delete mode 100644 app/src/main/res/xml/rowkeys_qwertz2_right4.xml delete mode 100644 app/src/main/res/xml/rowkeys_qwertz3.xml delete mode 100644 app/src/main/res/xml/rowkeys_qwertz3_left4.xml delete mode 100644 app/src/main/res/xml/rowkeys_qwertz3_right3.xml delete mode 100644 app/src/main/res/xml/rowkeys_serbian_qwertz1.xml delete mode 100644 app/src/main/res/xml/rowkeys_serbian_qwertz2.xml delete mode 100644 app/src/main/res/xml/rowkeys_serbian_qwertz3.xml delete mode 100644 app/src/main/res/xml/rowkeys_sinhala1.xml delete mode 100644 app/src/main/res/xml/rowkeys_sinhala2.xml delete mode 100644 app/src/main/res/xml/rowkeys_sinhala3.xml delete mode 100644 app/src/main/res/xml/rowkeys_south_slavic1.xml delete mode 100644 app/src/main/res/xml/rowkeys_south_slavic2.xml delete mode 100644 app/src/main/res/xml/rowkeys_south_slavic3.xml delete mode 100644 app/src/main/res/xml/rowkeys_spanish2.xml delete mode 100644 app/src/main/res/xml/rowkeys_swiss1.xml delete mode 100644 app/src/main/res/xml/rowkeys_swiss2.xml delete mode 100644 app/src/main/res/xml/rowkeys_symbols1.xml delete mode 100644 app/src/main/res/xml/rowkeys_symbols1_left1.xml delete mode 100644 app/src/main/res/xml/rowkeys_symbols1_right1.xml delete mode 100644 app/src/main/res/xml/rowkeys_symbols2.xml delete mode 100644 app/src/main/res/xml/rowkeys_symbols3.xml delete mode 100644 app/src/main/res/xml/rowkeys_symbols_shift1.xml delete mode 100644 app/src/main/res/xml/rowkeys_symbols_shift2.xml delete mode 100644 app/src/main/res/xml/rowkeys_symbols_shift3.xml delete mode 100644 app/src/main/res/xml/rowkeys_tamil1.xml delete mode 100644 app/src/main/res/xml/rowkeys_tamil2.xml delete mode 100644 app/src/main/res/xml/rowkeys_tamil3.xml delete mode 100644 app/src/main/res/xml/rowkeys_telugu1.xml delete mode 100644 app/src/main/res/xml/rowkeys_telugu2.xml delete mode 100644 app/src/main/res/xml/rowkeys_telugu3.xml delete mode 100644 app/src/main/res/xml/rowkeys_thai1.xml delete mode 100644 app/src/main/res/xml/rowkeys_thai2.xml delete mode 100644 app/src/main/res/xml/rowkeys_thai3.xml delete mode 100644 app/src/main/res/xml/rowkeys_thai4.xml delete mode 100644 app/src/main/res/xml/rowkeys_turkish1.xml delete mode 100644 app/src/main/res/xml/rowkeys_turkish2.xml delete mode 100644 app/src/main/res/xml/rowkeys_turkish3.xml delete mode 100644 app/src/main/res/xml/rowkeys_urdu1.xml delete mode 100644 app/src/main/res/xml/rowkeys_urdu2.xml delete mode 100644 app/src/main/res/xml/rowkeys_urdu3.xml delete mode 100644 app/src/main/res/xml/rowkeys_uzbek1.xml delete mode 100644 app/src/main/res/xml/rowkeys_uzbek2.xml delete mode 100644 app/src/main/res/xml/rowkeys_workman1.xml delete mode 100644 app/src/main/res/xml/rowkeys_workman2.xml delete mode 100644 app/src/main/res/xml/rowkeys_workman3.xml delete mode 100644 app/src/main/res/xml/rows_arabic.xml delete mode 100644 app/src/main/res/xml/rows_arabic_pc.xml delete mode 100644 app/src/main/res/xml/rows_armenian_phonetic.xml delete mode 100644 app/src/main/res/xml/rows_azerty.xml delete mode 100644 app/src/main/res/xml/rows_bengali.xml delete mode 100644 app/src/main/res/xml/rows_bengali_akkhor.xml delete mode 100644 app/src/main/res/xml/rows_bengali_unijoy.xml delete mode 100644 app/src/main/res/xml/rows_bepo.xml delete mode 100644 app/src/main/res/xml/rows_bulgarian.xml delete mode 100644 app/src/main/res/xml/rows_bulgarian_bds.xml delete mode 100644 app/src/main/res/xml/rows_bulgarian_bekl.xml delete mode 100644 app/src/main/res/xml/rows_colemak.xml delete mode 100644 app/src/main/res/xml/rows_colemak_dh.xml delete mode 100644 app/src/main/res/xml/rows_dvorak.xml delete mode 100644 app/src/main/res/xml/rows_east_slavic.xml delete mode 100644 app/src/main/res/xml/rows_farsi.xml delete mode 100644 app/src/main/res/xml/rows_georgian.xml delete mode 100644 app/src/main/res/xml/rows_german.xml delete mode 100644 app/src/main/res/xml/rows_greek.xml delete mode 100644 app/src/main/res/xml/rows_halmak.xml delete mode 100644 app/src/main/res/xml/rows_hebrew.xml delete mode 100644 app/src/main/res/xml/rows_hindi.xml delete mode 100644 app/src/main/res/xml/rows_hindi_compact.xml delete mode 100644 app/src/main/res/xml/rows_kannada.xml delete mode 100644 app/src/main/res/xml/rows_khmer.xml delete mode 100644 app/src/main/res/xml/rows_korean_dubeolsik_standard.xml delete mode 100644 app/src/main/res/xml/rows_korean_sebeolsik_390.xml delete mode 100644 app/src/main/res/xml/rows_korean_sebeolsik_final.xml delete mode 100644 app/src/main/res/xml/rows_lao.xml delete mode 100644 app/src/main/res/xml/rows_malayalam.xml delete mode 100644 app/src/main/res/xml/rows_marathi.xml delete mode 100644 app/src/main/res/xml/rows_mongolian.xml delete mode 100644 app/src/main/res/xml/rows_nepali_romanized.xml delete mode 100644 app/src/main/res/xml/rows_nepali_traditional.xml delete mode 100644 app/src/main/res/xml/rows_nordic.xml delete mode 100644 app/src/main/res/xml/rows_number.xml delete mode 100644 app/src/main/res/xml/rows_number_normal.xml delete mode 100644 app/src/main/res/xml/rows_number_password.xml delete mode 100644 app/src/main/res/xml/rows_numpad.xml delete mode 100644 app/src/main/res/xml/rows_pcqwerty.xml delete mode 100644 app/src/main/res/xml/rows_phone.xml delete mode 100644 app/src/main/res/xml/rows_phone_symbols.xml delete mode 100644 app/src/main/res/xml/rows_qwerty.xml delete mode 100644 app/src/main/res/xml/rows_qwertz.xml delete mode 100644 app/src/main/res/xml/rows_serbian_qwertz.xml delete mode 100644 app/src/main/res/xml/rows_sinhala.xml delete mode 100644 app/src/main/res/xml/rows_south_slavic.xml delete mode 100644 app/src/main/res/xml/rows_spanish.xml delete mode 100644 app/src/main/res/xml/rows_swiss.xml delete mode 100644 app/src/main/res/xml/rows_symbols.xml delete mode 100644 app/src/main/res/xml/rows_symbols_shift.xml delete mode 100644 app/src/main/res/xml/rows_tamil.xml delete mode 100644 app/src/main/res/xml/rows_telugu.xml delete mode 100644 app/src/main/res/xml/rows_thai.xml delete mode 100644 app/src/main/res/xml/rows_turkish.xml delete mode 100644 app/src/main/res/xml/rows_urdu.xml delete mode 100644 app/src/main/res/xml/rows_uzbek.xml delete mode 100644 app/src/main/res/xml/rows_workman.xml diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/Key.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/Key.java index 8f1adbb4c..bd81fb1c8 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/Key.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/Key.java @@ -6,7 +6,6 @@ package org.dslul.openboard.inputmethod.keyboard; -import android.content.res.TypedArray; import android.graphics.Rect; import android.graphics.Typeface; import android.graphics.drawable.Drawable; @@ -14,13 +13,10 @@ import android.text.TextUtils; import org.dslul.openboard.inputmethod.keyboard.internal.KeyDrawParams; import org.dslul.openboard.inputmethod.keyboard.internal.KeySpecParser; -import org.dslul.openboard.inputmethod.keyboard.internal.KeyStyle; import org.dslul.openboard.inputmethod.keyboard.internal.KeyVisualAttributes; import org.dslul.openboard.inputmethod.keyboard.internal.KeyboardIconsSet; import org.dslul.openboard.inputmethod.keyboard.internal.KeyboardParams; -import org.dslul.openboard.inputmethod.keyboard.internal.keyboard_parser.XmlKeyboardRow; import org.dslul.openboard.inputmethod.keyboard.internal.MoreKeySpec; -import org.dslul.openboard.inputmethod.latin.R; import org.dslul.openboard.inputmethod.latin.common.Constants; import org.dslul.openboard.inputmethod.latin.common.StringUtils; @@ -314,7 +310,7 @@ public class Key implements Comparable { // get the "correct" float gap: may shift keys by one pixel, but results in more uniform gaps between keys final float horizontalGapFloat = isSpacer() ? 0 : (keyParams.mKeyboardParams.mRelativeHorizontalGap * keyParams.mKeyboardParams.mOccupiedWidth); mHorizontalGap = Math.round(horizontalGapFloat); - mVerticalGap = Math.round(keyParams.mKeyboardParams.mVerticalGap); + mVerticalGap = Math.round(keyParams.mKeyboardParams.mRelativeVerticalGap * keyParams.mKeyboardParams.mOccupiedHeight); mWidth = Math.round(keyParams.mFullWidth - horizontalGapFloat); // height is always rounded down, because rounding up may make the keyboard too high to fit, leading to issues mHeight = (int) (keyParams.mFullHeight - keyParams.mKeyboardParams.mVerticalGap); @@ -366,15 +362,11 @@ public class Key implements Comparable { private static boolean needsToUpcase(final int labelFlags, final int keyboardElementId) { if ((labelFlags & LABEL_FLAGS_PRESERVE_CASE) != 0) return false; - switch (keyboardElementId) { - case KeyboardId.ELEMENT_ALPHABET_MANUAL_SHIFTED: - case KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED: - case KeyboardId.ELEMENT_ALPHABET_SHIFT_LOCKED: - case KeyboardId.ELEMENT_ALPHABET_SHIFT_LOCK_SHIFTED: - return true; - default: - return false; - } + return switch (keyboardElementId) { + case KeyboardId.ELEMENT_ALPHABET_MANUAL_SHIFTED, KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED, + KeyboardId.ELEMENT_ALPHABET_SHIFT_LOCKED, KeyboardId.ELEMENT_ALPHABET_SHIFT_LOCK_SHIFTED -> true; + default -> false; + }; } private static int computeHashCode(final Key key) { @@ -548,31 +540,22 @@ public class Key implements Comparable { @NonNull public final Typeface selectTypeface(final KeyDrawParams params) { - switch (mLabelFlags & LABEL_FLAGS_FONT_MASK) { - case LABEL_FLAGS_FONT_NORMAL: - return Typeface.DEFAULT; - case LABEL_FLAGS_FONT_MONO_SPACE: - return Typeface.MONOSPACE; - case LABEL_FLAGS_FONT_DEFAULT: - default: - // The type-face is specified by keyTypeface attribute. - return params.mTypeface; - } + return switch (mLabelFlags & LABEL_FLAGS_FONT_MASK) { + case LABEL_FLAGS_FONT_NORMAL -> Typeface.DEFAULT; + case LABEL_FLAGS_FONT_MONO_SPACE -> Typeface.MONOSPACE; + default -> params.mTypeface; // The type-face is specified by keyTypeface attribute. + }; } public final int selectTextSize(final KeyDrawParams params) { - switch (mLabelFlags & LABEL_FLAGS_FOLLOW_KEY_TEXT_RATIO_MASK) { - case LABEL_FLAGS_FOLLOW_KEY_LETTER_RATIO: - return params.mLetterSize; - case LABEL_FLAGS_FOLLOW_KEY_LARGE_LETTER_RATIO: - return params.mLargeLetterSize; - case LABEL_FLAGS_FOLLOW_KEY_LABEL_RATIO: - return params.mLabelSize; - case LABEL_FLAGS_FOLLOW_KEY_HINT_LABEL_RATIO: - return params.mHintLabelSize; - default: // No follow key ratio flag specified. - return StringUtils.codePointCount(mLabel) == 1 ? params.mLetterSize : params.mLabelSize; - } + return switch (mLabelFlags & LABEL_FLAGS_FOLLOW_KEY_TEXT_RATIO_MASK) { + case LABEL_FLAGS_FOLLOW_KEY_LETTER_RATIO -> params.mLetterSize; + case LABEL_FLAGS_FOLLOW_KEY_LARGE_LETTER_RATIO -> params.mLargeLetterSize; + case LABEL_FLAGS_FOLLOW_KEY_LABEL_RATIO -> params.mLabelSize; + case LABEL_FLAGS_FOLLOW_KEY_HINT_LABEL_RATIO -> params.mHintLabelSize; + // No follow key ratio flag specified. + default -> StringUtils.codePointCount(mLabel) == 1 ? params.mLetterSize : params.mLabelSize; + }; } public final int selectTextColor(final KeyDrawParams params) { @@ -871,8 +854,8 @@ public class Key implements Comparable { final int right = left + mWidth; final int top = getY(); final int bottom = top + mHeight; - final int edgeX = x < left ? left : (x > right ? right : x); - final int edgeY = y < top ? top : (y > bottom ? bottom : y); + final int edgeX = x < left ? left : Math.min(x, right); + final int edgeY = y < top ? top : Math.min(y, bottom); final int dx = x - edgeX; final int dy = y - edgeY; return dx * dx + dy * dy; @@ -996,13 +979,6 @@ public class Key implements Comparable { @Nullable public OptionalAttributes mOptionalAttributes; public final boolean mEnabled; - public static KeyParams newSpacer(final TypedArray keyAttr, final KeyStyle keyStyle, - final KeyboardParams params, final XmlKeyboardRow row) { - final KeyParams keyParams = new KeyParams(null, keyAttr, keyStyle, params, row); - keyParams.isSpacer = true; - return keyParams; - } - public static KeyParams newSpacer(final KeyboardParams params, final float relativeWidth) { final KeyParams spacer = new KeyParams(params); spacer.mRelativeWidth = relativeWidth; @@ -1065,138 +1041,6 @@ public class Key implements Comparable { return moreKeysColumnAndFlags; } - /** - * Create keyParams with the given top-left coordinate and extract its attributes from a key - * specification string, Key attribute array, key style, and etc. - * - * @param keySpec the key specification. - * @param keyAttr the Key XML attributes array. - * @param style the {@link KeyStyle} of this key. - * @param params the keyboard building parameters. - * @param row the row that this key belongs to. row's x-coordinate will be the right edge of - * this key. - */ - public KeyParams(@Nullable final String keySpec, @NonNull final TypedArray keyAttr, - @NonNull final KeyStyle style, @NonNull final KeyboardParams params, - @NonNull final XmlKeyboardRow row) { - mKeyboardParams = params; - mRelativeHeight = row.mRelativeRowHeight; - mRelativeWidth = row.getRelativeKeyWidth(keyAttr); - - mFullHeight = row.getRowHeight(); - xPos = row.getKeyX(keyAttr); - mFullWidth = row.getKeyWidth(keyAttr, xPos); - if (mRelativeWidth == -1f) { - // determine from actual width if using fillRight - mRelativeWidth = mFullWidth / mKeyboardParams.mBaseWidth; - } - yPos = row.getKeyY(); - - // Update row to have current x coordinate. - row.setXPos(xPos + mFullWidth); - - mBackgroundType = style.getInt(keyAttr, R.styleable.Keyboard_Key_backgroundType, row.getDefaultBackgroundType()); - - final int baseWidth = params.mBaseWidth; - final int visualInsetsLeft = Math.round(keyAttr.getFraction( - R.styleable.Keyboard_Key_visualInsetsLeft, baseWidth, baseWidth, 0)); - final int visualInsetsRight = Math.round(keyAttr.getFraction( - R.styleable.Keyboard_Key_visualInsetsRight, baseWidth, baseWidth, 0)); - - mLabelFlags = style.getFlags(keyAttr, R.styleable.Keyboard_Key_keyLabelFlags) - | row.getDefaultKeyLabelFlags(); - final boolean needsToUpcase = needsToUpcase(mLabelFlags, params.mId.mElementId); - final Locale localeForUpcasing = params.mId.getLocale(); - int actionFlags = style.getFlags(keyAttr, R.styleable.Keyboard_Key_keyActionFlags); - String[] moreKeys = style.getStringArray(keyAttr, R.styleable.Keyboard_Key_moreKeys); - mMoreKeysColumnAndFlags = getMoreKeysColumnAndFlagsAndSetNullInArray(params, moreKeys); - - final String[] additionalMoreKeys; - if ((mLabelFlags & LABEL_FLAGS_DISABLE_ADDITIONAL_MORE_KEYS) != 0) { - additionalMoreKeys = null; - } else { - additionalMoreKeys = style.getStringArray(keyAttr, R.styleable.Keyboard_Key_additionalMoreKeys); - } - moreKeys = MoreKeySpec.insertAdditionalMoreKeys(moreKeys, additionalMoreKeys); - if (moreKeys != null) { - actionFlags |= ACTION_FLAGS_ENABLE_LONG_PRESS; - mMoreKeys = new MoreKeySpec[moreKeys.length]; - for (int i = 0; i < moreKeys.length; i++) { - mMoreKeys[i] = new MoreKeySpec(moreKeys[i], needsToUpcase, localeForUpcasing); - } - } else { - mMoreKeys = null; - } - mActionFlags = actionFlags; - - mIconId = KeySpecParser.getIconId(keySpec); - final int disabledIconId = KeySpecParser.getIconId(style.getString(keyAttr, - R.styleable.Keyboard_Key_keyIconDisabled)); - - final int code = KeySpecParser.getCode(keySpec); - if ((mLabelFlags & LABEL_FLAGS_FROM_CUSTOM_ACTION_LABEL) != 0) { - mLabel = params.mId.mCustomActionLabel; - } else if (code >= Character.MIN_SUPPLEMENTARY_CODE_POINT) { - // This is a workaround to have a key that has a supplementary code point in its label. - // Because we can put a string in resource neither as a XML entity of a supplementary - // code point nor as a surrogate pair. - mLabel = new StringBuilder().appendCodePoint(code).toString(); - } else { - final String label = KeySpecParser.getLabel(keySpec); - mLabel = needsToUpcase - ? StringUtils.toTitleCaseOfKeyLabel(label, localeForUpcasing) - : label; - } - if ((mLabelFlags & LABEL_FLAGS_DISABLE_HINT_LABEL) != 0) { - mHintLabel = null; - } else { - final String hintLabel = style.getString(keyAttr, R.styleable.Keyboard_Key_keyHintLabel); - mHintLabel = needsToUpcase - ? StringUtils.toTitleCaseOfKeyLabel(hintLabel, localeForUpcasing) - : hintLabel; - } - String outputText = KeySpecParser.getOutputText(keySpec); - if (needsToUpcase) { - outputText = StringUtils.toTitleCaseOfKeyLabel(outputText, localeForUpcasing); - } - // Choose the first letter of the label as primary code if not specified. - if (code == CODE_UNSPECIFIED && TextUtils.isEmpty(outputText) && !TextUtils.isEmpty(mLabel)) { - if (StringUtils.codePointCount(mLabel) == 1) { - // Use the first letter of the hint label if shiftedLetterActivated flag is - // specified. - if ((mLabelFlags & LABEL_FLAGS_HAS_SHIFTED_LETTER_HINT) != 0 && (mLabelFlags & LABEL_FLAGS_SHIFTED_LETTER_ACTIVATED) != 0 - && !TextUtils.isEmpty(mHintLabel)) { - mCode = mHintLabel.codePointAt(0); - } else { - mCode = mLabel.codePointAt(0); - } - } else { - // In some locale and case, the character might be represented by multiple code - // points, such as upper case Eszett of German alphabet. - outputText = mLabel; - mCode = CODE_OUTPUT_TEXT; - } - } else if (code == CODE_UNSPECIFIED && outputText != null) { - if (StringUtils.codePointCount(outputText) == 1) { - mCode = outputText.codePointAt(0); - outputText = null; - } else { - mCode = CODE_OUTPUT_TEXT; - } - } else { - mCode = needsToUpcase ? StringUtils.toTitleCaseOfKeyCode(code, localeForUpcasing) : code; - } - final int altCodeInAttr = KeySpecParser.parseCode( - style.getString(keyAttr, R.styleable.Keyboard_Key_altCode), CODE_UNSPECIFIED); - final int altCode = needsToUpcase - ? StringUtils.toTitleCaseOfKeyCode(altCodeInAttr, localeForUpcasing) - : altCodeInAttr; - mOptionalAttributes = OptionalAttributes.newInstance(outputText, altCode, - disabledIconId, visualInsetsLeft, visualInsetsRight); - mKeyVisualAttributes = KeyVisualAttributes.newInstance(keyAttr); - mEnabled = true; - } - public KeyParams( @NonNull final String keySpec, @NonNull final KeyboardParams params, @@ -1354,7 +1198,7 @@ public class Key implements Comparable { mEnabled = true; } - /** constructor for emoji parser */ // essentially the same as the GridRows constructor, but without coordinates and outputText + /** constructor for emoji parser */ public KeyParams(@Nullable final String label, final int code, @Nullable final String hintLabel, @Nullable final String moreKeySpecs, final int labelFlags, final KeyboardParams params) { mKeyboardParams = params; @@ -1395,52 +1239,6 @@ public class Key implements Comparable { mKeyVisualAttributes = null; } - /** constructor for */ - public KeyParams(@Nullable final String label, final int code, @Nullable final String outputText, - @Nullable final String hintLabel, @Nullable final String moreKeySpecs, - final int labelFlags, final int backgroundType, final int x, final int y, - final int width, final int height, final KeyboardParams params) { - mKeyboardParams = params; - mFullWidth = width; - mFullHeight = height; - mHintLabel = hintLabel; - mLabelFlags = labelFlags; - mBackgroundType = backgroundType; - xPos = x; - yPos = y; - - if (moreKeySpecs != null) { - String[] moreKeys = MoreKeySpec.splitKeySpecs(moreKeySpecs); - mMoreKeysColumnAndFlags = getMoreKeysColumnAndFlagsAndSetNullInArray(params, moreKeys); - - moreKeys = MoreKeySpec.insertAdditionalMoreKeys(moreKeys, null); - int actionFlags = 0; - if (moreKeys != null) { - actionFlags |= ACTION_FLAGS_ENABLE_LONG_PRESS; - mMoreKeys = new MoreKeySpec[moreKeys.length]; - for (int i = 0; i < moreKeys.length; i++) { - mMoreKeys[i] = new MoreKeySpec(moreKeys[i], false, Locale.getDefault()); - } - } else { - mMoreKeys = null; - } - mActionFlags = actionFlags; - } else { - // TODO: Pass keyActionFlags as an argument. - mActionFlags = ACTION_FLAGS_NO_KEY_PREVIEW; - mMoreKeys = null; - mMoreKeysColumnAndFlags = 0; - } - - mLabel = label; - mOptionalAttributes = OptionalAttributes.newInstance(outputText, CODE_UNSPECIFIED, - ICON_UNDEFINED, 0 /* visualInsetsLeft */, 0 /* visualInsetsRight */); - mCode = code; - mEnabled = (code != CODE_UNSPECIFIED); - mIconId = KeyboardIconsSet.ICON_UNDEFINED; - mKeyVisualAttributes = null; - } - /** constructor for a spacer whose size MUST be determined using setDimensionsFromRelativeSize */ private KeyParams(final KeyboardParams params) { isSpacer = true; // this is only for spacer! @@ -1482,6 +1280,8 @@ public class Key implements Comparable { mActionFlags = keyParams.mActionFlags; mKeyVisualAttributes = keyParams.mKeyVisualAttributes; mOptionalAttributes = keyParams.mOptionalAttributes; + mRelativeVisualInsetLeft = keyParams.mRelativeVisualInsetLeft; + mRelativeVisualInsetRight = keyParams.mRelativeVisualInsetRight; } } } diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardId.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardId.java index 0a5fdc208..0a165ae30 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardId.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardId.java @@ -207,7 +207,7 @@ public final class KeyboardId { @Override public String toString() { - return String.format(Locale.ROOT, "[%s %s:%s %dx%d %s %s%s%s%s%s%s%s%s%s]", + return String.format(Locale.ROOT, "[%s %s:%s %dx%d %s %s%s%s%s%s%s%s%s%s%s%s]", elementIdToName(mElementId), mSubtype.getLocale(), mSubtype.getExtraValueOf(KEYBOARD_LAYOUT_SET), @@ -236,54 +236,54 @@ public final class KeyboardId { } public static String elementIdToName(final int elementId) { - switch (elementId) { - case ELEMENT_ALPHABET: return "alphabet"; - case ELEMENT_ALPHABET_MANUAL_SHIFTED: return "alphabetManualShifted"; - case ELEMENT_ALPHABET_AUTOMATIC_SHIFTED: return "alphabetAutomaticShifted"; - case ELEMENT_ALPHABET_SHIFT_LOCKED: return "alphabetShiftLocked"; - case ELEMENT_ALPHABET_SHIFT_LOCK_SHIFTED: return "alphabetShiftLockShifted"; - case ELEMENT_SYMBOLS: return "symbols"; - case ELEMENT_SYMBOLS_SHIFTED: return "symbolsShifted"; - case ELEMENT_PHONE: return "phone"; - case ELEMENT_PHONE_SYMBOLS: return "phoneSymbols"; - case ELEMENT_NUMBER: return "number"; - case ELEMENT_EMOJI_RECENTS: return "emojiRecents"; - case ELEMENT_EMOJI_CATEGORY1: return "emojiCategory1"; - case ELEMENT_EMOJI_CATEGORY2: return "emojiCategory2"; - case ELEMENT_EMOJI_CATEGORY3: return "emojiCategory3"; - case ELEMENT_EMOJI_CATEGORY4: return "emojiCategory4"; - case ELEMENT_EMOJI_CATEGORY5: return "emojiCategory5"; - case ELEMENT_EMOJI_CATEGORY6: return "emojiCategory6"; - case ELEMENT_EMOJI_CATEGORY7: return "emojiCategory7"; - case ELEMENT_EMOJI_CATEGORY8: return "emojiCategory8"; - case ELEMENT_EMOJI_CATEGORY9: return "emojiCategory9"; - case ELEMENT_EMOJI_CATEGORY10: return "emojiCategory10"; - case ELEMENT_EMOJI_CATEGORY11: return "emojiCategory11"; - case ELEMENT_EMOJI_CATEGORY12: return "emojiCategory12"; - case ELEMENT_EMOJI_CATEGORY13: return "emojiCategory13"; - case ELEMENT_EMOJI_CATEGORY14: return "emojiCategory14"; - case ELEMENT_EMOJI_CATEGORY15: return "emojiCategory15"; - case ELEMENT_EMOJI_CATEGORY16: return "emojiCategory16"; - case ELEMENT_CLIPBOARD: return "clipboard"; - case ELEMENT_NUMPAD: return "numpad"; - default: return null; - } + return switch (elementId) { + case ELEMENT_ALPHABET -> "alphabet"; + case ELEMENT_ALPHABET_MANUAL_SHIFTED -> "alphabetManualShifted"; + case ELEMENT_ALPHABET_AUTOMATIC_SHIFTED -> "alphabetAutomaticShifted"; + case ELEMENT_ALPHABET_SHIFT_LOCKED -> "alphabetShiftLocked"; + case ELEMENT_ALPHABET_SHIFT_LOCK_SHIFTED -> "alphabetShiftLockShifted"; + case ELEMENT_SYMBOLS -> "symbols"; + case ELEMENT_SYMBOLS_SHIFTED -> "symbolsShifted"; + case ELEMENT_PHONE -> "phone"; + case ELEMENT_PHONE_SYMBOLS -> "phoneSymbols"; + case ELEMENT_NUMBER -> "number"; + case ELEMENT_EMOJI_RECENTS -> "emojiRecents"; + case ELEMENT_EMOJI_CATEGORY1 -> "emojiCategory1"; + case ELEMENT_EMOJI_CATEGORY2 -> "emojiCategory2"; + case ELEMENT_EMOJI_CATEGORY3 -> "emojiCategory3"; + case ELEMENT_EMOJI_CATEGORY4 -> "emojiCategory4"; + case ELEMENT_EMOJI_CATEGORY5 -> "emojiCategory5"; + case ELEMENT_EMOJI_CATEGORY6 -> "emojiCategory6"; + case ELEMENT_EMOJI_CATEGORY7 -> "emojiCategory7"; + case ELEMENT_EMOJI_CATEGORY8 -> "emojiCategory8"; + case ELEMENT_EMOJI_CATEGORY9 -> "emojiCategory9"; + case ELEMENT_EMOJI_CATEGORY10 -> "emojiCategory10"; + case ELEMENT_EMOJI_CATEGORY11 -> "emojiCategory11"; + case ELEMENT_EMOJI_CATEGORY12 -> "emojiCategory12"; + case ELEMENT_EMOJI_CATEGORY13 -> "emojiCategory13"; + case ELEMENT_EMOJI_CATEGORY14 -> "emojiCategory14"; + case ELEMENT_EMOJI_CATEGORY15 -> "emojiCategory15"; + case ELEMENT_EMOJI_CATEGORY16 -> "emojiCategory16"; + case ELEMENT_CLIPBOARD -> "clipboard"; + case ELEMENT_NUMPAD -> "numpad"; + default -> null; + }; } public static String modeName(final int mode) { - switch (mode) { - case MODE_TEXT: return "text"; - case MODE_URL: return "url"; - case MODE_EMAIL: return "email"; - case MODE_IM: return "im"; - case MODE_PHONE: return "phone"; - case MODE_NUMBER: return "number"; - case MODE_DATE: return "date"; - case MODE_TIME: return "time"; - case MODE_DATETIME: return "datetime"; - case MODE_NUMPAD: return "numpad"; - default: return null; - } + return switch (mode) { + case MODE_TEXT -> "text"; + case MODE_URL -> "url"; + case MODE_EMAIL -> "email"; + case MODE_IM -> "im"; + case MODE_PHONE -> "phone"; + case MODE_NUMBER -> "number"; + case MODE_DATE -> "date"; + case MODE_TIME -> "time"; + case MODE_DATETIME -> "datetime"; + case MODE_NUMPAD -> "numpad"; + default -> null; + }; } public static String actionName(final int actionId) { diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardLayout.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardLayout.java index b8b1c0897..40f63f80a 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardLayout.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardLayout.java @@ -18,6 +18,8 @@ import java.util.List; /** * KeyboardLayout maintains the keyboard layout information. */ +// todo: this seems completely unused, see whether it can be removed, or re-purposed to contain +// some useful information about the layout (currently that's in KeyboardParser.LayoutInfos) public class KeyboardLayout { private final int[] mKeyCodes; @@ -110,7 +112,6 @@ public class KeyboardLayout { layoutKeys.add(key); } } - return new KeyboardLayout(layoutKeys, mostCommonKeyWidth, - mostCommonKeyHeight, occupiedWidth, occupiedHeight); + return new KeyboardLayout(layoutKeys, mostCommonKeyWidth, mostCommonKeyHeight, occupiedWidth, occupiedHeight); } } diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardLayoutSet.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardLayoutSet.java index e52199999..1ce6dd673 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardLayoutSet.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardLayoutSet.java @@ -19,7 +19,6 @@ import org.dslul.openboard.inputmethod.latin.utils.Log; import android.util.SparseArray; import android.util.Xml; import android.view.inputmethod.EditorInfo; -import android.view.inputmethod.InputMethodSubtype; import org.dslul.openboard.inputmethod.keyboard.internal.KeyboardBuilder; import org.dslul.openboard.inputmethod.keyboard.internal.KeyboardParams; @@ -30,7 +29,6 @@ import org.dslul.openboard.inputmethod.latin.R; import org.dslul.openboard.inputmethod.latin.RichInputMethodSubtype; import org.dslul.openboard.inputmethod.latin.utils.InputTypeUtils; import org.dslul.openboard.inputmethod.latin.utils.ScriptUtils; -import org.dslul.openboard.inputmethod.latin.utils.SubtypeLocaleUtils; import org.dslul.openboard.inputmethod.latin.utils.XmlParseUtils; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; @@ -78,8 +76,6 @@ public final class KeyboardLayoutSet { new HashMap<>(); @NonNull private static final UniqueKeysCache sUniqueKeysCache = UniqueKeysCache.newInstance(); - private final static HashMap sScriptIdsForSubtypes = - new HashMap<>(); public static final class KeyboardLayoutSetException extends RuntimeException { public final KeyboardId mKeyboardId; @@ -92,9 +88,6 @@ public final class KeyboardLayoutSet { private static final class ElementParams { int mKeyboardXmlId; - boolean mProximityCharsCorrectionEnabled; - boolean mSupportsSplitLayout; - boolean mAllowRedundantMoreKeys; public ElementParams() { } @@ -120,9 +113,6 @@ public final class KeyboardLayoutSet { int mScriptId = ScriptUtils.SCRIPT_LATIN; // Indicates if the user has enabled the split-layout preference // and the required ProductionFlags are enabled. - boolean mIsSplitLayoutEnabledByUser; - // Indicates if split layout is actually enabled, taking into account - // whether the user has enabled it, and the keyboard layout supports it. boolean mIsSplitLayoutEnabled; // Sparse array of KeyboardLayoutSet element parameters indexed by element's id. final SparseArray mKeyboardLayoutSetElementIdToParamsMap = new SparseArray<>(); @@ -142,17 +132,6 @@ public final class KeyboardLayoutSet { sUniqueKeysCache.clear(); } - public static int getScriptId(final Resources resources, - @NonNull final InputMethodSubtype subtype) { - final Integer value = sScriptIdsForSubtypes.get(subtype); - if (null == value) { - final int scriptId = Builder.readScriptId(resources, subtype); - sScriptIdsForSubtypes.put(subtype, scriptId); - return scriptId; - } - return value; - } - KeyboardLayoutSet(final Context context, @NonNull final Params params) { mContext = context; mParams = params; @@ -195,9 +174,6 @@ public final class KeyboardLayoutSet { // specified as an elementKeyboard attribute in the file. // The KeyboardId is an internal key for a Keyboard object. - mParams.mIsSplitLayoutEnabled = mParams.mIsSplitLayoutEnabledByUser - && elementParams.mSupportsSplitLayout; - final KeyboardId id = new KeyboardId(keyboardLayoutSetElementId, mParams); try { return getKeyboard(elementParams, id); @@ -221,13 +197,11 @@ public final class KeyboardLayoutSet { final KeyboardBuilder builder = new KeyboardBuilder<>(mContext, new KeyboardParams(sUniqueKeysCache)); sUniqueKeysCache.setEnabled(id.isAlphabetKeyboard()); - builder.setAllowRedundantMoreKeys(elementParams.mAllowRedundantMoreKeys); final int keyboardXmlId = elementParams.mKeyboardXmlId; - builder.loadFromXml(keyboardXmlId, id); + builder.load(keyboardXmlId, id); if (mParams.mDisableTouchPositionCorrectionDataForTest) { builder.disableTouchPositionCorrectionDataForTest(); } - builder.setProximityCharsCorrectionEnabled(elementParams.mProximityCharsCorrectionEnabled); final Keyboard keyboard = builder.build(); sKeyboardCache.put(id, new SoftReference<>(keyboard)); if ((id.mElementId == KeyboardId.ELEMENT_ALPHABET @@ -336,8 +310,8 @@ public final class KeyboardLayoutSet { return this; } - public Builder setSplitLayoutEnabledByUser(final boolean enabled) { - mParams.mIsSplitLayoutEnabledByUser = enabled; + public Builder setSplitLayoutEnabled(final boolean enabled) { + mParams.mIsSplitLayoutEnabled = enabled; return this; } @@ -346,59 +320,26 @@ public final class KeyboardLayoutSet { return this; } - // Super redux version of reading the script ID for some subtype from Xml. - static int readScriptId(final Resources resources, final InputMethodSubtype subtype) { - final String layoutSetName = KEYBOARD_LAYOUT_SET_RESOURCE_PREFIX - + SubtypeLocaleUtils.getKeyboardLayoutSetName(subtype); - final int xmlId = getXmlId(resources, layoutSetName); - try (XmlResourceParser parser = resources.getXml(xmlId)) { - while (parser.getEventType() != XmlPullParser.END_DOCUMENT) { - // Bovinate through the XML stupidly searching for TAG_FEATURE, and read - // the script Id from it. - parser.next(); - final String tag = parser.getName(); - if (TAG_FEATURE.equals(tag)) { - return readScriptIdFromTagFeature(resources, parser); - } - } - } catch (final IOException | XmlPullParserException e) { - throw new RuntimeException(e.getMessage() + " in " + layoutSetName, e); - } - // If the tag is not found, then the default script is Latin. - return ScriptUtils.SCRIPT_LATIN; - } - - private static int readScriptIdFromTagFeature(final Resources resources, - final XmlPullParser parser) throws IOException, XmlPullParserException { - final TypedArray featureAttr = resources.obtainAttributes(Xml.asAttributeSet(parser), - R.styleable.KeyboardLayoutSet_Feature); - try { - final int scriptId = - featureAttr.getInt(R.styleable.KeyboardLayoutSet_Feature_supportedScript, - ScriptUtils.SCRIPT_UNKNOWN); - XmlParseUtils.checkEndTag(TAG_FEATURE, parser); - return scriptId; - } finally { - featureAttr.recycle(); - } - } - public KeyboardLayoutSet build() { if (mParams.mSubtype == null) throw new RuntimeException("KeyboardLayoutSet subtype is not specified"); - final int xmlId = getXmlId(mResources, mParams.mKeyboardLayoutSetName); + mParams.mScriptId = ScriptUtils.getScriptFromSpellCheckerLocale(mParams.mSubtype.getLocale()); + // todo: the whole parsing stuff below should be removed, but currently + // it simply breaks when it's not available + // for emojis, moreKeys and moreSuggestions there are relevant parameters included + int xmlId = getXmlId(mResources, mParams.mKeyboardLayoutSetName); + if (xmlId == 0) + xmlId = R.xml.keyboard_layout_set_default; try { parseKeyboardLayoutSet(mResources, xmlId); } catch (final IOException | XmlPullParserException e) { - throw new RuntimeException(e.getMessage() + " in " + mParams.mKeyboardLayoutSetName, - e); + throw new RuntimeException(e.getMessage() + " in " + mParams.mKeyboardLayoutSetName, e); } return new KeyboardLayoutSet(mContext, mParams); } private static int getXmlId(final Resources resources, final String keyboardLayoutSetName) { - final String packageName = resources.getResourcePackageName( - R.xml.keyboard_layout_set_qwerty); + final String packageName = resources.getResourcePackageName(R.xml.keyboard_layout_set_default); return resources.getIdentifier(keyboardLayoutSetName, "xml", packageName); } @@ -427,8 +368,6 @@ public final class KeyboardLayoutSet { final String tag = parser.getName(); if (TAG_ELEMENT.equals(tag)) { parseKeyboardLayoutSetElement(parser); - } else if (TAG_FEATURE.equals(tag)) { - mParams.mScriptId = readScriptIdFromTagFeature(mResources, parser); } else { throw new XmlParseUtils.IllegalStartTag(parser, tag, TAG_KEYBOARD_SET); } @@ -450,9 +389,6 @@ public final class KeyboardLayoutSet { XmlParseUtils.checkAttributeExists(a, R.styleable.KeyboardLayoutSet_Element_elementName, "elementName", TAG_ELEMENT, parser); - XmlParseUtils.checkAttributeExists(a, - R.styleable.KeyboardLayoutSet_Element_elementKeyboard, "elementKeyboard", - TAG_ELEMENT, parser); XmlParseUtils.checkEndTag(TAG_ELEMENT, parser); final ElementParams elementParams = new ElementParams(); @@ -460,12 +396,6 @@ public final class KeyboardLayoutSet { R.styleable.KeyboardLayoutSet_Element_elementName, 0); elementParams.mKeyboardXmlId = a.getResourceId( R.styleable.KeyboardLayoutSet_Element_elementKeyboard, 0); - elementParams.mProximityCharsCorrectionEnabled = a.getBoolean( - R.styleable.KeyboardLayoutSet_Element_enableProximityCharsCorrection, - false); - elementParams.mSupportsSplitLayout = false; // this is to avoid xml parser reading split layouts, todo (later): remove mSupportsSplitLayout - elementParams.mAllowRedundantMoreKeys = a.getBoolean( - R.styleable.KeyboardLayoutSet_Element_allowRedundantMoreKeys, true); mParams.mKeyboardLayoutSetElementIdToParamsMap.put(elementName, elementParams); } finally { a.recycle(); diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardSwitcher.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardSwitcher.java index dfb8bd8ea..34c80faa9 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardSwitcher.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardSwitcher.java @@ -127,8 +127,7 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions { .setNumberRowEnabled(settingsValues.mShowsNumberRow) .setLanguageSwitchKeyEnabled(settingsValues.isLanguageSwitchKeyEnabled()) .setEmojiKeyEnabled(settingsValues.mShowsEmojiKey) - .setSplitLayoutEnabledByUser(ProductionFlags.IS_SPLIT_KEYBOARD_SUPPORTED - && settingsValues.mIsSplitKeyboardEnabled) + .setSplitLayoutEnabled(ProductionFlags.IS_SPLIT_KEYBOARD_SUPPORTED && settingsValues.mIsSplitKeyboardEnabled) .setOneHandedModeEnabled(oneHandedModeEnabled) .build(); try { diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardView.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardView.java index 91665adfb..961ee1acf 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardView.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardView.java @@ -36,7 +36,6 @@ import org.dslul.openboard.inputmethod.latin.common.Colors; import org.dslul.openboard.inputmethod.latin.common.Constants; import org.dslul.openboard.inputmethod.latin.common.StringUtils; import org.dslul.openboard.inputmethod.latin.settings.Settings; -import org.dslul.openboard.inputmethod.latin.settings.SettingsValues; import org.dslul.openboard.inputmethod.latin.suggestions.MoreSuggestions; import org.dslul.openboard.inputmethod.latin.suggestions.MoreSuggestionsView; import org.dslul.openboard.inputmethod.latin.utils.TypefaceUtils; @@ -68,14 +67,10 @@ import java.util.HashSet; * @attr ref R.styleable#Keyboard_Key_keyLabelOffCenterRatio * @attr ref R.styleable#Keyboard_Key_keyHintLabelOffCenterRatio * @attr ref R.styleable#Keyboard_Key_keyPreviewTextRatio - * @attr ref R.styleable#Keyboard_Key_keyTextColor * @attr ref R.styleable#Keyboard_Key_keyTextColorDisabled * @attr ref R.styleable#Keyboard_Key_keyTextShadowColor - * @attr ref R.styleable#Keyboard_Key_keyHintLetterColor - * @attr ref R.styleable#Keyboard_Key_keyHintLabelColor * @attr ref R.styleable#Keyboard_Key_keyShiftedLetterHintInactivatedColor * @attr ref R.styleable#Keyboard_Key_keyShiftedLetterHintActivatedColor - * @attr ref R.styleable#Keyboard_Key_keyPreviewTextColor */ public class KeyboardView extends View { // XML attributes @@ -258,7 +253,7 @@ public class KeyboardView extends View { } @Override - protected void onDraw(final Canvas canvas) { + protected void onDraw(@NonNull final Canvas canvas) { super.onDraw(canvas); if (canvas.isHardwareAccelerated()) { onDrawKeyboard(canvas); diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/MainKeyboardView.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/MainKeyboardView.java index 621b30689..bc377f0b2 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/MainKeyboardView.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/MainKeyboardView.java @@ -302,14 +302,10 @@ public final class MainKeyboardView extends KeyboardView implements DrawingProxy @Override public void startWhileTypingAnimation(final int fadeInOrOut) { switch (fadeInOrOut) { - case DrawingProxy.FADE_IN: - cancelAndStartAnimators( + case DrawingProxy.FADE_IN -> cancelAndStartAnimators( mAltCodeKeyWhileTypingFadeoutAnimator, mAltCodeKeyWhileTypingFadeinAnimator); - break; - case DrawingProxy.FADE_OUT: - cancelAndStartAnimators( + case DrawingProxy.FADE_OUT -> cancelAndStartAnimators( mAltCodeKeyWhileTypingFadeinAnimator, mAltCodeKeyWhileTypingFadeoutAnimator); - break; } } diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/MoreKeysKeyboard.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/MoreKeysKeyboard.java index d600e3c14..261e87c55 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/MoreKeysKeyboard.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/MoreKeysKeyboard.java @@ -76,8 +76,7 @@ public final class MoreKeysKeyboard extends Keyboard { mDefaultKeyWidth = keyWidth; mDefaultRowHeight = rowHeight; - final int numRows = (numKeys + numColumn - 1) / numColumn; - mNumRows = numRows; + mNumRows = (numKeys + numColumn - 1) / numColumn; final int numColumns = isMoreKeysFixedColumn ? Math.min(numKeys, numColumn) : getOptimizedColumns(numKeys, numColumn); mNumColumns = numColumns; diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/PointerTracker.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/PointerTracker.java index e12a98185..a4fed1b67 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/PointerTracker.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/PointerTracker.java @@ -41,6 +41,7 @@ import org.dslul.openboard.inputmethod.latin.utils.ResourceUtils; import java.util.ArrayList; import java.util.List; +import java.util.Locale; public final class PointerTracker implements PointerTrackerQueue.Element, BatchInputArbiterListener { @@ -256,7 +257,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element, } final boolean ignoreModifierKey = mIsInDraggingFinger && key.isModifier(); if (DEBUG_LISTENER) { - Log.d(TAG, String.format("[%d] onPress : %s%s%s%s", mPointerId, + Log.d(TAG, String.format(Locale.US, "[%d] onPress : %s%s%s%s", mPointerId, (key == null ? "none" : Constants.printableCode(key.getCode())), ignoreModifierKey ? " ignoreModifier" : "", key.isEnabled() ? "" : " disabled", @@ -285,7 +286,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element, if (DEBUG_LISTENER) { final String output = code == Constants.CODE_OUTPUT_TEXT ? key.getOutputText() : Constants.printableCode(code); - Log.d(TAG, String.format("[%d] onCodeInput: %4d %4d %s%s%s", mPointerId, x, y, + Log.d(TAG, String.format(Locale.US, "[%d] onCodeInput: %4d %4d %s%s%s%s", mPointerId, x, y, output, ignoreModifierKey ? " ignoreModifier" : "", altersCode ? " altersCode" : "", key.isEnabled() ? "" : " disabled")); } @@ -318,7 +319,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element, } final boolean ignoreModifierKey = mIsInDraggingFinger && key.isModifier(); if (DEBUG_LISTENER) { - Log.d(TAG, String.format("[%d] onRelease : %s%s%s%s", mPointerId, + Log.d(TAG, String.format(Locale.US, "[%d] onRelease : %s%s%s%s", mPointerId, Constants.printableCode(primaryCode), withSliding ? " sliding" : "", ignoreModifierKey ? " ignoreModifier" : "", key.isEnabled() ? "": " disabled")); @@ -333,14 +334,14 @@ public final class PointerTracker implements PointerTrackerQueue.Element, private void callListenerOnFinishSlidingInput() { if (DEBUG_LISTENER) { - Log.d(TAG, String.format("[%d] onFinishSlidingInput", mPointerId)); + Log.d(TAG, String.format(Locale.US, "[%d] onFinishSlidingInput", mPointerId)); } sListener.onFinishSlidingInput(); } private void callListenerOnCancelInput() { if (DEBUG_LISTENER) { - Log.d(TAG, String.format("[%d] onCancelInput", mPointerId)); + Log.d(TAG, String.format(Locale.US, "[%d] onCancelInput", mPointerId)); } sListener.onCancelInput(); } @@ -519,7 +520,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element, @Override public void onStartBatchInput() { if (DEBUG_LISTENER) { - Log.d(TAG, String.format("[%d] onStartBatchInput", mPointerId)); + Log.d(TAG, String.format(Locale.US, "[%d] onStartBatchInput", mPointerId)); } sListener.onStartBatchInput(); dismissAllMoreKeysPanels(); @@ -543,7 +544,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element, @Override public void onUpdateBatchInput(final InputPointers aggregatedPointers, final long eventTime) { if (DEBUG_LISTENER) { - Log.d(TAG, String.format("[%d] onUpdateBatchInput: batchPoints=%d", mPointerId, + Log.d(TAG, String.format(Locale.US, "[%d] onUpdateBatchInput: batchPoints=%d", mPointerId, aggregatedPointers.getPointerSize())); } sListener.onUpdateBatchInput(aggregatedPointers); @@ -564,7 +565,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element, return; } if (DEBUG_LISTENER) { - Log.d(TAG, String.format("[%d] onEndBatchInput : batchPoints=%d", + Log.d(TAG, String.format(Locale.US, "[%d] onEndBatchInput : batchPoints=%d", mPointerId, aggregatedPointers.getPointerSize())); } sListener.onEndBatchInput(aggregatedPointers); @@ -578,7 +579,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element, } sInGesture = false; if (DEBUG_LISTENER) { - Log.d(TAG, String.format("[%d] onCancelBatchInput", mPointerId)); + Log.d(TAG, String.format(Locale.US, "[%d] onCancelBatchInput", mPointerId)); } sListener.onCancelBatchInput(); } @@ -608,17 +609,9 @@ public final class PointerTracker implements PointerTrackerQueue.Element, final int x = (int)me.getX(index); final int y = (int)me.getY(index); switch (action) { - case MotionEvent.ACTION_DOWN: - case MotionEvent.ACTION_POINTER_DOWN: - onDownEvent(x, y, eventTime, keyDetector); - break; - case MotionEvent.ACTION_UP: - case MotionEvent.ACTION_POINTER_UP: - onUpEvent(x, y, eventTime); - break; - case MotionEvent.ACTION_CANCEL: - onCancelEvent(x, y, eventTime); - break; + case MotionEvent.ACTION_DOWN, MotionEvent.ACTION_POINTER_DOWN -> onDownEvent(x, y, eventTime, keyDetector); + case MotionEvent.ACTION_UP, MotionEvent.ACTION_POINTER_UP -> onUpEvent(x, y, eventTime); + case MotionEvent.ACTION_CANCEL -> onCancelEvent(x, y, eventTime); } } @@ -634,7 +627,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element, final int distance = getDistance(x, y, mLastX, mLastY); if (distance < sParams.mTouchNoiseThresholdDistance) { if (DEBUG_MODE) - Log.w(TAG, String.format("[%d] onDownEvent:" + Log.w(TAG, String.format(Locale.US, "[%d] onDownEvent:" + " ignore potential noise: time=%d distance=%d", mPointerId, deltaT, distance)); cancelTrackingForAction(); @@ -814,7 +807,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element, private void processPhantomSuddenMoveHack(final Key key, final int x, final int y, final long eventTime, final Key oldKey, final int lastX, final int lastY) { if (DEBUG_MODE) { - Log.w(TAG, String.format("[%d] onMoveEvent:" + Log.w(TAG, String.format(Locale.US, "[%d] onMoveEvent:" + " phantom sudden move event (distance=%d) is translated to " + "up[%d,%d,%s]/down[%d,%d,%s] events", mPointerId, getDistance(x, y, lastX, lastY), @@ -833,7 +826,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element, final float radiusRatio = mBogusMoveEventDetector.getDistanceFromDownEvent(x, y) / keyDiagonal; - Log.w(TAG, String.format("[%d] onMoveEvent:" + Log.w(TAG, String.format(Locale.US, "[%d] onMoveEvent:" + " bogus down-move-up event (raidus=%.2f key diagonal) is " + " translated to up[%d,%d,%s]/down[%d,%d,%s] events", mPointerId, radiusRatio, @@ -883,7 +876,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element, else if (getActivePointerTrackerCount() > 1 && !sPointerTrackerQueue.hasModifierKeyOlderThan(this)) { if (DEBUG_MODE) { - Log.w(TAG, String.format("[%d] onMoveEvent:" + Log.w(TAG, String.format(Locale.US, "[%d] onMoveEvent:" + " detected sliding finger while multi touching", mPointerId)); } onUpEvent(x, y, eventTime); @@ -1173,9 +1166,8 @@ public final class PointerTracker implements PointerTrackerQueue.Element, final int distanceFromKeyEdgeSquared = curKey.squaredDistanceToEdge(x, y); if (distanceFromKeyEdgeSquared >= keyHysteresisDistanceSquared) { if (DEBUG_MODE) { - final float distanceToEdgeRatio = (float)Math.sqrt(distanceFromKeyEdgeSquared) - / mKeyboard.mMostCommonKeyWidth; - Log.d(TAG, String.format("[%d] isMajorEnoughMoveToBeOnNewKey:" + final float distanceToEdgeRatio = (float)Math.sqrt(distanceFromKeyEdgeSquared) / mKeyboard.mMostCommonKeyWidth; + Log.d(TAG, String.format(Locale.US, "[%d] isMajorEnoughMoveToBeOnNewKey:" +" %.2f key width from key edge", mPointerId, distanceToEdgeRatio)); } return true; @@ -1185,9 +1177,8 @@ public final class PointerTracker implements PointerTrackerQueue.Element, if (DEBUG_MODE) { final float keyDiagonal = (float)Math.hypot( mKeyboard.mMostCommonKeyWidth, mKeyboard.mMostCommonKeyHeight); - final float lengthFromDownRatio = - mBogusMoveEventDetector.getAccumulatedDistanceFromDownKey() / keyDiagonal; - Log.d(TAG, String.format("[%d] isMajorEnoughMoveToBeOnNewKey:" + final float lengthFromDownRatio = mBogusMoveEventDetector.getAccumulatedDistanceFromDownKey() / keyDiagonal; + Log.d(TAG, String.format(Locale.US, "[%d] isMajorEnoughMoveToBeOnNewKey:" + " %.2f key diagonal from virtual down point", mPointerId, lengthFromDownRatio)); } @@ -1273,7 +1264,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element, final long eventTime) { final Key key = mKeyDetector.detectHitKey(x, y); final String code = (key == null ? "none" : Constants.printableCode(key.getCode())); - Log.d(TAG, String.format("[%d]%s%s %4d %4d %5d %s", mPointerId, + Log.d(TAG, String.format(Locale.US, "[%d]%s%s %4d %4d %5d %s", mPointerId, (mIsTrackingForActionDisabled ? "-" : " "), title, x, y, eventTime, code)); } } diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/AlphabetShiftState.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/AlphabetShiftState.java index a53d0adaf..710521505 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/AlphabetShiftState.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/AlphabetShiftState.java @@ -27,26 +27,14 @@ public final class AlphabetShiftState { final int oldState = mState; if (newShiftState) { switch (oldState) { - case UNSHIFTED: - mState = MANUAL_SHIFTED; - break; - case AUTOMATIC_SHIFTED: - mState = MANUAL_SHIFTED_FROM_AUTO; - break; - case SHIFT_LOCKED: - mState = SHIFT_LOCK_SHIFTED; - break; + case UNSHIFTED -> mState = MANUAL_SHIFTED; + case AUTOMATIC_SHIFTED -> mState = MANUAL_SHIFTED_FROM_AUTO; + case SHIFT_LOCKED -> mState = SHIFT_LOCK_SHIFTED; } } else { switch (oldState) { - case MANUAL_SHIFTED: - case MANUAL_SHIFTED_FROM_AUTO: - case AUTOMATIC_SHIFTED: - mState = UNSHIFTED; - break; - case SHIFT_LOCK_SHIFTED: - mState = SHIFT_LOCKED; - break; + case MANUAL_SHIFTED, MANUAL_SHIFTED_FROM_AUTO, AUTOMATIC_SHIFTED -> mState = UNSHIFTED; + case SHIFT_LOCK_SHIFTED -> mState = SHIFT_LOCKED; } } if (DEBUG) @@ -57,19 +45,13 @@ public final class AlphabetShiftState { final int oldState = mState; if (newShiftLockState) { switch (oldState) { - case UNSHIFTED: - case MANUAL_SHIFTED: - case MANUAL_SHIFTED_FROM_AUTO: - case AUTOMATIC_SHIFTED: - mState = SHIFT_LOCKED; - break; + case UNSHIFTED, MANUAL_SHIFTED, MANUAL_SHIFTED_FROM_AUTO, AUTOMATIC_SHIFTED -> mState = SHIFT_LOCKED; } } else { mState = UNSHIFTED; } if (DEBUG) - Log.d(TAG, "setShiftLocked(" + newShiftLockState + "): " + toString(oldState) - + " > " + this); + Log.d(TAG, "setShiftLocked(" + newShiftLockState + "): " + toString(oldState) + " > " + this); } public void setAutomaticShifted() { @@ -111,14 +93,14 @@ public final class AlphabetShiftState { } private static String toString(int state) { - switch (state) { - case UNSHIFTED: return "UNSHIFTED"; - case MANUAL_SHIFTED: return "MANUAL_SHIFTED"; - case MANUAL_SHIFTED_FROM_AUTO: return "MANUAL_SHIFTED_FROM_AUTO"; - case AUTOMATIC_SHIFTED: return "AUTOMATIC_SHIFTED"; - case SHIFT_LOCKED: return "SHIFT_LOCKED"; - case SHIFT_LOCK_SHIFTED: return "SHIFT_LOCK_SHIFTED"; - default: return "UNKNOWN"; - } + return switch (state) { + case UNSHIFTED -> "UNSHIFTED"; + case MANUAL_SHIFTED -> "MANUAL_SHIFTED"; + case MANUAL_SHIFTED_FROM_AUTO -> "MANUAL_SHIFTED_FROM_AUTO"; + case AUTOMATIC_SHIFTED -> "AUTOMATIC_SHIFTED"; + case SHIFT_LOCKED -> "SHIFT_LOCKED"; + case SHIFT_LOCK_SHIFTED -> "SHIFT_LOCK_SHIFTED"; + default -> "UNKNOWN"; + }; } } diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeySpecParser.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeySpecParser.java index 7b0e95d4c..2dcd77ebd 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeySpecParser.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeySpecParser.java @@ -23,10 +23,7 @@ import androidx.annotation.Nullable; * - 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}. + * Label and keyOutputText are literal strings. * 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" @@ -236,7 +233,6 @@ public final class KeySpecParser { return KeyboardIconsSet.getIconId(iconName); } - @SuppressWarnings("serial") public static final class KeySpecParserError extends RuntimeException { public KeySpecParserError(final String message) { super(message); diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyStyle.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyStyle.java deleted file mode 100644 index 1a5ba9faf..000000000 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyStyle.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2012 The Android Open Source Project - * modified - * SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only - */ - -package org.dslul.openboard.inputmethod.keyboard.internal; - -import android.content.res.TypedArray; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -public abstract class KeyStyle { - private final KeyboardTextsSet mTextsSet; - - public abstract @Nullable String[] getStringArray(TypedArray a, int index); - public abstract @Nullable String getString(TypedArray a, int index); - public abstract int getInt(TypedArray a, int index, int defaultValue); - public abstract int getFlags(TypedArray a, int index); - - protected KeyStyle(@NonNull final KeyboardTextsSet textsSet) { - mTextsSet = textsSet; - } - - @Nullable - protected String parseString(final TypedArray a, final int index) { - if (a.hasValue(index)) { - return mTextsSet.resolveTextReference(a.getString(index)); - } - return null; - } - - @Nullable - protected String[] parseStringArray(final TypedArray a, final int index) { - if (a.hasValue(index)) { - final String text = mTextsSet.resolveTextReference(a.getString(index)); - return MoreKeySpec.splitKeySpecs(text); - } - return null; - } -} diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyStylesSet.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyStylesSet.java deleted file mode 100644 index b8b416529..000000000 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyStylesSet.java +++ /dev/null @@ -1,220 +0,0 @@ -/* - * Copyright (C) 2010 The Android Open Source Project - * modified - * SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only - */ - -package org.dslul.openboard.inputmethod.keyboard.internal; - -import android.content.res.TypedArray; -import org.dslul.openboard.inputmethod.latin.utils.Log; -import android.util.SparseArray; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import org.dslul.openboard.inputmethod.keyboard.internal.keyboard_parser.XmlKeyboardParser; -import org.dslul.openboard.inputmethod.latin.R; -import org.dslul.openboard.inputmethod.latin.utils.XmlParseUtils; -import org.xmlpull.v1.XmlPullParser; -import org.xmlpull.v1.XmlPullParserException; - -import java.util.Arrays; -import java.util.HashMap; - -public final class KeyStylesSet { - private static final String TAG = KeyStylesSet.class.getSimpleName(); - private static final boolean DEBUG = false; - - @NonNull - private final HashMap mStyles = new HashMap<>(); - - @NonNull - private final KeyboardTextsSet mTextsSet; - @NonNull - private final KeyStyle mEmptyKeyStyle; - @NonNull - private static final String EMPTY_STYLE_NAME = ""; - - public KeyStylesSet(@NonNull final KeyboardTextsSet textsSet) { - mTextsSet = textsSet; - mEmptyKeyStyle = new EmptyKeyStyle(textsSet); - mStyles.put(EMPTY_STYLE_NAME, mEmptyKeyStyle); - } - - private static final class EmptyKeyStyle extends KeyStyle { - EmptyKeyStyle(@NonNull final KeyboardTextsSet textsSet) { - super(textsSet); - } - - @Override - @Nullable - public String[] getStringArray(final TypedArray a, final int index) { - return parseStringArray(a, index); - } - - @Override - @Nullable - public String getString(final TypedArray a, final int index) { - return parseString(a, index); - } - - @Override - public int getInt(final TypedArray a, final int index, final int defaultValue) { - return a.getInt(index, defaultValue); - } - - @Override - public int getFlags(final TypedArray a, final int index) { - return a.getInt(index, 0); - } - } - - private static final class DeclaredKeyStyle extends KeyStyle { - private final HashMap mStyles; - private final String mParentStyleName; - private final SparseArray mStyleAttributes = new SparseArray<>(); - - public DeclaredKeyStyle(@NonNull final String parentStyleName, - @NonNull final KeyboardTextsSet textsSet, - @NonNull final HashMap styles) { - super(textsSet); - mParentStyleName = parentStyleName; - mStyles = styles; - } - - @Override - @Nullable - public String[] getStringArray(final TypedArray a, final int index) { - if (a.hasValue(index)) { - return parseStringArray(a, index); - } - final Object value = mStyleAttributes.get(index); - if (value != null) { - final String[] array = (String[])value; - return Arrays.copyOf(array, array.length); - } - final KeyStyle parentStyle = mStyles.get(mParentStyleName); - return parentStyle.getStringArray(a, index); - } - - @Override - @Nullable - public String getString(final TypedArray a, final int index) { - if (a.hasValue(index)) { - return parseString(a, index); - } - final Object value = mStyleAttributes.get(index); - if (value != null) { - return (String)value; - } - final KeyStyle parentStyle = mStyles.get(mParentStyleName); - return parentStyle.getString(a, index); - } - - @Override - public int getInt(final TypedArray a, final int index, final int defaultValue) { - if (a.hasValue(index)) { - return a.getInt(index, defaultValue); - } - final Object value = mStyleAttributes.get(index); - if (value != null) { - return (Integer)value; - } - final KeyStyle parentStyle = mStyles.get(mParentStyleName); - return parentStyle.getInt(a, index, defaultValue); - } - - @Override - public int getFlags(final TypedArray a, final int index) { - final int parentFlags = mStyles.get(mParentStyleName).getFlags(a, index); - final Integer value = (Integer)mStyleAttributes.get(index); - final int styleFlags = (value != null) ? value : 0; - final int flags = a.getInt(index, 0); - return flags | styleFlags | parentFlags; - } - - public void readKeyAttributes(final TypedArray keyAttr) { - // TODO: Currently not all Key attributes can be declared as style. - readString(keyAttr, R.styleable.Keyboard_Key_altCode); - readString(keyAttr, R.styleable.Keyboard_Key_keySpec); - readString(keyAttr, R.styleable.Keyboard_Key_keyHintLabel); - readStringArray(keyAttr, R.styleable.Keyboard_Key_moreKeys); - readStringArray(keyAttr, R.styleable.Keyboard_Key_additionalMoreKeys); - readFlags(keyAttr, R.styleable.Keyboard_Key_keyLabelFlags); - readString(keyAttr, R.styleable.Keyboard_Key_keyIconDisabled); - readInt(keyAttr, R.styleable.Keyboard_Key_maxMoreKeysColumn); - readInt(keyAttr, R.styleable.Keyboard_Key_backgroundType); - readFlags(keyAttr, R.styleable.Keyboard_Key_keyActionFlags); - } - - private void readString(final TypedArray a, final int index) { - if (a.hasValue(index)) { - mStyleAttributes.put(index, parseString(a, index)); - } - } - - private void readInt(final TypedArray a, final int index) { - if (a.hasValue(index)) { - mStyleAttributes.put(index, a.getInt(index, 0)); - } - } - - private void readFlags(final TypedArray a, final int index) { - if (a.hasValue(index)) { - final Integer value = (Integer)mStyleAttributes.get(index); - final int styleFlags = value != null ? value : 0; - mStyleAttributes.put(index, a.getInt(index, 0) | styleFlags); - } - } - - private void readStringArray(final TypedArray a, final int index) { - if (a.hasValue(index)) { - mStyleAttributes.put(index, parseStringArray(a, index)); - } - } - } - - public void parseKeyStyleAttributes(final TypedArray keyStyleAttr, final TypedArray keyAttrs, - final XmlPullParser parser) throws XmlPullParserException { - final String styleName = keyStyleAttr.getString(R.styleable.Keyboard_KeyStyle_styleName); - if (styleName == null) { - throw new XmlParseUtils.ParseException( - XmlKeyboardParser.TAG_KEY_STYLE + " has no styleName attribute", parser); - } - if (DEBUG) { - Log.d(TAG, String.format("<%s styleName=%s />", - XmlKeyboardParser.TAG_KEY_STYLE, styleName)); - if (mStyles.containsKey(styleName)) { - Log.d(TAG, XmlKeyboardParser.TAG_KEY_STYLE + " " + styleName + " is overridden at " - + parser.getPositionDescription()); - } - } - - final String parentStyleInAttr = keyStyleAttr.getString( - R.styleable.Keyboard_KeyStyle_parentStyle); - if (parentStyleInAttr != null && !mStyles.containsKey(parentStyleInAttr)) { - throw new XmlParseUtils.ParseException( - "Unknown parentStyle " + parentStyleInAttr, parser); - } - final String parentStyleName = (parentStyleInAttr == null) ? EMPTY_STYLE_NAME - : parentStyleInAttr; - final DeclaredKeyStyle style = new DeclaredKeyStyle(parentStyleName, mTextsSet, mStyles); - style.readKeyAttributes(keyAttrs); - mStyles.put(styleName, style); - } - - @NonNull - public KeyStyle getKeyStyle(final TypedArray keyAttr, final XmlPullParser parser) - throws XmlParseUtils.ParseException { - final String styleName = keyAttr.getString(R.styleable.Keyboard_Key_keyStyle); - if (styleName == null) { - return mEmptyKeyStyle; - } - final KeyStyle style = mStyles.get(styleName); - if (style == null) { - throw new XmlParseUtils.ParseException("Unknown key style: " + styleName, parser); - } - return style; - } -} diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyVisualAttributes.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyVisualAttributes.java index 213a763e0..30491f44a 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyVisualAttributes.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyVisualAttributes.java @@ -47,6 +47,8 @@ public final class KeyVisualAttributes { public final float mLabelOffCenterRatio; public final float mHintLabelOffCenterRatio; + // todo: replace the remaining colors with something from new colors instead of theme + // but first check which colors are actually used private static final int[] VISUAL_ATTRIBUTE_IDS = { R.styleable.Keyboard_Key_keyTypeface, R.styleable.Keyboard_Key_keyLetterSize, @@ -56,15 +58,10 @@ public final class KeyVisualAttributes { R.styleable.Keyboard_Key_keyShiftedLetterHintRatio, R.styleable.Keyboard_Key_keyHintLabelRatio, R.styleable.Keyboard_Key_keyPreviewTextRatio, - R.styleable.Keyboard_Key_keyTextColor, // todo: is this used anywhere R.styleable.Keyboard_Key_keyTextInactivatedColor, R.styleable.Keyboard_Key_keyTextShadowColor, - R.styleable.Keyboard_Key_functionalTextColor, // todo: is this used anywhere - R.styleable.Keyboard_Key_keyHintLetterColor, // todo: is this used anywhere - R.styleable.Keyboard_Key_keyHintLabelColor, // todo: is this used anywhere R.styleable.Keyboard_Key_keyShiftedLetterHintInactivatedColor, R.styleable.Keyboard_Key_keyShiftedLetterHintActivatedColor, - R.styleable.Keyboard_Key_keyPreviewTextColor, // todo: is this used anywhere R.styleable.Keyboard_Key_keyHintLabelVerticalAdjustment, R.styleable.Keyboard_Key_keyLabelOffCenterRatio, R.styleable.Keyboard_Key_keyHintLabelOffCenterRatio diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardBuilder.kt b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardBuilder.kt index b0d57db17..4c37bb1b8 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardBuilder.kt +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardBuilder.kt @@ -9,7 +9,6 @@ import android.content.Context import android.content.res.Resources import org.dslul.openboard.inputmethod.latin.utils.Log import android.util.Xml -import android.widget.Toast import androidx.annotation.XmlRes import org.dslul.openboard.inputmethod.annotations.UsedForTesting import org.dslul.openboard.inputmethod.keyboard.Key @@ -18,17 +17,13 @@ import org.dslul.openboard.inputmethod.keyboard.Keyboard import org.dslul.openboard.inputmethod.keyboard.KeyboardId import org.dslul.openboard.inputmethod.keyboard.internal.keyboard_parser.EmojiParser import org.dslul.openboard.inputmethod.keyboard.internal.keyboard_parser.KeyboardParser -import org.dslul.openboard.inputmethod.keyboard.internal.keyboard_parser.XmlKeyboardParser import org.dslul.openboard.inputmethod.keyboard.internal.keyboard_parser.addLocaleKeyTextsToParams -import org.dslul.openboard.inputmethod.latin.BuildConfig import org.dslul.openboard.inputmethod.latin.R import org.dslul.openboard.inputmethod.latin.common.Constants import org.dslul.openboard.inputmethod.latin.define.DebugFlags import org.dslul.openboard.inputmethod.latin.settings.Settings import org.dslul.openboard.inputmethod.latin.utils.sumOf import org.xmlpull.v1.XmlPullParser -import org.xmlpull.v1.XmlPullParserException -import java.io.IOException // TODO: Write unit tests for this class. open class KeyboardBuilder(protected val mContext: Context, @JvmField val mParams: KP) { @@ -52,25 +47,11 @@ open class KeyboardBuilder(protected val mContext: Context, mParams.mAllowRedundantMoreKeys = enabled } - fun loadFromAssets(id: KeyboardId): KeyboardBuilder? { - mParams.mId = id - addLocaleKeyTextsToParams(mContext, mParams, Settings.getInstance().current.mShowMoreKeys) - try { - keysInRows = KeyboardParser.parseFromAssets(mParams, mContext) ?: return null - } catch (e: Throwable) { - if (DebugFlags.DEBUG_ENABLED || BuildConfig.DEBUG) - Toast.makeText(mContext, "error parsing keyboard: ${e.message}", Toast.LENGTH_LONG).show() - Log.e(TAG, "loading $id from assets failed", e) - return null - } - determineAbsoluteValues() - return this - // todo: further plan - // next release, and possibly don't continue working here for a while (should allow finding more regressions) - // remove the old parser - // then finally the spanish/german/swiss/nordic layouts can be removed and replaced by some hasExtraKeys parameter - // also the eo check could then be removed + // after the old parser is removed + // finally the spanish/german/swiss/nordic layouts can be removed and replaced by some hasExtraKeys parameter + // still they should keep their name though... or switch to sth like "default"? + // also the "eo" check could then be removed // and maybe the language -> layout thing could be moved to assets? and maybe even here the extra keys could be defined... // should be either both in method.xml, or both in assets (actually method might be more suitable) // go through a lot of todos in parsers, key, keyboardlayoutset, ... as a lot of things should only change after old parser is removed @@ -136,38 +117,21 @@ open class KeyboardBuilder(protected val mContext: Context, // maybe remove some of the flags? or keep supporting them? // for pcqwerty: hasShiftedLetterHint -> hasShiftedLetterHint|shiftedLetterActivated when shift is enabled, need to consider if the flag is used // actually period key also has shifted letter hint - } - fun loadFromXml(xmlId: Int, id: KeyboardId): KeyboardBuilder { - if (Settings.getInstance().current.mUseNewKeyboardParsing) { - if (id.isEmojiKeyboard) { - mParams.mId = id - readAttributes(R.xml.kbd_emoji_category1) // all the same anyway, gridRows are ignored - keysInRows = EmojiParser(mParams, mContext).parse(Settings.getInstance().current.mIsSplitKeyboardEnabled) - return this - } - if (loadFromAssets(id) != null) { - return this - } - if (DebugFlags.DEBUG_ENABLED) { - Log.e(TAG, "falling back to old parser for $id") - Toast.makeText(mContext, "using old parser for $id", Toast.LENGTH_LONG).show() - // todo throw error? - } - } + fun load(xmlId: Int, id: KeyboardId): KeyboardBuilder { mParams.mId = id - // loading a keyboard should set default params like mParams.readAttributes(mContext, attrs); - // attrs may be null, then default values are used (looks good for "normal" keyboards) - try { - XmlKeyboardParser(xmlId, mParams, mContext).use { keyboardParser -> - keysInRows = keyboardParser.parseKeyboard() + if (id.isEmojiKeyboard) { + readAttributes(R.xml.kbd_emoji_category1) // all the same anyway, gridRows are ignored + keysInRows = EmojiParser(mParams, mContext).parse() + } else { + try { + addLocaleKeyTextsToParams(mContext, mParams, Settings.getInstance().current.mShowMoreKeys) + keysInRows = KeyboardParser.parseFromAssets(mParams, mContext) + determineAbsoluteValues() + } catch (e: Exception) { + Log.e(TAG, "error parsing layout $id ${id.mElementId}", e) + throw e } - } catch (e: XmlPullParserException) { - Log.w(TAG, "keyboard XML parse error", e) - throw IllegalArgumentException(e.message, e) - } catch (e: IOException) { - Log.w(TAG, "keyboard XML parse error", e) - throw RuntimeException(e.message, e) } return this } @@ -178,7 +142,7 @@ open class KeyboardBuilder(protected val mContext: Context, while (parser.eventType != XmlPullParser.END_DOCUMENT) { val event = parser.next() if (event == XmlPullParser.START_TAG) { - val tag = parser.name; + val tag = parser.name if ("Keyboard" == tag) { mParams.readAttributes(mContext, Xml.asAttributeSet(parser)) return @@ -198,7 +162,7 @@ open class KeyboardBuilder(protected val mContext: Context, } open fun build(): Keyboard { - if (Settings.getInstance().current.mIsSplitKeyboardEnabled + if (mParams.mId.mIsSplitLayout && mParams.mId.mElementId in KeyboardId.ELEMENT_ALPHABET..KeyboardId.ELEMENT_SYMBOLS_SHIFTED) { addSplit() } diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardParams.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardParams.java index cc8821f22..e9a86fe76 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardParams.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardParams.java @@ -79,10 +79,6 @@ public class KeyboardParams { public final ArrayList mAltCodeKeysWhileTyping = new ArrayList<>(); @NonNull public final KeyboardIconsSet mIconsSet = new KeyboardIconsSet(); - @NonNull - public final KeyboardTextsSet mTextsSet = new KeyboardTextsSet(); - @NonNull - public final KeyStylesSet mKeyStyles = new KeyStylesSet(mTextsSet); @NonNull // todo: not good, this only works because params are currently always created for the active subtype public final List mSecondaryLocales = Settings.getInstance().getCurrent().mSecondaryLocales; @@ -268,7 +264,6 @@ public class KeyboardParams { mThemeId = keyboardAttr.getInt(R.styleable.Keyboard_themeId, 0); mIconsSet.loadIcons(keyboardAttr); - mTextsSet.setLocale(mId.getLocale(), context); final int resourceId = keyboardAttr.getResourceId(R.styleable.Keyboard_touchPositionCorrectionData, 0); if (resourceId != 0) { diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardTextsSet.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardTextsSet.java deleted file mode 100644 index b40f1f29a..000000000 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardTextsSet.java +++ /dev/null @@ -1,196 +0,0 @@ -/* - * Copyright (C) 2012 The Android Open Source Project - * modified - * SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only - */ - -package org.dslul.openboard.inputmethod.keyboard.internal; - -import android.content.Context; -import android.content.res.Resources; -import android.text.TextUtils; -import org.dslul.openboard.inputmethod.latin.utils.Log; - -import org.dslul.openboard.inputmethod.annotations.UsedForTesting; -import org.dslul.openboard.inputmethod.latin.RichInputMethodManager; -import org.dslul.openboard.inputmethod.latin.common.Constants; -import org.dslul.openboard.inputmethod.latin.settings.Settings; -import org.dslul.openboard.inputmethod.latin.utils.RunInLocale; -import org.dslul.openboard.inputmethod.latin.utils.SubtypeLocaleUtils; - -import java.util.ArrayList; -import java.util.LinkedHashSet; -import java.util.Locale; - -// TODO: Make this an immutable class. -public final class KeyboardTextsSet { - public static final String PREFIX_TEXT = "!text/"; - private static final String PREFIX_RESOURCE = "!string/"; - public static final String SWITCH_TO_ALPHA_KEY_LABEL = "keylabel_to_alpha"; - - private static final char BACKSLASH = Constants.CODE_BACKSLASH; - private static final int MAX_REFERENCE_INDIRECTION = 10; - - private Resources mResources; - private Locale mResourceLocale; - private String mResourcePackageName; - private final ArrayList mTextsTables = new ArrayList<>(); - - public void setLocale(final Locale locale, final Context context) { - final Resources res = context.getResources(); - // Null means the current system locale. - final String resourcePackageName = res.getResourcePackageName( - context.getApplicationInfo().labelRes); - setLocale(locale, res, resourcePackageName); - } - - @UsedForTesting - public void setLocale(final Locale locale, final Resources res, - final String resourcePackageName) { - mResources = res; - // Null means the current system locale. - mResourceLocale = SubtypeLocaleUtils.NO_LANGUAGE.equals(locale.toString()) ? null : locale; - mResourcePackageName = resourcePackageName; - mTextsTables.clear(); - if (Settings.getInstance().getCurrent().mShowMoreKeys > 0) { - mTextsTables.add(KeyboardTextsTable.getTextsTable(new Locale(SubtypeLocaleUtils.NO_LANGUAGE))); - return; - } - mTextsTables.add(KeyboardTextsTable.getTextsTable(locale)); - if (locale != RichInputMethodManager.getInstance().getCurrentSubtypeLocale()) - return; // emojiCategory calls this several times with "zz" locale - for (final Locale secondaryLocale : Settings.getInstance().getCurrent().mSecondaryLocales) { - mTextsTables.add(KeyboardTextsTable.getTextsTable(secondaryLocale)); - } - } - - private String getTextInternal(final String name, final int localeIndex) { - return KeyboardTextsTable.getText(name, mTextsTables.get(localeIndex)); - } - - public String getText(final String name) { - Log.w(getClass().getSimpleName(), "still used for resolving "+name); - return getTextInternal(name, 0); // only used for emoji and clipboard keyboards - } - - private static int searchTextNameEnd(final String text, final int start) { - final int size = text.length(); - for (int pos = start; pos < size; pos++) { - final char c = text.charAt(pos); - // Label name should be consisted of [a-zA-Z_0-9]. - if ((c >= 'a' && c <= 'z') || c == '_' || (c >= '0' && c <= '9')) { - continue; - } - return pos; - } - return size; - } - - // TODO: Resolve text reference when creating {@link KeyboardTextsTable} class. - // todo: this style of merging for different locales it not good, but how to do it better? - public String resolveTextReference(final String rawText) { - if (TextUtils.isEmpty(rawText)) { - return null; - } - if (mTextsTables.size() == 1 || !rawText.startsWith("!text/more")) { - // no need for locale-specific stuff, as they are used for moreKeys only - String text = resolveTextReferenceInternal(rawText, 0); - if (text.isEmpty()) - return null; - return text; - } - // get for all languages and merge if necessary - // this is considerably slower than the simple version above, but still for all ~60 calls - // when creation a keyboard, that's only a few ms on S4 mini -> should be acceptable - final ArrayList texts = new ArrayList<>(mTextsTables.size()); - for (int i = 0; i < mTextsTables.size(); i++) { - final String text = resolveTextReferenceInternal(rawText, i); - if (text.length() == 0) - continue; - texts.add(text); - } - if (texts.isEmpty()) - return null; - if (texts.size() == 1) - return texts.get(0); - final LinkedHashSet moreKeys = new LinkedHashSet<>(); - for (final String text : texts) { - // no thanks linter, we don't want to create an intermediate list - for (final String c : text.split(",")) { - moreKeys.add(c); - } - } - return String.join(",", moreKeys); - } - - public String resolveTextReferenceInternal(final String rawText, final int localeIndex) { - int level = 0; - String text = rawText; - StringBuilder sb; - final int prefixLength = PREFIX_TEXT.length(); - do { - level++; - if (level >= MAX_REFERENCE_INDIRECTION) { - throw new RuntimeException("Too many " + PREFIX_TEXT + " or " + PREFIX_RESOURCE + - " reference indirection: " + text); - } - - final int size = text.length(); - if (size < prefixLength) { - break; - } - - sb = null; - for (int pos = 0; pos < size; pos++) { - final char c = text.charAt(pos); - if (text.startsWith(PREFIX_TEXT, pos)) { - if (sb == null) { - sb = new StringBuilder(text.substring(0, pos)); - } - pos = expandReference(text, pos, PREFIX_TEXT, sb, localeIndex); - } else if (text.startsWith(PREFIX_RESOURCE, pos)) { - if (sb == null) { - sb = new StringBuilder(text.substring(0, pos)); - } - pos = expandReference(text, pos, PREFIX_RESOURCE, sb, localeIndex); - } else if (c == BACKSLASH) { - if (sb != null) { - // Append both escape character and escaped character. - sb.append(text.substring(pos, Math.min(pos + 2, size))); - } - pos++; - } else if (sb != null) { - sb.append(c); - } - } - - if (sb != null) { - text = sb.toString(); - } - } while (sb != null); - return text; - } - - private int expandReference(final String text, final int pos, final String prefix, - final StringBuilder sb, final int localeIndex) { - final int prefixLength = prefix.length(); - final int end = searchTextNameEnd(text, pos + prefixLength); - final String name = text.substring(pos + prefixLength, end); - if (prefix.equals(PREFIX_TEXT)) { - sb.append(getTextInternal(name, localeIndex)); - } else { // PREFIX_RESOURCE - final String resourcePackageName = mResourcePackageName; - final RunInLocale getTextJob = new RunInLocale() { - @Override - protected String job(final Resources res) { - // this is for identifiers in strings-action-keys.xml (100% sure nothing else?) - final int resId = res.getIdentifier(name, "string", resourcePackageName); - return res.getString(resId); - } - }; - // no need to do it in locale, it's just labels - sb.append(getTextJob.runInLocale(mResources, mResourceLocale)); - } - return end - 1; - } -} diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardTextsTable.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardTextsTable.java deleted file mode 100644 index a954d29eb..000000000 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardTextsTable.java +++ /dev/null @@ -1,4480 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * modified - * SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only - */ - -package org.dslul.openboard.inputmethod.keyboard.internal; - -import java.util.HashMap; -import java.util.Locale; - -/** - * !!!!! DO NOT EDIT THIS FILE !!!!! - * - * This file is generated by tools/make-keyboard-text. The base template file is - * tools/make-keyboard-text/src/main/resources/org/dslul/openboard/inputmethod/keyboard/ - * internal/KeyboardTextsTable.tmpl - * - * This file must be updated when any text resources in keyboard layout files have been changed. - * These text resources are referred as "!text/" in keyboard XML definitions, - * and should be defined in - * tools/make-keyboard-text/src/main/resources/values-/donottranslate-more-keys.xml - * - * To update this file, please run the following commands. - * $ gradle :tools:make-keyboard-text:makeText - * - * The updated source file will be generated to the following path (this file). - * app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardTextsTable.java - * - */ -public final class KeyboardTextsTable { - // Name to index map. - private static final HashMap sNameToIndexesMap = new HashMap<>(); - // Locale to texts table map. - private static final HashMap sLocaleToTextsTableMap = new HashMap<>(); - // TODO: Remove this variable after debugging. - // Texts table to locale maps. - private static final HashMap sTextsTableToLocaleMap = new HashMap<>(); - - public static String getText(final String name, final String[] textsTable) { - final Integer indexObj = sNameToIndexesMap.get(name); - if (indexObj == null) { - throw new RuntimeException("Unknown text name=" + name + " locale=" - + sTextsTableToLocaleMap.get(textsTable)); - } - final int index = indexObj; - final String text = (index < textsTable.length) ? textsTable[index] : null; - if (text != null) { - return text; - } - // Validity check. - if (index < TEXTS_DEFAULT.length) { - return TEXTS_DEFAULT[index]; - } - // Throw exception for debugging purpose. - throw new RuntimeException("Illegal index=" + index + " for name=" + name - + " locale=" + sTextsTableToLocaleMap.get(textsTable)); - } - - public static String[] getTextsTable(final Locale locale) { - final String localeKey = locale.toString(); - if (sLocaleToTextsTableMap.containsKey(localeKey)) { - return sLocaleToTextsTableMap.get(localeKey); - } - final String languageKey = locale.getLanguage(); - if (sLocaleToTextsTableMap.containsKey(languageKey)) { - return sLocaleToTextsTableMap.get(languageKey); - } - return TEXTS_DEFAULT; - } - - private static final String[] NAMES = { - // /* index:histogram */ "name", - /* 0:34 */ "morekeys_a", - /* 1:34 */ "morekeys_o", - /* 2:33 */ "morekeys_e", - /* 3:33 */ "keylabel_to_alpha", - /* 4:32 */ "morekeys_u", - /* 5:30 */ "morekeys_i", - /* 6:26 */ "morekeys_n", - /* 7:25 */ "morekeys_c", - /* 8:24 */ "double_quotes", - /* 9:23 */ "morekeys_s", - /* 10:23 */ "single_quotes", - /* 11:20 */ "keyspec_currency", - /* 12:17 */ "morekeys_y", - /* 13:16 */ "morekeys_z", - /* 14:14 */ "morekeys_d", - /* 15:10 */ "morekeys_t", - /* 16:10 */ "morekeys_l", - /* 17:10 */ "morekeys_g", - /* 18:10 */ "single_angle_quotes", - /* 19:10 */ "double_angle_quotes", - /* 20: 8 */ "morekeys_r", - /* 21: 7 */ "keylabel_to_symbol", - /* 22: 7 */ "additional_morekeys_symbols_1", - /* 23: 7 */ "additional_morekeys_symbols_2", - /* 24: 7 */ "additional_morekeys_symbols_3", - /* 25: 7 */ "additional_morekeys_symbols_4", - /* 26: 7 */ "additional_morekeys_symbols_5", - /* 27: 7 */ "additional_morekeys_symbols_6", - /* 28: 7 */ "additional_morekeys_symbols_7", - /* 29: 7 */ "additional_morekeys_symbols_8", - /* 30: 7 */ "additional_morekeys_symbols_9", - /* 31: 7 */ "additional_morekeys_symbols_0", - /* 32: 6 */ "morekeys_k", - /* 33: 6 */ "morekeys_cyrillic_ie", - /* 34: 6 */ "keyspec_symbols_1", - /* 35: 6 */ "keyspec_symbols_2", - /* 36: 6 */ "keyspec_symbols_3", - /* 37: 6 */ "keyspec_symbols_4", - /* 38: 6 */ "keyspec_symbols_5", - /* 39: 6 */ "keyspec_symbols_6", - /* 40: 6 */ "keyspec_symbols_7", - /* 41: 6 */ "keyspec_symbols_8", - /* 42: 6 */ "keyspec_symbols_9", - /* 43: 6 */ "keyspec_symbols_0", - /* 44: 6 */ "keyspec_period", - /* 45: 6 */ "morekeys_period", - /* 46: 6 */ "morekeys_tablet_period", - /* 47: 5 */ "keyspec_nordic_row1_11", - /* 48: 5 */ "keyspec_nordic_row2_10", - /* 49: 5 */ "keyspec_nordic_row2_11", - /* 50: 5 */ "morekeys_nordic_row2_10", - /* 51: 5 */ "keyspec_east_slavic_row1_9", - /* 52: 5 */ "keyspec_east_slavic_row2_2", - /* 53: 5 */ "keyspec_east_slavic_row2_11", - /* 54: 5 */ "keyspec_east_slavic_row3_5", - /* 55: 5 */ "morekeys_cyrillic_soft_sign", - /* 56: 5 */ "keyspec_tablet_period", - /* 57: 4 */ "morekeys_nordic_row2_11", - /* 58: 4 */ "keyspec_swiss_row1_11", - /* 59: 4 */ "keyspec_swiss_row2_10", - /* 60: 4 */ "keyspec_swiss_row2_11", - /* 61: 4 */ "morekeys_swiss_row1_11", - /* 62: 4 */ "morekeys_swiss_row2_10", - /* 63: 4 */ "morekeys_swiss_row2_11", - /* 64: 4 */ "morekeys_punctuation", - /* 65: 4 */ "morekeys_star", - /* 66: 4 */ "keyspec_left_parenthesis", - /* 67: 4 */ "keyspec_right_parenthesis", - /* 68: 4 */ "keyspec_left_square_bracket", - /* 69: 4 */ "keyspec_right_square_bracket", - /* 70: 4 */ "keyspec_left_curly_bracket", - /* 71: 4 */ "keyspec_right_curly_bracket", - /* 72: 4 */ "keyspec_less_than", - /* 73: 4 */ "keyspec_greater_than", - /* 74: 4 */ "keyspec_less_than_equal", - /* 75: 4 */ "keyspec_greater_than_equal", - /* 76: 4 */ "keyspec_left_double_angle_quote", - /* 77: 4 */ "keyspec_right_double_angle_quote", - /* 78: 4 */ "keyspec_left_single_angle_quote", - /* 79: 4 */ "keyspec_right_single_angle_quote", - /* 80: 4 */ "keyspec_comma", - /* 81: 4 */ "keyspec_tablet_comma", - /* 82: 3 */ "morekeys_left_parenthesis", - /* 83: 3 */ "morekeys_right_parenthesis", - /* 84: 3 */ "morekeys_tablet_comma", - /* 85: 3 */ "keyhintlabel_period", - /* 86: 3 */ "keyspec_symbols_question", - /* 87: 3 */ "keyspec_symbols_semicolon", - /* 88: 3 */ "keyspec_symbols_percent", - /* 89: 3 */ "morekeys_question", - /* 90: 3 */ "morekeys_symbols_percent", - /* 91: 2 */ "morekeys_h", - /* 92: 2 */ "morekeys_w", - /* 93: 2 */ "morekeys_east_slavic_row2_2", - /* 94: 2 */ "morekeys_cyrillic_u", - /* 95: 2 */ "morekeys_cyrillic_en", - /* 96: 2 */ "morekeys_cyrillic_ghe", - /* 97: 2 */ "morekeys_cyrillic_o", - /* 98: 2 */ "morekeys_cyrillic_i", - /* 99: 2 */ "keyspec_south_slavic_row1_6", - /* 100: 2 */ "keyspec_south_slavic_row2_11", - /* 101: 2 */ "keyspec_south_slavic_row3_1", - /* 102: 2 */ "keyspec_south_slavic_row3_8", - /* 103: 2 */ "morekeys_tablet_punctuation", - /* 104: 2 */ "keyspec_spanish_row2_10", - /* 105: 2 */ "morekeys_bullet", - /* 106: 2 */ "morekeys_less_than", - /* 107: 2 */ "morekeys_greater_than", - /* 108: 2 */ "morekeys_arabic_diacritics", - /* 109: 2 */ "keyhintlabel_tablet_comma", - /* 110: 2 */ "keyhintlabel_tablet_period", - /* 111: 2 */ "morekeys_symbols_semicolon", - /* 112: 2 */ "label_go_key", - /* 113: 2 */ "label_send_key", - /* 114: 2 */ "label_next_key", - /* 115: 2 */ "label_done_key", - /* 116: 2 */ "label_search_key", - /* 117: 2 */ "label_previous_key", - /* 118: 2 */ "label_pause_key", - /* 119: 2 */ "label_wait_key", - /* 120: 1 */ "morekeys_v", - /* 121: 1 */ "morekeys_j", - /* 122: 1 */ "morekeys_q", - /* 123: 1 */ "morekeys_x", - /* 124: 1 */ "keyspec_q", - /* 125: 1 */ "keyspec_w", - /* 126: 1 */ "keyspec_y", - /* 127: 1 */ "keyspec_x", - /* 128: 1 */ "morekeys_east_slavic_row2_11", - /* 129: 1 */ "morekeys_cyrillic_ka", - /* 130: 1 */ "morekeys_cyrillic_a", - /* 131: 1 */ "morekeys_currency_dollar", - /* 132: 1 */ "morekeys_plus", - /* 133: 1 */ "morekeys_exclamation", - /* 134: 0 */ "morekeys_currency_generic", - /* 135: 0 */ "morekeys_symbols_1", - /* 136: 0 */ "morekeys_symbols_2", - /* 137: 0 */ "morekeys_symbols_3", - /* 138: 0 */ "morekeys_symbols_4", - /* 139: 0 */ "morekeys_symbols_5", - /* 140: 0 */ "morekeys_symbols_6", - /* 141: 0 */ "morekeys_symbols_7", - /* 142: 0 */ "morekeys_symbols_8", - /* 143: 0 */ "morekeys_symbols_9", - /* 144: 0 */ "morekeys_symbols_0", - /* 145: 0 */ "morekeys_am_pm", - /* 146: 0 */ "keyspec_settings", - /* 147: 0 */ "keyspec_shortcut", - /* 148: 0 */ "keyspec_action_next", - /* 149: 0 */ "keyspec_action_previous", - /* 150: 0 */ "keylabel_to_more_symbol", - /* 151: 0 */ "keylabel_tablet_to_more_symbol", - /* 152: 0 */ "keylabel_to_phone_numeric", - /* 153: 0 */ "keylabel_to_phone_symbols", - /* 154: 0 */ "keylabel_time_am", - /* 155: 0 */ "keylabel_time_pm", - /* 156: 0 */ "keyspec_popular_domain", - /* 157: 0 */ "morekeys_popular_domain", - /* 158: 0 */ "keyspecs_left_parenthesis_more_keys", - /* 159: 0 */ "keyspecs_right_parenthesis_more_keys", - /* 160: 0 */ "single_laqm_raqm", - /* 161: 0 */ "single_raqm_laqm", - /* 162: 0 */ "double_laqm_raqm", - /* 163: 0 */ "double_raqm_laqm", - /* 164: 0 */ "single_lqm_rqm", - /* 165: 0 */ "single_9qm_lqm", - /* 166: 0 */ "single_9qm_rqm", - /* 167: 0 */ "single_rqm_9qm", - /* 168: 0 */ "double_lqm_rqm", - /* 169: 0 */ "double_9qm_lqm", - /* 170: 0 */ "double_9qm_rqm", - /* 171: 0 */ "double_rqm_9qm", - /* 172: 0 */ "morekeys_single_quote", - /* 173: 0 */ "morekeys_double_quote", - /* 174: 0 */ "morekeys_tablet_double_quote", - /* 175: 0 */ "keyspec_emoji_action_key", - /* 176: 0 */ "keyspec_emoji_normal_key", - /* 177: 0 */ "keyspec_clipboard_action_key", - /* 178: 0 */ "keyspec_clipboard_normal_key", - /* 179: 0 */ "keyspec_start_onehanded_mode", - /* 180: 0 */ "keyspec_language_switch", - /* 181: 0 */ "keyspec_numpad_key", - }; - - private static final String EMPTY = ""; - - /* Default texts */ - private static final String[] TEXTS_DEFAULT = { - /* morekeys_a ~ */ - EMPTY, EMPTY, EMPTY, - /* ~ morekeys_e */ - // Label for "switch to alphabetic" key. - /* keylabel_to_alpha */ "ABC", - /* morekeys_u ~ */ - EMPTY, EMPTY, EMPTY, EMPTY, - /* ~ morekeys_c */ - /* double_quotes */ "!text/double_lqm_rqm", - /* morekeys_s */ EMPTY, - /* single_quotes */ "!text/single_lqm_rqm", - /* keyspec_currency */ "$", - /* morekeys_y ~ */ - EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, - /* ~ morekeys_g */ - /* single_angle_quotes */ "!text/single_laqm_raqm", - /* double_angle_quotes */ "!text/double_laqm_raqm", - /* morekeys_r */ EMPTY, - // Label for "switch to symbols" key. - /* keylabel_to_symbol */ "?123", - /* additional_morekeys_symbols_1 ~ */ - EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, - /* ~ morekeys_cyrillic_ie */ - /* keyspec_symbols_1 */ "1", - /* keyspec_symbols_2 */ "2", - /* keyspec_symbols_3 */ "3", - /* keyspec_symbols_4 */ "4", - /* keyspec_symbols_5 */ "5", - /* keyspec_symbols_6 */ "6", - /* keyspec_symbols_7 */ "7", - /* keyspec_symbols_8 */ "8", - /* keyspec_symbols_9 */ "9", - /* keyspec_symbols_0 */ "0", - // Period key - /* keyspec_period */ ".", - /* morekeys_period */ "!text/morekeys_punctuation", - /* morekeys_tablet_period */ "!text/morekeys_tablet_punctuation", - /* keyspec_nordic_row1_11 ~ */ - EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, - /* ~ morekeys_cyrillic_soft_sign */ - /* keyspec_tablet_period */ ".", - /* morekeys_nordic_row2_11 ~ */ - EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, - /* ~ morekeys_swiss_row2_11 */ - /* morekeys_punctuation */ "!autoColumnOrder!8,\\,,?,!,#,!text/keyspec_right_parenthesis,!text/keyspec_left_parenthesis,/,;,',@,:,-,\",+,\\%,&", - // U+2020: "†" DAGGER - // U+2021: "‡" DOUBLE DAGGER - // U+2605: "★" BLACK STAR - /* morekeys_star */ "\u2020,\u2021,\u2605", - // The all letters need to be mirrored are found at - // http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt - // U+2039: "‹" SINGLE LEFT-POINTING ANGLE QUOTATION MARK - // U+203A: "›" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - // U+2264: "≤" LESS-THAN OR EQUAL TO - // U+2265: "≥" GREATER-THAN EQUAL TO - // U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - // U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - /* keyspec_left_parenthesis */ "(", - /* keyspec_right_parenthesis */ ")", - /* keyspec_left_square_bracket */ "[", - /* keyspec_right_square_bracket */ "]", - /* keyspec_left_curly_bracket */ "{", - /* keyspec_right_curly_bracket */ "}", - /* keyspec_less_than */ "<", - /* keyspec_greater_than */ ">", - /* keyspec_less_than_equal */ "\u2264", - /* keyspec_greater_than_equal */ "\u2265", - /* keyspec_left_double_angle_quote */ "\u00AB", - /* keyspec_right_double_angle_quote */ "\u00BB", - /* keyspec_left_single_angle_quote */ "\u2039", - /* keyspec_right_single_angle_quote */ "\u203A", - // Comma key - /* keyspec_comma */ ",", - /* keyspec_tablet_comma */ ",", - /* morekeys_left_parenthesis */ "!fixedColumnOrder!3,!text/keyspecs_left_parenthesis_more_keys", - /* morekeys_right_parenthesis */ "!fixedColumnOrder!3,!text/keyspecs_right_parenthesis_more_keys", - /* morekeys_tablet_comma */ EMPTY, - /* keyhintlabel_period */ EMPTY, - /* keyspec_symbols_question */ "?", - /* keyspec_symbols_semicolon */ ";", - /* keyspec_symbols_percent */ "%", - // U+00BF: "¿" INVERTED QUESTION MARK - /* morekeys_question */ "\u00BF", - // U+2030: "‰" PER MILLE SIGN - /* morekeys_symbols_percent */ "\u2030", - /* morekeys_h ~ */ - EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, - /* ~ keyspec_south_slavic_row3_8 */ - /* morekeys_tablet_punctuation */ "!autoColumnOrder!7,\\,,',#,!text/keyspec_right_parenthesis,!text/keyspec_left_parenthesis,/,;,@,:,-,\",+,\\%,&", - // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE - /* keyspec_spanish_row2_10 */ "\u00F1", - // U+266A: "♪" EIGHTH NOTE - // U+2665: "♥" BLACK HEART SUIT - // U+2660: "♠" BLACK SPADE SUIT - // U+2666: "♦" BLACK DIAMOND SUIT - // U+2663: "♣" BLACK CLUB SUIT - /* morekeys_bullet */ "\u266A,\u2665,\u2660,\u2666,\u2663", - /* morekeys_less_than */ "!fixedColumnOrder!3,!text/keyspec_left_single_angle_quote,!text/keyspec_less_than_equal,!text/keyspec_left_double_angle_quote", - /* morekeys_greater_than */ "!fixedColumnOrder!3,!text/keyspec_right_single_angle_quote,!text/keyspec_greater_than_equal,!text/keyspec_right_double_angle_quote", - /* morekeys_arabic_diacritics ~ */ - EMPTY, EMPTY, EMPTY, EMPTY, - /* ~ morekeys_symbols_semicolon */ - /* label_go_key */ "!string/label_go_key", - /* label_send_key */ "!string/label_send_key", - /* label_next_key */ "!string/label_next_key", - /* label_done_key */ "!string/label_done_key", - /* label_search_key */ "!string/label_search_key", - /* label_previous_key */ "!string/label_previous_key", - /* label_pause_key */ "!string/label_pause_key", - /* label_wait_key */ "!string/label_wait_key", - /* morekeys_v ~ */ - EMPTY, EMPTY, EMPTY, EMPTY, - /* ~ morekeys_x */ - /* keyspec_q */ "q", - /* keyspec_w */ "w", - /* keyspec_y */ "y", - /* keyspec_x */ "x", - /* morekeys_east_slavic_row2_11 ~ */ - EMPTY, EMPTY, EMPTY, - /* ~ morekeys_cyrillic_a */ - // U+00A2: "¢" CENT SIGN - // U+00A3: "£" POUND SIGN - // U+20AC: "€" EURO SIGN - // U+00A5: "¥" YEN SIGN - // U+20B1: "₱" PESO SIGN - /* morekeys_currency_dollar */ "\u00A2,\u00A3,\u20AC,\u00A5,\u20B1", - // U+00B1: "±" PLUS-MINUS SIGN - /* morekeys_plus */ "\u00B1", - // U+00A1: "¡" INVERTED EXCLAMATION MARK - /* morekeys_exclamation */ "\u00A1", - /* morekeys_currency_generic */ "$,\u00A2,\u20AC,\u00A3,\u00A5,\u20B1", - // U+00B9: "¹" SUPERSCRIPT ONE - // U+00BD: "½" VULGAR FRACTION ONE HALF - // U+2153: "⅓" VULGAR FRACTION ONE THIRD - // U+00BC: "¼" VULGAR FRACTION ONE QUARTER - // U+215B: "⅛" VULGAR FRACTION ONE EIGHTH - /* morekeys_symbols_1 */ "\u00B9,\u00BD,\u2153,\u00BC,\u215B", - // U+00B2: "²" SUPERSCRIPT TWO - // U+2154: "⅔" VULGAR FRACTION TWO THIRDS - /* morekeys_symbols_2 */ "\u00B2,\u2154", - // U+00B3: "³" SUPERSCRIPT THREE - // U+00BE: "¾" VULGAR FRACTION THREE QUARTERS - // U+215C: "⅜" VULGAR FRACTION THREE EIGHTHS - /* morekeys_symbols_3 */ "\u00B3,\u00BE,\u215C", - // U+2074: "⁴" SUPERSCRIPT FOUR - /* morekeys_symbols_4 */ "\u2074", - // U+215D: "⅝" VULGAR FRACTION FIVE EIGHTHS - /* morekeys_symbols_5 */ "\u215D", - /* morekeys_symbols_6 */ EMPTY, - // U+215E: "⅞" VULGAR FRACTION SEVEN EIGHTHS - /* morekeys_symbols_7 */ "\u215E", - /* morekeys_symbols_8 */ EMPTY, - /* morekeys_symbols_9 */ EMPTY, - // U+207F: "ⁿ" SUPERSCRIPT LATIN SMALL LETTER N - // U+2205: "∅" EMPTY SET - /* morekeys_symbols_0 */ "\u207F,\u2205", - /* morekeys_am_pm */ "!fixedColumnOrder!2,!hasLabels!,!text/keylabel_time_am,!text/keylabel_time_pm", - /* keyspec_settings */ "!icon/settings_key|!code/key_settings", - /* keyspec_shortcut */ "!icon/shortcut_key|!code/key_shortcut", - /* keyspec_action_next */ "!hasLabels!,!text/label_next_key|!code/key_action_next", - /* keyspec_action_previous */ "!hasLabels!,!text/label_previous_key|!code/key_action_previous", - // Label for "switch to more symbol" modifier key ("= \ <"). Must be short to fit on key! - /* keylabel_to_more_symbol */ "= \\\\ <", - // Label for "switch to more symbol" modifier key on tablets. Must be short to fit on key! - /* keylabel_tablet_to_more_symbol */ "~ [ <", - // Label for "switch to phone numeric" key. Must be short to fit on key! - /* keylabel_to_phone_numeric */ "123", - // Label for "switch to phone symbols" key. Must be short to fit on key! - // U+FF0A: "*" FULLWIDTH ASTERISK - // U+FF03: "#" FULLWIDTH NUMBER SIGN - /* keylabel_to_phone_symbols */ "\uFF0A\uFF03", - // Key label for "ante meridiem" - /* keylabel_time_am */ "AM", - // Key label for "post meridiem" - /* keylabel_time_pm */ "PM", - /* keyspec_popular_domain */ ".com", - // popular web domains for the locale - most popular, displayed on the keyboard - /* morekeys_popular_domain */ "!hasLabels!,.net,.org,.gov,.edu", - /* keyspecs_left_parenthesis_more_keys */ "!text/keyspec_less_than,!text/keyspec_left_curly_bracket,!text/keyspec_left_square_bracket", - /* keyspecs_right_parenthesis_more_keys */ "!text/keyspec_greater_than,!text/keyspec_right_curly_bracket,!text/keyspec_right_square_bracket", - // The following characters don't need BIDI mirroring. - // U+2018: "‘" LEFT SINGLE QUOTATION MARK - // U+2019: "’" RIGHT SINGLE QUOTATION MARK - // U+201A: "‚" SINGLE LOW-9 QUOTATION MARK - // U+201C: "“" LEFT DOUBLE QUOTATION MARK - // U+201D: "”" RIGHT DOUBLE QUOTATION MARK - // U+201E: "„" DOUBLE LOW-9 QUOTATION MARK - // Abbreviations are: - // laqm: LEFT-POINTING ANGLE QUOTATION MARK - // raqm: RIGHT-POINTING ANGLE QUOTATION MARK - // lqm: LEFT QUOTATION MARK - // rqm: RIGHT QUOTATION MARK - // 9qm: LOW-9 QUOTATION MARK - // The following each quotation mark pair consist of - // , - // and is named after (single|double)__. - /* single_laqm_raqm */ "!text/keyspec_left_single_angle_quote,!text/keyspec_right_single_angle_quote", - /* single_raqm_laqm */ "!text/keyspec_right_single_angle_quote,!text/keyspec_left_single_angle_quote", - /* double_laqm_raqm */ "!text/keyspec_left_double_angle_quote,!text/keyspec_right_double_angle_quote", - /* double_raqm_laqm */ "!text/keyspec_right_double_angle_quote,!text/keyspec_left_double_angle_quote", - // The following each quotation mark triplet consists of - // , , - // and is named after (single|double)__. - /* single_lqm_rqm */ "\u201A,\u2018,\u2019", - /* single_9qm_lqm */ "\u2019,\u201A,\u2018", - /* single_9qm_rqm */ "\u2018,\u201A,\u2019", - /* single_rqm_9qm */ "\u2018,\u2019,\u201A", - /* double_lqm_rqm */ "\u201E,\u201C,\u201D", - /* double_9qm_lqm */ "\u201D,\u201E,\u201C", - /* double_9qm_rqm */ "\u201C,\u201E,\u201D", - /* double_rqm_9qm */ "\u201C,\u201D,\u201E", - /* morekeys_single_quote */ "!fixedColumnOrder!5,!text/single_quotes,!text/single_angle_quotes", - /* morekeys_double_quote */ "!fixedColumnOrder!5,!text/double_quotes,!text/double_angle_quotes", - /* morekeys_tablet_double_quote */ "!fixedColumnOrder!6,!text/double_quotes,!text/single_quotes,!text/double_angle_quotes,!text/single_angle_quotes", - /* keyspec_emoji_action_key */ "!icon/emoji_action_key|!code/key_emoji", - /* keyspec_emoji_normal_key */ "!icon/emoji_normal_key|!code/key_emoji", - /* keyspec_clipboard_action_key */ "!icon/clipboard_action_key|!code/key_clipboard", - /* keyspec_clipboard_normal_key */ "!icon/clipboard_normal_key|!code/key_clipboard", - /* keyspec_start_onehanded_mode */ "!icon/start_onehanded_mode_key|!code/key_start_onehanded", - /* keyspec_language_switch */ "!icon/language_switch_key|!code/key_language_switch", - /* keyspec_numpad_key */ "!icon/numpad_key|!code/key_numpad", - }; - - /* Locale af: Afrikaans */ - private static final String[] TEXTS_af = { - // This is the same as Dutch except more keys of y and demoting vowels with diaeresis. - // U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE - // U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE - // U+00E6: "æ" LATIN SMALL LETTER AE - // U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE - // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE - // U+0101: "ā" LATIN SMALL LETTER A WITH MACRON - /* morekeys_a */ "\u00E1,\u00E2,\u00E4,\u00E0,\u00E6,\u00E3,\u00E5,\u0101", - // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE - // U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - // U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE - // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE - // U+0153: "œ" LATIN SMALL LIGATURE OE - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - // U+014D: "ō" LATIN SMALL LETTER O WITH MACRON - /* morekeys_o */ "\u00F3,\u00F4,\u00F6,\u00F2,\u00F5,\u0153,\u00F8,\u014D", - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE - // U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX - // U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS - // U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK - // U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE - // U+0113: "ē" LATIN SMALL LETTER E WITH MACRON - /* morekeys_e */ "\u00E9,\u00E8,\u00EA,\u00EB,\u0119,\u0117,\u0113", - /* keylabel_to_alpha */ null, - // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE - // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE - // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON - /* morekeys_u */ "\u00FA,\u00FB,\u00FC,\u00F9,\u016B", - // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE - // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE - // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS - // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX - // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK - // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON - // U+0133: "ij" LATIN SMALL LIGATURE IJ - /* morekeys_i */ "\u00ED,\u00EC,\u00EF,\u00EE,\u012F,\u012B,\u0133", - // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE - // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE - /* morekeys_n */ "\u00F1,\u0144", - /* morekeys_c ~ */ - null, null, null, null, null, - /* ~ keyspec_currency */ - // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE - // U+0133: "ij" LATIN SMALL LIGATURE IJ - /* morekeys_y */ "\u00FD,\u0133", - }; - - /* Locale ar: Arabic */ - private static final String[] TEXTS_ar = { - /* morekeys_a ~ */ - null, null, null, - /* ~ morekeys_e */ - // Label for "switch to alphabetic" key. - // U+0623: "أ" ARABIC LETTER ALEF WITH HAMZA ABOVE - // U+200C: ZERO WIDTH NON-JOINER - // U+0628: "ب" ARABIC LETTER BEH - // U+062C: "ج" ARABIC LETTER JEEM - /* keylabel_to_alpha */ "\u0623\u200C\u0628\u200C\u062C", - /* morekeys_u ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, - /* ~ morekeys_r */ - // Label for "switch to symbols" key. - // U+061F: "؟" ARABIC QUESTION MARK - /* keylabel_to_symbol */ "\u0663\u0662\u0661\u061F", - /* additional_morekeys_symbols_1 */ "1", - /* additional_morekeys_symbols_2 */ "2", - /* additional_morekeys_symbols_3 */ "3", - /* additional_morekeys_symbols_4 */ "4", - /* additional_morekeys_symbols_5 */ "5", - /* additional_morekeys_symbols_6 */ "6", - /* additional_morekeys_symbols_7 */ "7", - /* additional_morekeys_symbols_8 */ "8", - /* additional_morekeys_symbols_9 */ "9", - // U+066B: "٫" ARABIC DECIMAL SEPARATOR - // U+066C: "٬" ARABIC THOUSANDS SEPARATOR - /* additional_morekeys_symbols_0 */ "0,\u066B,\u066C", - /* morekeys_k */ null, - /* morekeys_cyrillic_ie */ null, - // U+0661: "١" ARABIC-INDIC DIGIT ONE - /* keyspec_symbols_1 */ "\u0661", - // U+0662: "٢" ARABIC-INDIC DIGIT TWO - /* keyspec_symbols_2 */ "\u0662", - // U+0663: "٣" ARABIC-INDIC DIGIT THREE - /* keyspec_symbols_3 */ "\u0663", - // U+0664: "٤" ARABIC-INDIC DIGIT FOUR - /* keyspec_symbols_4 */ "\u0664", - // U+0665: "٥" ARABIC-INDIC DIGIT FIVE - /* keyspec_symbols_5 */ "\u0665", - // U+0666: "٦" ARABIC-INDIC DIGIT SIX - /* keyspec_symbols_6 */ "\u0666", - // U+0667: "٧" ARABIC-INDIC DIGIT SEVEN - /* keyspec_symbols_7 */ "\u0667", - // U+0668: "٨" ARABIC-INDIC DIGIT EIGHT - /* keyspec_symbols_8 */ "\u0668", - // U+0669: "٩" ARABIC-INDIC DIGIT NINE - /* keyspec_symbols_9 */ "\u0669", - // U+0660: "٠" ARABIC-INDIC DIGIT ZERO - /* keyspec_symbols_0 */ "\u0660", - /* keyspec_period */ null, - /* morekeys_period */ "!text/morekeys_arabic_diacritics", - /* morekeys_tablet_period */ "!text/morekeys_arabic_diacritics", - /* keyspec_nordic_row1_11 ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, - /* ~ morekeys_punctuation */ - // U+2605: "★" BLACK STAR - // U+066D: "٭" ARABIC FIVE POINTED STAR - /* morekeys_star */ "\u2605,\u066D", - // U+2264: "≤" LESS-THAN OR EQUAL TO - // U+2265: "≥" GREATER-THAN EQUAL TO - // U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - // U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - // U+2039: "‹" SINGLE LEFT-POINTING ANGLE QUOTATION MARK - // U+203A: "›" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - /* keyspec_left_parenthesis */ "(|)", - /* keyspec_right_parenthesis */ ")|(", - /* keyspec_left_square_bracket */ "[|]", - /* keyspec_right_square_bracket */ "]|[", - /* keyspec_left_curly_bracket */ "{|}", - /* keyspec_right_curly_bracket */ "}|{", - /* keyspec_less_than */ "<|>", - /* keyspec_greater_than */ ">|<", - /* keyspec_less_than_equal */ "\u2264|\u2265", - /* keyspec_greater_than_equal */ "\u2265|\u2264", - /* keyspec_left_double_angle_quote */ "\u00AB|\u00BB", - /* keyspec_right_double_angle_quote */ "\u00BB|\u00AB", - /* keyspec_left_single_angle_quote */ "\u2039|\u203A", - /* keyspec_right_single_angle_quote */ "\u203A|\u2039", - // U+060C: "،" ARABIC COMMA - /* keyspec_comma */ "\u060C", - // U+061F: "؟" ARABIC QUESTION MARK - // U+060C: "،" ARABIC COMMA - // U+061B: "؛" ARABIC SEMICOLON - /* keyspec_tablet_comma */ "\u060C", - // The all letters need to be mirrored are found at - // http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt - // U+FD3E: "﴾" ORNATE LEFT PARENTHESIS - // U+FD3F: "﴿" ORNATE RIGHT PARENTHESIS - /* morekeys_left_parenthesis */ "!fixedColumnOrder!4,\uFD3E|\uFD3F,!text/keyspecs_left_parenthesis_more_keys", - /* morekeys_right_parenthesis */ "!fixedColumnOrder!4,\uFD3F|\uFD3E,!text/keyspecs_right_parenthesis_more_keys", - /* morekeys_tablet_comma */ "!fixedColumnOrder!4,:,!,\u061F,\u061B,-,\",\'", - // U+0651: "ّ" ARABIC SHADDA - /* keyhintlabel_period */ "\u0651", - /* keyspec_symbols_question */ "\u061F", - /* keyspec_symbols_semicolon */ "\u061B", - // U+066A: "٪" ARABIC PERCENT SIGN - /* keyspec_symbols_percent */ "\u066A", - // U+00BF: "¿" INVERTED QUESTION MARK - /* morekeys_question */ "?,\u00BF", - // U+2030: "‰" PER MILLE SIGN - /* morekeys_symbols_percent */ "\\%,\u2030", - /* morekeys_h ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, - /* ~ keyspec_spanish_row2_10 */ - // U+266A: "♪" EIGHTH NOTE - /* morekeys_bullet */ "\u266A", - /* morekeys_less_than */ null, - /* morekeys_greater_than */ null, - // U+0655: "ٕ" ARABIC HAMZA BELOW - // U+0654: "ٔ" ARABIC HAMZA ABOVE - // U+0652: "ْ" ARABIC SUKUN - // U+064D: "ٍ" ARABIC KASRATAN - // U+064C: "ٌ" ARABIC DAMMATAN - // U+064B: "ً" ARABIC FATHATAN - // U+0651: "ّ" ARABIC SHADDA - // U+0656: "ٖ" ARABIC SUBSCRIPT ALEF - // U+0670: "ٰ" ARABIC LETTER SUPERSCRIPT ALEF - // U+0653: "ٓ" ARABIC MADDAH ABOVE - // U+0650: "ِ" ARABIC KASRA - // U+064F: "ُ" ARABIC DAMMA - // U+064E: "َ" ARABIC FATHA - // U+0640: "ـ" ARABIC TATWEEL - // In order to make Tatweel easily distinguishable from other punctuations, we use consecutive Tatweels only for its displayed label. - // Note: The space character is needed as a preceding letter to draw Arabic diacritics characters correctly. - /* morekeys_arabic_diacritics */ "!fixedColumnOrder!7, \u0655|\u0655, \u0654|\u0654, \u0652|\u0652, \u064D|\u064D, \u064C|\u064C, \u064B|\u064B, \u0651|\u0651, \u0656|\u0656, \u0670|\u0670, \u0653|\u0653, \u0650|\u0650, \u064F|\u064F, \u064E|\u064E,\u0640\u0640\u0640|\u0640", - /* keyhintlabel_tablet_comma */ "\u061F", - /* keyhintlabel_tablet_period */ "\u0651", - /* morekeys_symbols_semicolon */ ";", - }; - - /* Locale az: Azerbaijani */ - private static final String[] TEXTS_az = { - // This is the same as Turkish - // U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - // U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE - /* morekeys_a */ "\u00E2,\u00E4,\u00E1", - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - // U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX - // U+0153: "œ" LATIN SMALL LIGATURE OE - // U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE - // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE - // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - // U+014D: "ō" LATIN SMALL LETTER O WITH MACRON - /* morekeys_o */ "\u00F6,\u00F4,\u0153,\u00F2,\u00F3,\u00F5,\u00F8,\u014D", - // U+0259: "ə" LATIN SMALL LETTER SCHWA - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - /* morekeys_e */ "\u0259,\u00E9", - /* keylabel_to_alpha */ null, - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX - // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE - // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE - // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON - /* morekeys_u */ "\u00FC,\u00FB,\u00F9,\u00FA,\u016B", - // U+0131: "ı" LATIN SMALL LETTER DOTLESS I - // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX - // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS - // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE - // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE - // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK - // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON - /* morekeys_i */ "\u0131,\u00EE,\u00EF,\u00EC,\u00ED,\u012F,\u012B", - // U+0148: "ň" LATIN SMALL LETTER N WITH CARON - // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE - /* morekeys_n */ "\u0148,\u00F1", - // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA - // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE - // U+010D: "č" LATIN SMALL LETTER C WITH CARON - /* morekeys_c */ "\u00E7,\u0107,\u010D", - /* double_quotes */ null, - // U+015F: "ş" LATIN SMALL LETTER S WITH CEDILLA - // U+00DF: "ß" LATIN SMALL LETTER SHARP S - // U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE - // U+0161: "š" LATIN SMALL LETTER S WITH CARON - /* morekeys_s */ "\u015F,\u00DF,\u015B,\u0161", - /* single_quotes */ null, - /* keyspec_currency */ null, - // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE - /* morekeys_y */ "\u00FD", - // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON - /* morekeys_z */ "\u017E", - /* morekeys_d ~ */ - null, null, null, - /* ~ morekeys_l */ - // U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE - /* morekeys_g */ "\u011F", - }; - - /* Locale be: Belarusian */ - private static final String[] TEXTS_be = { - /* morekeys_a ~ */ - null, null, null, - /* ~ morekeys_e */ - // Label for "switch to alphabetic" key. - // U+0410: "А" CYRILLIC CAPITAL LETTER A - // U+0411: "Б" CYRILLIC CAPITAL LETTER BE - // U+0412: "В" CYRILLIC CAPITAL LETTER VE - /* keylabel_to_alpha */ "\u0410\u0411\u0412", - /* morekeys_u ~ */ - null, null, null, null, - /* ~ morekeys_c */ - /* double_quotes */ "!text/double_9qm_lqm", - /* morekeys_s */ null, - /* single_quotes */ "!text/single_9qm_lqm", - /* keyspec_currency ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, - /* ~ morekeys_k */ - // U+0451: "ё" CYRILLIC SMALL LETTER IO - /* morekeys_cyrillic_ie */ "\u0451", - /* keyspec_symbols_1 ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, - /* ~ morekeys_nordic_row2_10 */ - // U+045E: "ў" CYRILLIC SMALL LETTER SHORT U - /* keyspec_east_slavic_row1_9 */ "\u045E", - // U+044B: "ы" CYRILLIC SMALL LETTER YERU - /* keyspec_east_slavic_row2_2 */ "\u044B", - // U+044D: "э" CYRILLIC SMALL LETTER E - /* keyspec_east_slavic_row2_11 */ "\u044D", - // U+0456: "і" CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I - /* keyspec_east_slavic_row3_5 */ "\u0456", - // U+044A: "ъ" CYRILLIC SMALL LETTER HARD SIGN - /* morekeys_cyrillic_soft_sign */ "\u044A", - }; - - /* Locale bg: Bulgarian */ - private static final String[] TEXTS_bg = { - /* morekeys_a ~ */ - null, null, null, - /* ~ morekeys_e */ - // Label for "switch to alphabetic" key. - // U+0410: "А" CYRILLIC CAPITAL LETTER A - // U+0411: "Б" CYRILLIC CAPITAL LETTER BE - // U+0412: "В" CYRILLIC CAPITAL LETTER VE - /* keylabel_to_alpha */ "\u0410\u0411\u0412", - /* morekeys_u ~ */ - null, null, null, null, - /* ~ morekeys_c */ - // single_quotes of Bulgarian is default single_quotes_right_left. - /* double_quotes */ "!text/double_9qm_lqm", - }; - - /* Locale bn_BD: Bangla (Bangladesh) */ - private static final String[] TEXTS_bn_BD = { - /* morekeys_a ~ */ - null, null, null, - /* ~ morekeys_e */ - // Label for "switch to alphabetic" key. - // U+0995: "क" BENGALI LETTER KA - // U+0996: "ख" BENGALI LETTER KHA - // U+0997: "ग" BENGALI LETTER GA - /* keylabel_to_alpha */ "\u0995\u0996\u0997", - /* morekeys_u ~ */ - null, null, null, null, null, null, null, - /* ~ single_quotes */ - // U+09F3: "৳" BENGALI RUPEE SIGN - /* keyspec_currency */ "\u09F3", - /* morekeys_y ~ */ - null, null, null, null, null, null, null, null, null, - /* ~ morekeys_r */ - // Label for "switch to symbols" key. - /* keylabel_to_symbol */ "?\u09E7\u09E8\u09E9", - /* additional_morekeys_symbols_1 */ "1", - /* additional_morekeys_symbols_2 */ "2", - /* additional_morekeys_symbols_3 */ "3", - /* additional_morekeys_symbols_4 */ "4", - /* additional_morekeys_symbols_5 */ "5", - /* additional_morekeys_symbols_6 */ "6", - /* additional_morekeys_symbols_7 */ "7", - /* additional_morekeys_symbols_8 */ "8", - /* additional_morekeys_symbols_9 */ "9", - /* additional_morekeys_symbols_0 */ "0", - /* morekeys_k */ null, - /* morekeys_cyrillic_ie */ null, - // U+0967: "১" BENGALI DIGIT ONE - /* keyspec_symbols_1 */ "\u09E7", - // U+0968: "২" BENGALI DIGIT TWO - /* keyspec_symbols_2 */ "\u09E8", - // U+0969: "৩" BENGALI DIGIT THREE - /* keyspec_symbols_3 */ "\u09E9", - // U+096A: "৪" BENGALI DIGIT FOUR - /* keyspec_symbols_4 */ "\u09EA", - // U+096B: "৫" BENGALI DIGIT FIVE - /* keyspec_symbols_5 */ "\u09EB", - // U+096C: "৬" BENGALI DIGIT SIX - /* keyspec_symbols_6 */ "\u09EC", - // U+096D: "৭" BENGALI DIGIT SEVEN - /* keyspec_symbols_7 */ "\u09ED", - // U+096E: "৮" BENGALI DIGIT EIGHT - /* keyspec_symbols_8 */ "\u09EE", - // U+096F: "৯" BENGALI DIGIT NINE - /* keyspec_symbols_9 */ "\u09EF", - // U+0966: "০" BENGALI DIGIT ZERO - /* keyspec_symbols_0 */ "\u09E6", - // U+0964: "।" DEVANAGARI DANDA - /* keyspec_period */ "\u0964", - /* morekeys_period */ "!autoColumnOrder!8,\\,,\u0965,?,!,!icon/zwnj_key|\u200C,!icon/zwj_key|\u200D,#,@,!text/keyspec_left_parenthesis,!text/keyspec_right_parenthesis,/,;,:,-,+,\\%", - /* morekeys_tablet_period */ "!autoColumnOrder!8,\\,,\u0965,?,!,!icon/zwnj_key|\u200C,!icon/zwj_key|\u200D,#,@,!text/keyspec_left_parenthesis,!text/keyspec_right_parenthesis,/,;,:,-,+,\\%", - /* keyspec_nordic_row1_11 ~ */ - null, null, null, null, null, null, null, null, null, - /* ~ morekeys_cyrillic_soft_sign */ - /* keyspec_tablet_period */ "\u0964", - }; - - /* Locale bn_IN: Bangla (India) */ - private static final String[] TEXTS_bn_IN = { - /* morekeys_a ~ */ - null, null, null, - /* ~ morekeys_e */ - // Label for "switch to alphabetic" key. - // U+0995: "क" BENGALI LETTER KA - // U+0996: "ख" BENGALI LETTER KHA - // U+0997: "ग" BENGALI LETTER GA - /* keylabel_to_alpha */ "\u0995\u0996\u0997", - /* morekeys_u ~ */ - null, null, null, null, null, null, null, - /* ~ single_quotes */ - // U+20B9: "₹" INDIAN RUPEE SIGN - /* keyspec_currency */ "\u20B9", - }; - - /* Locale ca: Catalan */ - private static final String[] TEXTS_ca = { - // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE - // U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - // U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX - // U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE - // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE - // U+0105: "ą" LATIN SMALL LETTER A WITH OGONEK - // U+00E6: "æ" LATIN SMALL LETTER AE - // U+0101: "ā" LATIN SMALL LETTER A WITH MACRON - // U+00AA: "ª" FEMININE ORDINAL INDICATOR - /* morekeys_a */ "\u00E0,\u00E1,\u00E4,\u00E2,\u00E3,\u00E5,\u0105,\u00E6,\u0101,\u00AA", - // U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE - // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - // U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX - // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - // U+0153: "œ" LATIN SMALL LIGATURE OE - // U+014D: "ō" LATIN SMALL LETTER O WITH MACRON - // U+00BA: "º" MASCULINE ORDINAL INDICATOR - /* morekeys_o */ "\u00F2,\u00F3,\u00F6,\u00F4,\u00F5,\u00F8,\u0153,\u014D,\u00BA", - // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - // U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS - // U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX - // U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK - // U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE - // U+0113: "ē" LATIN SMALL LETTER E WITH MACRON - /* morekeys_e */ "\u00E8,\u00E9,\u00EB,\u00EA,\u0119,\u0117,\u0113", - /* keylabel_to_alpha */ null, - // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE - // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX - // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON - /* morekeys_u */ "\u00FA,\u00FC,\u00F9,\u00FB,\u016B", - // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE - // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS - // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE - // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX - // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK - // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON - /* morekeys_i */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B", - // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE - // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE - /* morekeys_n */ "\u00F1,\u0144", - // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA - // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE - // U+010D: "č" LATIN SMALL LETTER C WITH CARON - /* morekeys_c */ "\u00E7,\u0107,\u010D", - /* double_quotes ~ */ - null, null, null, null, null, null, null, null, - /* ~ morekeys_t */ - // U+00B7: "·" MIDDLE DOT - // U+0142: "ł" LATIN SMALL LETTER L WITH STROKE - /* morekeys_l */ "l\u00B7l,\u0142", - /* morekeys_g ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, - /* ~ morekeys_swiss_row2_11 */ - // U+00B7: "·" MIDDLE DOT - /* morekeys_punctuation */ "!autoColumnOrder!9,\\,,?,!,\u00B7,#,),(,/,;,',@,:,-,\",+,\\%,&", - /* morekeys_star ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - /* ~ keyspec_south_slavic_row3_8 */ - /* morekeys_tablet_punctuation */ "!autoColumnOrder!8,\\,,',\u00B7,#,),(,/,;,@,:,-,\",+,\\%,&", - // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA - /* keyspec_spanish_row2_10 */ "\u00E7", - }; - - /* Locale cs: Czech */ - private static final String[] TEXTS_cs = { - // U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE - // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE - // U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - // U+00E6: "æ" LATIN SMALL LETTER AE - // U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE - // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE - // U+0101: "ā" LATIN SMALL LETTER A WITH MACRON - /* morekeys_a */ "\u00E1,\u00E0,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101", - // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - // U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX - // U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE - // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE - // U+0153: "œ" LATIN SMALL LIGATURE OE - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - // U+014D: "ō" LATIN SMALL LETTER O WITH MACRON - /* morekeys_o */ "\u00F3,\u00F6,\u00F4,\u00F2,\u00F5,\u0153,\u00F8,\u014D", - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - // U+011B: "ě" LATIN SMALL LETTER E WITH CARON - // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE - // U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX - // U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS - // U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK - // U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE - // U+0113: "ē" LATIN SMALL LETTER E WITH MACRON - /* morekeys_e */ "\u00E9,\u011B,\u00E8,\u00EA,\u00EB,\u0119,\u0117,\u0113", - /* keylabel_to_alpha */ null, - // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE - // U+016F: "ů" LATIN SMALL LETTER U WITH RING ABOVE - // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE - // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON - /* morekeys_u */ "\u00FA,\u016F,\u00FB,\u00FC,\u00F9,\u016B", - // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE - // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX - // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS - // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE - // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK - // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON - /* morekeys_i */ "\u00ED,\u00EE,\u00EF,\u00EC,\u012F,\u012B", - // U+0148: "ň" LATIN SMALL LETTER N WITH CARON - // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE - // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE - /* morekeys_n */ "\u0148,\u00F1,\u0144", - // U+010D: "č" LATIN SMALL LETTER C WITH CARON - // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA - // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE - /* morekeys_c */ "\u010D,\u00E7,\u0107", - /* double_quotes */ "!text/double_9qm_lqm", - // U+0161: "š" LATIN SMALL LETTER S WITH CARON - // U+00DF: "ß" LATIN SMALL LETTER SHARP S - // U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE - /* morekeys_s */ "\u0161,\u00DF,\u015B", - /* single_quotes */ "!text/single_9qm_lqm", - /* keyspec_currency */ null, - // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE - // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS - /* morekeys_y */ "\u00FD,\u00FF", - // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON - // U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE - // U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE - /* morekeys_z */ "\u017E,\u017A,\u017C", - // U+010F: "ď" LATIN SMALL LETTER D WITH CARON - /* morekeys_d */ "\u010F", - // U+0165: "ť" LATIN SMALL LETTER T WITH CARON - /* morekeys_t */ "\u0165", - /* morekeys_l */ null, - /* morekeys_g */ null, - /* single_angle_quotes */ "!text/single_raqm_laqm", - /* double_angle_quotes */ "!text/double_raqm_laqm", - // U+0159: "ř" LATIN SMALL LETTER R WITH CARON - /* morekeys_r */ "\u0159", - }; - - /* Locale da: Danish */ - private static final String[] TEXTS_da = { - // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE - // U+00E6: "æ" LATIN SMALL LETTER AE - // U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE - // U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX - // U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE - // U+0101: "ā" LATIN SMALL LETTER A WITH MACRON - /* morekeys_a */ "\u00E5,\u00E6,\u00E1,\u00E4,\u00E0,\u00E2,\u00E3,\u0101", - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE - // U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX - // U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE - // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE - // U+0153: "œ" LATIN SMALL LIGATURE OE - // U+014D: "ō" LATIN SMALL LETTER O WITH MACRON - /* morekeys_o */ "\u00F8,\u00F6,\u00F3,\u00F4,\u00F2,\u00F5,\u0153,\u014D", - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - // U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS - /* morekeys_e */ "\u00E9,\u00EB", - /* keylabel_to_alpha */ null, - // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX - // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE - // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON - /* morekeys_u */ "\u00FA,\u00FC,\u00FB,\u00F9,\u016B", - // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE - // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS - /* morekeys_i */ "\u00ED,\u00EF", - // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE - // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE - /* morekeys_n */ "\u00F1,\u0144", - /* morekeys_c */ null, - /* double_quotes */ "!text/double_9qm_lqm", - // U+00DF: "ß" LATIN SMALL LETTER SHARP S - // U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE - // U+0161: "š" LATIN SMALL LETTER S WITH CARON - /* morekeys_s */ "\u00DF,\u015B,\u0161", - /* single_quotes */ "!text/single_9qm_lqm", - /* keyspec_currency */ null, - // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE - // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS - /* morekeys_y */ "\u00FD,\u00FF", - /* morekeys_z */ null, - // U+00F0: "ð" LATIN SMALL LETTER ETH - /* morekeys_d */ "\u00F0", - /* morekeys_t */ null, - // U+0142: "ł" LATIN SMALL LETTER L WITH STROKE - /* morekeys_l */ "\u0142", - /* morekeys_g */ null, - /* single_angle_quotes */ "!text/single_raqm_laqm", - /* double_angle_quotes */ "!text/double_raqm_laqm", - /* morekeys_r ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, - /* ~ morekeys_tablet_period */ - // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE - /* keyspec_nordic_row1_11 */ "\u00E5", - // U+00E6: "æ" LATIN SMALL LETTER AE - /* keyspec_nordic_row2_10 */ "\u00E6", - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - /* keyspec_nordic_row2_11 */ "\u00F8", - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - /* morekeys_nordic_row2_10 */ "\u00E4", - /* keyspec_east_slavic_row1_9 ~ */ - null, null, null, null, null, null, - /* ~ keyspec_tablet_period */ - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - /* morekeys_nordic_row2_11 */ "\u00F6", - }; - - /* Locale de: German */ - private static final String[] TEXTS_de = { - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - // U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX - // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE - // U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE - // U+00E6: "æ" LATIN SMALL LETTER AE - // U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE - // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE - // U+0101: "ā" LATIN SMALL LETTER A WITH MACRON - /* morekeys_a */ "\u00E4,%,\u00E2,\u00E0,\u00E1,\u00E6,\u00E3,\u00E5,\u0101", - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - // U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX - // U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE - // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE - // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE - // U+0153: "œ" LATIN SMALL LIGATURE OE - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - // U+014D: "ō" LATIN SMALL LETTER O WITH MACRON - /* morekeys_o */ "\u00F6,%,\u00F4,\u00F2,\u00F3,\u00F5,\u0153,\u00F8,\u014D", - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE - // U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX - // U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS - // U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE - /* morekeys_e */ "\u00E9,\u00E8,\u00EA,\u00EB,\u0117", - /* keylabel_to_alpha */ null, - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX - // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE - // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE - // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON - /* morekeys_u */ "\u00FC,%,\u00FB,\u00F9,\u00FA,\u016B", - /* morekeys_i */ null, - // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE - // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE - /* morekeys_n */ "\u00F1,\u0144", - /* morekeys_c */ null, - /* double_quotes */ "!text/double_9qm_lqm", - // U+00DF: "ß" LATIN SMALL LETTER SHARP S - // U+1E9E: "ẞ" LATIN CAPITAL LETTER SHARP S - // U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE - // U+0161: "š" LATIN SMALL LETTER S WITH CARON - /* morekeys_s */ "\u00DF,%,\u1E9E,\u015B,\u0161", - /* single_quotes */ "!text/single_9qm_lqm", - /* keyspec_currency ~ */ - null, null, null, null, null, null, null, - /* ~ morekeys_g */ - /* single_angle_quotes */ "!text/single_raqm_laqm", - /* double_angle_quotes */ "!text/double_raqm_laqm", - /* morekeys_r ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - /* ~ morekeys_nordic_row2_11 */ - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - /* keyspec_swiss_row1_11 */ "\u00FC", - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - /* keyspec_swiss_row2_10 */ "\u00F6", - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - /* keyspec_swiss_row2_11 */ "\u00E4", - // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE - /* morekeys_swiss_row1_11 */ "\u00E8", - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - /* morekeys_swiss_row2_10 */ "\u00E9", - // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE - /* morekeys_swiss_row2_11 */ "\u00E0", - }; - - /* Locale de_DE: German (Germany) */ - private static final String[] TEXTS_de_DE = { - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - // U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX - // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE - // U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE - // U+00E6: "æ" LATIN SMALL LETTER AE - // U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE - // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE - // U+0101: "ā" LATIN SMALL LETTER A WITH MACRON - /* morekeys_a */ "\u00E4,\u00E2,\u00E0,\u00E1,\u00E6,\u00E3,\u00E5,\u0101", - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - // U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX - // U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE - // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE - // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE - // U+0153: "œ" LATIN SMALL LIGATURE OE - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - // U+014D: "ō" LATIN SMALL LETTER O WITH MACRON - /* morekeys_o */ "\u00F6,\u00F4,\u00F2,\u00F3,\u00F5,\u0153,\u00F8,\u014D", - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE - // U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX - // U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS - // U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE - /* morekeys_e */ "\u00E9,\u00E8,\u00EA,\u00EB,\u0117", - /* keylabel_to_alpha */ null, - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX - // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE - // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE - // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON - /* morekeys_u */ "\u00FC,\u00FB,\u00F9,\u00FA,\u016B", - /* morekeys_i */ null, - // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE - // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE - /* morekeys_n */ "\u00F1,\u0144", - /* morekeys_c */ null, - /* double_quotes */ "!text/double_9qm_lqm", - // U+00DF: "ß" LATIN SMALL LETTER SHARP S - // U+1E9E: "ẞ" LATIN CAPITAL LETTER SHARP S - // U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE - // U+0161: "š" LATIN SMALL LETTER S WITH CARON - /* morekeys_s */ "\u00DF,%,\u1E9E,\u015B,\u0161", - /* single_quotes */ "!text/single_9qm_lqm", - /* keyspec_currency ~ */ - null, null, null, null, null, null, null, - /* ~ morekeys_g */ - /* single_angle_quotes */ "!text/single_raqm_laqm", - /* double_angle_quotes */ "!text/double_raqm_laqm", - /* morekeys_r ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - /* ~ morekeys_nordic_row2_11 */ - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - /* keyspec_swiss_row1_11 */ "\u00FC", - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - /* keyspec_swiss_row2_10 */ "\u00F6", - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - /* keyspec_swiss_row2_11 */ "\u00E4", - // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE - /* morekeys_swiss_row1_11 */ "\u00E8", - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - /* morekeys_swiss_row2_10 */ "\u00E9", - // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE - /* morekeys_swiss_row2_11 */ "\u00E0", - }; - - /* Locale el: Greek */ - private static final String[] TEXTS_el = { - /* morekeys_a ~ */ - null, null, null, - /* ~ morekeys_e */ - // Label for "switch to alphabetic" key. - // U+0391: "Α" GREEK CAPITAL LETTER ALPHA - // U+0392: "Β" GREEK CAPITAL LETTER BETA - // U+0393: "Γ" GREEK CAPITAL LETTER GAMMA - /* keylabel_to_alpha */ "\u0391\u0392\u0393", - }; - - /* Locale en: English */ - private static final String[] TEXTS_en = { - // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE - // U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE - // U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - // U+00E6: "æ" LATIN SMALL LETTER AE - // U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE - // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE - // U+0101: "ā" LATIN SMALL LETTER A WITH MACRON - /* morekeys_a */ "\u00E0,\u00E1,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101", - // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE - // U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - // U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE - // U+0153: "œ" LATIN SMALL LIGATURE OE - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - // U+014D: "ō" LATIN SMALL LETTER O WITH MACRON - // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE - /* morekeys_o */ "\u00F3,\u00F4,\u00F6,\u00F2,\u0153,\u00F8,\u014D,\u00F5", - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE - // U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX - // U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS - // U+0113: "ē" LATIN SMALL LETTER E WITH MACRON - /* morekeys_e */ "\u00E9,\u00E8,\u00EA,\u00EB,\u0113", - /* keylabel_to_alpha */ null, - // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE - // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE - // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON - /* morekeys_u */ "\u00FA,\u00FB,\u00FC,\u00F9,\u016B", - // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE - // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX - // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS - // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON - // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE - /* morekeys_i */ "\u00ED,\u00EE,\u00EF,\u012B,\u00EC", - // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE - /* morekeys_n */ "\u00F1", - // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA - /* morekeys_c */ "\u00E7", - /* double_quotes */ null, - // U+00DF: "ß" LATIN SMALL LETTER SHARP S - /* morekeys_s */ "\u00DF", - }; - - /* Locale eo: Esperanto */ - private static final String[] TEXTS_eo = { - // U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE - // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE - // U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - // U+00E6: "æ" LATIN SMALL LETTER AE - // U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE - // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE - // U+0101: "ā" LATIN SMALL LETTER A WITH MACRON - // U+0103: "ă" LATIN SMALL LETTER A WITH BREVE - // U+0105: "ą" LATIN SMALL LETTER A WITH OGONEK - // U+00AA: "ª" FEMININE ORDINAL INDICATOR - /* morekeys_a */ "\u00E1,\u00E0,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101,\u0103,\u0105,\u00AA", - // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - // U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX - // U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE - // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE - // U+0153: "œ" LATIN SMALL LIGATURE OE - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - // U+014D: "ō" LATIN SMALL LETTER O WITH MACRON - // U+0151: "ő" LATIN SMALL LETTER O WITH DOUBLE ACUTE - // U+00BA: "º" MASCULINE ORDINAL INDICATOR - /* morekeys_o */ "\u00F3,\u00F6,\u00F4,\u00F2,\u00F5,\u0153,\u00F8,\u014D,\u0151,\u00BA", - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - // U+011B: "ě" LATIN SMALL LETTER E WITH CARON - // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE - // U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX - // U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS - // U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK - // U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE - // U+0113: "ē" LATIN SMALL LETTER E WITH MACRON - /* morekeys_e */ "\u00E9,\u011B,\u00E8,\u00EA,\u00EB,\u0119,\u0117,\u0113", - /* keylabel_to_alpha */ null, - // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE - // U+016F: "ů" LATIN SMALL LETTER U WITH RING ABOVE - // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE - // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON - // U+0169: "ũ" LATIN SMALL LETTER U WITH TILDE - // U+0171: "ű" LATIN SMALL LETTER U WITH DOUBLE ACUTE - // U+0173: "ų" LATIN SMALL LETTER U WITH OGONEK - // U+00B5: "µ" MICRO SIGN - /* morekeys_u */ "\u00FA,\u016F,\u00FB,\u00FC,\u00F9,\u016B,\u0169,\u0171,\u0173,\u00B5", - // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE - // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX - // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS - // U+0129: "ĩ" LATIN SMALL LETTER I WITH TILDE - // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE - // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK - // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON - // U+0131: "ı" LATIN SMALL LETTER DOTLESS I - // U+0133: "ij" LATIN SMALL LIGATURE IJ - /* morekeys_i */ "\u00ED,\u00EE,\u00EF,\u0129,\u00EC,\u012F,\u012B,\u0131,\u0133", - // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE - // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE - // U+0146: "ņ" LATIN SMALL LETTER N WITH CEDILLA - // U+0148: "ň" LATIN SMALL LETTER N WITH CARON - // U+0149: "ʼn" LATIN SMALL LETTER N PRECEDED BY APOSTROPHE - // U+014B: "ŋ" LATIN SMALL LETTER ENG - /* morekeys_n */ "\u00F1,\u0144,\u0146,\u0148,\u0149,\u014B", - // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE - // U+010D: "č" LATIN SMALL LETTER C WITH CARON - // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA - // U+010B: "ċ" LATIN SMALL LETTER C WITH DOT ABOVE - /* morekeys_c */ "\u0107,\u010D,\u00E7,\u010B", - /* double_quotes */ null, - // U+00DF: "ß" LATIN SMALL LETTER SHARP S - // U+0161: "š" LATIN SMALL LETTER S WITH CARON - // U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE - // U+0219: "ș" LATIN SMALL LETTER S WITH COMMA BELOW - // U+015F: "ş" LATIN SMALL LETTER S WITH CEDILLA - /* morekeys_s */ "\u00DF,\u0161,\u015B,\u0219,\u015F", - /* single_quotes */ null, - /* keyspec_currency */ null, - // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE - // U+0177: "ŷ" LATIN SMALL LETTER Y WITH CIRCUMFLEX - // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS - // U+00FE: "þ" LATIN SMALL LETTER THORN - /* morekeys_y */ "y,\u00FD,\u0177,\u00FF,\u00FE", - // U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE - // U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE - // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON - /* morekeys_z */ "\u017A,\u017C,\u017E", - // U+00F0: "ð" LATIN SMALL LETTER ETH - // U+010F: "ď" LATIN SMALL LETTER D WITH CARON - // U+0111: "đ" LATIN SMALL LETTER D WITH STROKE - /* morekeys_d */ "\u00F0,\u010F,\u0111", - // U+0165: "ť" LATIN SMALL LETTER T WITH CARON - // U+021B: "ț" LATIN SMALL LETTER T WITH COMMA BELOW - // U+0163: "ţ" LATIN SMALL LETTER T WITH CEDILLA - // U+0167: "ŧ" LATIN SMALL LETTER T WITH STROKE - /* morekeys_t */ "\u0165,\u021B,\u0163,\u0167", - // U+013A: "ĺ" LATIN SMALL LETTER L WITH ACUTE - // U+013C: "ļ" LATIN SMALL LETTER L WITH CEDILLA - // U+013E: "ľ" LATIN SMALL LETTER L WITH CARON - // U+0140: "ŀ" LATIN SMALL LETTER L WITH MIDDLE DOT - // U+0142: "ł" LATIN SMALL LETTER L WITH STROKE - /* morekeys_l */ "\u013A,\u013C,\u013E,\u0140,\u0142", - // U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE - // U+0121: "ġ" LATIN SMALL LETTER G WITH DOT ABOVE - // U+0123: "ģ" LATIN SMALL LETTER G WITH CEDILLA - /* morekeys_g */ "\u011F,\u0121,\u0123", - /* single_angle_quotes */ null, - /* double_angle_quotes */ null, - // U+0159: "ř" LATIN SMALL LETTER R WITH CARON - // U+0155: "ŕ" LATIN SMALL LETTER R WITH ACUTE - // U+0157: "ŗ" LATIN SMALL LETTER R WITH CEDILLA - /* morekeys_r */ "\u0159,\u0155,\u0157", - /* keylabel_to_symbol ~ */ - null, null, null, null, null, null, null, null, null, null, null, - /* ~ additional_morekeys_symbols_0 */ - // U+0137: "ķ" LATIN SMALL LETTER K WITH CEDILLA - // U+0138: "ĸ" LATIN SMALL LETTER KRA - /* morekeys_k */ "\u0137,\u0138", - /* morekeys_cyrillic_ie ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, - /* ~ morekeys_symbols_percent */ - // U+0125: "ĥ" LATIN SMALL LETTER H WITH CIRCUMFLEX - // U+0127: "ħ" LATIN SMALL LETTER H WITH STROKE - /* morekeys_h */ "\u0125,\u0127", - // U+0175: "ŵ" LATIN SMALL LETTER W WITH CIRCUMFLEX - /* morekeys_w */ "w,\u0175", - /* morekeys_east_slavic_row2_2 ~ */ - null, null, null, null, null, null, null, null, null, null, null, - /* ~ morekeys_tablet_punctuation */ - // U+0135: "ĵ" LATIN SMALL LETTER J WITH CIRCUMFLEX - /* keyspec_spanish_row2_10 */ "\u0135", - /* morekeys_bullet ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - /* ~ label_wait_key */ - // U+0175: "ŵ" LATIN SMALL LETTER W WITH CIRCUMFLEX - /* morekeys_v */ "w,\u0175", - /* morekeys_j */ null, - /* morekeys_q */ "q", - /* morekeys_x */ "x", - // U+015D: "ŝ" LATIN SMALL LETTER S WITH CIRCUMFLEX - /* keyspec_q */ "\u015D", - // U+011D: "ĝ" LATIN SMALL LETTER G WITH CIRCUMFLEX - /* keyspec_w */ "\u011D", - // U+016D: "ŭ" LATIN SMALL LETTER U WITH BREVE - /* keyspec_y */ "\u016D", - // U+0109: "ĉ" LATIN SMALL LETTER C WITH CIRCUMFLEX - /* keyspec_x */ "\u0109", - }; - - /* Locale es: Spanish */ - private static final String[] TEXTS_es = { - // U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE - // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - // U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX - // U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE - // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE - // U+0105: "ą" LATIN SMALL LETTER A WITH OGONEK - // U+00E6: "æ" LATIN SMALL LETTER AE - // U+0101: "ā" LATIN SMALL LETTER A WITH MACRON - // U+00AA: "ª" FEMININE ORDINAL INDICATOR - /* morekeys_a */ "\u00E1,\u00E0,\u00E4,\u00E2,\u00E3,\u00E5,\u0105,\u00E6,\u0101,\u00AA", - // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE - // U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - // U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX - // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - // U+0153: "œ" LATIN SMALL LIGATURE OE - // U+014D: "ō" LATIN SMALL LETTER O WITH MACRON - // U+00BA: "º" MASCULINE ORDINAL INDICATOR - /* morekeys_o */ "\u00F3,\u00F2,\u00F6,\u00F4,\u00F5,\u00F8,\u0153,\u014D,\u00BA", - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE - // U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS - // U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX - // U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK - // U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE - // U+0113: "ē" LATIN SMALL LETTER E WITH MACRON - /* morekeys_e */ "\u00E9,\u00E8,\u00EB,\u00EA,\u0119,\u0117,\u0113", - /* keylabel_to_alpha */ null, - // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE - // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX - // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON - /* morekeys_u */ "\u00FA,\u00FC,\u00F9,\u00FB,\u016B", - // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE - // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS - // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE - // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX - // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK - // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON - /* morekeys_i */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B", - // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE - // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE - /* morekeys_n */ "\u00F1,\u0144", - // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA - // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE - // U+010D: "č" LATIN SMALL LETTER C WITH CARON - /* morekeys_c */ "\u00E7,\u0107,\u010D", - /* double_quotes ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, - /* ~ morekeys_swiss_row2_11 */ - // U+00A1: "¡" INVERTED EXCLAMATION MARK - // U+00BF: "¿" INVERTED QUESTION MARK - /* morekeys_punctuation */ "!autoColumnOrder!9,\\,,?,!,#,),(,/,;,\u00A1,',@,:,-,\",+,\\%,&,\u00BF", - }; - - /* Locale et: Estonian */ - private static final String[] TEXTS_et = { - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - // U+0101: "ā" LATIN SMALL LETTER A WITH MACRON - // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE - // U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE - // U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX - // U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE - // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE - // U+00E6: "æ" LATIN SMALL LETTER AE - // U+0105: "ą" LATIN SMALL LETTER A WITH OGONEK - /* morekeys_a */ "\u00E4,\u0101,\u00E0,\u00E1,\u00E2,\u00E3,\u00E5,\u00E6,\u0105", - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE - // U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE - // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE - // U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX - // U+0153: "œ" LATIN SMALL LIGATURE OE - // U+0151: "ő" LATIN SMALL LETTER O WITH DOUBLE ACUTE - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - /* morekeys_o */ "\u00F6,\u00F5,\u00F2,\u00F3,\u00F4,\u0153,\u0151,\u00F8", - // U+0113: "ē" LATIN SMALL LETTER E WITH MACRON - // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE - // U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - // U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX - // U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS - // U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK - // U+011B: "ě" LATIN SMALL LETTER E WITH CARON - /* morekeys_e */ "\u0113,\u00E8,\u0117,\u00E9,\u00EA,\u00EB,\u0119,\u011B", - /* keylabel_to_alpha */ null, - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON - // U+0173: "ų" LATIN SMALL LETTER U WITH OGONEK - // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE - // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE - // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX - // U+016F: "ů" LATIN SMALL LETTER U WITH RING ABOVE - // U+0171: "ű" LATIN SMALL LETTER U WITH DOUBLE ACUTE - /* morekeys_u */ "\u00FC,\u016B,\u0173,\u00F9,\u00FA,\u00FB,\u016F,\u0171", - // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON - // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE - // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK - // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE - // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX - // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS - // U+0131: "ı" LATIN SMALL LETTER DOTLESS I - /* morekeys_i */ "\u012B,\u00EC,\u012F,\u00ED,\u00EE,\u00EF,\u0131", - // U+0146: "ņ" LATIN SMALL LETTER N WITH CEDILLA - // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE - // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE - /* morekeys_n */ "\u0146,\u00F1,\u0144", - // U+010D: "č" LATIN SMALL LETTER C WITH CARON - // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA - // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE - /* morekeys_c */ "\u010D,\u00E7,\u0107", - /* double_quotes */ "!text/double_9qm_lqm", - // U+0161: "š" LATIN SMALL LETTER S WITH CARON - // U+00DF: "ß" LATIN SMALL LETTER SHARP S - // U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE - // U+015F: "ş" LATIN SMALL LETTER S WITH CEDILLA - /* morekeys_s */ "\u0161,\u00DF,\u015B,\u015F", - /* single_quotes */ "!text/single_9qm_lqm", - /* keyspec_currency */ null, - // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE - // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS - /* morekeys_y */ "\u00FD,\u00FF", - // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON - // U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE - // U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE - /* morekeys_z */ "\u017E,\u017C,\u017A", - // U+010F: "ď" LATIN SMALL LETTER D WITH CARON - /* morekeys_d */ "\u010F", - // U+0163: "ţ" LATIN SMALL LETTER T WITH CEDILLA - // U+0165: "ť" LATIN SMALL LETTER T WITH CARON - /* morekeys_t */ "\u0163,\u0165", - // U+013C: "ļ" LATIN SMALL LETTER L WITH CEDILLA - // U+0142: "ł" LATIN SMALL LETTER L WITH STROKE - // U+013A: "ĺ" LATIN SMALL LETTER L WITH ACUTE - // U+013E: "ľ" LATIN SMALL LETTER L WITH CARON - /* morekeys_l */ "\u013C,\u0142,\u013A,\u013E", - // U+0123: "ģ" LATIN SMALL LETTER G WITH CEDILLA - // U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE - /* morekeys_g */ "\u0123,\u011F", - /* single_angle_quotes */ null, - /* double_angle_quotes */ null, - // U+0157: "ŗ" LATIN SMALL LETTER R WITH CEDILLA - // U+0159: "ř" LATIN SMALL LETTER R WITH CARON - // U+0155: "ŕ" LATIN SMALL LETTER R WITH ACUTE - /* morekeys_r */ "\u0157,\u0159,\u0155", - /* keylabel_to_symbol ~ */ - null, null, null, null, null, null, null, null, null, null, null, - /* ~ additional_morekeys_symbols_0 */ - // U+0137: "ķ" LATIN SMALL LETTER K WITH CEDILLA - /* morekeys_k */ "\u0137", - /* morekeys_cyrillic_ie ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, - /* ~ morekeys_tablet_period */ - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - /* keyspec_nordic_row1_11 */ "\u00FC", - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - /* keyspec_nordic_row2_10 */ "\u00F6", - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - /* keyspec_nordic_row2_11 */ "\u00E4", - // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE - /* morekeys_nordic_row2_10 */ "\u00F5", - }; - - /* Locale eu: Basque */ - private static final String[] TEXTS_eu = { - // U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE - // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - // U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX - // U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE - // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE - // U+0105: "ą" LATIN SMALL LETTER A WITH OGONEK - // U+00E6: "æ" LATIN SMALL LETTER AE - // U+0101: "ā" LATIN SMALL LETTER A WITH MACRON - // U+00AA: "ª" FEMININE ORDINAL INDICATOR - /* morekeys_a */ "\u00E1,\u00E0,\u00E4,\u00E2,\u00E3,\u00E5,\u0105,\u00E6,\u0101,\u00AA", - // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE - // U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - // U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX - // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - // U+0153: "œ" LATIN SMALL LIGATURE OE - // U+014D: "ō" LATIN SMALL LETTER O WITH MACRON - // U+00BA: "º" MASCULINE ORDINAL INDICATOR - /* morekeys_o */ "\u00F3,\u00F2,\u00F6,\u00F4,\u00F5,\u00F8,\u0153,\u014D,\u00BA", - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE - // U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS - // U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX - // U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK - // U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE - // U+0113: "ē" LATIN SMALL LETTER E WITH MACRON - /* morekeys_e */ "\u00E9,\u00E8,\u00EB,\u00EA,\u0119,\u0117,\u0113", - /* keylabel_to_alpha */ null, - // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE - // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX - // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON - /* morekeys_u */ "\u00FA,\u00FC,\u00F9,\u00FB,\u016B", - // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE - // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS - // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE - // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX - // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK - // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON - /* morekeys_i */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B", - // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE - // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE - /* morekeys_n */ "\u00F1,\u0144", - // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA - // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE - // U+010D: "č" LATIN SMALL LETTER C WITH CARON - /* morekeys_c */ "\u00E7,\u0107,\u010D", - }; - - /* Locale fa: Persian */ - private static final String[] TEXTS_fa = { - /* morekeys_a ~ */ - null, null, null, - /* ~ morekeys_e */ - // Label for "switch to alphabetic" key. - // U+0627: "ا" ARABIC LETTER ALEF - // U+200C: ZERO WIDTH NON-JOINER - // U+0628: "ب" ARABIC LETTER BEH - // U+067E: "پ" ARABIC LETTER PEH - /* keylabel_to_alpha */ "\u0627\u200C\u0628\u200C\u067E", - /* morekeys_u ~ */ - null, null, null, null, null, null, null, - /* ~ single_quotes */ - // U+FDFC: "﷼" RIAL SIGN - /* keyspec_currency */ "\uFDFC", - /* morekeys_y ~ */ - null, null, null, null, null, null, null, null, null, - /* ~ morekeys_r */ - // Label for "switch to symbols" key. - // U+061F: "؟" ARABIC QUESTION MARK - /* keylabel_to_symbol */ "\u06F3\u06F2\u06F1\u061F", - /* additional_morekeys_symbols_1 */ "1", - /* additional_morekeys_symbols_2 */ "2", - /* additional_morekeys_symbols_3 */ "3", - /* additional_morekeys_symbols_4 */ "4", - /* additional_morekeys_symbols_5 */ "5", - /* additional_morekeys_symbols_6 */ "6", - /* additional_morekeys_symbols_7 */ "7", - /* additional_morekeys_symbols_8 */ "8", - /* additional_morekeys_symbols_9 */ "9", - // U+066B: "٫" ARABIC DECIMAL SEPARATOR - // U+066C: "٬" ARABIC THOUSANDS SEPARATOR - /* additional_morekeys_symbols_0 */ "0,\u066B,\u066C", - /* morekeys_k */ null, - /* morekeys_cyrillic_ie */ null, - // U+06F1: "۱" EXTENDED ARABIC-INDIC DIGIT ONE - /* keyspec_symbols_1 */ "\u06F1", - // U+06F2: "۲" EXTENDED ARABIC-INDIC DIGIT TWO - /* keyspec_symbols_2 */ "\u06F2", - // U+06F3: "۳" EXTENDED ARABIC-INDIC DIGIT THREE - /* keyspec_symbols_3 */ "\u06F3", - // U+06F4: "۴" EXTENDED ARABIC-INDIC DIGIT FOUR - /* keyspec_symbols_4 */ "\u06F4", - // U+06F5: "۵" EXTENDED ARABIC-INDIC DIGIT FIVE - /* keyspec_symbols_5 */ "\u06F5", - // U+06F6: "۶" EXTENDED ARABIC-INDIC DIGIT SIX - /* keyspec_symbols_6 */ "\u06F6", - // U+06F7: "۷" EXTENDED ARABIC-INDIC DIGIT SEVEN - /* keyspec_symbols_7 */ "\u06F7", - // U+06F8: "۸" EXTENDED ARABIC-INDIC DIGIT EIGHT - /* keyspec_symbols_8 */ "\u06F8", - // U+06F9: "۹" EXTENDED ARABIC-INDIC DIGIT NINE - /* keyspec_symbols_9 */ "\u06F9", - // U+06F0: "۰" EXTENDED ARABIC-INDIC DIGIT ZERO - /* keyspec_symbols_0 */ "\u06F0", - /* keyspec_period */ null, - /* morekeys_period */ "!text/morekeys_arabic_diacritics", - /* morekeys_tablet_period */ "!text/morekeys_arabic_diacritics", - /* keyspec_nordic_row1_11 ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, - /* ~ morekeys_punctuation */ - // U+2605: "★" BLACK STAR - // U+066D: "٭" ARABIC FIVE POINTED STAR - /* morekeys_star */ "\u2605,\u066D", - /* keyspec_left_parenthesis */ "(|)", - /* keyspec_right_parenthesis */ ")|(", - /* keyspec_left_square_bracket */ "[|]", - /* keyspec_right_square_bracket */ "]|[", - /* keyspec_left_curly_bracket */ "{|}", - /* keyspec_right_curly_bracket */ "}|{", - /* keyspec_less_than */ "<|>", - /* keyspec_greater_than */ ">|<", - /* keyspec_less_than_equal */ "\u2264|\u2265", - /* keyspec_greater_than_equal */ "\u2265|\u2264", - /* keyspec_left_double_angle_quote */ "\u00AB|\u00BB", - /* keyspec_right_double_angle_quote */ "\u00BB|\u00AB", - /* keyspec_left_single_angle_quote */ "\u2039|\u203A", - /* keyspec_right_single_angle_quote */ "\u203A|\u2039", - // U+060C: "،" ARABIC COMMA - /* keyspec_comma */ "\u060C", - // U+060C: "،" ARABIC COMMA - // U+061B: "؛" ARABIC SEMICOLON - // U+061F: "؟" ARABIC QUESTION MARK - // U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - // U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - /* keyspec_tablet_comma */ "\u060C", - // The all letters need to be mirrored are found at - // http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt - // U+FD3E: "﴾" ORNATE LEFT PARENTHESIS - // U+FD3F: "﴿" ORNATE RIGHT PARENTHESIS - /* morekeys_left_parenthesis */ "!fixedColumnOrder!4,\uFD3E|\uFD3F,!text/keyspecs_left_parenthesis_more_keys", - /* morekeys_right_parenthesis */ "!fixedColumnOrder!4,\uFD3F|\uFD3E,!text/keyspecs_right_parenthesis_more_keys", - /* morekeys_tablet_comma */ "!fixedColumnOrder!4,:,!,\u061F,\u061B,-,!text/keyspec_left_double_angle_quote,!text/keyspec_right_double_angle_quote", - // U+064B: "ً" ARABIC FATHATAN - /* keyhintlabel_period */ "\u064B", - /* keyspec_symbols_question */ "\u061F", - /* keyspec_symbols_semicolon */ "\u061B", - // U+066A: "٪" ARABIC PERCENT SIGN - /* keyspec_symbols_percent */ "\u066A", - // U+00BF: "¿" INVERTED QUESTION MARK - /* morekeys_question */ "?,\u00BF", - // U+2030: "‰" PER MILLE SIGN - /* morekeys_symbols_percent */ "\\%,\u2030", - /* morekeys_h ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, - /* ~ keyspec_spanish_row2_10 */ - // U+266A: "♪" EIGHTH NOTE - /* morekeys_bullet */ "\u266A", - // U+2264: "≤" LESS-THAN OR EQUAL TO - // U+2265: "≥" GREATER-THAN EQUAL TO - // U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - // U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - // U+2039: "‹" SINGLE LEFT-POINTING ANGLE QUOTATION MARK - // U+203A: "›" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - /* morekeys_less_than */ "!fixedColumnOrder!3,!text/keyspec_left_single_angle_quote,!text/keyspec_less_than_equal,!text/keyspec_less_than", - /* morekeys_greater_than */ "!fixedColumnOrder!3,!text/keyspec_right_single_angle_quote,!text/keyspec_greater_than_equal,!text/keyspec_greater_than", - // U+0655: "ٕ" ARABIC HAMZA BELOW - // U+0652: "ْ" ARABIC SUKUN - // U+0651: "ّ" ARABIC SHADDA - // U+064C: "ٌ" ARABIC DAMMATAN - // U+064D: "ٍ" ARABIC KASRATAN - // U+064B: "ً" ARABIC FATHATAN - // U+0654: "ٔ" ARABIC HAMZA ABOVE - // U+0656: "ٖ" ARABIC SUBSCRIPT ALEF - // U+0670: "ٰ" ARABIC LETTER SUPERSCRIPT ALEF - // U+0653: "ٓ" ARABIC MADDAH ABOVE - // U+064F: "ُ" ARABIC DAMMA - // U+0650: "ِ" ARABIC KASRA - // U+064E: "َ" ARABIC FATHA - // U+0640: "ـ" ARABIC TATWEEL - // In order to make Tatweel easily distinguishable from other punctuations, we use consecutive Tatweels only for its displayed label. - // Note: The space character is needed as a preceding letter to draw Arabic diacritics characters correctly. - /* morekeys_arabic_diacritics */ "!fixedColumnOrder!7, \u0655|\u0655, \u0652|\u0652, \u0651|\u0651, \u064C|\u064C, \u064D|\u064D, \u064B|\u064B, \u0654|\u0654, \u0656|\u0656, \u0670|\u0670, \u0653|\u0653, \u064F|\u064F, \u0650|\u0650, \u064E|\u064E,\u0640\u0640\u0640|\u0640", - /* keyhintlabel_tablet_comma */ "\u061F", - /* keyhintlabel_tablet_period */ "\u064B", - /* morekeys_symbols_semicolon */ ";", - }; - - /* Locale fi: Finnish */ - private static final String[] TEXTS_fi = { - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE - // U+00E6: "æ" LATIN SMALL LETTER AE - // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE - // U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE - // U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX - // U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE - // U+0101: "ā" LATIN SMALL LETTER A WITH MACRON - /* morekeys_a */ "\u00E4,\u00E5,\u00E6,\u00E0,\u00E1,\u00E2,\u00E3,\u0101", - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - // U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX - // U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE - // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE - // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE - // U+0153: "œ" LATIN SMALL LIGATURE OE - // U+014D: "ō" LATIN SMALL LETTER O WITH MACRON - /* morekeys_o */ "\u00F6,\u00F8,\u00F4,\u00F2,\u00F3,\u00F5,\u0153,\u014D", - /* morekeys_e */ null, - /* keylabel_to_alpha */ null, - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - /* morekeys_u */ "\u00FC", - /* morekeys_i ~ */ - null, null, null, null, - /* ~ double_quotes */ - // U+0161: "š" LATIN SMALL LETTER S WITH CARON - // U+00DF: "ß" LATIN SMALL LETTER SHARP S - // U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE - /* morekeys_s */ "\u0161,\u00DF,\u015B", - /* single_quotes ~ */ - null, null, null, - /* ~ morekeys_y */ - // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON - // U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE - // U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE - /* morekeys_z */ "\u017E,\u017A,\u017C", - /* morekeys_d ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, - /* ~ morekeys_tablet_period */ - // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE - /* keyspec_nordic_row1_11 */ "\u00E5", - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - /* keyspec_nordic_row2_10 */ "\u00F6", - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - /* keyspec_nordic_row2_11 */ "\u00E4", - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - /* morekeys_nordic_row2_10 */ "\u00F8", - /* keyspec_east_slavic_row1_9 ~ */ - null, null, null, null, null, null, - /* ~ keyspec_tablet_period */ - // U+00E6: "æ" LATIN SMALL LETTER AE - /* morekeys_nordic_row2_11 */ "\u00E6", - }; - - /* Locale fr: French */ - private static final String[] TEXTS_fr = { - // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE - // U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX - // U+00E6: "æ" LATIN SMALL LETTER AE - // U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - // U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE - // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE - // U+0101: "ā" LATIN SMALL LETTER A WITH MACRON - // U+00AA: "ª" FEMININE ORDINAL INDICATOR - /* morekeys_a */ "\u00E0,\u00E2,%,\u00E6,\u00E1,\u00E4,\u00E3,\u00E5,\u0101,\u00AA", - // U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX - // U+0153: "œ" LATIN SMALL LIGATURE OE - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - // U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE - // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE - // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - // U+014D: "ō" LATIN SMALL LETTER O WITH MACRON - // U+00BA: "º" MASCULINE ORDINAL INDICATOR - /* morekeys_o */ "\u00F4,\u0153,%,\u00F6,\u00F2,\u00F3,\u00F5,\u00F8,\u014D,\u00BA", - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE - // U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX - // U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS - // U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK - // U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE - // U+0113: "ē" LATIN SMALL LETTER E WITH MACRON - /* morekeys_e */ "\u00E9,\u00E8,\u00EA,\u00EB,%,\u0119,\u0117,\u0113", - /* keylabel_to_alpha */ null, - // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE - // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE - // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON - /* morekeys_u */ "\u00F9,\u00FB,%,\u00FC,\u00FA,\u016B", - // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX - // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS - // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE - // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE - // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK - // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON - /* morekeys_i */ "\u00EE,%,\u00EF,\u00EC,\u00ED,\u012F,\u012B", - /* morekeys_n */ null, - // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA - // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE - // U+010D: "č" LATIN SMALL LETTER C WITH CARON - /* morekeys_c */ "\u00E7,%,\u0107,\u010D", - /* double_quotes ~ */ - null, null, null, null, - /* ~ keyspec_currency */ - // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS - /* morekeys_y */ "%,\u00FF", - /* morekeys_z ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - /* ~ morekeys_nordic_row2_11 */ - // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE - /* keyspec_swiss_row1_11 */ "\u00E8", - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - /* keyspec_swiss_row2_10 */ "\u00E9", - // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE - /* keyspec_swiss_row2_11 */ "\u00E0", - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - /* morekeys_swiss_row1_11 */ "\u00FC", - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - /* morekeys_swiss_row2_10 */ "\u00F6", - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - /* morekeys_swiss_row2_11 */ "\u00E4", - }; - - /* Locale gl: Galician */ - private static final String[] TEXTS_gl = { - // U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE - // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - // U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX - // U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE - // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE - // U+0105: "ą" LATIN SMALL LETTER A WITH OGONEK - // U+00E6: "æ" LATIN SMALL LETTER AE - // U+0101: "ā" LATIN SMALL LETTER A WITH MACRON - // U+00AA: "ª" FEMININE ORDINAL INDICATOR - /* morekeys_a */ "\u00E1,\u00E0,\u00E4,\u00E2,\u00E3,\u00E5,\u0105,\u00E6,\u0101,\u00AA", - // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE - // U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - // U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX - // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - // U+0153: "œ" LATIN SMALL LIGATURE OE - // U+014D: "ō" LATIN SMALL LETTER O WITH MACRON - // U+00BA: "º" MASCULINE ORDINAL INDICATOR - /* morekeys_o */ "\u00F3,\u00F2,\u00F6,\u00F4,\u00F5,\u00F8,\u0153,\u014D,\u00BA", - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE - // U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS - // U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX - // U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK - // U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE - // U+0113: "ē" LATIN SMALL LETTER E WITH MACRON - /* morekeys_e */ "\u00E9,\u00E8,\u00EB,\u00EA,\u0119,\u0117,\u0113", - /* keylabel_to_alpha */ null, - // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE - // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX - // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON - /* morekeys_u */ "\u00FA,\u00FC,\u00F9,\u00FB,\u016B", - // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE - // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS - // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE - // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX - // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK - // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON - /* morekeys_i */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B", - // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE - // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE - /* morekeys_n */ "\u00F1,\u0144", - // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA - // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE - // U+010D: "č" LATIN SMALL LETTER C WITH CARON - /* morekeys_c */ "\u00E7,\u0107,\u010D", - }; - - /* Locale he: Hebrew */ - private static final String[] TEXTS_he = { - /* morekeys_a ~ */ - null, null, null, - /* ~ morekeys_e */ - // Label for "switch to alphabetic" key. - // U+05D0: "א" HEBREW LETTER ALEF - // U+05D1: "ב" HEBREW LETTER BET - // U+05D2: "ג" HEBREW LETTER GIMEL - /* keylabel_to_alpha */ "\u05D0\u05D1\u05D2", - /* morekeys_u ~ */ - null, null, null, null, - /* ~ morekeys_c */ - /* double_quotes */ "!text/double_rqm_9qm", - /* morekeys_s */ null, - /* single_quotes */ "!text/single_rqm_9qm", - // U+20AA: "₪" NEW SHEQEL SIGN - /* keyspec_currency */ "\u20AA", - /* morekeys_y ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - /* ~ morekeys_punctuation */ - // U+2605: "★" BLACK STAR - /* morekeys_star */ "\u2605", - // The all letters need to be mirrored are found at - // http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt - // U+2264: "≤" LESS-THAN OR EQUAL TO - // U+2265: "≥" GREATER-THAN EQUAL TO - // U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - // U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - // U+2039: "‹" SINGLE LEFT-POINTING ANGLE QUOTATION MARK - // U+203A: "›" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - /* keyspec_left_parenthesis */ "(|)", - /* keyspec_right_parenthesis */ ")|(", - /* keyspec_left_square_bracket */ "[|]", - /* keyspec_right_square_bracket */ "]|[", - /* keyspec_left_curly_bracket */ "{|}", - /* keyspec_right_curly_bracket */ "}|{", - /* keyspec_less_than */ "<|>", - /* keyspec_greater_than */ ">|<", - /* keyspec_less_than_equal */ "\u2264|\u2265", - /* keyspec_greater_than_equal */ "\u2265|\u2264", - /* keyspec_left_double_angle_quote */ "\u00AB|\u00BB", - /* keyspec_right_double_angle_quote */ "\u00BB|\u00AB", - /* keyspec_left_single_angle_quote */ "\u2039|\u203A", - /* keyspec_right_single_angle_quote */ "\u203A|\u2039", - /* keyspec_comma ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, - /* ~ morekeys_currency_dollar */ - // U+00B1: "±" PLUS-MINUS SIGN - // U+FB29: "﬩" HEBREW LETTER ALTERNATIVE PLUS SIGN - /* morekeys_plus */ "\u00B1,\uFB29", - }; - - /* Locale hi: Hindi */ - private static final String[] TEXTS_hi = { - /* morekeys_a ~ */ - null, null, null, - /* ~ morekeys_e */ - // Label for "switch to alphabetic" key. - // U+0915: "क" DEVANAGARI LETTER KA - // U+0916: "ख" DEVANAGARI LETTER KHA - // U+0917: "ग" DEVANAGARI LETTER GA - /* keylabel_to_alpha */ "\u0915\u0916\u0917", - /* morekeys_u ~ */ - null, null, null, null, null, null, null, - /* ~ single_quotes */ - // U+20B9: "₹" INDIAN RUPEE SIGN - /* keyspec_currency */ "\u20B9", - /* morekeys_y ~ */ - null, null, null, null, null, null, null, null, null, - /* ~ morekeys_r */ - // Label for "switch to symbols" key. - /* keylabel_to_symbol */ "?\u0967\u0968\u0969", - /* additional_morekeys_symbols_1 */ "1", - /* additional_morekeys_symbols_2 */ "2", - /* additional_morekeys_symbols_3 */ "3", - /* additional_morekeys_symbols_4 */ "4", - /* additional_morekeys_symbols_5 */ "5", - /* additional_morekeys_symbols_6 */ "6", - /* additional_morekeys_symbols_7 */ "7", - /* additional_morekeys_symbols_8 */ "8", - /* additional_morekeys_symbols_9 */ "9", - /* additional_morekeys_symbols_0 */ "0", - /* morekeys_k */ null, - /* morekeys_cyrillic_ie */ null, - // U+0967: "१" DEVANAGARI DIGIT ONE - /* keyspec_symbols_1 */ "\u0967", - // U+0968: "२" DEVANAGARI DIGIT TWO - /* keyspec_symbols_2 */ "\u0968", - // U+0969: "३" DEVANAGARI DIGIT THREE - /* keyspec_symbols_3 */ "\u0969", - // U+096A: "४" DEVANAGARI DIGIT FOUR - /* keyspec_symbols_4 */ "\u096A", - // U+096B: "५" DEVANAGARI DIGIT FIVE - /* keyspec_symbols_5 */ "\u096B", - // U+096C: "६" DEVANAGARI DIGIT SIX - /* keyspec_symbols_6 */ "\u096C", - // U+096D: "७" DEVANAGARI DIGIT SEVEN - /* keyspec_symbols_7 */ "\u096D", - // U+096E: "८" DEVANAGARI DIGIT EIGHT - /* keyspec_symbols_8 */ "\u096E", - // U+096F: "९" DEVANAGARI DIGIT NINE - /* keyspec_symbols_9 */ "\u096F", - // U+0966: "०" DEVANAGARI DIGIT ZERO - /* keyspec_symbols_0 */ "\u0966", - // U+0964: "।" DEVANAGARI DANDA - /* keyspec_period */ "\u0964", - /* morekeys_period */ "!autoColumnOrder!9,\\,,.,?,!,#,),(,/,;,',@,:,-,\",+,\\%,&", - /* morekeys_tablet_period */ "!autoColumnOrder!8,\\,,.,',#,),(,/,;,@,:,-,\",+,\\%,&", - /* keyspec_nordic_row1_11 ~ */ - null, null, null, null, null, null, null, null, null, - /* ~ morekeys_cyrillic_soft_sign */ - /* keyspec_tablet_period */ "\u0964", - }; - - /* Locale hi_ZZ: Hindi (Unknown Region) */ - private static final String[] TEXTS_hi_ZZ = { - /* morekeys_a ~ */ - null, null, null, null, null, null, null, null, null, null, null, - /* ~ single_quotes */ - // U+20B9: "₹" INDIAN RUPEE SIGN - /* keyspec_currency */ "\u20B9", - /* morekeys_y ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, - /* ~ morekeys_symbols_semicolon */ - /* label_go_key */ "Go", - /* label_send_key */ "Send", - /* label_next_key */ "Next", - /* label_done_key */ "Done", - /* label_search_key */ "Search", - /* label_previous_key */ "Prev", - /* label_pause_key */ "Pause", - /* label_wait_key */ "Wait", - }; - - /* Locale hr: Croatian */ - private static final String[] TEXTS_hr = { - /* morekeys_a ~ */ - null, null, null, null, null, null, - /* ~ morekeys_i */ - // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE - // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE - /* morekeys_n */ "\u00F1,\u0144", - // U+010D: "č" LATIN SMALL LETTER C WITH CARON - // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE - // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA - /* morekeys_c */ "\u010D,\u0107,\u00E7", - /* double_quotes */ "!text/double_9qm_rqm", - // U+0161: "š" LATIN SMALL LETTER S WITH CARON - // U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE - // U+00DF: "ß" LATIN SMALL LETTER SHARP S - /* morekeys_s */ "\u0161,\u015B,\u00DF", - /* single_quotes */ "!text/single_9qm_rqm", - /* keyspec_currency */ null, - /* morekeys_y */ null, - // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON - // U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE - // U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE - /* morekeys_z */ "\u017E,\u017A,\u017C", - // U+0111: "đ" LATIN SMALL LETTER D WITH STROKE - /* morekeys_d */ "\u0111", - /* morekeys_t ~ */ - null, null, null, - /* ~ morekeys_g */ - /* single_angle_quotes */ "!text/single_raqm_laqm", - /* double_angle_quotes */ "!text/double_raqm_laqm", - }; - - /* Locale hu: Hungarian */ - private static final String[] TEXTS_hu = { - // U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE - /* morekeys_a */ "\u00E1", - // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - // U+0151: "ő" LATIN SMALL LETTER O WITH DOUBLE ACUTE - /* morekeys_o */ "\u00F3,\u00F6,\u0151", - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - /* morekeys_e */ "\u00E9", - /* keylabel_to_alpha */ null, - // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - // U+0171: "ű" LATIN SMALL LETTER U WITH DOUBLE ACUTE - /* morekeys_u */ "\u00FA,\u00FC,\u0171", - // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE - /* morekeys_i */ "\u00ED", - /* morekeys_n */ null, - /* morekeys_c */ null, - /* double_quotes */ "!text/double_9qm_rqm", - /* morekeys_s */ null, - /* single_quotes */ "!text/single_9qm_rqm", - /* keyspec_currency ~ */ - null, null, null, null, null, null, null, - /* ~ morekeys_g */ - /* single_angle_quotes */ "!text/single_raqm_laqm", - /* double_angle_quotes */ "!text/double_raqm_laqm", - }; - - /* Locale hy: Armenian */ - private static final String[] TEXTS_hy = { - /* morekeys_a ~ */ - null, null, null, - /* ~ morekeys_e */ - // Label for "switch to alphabetic" key. - // U+0531: "Ա" ARMENIAN CAPITAL LETTER AYB - // U+0532: "Բ" ARMENIAN CAPITAL LETTER BEN - // U+0533: "Գ" ARMENIAN CAPITAL LETTER GIM - /* keylabel_to_alpha */ "\u0531\u0532\u0533", - /* morekeys_u ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, - /* ~ keyspec_symbols_0 */ - // U+0589: "։" ARMENIAN FULL STOP - /* keyspec_period */ "\u0589", - /* morekeys_period */ null, - /* morekeys_tablet_period */ "!text/morekeys_punctuation", - /* keyspec_nordic_row1_11 ~ */ - null, null, null, null, null, null, null, null, null, - /* ~ morekeys_cyrillic_soft_sign */ - /* keyspec_tablet_period */ "\u0589", - /* morekeys_nordic_row2_11 ~ */ - null, null, null, null, null, null, null, - /* ~ morekeys_swiss_row2_11 */ - // - // ( U+0028 "(" Բացվող փակագիծ - OPENING PARENTHESES - // ) U+0029 ")" Փակվող փակագիծ - CLOSING PARENTHESES - // ' U+0027 "'" Ապաթարց - APOSTROPHE - // … U+2026 "…" Կախման կետեր - HORIZONTAL ELLIPSIS - // ՞ U+055E "՞" Հարցական - ARMENIAN QUESTION MARK - // ՜ U+055C "՜" Բացականչական - ARMENIAN EXCLAMATION MARK - // ՛ U+055B "՛" Շեշտ - ARMENIAN EMPHASIS MARK - // ՝ U+055D "՝" Բութ - ARMENIAN COMMA - // !! (the unicode name is Armenian Comma, which isn't really accurate since Armenian Comma is U+002C) - // ֊ U+058A "֊" Միության գծիկ - ARMENIAN HYPHEN - // ― U+2015 "―" Անջատման գժիկ - ARMENIAN SEPARATION MARK - // « U+00AB "«" Բացվող չակերտ - LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - // » U+00BB "»" Փակվող չակերտ - RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - // , U+002C "," Ստօրակետ - ARMENIAN COMMA - // ։ U+0589 "։" Վերջակետ - ARMENIAN COLON - // ․ U+2024 "․" Միջակետ - One dot leader - // - /* morekeys_punctuation */ "!autoColumnOrder!8,\\,,\u055E,\u055C,\u2024,\u2026,',=,/,\u055D,\u055B,\u058A,\u00BB,\u00AB,\u2015,),(", - /* morekeys_star ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - /* ~ keyspec_right_single_angle_quote */ - // U+058F: "֏" ARMENIAN DRAM SIGN - // TODO: Enable this when we have glyph for the following letter - // ֏ - // - // U+002C: "," ARMENIAN COMMA - /* keyspec_comma */ ",", - /* keyspec_tablet_comma */ ",", - /* morekeys_left_parenthesis ~ */ - null, null, null, null, null, null, null, - /* ~ keyspec_symbols_percent */ - // U+055E: "՞" ARMENIAN QUESTION MARK - // U+00BF: "¿" INVERTED QUESTION MARK - /* morekeys_question */ "\u055E,\u00BF", - /* morekeys_symbols_percent ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, - /* ~ morekeys_plus */ - // U+055C: "՜" ARMENIAN EXCLAMATION MARK - // U+00A1: "¡" INVERTED EXCLAMATION MARK - /* morekeys_exclamation */ "\u055C,\u00A1", - }; - - /* Locale is: Icelandic */ - private static final String[] TEXTS_is = { - // U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - // U+00E6: "æ" LATIN SMALL LETTER AE - // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE - // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE - // U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX - // U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE - // U+0101: "ā" LATIN SMALL LETTER A WITH MACRON - /* morekeys_a */ "\u00E1,\u00E4,\u00E6,\u00E5,\u00E0,\u00E2,\u00E3,\u0101", - // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - // U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX - // U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE - // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE - // U+0153: "œ" LATIN SMALL LIGATURE OE - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - // U+014D: "ō" LATIN SMALL LETTER O WITH MACRON - /* morekeys_o */ "\u00F3,\u00F6,\u00F4,\u00F2,\u00F5,\u0153,\u00F8,\u014D", - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - // U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS - // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE - // U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX - // U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK - // U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE - // U+0113: "ē" LATIN SMALL LETTER E WITH MACRON - /* morekeys_e */ "\u00E9,\u00EB,\u00E8,\u00EA,\u0119,\u0117,\u0113", - /* keylabel_to_alpha */ null, - // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX - // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE - // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON - /* morekeys_u */ "\u00FA,\u00FC,\u00FB,\u00F9,\u016B", - // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE - // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS - // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX - // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE - // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK - // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON - /* morekeys_i */ "\u00ED,\u00EF,\u00EE,\u00EC,\u012F,\u012B", - /* morekeys_n */ null, - /* morekeys_c */ null, - /* double_quotes */ "!text/double_9qm_lqm", - /* morekeys_s */ null, - /* single_quotes */ "!text/single_9qm_lqm", - /* keyspec_currency */ null, - // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE - // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS - /* morekeys_y */ "\u00FD,\u00FF", - /* morekeys_z */ null, - // U+00F0: "ð" LATIN SMALL LETTER ETH - /* morekeys_d */ "\u00F0", - // U+00FE: "þ" LATIN SMALL LETTER THORN - /* morekeys_t */ "\u00FE", - }; - - /* Locale it: Italian */ - private static final String[] TEXTS_it = { - // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE - // U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE - // U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - // U+00E6: "æ" LATIN SMALL LETTER AE - // U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE - // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE - // U+0101: "ā" LATIN SMALL LETTER A WITH MACRON - // U+00AA: "ª" FEMININE ORDINAL INDICATOR - /* morekeys_a */ "\u00E0,\u00E1,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101,\u00AA", - // U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE - // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE - // U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE - // U+0153: "œ" LATIN SMALL LIGATURE OE - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - // U+014D: "ō" LATIN SMALL LETTER O WITH MACRON - // U+00BA: "º" MASCULINE ORDINAL INDICATOR - /* morekeys_o */ "\u00F2,\u00F3,\u00F4,\u00F6,\u00F5,\u0153,\u00F8,\u014D,\u00BA", - // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - // U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX - // U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS - // U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK - // U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE - // U+0113: "ē" LATIN SMALL LETTER E WITH MACRON - // U+0259: "ə" LATIN SMALL LETTER SCHWA - /* morekeys_e */ "\u00E8,\u00E9,\u00EA,\u00EB,\u0119,\u0117,\u0113,\u0259", - /* keylabel_to_alpha */ null, - // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE - // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE - // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON - /* morekeys_u */ "\u00F9,\u00FA,\u00FB,\u00FC,\u016B", - // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE - // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE - // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX - // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS - // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK - // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON - /* morekeys_i */ "\u00EC,\u00ED,\u00EE,\u00EF,\u012F,\u012B", - /* morekeys_n ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, - /* ~ morekeys_nordic_row2_11 */ - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - /* keyspec_swiss_row1_11 */ "\u00FC", - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - /* keyspec_swiss_row2_10 */ "\u00F6", - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - /* keyspec_swiss_row2_11 */ "\u00E4", - // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE - /* morekeys_swiss_row1_11 */ "\u00E8", - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - /* morekeys_swiss_row2_10 */ "\u00E9", - // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE - /* morekeys_swiss_row2_11 */ "\u00E0", - }; - - /* Locale ka: Georgian */ - private static final String[] TEXTS_ka = { - /* morekeys_a ~ */ - null, null, null, - /* ~ morekeys_e */ - // Label for "switch to alphabetic" key. - // U+10D0: "ა" GEORGIAN LETTER AN - // U+10D1: "ბ" GEORGIAN LETTER BAN - // U+10D2: "გ" GEORGIAN LETTER GAN - /* keylabel_to_alpha */ "\u10D0\u10D1\u10D2", - /* morekeys_u ~ */ - null, null, null, null, - /* ~ morekeys_c */ - /* double_quotes */ "!text/double_9qm_lqm", - /* morekeys_s */ null, - /* single_quotes */ "!text/single_9qm_lqm", - }; - - /* Locale kk: Kazakh */ - private static final String[] TEXTS_kk = { - /* morekeys_a ~ */ - null, null, null, - /* ~ morekeys_e */ - // Label for "switch to alphabetic" key. - // U+0410: "А" CYRILLIC CAPITAL LETTER A - // U+0411: "Б" CYRILLIC CAPITAL LETTER BE - // U+0412: "В" CYRILLIC CAPITAL LETTER VE - /* keylabel_to_alpha */ "\u0410\u0411\u0412", - /* morekeys_u ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, - /* ~ morekeys_k */ - // U+0451: "ё" CYRILLIC SMALL LETTER IO - /* morekeys_cyrillic_ie */ "\u0451", - /* keyspec_symbols_1 ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, - /* ~ morekeys_nordic_row2_10 */ - // U+0449: "щ" CYRILLIC SMALL LETTER SHCHA - /* keyspec_east_slavic_row1_9 */ "\u0449", - // U+044B: "ы" CYRILLIC SMALL LETTER YERU - /* keyspec_east_slavic_row2_2 */ "\u044B", - // U+044D: "э" CYRILLIC SMALL LETTER E - /* keyspec_east_slavic_row2_11 */ "\u044D", - // U+0438: "и" CYRILLIC SMALL LETTER I - /* keyspec_east_slavic_row3_5 */ "\u0438", - // U+044A: "ъ" CYRILLIC SMALL LETTER HARD SIGN - /* morekeys_cyrillic_soft_sign */ "\u044A", - /* keyspec_tablet_period ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, - /* ~ morekeys_w */ - // U+0456: "і" CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I - /* morekeys_east_slavic_row2_2 */ "\u0456", - // U+04AF: "ү" CYRILLIC SMALL LETTER STRAIGHT U - // U+04B1: "ұ" CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE - /* morekeys_cyrillic_u */ "\u04AF,\u04B1", - // U+04A3: "ң" CYRILLIC SMALL LETTER EN WITH DESCENDER - /* morekeys_cyrillic_en */ "\u04A3", - // U+0493: "ғ" CYRILLIC SMALL LETTER GHE WITH STROKE - /* morekeys_cyrillic_ghe */ "\u0493", - // U+04E9: "ө" CYRILLIC SMALL LETTER BARRED O - /* morekeys_cyrillic_o */ "\u04E9", - /* morekeys_cyrillic_i ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - /* ~ keyspec_x */ - // U+04BB: "һ" CYRILLIC SMALL LETTER SHHA - /* morekeys_east_slavic_row2_11 */ "\u04BB", - // U+049B: "қ" CYRILLIC SMALL LETTER KA WITH DESCENDER - /* morekeys_cyrillic_ka */ "\u049B", - // U+04D9: "ә" CYRILLIC SMALL LETTER SCHWA - /* morekeys_cyrillic_a */ "\u04D9", - }; - - /* Locale km: Khmer */ - private static final String[] TEXTS_km = { - /* morekeys_a ~ */ - null, null, null, - /* ~ morekeys_e */ - // Label for "switch to alphabetic" key. - // U+1780: "ក" KHMER LETTER KA - // U+1781: "ខ" KHMER LETTER KHA - // U+1782: "គ" KHMER LETTER KO - /* keylabel_to_alpha */ "\u1780\u1781\u1782", - /* morekeys_u ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, - /* ~ morekeys_cyrillic_a */ - // U+17DB: "៛" KHMER CURRENCY SYMBOL RIEL - /* morekeys_currency_dollar */ "\u17DB,\u00A2,\u00A3,\u20AC,\u00A5,\u20B1", - }; - - /* Locale kn: Kannada */ - private static final String[] TEXTS_kn = { - /* morekeys_a ~ */ - null, null, null, - /* ~ morekeys_e */ - // Label for "switch to alphabetic" key. - // U+0C85: "ಅ" KANNADA LETTER A - // U+0C86: "ಆ" KANNADA LETTER AA - // U+0C87: "ಇ" KANNADA LETTER I - /* keylabel_to_alpha */ "\u0C85\u0C86\u0C87", - /* morekeys_u ~ */ - null, null, null, null, null, null, null, - /* ~ single_quotes */ - // U+20B9: "₹" INDIAN RUPEE SIGN - /* keyspec_currency */ "\u20B9", - }; - - /* Locale ko: Korean */ - private static final String[] TEXTS_ko = { - /* morekeys_a ~ */ - null, null, null, - /* ~ morekeys_e */ - // Label for "switch to alphabetic" key. - // U+0995: "ᄀ" HANGUL LETTER KIYEOK - // U+0996: "ㄴ" HANGUL LETTER NIEUN - // U+0997: "ㄷ" HANGUL LETTER TIKEUT - /* keylabel_to_alpha */ "\u3131\u3134\u3137", - /* morekeys_u ~ */ - null, null, null, null, null, null, null, - /* ~ single_quotes */ - // U+20B9: "₩" FULLWIDTH WON SIGN - /* keyspec_currency */ "\uFFE6", - }; - - /* Locale ky: Kyrgyz */ - private static final String[] TEXTS_ky = { - /* morekeys_a ~ */ - null, null, null, - /* ~ morekeys_e */ - // Label for "switch to alphabetic" key. - // U+0410: "А" CYRILLIC CAPITAL LETTER A - // U+0411: "Б" CYRILLIC CAPITAL LETTER BE - // U+0412: "В" CYRILLIC CAPITAL LETTER VE - /* keylabel_to_alpha */ "\u0410\u0411\u0412", - /* morekeys_u ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, - /* ~ morekeys_k */ - // U+0451: "ё" CYRILLIC SMALL LETTER IO - /* morekeys_cyrillic_ie */ "\u0451", - /* keyspec_symbols_1 ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, - /* ~ morekeys_nordic_row2_10 */ - // U+0449: "щ" CYRILLIC SMALL LETTER SHCHA - /* keyspec_east_slavic_row1_9 */ "\u0449", - // U+044B: "ы" CYRILLIC SMALL LETTER YERU - /* keyspec_east_slavic_row2_2 */ "\u044B", - // U+044D: "э" CYRILLIC SMALL LETTER E - /* keyspec_east_slavic_row2_11 */ "\u044D", - // U+0438: "и" CYRILLIC SMALL LETTER I - /* keyspec_east_slavic_row3_5 */ "\u0438", - // U+044A: "ъ" CYRILLIC SMALL LETTER HARD SIGN - /* morekeys_cyrillic_soft_sign */ "\u044A", - /* keyspec_tablet_period ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, - /* ~ morekeys_east_slavic_row2_2 */ - // U+04AF: "ү" CYRILLIC SMALL LETTER STRAIGHT U - /* morekeys_cyrillic_u */ "\u04AF", - // U+04A3: "ң" CYRILLIC SMALL LETTER EN WITH DESCENDER - /* morekeys_cyrillic_en */ "\u04A3", - /* morekeys_cyrillic_ghe */ null, - // U+04E9: "ө" CYRILLIC SMALL LETTER BARRED O - /* morekeys_cyrillic_o */ "\u04E9", - }; - - /* Locale lo: Lao */ - private static final String[] TEXTS_lo = { - /* morekeys_a ~ */ - null, null, null, - /* ~ morekeys_e */ - // Label for "switch to alphabetic" key. - // U+0E81: "ກ" LAO LETTER KO - // U+0E82: "ຂ" LAO LETTER KHO SUNG - // U+0E84: "ຄ" LAO LETTER KHO TAM - /* keylabel_to_alpha */ "\u0E81\u0E82\u0E84", - /* morekeys_u ~ */ - null, null, null, null, null, null, null, - /* ~ single_quotes */ - // U+20AD: "₭" KIP SIGN - /* keyspec_currency */ "\u20AD", - }; - - /* Locale lt: Lithuanian */ - private static final String[] TEXTS_lt = { - // U+0105: "ą" LATIN SMALL LETTER A WITH OGONEK - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - // U+0101: "ā" LATIN SMALL LETTER A WITH MACRON - // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE - // U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE - // U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX - // U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE - // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE - // U+00E6: "æ" LATIN SMALL LETTER AE - /* morekeys_a */ "\u0105,\u00E4,\u0101,\u00E0,\u00E1,\u00E2,\u00E3,\u00E5,\u00E6", - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE - // U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE - // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE - // U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX - // U+0153: "œ" LATIN SMALL LIGATURE OE - // U+0151: "ő" LATIN SMALL LETTER O WITH DOUBLE ACUTE - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - /* morekeys_o */ "\u00F6,\u00F5,\u00F2,\u00F3,\u00F4,\u0153,\u0151,\u00F8", - // U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE - // U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK - // U+0113: "ē" LATIN SMALL LETTER E WITH MACRON - // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - // U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX - // U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS - // U+011B: "ě" LATIN SMALL LETTER E WITH CARON - /* morekeys_e */ "\u0117,\u0119,\u0113,\u00E8,\u00E9,\u00EA,\u00EB,\u011B", - /* keylabel_to_alpha */ null, - // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON - // U+0173: "ų" LATIN SMALL LETTER U WITH OGONEK - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON - // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE - // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE - // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX - // U+016F: "ů" LATIN SMALL LETTER U WITH RING ABOVE - // U+0171: "ű" LATIN SMALL LETTER U WITH DOUBLE ACUTE - /* morekeys_u */ "\u016B,\u0173,\u00FC,\u016B,\u00F9,\u00FA,\u00FB,\u016F,\u0171", - // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK - // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON - // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE - // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE - // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX - // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS - // U+0131: "ı" LATIN SMALL LETTER DOTLESS I - /* morekeys_i */ "\u012F,\u012B,\u00EC,\u00ED,\u00EE,\u00EF,\u0131", - // U+0146: "ņ" LATIN SMALL LETTER N WITH CEDILLA - // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE - // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE - /* morekeys_n */ "\u0146,\u00F1,\u0144", - // U+010D: "č" LATIN SMALL LETTER C WITH CARON - // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA - // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE - /* morekeys_c */ "\u010D,\u00E7,\u0107", - /* double_quotes */ "!text/double_9qm_lqm", - // U+0161: "š" LATIN SMALL LETTER S WITH CARON - // U+00DF: "ß" LATIN SMALL LETTER SHARP S - // U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE - // U+015F: "ş" LATIN SMALL LETTER S WITH CEDILLA - /* morekeys_s */ "\u0161,\u00DF,\u015B,\u015F", - /* single_quotes */ "!text/single_9qm_lqm", - /* keyspec_currency */ null, - // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE - // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS - /* morekeys_y */ "\u00FD,\u00FF", - // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON - // U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE - // U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE - /* morekeys_z */ "\u017E,\u017C,\u017A", - // U+010F: "ď" LATIN SMALL LETTER D WITH CARON - /* morekeys_d */ "\u010F", - // U+0163: "ţ" LATIN SMALL LETTER T WITH CEDILLA - // U+0165: "ť" LATIN SMALL LETTER T WITH CARON - /* morekeys_t */ "\u0163,\u0165", - // U+013C: "ļ" LATIN SMALL LETTER L WITH CEDILLA - // U+0142: "ł" LATIN SMALL LETTER L WITH STROKE - // U+013A: "ĺ" LATIN SMALL LETTER L WITH ACUTE - // U+013E: "ľ" LATIN SMALL LETTER L WITH CARON - /* morekeys_l */ "\u013C,\u0142,\u013A,\u013E", - // U+0123: "ģ" LATIN SMALL LETTER G WITH CEDILLA - // U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE - /* morekeys_g */ "\u0123,\u011F", - /* single_angle_quotes */ null, - /* double_angle_quotes */ null, - // U+0157: "ŗ" LATIN SMALL LETTER R WITH CEDILLA - // U+0159: "ř" LATIN SMALL LETTER R WITH CARON - // U+0155: "ŕ" LATIN SMALL LETTER R WITH ACUTE - /* morekeys_r */ "\u0157,\u0159,\u0155", - /* keylabel_to_symbol ~ */ - null, null, null, null, null, null, null, null, null, null, null, - /* ~ additional_morekeys_symbols_0 */ - // U+0137: "ķ" LATIN SMALL LETTER K WITH CEDILLA - /* morekeys_k */ "\u0137", - }; - - /* Locale lv: Latvian */ - private static final String[] TEXTS_lv = { - // U+0101: "ā" LATIN SMALL LETTER A WITH MACRON - // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE - // U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE - // U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX - // U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE - // U+00E6: "æ" LATIN SMALL LETTER AE - // U+0105: "ą" LATIN SMALL LETTER A WITH OGONEK - /* morekeys_a */ "\u0101,\u00E0,\u00E1,\u00E2,\u00E3,\u00E4,\u00E5,\u00E6,\u0105", - // U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE - // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE - // U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX - // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - // U+0153: "œ" LATIN SMALL LIGATURE OE - // U+0151: "ő" LATIN SMALL LETTER O WITH DOUBLE ACUTE - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - /* morekeys_o */ "\u00F2,\u00F3,\u00F4,\u00F5,\u00F6,\u0153,\u0151,\u00F8", - // U+0113: "ē" LATIN SMALL LETTER E WITH MACRON - // U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE - // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - // U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX - // U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS - // U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK - // U+011B: "ě" LATIN SMALL LETTER E WITH CARON - /* morekeys_e */ "\u0113,\u0117,\u00E8,\u00E9,\u00EA,\u00EB,\u0119,\u011B", - /* keylabel_to_alpha */ null, - // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON - // U+0173: "ų" LATIN SMALL LETTER U WITH OGONEK - // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE - // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE - // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - // U+016F: "ů" LATIN SMALL LETTER U WITH RING ABOVE - // U+0171: "ű" LATIN SMALL LETTER U WITH DOUBLE ACUTE - /* morekeys_u */ "\u016B,\u0173,\u00F9,\u00FA,\u00FB,\u00FC,\u016F,\u0171", - // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON - // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK - // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE - // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE - // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX - // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS - // U+0131: "ı" LATIN SMALL LETTER DOTLESS I - /* morekeys_i */ "\u012B,\u012F,\u00EC,\u00ED,\u00EE,\u00EF,\u0131", - // U+0146: "ņ" LATIN SMALL LETTER N WITH CEDILLA - // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE - // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE - /* morekeys_n */ "\u0146,\u00F1,\u0144", - // U+010D: "č" LATIN SMALL LETTER C WITH CARON - // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA - // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE - /* morekeys_c */ "\u010D,\u00E7,\u0107", - /* double_quotes */ "!text/double_9qm_lqm", - // U+0161: "š" LATIN SMALL LETTER S WITH CARON - // U+00DF: "ß" LATIN SMALL LETTER SHARP S - // U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE - // U+015F: "ş" LATIN SMALL LETTER S WITH CEDILLA - /* morekeys_s */ "\u0161,\u00DF,\u015B,\u015F", - /* single_quotes */ "!text/single_9qm_lqm", - /* keyspec_currency */ null, - // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE - // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS - /* morekeys_y */ "\u00FD,\u00FF", - // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON - // U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE - // U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE - /* morekeys_z */ "\u017E,\u017C,\u017A", - // U+010F: "ď" LATIN SMALL LETTER D WITH CARON - /* morekeys_d */ "\u010F", - // U+0163: "ţ" LATIN SMALL LETTER T WITH CEDILLA - // U+0165: "ť" LATIN SMALL LETTER T WITH CARON - /* morekeys_t */ "\u0163,\u0165", - // U+013C: "ļ" LATIN SMALL LETTER L WITH CEDILLA - // U+0142: "ł" LATIN SMALL LETTER L WITH STROKE - // U+013A: "ĺ" LATIN SMALL LETTER L WITH ACUTE - // U+013E: "ľ" LATIN SMALL LETTER L WITH CARON - /* morekeys_l */ "\u013C,\u0142,\u013A,\u013E", - // U+0123: "ģ" LATIN SMALL LETTER G WITH CEDILLA - // U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE - /* morekeys_g */ "\u0123,\u011F", - /* single_angle_quotes */ null, - /* double_angle_quotes */ null, - // U+0157: "ŗ" LATIN SMALL LETTER R WITH CEDILLA - // U+0159: "ř" LATIN SMALL LETTER R WITH CARON - // U+0155: "ŕ" LATIN SMALL LETTER R WITH ACUTE - /* morekeys_r */ "\u0157,\u0159,\u0155", - /* keylabel_to_symbol ~ */ - null, null, null, null, null, null, null, null, null, null, null, - /* ~ additional_morekeys_symbols_0 */ - // U+0137: "ķ" LATIN SMALL LETTER K WITH CEDILLA - /* morekeys_k */ "\u0137", - }; - - /* Locale mk: Macedonian */ - private static final String[] TEXTS_mk = { - /* morekeys_a ~ */ - null, null, null, - /* ~ morekeys_e */ - // Label for "switch to alphabetic" key. - // U+0410: "А" CYRILLIC CAPITAL LETTER A - // U+0411: "Б" CYRILLIC CAPITAL LETTER BE - // U+0412: "В" CYRILLIC CAPITAL LETTER VE - /* keylabel_to_alpha */ "\u0410\u0411\u0412", - /* morekeys_u ~ */ - null, null, null, null, - /* ~ morekeys_c */ - /* double_quotes */ "!text/double_9qm_lqm", - /* morekeys_s */ null, - /* single_quotes */ "!text/single_9qm_lqm", - /* keyspec_currency ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, - /* ~ morekeys_k */ - // U+0450: "ѐ" CYRILLIC SMALL LETTER IE WITH GRAVE - /* morekeys_cyrillic_ie */ "\u0450", - /* keyspec_symbols_1 ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, - /* ~ morekeys_cyrillic_o */ - // U+045D: "ѝ" CYRILLIC SMALL LETTER I WITH GRAVE - /* morekeys_cyrillic_i */ "\u045D", - // U+0455: "ѕ" CYRILLIC SMALL LETTER DZE - /* keyspec_south_slavic_row1_6 */ "\u0455", - // U+045C: "ќ" CYRILLIC SMALL LETTER KJE - /* keyspec_south_slavic_row2_11 */ "\u045C", - // U+0437: "з" CYRILLIC SMALL LETTER ZE - /* keyspec_south_slavic_row3_1 */ "\u0437", - // U+0453: "ѓ" CYRILLIC SMALL LETTER GJE - /* keyspec_south_slavic_row3_8 */ "\u0453", - }; - - /* Locale ml: Malayalam */ - private static final String[] TEXTS_ml = { - /* morekeys_a ~ */ - null, null, null, - /* ~ morekeys_e */ - // Label for "switch to alphabetic" key. - // U+0D05: "അ" MALAYALAM LETTER A - /* keylabel_to_alpha */ "\u0D05", - /* morekeys_u ~ */ - null, null, null, null, null, null, null, - /* ~ single_quotes */ - // U+20B9: "₹" INDIAN RUPEE SIGN - /* keyspec_currency */ "\u20B9", - }; - - /* Locale mn: Mongolian */ - private static final String[] TEXTS_mn = { - /* morekeys_a ~ */ - null, null, null, - /* ~ morekeys_e */ - // Label for "switch to alphabetic" key. - // U+0410: "А" CYRILLIC CAPITAL LETTER A - // U+0411: "Б" CYRILLIC CAPITAL LETTER BE - // U+0412: "В" CYRILLIC CAPITAL LETTER VE - /* keylabel_to_alpha */ "\u0410\u0411\u0412", - /* morekeys_u ~ */ - null, null, null, null, null, null, null, - /* ~ single_quotes */ - // U+20AE: "₮" TUGRIK SIGN - /* keyspec_currency */ "\u20AE", - }; - - /* Locale mr: Marathi */ - private static final String[] TEXTS_mr = { - /* morekeys_a ~ */ - null, null, null, - /* ~ morekeys_e */ - // Label for "switch to alphabetic" key. - // U+0915: "क" DEVANAGARI LETTER KA - // U+0916: "ख" DEVANAGARI LETTER KHA - // U+0917: "ग" DEVANAGARI LETTER GA - /* keylabel_to_alpha */ "\u0915\u0916\u0917", - /* morekeys_u ~ */ - null, null, null, null, null, null, null, - /* ~ single_quotes */ - // U+20B9: "₹" INDIAN RUPEE SIGN - /* keyspec_currency */ "\u20B9", - /* morekeys_y ~ */ - null, null, null, null, null, null, null, null, null, - /* ~ morekeys_r */ - // Label for "switch to symbols" key. - /* keylabel_to_symbol */ "?\u0967\u0968\u0969", - /* additional_morekeys_symbols_1 */ "1", - /* additional_morekeys_symbols_2 */ "2", - /* additional_morekeys_symbols_3 */ "3", - /* additional_morekeys_symbols_4 */ "4", - /* additional_morekeys_symbols_5 */ "5", - /* additional_morekeys_symbols_6 */ "6", - /* additional_morekeys_symbols_7 */ "7", - /* additional_morekeys_symbols_8 */ "8", - /* additional_morekeys_symbols_9 */ "9", - /* additional_morekeys_symbols_0 */ "0", - /* morekeys_k */ null, - /* morekeys_cyrillic_ie */ null, - // U+0967: "१" DEVANAGARI DIGIT ONE - /* keyspec_symbols_1 */ "\u0967", - // U+0968: "२" DEVANAGARI DIGIT TWO - /* keyspec_symbols_2 */ "\u0968", - // U+0969: "३" DEVANAGARI DIGIT THREE - /* keyspec_symbols_3 */ "\u0969", - // U+096A: "४" DEVANAGARI DIGIT FOUR - /* keyspec_symbols_4 */ "\u096A", - // U+096B: "५" DEVANAGARI DIGIT FIVE - /* keyspec_symbols_5 */ "\u096B", - // U+096C: "६" DEVANAGARI DIGIT SIX - /* keyspec_symbols_6 */ "\u096C", - // U+096D: "७" DEVANAGARI DIGIT SEVEN - /* keyspec_symbols_7 */ "\u096D", - // U+096E: "८" DEVANAGARI DIGIT EIGHT - /* keyspec_symbols_8 */ "\u096E", - // U+096F: "९" DEVANAGARI DIGIT NINE - /* keyspec_symbols_9 */ "\u096F", - // U+0966: "०" DEVANAGARI DIGIT ZERO - /* keyspec_symbols_0 */ "\u0966", - }; - - /* Locale my: Burmese */ - private static final String[] TEXTS_my = { - /* morekeys_a ~ */ - null, null, null, - /* ~ morekeys_e */ - // Label for "switch to alphabetic" key. - // U+1000: "က" MYANMAR LETTER KA - // U+1001: "ခ" MYANMAR LETTER KHA - // U+1002: "ဂ" MYANMAR LETTER GA - /* keylabel_to_alpha */ "\u1000\u1001\u1002", - /* morekeys_u ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, - /* ~ keyspec_symbols_0 */ - /* keyspec_period */ "\u104B", - /* morekeys_period ~ */ - null, null, null, null, null, null, null, null, null, null, null, - /* ~ morekeys_cyrillic_soft_sign */ - /* keyspec_tablet_period */ "\u104B", - /* morekeys_nordic_row2_11 ~ */ - null, null, null, null, null, null, null, - /* ~ morekeys_swiss_row2_11 */ - /* morekeys_punctuation */ "!autoColumnOrder!9,\u104A,.,?,!,#,),(,/,;,...,',@,:,-,\",+,\\%,&", - /* morekeys_star ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, - /* ~ keyspec_comma */ - // U+104A: "၊" MYANMAR SIGN LITTLE SECTION - // U+104B: "။" MYANMAR SIGN SECTION - /* keyspec_tablet_comma */ "\u104A", - /* morekeys_left_parenthesis */ null, - /* morekeys_right_parenthesis */ null, - /* morekeys_tablet_comma */ "\\,", - /* keyhintlabel_period */ "\u104A", - /* keyspec_symbols_question ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, - /* ~ keyspec_south_slavic_row3_8 */ - /* morekeys_tablet_punctuation */ "!autoColumnOrder!8,.,',#,),(,/,;,@,...,:,-,\",+,\\%,&", - }; - - /* Locale nb: Norwegian Bokmål */ - private static final String[] TEXTS_nb = { - // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE - // U+00E6: "æ" LATIN SMALL LETTER AE - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE - // U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE - // U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX - // U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE - // U+0101: "ā" LATIN SMALL LETTER A WITH MACRON - /* morekeys_a */ "\u00E5,\u00E6,\u00E4,\u00E0,\u00E1,\u00E2,\u00E3,\u0101", - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - // U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX - // U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE - // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE - // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE - // U+0153: "œ" LATIN SMALL LIGATURE OE - // U+014D: "ō" LATIN SMALL LETTER O WITH MACRON - /* morekeys_o */ "\u00F8,\u00F6,\u00F4,\u00F2,\u00F3,\u00F5,\u0153,\u014D", - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE - // U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX - // U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS - // U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK - // U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE - // U+0113: "ē" LATIN SMALL LETTER E WITH MACRON - /* morekeys_e */ "\u00E9,\u00E8,\u00EA,\u00EB,\u0119,\u0117,\u0113", - /* keylabel_to_alpha */ null, - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX - // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE - // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE - // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON - /* morekeys_u */ "\u00FC,\u00FB,\u00F9,\u00FA,\u016B", - /* morekeys_i ~ */ - null, null, null, - /* ~ morekeys_c */ - /* double_quotes */ "!text/double_9qm_rqm", - /* morekeys_s */ null, - /* single_quotes */ "!text/single_9qm_rqm", - /* keyspec_currency ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, - /* ~ morekeys_tablet_period */ - // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE - /* keyspec_nordic_row1_11 */ "\u00E5", - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - /* keyspec_nordic_row2_10 */ "\u00F8", - // U+00E6: "æ" LATIN SMALL LETTER AE - /* keyspec_nordic_row2_11 */ "\u00E6", - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - /* morekeys_nordic_row2_10 */ "\u00F6", - /* keyspec_east_slavic_row1_9 ~ */ - null, null, null, null, null, null, - /* ~ keyspec_tablet_period */ - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - /* morekeys_nordic_row2_11 */ "\u00E4", - }; - - /* Locale ne: Nepali */ - private static final String[] TEXTS_ne = { - /* morekeys_a ~ */ - null, null, null, - /* ~ morekeys_e */ - // Label for "switch to alphabetic" key. - // U+0915: "क" DEVANAGARI LETTER KA - // U+0916: "ख" DEVANAGARI LETTER KHA - // U+0917: "ग" DEVANAGARI LETTER GA - /* keylabel_to_alpha */ "\u0915\u0916\u0917", - /* morekeys_u ~ */ - null, null, null, null, null, null, null, - /* ~ single_quotes */ - // U+0930/U+0941/U+002E "रु." NEPALESE RUPEE SIGN - /* keyspec_currency */ "\u0930\u0941.", - /* morekeys_y ~ */ - null, null, null, null, null, null, null, null, null, - /* ~ morekeys_r */ - // Label for "switch to symbols" key. - /* keylabel_to_symbol */ "?\u0967\u0968\u0969", - /* additional_morekeys_symbols_1 */ "1", - /* additional_morekeys_symbols_2 */ "2", - /* additional_morekeys_symbols_3 */ "3", - /* additional_morekeys_symbols_4 */ "4", - /* additional_morekeys_symbols_5 */ "5", - /* additional_morekeys_symbols_6 */ "6", - /* additional_morekeys_symbols_7 */ "7", - /* additional_morekeys_symbols_8 */ "8", - /* additional_morekeys_symbols_9 */ "9", - /* additional_morekeys_symbols_0 */ "0", - /* morekeys_k */ null, - /* morekeys_cyrillic_ie */ null, - // U+0967: "१" DEVANAGARI DIGIT ONE - /* keyspec_symbols_1 */ "\u0967", - // U+0968: "२" DEVANAGARI DIGIT TWO - /* keyspec_symbols_2 */ "\u0968", - // U+0969: "३" DEVANAGARI DIGIT THREE - /* keyspec_symbols_3 */ "\u0969", - // U+096A: "४" DEVANAGARI DIGIT FOUR - /* keyspec_symbols_4 */ "\u096A", - // U+096B: "५" DEVANAGARI DIGIT FIVE - /* keyspec_symbols_5 */ "\u096B", - // U+096C: "६" DEVANAGARI DIGIT SIX - /* keyspec_symbols_6 */ "\u096C", - // U+096D: "७" DEVANAGARI DIGIT SEVEN - /* keyspec_symbols_7 */ "\u096D", - // U+096E: "८" DEVANAGARI DIGIT EIGHT - /* keyspec_symbols_8 */ "\u096E", - // U+096F: "९" DEVANAGARI DIGIT NINE - /* keyspec_symbols_9 */ "\u096F", - // U+0966: "०" DEVANAGARI DIGIT ZERO - /* keyspec_symbols_0 */ "\u0966", - // U+0964: "।" DEVANAGARI DANDA - /* keyspec_period */ "\u0964", - /* morekeys_period */ "!autoColumnOrder!9,.,\\,,?,!,#,),(,/,;,',@,:,-,\",+,\\%,&", - /* morekeys_tablet_period */ "!autoColumnOrder!8,.,\\,,',#,),(,/,;,@,:,-,\",+,\\%,&", - /* keyspec_nordic_row1_11 ~ */ - null, null, null, null, null, null, null, null, null, - /* ~ morekeys_cyrillic_soft_sign */ - /* keyspec_tablet_period */ "\u0964", - }; - - /* Locale nl: Dutch */ - private static final String[] TEXTS_nl = { - // U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - // U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX - // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE - // U+00E6: "æ" LATIN SMALL LETTER AE - // U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE - // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE - // U+0101: "ā" LATIN SMALL LETTER A WITH MACRON - /* morekeys_a */ "\u00E1,\u00E4,\u00E2,\u00E0,\u00E6,\u00E3,\u00E5,\u0101", - // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - // U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX - // U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE - // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE - // U+0153: "œ" LATIN SMALL LIGATURE OE - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - // U+014D: "ō" LATIN SMALL LETTER O WITH MACRON - /* morekeys_o */ "\u00F3,\u00F6,\u00F4,\u00F2,\u00F5,\u0153,\u00F8,\u014D", - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - // U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS - // U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX - // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE - // U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK - // U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE - // U+0113: "ē" LATIN SMALL LETTER E WITH MACRON - /* morekeys_e */ "\u00E9,\u00EB,\u00EA,\u00E8,\u0119,\u0117,\u0113", - /* keylabel_to_alpha */ null, - // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX - // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE - // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON - /* morekeys_u */ "\u00FA,\u00FC,\u00FB,\u00F9,\u016B", - // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE - // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS - // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE - // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX - // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK - // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON - // U+0133: "ij" LATIN SMALL LIGATURE IJ - /* morekeys_i */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B,\u0133", - // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE - // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE - /* morekeys_n */ "\u00F1,\u0144", - /* morekeys_c */ null, - /* double_quotes */ "!text/double_9qm_rqm", - /* morekeys_s */ null, - /* single_quotes */ "!text/single_9qm_rqm", - /* keyspec_currency */ null, - // U+0133: "ij" LATIN SMALL LIGATURE IJ - /* morekeys_y */ "\u0133", - }; - - /* Locale pl: Polish */ - private static final String[] TEXTS_pl = { - // U+0105: "ą" LATIN SMALL LETTER A WITH OGONEK - // U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE - // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE - // U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - // U+00E6: "æ" LATIN SMALL LETTER AE - // U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE - // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE - // U+0101: "ā" LATIN SMALL LETTER A WITH MACRON - /* morekeys_a */ "\u0105,\u00E1,\u00E0,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101", - // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - // U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX - // U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE - // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE - // U+0153: "œ" LATIN SMALL LIGATURE OE - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - // U+014D: "ō" LATIN SMALL LETTER O WITH MACRON - /* morekeys_o */ "\u00F3,\u00F6,\u00F4,\u00F2,\u00F5,\u0153,\u00F8,\u014D", - // U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK - // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - // U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX - // U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS - // U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE - // U+0113: "ē" LATIN SMALL LETTER E WITH MACRON - /* morekeys_e */ "\u0119,\u00E8,\u00E9,\u00EA,\u00EB,\u0117,\u0113", - /* keylabel_to_alpha ~ */ - null, null, null, - /* ~ morekeys_i */ - // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE - // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE - /* morekeys_n */ "\u0144,\u00F1", - // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE - // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA - // U+010D: "č" LATIN SMALL LETTER C WITH CARON - /* morekeys_c */ "\u0107,\u00E7,\u010D", - /* double_quotes */ "!text/double_9qm_rqm", - // U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE - // U+00DF: "ß" LATIN SMALL LETTER SHARP S - // U+0161: "š" LATIN SMALL LETTER S WITH CARON - /* morekeys_s */ "\u015B,\u00DF,\u0161", - /* single_quotes */ "!text/single_9qm_rqm", - /* keyspec_currency */ null, - /* morekeys_y */ null, - // U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE - // U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE - // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON - /* morekeys_z */ "\u017C,\u017A,\u017E", - /* morekeys_d */ null, - /* morekeys_t */ null, - // U+0142: "ł" LATIN SMALL LETTER L WITH STROKE - /* morekeys_l */ "\u0142", - }; - - /* Locale pt: Portuguese */ - private static final String[] TEXTS_pt = { - // U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE - // U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE - // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE - // U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE - // U+00E6: "æ" LATIN SMALL LETTER AE - // U+00AA: "ª" FEMININE ORDINAL INDICATOR - /* morekeys_a */ "\u00E1,\u00E3,\u00E0,\u00E2,\u00E4,\u00E5,\u00E6,\u00AA", - // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE - // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE - // U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX - // U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - // U+0153: "œ" LATIN SMALL LIGATURE OE - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - // U+014D: "ō" LATIN SMALL LETTER O WITH MACRON - // U+00BA: "º" MASCULINE ORDINAL INDICATOR - /* morekeys_o */ "\u00F3,\u00F5,\u00F4,\u00F2,\u00F6,\u0153,\u00F8,\u014D,\u00BA", - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - // U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX - // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE - // U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK - // U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE - // U+0113: "ē" LATIN SMALL LETTER E WITH MACRON - // U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS - /* morekeys_e */ "\u00E9,\u00EA,\u00E8,\u0119,\u0117,\u0113,\u00EB", - /* keylabel_to_alpha */ null, - // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE - // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX - // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON - /* morekeys_u */ "\u00FA,\u00FC,\u00F9,\u00FB,\u016B", - // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE - // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX - // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE - // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS - // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK - // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON - /* morekeys_i */ "\u00ED,\u00EE,\u00EC,\u00EF,\u012F,\u012B", - /* morekeys_n */ null, - // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA - // U+010D: "č" LATIN SMALL LETTER C WITH CARON - // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE - /* morekeys_c */ "\u00E7,\u010D,\u0107", - }; - - /* Locale rm: Romansh */ - private static final String[] TEXTS_rm = { - /* morekeys_a */ null, - // U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE - // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - // U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX - // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE - // U+0153: "œ" LATIN SMALL LIGATURE OE - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - /* morekeys_o */ "\u00F2,\u00F3,\u00F6,\u00F4,\u00F5,\u0153,\u00F8", - }; - - /* Locale ro: Romanian */ - private static final String[] TEXTS_ro = { - // U+0103: "ă" LATIN SMALL LETTER A WITH BREVE - // U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX - // U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE - // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE - // U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - // U+00E6: "æ" LATIN SMALL LETTER AE - // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE - // U+0101: "ā" LATIN SMALL LETTER A WITH MACRON - /* morekeys_a */ "\u0103,\u00E2,\u00E3,\u00E0,\u00E1,\u00E4,\u00E6,\u00E5,\u0101", - /* morekeys_o ~ */ - null, null, null, null, - /* ~ morekeys_u */ - // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX - // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS - // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE - // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE - // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK - // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON - /* morekeys_i */ "\u00EE,\u00EF,\u00EC,\u00ED,\u012F,\u012B", - /* morekeys_n */ null, - /* morekeys_c */ null, - /* double_quotes */ "!text/double_9qm_rqm", - // U+0219: "ș" LATIN SMALL LETTER S WITH COMMA BELOW - // U+00DF: "ß" LATIN SMALL LETTER SHARP S - // U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE - // U+0161: "š" LATIN SMALL LETTER S WITH CARON - /* morekeys_s */ "\u0219,\u00DF,\u015B,\u0161", - /* single_quotes */ "!text/single_9qm_rqm", - /* keyspec_currency ~ */ - null, null, null, null, - /* ~ morekeys_d */ - // U+021B: "ț" LATIN SMALL LETTER T WITH COMMA BELOW - /* morekeys_t */ "\u021B", - }; - - /* Locale ru: Russian */ - private static final String[] TEXTS_ru = { - /* morekeys_a ~ */ - null, null, null, - /* ~ morekeys_e */ - // Label for "switch to alphabetic" key. - // U+0410: "А" CYRILLIC CAPITAL LETTER A - // U+0411: "Б" CYRILLIC CAPITAL LETTER BE - // U+0412: "В" CYRILLIC CAPITAL LETTER VE - /* keylabel_to_alpha */ "\u0410\u0411\u0412", - /* morekeys_u ~ */ - null, null, null, null, - /* ~ morekeys_c */ - /* double_quotes */ "!text/double_9qm_lqm", - /* morekeys_s */ null, - /* single_quotes */ "!text/single_9qm_lqm", - /* keyspec_currency ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, - /* ~ morekeys_k */ - // U+0451: "ё" CYRILLIC SMALL LETTER IO - /* morekeys_cyrillic_ie */ "\u0451", - /* keyspec_symbols_1 ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, - /* ~ morekeys_nordic_row2_10 */ - // U+0449: "щ" CYRILLIC SMALL LETTER SHCHA - /* keyspec_east_slavic_row1_9 */ "\u0449", - // U+044B: "ы" CYRILLIC SMALL LETTER YERU - /* keyspec_east_slavic_row2_2 */ "\u044B", - // U+044D: "э" CYRILLIC SMALL LETTER E - /* keyspec_east_slavic_row2_11 */ "\u044D", - // U+0438: "и" CYRILLIC SMALL LETTER I - /* keyspec_east_slavic_row3_5 */ "\u0438", - // U+044A: "ъ" CYRILLIC SMALL LETTER HARD SIGN - /* morekeys_cyrillic_soft_sign */ "\u044A", - }; - - /* Locale si: Sinhala */ - private static final String[] TEXTS_si = { - /* morekeys_a ~ */ - null, null, null, - /* ~ morekeys_e */ - // Label for "switch to alphabetic" key. - // U+0D85: "අ" SINHALA LETTER AYANNA - // U+0D86: "ආ" SINHALA LETTER AAYANNA - /* keylabel_to_alpha */ "\u0D85,\u0D86", - /* morekeys_u ~ */ - null, null, null, null, null, null, null, - /* ~ single_quotes */ - // U+0DBB/U+0DD4: "රු" SINHALA LETTER RAYANNA/SINHALA VOWEL SIGN KETTI PAA-PILLA - /* keyspec_currency */ "\u0DBB\u0DD4", - }; - - /* Locale sk: Slovak */ - private static final String[] TEXTS_sk = { - // U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - // U+0101: "ā" LATIN SMALL LETTER A WITH MACRON - // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE - // U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX - // U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE - // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE - // U+00E6: "æ" LATIN SMALL LETTER AE - // U+0105: "ą" LATIN SMALL LETTER A WITH OGONEK - /* morekeys_a */ "\u00E1,\u00E4,\u0101,\u00E0,\u00E2,\u00E3,\u00E5,\u00E6,\u0105", - // U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX - // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - // U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE - // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE - // U+0153: "œ" LATIN SMALL LIGATURE OE - // U+0151: "ő" LATIN SMALL LETTER O WITH DOUBLE ACUTE - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - /* morekeys_o */ "\u00F4,\u00F3,\u00F6,\u00F2,\u00F5,\u0153,\u0151,\u00F8", - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - // U+011B: "ě" LATIN SMALL LETTER E WITH CARON - // U+0113: "ē" LATIN SMALL LETTER E WITH MACRON - // U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE - // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE - // U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX - // U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS - // U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK - /* morekeys_e */ "\u00E9,\u011B,\u0113,\u0117,\u00E8,\u00EA,\u00EB,\u0119", - /* keylabel_to_alpha */ null, - // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE - // U+016F: "ů" LATIN SMALL LETTER U WITH RING ABOVE - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON - // U+0173: "ų" LATIN SMALL LETTER U WITH OGONEK - // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE - // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX - // U+0171: "ű" LATIN SMALL LETTER U WITH DOUBLE ACUTE - /* morekeys_u */ "\u00FA,\u016F,\u00FC,\u016B,\u0173,\u00F9,\u00FB,\u0171", - // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE - // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON - // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK - // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE - // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX - // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS - // U+0131: "ı" LATIN SMALL LETTER DOTLESS I - /* morekeys_i */ "\u00ED,\u012B,\u012F,\u00EC,\u00EE,\u00EF,\u0131", - // U+0148: "ň" LATIN SMALL LETTER N WITH CARON - // U+0146: "ņ" LATIN SMALL LETTER N WITH CEDILLA - // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE - // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE - /* morekeys_n */ "\u0148,\u0146,\u00F1,\u0144", - // U+010D: "č" LATIN SMALL LETTER C WITH CARON - // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA - // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE - /* morekeys_c */ "\u010D,\u00E7,\u0107", - /* double_quotes */ "!text/double_9qm_lqm", - // U+0161: "š" LATIN SMALL LETTER S WITH CARON - // U+00DF: "ß" LATIN SMALL LETTER SHARP S - // U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE - // U+015F: "ş" LATIN SMALL LETTER S WITH CEDILLA - /* morekeys_s */ "\u0161,\u00DF,\u015B,\u015F", - /* single_quotes */ "!text/single_9qm_lqm", - /* keyspec_currency */ null, - // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE - // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS - /* morekeys_y */ "\u00FD,\u00FF", - // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON - // U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE - // U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE - /* morekeys_z */ "\u017E,\u017C,\u017A", - // U+010F: "ď" LATIN SMALL LETTER D WITH CARON - /* morekeys_d */ "\u010F", - // U+0165: "ť" LATIN SMALL LETTER T WITH CARON - // U+0163: "ţ" LATIN SMALL LETTER T WITH CEDILLA - /* morekeys_t */ "\u0165,\u0163", - // U+013E: "ľ" LATIN SMALL LETTER L WITH CARON - // U+013A: "ĺ" LATIN SMALL LETTER L WITH ACUTE - // U+013C: "ļ" LATIN SMALL LETTER L WITH CEDILLA - // U+0142: "ł" LATIN SMALL LETTER L WITH STROKE - /* morekeys_l */ "\u013E,\u013A,\u013C,\u0142", - // U+0123: "ģ" LATIN SMALL LETTER G WITH CEDILLA - // U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE - /* morekeys_g */ "\u0123,\u011F", - /* single_angle_quotes */ "!text/single_raqm_laqm", - /* double_angle_quotes */ "!text/double_raqm_laqm", - // U+0155: "ŕ" LATIN SMALL LETTER R WITH ACUTE - // U+0159: "ř" LATIN SMALL LETTER R WITH CARON - // U+0157: "ŗ" LATIN SMALL LETTER R WITH CEDILLA - /* morekeys_r */ "\u0155,\u0159,\u0157", - /* keylabel_to_symbol ~ */ - null, null, null, null, null, null, null, null, null, null, null, - /* ~ additional_morekeys_symbols_0 */ - // U+0137: "ķ" LATIN SMALL LETTER K WITH CEDILLA - /* morekeys_k */ "\u0137", - }; - - /* Locale sl: Slovenian */ - private static final String[] TEXTS_sl = { - /* morekeys_a ~ */ - null, null, null, null, null, null, null, - /* ~ morekeys_n */ - // U+010D: "č" LATIN SMALL LETTER C WITH CARON - // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE - /* morekeys_c */ "\u010D,\u0107", - /* double_quotes */ "!text/double_9qm_lqm", - // U+0161: "š" LATIN SMALL LETTER S WITH CARON - /* morekeys_s */ "\u0161", - /* single_quotes */ "!text/single_9qm_lqm", - /* keyspec_currency */ null, - /* morekeys_y */ null, - // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON - /* morekeys_z */ "\u017E", - // U+0111: "đ" LATIN SMALL LETTER D WITH STROKE - /* morekeys_d */ "\u0111", - /* morekeys_t ~ */ - null, null, null, - /* ~ morekeys_g */ - /* single_angle_quotes */ "!text/single_raqm_laqm", - /* double_angle_quotes */ "!text/double_raqm_laqm", - }; - - /* Locale sr: Serbian */ - private static final String[] TEXTS_sr = { - /* morekeys_a ~ */ - null, null, null, - /* ~ morekeys_e */ - // END: More keys definitions for Serbian (Cyrillic) - // Label for "switch to alphabetic" key. - // U+0410: "А" CYRILLIC CAPITAL LETTER A - // U+0411: "Б" CYRILLIC CAPITAL LETTER BE - // U+0412: "В" CYRILLIC CAPITAL LETTER VE - /* keylabel_to_alpha */ "\u0410\u0411\u0412", - /* morekeys_u ~ */ - null, null, null, null, - /* ~ morekeys_c */ - /* double_quotes */ "!text/double_9qm_lqm", - /* morekeys_s */ null, - /* single_quotes */ "!text/single_9qm_lqm", - /* keyspec_currency ~ */ - null, null, null, null, null, null, null, - /* ~ morekeys_g */ - /* single_angle_quotes */ "!text/single_raqm_laqm", - /* double_angle_quotes */ "!text/double_raqm_laqm", - /* morekeys_r ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, - /* ~ morekeys_k */ - // U+0450: "ѐ" CYRILLIC SMALL LETTER IE WITH GRAVE - /* morekeys_cyrillic_ie */ "\u0450", - /* keyspec_symbols_1 ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, - /* ~ morekeys_cyrillic_o */ - // U+045D: "ѝ" CYRILLIC SMALL LETTER I WITH GRAVE - /* morekeys_cyrillic_i */ "\u045D", - // TODO: Move these to sr-Latn once we can handle IETF language tag with script name specified. - // BEGIN: More keys definitions for Serbian (Latin) - // U+0161: "š" LATIN SMALL LETTER S WITH CARON - // U+00DF: "ß" LATIN SMALL LETTER SHARP S - // U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE - // š,ß,ś - // U+010D: "č" LATIN SMALL LETTER C WITH CARON - // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA - // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE - // č,ç,ć - // U+010F: "ď" LATIN SMALL LETTER D WITH CARON - // ď - // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON - // U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE - // U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE - // ž,ź,ż - // END: More keys definitions for Serbian (Latin) - // BEGIN: More keys definitions for Serbian (Cyrillic) - // U+0437: "з" CYRILLIC SMALL LETTER ZE - /* keyspec_south_slavic_row1_6 */ "\u0437", - // U+045B: "ћ" CYRILLIC SMALL LETTER TSHE - /* keyspec_south_slavic_row2_11 */ "\u045B", - // U+0455: "ѕ" CYRILLIC SMALL LETTER DZE - /* keyspec_south_slavic_row3_1 */ "\u0455", - // U+0452: "ђ" CYRILLIC SMALL LETTER DJE - /* keyspec_south_slavic_row3_8 */ "\u0452", - }; - - /* Locale sr_ZZ: Serbian (Unknown Region) */ - private static final String[] TEXTS_sr_ZZ = { - /* morekeys_a */ null, - /* morekeys_o */ null, - // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE - /* morekeys_e */ "\u00E8", - /* keylabel_to_alpha */ null, - /* morekeys_u */ null, - // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE - /* morekeys_i */ "\u00EC", - /* morekeys_n */ null, - // U+010D: "č" LATIN SMALL LETTER C WITH CARON - // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE - /* morekeys_c */ "\u010D,\u0107,%", - /* double_quotes */ null, - // U+0161: "š" LATIN SMALL LETTER S WITH CARON - /* morekeys_s */ "\u0161,%", - /* single_quotes ~ */ - null, null, null, - /* ~ morekeys_y */ - // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON - /* morekeys_z */ "\u017E,%", - // U+0111: "đ" LATIN SMALL LETTER D WITH STROKE - /* morekeys_d */ "\u0111,%", - /* morekeys_t ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, - /* ~ morekeys_symbols_semicolon */ - /* label_go_key */ "Idi", - /* label_send_key */ "\u0160alji", - /* label_next_key */ "Sled", - /* label_done_key */ "Gotov", - /* label_search_key */ "Tra\u017Ei", - /* label_previous_key */ "Preth", - /* label_pause_key */ "Pauza", - /* label_wait_key */ "\u010Cekaj", - }; - - /* Locale sv: Swedish */ - private static final String[] TEXTS_sv = { - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - // U+00E5: "å" LATIN SMALL LETTER A WITH RING - // U+00E6: "æ" LATIN SMALL LETTER AE - // U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE - // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE - // U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX - // U+0105: "ą" LATIN SMALL LETTER A WITH OGONEK - // U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE - /* morekeys_a */ "\u00E4,\u00E5,\u00E6,\u00E1,\u00E0,\u00E2,\u0105,\u00E3", - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - // U+0153: "œ" LATIN SMALL LIGATURE OE - // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE - // U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE - // U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX - // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE - // U+014D: "ō" LATIN SMALL LETTER O WITH MACRON - /* morekeys_o */ "\u00F6,\u00F8,\u0153,\u00F3,\u00F2,\u00F4,\u00F5,\u014D", - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE - // U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX - // U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS - // U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK - /* morekeys_e */ "\u00E9,\u00E8,\u00EA,\u00EB,\u0119", - /* keylabel_to_alpha */ null, - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE - // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE - // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX - // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON - /* morekeys_u */ "\u00FC,\u00FA,\u00F9,\u00FB,\u016B", - // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE - // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE - // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX - // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS - /* morekeys_i */ "\u00ED,\u00EC,\u00EE,\u00EF", - // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE - // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE - // U+0148: "ň" LATIN SMALL LETTER N WITH CARON - /* morekeys_n */ "\u0144,\u00F1,\u0148", - // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA - // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE - // U+010D: "č" LATIN SMALL LETTER C WITH CARON - /* morekeys_c */ "\u00E7,\u0107,\u010D", - /* double_quotes */ null, - // U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE - // U+0161: "š" LATIN SMALL LETTER S WITH CARON - // U+015F: "ş" LATIN SMALL LETTER S WITH CEDILLA - // U+00DF: "ß" LATIN SMALL LETTER SHARP S - /* morekeys_s */ "\u015B,\u0161,\u015F,\u00DF", - /* single_quotes */ null, - /* keyspec_currency */ null, - // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE - // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS - /* morekeys_y */ "\u00FD,\u00FF", - // U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE - // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON - // U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE - /* morekeys_z */ "\u017A,\u017E,\u017C", - // U+00F0: "ð" LATIN SMALL LETTER ETH - // U+010F: "ď" LATIN SMALL LETTER D WITH CARON - /* morekeys_d */ "\u00F0,\u010F", - // U+0165: "ť" LATIN SMALL LETTER T WITH CARON - // U+00FE: "þ" LATIN SMALL LETTER THORN - /* morekeys_t */ "\u0165,\u00FE", - // U+0142: "ł" LATIN SMALL LETTER L WITH STROKE - /* morekeys_l */ "\u0142", - /* morekeys_g */ null, - /* single_angle_quotes */ "!text/single_raqm_laqm", - /* double_angle_quotes */ "!text/double_raqm_laqm", - // U+0159: "ř" LATIN SMALL LETTER R WITH CARON - /* morekeys_r */ "\u0159", - /* keylabel_to_symbol ~ */ - 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, - /* ~ morekeys_tablet_period */ - // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE - /* keyspec_nordic_row1_11 */ "\u00E5", - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - /* keyspec_nordic_row2_10 */ "\u00F6", - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - /* keyspec_nordic_row2_11 */ "\u00E4", - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - // U+0153: "œ" LATIN SMALL LIGATURE OE - /* morekeys_nordic_row2_10 */ "\u00F8,\u0153", - /* keyspec_east_slavic_row1_9 ~ */ - null, null, null, null, null, null, - /* ~ keyspec_tablet_period */ - // U+00E6: "æ" LATIN SMALL LETTER AE - /* morekeys_nordic_row2_11 */ "\u00E6", - }; - - /* Locale sw: Swahili */ - private static final String[] TEXTS_sw = { - // This is the same as English except morekeys_g. - // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE - // U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE - // U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - // U+00E6: "æ" LATIN SMALL LETTER AE - // U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE - // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE - // U+0101: "ā" LATIN SMALL LETTER A WITH MACRON - /* morekeys_a */ "\u00E0,\u00E1,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101", - // U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - // U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE - // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE - // U+0153: "œ" LATIN SMALL LIGATURE OE - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - // U+014D: "ō" LATIN SMALL LETTER O WITH MACRON - // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE - /* morekeys_o */ "\u00F4,\u00F6,\u00F2,\u00F3,\u0153,\u00F8,\u014D,\u00F5", - // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - // U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX - // U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS - // U+0113: "ē" LATIN SMALL LETTER E WITH MACRON - /* morekeys_e */ "\u00E8,\u00E9,\u00EA,\u00EB,\u0113", - /* keylabel_to_alpha */ null, - // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE - // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE - // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON - /* morekeys_u */ "\u00FB,\u00FC,\u00F9,\u00FA,\u016B", - // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX - // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS - // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE - // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON - // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE - /* morekeys_i */ "\u00EE,\u00EF,\u00ED,\u012B,\u00EC", - // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE - /* morekeys_n */ "\u00F1", - // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA - /* morekeys_c */ "\u00E7", - /* double_quotes */ null, - // U+00DF: "ß" LATIN SMALL LETTER SHARP S - /* morekeys_s */ "\u00DF", - /* single_quotes ~ */ - null, null, null, null, null, null, null, - /* ~ morekeys_l */ - /* morekeys_g */ "g\'", - }; - - /* Locale ta_IN: Tamil (India) */ - private static final String[] TEXTS_ta_IN = { - /* morekeys_a ~ */ - null, null, null, - /* ~ morekeys_e */ - // Label for "switch to alphabetic" key. - // U+0BA4: "த" TAMIL LETTER TA - // U+0BAE/U+0BBF: "மி" TAMIL LETTER MA/TAMIL VOWEL SIGN I - // U+0BB4/U+0BCD: "ழ்" TAMIL LETTER LLLA/TAMIL SIGN VIRAMA - /* keylabel_to_alpha */ "\u0BA4\u0BAE\u0BBF\u0BB4\u0BCD", - /* morekeys_u ~ */ - null, null, null, null, null, null, null, - /* ~ single_quotes */ - // U+0BF9: "௹" TAMIL RUPEE SIGN - /* keyspec_currency */ "\u0BF9", - }; - - /* Locale ta_LK: Tamil (Sri Lanka) */ - private static final String[] TEXTS_ta_LK = { - /* morekeys_a ~ */ - null, null, null, - /* ~ morekeys_e */ - // Label for "switch to alphabetic" key. - // U+0BA4: "த" TAMIL LETTER TA - // U+0BAE/U+0BBF: "மி" TAMIL LETTER MA/TAMIL VOWEL SIGN I - // U+0BB4/U+0BCD: "ழ்" TAMIL LETTER LLLA/TAMIL SIGN VIRAMA - /* keylabel_to_alpha */ "\u0BA4\u0BAE\u0BBF\u0BB4\u0BCD", - /* morekeys_u ~ */ - null, null, null, null, null, null, null, - /* ~ single_quotes */ - // U+0DBB/U+0DD4: "රු" SINHALA LETTER RAYANNA/SINHALA VOWEL SIGN KETTI PAA-PILLA - /* keyspec_currency */ "\u0DBB\u0DD4", - }; - - /* Locale ta_SG: Tamil (Singapore) */ - private static final String[] TEXTS_ta_SG = { - /* morekeys_a ~ */ - null, null, null, - /* ~ morekeys_e */ - // Label for "switch to alphabetic" key. - // U+0BA4: "த" TAMIL LETTER TA - // U+0BAE/U+0BBF: "மி" TAMIL LETTER MA/TAMIL VOWEL SIGN I - // U+0BB4/U+0BCD: "ழ்" TAMIL LETTER LLLA/TAMIL SIGN VIRAMA - /* keylabel_to_alpha */ "\u0BA4\u0BAE\u0BBF\u0BB4\u0BCD", - }; - - /* Locale te: Telugu */ - private static final String[] TEXTS_te = { - /* morekeys_a ~ */ - null, null, null, - /* ~ morekeys_e */ - // Label for "switch to alphabetic" key. - // U+0C05: "అ" TELUGU LETTER A - // U+0C06: "ఆ" TELUGU LETTER AA - // U+0C07: "ఇ" TELUGU LETTER I - /* keylabel_to_alpha */ "\u0C05\u0C06\u0C07", - /* morekeys_u ~ */ - null, null, null, null, null, null, null, - /* ~ single_quotes */ - // U+20B9: "₹" INDIAN RUPEE SIGN - /* keyspec_currency */ "\u20B9", - }; - - /* Locale th: Thai */ - private static final String[] TEXTS_th = { - /* morekeys_a ~ */ - null, null, null, - /* ~ morekeys_e */ - // Label for "switch to alphabetic" key. - // U+0E01: "ก" THAI CHARACTER KO KAI - // U+0E02: "ข" THAI CHARACTER KHO KHAI - // U+0E04: "ค" THAI CHARACTER KHO KHWAI - /* keylabel_to_alpha */ "\u0E01\u0E02\u0E04", - /* morekeys_u ~ */ - null, null, null, null, null, null, null, - /* ~ single_quotes */ - // U+0E3F: "฿" THAI CURRENCY SYMBOL BAHT - /* keyspec_currency */ "\u0E3F", - }; - - /* Locale tl: Tagalog */ - private static final String[] TEXTS_tl = { - // U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE - // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - // U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX - // U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE - // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE - // U+0105: "ą" LATIN SMALL LETTER A WITH OGONEK - // U+00E6: "æ" LATIN SMALL LETTER AE - // U+0101: "ā" LATIN SMALL LETTER A WITH MACRON - // U+00AA: "ª" FEMININE ORDINAL INDICATOR - /* morekeys_a */ "\u00E1,\u00E0,\u00E4,\u00E2,\u00E3,\u00E5,\u0105,\u00E6,\u0101,\u00AA", - // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE - // U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - // U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX - // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - // U+0153: "œ" LATIN SMALL LIGATURE OE - // U+014D: "ō" LATIN SMALL LETTER O WITH MACRON - // U+00BA: "º" MASCULINE ORDINAL INDICATOR - /* morekeys_o */ "\u00F3,\u00F2,\u00F6,\u00F4,\u00F5,\u00F8,\u0153,\u014D,\u00BA", - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE - // U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS - // U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX - // U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK - // U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE - // U+0113: "ē" LATIN SMALL LETTER E WITH MACRON - /* morekeys_e */ "\u00E9,\u00E8,\u00EB,\u00EA,\u0119,\u0117,\u0113", - /* keylabel_to_alpha */ null, - // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE - // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX - // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON - /* morekeys_u */ "\u00FA,\u00FC,\u00F9,\u00FB,\u016B", - // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE - // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS - // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE - // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX - // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK - // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON - /* morekeys_i */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B", - // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE - // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE - /* morekeys_n */ "\u00F1,\u0144", - // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA - // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE - // U+010D: "č" LATIN SMALL LETTER C WITH CARON - /* morekeys_c */ "\u00E7,\u0107,\u010D", - }; - - /* Locale tr: Turkish */ - private static final String[] TEXTS_tr = { - // U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - // U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE - /* morekeys_a */ "\u00E2,\u00E4,\u00E1", - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - // U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX - // U+0153: "œ" LATIN SMALL LIGATURE OE - // U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE - // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE - // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - // U+014D: "ō" LATIN SMALL LETTER O WITH MACRON - /* morekeys_o */ "\u00F6,\u00F4,\u0153,\u00F2,\u00F3,\u00F5,\u00F8,\u014D", - // U+0259: "ə" LATIN SMALL LETTER SCHWA - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - /* morekeys_e */ "\u0259,\u00E9", - /* keylabel_to_alpha */ null, - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX - // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE - // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE - // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON - /* morekeys_u */ "\u00FC,\u00FB,\u00F9,\u00FA,\u016B", - // U+0131: "ı" LATIN SMALL LETTER DOTLESS I - // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX - // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS - // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE - // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE - // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK - // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON - /* morekeys_i */ "\u0131,\u00EE,\u00EF,\u00EC,\u00ED,\u012F,\u012B", - // U+0148: "ň" LATIN SMALL LETTER N WITH CARON - // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE - /* morekeys_n */ "\u0148,\u00F1", - // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA - // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE - // U+010D: "č" LATIN SMALL LETTER C WITH CARON - /* morekeys_c */ "\u00E7,\u0107,\u010D", - /* double_quotes */ null, - // U+015F: "ş" LATIN SMALL LETTER S WITH CEDILLA - // U+00DF: "ß" LATIN SMALL LETTER SHARP S - // U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE - // U+0161: "š" LATIN SMALL LETTER S WITH CARON - /* morekeys_s */ "\u015F,\u00DF,\u015B,\u0161", - /* single_quotes */ null, - /* keyspec_currency */ null, - // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE - /* morekeys_y */ "\u00FD", - // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON - /* morekeys_z */ "\u017E", - /* morekeys_d ~ */ - null, null, null, - /* ~ morekeys_l */ - // U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE - /* morekeys_g */ "\u011F", - }; - - /* Locale uk: Ukrainian */ - private static final String[] TEXTS_uk = { - /* morekeys_a ~ */ - null, null, null, - /* ~ morekeys_e */ - // Label for "switch to alphabetic" key. - // U+0410: "А" CYRILLIC CAPITAL LETTER A - // U+0411: "Б" CYRILLIC CAPITAL LETTER BE - // U+0412: "В" CYRILLIC CAPITAL LETTER VE - /* keylabel_to_alpha */ "\u0410\u0411\u0412", - /* morekeys_u ~ */ - null, null, null, null, - /* ~ morekeys_c */ - /* double_quotes */ "!text/double_9qm_lqm", - /* morekeys_s */ null, - /* single_quotes */ "!text/single_9qm_lqm", - // U+20B4: "₴" HRYVNIA SIGN - /* keyspec_currency */ "\u20B4", - /* morekeys_y ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, - /* ~ morekeys_nordic_row2_10 */ - // U+0449: "щ" CYRILLIC SMALL LETTER SHCHA - /* keyspec_east_slavic_row1_9 */ "\u0449", - // U+0456: "і" CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I - /* keyspec_east_slavic_row2_2 */ "\u0456", - // U+0454: "є" CYRILLIC SMALL LETTER UKRAINIAN IE - /* keyspec_east_slavic_row2_11 */ "\u0454", - // U+0438: "и" CYRILLIC SMALL LETTER I - /* keyspec_east_slavic_row3_5 */ "\u0438", - // U+044A: "ъ" CYRILLIC SMALL LETTER HARD SIGN - /* morekeys_cyrillic_soft_sign */ "\u044A", - /* keyspec_tablet_period ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, - /* ~ morekeys_w */ - // U+0457: "ї" CYRILLIC SMALL LETTER YI - /* morekeys_east_slavic_row2_2 */ "\u0457", - /* morekeys_cyrillic_u */ null, - /* morekeys_cyrillic_en */ null, - // U+0491: "ґ" CYRILLIC SMALL LETTER GHE WITH UPTURN - /* morekeys_cyrillic_ghe */ "\u0491", - }; - - /* Locale ur: Urdu */ - private static final String[] TEXTS_ur = { - /* morekeys_a ~ */ - null, null, null, - /* ~ morekeys_e */ - // Label for "switch to alphabetic" key. - // U+0623: "ا" ARABIC LETTER ALEF WITH HAMZA ABOVE - // U+0628: "ب" ARABIC LETTER BEH - // U+200C: ZERO WIDTH NON-JOINER - // U+062C: "پ" URDU LETTER PEH - /* keylabel_to_alpha */ "\u0627\u0628\u200C\u067E", - /* morekeys_u ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, - /* ~ morekeys_r */ - // Label for "switch to symbols" key. - // U+061F: "؟" ARABIC QUESTION MARK - /* keylabel_to_symbol */ "\u06F3\u06F2\u06F1\u061F", - /* additional_morekeys_symbols_1 */ "\u06F1", - /* additional_morekeys_symbols_2 */ "\u06F2", - /* additional_morekeys_symbols_3 */ "\u06F3", - /* additional_morekeys_symbols_4 */ "\u06F4", - /* additional_morekeys_symbols_5 */ "\u06F5", - /* additional_morekeys_symbols_6 */ "\u06F6", - /* additional_morekeys_symbols_7 */ "\u06F7", - /* additional_morekeys_symbols_8 */ "\u06F8", - /* additional_morekeys_symbols_9 */ "\u06F9", - /* additional_morekeys_symbols_0 */ "\u06F0", - /* morekeys_k ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, - /* ~ keyspec_symbols_0 */ - // U+06D4 ARABIC FULL STOP - /* keyspec_period */ "\u06D4", - // U+061F ARABIC QUESTION MARK - // U+060C ARABIC COMMA - // U+0021 EXCLAMATION MARK - // U+002E PERIOD - // U+002D HYPHEN MINUS - /* morekeys_period */ "\u061F,\u060C,!,.,-", - /* morekeys_tablet_period ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, - /* ~ morekeys_punctuation */ - // U+2605: "★" BLACK STAR - // U+066D: "٭" ARABIC FIVE POINTED STAR - /* morekeys_star */ "\u2605,\u066D", - /* keyspec_left_parenthesis */ "(|)", - /* keyspec_right_parenthesis */ ")|(", - /* keyspec_left_square_bracket */ "[|]", - /* keyspec_right_square_bracket */ "]|[", - /* keyspec_left_curly_bracket */ "{|}", - /* keyspec_right_curly_bracket */ "}|{", - /* keyspec_less_than */ "<|>", - /* keyspec_greater_than */ ">|<", - /* keyspec_less_than_equal */ "\u2264|\u2265", - /* keyspec_greater_than_equal */ "\u2265|\u2264", - /* keyspec_left_double_angle_quote */ "\u00AB|\u00BB", - /* keyspec_right_double_angle_quote */ "\u00BB|\u00AB", - /* keyspec_left_single_angle_quote */ "\u2039|\u203A", - /* keyspec_right_single_angle_quote */ "\u203A|\u2039", - // U+060C: "،" ARABIC COMMA - /* keyspec_comma */ "\u060C", - /* keyspec_tablet_comma */ null, - // The all letters need to be mirrored are found at - // http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt - // U+FD3E: "﴾" ORNATE LEFT PARENTHESIS - // U+FD3F: "﴿" ORNATE RIGHT PARENTHESIS - /* morekeys_left_parenthesis */ "!fixedColumnOrder!4,\uFD3E|\uFD3F,!text/keyspecs_left_parenthesis_more_keys", - /* morekeys_right_parenthesis */ "!fixedColumnOrder!4,\uFD3F|\uFD3E,!text/keyspecs_right_parenthesis_more_keys", - /* morekeys_tablet_comma */ null, - /* keyhintlabel_period */ null, - /* keyspec_symbols_question */ "\u061F", - /* keyspec_symbols_semicolon */ "\u061B", - /* keyspec_symbols_percent */ "\u066A", - /* morekeys_question */ null, - // U+2030: "‰" PER MILLE SIGN - /* morekeys_symbols_percent */ "\\%,\u2030", - /* morekeys_h ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - /* ~ morekeys_bullet */ - // U+2264: "≤" LESS-THAN OR EQUAL TO - // U+2265: "≥" GREATER-THAN EQUAL TO - // U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - // U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - // U+2039: "‹" SINGLE LEFT-POINTING ANGLE QUOTATION MARK - // U+203A: "›" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - /* morekeys_less_than */ "!fixedColumnOrder!3,!text/keyspec_left_single_angle_quote,!text/keyspec_less_than_equal,!text/keyspec_less_than", - /* morekeys_greater_than */ "!fixedColumnOrder!3,!text/keyspec_right_single_angle_quote,!text/keyspec_greater_than_equal,!text/keyspec_greater_than", - }; - - /* Locale uz: Uzbek */ - private static final String[] TEXTS_uz = { - // This is the same as Turkish - // U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - // U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE - /* morekeys_a */ "\u00E2,\u00E4,\u00E1", - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - // U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX - // U+0153: "œ" LATIN SMALL LIGATURE OE - // U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE - // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE - // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - // U+014D: "ō" LATIN SMALL LETTER O WITH MACRON - /* morekeys_o */ "\u00F6,\u00F4,\u0153,\u00F2,\u00F3,\u00F5,\u00F8,\u014D", - // U+0259: "ə" LATIN SMALL LETTER SCHWA - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - /* morekeys_e */ "\u0259,\u00E9", - /* keylabel_to_alpha */ null, - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX - // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE - // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE - // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON - /* morekeys_u */ "\u00FC,\u00FB,\u00F9,\u00FA,\u016B", - // U+0131: "ı" LATIN SMALL LETTER DOTLESS I - // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX - // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS - // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE - // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE - // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK - // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON - /* morekeys_i */ "\u0131,\u00EE,\u00EF,\u00EC,\u00ED,\u012F,\u012B", - // U+0148: "ň" LATIN SMALL LETTER N WITH CARON - // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE - /* morekeys_n */ "\u0148,\u00F1", - // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA - // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE - // U+010D: "č" LATIN SMALL LETTER C WITH CARON - /* morekeys_c */ "\u00E7,\u0107,\u010D", - /* double_quotes */ null, - // U+015F: "ş" LATIN SMALL LETTER S WITH CEDILLA - // U+00DF: "ß" LATIN SMALL LETTER SHARP S - // U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE - // U+0161: "š" LATIN SMALL LETTER S WITH CARON - /* morekeys_s */ "\u015F,\u00DF,\u015B,\u0161", - /* single_quotes */ null, - /* keyspec_currency */ null, - // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE - /* morekeys_y */ "\u00FD", - // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON - /* morekeys_z */ "\u017E", - /* morekeys_d ~ */ - null, null, null, - /* ~ morekeys_l */ - // U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE - /* morekeys_g */ "\u011F", - }; - - /* Locale vi: Vietnamese */ - private static final String[] TEXTS_vi = { - // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE - // U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE - // U+1EA3: "ả" LATIN SMALL LETTER A WITH HOOK ABOVE - // U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE - // U+1EA1: "ạ" LATIN SMALL LETTER A WITH DOT BELOW - // U+0103: "ă" LATIN SMALL LETTER A WITH BREVE - // U+1EB1: "ằ" LATIN SMALL LETTER A WITH BREVE AND GRAVE - // U+1EAF: "ắ" LATIN SMALL LETTER A WITH BREVE AND ACUTE - // U+1EB3: "ẳ" LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE - // U+1EB5: "ẵ" LATIN SMALL LETTER A WITH BREVE AND TILDE - // U+1EB7: "ặ" LATIN SMALL LETTER A WITH BREVE AND DOT BELOW - // U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX - // U+1EA7: "ầ" LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE - // U+1EA5: "ấ" LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE - // U+1EA9: "ẩ" LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE - // U+1EAB: "ẫ" LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE - // U+1EAD: "ậ" LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW - /* morekeys_a */ "\u00E0,\u00E1,\u1EA3,\u00E3,\u1EA1,\u0103,\u1EB1,\u1EAF,\u1EB3,\u1EB5,\u1EB7,\u00E2,\u1EA7,\u1EA5,\u1EA9,\u1EAB,\u1EAD", - // U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE - // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE - // U+1ECF: "ỏ" LATIN SMALL LETTER O WITH HOOK ABOVE - // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE - // U+1ECD: "ọ" LATIN SMALL LETTER O WITH DOT BELOW - // U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX - // U+1ED3: "ồ" LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE - // U+1ED1: "ố" LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE - // U+1ED5: "ổ" LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE - // U+1ED7: "ỗ" LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE - // U+1ED9: "ộ" LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW - // U+01A1: "ơ" LATIN SMALL LETTER O WITH HORN - // U+1EDD: "ờ" LATIN SMALL LETTER O WITH HORN AND GRAVE - // U+1EDB: "ớ" LATIN SMALL LETTER O WITH HORN AND ACUTE - // U+1EDF: "ở" LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE - // U+1EE1: "ỡ" LATIN SMALL LETTER O WITH HORN AND TILDE - // U+1EE3: "ợ" LATIN SMALL LETTER O WITH HORN AND DOT BELOW - /* morekeys_o */ "\u00F2,\u00F3,\u1ECF,\u00F5,\u1ECD,\u00F4,\u1ED3,\u1ED1,\u1ED5,\u1ED7,\u1ED9,\u01A1,\u1EDD,\u1EDB,\u1EDF,\u1EE1,\u1EE3", - // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - // U+1EBB: "ẻ" LATIN SMALL LETTER E WITH HOOK ABOVE - // U+1EBD: "ẽ" LATIN SMALL LETTER E WITH TILDE - // U+1EB9: "ẹ" LATIN SMALL LETTER E WITH DOT BELOW - // U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX - // U+1EC1: "ề" LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE - // U+1EBF: "ế" LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE - // U+1EC3: "ể" LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE - // U+1EC5: "ễ" LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE - // U+1EC7: "ệ" LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW - /* morekeys_e */ "\u00E8,\u00E9,\u1EBB,\u1EBD,\u1EB9,\u00EA,\u1EC1,\u1EBF,\u1EC3,\u1EC5,\u1EC7", - /* keylabel_to_alpha */ null, - // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE - // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE - // U+1EE7: "ủ" LATIN SMALL LETTER U WITH HOOK ABOVE - // U+0169: "ũ" LATIN SMALL LETTER U WITH TILDE - // U+1EE5: "ụ" LATIN SMALL LETTER U WITH DOT BELOW - // U+01B0: "ư" LATIN SMALL LETTER U WITH HORN - // U+1EEB: "ừ" LATIN SMALL LETTER U WITH HORN AND GRAVE - // U+1EE9: "ứ" LATIN SMALL LETTER U WITH HORN AND ACUTE - // U+1EED: "ử" LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE - // U+1EEF: "ữ" LATIN SMALL LETTER U WITH HORN AND TILDE - // U+1EF1: "ự" LATIN SMALL LETTER U WITH HORN AND DOT BELOW - /* morekeys_u */ "\u00F9,\u00FA,\u1EE7,\u0169,\u1EE5,\u01B0,\u1EEB,\u1EE9,\u1EED,\u1EEF,\u1EF1", - // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE - // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE - // U+1EC9: "ỉ" LATIN SMALL LETTER I WITH HOOK ABOVE - // U+0129: "ĩ" LATIN SMALL LETTER I WITH TILDE - // U+1ECB: "ị" LATIN SMALL LETTER I WITH DOT BELOW - /* morekeys_i */ "\u00EC,\u00ED,\u1EC9,\u0129,\u1ECB", - /* morekeys_n ~ */ - null, null, null, null, null, - /* ~ single_quotes */ - // U+20AB: "₫" DONG SIGN - /* keyspec_currency */ "\u20AB", - // U+1EF3: "ỳ" LATIN SMALL LETTER Y WITH GRAVE - // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE - // U+1EF7: "ỷ" LATIN SMALL LETTER Y WITH HOOK ABOVE - // U+1EF9: "ỹ" LATIN SMALL LETTER Y WITH TILDE - // U+1EF5: "ỵ" LATIN SMALL LETTER Y WITH DOT BELOW - /* morekeys_y */ "\u1EF3,\u00FD,\u1EF7,\u1EF9,\u1EF5", - /* morekeys_z */ null, - // U+0111: "đ" LATIN SMALL LETTER D WITH STROKE - /* morekeys_d */ "\u0111", - }; - - /* Locale zu: Zulu */ - private static final String[] TEXTS_zu = { - // This is the same as English - // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE - // U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE - // U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - // U+00E6: "æ" LATIN SMALL LETTER AE - // U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE - // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE - // U+0101: "ā" LATIN SMALL LETTER A WITH MACRON - /* morekeys_a */ "\u00E0,\u00E1,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101", - // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE - // U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - // U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE - // U+0153: "œ" LATIN SMALL LIGATURE OE - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - // U+014D: "ō" LATIN SMALL LETTER O WITH MACRON - // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE - /* morekeys_o */ "\u00F3,\u00F4,\u00F6,\u00F2,\u0153,\u00F8,\u014D,\u00F5", - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE - // U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX - // U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS - // U+0113: "ē" LATIN SMALL LETTER E WITH MACRON - /* morekeys_e */ "\u00E9,\u00E8,\u00EA,\u00EB,\u0113", - /* keylabel_to_alpha */ null, - // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE - // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE - // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON - /* morekeys_u */ "\u00FA,\u00FB,\u00FC,\u00F9,\u016B", - // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE - // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX - // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS - // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON - // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE - /* morekeys_i */ "\u00ED,\u00EE,\u00EF,\u012B,\u00EC", - // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE - /* morekeys_n */ "\u00F1", - // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA - /* morekeys_c */ "\u00E7", - /* double_quotes */ null, - // U+00DF: "ß" LATIN SMALL LETTER SHARP S - /* morekeys_s */ "\u00DF", - }; - - /* Locale zz: Alphabet */ - private static final String[] TEXTS_zz = { - // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE - // U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE - // U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX - // U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE - // U+00E6: "æ" LATIN SMALL LETTER AE - // U+0101: "ā" LATIN SMALL LETTER A WITH MACRON - // U+0103: "ă" LATIN SMALL LETTER A WITH BREVE - // U+0105: "ą" LATIN SMALL LETTER A WITH OGONEK - // U+00AA: "ª" FEMININE ORDINAL INDICATOR - /* morekeys_a */ "\u00E0,\u00E1,\u00E2,\u00E3,\u00E4,\u00E5,\u00E6,\u0101,\u0103,\u0105,\u00AA", - // U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE - // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE - // U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX - // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - // U+014D: "ō" LATIN SMALL LETTER O WITH MACRON - // U+014F: "ŏ" LATIN SMALL LETTER O WITH BREVE - // U+0151: "ő" LATIN SMALL LETTER O WITH DOUBLE ACUTE - // U+0153: "œ" LATIN SMALL LIGATURE OE - // U+00BA: "º" MASCULINE ORDINAL INDICATOR - /* morekeys_o */ "\u00F2,\u00F3,\u00F4,\u00F5,\u00F6,\u00F8,\u014D,\u014F,\u0151,\u0153,\u00BA", - // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - // U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX - // U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS - // U+0113: "ē" LATIN SMALL LETTER E WITH MACRON - // U+0115: "ĕ" LATIN SMALL LETTER E WITH BREVE - // U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE - // U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK - // U+011B: "ě" LATIN SMALL LETTER E WITH CARON - /* morekeys_e */ "\u00E8,\u00E9,\u00EA,\u00EB,\u0113,\u0115,\u0117,\u0119,\u011B", - /* keylabel_to_alpha */ null, - // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE - // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE - // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - // U+0169: "ũ" LATIN SMALL LETTER U WITH TILDE - // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON - // U+016D: "ŭ" LATIN SMALL LETTER U WITH BREVE - // U+016F: "ů" LATIN SMALL LETTER U WITH RING ABOVE - // U+0171: "ű" LATIN SMALL LETTER U WITH DOUBLE ACUTE - // U+0173: "ų" LATIN SMALL LETTER U WITH OGONEK - /* morekeys_u */ "\u00F9,\u00FA,\u00FB,\u00FC,\u0169,\u016B,\u016D,\u016F,\u0171,\u0173", - // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE - // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE - // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX - // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS - // U+0129: "ĩ" LATIN SMALL LETTER I WITH TILDE - // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON - // U+012D: "ĭ" LATIN SMALL LETTER I WITH BREVE - // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK - // U+0131: "ı" LATIN SMALL LETTER DOTLESS I - // U+0133: "ij" LATIN SMALL LIGATURE IJ - /* morekeys_i */ "\u00EC,\u00ED,\u00EE,\u00EF,\u0129,\u012B,\u012D,\u012F,\u0131,\u0133", - // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE - // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE - // U+0146: "ņ" LATIN SMALL LETTER N WITH CEDILLA - // U+0148: "ň" LATIN SMALL LETTER N WITH CARON - // U+0149: "ʼn" LATIN SMALL LETTER N PRECEDED BY APOSTROPHE - // U+014B: "ŋ" LATIN SMALL LETTER ENG - /* morekeys_n */ "\u00F1,\u0144,\u0146,\u0148,\u0149,\u014B", - // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA - // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE - // U+0109: "ĉ" LATIN SMALL LETTER C WITH CIRCUMFLEX - // U+010B: "ċ" LATIN SMALL LETTER C WITH DOT ABOVE - // U+010D: "č" LATIN SMALL LETTER C WITH CARON - /* morekeys_c */ "\u00E7,\u0107,\u0109,\u010B,\u010D", - /* double_quotes */ null, - // U+00DF: "ß" LATIN SMALL LETTER SHARP S - // U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE - // U+015D: "ŝ" LATIN SMALL LETTER S WITH CIRCUMFLEX - // U+015F: "ş" LATIN SMALL LETTER S WITH CEDILLA - // U+0161: "š" LATIN SMALL LETTER S WITH CARON - // U+017F: "ſ" LATIN SMALL LETTER LONG S - /* morekeys_s */ "\u00DF,\u015B,\u015D,\u015F,\u0161,\u017F", - /* single_quotes */ null, - /* keyspec_currency */ null, - // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE - // U+0177: "ŷ" LATIN SMALL LETTER Y WITH CIRCUMFLEX - // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS - // U+0133: "ij" LATIN SMALL LIGATURE IJ - /* morekeys_y */ "\u00FD,\u0177,\u00FF,\u0133", - // U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE - // U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE - // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON - /* morekeys_z */ "\u017A,\u017C,\u017E", - // U+010F: "ď" LATIN SMALL LETTER D WITH CARON - // U+0111: "đ" LATIN SMALL LETTER D WITH STROKE - // U+00F0: "ð" LATIN SMALL LETTER ETH - /* morekeys_d */ "\u010F,\u0111,\u00F0", - // U+00FE: "þ" LATIN SMALL LETTER THORN - // U+0163: "ţ" LATIN SMALL LETTER T WITH CEDILLA - // U+0165: "ť" LATIN SMALL LETTER T WITH CARON - // U+0167: "ŧ" LATIN SMALL LETTER T WITH STROKE - /* morekeys_t */ "\u00FE,\u0163,\u0165,\u0167", - // U+013A: "ĺ" LATIN SMALL LETTER L WITH ACUTE - // U+013C: "ļ" LATIN SMALL LETTER L WITH CEDILLA - // U+013E: "ľ" LATIN SMALL LETTER L WITH CARON - // U+0140: "ŀ" LATIN SMALL LETTER L WITH MIDDLE DOT - // U+0142: "ł" LATIN SMALL LETTER L WITH STROKE - /* morekeys_l */ "\u013A,\u013C,\u013E,\u0140,\u0142", - // U+011D: "ĝ" LATIN SMALL LETTER G WITH CIRCUMFLEX - // U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE - // U+0121: "ġ" LATIN SMALL LETTER G WITH DOT ABOVE - // U+0123: "ģ" LATIN SMALL LETTER G WITH CEDILLA - /* morekeys_g */ "\u011D,\u011F,\u0121,\u0123", - /* single_angle_quotes */ null, - /* double_angle_quotes */ null, - // U+0155: "ŕ" LATIN SMALL LETTER R WITH ACUTE - // U+0157: "ŗ" LATIN SMALL LETTER R WITH CEDILLA - // U+0159: "ř" LATIN SMALL LETTER R WITH CARON - /* morekeys_r */ "\u0155,\u0157,\u0159", - /* keylabel_to_symbol ~ */ - null, null, null, null, null, null, null, null, null, null, null, - /* ~ additional_morekeys_symbols_0 */ - // U+0137: "ķ" LATIN SMALL LETTER K WITH CEDILLA - // U+0138: "ĸ" LATIN SMALL LETTER KRA - /* morekeys_k */ "\u0137,\u0138", - /* morekeys_cyrillic_ie ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, - /* ~ morekeys_symbols_percent */ - // U+0125: "ĥ" LATIN SMALL LETTER H WITH CIRCUMFLEX - /* morekeys_h */ "\u0125", - // U+0175: "ŵ" LATIN SMALL LETTER W WITH CIRCUMFLEX - /* morekeys_w */ "\u0175", - /* morekeys_east_slavic_row2_2 ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, null, - /* ~ morekeys_v */ - // U+0135: "ĵ" LATIN SMALL LETTER J WITH CIRCUMFLEX - /* morekeys_j */ "\u0135", - }; - - private static final Object[] LOCALES_AND_TEXTS = { - // "locale", TEXT_ARRAY, /* numberOfNonNullText/lengthOf_TEXT_ARRAY localeName */ - "DEFAULT", TEXTS_DEFAULT, /* 182/182 DEFAULT */ - "af" , TEXTS_af, /* 7/ 13 Afrikaans */ - "ar" , TEXTS_ar, /* 55/112 Arabic */ - "az" , TEXTS_az, /* 11/ 18 Azerbaijani */ - "be" , TEXTS_be, /* 9/ 56 Belarusian */ - "bg" , TEXTS_bg, /* 2/ 9 Bulgarian */ - "bn_BD" , TEXTS_bn_BD, /* 27/ 57 Bangla (Bangladesh) */ - "bn_IN" , TEXTS_bn_IN, /* 2/ 12 Bangla (India) */ - "ca" , TEXTS_ca, /* 11/105 Catalan */ - "cs" , TEXTS_cs, /* 17/ 21 Czech */ - "da" , TEXTS_da, /* 19/ 58 Danish */ - "de" , TEXTS_de, /* 16/ 64 German */ - "de_DE" , TEXTS_de_DE, /* 16/ 64 German (Germany) */ - "el" , TEXTS_el, /* 1/ 4 Greek */ - "en" , TEXTS_en, /* 8/ 10 English */ - "eo" , TEXTS_eo, /* 26/128 Esperanto */ - "es" , TEXTS_es, /* 8/ 65 Spanish */ - "et" , TEXTS_et, /* 22/ 51 Estonian */ - "eu" , TEXTS_eu, /* 7/ 8 Basque */ - "fa" , TEXTS_fa, /* 58/112 Persian */ - "fi" , TEXTS_fi, /* 10/ 58 Finnish */ - "fr" , TEXTS_fr, /* 13/ 64 French */ - "gl" , TEXTS_gl, /* 7/ 8 Galician */ - "iw" , TEXTS_he, /* 20/133 Hebrew */ - "he" , TEXTS_he, /* 20/133 Hebrew */ - "hi" , TEXTS_hi, /* 27/ 57 Hindi */ - "hi_ZZ" , TEXTS_hi_ZZ, /* 9/120 Hindi (Unknown Region) */ - "hr" , TEXTS_hr, /* 9/ 20 Croatian */ - "hu" , TEXTS_hu, /* 9/ 20 Hungarian */ - "hy" , TEXTS_hy, /* 9/134 Armenian */ - "is" , TEXTS_is, /* 10/ 16 Icelandic */ - "it" , TEXTS_it, /* 11/ 64 Italian */ - "ka" , TEXTS_ka, /* 3/ 11 Georgian */ - "kk" , TEXTS_kk, /* 15/131 Kazakh */ - "km" , TEXTS_km, /* 2/132 Khmer */ - "kn" , TEXTS_kn, /* 2/ 12 Kannada */ - "ko" , TEXTS_ko, /* 2/ 12 Korean */ - "ky" , TEXTS_ky, /* 10/ 98 Kyrgyz */ - "lo" , TEXTS_lo, /* 2/ 12 Lao */ - "lt" , TEXTS_lt, /* 18/ 33 Lithuanian */ - "lv" , TEXTS_lv, /* 18/ 33 Latvian */ - "mk" , TEXTS_mk, /* 9/103 Macedonian */ - "ml" , TEXTS_ml, /* 2/ 12 Malayalam */ - "mn" , TEXTS_mn, /* 2/ 12 Mongolian */ - "mr" , TEXTS_mr, /* 23/ 44 Marathi */ - "my" , TEXTS_my, /* 8/104 Burmese */ - "nb" , TEXTS_nb, /* 11/ 58 Norwegian Bokmål */ - "ne" , TEXTS_ne, /* 27/ 57 Nepali */ - "nl" , TEXTS_nl, /* 9/ 13 Dutch */ - "pl" , TEXTS_pl, /* 10/ 17 Polish */ - "pt" , TEXTS_pt, /* 6/ 8 Portuguese */ - "rm" , TEXTS_rm, /* 1/ 2 Romansh */ - "ro" , TEXTS_ro, /* 6/ 16 Romanian */ - "ru" , TEXTS_ru, /* 9/ 56 Russian */ - "si" , TEXTS_si, /* 2/ 12 Sinhala */ - "sk" , TEXTS_sk, /* 20/ 33 Slovak */ - "sl" , TEXTS_sl, /* 8/ 20 Slovenian */ - "sr" , TEXTS_sr, /* 11/103 Serbian */ - "sr_ZZ" , TEXTS_sr_ZZ, /* 14/120 Serbian (Unknown Region) */ - "sv" , TEXTS_sv, /* 21/ 58 Swedish */ - "sw" , TEXTS_sw, /* 9/ 18 Swahili */ - "ta_IN" , TEXTS_ta_IN, /* 2/ 12 Tamil (India) */ - "ta_LK" , TEXTS_ta_LK, /* 2/ 12 Tamil (Sri Lanka) */ - "ta_SG" , TEXTS_ta_SG, /* 1/ 4 Tamil (Singapore) */ - "te" , TEXTS_te, /* 2/ 12 Telugu */ - "th" , TEXTS_th, /* 2/ 12 Thai */ - "tl" , TEXTS_tl, /* 7/ 8 Tagalog */ - "tr" , TEXTS_tr, /* 11/ 18 Turkish */ - "uk" , TEXTS_uk, /* 11/ 97 Ukrainian */ - "ur" , TEXTS_ur, /* 38/108 Urdu */ - "uz" , TEXTS_uz, /* 11/ 18 Uzbek */ - "vi" , TEXTS_vi, /* 8/ 15 Vietnamese */ - "zu" , TEXTS_zu, /* 8/ 10 Zulu */ - "zz" , TEXTS_zz, /* 19/122 Alphabet */ - }; - - static { - for (int index = 0; index < NAMES.length; index++) { - sNameToIndexesMap.put(NAMES[index], index); - } - - for (int i = 0; i < LOCALES_AND_TEXTS.length; i += 2) { - final String locale = (String)LOCALES_AND_TEXTS[i]; - final String[] textsTable = (String[])LOCALES_AND_TEXTS[i + 1]; - sLocaleToTextsTableMap.put(locale, textsTable); - sTextsTableToLocaleMap.put(textsTable, locale); - } - } -} diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/ModifierKeyState.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/ModifierKeyState.java index 7dd44dd16..c649ac5d9 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/ModifierKeyState.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/ModifierKeyState.java @@ -66,11 +66,11 @@ import androidx.annotation.NonNull; } protected String toString(int state) { - switch (state) { - case RELEASING: return "RELEASING"; - case PRESSING: return "PRESSING"; - case CHORDING: return "CHORDING"; - default: return "UNKNOWN"; - } + return switch (state) { + case RELEASING -> "RELEASING"; + case PRESSING -> "PRESSING"; + case CHORDING -> "CHORDING"; + default -> "UNKNOWN"; + }; } } diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/MoreKeySpec.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/MoreKeySpec.java index 6183f1845..bba89bc32 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/MoreKeySpec.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/MoreKeySpec.java @@ -75,8 +75,7 @@ public final class MoreKeySpec { @Override public int hashCode() { - int hashCode = 1; - hashCode = 31 + mCode; + int hashCode = 31 + mCode; hashCode = hashCode * 31 + mIconId; final String label = mLabel; hashCode = hashCode * 31 + (label == null ? 0 : label.hashCode()); diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/ShiftKeyState.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/ShiftKeyState.java index 1652596b1..3a9cddef8 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/ShiftKeyState.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/ShiftKeyState.java @@ -53,10 +53,10 @@ import androidx.annotation.NonNull; @Override protected String toString(int state) { - switch (state) { - case PRESSING_ON_SHIFTED: return "PRESSING_ON_SHIFTED"; - case IGNORING: return "IGNORING"; - default: return super.toString(state); - } + return switch (state) { + case PRESSING_ON_SHIFTED -> "PRESSING_ON_SHIFTED"; + case IGNORING -> "IGNORING"; + default -> super.toString(state); + }; } } diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/EmojiParser.kt b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/EmojiParser.kt index c3275e520..a5e02e44d 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/EmojiParser.kt +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/EmojiParser.kt @@ -16,7 +16,7 @@ import kotlin.math.sqrt class EmojiParser(private val params: KeyboardParams, private val context: Context) { - fun parse(splitKeyboard: Boolean): ArrayList> { // todo: split should be read from params, but currently this is disabled, right? + fun parse(): ArrayList> { val emojiArrayId = when (params.mId.mElementId) { KeyboardId.ELEMENT_EMOJI_RECENTS -> R.array.emoji_recents KeyboardId.ELEMENT_EMOJI_CATEGORY1 -> R.array.emoji_smileys_emotion @@ -32,34 +32,11 @@ class EmojiParser(private val params: KeyboardParams, private val context: Conte else -> throw(IllegalStateException("can only parse emoji categories where an array exists")) } val emojiArray = context.resources.getStringArray(emojiArrayId) - val moreEmojisArray = if (params.mId.mElementId == KeyboardId.ELEMENT_EMOJI_CATEGORY2) - context.resources.getStringArray(R.array.emoji_people_body_more) - else null + val moreEmojisArray = if (params.mId.mElementId != KeyboardId.ELEMENT_EMOJI_CATEGORY2) null + else context.resources.getStringArray(R.array.emoji_people_body_more) if (moreEmojisArray != null && emojiArray.size != moreEmojisArray.size) throw(IllegalStateException("Inconsistent array size between codesArray and moreKeysArray")) - // now we have the params in one long list -> split into lines and maybe add spacer - // todo: disabled, because it doesn't work properly... spacer keys get added to the end every 3 rows - // the sorting and sizing seems to be done in DynamicGridKeyboard - // only the template keys there are relevant for dimensions, resizing keys here doesn't have any effect - // -> this is really weird and unexpected, and should be changed (might also help with the text emojis...) -/* val numColumns = (1 / params.mDefaultRelativeKeyWidth).toInt() - val spacerNumKeys: Int - val spacerWidth: Float - if (splitKeyboard) { - val spacerRelativeWidth = Settings.getInstance().current.mSpacerRelativeWidth - // adjust gaps for the whole keyboard, so it's the same for all rows - params.mRelativeHorizontalGap *= 1f / (1f + spacerRelativeWidth) - params.mHorizontalGap = (params.mRelativeHorizontalGap * params.mId.mWidth).toInt() - // round the spacer width, so it's a number of keys, and number should be even if emoji count is even, odd otherwise - spacerNumKeys = (spacerRelativeWidth / params.mDefaultRelativeKeyWidth).roundTo(numColumns % 2 == 0) - spacerWidth = spacerNumKeys * params.mDefaultRelativeKeyWidth - } else { - spacerNumKeys = 0 - spacerWidth = 0f - } - val spacerIndex = if (spacerNumKeys > 0) (numColumns - spacerNumKeys) / 2 else -1 -*/ val row = ArrayList(emojiArray.size) var currentX = params.mLeftPadding.toFloat() val currentY = params.mTopPadding.toFloat() // no need to ever change, assignment to rows into rows is done in DynamicGridKeyboard @@ -69,7 +46,7 @@ class EmojiParser(private val params: KeyboardParams, private val context: Conte val defaultKeyWidth = (ResourceUtils.getDefaultKeyboardWidth(context.resources) - params.mLeftPadding - params.mRightPadding) * params.mDefaultRelativeKeyWidth val keyWidth = defaultKeyWidth * sqrt(Settings.getInstance().current.mKeyboardHeightScale) val defaultKeyboardHeight = ResourceUtils.getDefaultKeyboardHeight(context.resources, false) - val defaultBottomPadding = context.resources.getFraction(R.fraction.config_keyboard_bottom_padding_holo, defaultKeyboardHeight, defaultKeyboardHeight); + val defaultBottomPadding = context.resources.getFraction(R.fraction.config_keyboard_bottom_padding_holo, defaultKeyboardHeight, defaultKeyboardHeight) val emojiKeyboardHeight = ResourceUtils.getDefaultKeyboardHeight(context.resources, false) * 0.75f + params.mVerticalGap - defaultBottomPadding - context.resources.getDimensionPixelSize(R.dimen.config_emoji_category_page_id_height) val keyHeight = emojiKeyboardHeight * params.mDefaultRelativeRowHeight * Settings.getInstance().current.mKeyboardHeightScale // still apply height scale to key @@ -81,9 +58,6 @@ class EmojiParser(private val params: KeyboardParams, private val context: Conte keyParams.mFullHeight = keyHeight currentX += keyParams.mFullWidth row.add(keyParams) -// if (row.size % numColumns == spacerIndex) { // also removed for now (would be missing setting the size and updating x -// repeat(spacerNumKeys) { row.add(KeyParams.newSpacer(params, params.mDefaultRelativeKeyWidth)) } -// } } return arrayListOf(row) } @@ -104,7 +78,7 @@ class EmojiParser(private val params: KeyboardParams, private val context: Conte return labelBuilder.toString() to Constants.CODE_OUTPUT_TEXT } - private fun parseEmojiKey(spec: String, moreKeysString: String? = null): Key.KeyParams? { + private fun parseEmojiKey(spec: String, moreKeysString: String? = null): KeyParams? { val (label, code) = getLabelAndCode(spec) ?: return null val sb = StringBuilder() moreKeysString?.split(";")?.let { moreKeys -> diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/KeyboardParser.kt b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/KeyboardParser.kt index 9e4618a4c..920027e6a 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/KeyboardParser.kt +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/KeyboardParser.kt @@ -3,6 +3,7 @@ package org.dslul.openboard.inputmethod.keyboard.internal.keyboard_parser import android.content.Context import android.content.res.Configuration import android.content.res.Resources +import android.os.Build import org.dslul.openboard.inputmethod.latin.utils.Log import android.view.inputmethod.EditorInfo import android.widget.Toast @@ -24,7 +25,6 @@ import org.dslul.openboard.inputmethod.latin.spellcheck.AndroidSpellCheckerServi import org.dslul.openboard.inputmethod.latin.utils.InputTypeUtils import org.dslul.openboard.inputmethod.latin.utils.RunInLocale import org.dslul.openboard.inputmethod.latin.utils.ScriptUtils -import org.dslul.openboard.inputmethod.latin.utils.SubtypeLocaleUtils import org.dslul.openboard.inputmethod.latin.utils.sumOf import java.util.Locale @@ -53,6 +53,8 @@ abstract class KeyboardParser(private val params: KeyboardParams, private val co // this thing does too much... make it more understandable after everything is implemented fun parseLayoutString(layoutContent: String): ArrayList> { params.readAttributes(context, null) + params.mProximityCharsCorrectionEnabled = infos.enableProximityCharsCorrection + params.mAllowRedundantMoreKeys = infos.allowRedundantMoreKeys if (infos.touchPositionCorrectionData == null) // need to set correctly, as it's not properly done in readAttributes with attr = null params.mTouchPositionCorrection.load(emptyArray()) else @@ -648,7 +650,14 @@ abstract class KeyboardParser(private val params: KeyboardParams, private val co val ril = object : RunInLocale() { // todo (later): simpler way of doing this in a single line? override fun job(res: Resources) = res.getString(id) } - val locale = if (params.mId.locale.toString().lowercase() == "hi_zz") Locale("en", "IN") else params.mId.locale // crappy workaround... + // crappy workaround... + val locale = when (params.mId.locale.toString().lowercase()) { + "hi_zz" -> Locale("en", "IN") + "sr_zz" -> if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) + Locale.forLanguageTag("sr-Latn") + else params.mId.locale // todo: copy strings to sr-rZZ when definitely not increasing min SDK to 21 + else -> params.mId.locale + } return ril.runInLocale(context.resources, locale) } @@ -743,10 +752,10 @@ abstract class KeyboardParser(private val params: KeyboardParams, private val co companion object { private val TAG = KeyboardParser::class.simpleName - fun parseFromAssets(params: KeyboardParams, context: Context): ArrayList>? { + fun parseFromAssets(params: KeyboardParams, context: Context): ArrayList> { val id = params.mId val layoutName = params.mId.mSubtype.keyboardLayoutSetName - val layoutFileNames = context.assets.list("layouts") ?: return null + val layoutFileNames = context.assets.list("layouts")!! return when { id.mElementId == KeyboardId.ELEMENT_SYMBOLS && ScriptUtils.getScriptFromSpellCheckerLocale(params.mId.locale) == ScriptUtils.SCRIPT_ARABIC -> SimpleKeyboardParser(params, context).parseLayoutFromAssets("symbols_arabic") @@ -759,18 +768,17 @@ abstract class KeyboardParser(private val params: KeyboardParams, private val co id.mElementId == KeyboardId.ELEMENT_NUMBER -> JsonKeyboardParser(params, context).parseLayoutFromAssets("number") id.mElementId == KeyboardId.ELEMENT_PHONE -> JsonKeyboardParser(params, context).parseLayoutFromAssets("phone") id.mElementId == KeyboardId.ELEMENT_PHONE_SYMBOLS -> JsonKeyboardParser(params, context).parseLayoutFromAssets("phone_symbols") - !id.isAlphabetKeyboard -> null layoutFileNames.contains("$layoutName.json") -> JsonKeyboardParser(params, context).parseLayoutFromAssets(layoutName) layoutFileNames.contains("${getSimpleLayoutName(layoutName, params)}.txt") -> SimpleKeyboardParser(params, context).parseLayoutFromAssets(layoutName) - else -> null + else -> throw IllegalStateException("can't parse layout $layoutName with id $id and elementId ${id.mElementId}") } } @JvmStatic // unsupported without JvmStatic // todo: should be removed in the end (after removing old parser), and the internal layout names changed for easier finding // currently it's spread out everywhere... method.xml, locale_and_extra_value_to_keyboard_layout_set_map, getKeyboardLayoutNameForLocale, ... - protected fun getSimpleLayoutName(layoutName: String, params: KeyboardParams) = when (layoutName) { + protected fun getSimpleLayoutName(layoutName: String, params: KeyboardParams): String = when (layoutName) { "swiss", "german", "serbian_qwertz" -> "qwertz" "nordic", "spanish" -> if (params.mId.locale.language == "eo") "eo" else "qwerty" "south_slavic", "east_slavic" -> params.mId.locale.language // layouts are split per language now, much less convoluted diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/LocaleKeyTexts.kt b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/LocaleKeyTexts.kt index cb103dd49..2c6ffdafb 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/LocaleKeyTexts.kt +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/LocaleKeyTexts.kt @@ -342,8 +342,8 @@ private val dollar = "$" to arrayOf("£", "¢", "€", "¥", "₱") private val euroCountries = "AD|AT|BE|BG|HR|CY|CZ|DA|EE|FI|FR|DE|GR|HU|IE|IT|XK|LV|LT|LU|MT|MO|ME|NL|PL|PT|RO|SM|SK|SI|ES|VA".toRegex() private val euroLocales = "bg|ca|cs|da|de|el|en|es|et|eu|fi|fr|ga|gl|hr|hu|it|lb|lt|lv|mt|nl|pl|pt|ro|sk|sl|sq|sr|sv".toRegex() -const val MORE_KEYS_ALL = 2; -const val MORE_KEYS_MORE = 1; -const val MORE_KEYS_NORMAL = 0; +const val MORE_KEYS_ALL = 2 +const val MORE_KEYS_MORE = 1 +const val MORE_KEYS_NORMAL = 0 const val LANGUAGE_TEXTS_FOLDER = "language_key_texts" diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/SimpleKeyboardParser.kt b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/SimpleKeyboardParser.kt index b1d22ddb7..b3372cb86 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/SimpleKeyboardParser.kt +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/SimpleKeyboardParser.kt @@ -2,7 +2,6 @@ package org.dslul.openboard.inputmethod.keyboard.internal.keyboard_parser import android.content.Context -import org.dslul.openboard.inputmethod.latin.utils.Log import org.dslul.openboard.inputmethod.keyboard.internal.KeyboardParams import org.dslul.openboard.inputmethod.keyboard.internal.keyboard_parser.floris.KeyData import org.dslul.openboard.inputmethod.keyboard.internal.keyboard_parser.floris.toTextKey diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/XmlKeyboardParser.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/XmlKeyboardParser.java deleted file mode 100644 index 39a9abd08..000000000 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/XmlKeyboardParser.java +++ /dev/null @@ -1,781 +0,0 @@ -package org.dslul.openboard.inputmethod.keyboard.internal.keyboard_parser; - -import android.content.Context; -import android.content.res.Resources; -import android.content.res.TypedArray; -import android.content.res.XmlResourceParser; -import android.os.Build; -import android.text.TextUtils; -import android.util.AttributeSet; -import org.dslul.openboard.inputmethod.latin.utils.Log; -import android.util.TypedValue; -import android.util.Xml; - -import org.dslul.openboard.inputmethod.keyboard.Key; -import org.dslul.openboard.inputmethod.keyboard.KeyboardId; -import org.dslul.openboard.inputmethod.keyboard.KeyboardTheme; -import org.dslul.openboard.inputmethod.keyboard.internal.CodesArrayParser; -import org.dslul.openboard.inputmethod.keyboard.internal.KeyStyle; -import org.dslul.openboard.inputmethod.keyboard.internal.KeyboardIconsSet; -import org.dslul.openboard.inputmethod.keyboard.internal.KeyboardParams; -import org.dslul.openboard.inputmethod.keyboard.internal.MoreCodesArrayParser; -import org.dslul.openboard.inputmethod.latin.R; -import org.dslul.openboard.inputmethod.latin.common.Constants; -import org.dslul.openboard.inputmethod.latin.common.StringUtils; -import org.dslul.openboard.inputmethod.latin.utils.ResourceUtils; -import org.dslul.openboard.inputmethod.latin.utils.XmlParseUtils; -import org.xmlpull.v1.XmlPullParser; -import org.xmlpull.v1.XmlPullParserException; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Locale; - -/** - * Keyboard Building helper. - * - * This class parses Keyboard XML file and returns the KeysParams to eventually build a Keyboard. - * The Keyboard XML file looks like: - *
- *   <!-- xml/keyboard.xml -->
- *   <Keyboard keyboard_attributes*>
- *     <!-- Keyboard Content -->
- *     <Row row_attributes*>
- *       <!-- Row Content -->
- *       <Key key_attributes* />
- *       <Spacer horizontalGap="32.0dp" />
- *       <include keyboardLayout="@xml/other_keys">
- *       ...
- *     </Row>
- *     <include keyboardLayout="@xml/other_rows">
- *     ...
- *   </Keyboard>
- * 
- * The XML file which is included in other file must have <merge> as root element, - * such as: - *
- *   <!-- xml/other_keys.xml -->
- *   <merge>
- *     <Key key_attributes* />
- *     ...
- *   </merge>
- * 
- * and - *
- *   <!-- xml/other_rows.xml -->
- *   <merge>
- *     <Row row_attributes*>
- *       <Key key_attributes* />
- *     </Row>
- *     ...
- *   </merge>
- * 
- * You can also use switch-case-default tags to select Rows and Keys. - *
- *   <switch>
- *     <case case_attribute*>
- *       <!-- Any valid tags at switch position -->
- *     </case>
- *     ...
- *     <default>
- *       <!-- Any valid tags at switch position -->
- *     </default>
- *   </switch>
- * 
- * You can declare Key style and specify styles within Key tags. - *
- *     <switch>
- *       <case mode="email">
- *         <key-style styleName="f1-key" parentStyle="modifier-key"
- *           keyLabel=".com"
- *         />
- *       </case>
- *       <case mode="url">
- *         <key-style styleName="f1-key" parentStyle="modifier-key"
- *           keyLabel="http://"
- *         />
- *       </case>
- *     </switch>
- *     ...
- *     <Key keyStyle="shift-key" ... />
- * 
- */ -// TODO: Write unit tests for this class. -public class XmlKeyboardParser implements AutoCloseable { - private static final String PARSER_TAG = "XmlKeyboardParser"; - private static final boolean DEBUG = false; - - // Keyboard XML Tags - private static final String TAG_KEYBOARD = "Keyboard"; - private static final String TAG_ROW = "Row"; - private static final String TAG_GRID_ROWS = "GridRows"; - private static final String TAG_KEY = "Key"; - private static final String TAG_SPACER = "Spacer"; - private static final String TAG_INCLUDE = "include"; - private static final String TAG_MERGE = "merge"; - private static final String TAG_SWITCH = "switch"; - private static final String TAG_CASE = "case"; - private static final String TAG_DEFAULT = "default"; - public static final String TAG_KEY_STYLE = "key-style"; - - protected final Context mContext; - protected final Resources mResources; - private final XmlResourceParser mParser; - - private int mCurrentY = 0; - private XmlKeyboardRow mCurrentRow = null; - private final KeyboardParams mParams; - private final ArrayList> keysInRows = new ArrayList<>(); - - public XmlKeyboardParser(final int xmlId, final KeyboardParams params, final Context context) { - mParams = params; - mContext = context; - mResources = context.getResources(); - mParser = mResources.getXml(xmlId); - } - - @Override - public void close() { - mParser.close(); - } - - private int mIndent; - private static final String SPACES = " "; - - private static String spaces(final int count) { - return (count < SPACES.length()) ? SPACES.substring(0, count) : SPACES; - } - - private void startTag(final String format, final Object ... args) { - Log.d(PARSER_TAG, String.format(spaces(++mIndent * 2) + format, args)); - } - - private void endTag(final String format, final Object ... args) { - Log.d(PARSER_TAG, String.format(spaces(mIndent-- * 2) + format, args)); - } - - private void startEndTag(final String format, final Object ... args) { - Log.d(PARSER_TAG, String.format(spaces(++mIndent * 2) + format, args)); - mIndent--; - } - - public ArrayList> parseKeyboard() throws XmlPullParserException, IOException { - final XmlPullParser parser = mParser; - if (DEBUG) startTag("<%s> %s", TAG_KEYBOARD, mParams.mId); - while (parser.getEventType() != XmlPullParser.END_DOCUMENT) { - final int event = parser.next(); - if (event == XmlPullParser.START_TAG) { - final String tag = parser.getName(); - if (TAG_KEYBOARD.equals(tag)) { - // can attribute parsing moved outside / public, so that params can be adjusted before parsing the content? - // will be a problem with multiple keyboards in one xml... if that exists - parseKeyboardAttributes(parser); - startKeyboard(); - parseKeyboardContent(parser, false); - return keysInRows; - } - throw new XmlParseUtils.IllegalStartTag(parser, tag, TAG_KEYBOARD); - } - } - throw new XmlParseUtils.ParseException("no end tag", parser); - } - - /** this and parseKeyStyle are the only place where anything is written to params */ - private void parseKeyboardAttributes(final XmlPullParser parser) { - final AttributeSet attr = Xml.asAttributeSet(parser); - mParams.readAttributes(mContext, attr); - } - - private void parseKeyboardContent(final XmlPullParser parser, final boolean skip) - throws XmlPullParserException, IOException { - while (parser.getEventType() != XmlPullParser.END_DOCUMENT) { - final int event = parser.next(); - if (event == XmlPullParser.START_TAG) { - final String tag = parser.getName(); - if (TAG_ROW.equals(tag)) { - final XmlKeyboardRow row = parseRowAttributes(parser); - if (DEBUG) startTag("<%s>%s", TAG_ROW, skip ? " skipped" : ""); - if (!skip) { - startRow(row); - } - parseRowContent(parser, row, skip); - } else if (TAG_GRID_ROWS.equals(tag)) { - if (DEBUG) startTag("<%s>%s", TAG_GRID_ROWS, skip ? " skipped" : ""); - parseGridRows(parser, skip); - } else if (TAG_INCLUDE.equals(tag)) { - parseIncludeKeyboardContent(parser, skip); - } else if (TAG_SWITCH.equals(tag)) { - parseSwitchKeyboardContent(parser, skip); - } else if (TAG_KEY_STYLE.equals(tag)) { - parseKeyStyle(parser, skip); - } else { - throw new XmlParseUtils.IllegalStartTag(parser, tag, TAG_ROW); - } - } else if (event == XmlPullParser.END_TAG) { - final String tag = parser.getName(); - if (DEBUG) endTag("", tag); - if (TAG_KEYBOARD.equals(tag) || TAG_CASE.equals(tag) || TAG_DEFAULT.equals(tag) || TAG_MERGE.equals(tag)) { - return; - } - throw new XmlParseUtils.IllegalEndTag(parser, tag, TAG_ROW); - } - } - } - - private XmlKeyboardRow parseRowAttributes(final XmlPullParser parser) - throws XmlPullParserException { - final AttributeSet attr = Xml.asAttributeSet(parser); - final TypedArray keyboardAttr = mResources.obtainAttributes(attr, R.styleable.Keyboard); - try { - if (keyboardAttr.hasValue(R.styleable.Keyboard_horizontalGap)) { - throw new XmlParseUtils.IllegalAttribute(parser, TAG_ROW, "horizontalGap"); - } - if (keyboardAttr.hasValue(R.styleable.Keyboard_verticalGap)) { - throw new XmlParseUtils.IllegalAttribute(parser, TAG_ROW, "verticalGap"); - } - return new XmlKeyboardRow(mResources, mParams, parser, mCurrentY); - } finally { - keyboardAttr.recycle(); - } - } - - private void parseRowContent(final XmlPullParser parser, final XmlKeyboardRow row, - final boolean skip) throws XmlPullParserException, IOException { - while (parser.getEventType() != XmlPullParser.END_DOCUMENT) { - final int event = parser.next(); - if (event == XmlPullParser.START_TAG) { - final String tag = parser.getName(); - if (TAG_KEY.equals(tag)) { - parseKey(parser, row, skip); - } else if (TAG_SPACER.equals(tag)) { - parseSpacer(parser, row, skip); - } else if (TAG_INCLUDE.equals(tag)) { - parseIncludeRowContent(parser, row, skip); - } else if (TAG_SWITCH.equals(tag)) { - parseSwitchRowContent(parser, row, skip); - } else if (TAG_KEY_STYLE.equals(tag)) { - parseKeyStyle(parser, skip); - } else { - throw new XmlParseUtils.IllegalStartTag(parser, tag, TAG_ROW); - } - } else if (event == XmlPullParser.END_TAG) { - final String tag = parser.getName(); - if (DEBUG) endTag("", tag); - if (TAG_ROW.equals(tag)) { - if (!skip) { - endRow(row); - } - return; - } - if (TAG_CASE.equals(tag) || TAG_DEFAULT.equals(tag) || TAG_MERGE.equals(tag)) { - return; - } - throw new XmlParseUtils.IllegalEndTag(parser, tag, TAG_ROW); - } - } - } - - private void parseGridRows(final XmlPullParser parser, final boolean skip) - throws XmlPullParserException, IOException { - if (skip) { - XmlParseUtils.checkEndTag(TAG_GRID_ROWS, parser); - if (DEBUG) { - startEndTag("<%s /> skipped", TAG_GRID_ROWS); - } - return; - } - final XmlKeyboardRow gridRows = new XmlKeyboardRow(mResources, mParams, parser, mCurrentY); - final TypedArray gridRowAttr = mResources.obtainAttributes( - Xml.asAttributeSet(parser), R.styleable.Keyboard_GridRows); - final int codesArrayId = gridRowAttr.getResourceId( - R.styleable.Keyboard_GridRows_codesArray, 0); - final int textsArrayId = gridRowAttr.getResourceId( - R.styleable.Keyboard_GridRows_textsArray, 0); - final int moreCodesArrayId = gridRowAttr.getResourceId( - R.styleable.Keyboard_GridRows_moreCodesArray, 0); - gridRowAttr.recycle(); - if (codesArrayId == 0 && textsArrayId == 0) { - throw new XmlParseUtils.ParseException( - "Missing codesArray or textsArray attributes", parser); - } - if (codesArrayId != 0 && textsArrayId != 0) { - throw new XmlParseUtils.ParseException( - "Both codesArray and textsArray attributes specifed", parser); - } - if (textsArrayId != 0 && moreCodesArrayId != 0) { - throw new XmlParseUtils.ParseException( - "moreCodesArray is not compatible with textsArray", parser); - } - final String[] array = mResources.getStringArray( - codesArrayId != 0 ? codesArrayId : textsArrayId); - final String[] arrayMore = moreCodesArrayId != 0 ? - mResources.getStringArray(moreCodesArrayId) : null; - final int counts = array.length; - if (arrayMore != null && counts != arrayMore.length) { - throw new XmlParseUtils.ParseException( - "Inconsistent array size between codesArray and moreKeysArray", parser); - } - final float keyWidth = gridRows.getKeyWidth(null, 0.0f); - final int numColumns = (int)(mParams.mOccupiedWidth / keyWidth); - for (int index = 0; index < counts; index += numColumns) { - final XmlKeyboardRow row = new XmlKeyboardRow(mResources, mParams, parser, mCurrentY); - startRow(row); - final ArrayList keyParamsRow = keysInRows.get(keysInRows.size() - 1); - for (int c = 0; c < numColumns; c++) { - final int i = index + c; - if (i >= counts) { - break; - } - final String label; - final int code; - final String outputText; - final int supportedMinSdkVersion; - final String moreKeySpecs; - if (codesArrayId != 0) { - final String codeArraySpec = array[i]; - label = CodesArrayParser.parseLabel(codeArraySpec); - code = CodesArrayParser.parseCode(codeArraySpec); - outputText = CodesArrayParser.parseOutputText(codeArraySpec); - supportedMinSdkVersion = - CodesArrayParser.getMinSupportSdkVersion(codeArraySpec); - moreKeySpecs = MoreCodesArrayParser.parseKeySpecs( - arrayMore != null ? arrayMore[i] : null); - } else { - final String textArraySpec = array[i]; - // TODO: Utilize KeySpecParser or write more generic TextsArrayParser. - label = textArraySpec; - code = Constants.CODE_OUTPUT_TEXT; - outputText = textArraySpec + (char)Constants.CODE_SPACE; - supportedMinSdkVersion = 0; - moreKeySpecs = null; - } - if (Build.VERSION.SDK_INT < supportedMinSdkVersion) { - continue; - } - final int labelFlags = row.getDefaultKeyLabelFlags(); - // TODO: Should be able to assign default keyActionFlags as well. - final int backgroundType = row.getDefaultBackgroundType(); - final int x = (int)row.getKeyX(null); - final int y = row.getKeyY(); - final int width = (int)keyWidth; - final int height = row.getRowHeight(); - final String hintLabel = moreKeySpecs != null ? "\u25E5" : null; - final Key.KeyParams key = new Key.KeyParams(label, code, outputText, hintLabel, moreKeySpecs, - labelFlags, backgroundType, x, y, width, height, mParams); - // (relative) width is always default when using gridRows.getKeyWidth(null, 0.0f) - key.mRelativeWidth = mParams.mDefaultRelativeKeyWidth; - key.mRelativeHeight = gridRows.mRelativeRowHeight; - keyParamsRow.add(key); - row.advanceXPos(keyWidth); - } - endRow(row); - } - - XmlParseUtils.checkEndTag(TAG_GRID_ROWS, parser); - } - - private void parseKey(final XmlPullParser parser, final XmlKeyboardRow row, final boolean skip) - throws XmlPullParserException, IOException { - if (skip) { - XmlParseUtils.checkEndTag(TAG_KEY, parser); - if (DEBUG) startEndTag("<%s /> skipped", TAG_KEY); - return; - } - final TypedArray keyAttr = mResources.obtainAttributes( - Xml.asAttributeSet(parser), R.styleable.Keyboard_Key); - final KeyStyle keyStyle = mParams.mKeyStyles.getKeyStyle(keyAttr, parser); - final String keySpec = keyStyle.getString(keyAttr, R.styleable.Keyboard_Key_keySpec); - if (TextUtils.isEmpty(keySpec)) { - throw new XmlParseUtils.ParseException("Empty keySpec", parser); - } - final Key.KeyParams key = new Key.KeyParams(keySpec, keyAttr, keyStyle, mParams, row); - keyAttr.recycle(); - if (DEBUG) { - startEndTag("<%s%s %s moreKeys=%s />", TAG_KEY, (key.mEnabled ? "" : " disabled"), - key, Arrays.toString(key.mMoreKeys)); - } - XmlParseUtils.checkEndTag(TAG_KEY, parser); - keysInRows.get(keysInRows.size() - 1).add(key); - } - - private void parseSpacer(final XmlPullParser parser, final XmlKeyboardRow row, final boolean skip) - throws XmlPullParserException, IOException { - if (skip) { - XmlParseUtils.checkEndTag(TAG_SPACER, parser); - if (DEBUG) startEndTag("<%s /> skipped", TAG_SPACER); - return; - } - final TypedArray keyAttr = mResources.obtainAttributes( - Xml.asAttributeSet(parser), R.styleable.Keyboard_Key); - final KeyStyle keyStyle = mParams.mKeyStyles.getKeyStyle(keyAttr, parser); - final Key.KeyParams spacer = Key.KeyParams.newSpacer(keyAttr, keyStyle, mParams, row); - keyAttr.recycle(); - keysInRows.get(keysInRows.size() - 1).add(spacer); - if (DEBUG) startEndTag("<%s />", TAG_SPACER); - XmlParseUtils.checkEndTag(TAG_SPACER, parser); - } - - private void parseIncludeKeyboardContent(final XmlPullParser parser, final boolean skip) - throws XmlPullParserException, IOException { - parseIncludeInternal(parser, null, skip); - } - - private void parseIncludeRowContent(final XmlPullParser parser, final XmlKeyboardRow row, - final boolean skip) throws XmlPullParserException, IOException { - parseIncludeInternal(parser, row, skip); - } - - private void parseIncludeInternal(final XmlPullParser parser, final XmlKeyboardRow row, - final boolean skip) throws XmlPullParserException, IOException { - if (skip) { - XmlParseUtils.checkEndTag(TAG_INCLUDE, parser); - if (DEBUG) startEndTag(" skipped", TAG_INCLUDE); - return; - } - final AttributeSet attr = Xml.asAttributeSet(parser); - final TypedArray keyboardAttr = mResources.obtainAttributes( - attr, R.styleable.Keyboard_Include); - final TypedArray keyAttr = mResources.obtainAttributes(attr, R.styleable.Keyboard_Key); - final int keyboardLayout; - try { - XmlParseUtils.checkAttributeExists( - keyboardAttr, R.styleable.Keyboard_Include_keyboardLayout, "keyboardLayout", - TAG_INCLUDE, parser); - keyboardLayout = keyboardAttr.getResourceId( - R.styleable.Keyboard_Include_keyboardLayout, 0); - if (row != null) { - // Override current x coordinate. - row.setXPos(row.getKeyX(keyAttr)); - // Push current Row attributes and update with new attributes. - row.pushRowAttributes(keyAttr); - } - } finally { - keyboardAttr.recycle(); - keyAttr.recycle(); - } - - XmlParseUtils.checkEndTag(TAG_INCLUDE, parser); - if (DEBUG) { - startEndTag("<%s keyboardLayout=%s />",TAG_INCLUDE, - mResources.getResourceEntryName(keyboardLayout)); - } - try (XmlResourceParser parserForInclude = mResources.getXml(keyboardLayout)) { - parseMerge(parserForInclude, row, skip); - } finally { - if (row != null) { - // Restore Row attributes. - row.popRowAttributes(); - } - } - } - - private void parseMerge(final XmlPullParser parser, final XmlKeyboardRow row, final boolean skip) - throws XmlPullParserException, IOException { - if (DEBUG) startTag("<%s>", TAG_MERGE); - while (parser.getEventType() != XmlPullParser.END_DOCUMENT) { - final int event = parser.next(); - if (event == XmlPullParser.START_TAG) { - final String tag = parser.getName(); - if (TAG_MERGE.equals(tag)) { - if (row == null) { - parseKeyboardContent(parser, skip); - } else { - parseRowContent(parser, row, skip); - } - return; - } - throw new XmlParseUtils.ParseException( - "Included keyboard layout must have root element", parser); - } - } - } - - private void parseSwitchKeyboardContent(final XmlPullParser parser, final boolean skip) - throws XmlPullParserException, IOException { - parseSwitchInternal(parser, null, skip); - } - - private void parseSwitchRowContent(final XmlPullParser parser, final XmlKeyboardRow row, - final boolean skip) throws XmlPullParserException, IOException { - parseSwitchInternal(parser, row, skip); - } - - private void parseSwitchInternal(final XmlPullParser parser, final XmlKeyboardRow row, - final boolean skip) throws XmlPullParserException, IOException { - if (DEBUG) startTag("<%s> %s", TAG_SWITCH, mParams.mId); - boolean selected = false; - while (parser.getEventType() != XmlPullParser.END_DOCUMENT) { - final int event = parser.next(); - if (event == XmlPullParser.START_TAG) { - final String tag = parser.getName(); - if (TAG_CASE.equals(tag)) { - selected |= parseCase(parser, row, selected || skip); - } else if (TAG_DEFAULT.equals(tag)) { - selected |= parseDefault(parser, row, selected || skip); - } else { - throw new XmlParseUtils.IllegalStartTag(parser, tag, TAG_SWITCH); - } - } else if (event == XmlPullParser.END_TAG) { - final String tag = parser.getName(); - if (TAG_SWITCH.equals(tag)) { - if (DEBUG) endTag("", TAG_SWITCH); - return; - } - throw new XmlParseUtils.IllegalEndTag(parser, tag, TAG_SWITCH); - } - } - } - - private boolean parseCase(final XmlPullParser parser, final XmlKeyboardRow row, final boolean skip) - throws XmlPullParserException, IOException { - final boolean selected = parseCaseCondition(parser); - if (row == null) { - // Processing Rows. - parseKeyboardContent(parser, !selected || skip); - } else { - // Processing Keys. - parseRowContent(parser, row, !selected || skip); - } - return selected; - } - - private boolean parseCaseCondition(final XmlPullParser parser) { - final KeyboardId id = mParams.mId; - if (id == null) { - return true; - } - final AttributeSet attr = Xml.asAttributeSet(parser); - final TypedArray caseAttr = mResources.obtainAttributes(attr, R.styleable.Keyboard_Case); - try { - final boolean keyboardLayoutSetMatched = matchString(caseAttr, - R.styleable.Keyboard_Case_keyboardLayoutSet, - id.mSubtype.getKeyboardLayoutSetName()); - final boolean keyboardLayoutSetElementMatched = matchTypedValue(caseAttr, - R.styleable.Keyboard_Case_keyboardLayoutSetElement, id.mElementId, - KeyboardId.elementIdToName(id.mElementId)); - final boolean keyboardThemeMacthed = matchTypedValue(caseAttr, - R.styleable.Keyboard_Case_keyboardTheme, mParams.mThemeId, - KeyboardTheme.getKeyboardThemeName(mParams.mThemeId)); - final boolean modeMatched = matchTypedValue(caseAttr, - R.styleable.Keyboard_Case_mode, id.mMode, KeyboardId.modeName(id.mMode)); - final boolean navigateNextMatched = matchBoolean(caseAttr, - R.styleable.Keyboard_Case_navigateNext, id.navigateNext()); - final boolean navigatePreviousMatched = matchBoolean(caseAttr, - R.styleable.Keyboard_Case_navigatePrevious, id.navigatePrevious()); - final boolean passwordInputMatched = matchBoolean(caseAttr, - R.styleable.Keyboard_Case_passwordInput, id.passwordInput()); - final boolean clobberSettingsKeyMatched = matchBoolean(caseAttr, - R.styleable.Keyboard_Case_clobberSettingsKey, id.mDeviceLocked); - final boolean hasShortcutKeyMatched = matchBoolean(caseAttr, - R.styleable.Keyboard_Case_hasShortcutKey, id.mHasShortcutKey); - final boolean numberRowEnabledMatched = matchBoolean(caseAttr, - R.styleable.Keyboard_Case_numberRowEnabled, - id.mNumberRowEnabled); - final boolean languageSwitchKeyEnabledMatched = matchBoolean(caseAttr, - R.styleable.Keyboard_Case_languageSwitchKeyEnabled, - id.mLanguageSwitchKeyEnabled); - final boolean emojiKeyEnabledMatched = matchBoolean(caseAttr, - R.styleable.Keyboard_Case_emojiKeyEnabled, - id.mEmojiKeyEnabled); - final boolean isMultiLineMatched = matchBoolean(caseAttr, - R.styleable.Keyboard_Case_isMultiLine, id.isMultiLine()); - final boolean imeActionMatched = matchInteger(caseAttr, - R.styleable.Keyboard_Case_imeAction, id.imeAction()); - final boolean isIconDefinedMatched = isIconDefined(caseAttr, - R.styleable.Keyboard_Case_isIconDefined, mParams.mIconsSet); - final Locale locale = id.getLocale(); - final boolean localeCodeMatched = matchLocaleCodes(caseAttr, locale); - final boolean languageCodeMatched = matchLanguageCodes(caseAttr, locale); - final boolean countryCodeMatched = matchCountryCodes(caseAttr, locale); - final boolean splitLayoutMatched = matchBoolean(caseAttr, - R.styleable.Keyboard_Case_isSplitLayout, id.mIsSplitLayout); - final boolean oneHandedModeEnabledMatched = matchBoolean(caseAttr, - R.styleable.Keyboard_Case_oneHandedModeEnabled, - id.mOneHandedModeEnabled); - final boolean selected = keyboardLayoutSetMatched && keyboardLayoutSetElementMatched - && keyboardThemeMacthed && modeMatched && navigateNextMatched - && navigatePreviousMatched && passwordInputMatched && clobberSettingsKeyMatched - && hasShortcutKeyMatched && numberRowEnabledMatched && languageSwitchKeyEnabledMatched - && emojiKeyEnabledMatched && isMultiLineMatched && imeActionMatched && isIconDefinedMatched - && localeCodeMatched && languageCodeMatched && countryCodeMatched - && splitLayoutMatched && oneHandedModeEnabledMatched; - - if (DEBUG) { - startTag("<%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s>%s", TAG_CASE, - textAttr(caseAttr.getString( - R.styleable.Keyboard_Case_keyboardLayoutSet), "keyboardLayoutSet"), - textAttr(caseAttr.getString( - R.styleable.Keyboard_Case_keyboardLayoutSetElement), - "keyboardLayoutSetElement"), - textAttr(caseAttr.getString( - R.styleable.Keyboard_Case_keyboardTheme), "keyboardTheme"), - textAttr(caseAttr.getString(R.styleable.Keyboard_Case_mode), "mode"), - textAttr(caseAttr.getString(R.styleable.Keyboard_Case_imeAction), - "imeAction"), - booleanAttr(caseAttr, R.styleable.Keyboard_Case_navigateNext, - "navigateNext"), - booleanAttr(caseAttr, R.styleable.Keyboard_Case_navigatePrevious, - "navigatePrevious"), - booleanAttr(caseAttr, R.styleable.Keyboard_Case_clobberSettingsKey, - "clobberSettingsKey"), - booleanAttr(caseAttr, R.styleable.Keyboard_Case_passwordInput, - "passwordInput"), - booleanAttr(caseAttr, R.styleable.Keyboard_Case_hasShortcutKey, - "hasShortcutKey"), - booleanAttr(caseAttr, R.styleable.Keyboard_Case_numberRowEnabled, - "numberRowEnabled"), - booleanAttr(caseAttr, R.styleable.Keyboard_Case_languageSwitchKeyEnabled, - "languageSwitchKeyEnabled"), - booleanAttr(caseAttr, R.styleable.Keyboard_Case_emojiKeyEnabled, - "emojiKeyEnabled"), - booleanAttr(caseAttr, R.styleable.Keyboard_Case_isMultiLine, - "isMultiLine"), - booleanAttr(caseAttr, R.styleable.Keyboard_Case_isSplitLayout, - "splitLayout"), - textAttr(caseAttr.getString(R.styleable.Keyboard_Case_isIconDefined), - "isIconDefined"), - textAttr(caseAttr.getString(R.styleable.Keyboard_Case_localeCode), - "localeCode"), - textAttr(caseAttr.getString(R.styleable.Keyboard_Case_languageCode), - "languageCode"), - textAttr(caseAttr.getString(R.styleable.Keyboard_Case_countryCode), - "countryCode"), - booleanAttr(caseAttr, R.styleable.Keyboard_Case_oneHandedModeEnabled, - "oneHandedModeEnabled"), - selected ? "" : " skipped"); - } - - return selected; - } finally { - caseAttr.recycle(); - } - } - - private static boolean matchLocaleCodes(TypedArray caseAttr, final Locale locale) { - return matchString(caseAttr, R.styleable.Keyboard_Case_localeCode, locale.toString()); - } - - private static boolean matchLanguageCodes(TypedArray caseAttr, Locale locale) { - return matchString(caseAttr, R.styleable.Keyboard_Case_languageCode, locale.getLanguage()); - } - - private static boolean matchCountryCodes(TypedArray caseAttr, Locale locale) { - return matchString(caseAttr, R.styleable.Keyboard_Case_countryCode, locale.getCountry()); - } - - private static boolean matchInteger(final TypedArray a, final int index, final int value) { - // If does not have "index" attribute, that means this is wild-card for - // the attribute. - return !a.hasValue(index) || a.getInt(index, 0) == value; - } - - private static boolean matchBoolean(final TypedArray a, final int index, final boolean value) { - // If does not have "index" attribute, that means this is wild-card for - // the attribute. - return !a.hasValue(index) || a.getBoolean(index, false) == value; - } - - private static boolean matchString(final TypedArray a, final int index, final String value) { - // If does not have "index" attribute, that means this is wild-card for - // the attribute. - return !a.hasValue(index) - || StringUtils.containsInArray(value, a.getString(index).split("\\|")); - } - - private static boolean matchTypedValue(final TypedArray a, final int index, final int intValue, - final String strValue) { - // If does not have "index" attribute, that means this is wild-card for - // the attribute. - final TypedValue v = a.peekValue(index); - if (v == null) { - return true; - } - if (ResourceUtils.isIntegerValue(v)) { - return intValue == a.getInt(index, 0); - } - if (ResourceUtils.isStringValue(v)) { - return StringUtils.containsInArray(strValue, a.getString(index).split("\\|")); - } - return false; - } - - private static boolean isIconDefined(final TypedArray a, final int index, - final KeyboardIconsSet iconsSet) { - if (!a.hasValue(index)) { - return true; - } - final String iconName = a.getString(index); - final int iconId = KeyboardIconsSet.getIconId(iconName); - return iconsSet.getIconDrawable(iconId) != null; - } - - private boolean parseDefault(final XmlPullParser parser, final XmlKeyboardRow row, - final boolean skip) throws XmlPullParserException, IOException { - if (DEBUG) startTag("<%s>", TAG_DEFAULT); - if (row == null) { - parseKeyboardContent(parser, skip); - } else { - parseRowContent(parser, row, skip); - } - return true; - } - - private void parseKeyStyle(final XmlPullParser parser, final boolean skip) - throws XmlPullParserException, IOException { - final AttributeSet attr = Xml.asAttributeSet(parser); - final TypedArray keyStyleAttr = mResources.obtainAttributes( - attr, R.styleable.Keyboard_KeyStyle); - final TypedArray keyAttrs = mResources.obtainAttributes(attr, R.styleable.Keyboard_Key); - try { - if (!keyStyleAttr.hasValue(R.styleable.Keyboard_KeyStyle_styleName)) { - throw new XmlParseUtils.ParseException("<" + TAG_KEY_STYLE - + "/> needs styleName attribute", parser); - } - if (DEBUG) { - startEndTag("<%s styleName=%s />%s", TAG_KEY_STYLE, - keyStyleAttr.getString(R.styleable.Keyboard_KeyStyle_styleName), - skip ? " skipped" : ""); - } - if (!skip) { - mParams.mKeyStyles.parseKeyStyleAttributes(keyStyleAttr, keyAttrs, parser); - } - } finally { - keyStyleAttr.recycle(); - keyAttrs.recycle(); - } - XmlParseUtils.checkEndTag(TAG_KEY_STYLE, parser); - } - - private void startKeyboard() { - mCurrentY += mParams.mTopPadding; - } - - private void startRow(final XmlKeyboardRow row) { - addEdgeSpace(mParams.mLeftPadding, row); - mCurrentRow = row; - keysInRows.add(new ArrayList<>()); - } - - private void endRow(final XmlKeyboardRow row) { - if (mCurrentRow == null) { - throw new RuntimeException("orphan end row tag"); - } - addEdgeSpace(mParams.mRightPadding, row); - mCurrentY += row.getRowHeight(); - mCurrentRow = null; - } - - private void addEdgeSpace(final float width, final XmlKeyboardRow row) { - row.advanceXPos(width); - } - - private static String textAttr(final String value, final String name) { - return value != null ? String.format(" %s=%s", name, value) : ""; - } - - private static String booleanAttr(final TypedArray a, final int index, final String name) { - return a.hasValue(index) - ? String.format(" %s=%s", name, a.getBoolean(index, false)) : ""; - } -} diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/XmlKeyboardRow.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/XmlKeyboardRow.java deleted file mode 100644 index 6bfe95741..000000000 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/keyboard_parser/XmlKeyboardRow.java +++ /dev/null @@ -1,184 +0,0 @@ -/* - * Copyright (C) 2012 The Android Open Source Project - * modified - * SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only - */ - -package org.dslul.openboard.inputmethod.keyboard.internal.keyboard_parser; - -import android.content.res.Resources; -import android.content.res.TypedArray; -import android.util.Xml; - -import org.dslul.openboard.inputmethod.keyboard.Key; -import org.dslul.openboard.inputmethod.keyboard.Keyboard; -import org.dslul.openboard.inputmethod.keyboard.internal.KeyboardParams; -import org.dslul.openboard.inputmethod.latin.R; -import org.dslul.openboard.inputmethod.latin.utils.ResourceUtils; -import org.xmlpull.v1.XmlPullParser; - -import java.util.ArrayDeque; - -/** - * Container for keys in the keyboard. All keys in a row are at the same Y-coordinate. - * Some of the key size defaults can be overridden per row from what the {@link Keyboard} - * defines. - */ -public final class XmlKeyboardRow { - // keyWidth enum constants - private static final int KEYWIDTH_NOT_ENUM = 0; - private static final int KEYWIDTH_FILL_RIGHT = -1; - - private final KeyboardParams mParams; - /** The height of this row. */ - private final int mRowHeight; - final public float mRelativeRowHeight; - - private final ArrayDeque mRowAttributesStack = new ArrayDeque<>(); - - // TODO: Add keyActionFlags. - private static class RowAttributes { - /** Default width of a key in this row, relative to keyboard width */ - public final float mDefaultRelativeKeyWidth; - /** Default keyLabelFlags in this row. */ - public final int mDefaultKeyLabelFlags; - /** Default backgroundType for this row */ - public final int mDefaultBackgroundType; - - /** - * Parse and create key attributes. This constructor is used to parse Row tag. - * - * @param keyAttr an attributes array of Row tag. - * @param defaultRelativeKeyWidth a default key width relative to keyboardWidth. - */ - public RowAttributes(final TypedArray keyAttr, final float defaultRelativeKeyWidth) { - mDefaultRelativeKeyWidth = keyAttr.getFraction(R.styleable.Keyboard_Key_keyWidth, - 1, 1, defaultRelativeKeyWidth); - mDefaultKeyLabelFlags = keyAttr.getInt(R.styleable.Keyboard_Key_keyLabelFlags, 0); - mDefaultBackgroundType = keyAttr.getInt(R.styleable.Keyboard_Key_backgroundType, - Key.BACKGROUND_TYPE_NORMAL); - } - - /** - * Parse and update key attributes using default attributes. This constructor is used - * to parse include tag. - * - * @param keyAttr an attributes array of include tag. - * @param defaultRowAttr default Row attributes. - */ - public RowAttributes(final TypedArray keyAttr, final RowAttributes defaultRowAttr) { - mDefaultRelativeKeyWidth = keyAttr.getFraction(R.styleable.Keyboard_Key_keyWidth, - 1, 1, defaultRowAttr.mDefaultRelativeKeyWidth); - mDefaultKeyLabelFlags = keyAttr.getInt(R.styleable.Keyboard_Key_keyLabelFlags, 0) - | defaultRowAttr.mDefaultKeyLabelFlags; - mDefaultBackgroundType = keyAttr.getInt(R.styleable.Keyboard_Key_backgroundType, - defaultRowAttr.mDefaultBackgroundType); - } - } - - private final int mCurrentY; - // Will be updated by {@link Key}'s constructor. - private float mCurrentX; - - public XmlKeyboardRow(final Resources res, final KeyboardParams params, - final XmlPullParser parser, final int y) { - mParams = params; - final TypedArray keyboardAttr = res.obtainAttributes(Xml.asAttributeSet(parser), - R.styleable.Keyboard); - float relativeRowHeight = ResourceUtils.getDimensionOrFraction(keyboardAttr, - R.styleable.Keyboard_rowHeight, 1, params.mDefaultRelativeRowHeight); - keyboardAttr.recycle(); - if (relativeRowHeight > 1) { - mRelativeRowHeight = -relativeRowHeight; - mRowHeight = (int) relativeRowHeight; - } else { - mRelativeRowHeight = relativeRowHeight; - mRowHeight = (int) (relativeRowHeight * params.mBaseHeight); - } - final TypedArray keyAttr = res.obtainAttributes(Xml.asAttributeSet(parser), - R.styleable.Keyboard_Key); - mRowAttributesStack.push(new RowAttributes(keyAttr, params.mDefaultRelativeKeyWidth)); - keyAttr.recycle(); - - mCurrentY = y; - mCurrentX = 0.0f; - } - - public int getRowHeight() { - return mRowHeight; - } - - public void pushRowAttributes(final TypedArray keyAttr) { - final RowAttributes newAttributes = new RowAttributes(keyAttr, mRowAttributesStack.peek()); - mRowAttributesStack.push(newAttributes); - } - - public void popRowAttributes() { - mRowAttributesStack.pop(); - } - - public float getDefaultRelativeKeyWidth() { - return mRowAttributesStack.peek().mDefaultRelativeKeyWidth; - } - - public int getDefaultKeyLabelFlags() { - return mRowAttributesStack.peek().mDefaultKeyLabelFlags; - } - - public int getDefaultBackgroundType() { - return mRowAttributesStack.peek().mDefaultBackgroundType; - } - - public void setXPos(final float keyXPos) { - mCurrentX = keyXPos; - } - - public void advanceXPos(final float width) { - mCurrentX += width; - } - - public int getKeyY() { - return mCurrentY; - } - - public float getKeyX(final TypedArray keyAttr) { - if (keyAttr == null || !keyAttr.hasValue(R.styleable.Keyboard_Key_keyXPos)) { - return mCurrentX; - } - final float keyXPos = keyAttr.getFraction(R.styleable.Keyboard_Key_keyXPos, - mParams.mBaseWidth, mParams.mBaseWidth, 0); - if (keyXPos >= 0) { - return keyXPos + mParams.mLeftPadding; - } - // If keyXPos is negative, the actual x-coordinate will be - // keyboardWidth + keyXPos. - // keyXPos shouldn't be less than mCurrentX because drawable area for this - // key starts at mCurrentX. Or, this key will overlaps the adjacent key on - // its left hand side. - final int keyboardRightEdge = mParams.mOccupiedWidth - mParams.mRightPadding; - return Math.max(keyXPos + keyboardRightEdge, mCurrentX); - } - - public float getRelativeKeyWidth(final TypedArray keyAttr) { - if (keyAttr == null) - return getDefaultRelativeKeyWidth(); - final int widthType = ResourceUtils.getEnumValue(keyAttr, - R.styleable.Keyboard_Key_keyWidth, KEYWIDTH_NOT_ENUM); - if (widthType == KEYWIDTH_FILL_RIGHT) - return -1f; - // else KEYWIDTH_NOT_ENUM - return keyAttr.getFraction(R.styleable.Keyboard_Key_keyWidth, - 1, 1, getDefaultRelativeKeyWidth()); - } - - public float getKeyWidth(final TypedArray keyAttr, final float keyXPos) { - final float relativeWidth = getRelativeKeyWidth(keyAttr); - if (relativeWidth == -1f) { - // If keyWidth is fillRight, the actual key width will be determined to fill - // out the area up to the right edge of the keyboard. - final int keyboardRightEdge = mParams.mOccupiedWidth - mParams.mRightPadding; - return keyboardRightEdge - keyXPos; - } - return relativeWidth * mParams.mBaseWidth; - } -} diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/AdvancedSettingsFragment.kt b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/AdvancedSettingsFragment.kt index 337c22e8f..61018a465 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/AdvancedSettingsFragment.kt +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/AdvancedSettingsFragment.kt @@ -298,7 +298,7 @@ class AdvancedSettingsFragment : SubScreenFragment() { override fun onSharedPreferenceChanged(prefs: SharedPreferences, key: String?) { when (key) { Settings.PREF_SHOW_SETUP_WIZARD_ICON -> SystemBroadcastReceiver.toggleAppIcon(requireContext()) - Settings.PREF_MORE_MORE_KEYS, Settings.PREF_USE_NEW_KEYBOARD_PARSING -> KeyboardLayoutSet.onSystemLocaleChanged() + Settings.PREF_MORE_MORE_KEYS -> KeyboardLayoutSet.onSystemLocaleChanged() } } } diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/Settings.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/Settings.java index f86fc5ebb..ad415ea0e 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/Settings.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/Settings.java @@ -103,7 +103,6 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang public static final String PREF_GESTURE_FLOATING_PREVIEW_TEXT = "pref_gesture_floating_preview_text"; public static final String PREF_GESTURE_SPACE_AWARE = "pref_gesture_space_aware"; public static final String PREF_SHOW_SETUP_WIZARD_ICON = "pref_show_setup_wizard_icon"; - public static final String PREF_USE_NEW_KEYBOARD_PARSING = "pref_use_new_keyboard_parsing3"; // todo: remove later public static final String PREF_ONE_HANDED_MODE = "pref_one_handed_mode_enabled_p_"; public static final String PREF_ONE_HANDED_GRAVITY = "pref_one_handed_mode_gravity_p_"; diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SettingsValues.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SettingsValues.java index 8dcc9a838..e5addd46a 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SettingsValues.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SettingsValues.java @@ -108,7 +108,6 @@ public class SettingsValues { public final boolean mUrlDetectionEnabled; public final List mPinnedKeys; public final float mBottomPaddingScale; - public final boolean mUseNewKeyboardParsing; // From the input box @NonNull @@ -246,7 +245,6 @@ public class SettingsValues { mPinnedKeys = Settings.readPinnedKeys(prefs); mSpacingAndPunctuations = new SpacingAndPunctuations(res, mUrlDetectionEnabled); mBottomPaddingScale = prefs.getFloat(Settings.PREF_BOTTOM_PADDING_SCALE, DEFAULT_SIZE_SCALE); - mUseNewKeyboardParsing = prefs.getBoolean(Settings.PREF_USE_NEW_KEYBOARD_PARSING, true); } public boolean isApplicationSpecifiedCompletionsOn() { diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java index 2a4aae7b2..b74b1f549 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java @@ -92,9 +92,10 @@ public final class AndroidSpellCheckerService extends SpellCheckerService return mRecommendedThreshold; } + // todo: this needs to be adjusted! private static String getKeyboardLayoutNameForLocale(final Locale locale) { // See b/19963288. - if (locale.getLanguage().equals("sr")) { + if (locale.getLanguage().equals("sr") || locale.getLanguage().equals("mk")) { return "south_slavic"; } final int script = ScriptUtils.getScriptFromSpellCheckerLocale(locale); diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/ScriptUtils.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/ScriptUtils.java index b2a16fca2..24327f4b2 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/ScriptUtils.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/ScriptUtils.java @@ -39,7 +39,7 @@ public class ScriptUtils { public static final int SCRIPT_TAMIL = 15; public static final int SCRIPT_TELUGU = 16; public static final int SCRIPT_THAI = 17; - public static final int SCRIPT_BULGARIAN = 18; + public static final int SCRIPT_BULGARIAN = 18; // todo: why is bulgarian a separate script? public static final int SCRIPT_HANGUL = 19; private static final TreeMap mLanguageCodeToScriptCode; @@ -56,6 +56,7 @@ public class ScriptUtils { mLanguageCodeToScriptCode.put("bg", SCRIPT_BULGARIAN); mLanguageCodeToScriptCode.put("bn", SCRIPT_BENGALI); mLanguageCodeToScriptCode.put("sr", SCRIPT_CYRILLIC); + mLanguageCodeToScriptCode.put("mk", SCRIPT_CYRILLIC); mLanguageCodeToScriptCode.put("ru", SCRIPT_CYRILLIC); mLanguageCodeToScriptCode.put("ka", SCRIPT_GEORGIAN); mLanguageCodeToScriptCode.put("el", SCRIPT_GREEK); @@ -70,6 +71,15 @@ public class ScriptUtils { mLanguageCodeToScriptCode.put("th", SCRIPT_THAI); mLanguageCodeToScriptCode.put("uk", SCRIPT_CYRILLIC); mLanguageCodeToScriptCode.put("ko", SCRIPT_HANGUL); + mLanguageCodeToScriptCode.put("hi", SCRIPT_DEVANAGARI); + mLanguageCodeToScriptCode.put("kn", SCRIPT_KANNADA); + mLanguageCodeToScriptCode.put("kh", SCRIPT_KHMER); + mLanguageCodeToScriptCode.put("mr", SCRIPT_DEVANAGARI); + mLanguageCodeToScriptCode.put("mn", SCRIPT_CYRILLIC); + mLanguageCodeToScriptCode.put("be", SCRIPT_CYRILLIC); + mLanguageCodeToScriptCode.put("kk", SCRIPT_CYRILLIC); + mLanguageCodeToScriptCode.put("ky", SCRIPT_CYRILLIC); + mLanguageCodeToScriptCode.put("ne", SCRIPT_DEVANAGARI); // only Latin, Cyrillic, Greek and Armenian have upper/lower case // https://unicode.org/faq/casemap_charprop.html#3 diff --git a/app/src/main/res/drawable-hdpi/keyboard_background_holo.9.png b/app/src/main/res/drawable-hdpi/keyboard_background_holo.9.png deleted file mode 100644 index 73868751cec4f61381e4e7313d4e41db56a91887..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^tPBi{dK_#(mRs?SB|wU$*vT`50|;t3QaXTq&H|6f zVg?58P7r1^KY4mBP_Wh0#W5tJ_3aEtt_B4G*ZCI{_x#V?b9PIiV#<}IMJInUEADZ9 zU(YI@l*V9IBhnDH`r`7f$Bw1wEj;@mv#ep>gMahyeTc3;;NkgZ=J{CnH`-o7!M`;F z1%6lcs(cbn-L`t!dW~Y=Qhrg*2W=Y9KTW*G{eSwL`~!zBFSm4bbUc``;Y;bBqo){e X9B9$Vd{f2^bP$85tDnm{r-UW|BT$x~pC70I0)WaG85xKgava+)B^70A_3Q9^! z8X6i}T3RM1CZ?vQR#sNl*47>#9$sEvfq{W(X=&x<<<-^IGiT1+y?giFyLbQp|L<|o z?;_Ap>yjY9U|^syv#_$Ub8vF;@(BtFiHM4cOGrpc$;d0KXz3Xk+PL`z21R9+RMoV% z_fDQNYxdkVn|B{Ma_PgjKND>HNEaj?aro_w(?!CD0$zQ+!e+z5K#sjGVIRURXZJ1oqCBoX1cHn5n;#m2+tKVHLQ8$Y|7Ck#R z>CBHD&z?PL2l5%>K4l%vZJxmX?fs3v92JLecbGDCY_(;VxUO_K>_+&KgMzvO;VcWe z8zeVAE?B_F-g4kA_o8AYpOlHNc?b5o9?_D?JD@MRq%EjLA++X{4p*b=?H%0eSL777 zu^w@lvE{<0nb&h#Z}IR_S{D zb&mVx$SLm~X7FzFIK;g(f1=FqLz|M!3RVS7{NVGkbMuOZA2J;eGkZR|Gr5$mdb~7W zP~`Zb4crxb+O(Er>N>rRoBjXQ#ruDXrpzz-e4p{4+QvJRi>Dq1B}q?LKbLh*2~7Y+ Cgdt)8 diff --git a/app/src/main/res/drawable-hdpi/keyboard_key_feedback_more_background_lxx_dark.9.png b/app/src/main/res/drawable-hdpi/keyboard_key_feedback_more_background_lxx_dark.9.png deleted file mode 100644 index 1624315fef9488c3a4a00caa16e3e2e85d728b9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 958 zcmeAS@N?(olHy`uVBq!ia0vp^VL)8Q!3-o*Ri=CfQq09po*^6@9Je3(KLBz$3p^r= z85p=bL736}ZQqxdg-`u+~7Z}0}z9m6^!N34!VrF4w=j7t% z;o}z+5fhh?m6MZ~S5j6{Q`gYZH#9Z3wsUZCbNBZ3^N&bM&CJd#tZ(R_HhspDrOTGB zT(xS$rp=qLUVHxX&HE4ku12%}1RA*B)5S4F;_};bj(L{@1lm95A3I+*WtzZ}OVSE{ zlP^D$l4)cPU^_0NGWE@Dyd-bpZU zHn?q{Z+Ay8ucq?XFAdfksti}Z{9Mf6ee+w~exJPOQMtQ%gA@O)`^>#9dV5IZ?lR^8 z2i313QS)8=bylqun_VJS-ca`SMqV1D;KZmmCxaNCeUh^F+{NBfwbeLO_w)Q0|NCNd ztsBxVGrxHD?a}mmYs|`b{Yx|Xo?AKNL7wa9)lP4FC*>vFy_C}+7Z#Ghew@ z*!A=(>)$)-Bok{Y{{QBvx!-r*G=h(v;S)c@sq?4j7xlhfe^@AI!$CG_d_-KYZt0Gq zle?;Quic5yzU#JnVbr`(p$BoNg5x@MT<(4<)_kTuZIZWL-`-PBr5Za^tgk;x-SkFn zSBL5Llgl2ZU(2z|xc}-=)ak>CM%LG(t~q=5o)Efz_w<+aGiB?Jp7zMIy6C#~S+Ztw zVZ%=UP}k6iknY(#XYSq9pmb={&g7U)p~}9mm7dmsHdx+%Q~lo FCIInVLe&5O diff --git a/app/src/main/res/drawable-hdpi/keyboard_suggest_strip_holo.9.png b/app/src/main/res/drawable-hdpi/keyboard_suggest_strip_holo.9.png deleted file mode 100644 index 32f4264027af27049412cef0173b57d0213fb4f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 156 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1i!3HFsuehcLq*#ibJVQ8upoSx*1IXtr@Q5sC zVBqcqVMg{Kok=|K&5AfL0qBeIx* zfx8og8O=|gUJDe=^K@|x@#uUzeIxGy1s)duDT#ajo8&w;ad2F8LFEu%UFWmZck)^e zp^RJfgc>?D95h?cEV$z~o3G*2OX2Cd=Z{JE_%G;|2zz(<BT$x~pC70I0)WaG85xKgava+)B^70A_3Q9^! z8X6i}T3RM1CZ?vQR#sNl*47>#9$sEvfq{W(X=&x<<<-^IGiT1+y?giFyLbQp|L<|o z?;_Ap>yjY9U|^syv#_$Ub8vF;@(BtFiHM4cOGrpc$;d0KXz3Xk+PL`z21R9+RMoV% z_fDQNYxdkVn|B{Ma_PgjKND>HN#Ln+8@_|Rq5Yjk z{)f^!o`jbQ_nBw5hECa8>B%4var(-smOXAI49UNL%nAARy}#9f9-~6t9;7_*?IZ_NgH<`pfXzzUwbcqpdpSvflj_bE`Gu8fngp&;a(w;fzk0n(FtMkDPajI z;Rz`bNogs$g{gT(d1Y1k<<-U2^(8g+rL~Ra_06w31hjx=8I=V21v4-(GBLBTad7eQ z^6?9ZipeW#XzA)18k^hLJ2?7+8o!SgroynOZQ&lZ`Ie4y@Mo-U3d z5|`he-|ctULBQ>y@#cLK3MM)o&;IduzT$dERxjbiH+N@>6kZB=V7TaZ@Y=9nU$PSt zf~9YoGCH_UyZ+wtUD@)tx3lGE{I=SA-oV7+6`v-1M)i*kOk7L0b;jP@(y4v5FJUf| zRl_n3->T@V8lkLTIFtglHm%9a(Y^cLVV?Yg+RW+e)8@XJuW|YDI_aC=tGL!avq|5S zdSYJk>ZigI?hk7E?)}>QxXf$m)Uc>bIPtPRxLa{|@ODi%_2LDLUA^lzNmb2Ut8-;p zoa?oy^7-n!FB(O0T`-y|t-IJ?YC+gOZUqL<>)r+C+J7_!+1nOaF%>Z?*@wMhS1ARh OCAfL0qBeIx* zfx8og8O=|gUJDeo^mK6y;h5QaZX@pj10LpslOLvT`QPA^sN5R##QT$DfDp%|BkQ#8 s@~%2nrZs)d>is^4jehXkNk7}j-k>X8|8AvlAV|h-2UecWTzcss96#lYUdwRO3aEgkDC%#1f>G>r{>7Ibe!AaydgmI8 z#&Xl1@J*~=w)QVbxMjSv5eyCr2mGqs+i{xna&-H9_0!p}fDUKyboFyt=akR{0Bo*l A^Z)<= diff --git a/app/src/main/res/drawable-xhdpi/keyboard_key_feedback_more_background.9.png b/app/src/main/res/drawable-xhdpi/keyboard_key_feedback_more_background.9.png deleted file mode 100644 index a5c992b61f80079c96ebc43e6c35891d758bf802..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 928 zcmeAS@N?(olHy`uVBq!ia0vp^bwHfJ!3-qdD4GQVDaPU;cPEB*=VV?2Ih+L^k;M!Q z+`=Ht$S`Y;1W=H@#M9T6{SGS!yOiG969&J4dYA%yLR^7T!~;G)J~YLmqM~Rb#B(_~ zIDm=;1qB5J1b`$ijX+s`etw_=2mmT$WMpJwVq#@wWn*Il3Q9>y$;!&g%gZY$C@3i@ zX=rF@X=$05n3$THT3K0HTU&d0czAhv1qKGDrKOdZmseL;&zw1P_wL6Z19N5=&gROxSyoSETgo_oj*MrKx^Pn2Oilt6fyF zDSS$gfQQ7+h_}CGPrRsjzI$cuY1xFsF2*8-=0>t>H{bgH_1{@B)icj?-b+~B*nU{{ z!O4BhJ@FiZnh(}Xc)6WSu}c4TVPgBuqLrTe&d$@F_eS%_^tjryKjwe@Z65bq)OpkX Xhv}P4e5cL%07|Q#u6{1-oD!M<-`_kW diff --git a/app/src/main/res/drawable-xhdpi/keyboard_key_feedback_more_background_lxx_dark.9.png b/app/src/main/res/drawable-xhdpi/keyboard_key_feedback_more_background_lxx_dark.9.png deleted file mode 100644 index 3f22482e8d5b08a2f50f7e6584aa23ed93f70a93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1097 zcmeAS@N?(olHy`uVBq!ia0vp^ML;~4gBeK13*M0cQq09po*^6@9Je3(KLBz$3p^r= z85p=bL736}^z#S`H?eavu>(2D+|kw6-N)9$ z7bp%?29)v+jq(YP_6?5-Pe_eON{>uR&nzs>VvWmK{zJZ~Uk&&sHg{6(F zPhfCJXjoKIc1~eQSxrM@TknKPlP1qwyma}>4O_Ns-?{7LwGW>^fBpLP+xNv)mKPWp zn5;Zq977~7zde7j@3I3=L*nh3KGCAZyc%rYus5C9rVbwJ6_@|u;E>-_CcQekm+*|Wk zZc{>dI^+s|8{bxVn<&D@u|@ZyqNUW#>hG-vd_o0p^@^L?w(>>GK!N0aiDSDia4 za81xheVys^LifkLw*(GUIAwIMo9a@S?3-tFdF!SL9oJNpd~ej*ByLb=zP64_*|up( zRzR-a)oUsbeN`21gvW7M#TcDE+3on@L*b>2LyO|0-F=^LOu76iu^uB@d#dNG{jT1V9{)F2wp&}3b)e_W`t5a5o87nDZ@aQ2`O1;Q>lSZ&-^RP& z#ph&S%evWSpMHOOQM0eU^TET<6`wxDhgiK_GTDzz;@|Bh(=2a0-Ay>7ExKj9YNSK@ z)WiHIK3@#7v3sp*e8uCT+20AKl8rzAXlr_(!81rn_r#=`Kc~2?TjJq=$5}vSwpZ%A)1hahR^BPOkT1b|hH08* z;qf&F%EdvvlFkkhb95ZnbpE!xKjDzpArlupzpR%cFD<=Q)fWVq^m#7r34UQ286d$V xp1)?Uv(|}{J?bYKL@Hi8Udh~UK8;WOBmezyjumafn@@l;g{P~Z%Q~loCIGX9eKG(5 diff --git a/app/src/main/res/drawable-xhdpi/keyboard_suggest_strip_holo.9.png b/app/src/main/res/drawable-xhdpi/keyboard_suggest_strip_holo.9.png deleted file mode 100644 index 4c27072e9be1e369cc126d0a19012c4070998ced..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^Y(Ol;0U|59*B=E^EX7WqAsj$Z!;#Vf4nJ zaCd?*qxs3xYk`7Zo-U3d5>t;(G~_y9z{Bi+aQ(;s_tQ%=+9o7vq?~9Jmp{RgEPdeh z4K@z4Gui+E diff --git a/app/src/main/res/drawable-xxhdpi/keyboard_background_holo.9.png b/app/src/main/res/drawable-xxhdpi/keyboard_background_holo.9.png deleted file mode 100644 index bcef0f839e563c3131bc1b1acb0b17fac45de190..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1151 zcmbVL-Afcv6rZ+|tgNtJvWJGz1tVu??yS4xOl~o|Gn1RG%DRyF5RNl}%*Xh9bY>ex}TwIpH!3nGmySwprjmJ(E%SHyB)W+<}kf(i+0HL0FV z7nyQANX8;8t+R2KjDrY>HuF5+L~<-(8J1%JM+07raw5x;YafN9c}8B$%IaDytR<*H zgj|tfip6527>zjI00RU;2sk*7#vZgkVk50Y+kSn8L59BWnJzLNn+zDWerFgZD4gkP z36`75tP|V*TBC5wn3Co)Ai^@171UMs_E8r8Nn=BAKR4n+CJTLM*wgWQ4tJTWTGtWUo^&E>V_g6GGh_5ILhy&0Zlep%f z?iL=XYD-d)S)4zJ;ks9`#{cw;!O1YeaQrna6%(GoKwKYvtgJ5&wDHDxcs1T!a80~c z3u#%(m6kug5^688dlaeWk%m^Dzl%S}PK4mT_QQ*ti+xL-hmet}LMVHny)k@kYooa%Jb7#K#n?>taCI9!OHb6E zI1}D9KQ~*qI5{&$&u+PTy`isZep6vN#PY94h#S@CSElO5<{GQ-j1xbMm4|P`^9|*- k4~{RV_dNdj{@?-~+DRNVFHd)b-+v11X{AHHnd}??4UL3xD*ylh diff --git a/app/src/main/res/drawable-xxhdpi/keyboard_key_feedback_more_background_lxx_dark.9.png b/app/src/main/res/drawable-xxhdpi/keyboard_key_feedback_more_background_lxx_dark.9.png deleted file mode 100644 index 4c8df78c88f582c4c5647fc9eb832445f8e8ef50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2104 zcmeAS@N?(olHy`uVBq!ia0vp^tAO}52Q!d7x8`ppkYX-&@(khN;JE$J{{fK8S>O>_ z%)r3i3Bru#Cr__sU|`xE;1l8sl>GnyKad>cz{$%W;zE0OZy>|a(iTYCdw|$<2Atg7 zXf`qe0TUCNARaCo8#`86StS)9LX*-mGSxORg$s&GN?W^n`$fbmYw9R#>ALs_1CeKN zgp8sxm{gHbQUS8f?OlK*5SiJ#m^rvuyL#EU`vk=#TDy50+c-M;2D%4@0nIdbbhUJL zw{-RZirWB@yN|605c%49`q_K=J9q~;`UE=p1iJW#xCVr}0a0L>cW9J%XtYmQv~PHf zUjz`v`bWkEMJE6a4~_+*q|o@3umm7VjYv$3NCKkt$fWeB}QWslYX{jjnm$S;_Ifsu)sg_Vt+gOiJ!hnJ6EKu}0nL{v;% zLQ+avMpjN#v#YzOf8zA%GiJ}3 zJ8$8VB}-SVTC;ZDy7e2jZribY@4f@)FI>2I>GF-+ckbT1_xjhbUw{7o{dZ}{j}it3 zmUvGW#}J9jZ_fwjOS=lNf4F;d@8-E0zQU`50zB;*r#{#m;=*JXzqCd)uEMe7Q1C4; zlM8Jseo4Q}%G-8+o?9&5YJTgs$N!18kN>}!`zJcN@66s6)rVXbZh5oT=j^GzHItql zKD_k3cBn_#ZrRXiYuDX3etqx#?iQlFb>Gjr{|9>F*Zar+(+Qev{d(eC&(0UO<-eCr zN^#hlSNHFedfL5+{tV@<=R}|K`==YSubgP{`_t}C1?O(@Zrt6fSoH3v-0YmL@AIwQ zmuykoI!$b{xV75iTa|{oS=rJ1TBAO#oAb8VFXY~Qsf|iUYFBN1Qe${?+ME@eY&-9% z(xbIyOT(1j7cI8(zv9VT8njewigc)_*VfuB&56&ul(Ib{ zuEqD(y{I_dqJ?(VNoOu!uiy6a0e5ct`deGRmfo$Od;gH=D0En-^2Rul(QjNVSmU zzW(1YA5E{Db^iZrU8C>I9R6~YR@ARx3kh&!1-gIWiTpsuf_*yviD}CvT>xx2jufZ9UlXG-+RemiAuv)Jap4wiYeD z&aS<5m*7gzl`_*3BiF8)G3iuw$k8H`X<;S*gOm$j4Bcd&&Y*C1i^2VNR+h%QClNGSCMQcr%;WCvr_7K~3>n8_& zSf?NrxNDnHyNGj7V11`#(AS77^2(O2eSV=ik0Q)pE-_ye<$f(vDgCvA`_y=AZe$?|_P;-onq}KG)thw1Z_}d_X(+21q)HO#EuL8m?Y3ISM$Z*SjxoM z3`8hMqU$Dc9cf3jPX4-as&>@a4v1JMk-rsMtRC&TKA7e1Y(t46^G3ZMI;<$>Cibl@ zmw2>_i#&S~Y{ypRf|NrQS+8ga<_i!iIYT#$a$d&@*7XeRbDW07S%k5csZ4(f zY~(au(ej$2Kn)swY}JdX=~<+2*I{;h*z%cJRSStp{jlNtoBa-0?)cP?I(`7Ol^m#< zmg6OIQl8^zF$tYJ#5O|T1xNW+om1@Vl2*uOHCe_;O5!fa&?sXlLxeI2Wf9-Q+W(U? zkvStK&GApO^siV4CdZT3XTr(w5RXkv$VTJ$-u_)SR;yK9Zp5EjzYY&eL*u{S?UloM za3hsU4d3LRfByKm)Vw&&)}yJf+{4LulB@lAur@Fd)^encS+rgkMx{?fwBZg-Ip= diff --git a/app/src/main/res/drawable-xxxhdpi/keyboard_key_feedback_more_background_lxx_dark.9.png b/app/src/main/res/drawable-xxxhdpi/keyboard_key_feedback_more_background_lxx_dark.9.png deleted file mode 100644 index 06336a4262a9765c959a22d7bef973c547d63602..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3507 zcmd^Bc~p~E77w5ZR0aa5fPx{Y$dZ*nNF+cY30uMv5@aiw7<25C{Ym8jHeW5g-B~ z-zipb)CjTMcF_X`kn?0hsX{0b!{$A5xDus;1P3!+ID$yZU@SQn%Rd$hEE!78k)kk2 zG)g3zKi3DeT)_nXmB#O)<*c1j0L2945~Yj>-iN?;kqp-Ej|0sE!EA`ZG9h>=oFs~b zrxXEVg+GM^2X~NsA)n}s#!|63XK$(-7VGMU!GIIlhw4VAqFtN`Xf$ro$M12mXg4=bfQ7A3RvI$Gqd*Co-t%9P{gOf zk+IC^Z4q2SG(RB*NCd>mfLInUQN&9X3CT)f@{VNnE?G*tGA(n*u1r^j(=;<4PRr-sOF%)WIVrpi#YV{g(3(K|ZtgK-+aN7+VH`#5rcW`t< zAW;~sGtLE%ClKA;NgkeFWD1q$8xTlm1Ov6`CWCu&dDH#C0U)YSa<*0X0X zT-3C;U%J%!&CMSkJa{-T@MP%i#MIQ(^z`)14C+`)I0T}b?oT1J)c0Q8Z95dx1=anj ze%PaB5SiQBUtp@!4moS4Cpdbu(0j#u)`C5*{N+gZjXti z@)}VFryy7U)~2H^M6@x?A`$U*k?=kJ7bt^8VJU5TZHlsTwsAU(%Ekh3QK&5T(3?l; zvUe?C-y3b{nw$Rh2qbe9CK+xDVfTICG5w1#^wCP%MTd^b>9~xP63Edr?nO1Z2g=JU z=N^AnYIL40@0jlHiu2&ZRe8$PJ?tO3LlYgZ*U5ABreCWvRvHFw{!18cl}ig3<$0aF z4}Q8M{a5^v!&yzd2SK-b1Il(K4?RJ?O@4c|qe9Qg2t@WVzq>pB{ARROTFOaz;Y~(f zg&Dg$$+f#`=vrr*tNzcI!ktHruj9G}CA?E=!e?}{^~UmhN%bwaR0A#atb1fsd3{t_ zVr8W^<`kvgsp1QFh^c?L0WHfuZ~Mq z$LnhkGp|4EWCq$(m7>OizU{|O7t0Lni)#`q1daIq3IQ(6%9Hx3-=S6Yby4}1&R}on=+IWcg~FJ z4Vk59-;Ylk3(elLKD{~wh>mPNcYPd}PJg&JO|OIg{JH5qii!V*LW)V3UAtTJvk9a7 zK2LiZCTC{8zj^h_gBvR^i|Fc!H@U5Zw`F|Eklk}Xyx{xiX+c< zG4@}N7FoUUMXjETn|z_}eAAa5pTENAsZsVL%YyUiXS!caD_(NsEi&4SM{K)6U2}E{ z!920y>4a8pzT=>vPd)i;+q2}pynG!K$p|+<^U!_zN)o1aKm?Vn2^*eyk)xUX#;ADq z+zhv@l2Jjp40p8<6D#dgc`$<=op`!7UydCfjK1;iZpoUzLE zdTkEX*UD^b&JerSp=U<6IOW~3^IqM)?B($E6XA_@nvV2VN|OD^Nt!&_Xtt!pv#Irv zYjaI@$7}evo(G`H~lEMsz z%j4t4S5B0c_C!naA6r;k?0&M((qeSr#<+ihM|J%jJ=zJiYU15LG%l+Ayv{+tX(uIsJ?OiYmo?QwhjDp^!QgjPd`spTaSkR zxXeNm)lwtd-^dYASJ<;Cg8lgFa|7k6`O6BjH3@fn%k^ae6-kGUOE7|-+wao`E}rZB zBGwG%L#JW|k89Vk*``+7dNB8kt+%5_NG4-8^{%VFUD@24cx!hGR7*9c**SuEV~%0$ zHZIdC8*Md1B-X#y}gGaI9lpKh~7P=C%{iK=y)km#5V%kJjn=t)St zQ>*ZuII6)ilQ2YhZ!b&NKlxR;nZNvhaX^q#7!qR`JC9Cdzj7-Xd1|VbLTF@(kz5};PiK!Et=$Ju;tfF^4!zik8o=; z>$tbF9QM-j2gCA~D~!%(SXOZxJT1A{hZTx&pe=R#+&Ty9j?yQ3_#V`wptPQTTDwPS q+{tnDt7O#7_hu5^HL+tx)9brlMMkWxqUg>4Gw`PdQJTEB?fEAg;M#-$ diff --git a/app/src/main/res/drawable/btn_keyboard_key_holo_white_no_border.xml b/app/src/main/res/drawable/btn_keyboard_key_holo_white_no_border.xml deleted file mode 100644 index a6dfc7496..000000000 --- a/app/src/main/res/drawable/btn_keyboard_key_holo_white_no_border.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - diff --git a/app/src/main/res/drawable/keyboard_suggest_strip_lxx_base.xml b/app/src/main/res/drawable/keyboard_suggest_strip_lxx_base.xml deleted file mode 100644 index 895f065f8..000000000 --- a/app/src/main/res/drawable/keyboard_suggest_strip_lxx_base.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/more_suggestions.xml b/app/src/main/res/layout/more_suggestions.xml index 1d1d43dbd..2485b4fb5 100644 --- a/app/src/main/res/layout/more_suggestions.xml +++ b/app/src/main/res/layout/more_suggestions.xml @@ -18,6 +18,5 @@ android:layout_height="wrap_content" latin:keyLetterSize="@dimen/config_suggestion_text_size" latin:keyLabelSize="@dimen/config_suggestion_text_size" - latin:keyHintLetterRatio="@fraction/config_more_suggestions_info_ratio" - latin:keyHintLetterColor="@android:color/white" /> + latin:keyHintLetterRatio="@fraction/config_more_suggestions_info_ratio" /> diff --git a/app/src/main/res/values-land/config.xml b/app/src/main/res/values-land/config.xml index cb205ee9e..c35eafd86 100644 --- a/app/src/main/res/values-land/config.xml +++ b/app/src/main/res/values-land/config.xml @@ -47,11 +47,6 @@ 40% 40.000% - - 3.20%p - 65% - 48% - 36dp 54dp 48dp diff --git a/app/src/main/res/values-sw600dp-land/config.xml b/app/src/main/res/values-sw600dp-land/config.xml index 10e32ef99..166b0fa33 100644 --- a/app/src/main/res/values-sw600dp-land/config.xml +++ b/app/src/main/res/values-sw600dp-land/config.xml @@ -36,11 +36,6 @@ 30.0% 4dp - - 3.20%p - 62% - 36% - 44dp 180.0dp 54dp diff --git a/app/src/main/res/values-sw600dp/config.xml b/app/src/main/res/values-sw600dp/config.xml index d78a4d110..c3c9ba2c7 100644 --- a/app/src/main/res/values-sw600dp/config.xml +++ b/app/src/main/res/values-sw600dp/config.xml @@ -50,11 +50,6 @@ 3dp 3dp - - 3.20%p - 52% - 27% - 44dp 54dp 54dp diff --git a/app/src/main/res/values-sw768dp-land/config.xml b/app/src/main/res/values-sw768dp-land/config.xml index 0436bd27a..f4d84c838 100644 --- a/app/src/main/res/values-sw768dp-land/config.xml +++ b/app/src/main/res/values-sw768dp-land/config.xml @@ -35,11 +35,6 @@ 24% 30.00% - - 2.65%p - 53% - 30% - 40dp 340dp 54dp diff --git a/app/src/main/res/values-sw768dp/config.xml b/app/src/main/res/values-sw768dp/config.xml index f48ea01b9..d3bc2ca6b 100644 --- a/app/src/main/res/values-sw768dp/config.xml +++ b/app/src/main/res/values-sw768dp/config.xml @@ -45,11 +45,6 @@ 3dp 3dp - - 2.95%p - 51% - 33% - 40dp 100dp 54dp diff --git a/app/src/main/res/values-v31/colors.xml b/app/src/main/res/values-v31/colors.xml index 66983e6b6..c664b6b6e 100644 --- a/app/src/main/res/values-v31/colors.xml +++ b/app/src/main/res/values-v31/colors.xml @@ -13,10 +13,6 @@ @android:color/system_accent1_500 @android:color/system_accent1_200 - @android:color/system_accent1_900 - @color/highlight_color_lxx_dark - @android:color/system_accent1_200 - @color/highlight_color_lxx_dark @android:color/system_neutral1_100 diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 8057225f9..2fce236d4 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -412,24 +412,14 @@ positive is to right. The value is in proportion of the width of {@link org.dslul.openboard.inputmethod.latin.utils.TypefaceUtils#KEY_LABEL_REFERENCE_CHAR}. --> - - - - - - - - - - @@ -571,33 +561,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 79e3de022..1ac7d19d5 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -12,24 +12,12 @@ #FFFFFF #CCCED5 - #5E97F6 #5E97F6 - #436baf - #5E97F6 - #86b0f6 #1A73E8 - #CC37474F #B337474F - #B337474F #FFF0F0F0 - @android:color/white #66E0E4E5 - #80000000 - #A0FFFFFF #66E0E4E5 @android:color/white #80000000 @@ -57,7 +45,6 @@ @android:color/white @android:color/white @android:color/white - @android:color/white @android:color/white diff --git a/app/src/main/res/values/config.xml b/app/src/main/res/values/config.xml index 012fffc37..925b75ac1 100644 --- a/app/src/main/res/values/config.xml +++ b/app/src/main/res/values/config.xml @@ -55,11 +55,6 @@ 1dp 2dp - - 3.20%p - 55% - 41% - 40dp 36dp 36dp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a4ccde6b0..aa51cb2a5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -162,10 +162,6 @@ Space bar language slide Swipe upwards on the spacebar to change the language - - Use new keyboard parser - - Use this setting if you encounter issues with changed keyboard layouts (please report the problem). This setting will be removed at some point. Backup and restore diff --git a/app/src/main/res/values/themes-holo_base.xml b/app/src/main/res/values/themes-holo_base.xml index e98190fe8..76c01dd17 100644 --- a/app/src/main/res/values/themes-holo_base.xml +++ b/app/src/main/res/values/themes-holo_base.xml @@ -47,14 +47,9 @@ @drawable/btn_keyboard_key_holo_white @drawable/btn_keyboard_key_pressed_klp_light @drawable/btn_keyboard_spacebar_holo_white - @color/key_text_color_blue @color/key_text_inactivated_color_holo - @color/key_text_color_blue - @color/key_hint_letter_color_holo - @color/key_hint_label_color_holo @color/key_shifted_letter_hint_inactivated_color_holo @color/key_shifted_letter_hint_activated_color_holo - @color/key_text_color_blue