From cb8f9584cf1e7054194d6c6da78dccc925e86c5f Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Mon, 13 Jul 2026 09:26:17 +0200 Subject: [PATCH] fix(android): improve clarity of keyboard script error popup * Remove irrelevant context from toast and add more context for Sentry report. * Add a test keyboard with a script error that will trigger the toast on first keystroke. * Rearrange common/test/keyboards/invalid to make a good place for compiled invalid keyboards. Fixes: #16145 Test-bot: skip --- .../java/com/keyman/engine/KMKeyboard.java | 38 +- .../src/main/res/values-am-rET/strings.xml | 2 - .../src/main/res/values-ar-rSA/strings.xml | 2 - .../src/main/res/values-az-rAZ/strings.xml | 2 - .../app/src/main/res/values-b+el/strings.xml | 2 - .../src/main/res/values-b+es+419/strings.xml | 2 - .../main/res/values-b+shu+latn/strings.xml | 2 - .../src/main/res/values-bwr-rNG/strings.xml | 2 - .../src/main/res/values-ckl-rNG/strings.xml | 2 - .../src/main/res/values-cs-rCZ/strings.xml | 2 - .../src/main/res/values-de-rDE/strings.xml | 2 - .../src/main/res/values-es-rES/strings.xml | 2 - .../src/main/res/values-ff-rNG/strings.xml | 2 - .../src/main/res/values-ff-rZA/strings.xml | 2 - .../src/main/res/values-fr-rFR/strings.xml | 2 - .../src/main/res/values-ha-rHG/strings.xml | 2 - .../src/main/res/values-hia-rNG/strings.xml | 2 - .../src/main/res/values-in-rID/strings.xml | 2 - .../src/main/res/values-it-rIT/strings.xml | 2 - .../src/main/res/values-km-rKH/strings.xml | 2 - .../src/main/res/values-kn-rIN/strings.xml | 2 - .../src/main/res/values-kr-rNG/strings.xml | 2 - .../src/main/res/values-mfi-rNG/strings.xml | 2 - .../src/main/res/values-mnw-rMM/strings.xml | 2 - .../src/main/res/values-mrt-rNG/strings.xml | 2 - .../src/main/res/values-nl-rNL/strings.xml | 2 - .../src/main/res/values-pl-rPL/strings.xml | 2 - .../src/main/res/values-pt-rPT/strings.xml | 2 - .../src/main/res/values-ru-rRU/strings.xml | 2 - .../src/main/res/values-sv-rSE/strings.xml | 2 - .../src/main/res/values-uk-rUA/strings.xml | 2 - .../src/main/res/values-vi-rVN/strings.xml | 2 - .../src/main/res/values-zh-rCN/strings.xml | 2 - .../KMEA/app/src/main/res/values/strings.xml | 8 +- .../invalid/{ => compiler}/README.md | 0 .../source/CERR_400A_balochi_phonetic.kmn | 0 .../source/CERR_400D_balochi_phonetic.kmn | 0 .../source/CERR_400E_balochi_phonetic.kmn | 0 .../source/CERR_4013_balochi_phonetic.kmn | 0 ...R_4015_k_014___groups_and_virtual_keys.kmn | 0 ...R_4016_k_014___groups_and_virtual_keys.kmn | 0 .../source/CERR_4017_balochi_phonetic.kmn | 0 .../source/CERR_4019_balochi_phonetic.kmn | 0 ..._401D_k_034___options_double_set_reset.kmn | 0 .../source/CERR_4026_balochi_phonetic.kmn | 0 .../source/CERR_4029_balochi_phonetic.kmn | 0 .../source/CERR_402B_balochi_phonetic.kmn | 0 .../source/CERR_402D_balochi_phonetic.kmn | 0 .../source/CERR_4031_balochi_phonetic.kmn | 0 .../source/CERR_4034_balochi_phonetic.kmn | 0 .../source/CERR_4038_balochi_phonetic.kmn | 0 .../source/CERR_4039_balochi_phonetic.kmn | 0 .../CERR_403A_014_groups_and_virtual_keys.kmn | 0 .../source/CERR_403E_imsample.kmn | 0 .../source/CERR_4040_balochi_phonetic.kmn | 0 .../CERR_4044_014_groups_and_virtual_keys.kmn | 0 .../source/CERR_4045_balochi_phonetic.kmn | 0 .../source/CERR_4046_balochi_phonetic.kmn | 0 .../CERR_4047_k_022___options_with_preset.kmn | 0 .../CERR_4049_k_022___options_with_preset.kmn | 0 .../CERR_404A_k_025___options_with_reset.kmn | 0 .../CERR_404B_k_025___options_with_reset.kmn | 0 .../CERR_404C_k_023___options_with_save.kmn | 0 .../source/CERR_404D_balochi_phonetic.kmn | 0 .../CERR_404F_k_026___system_stores.kmn | 0 .../source/CERR_405C_balochi_phonetic.kmn | 0 .../source/CERR_405D_balochi_phonetic.kmn | 0 .../source/CERR_405E_balochi_phonetic.kmn | 0 .../source/CERR_4060_balochi_phonetic.kmn | 0 .../source/CERR_4061_balochi_phonetic.kmn | 0 .../source/CERR_4064_caps_lock_layer_3620.kmn | 0 .../CERR_4065_test_expansion_invalid.kmn | 0 .../CERR_4066_test_expansion_invalid.kmn | 0 .../CERR_4067_test_expansion_invalid.kmn | 0 .../CERR_4068_test_expansion_invalid.kmn | 0 .../CERR_4069_test_casedkeys_invalid_1.kmn | 0 .../CERR_406A_test_casedkeys_invalid_2.kmn | 0 .../CERR_406B_test_casedkeys_mnemonic_1.kmn | 0 ...test_5963_readonlygroup_usenonreadonly.kmn | 0 ...st_5963_readonlygroup_misplacedcontext.kmn | 0 .../CERR_406F_test_5963_newcontext_2.kmn | 0 .../CERR_4070_test_5963_postkeystroke_2.kmn | 0 .../source/CERR_4071_balochi_phonetic.kmn | 0 .../source/CERR_4072_balochi_phonetic.kmn | 0 .../source/CERR_4073_balochi_phonetic.kmn | 0 .../CERR_80C0_test_expansion_absurd.kmn | 0 .../source/CERR__balochi_phonetic.ico | Bin .../test/keyboards/invalid/engine/README.md | 12 + .../engine/javascript_error/HISTORY.md | 6 + .../engine/javascript_error/LICENSE.md | 21 + .../invalid/engine/javascript_error/README.md | 14 + .../javascript_error/javascript_error.kpj | 8 + .../modified_build/javascript_error.js | 816 ++++++++++++++++++ .../javascript_error.keyboard_info | 39 + .../modified_build/javascript_error.kmp | Bin 0 -> 7076 bytes .../modified_build/javascript_error.kmx | Bin 0 -> 1176 bytes .../modified_build/javascript_error.kvk | Bin 0 -> 1533 bytes .../javascript_error.keyman-touch-layout | 701 +++++++++++++++ .../source/javascript_error.kmn | 43 + .../source/javascript_error.kps | 75 ++ .../source/javascript_error.kvks | 110 +++ .../engine/javascript_error/source/readme.htm | 22 + .../javascript_error/source/welcome.htm | 178 ++++ 103 files changed, 2069 insertions(+), 86 deletions(-) rename common/test/keyboards/invalid/{ => compiler}/README.md (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_400A_balochi_phonetic.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_400D_balochi_phonetic.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_400E_balochi_phonetic.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_4013_balochi_phonetic.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_4015_k_014___groups_and_virtual_keys.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_4016_k_014___groups_and_virtual_keys.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_4017_balochi_phonetic.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_4019_balochi_phonetic.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_401D_k_034___options_double_set_reset.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_4026_balochi_phonetic.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_4029_balochi_phonetic.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_402B_balochi_phonetic.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_402D_balochi_phonetic.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_4031_balochi_phonetic.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_4034_balochi_phonetic.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_4038_balochi_phonetic.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_4039_balochi_phonetic.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_403A_014_groups_and_virtual_keys.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_403E_imsample.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_4040_balochi_phonetic.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_4044_014_groups_and_virtual_keys.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_4045_balochi_phonetic.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_4046_balochi_phonetic.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_4047_k_022___options_with_preset.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_4049_k_022___options_with_preset.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_404A_k_025___options_with_reset.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_404B_k_025___options_with_reset.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_404C_k_023___options_with_save.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_404D_balochi_phonetic.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_404F_k_026___system_stores.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_405C_balochi_phonetic.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_405D_balochi_phonetic.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_405E_balochi_phonetic.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_4060_balochi_phonetic.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_4061_balochi_phonetic.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_4064_caps_lock_layer_3620.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_4065_test_expansion_invalid.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_4066_test_expansion_invalid.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_4067_test_expansion_invalid.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_4068_test_expansion_invalid.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_4069_test_casedkeys_invalid_1.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_406A_test_casedkeys_invalid_2.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_406B_test_casedkeys_mnemonic_1.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_406C_test_5963_readonlygroup_usenonreadonly.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_406E_test_5963_readonlygroup_misplacedcontext.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_406F_test_5963_newcontext_2.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_4070_test_5963_postkeystroke_2.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_4071_balochi_phonetic.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_4072_balochi_phonetic.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_4073_balochi_phonetic.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR_80C0_test_expansion_absurd.kmn (100%) rename common/test/keyboards/invalid/{ => compiler}/source/CERR__balochi_phonetic.ico (100%) create mode 100644 common/test/keyboards/invalid/engine/README.md create mode 100644 common/test/keyboards/invalid/engine/javascript_error/HISTORY.md create mode 100644 common/test/keyboards/invalid/engine/javascript_error/LICENSE.md create mode 100644 common/test/keyboards/invalid/engine/javascript_error/README.md create mode 100644 common/test/keyboards/invalid/engine/javascript_error/javascript_error.kpj create mode 100644 common/test/keyboards/invalid/engine/javascript_error/modified_build/javascript_error.js create mode 100644 common/test/keyboards/invalid/engine/javascript_error/modified_build/javascript_error.keyboard_info create mode 100644 common/test/keyboards/invalid/engine/javascript_error/modified_build/javascript_error.kmp create mode 100644 common/test/keyboards/invalid/engine/javascript_error/modified_build/javascript_error.kmx create mode 100644 common/test/keyboards/invalid/engine/javascript_error/modified_build/javascript_error.kvk create mode 100644 common/test/keyboards/invalid/engine/javascript_error/source/javascript_error.keyman-touch-layout create mode 100644 common/test/keyboards/invalid/engine/javascript_error/source/javascript_error.kmn create mode 100644 common/test/keyboards/invalid/engine/javascript_error/source/javascript_error.kps create mode 100644 common/test/keyboards/invalid/engine/javascript_error/source/javascript_error.kvks create mode 100644 common/test/keyboards/invalid/engine/javascript_error/source/readme.htm create mode 100644 common/test/keyboards/invalid/engine/javascript_error/source/welcome.htm diff --git a/android/KMEA/app/src/main/java/com/keyman/engine/KMKeyboard.java b/android/KMEA/app/src/main/java/com/keyman/engine/KMKeyboard.java index 212de6d0a0..9ce0bb6274 100644 --- a/android/KMEA/app/src/main/java/com/keyman/engine/KMKeyboard.java +++ b/android/KMEA/app/src/main/java/com/keyman/engine/KMKeyboard.java @@ -310,7 +310,7 @@ final class KMKeyboard extends WebView { // This duplicates the sendKMWError message, which itself duplicates the reporting now // managed by sentry-manager on the js side in patch in #6890. It does not give us // additional useful information. So we don't re-send to Sentry. - sendError(packageID, keyboardID, "", false); + sendError(packageID, keyboardID, "", null); } return true; @@ -601,7 +601,11 @@ final class KMKeyboard extends WebView { } if (!KMManager.shouldAllowSetKeyboard() || kbInfo == null) { - sendError(packageID, keyboardID, languageID, true); + if(!KMManager.shouldAllowSetKeyboard()) { + sendError(packageID, keyboardID, languageID, "setKeyboard.short failed with shouldAllowSetKeyboard == false"); + } else { + sendError(packageID, keyboardID, languageID, "setKeyboard.short failed with kbInfo == null"); + } kbInfo = KeyboardController.getInstance().getKeyboardInfo(0); retVal = false; } else { @@ -632,7 +636,7 @@ final class KMKeyboard extends WebView { if (!KMManager.shouldAllowSetKeyboard() || (packageID.equals(KMManager.KMDefault_UndefinedPackageID) && keyboardVersion == null)) { - sendError(packageID, keyboardID, languageID, true); + sendError(packageID, keyboardID, languageID, "prepareKeyboardSwitch"); Keyboard kbInfo = KeyboardController.getInstance().getKeyboardInfo(0); packageID = kbInfo.getPackageID(); keyboardID = kbInfo.getKeyboardID(); @@ -684,7 +688,11 @@ final class KMKeyboard extends WebView { if (!KMManager.shouldAllowSetKeyboard() || (packageID.equals(KMManager.KMDefault_UndefinedPackageID) && keyboardVersion == null)) { - sendError(packageID, keyboardID, languageID, true); + if(!KMManager.shouldAllowSetKeyboard()) { + sendError(packageID, keyboardID, languageID, "setKeyboard.full failed with shouldAllowSetKeyboard == false"); + } else { + sendError(packageID, keyboardID, languageID, "setKeyboard.full failed with packageID == KMDefault_UndefinedPackageID and keyboardVersion == null"); + } Keyboard kbInfo = KeyboardController.getInstance().getKeyboardInfo(0); packageID = kbInfo.getPackageID(); keyboardID = kbInfo.getKeyboardID(); @@ -780,26 +788,24 @@ final class KMKeyboard extends WebView { } public boolean getChirality() { - return this.isChiral; - } - // Display localized Toast notification that keyboard selection failed, so loading default keyboard. - // Also sends a message to Sentry (not localized) - private void sendError(String packageID, String keyboardID, String languageID, boolean reportToSentry) { + /** + * Display localized Toast notification that keyboard selection failed, so + * loading default keyboard. Also sends a message to Sentry (not localized) + */ + private void sendError(String packageID, String keyboardID, String languageID, String sentryMessage) { this.currentKeyboardErrorReports++; if(this.currentKeyboardErrorReports == 1) { - BaseActivity.makeToast(context, R.string.fatal_keyboard_error_short, Toast.LENGTH_LONG, packageID, keyboardID, languageID); + BaseActivity.makeToast(context, R.string.fatal_keyboard_error, Toast.LENGTH_LONG, packageID, keyboardID, languageID); } - if(this.currentKeyboardErrorReports < 5 && DependencyUtil.libraryExists(LibraryType.SENTRY) && Sentry.isEnabled() && reportToSentry) { - // We'll only report up to 5 errors in a given keyboard to avoid spamming - // errors and using unnecessary bandwidth doing so - // Don't use localized string R.string.fatal_keyboard_error msg for Sentry - String msg = KMString.format("Error in keyboard %1$s:%2$s for %3$s language.", - packageID, keyboardID, languageID); + if(this.currentKeyboardErrorReports < 5 && sentryMessage != null && DependencyUtil.libraryExists(LibraryType.SENTRY) && Sentry.isEnabled()) { + // We'll only report up to 5 errors in a given keyboard to avoid spamming errors and using unnecessary bandwidth doing so + String msg = KMString.format("Script error in keyboard webview\nContext: %4$s\nActive package: %1$s\nActive keyboard: %2$s\nActive language: %3$s", + packageID, keyboardID, languageID, sentryMessage); Sentry.captureMessage(msg); } } diff --git a/android/KMEA/app/src/main/res/values-am-rET/strings.xml b/android/KMEA/app/src/main/res/values-am-rET/strings.xml index 1bb95d5157..0cf43b8b9d 100644 --- a/android/KMEA/app/src/main/res/values-am-rET/strings.xml +++ b/android/KMEA/app/src/main/res/values-am-rET/strings.xml @@ -80,8 +80,6 @@ የእገዛ ፋይልን ለማየት ፋይል ፕሮቫይደሩ ቤተ መጽሐፍት ያስፈልገዋል %1$s የገበታ ሰሌዳ ፋታል ችግር ዝርዝር %1$s:%2$s ለ %3$s ቋንቋ፤ መደበኛ ቋንቋ ጭኗል። - - የፊደል ገበታ ሰሌዳው ችግር %1$s:%2$s ለ %3$s ቋንቋ። ተያያዥነት ያለውን መዝገበ ቃላት ለመጫን እየፈተሸ ነው። የሚወርደውን መዝገበ ቃላት ከኪይማን ሰርቨር ጋር መገናኘት አልተቻለም diff --git a/android/KMEA/app/src/main/res/values-ar-rSA/strings.xml b/android/KMEA/app/src/main/res/values-ar-rSA/strings.xml index cb2e9f0d51..3e1b901f86 100644 --- a/android/KMEA/app/src/main/res/values-ar-rSA/strings.xml +++ b/android/KMEA/app/src/main/res/values-ar-rSA/strings.xml @@ -88,8 +88,6 @@ مكتبة FileProvider مطلوبة لعرض ملفات المساعدة: %1$s خطأ كبير في لوحة مفاتيح مع %1$s:%2$s لأجل لغة %3$s. سيتم تحميل لوحة المفاتيح الأساسية. - - خطأ في لوحة مفاتيح %1$s:%2$s لأجل لغة %3$s. يجري التحقق من قاموس ذي صلة للتحميل لا يمكن الاتصال بخادم Keyman للتحقق من تنزيل القاموس المرتبط diff --git a/android/KMEA/app/src/main/res/values-az-rAZ/strings.xml b/android/KMEA/app/src/main/res/values-az-rAZ/strings.xml index 9b3d86e8d0..06c4b6b92e 100644 --- a/android/KMEA/app/src/main/res/values-az-rAZ/strings.xml +++ b/android/KMEA/app/src/main/res/values-az-rAZ/strings.xml @@ -80,8 +80,6 @@ FileProvider (Fayl Təminatçısı) kitabxanasına kömək sənədinə baxmaq lazımdır:%1$s %3$s dili üçün %1$s ilə ölümcül klaviatura xətası :%3$s dili üçün %2$s. Varsayılan klaviatura yüklənir. - - %3$s dil üçün %1$s:%2$s klaviaturasında xəta. Yükləmək üçün əlaqəli lüğət yoxlanılır Cannot connect to Keyman server to check for associated dictionary to download diff --git a/android/KMEA/app/src/main/res/values-b+el/strings.xml b/android/KMEA/app/src/main/res/values-b+el/strings.xml index 967386eb36..268b3091ce 100644 --- a/android/KMEA/app/src/main/res/values-b+el/strings.xml +++ b/android/KMEA/app/src/main/res/values-b+el/strings.xml @@ -80,8 +80,6 @@ Ἀπαιτεῖται βιβλιοθήκη FileProvider γιὰ νὰ δεῖτε ἀρχεῖο βοηθείας: %1$s Μοιραῖο σφάλμα πληκτρολογίου στὸ %1$s:%2$s γιὰ τὴν %3$s γλῶσσα. Φορτώνεται προεπιλεγμένο πληκτρολόγιο. - - Σφάλμα στὸ πληκτρολόγιο %1$s:%2$s γιὰ τὴν γλῶσσα \"%3$s\". Ἀναζήτηση σχετικοῦ λεξικοῦ πρὸς μεταφόρτωσιν Ἀδυναμία συνδέσεως μὲ τὸν διακομιστὴ Keyman γιὰ τὴν εὕρεση σχετικοῦ λεξικοῦ πρὸς μεταφόρτωσιν diff --git a/android/KMEA/app/src/main/res/values-b+es+419/strings.xml b/android/KMEA/app/src/main/res/values-b+es+419/strings.xml index f1ec1d2d97..06413a82e2 100644 --- a/android/KMEA/app/src/main/res/values-b+es+419/strings.xml +++ b/android/KMEA/app/src/main/res/values-b+es+419/strings.xml @@ -80,8 +80,6 @@ Se necesita la librería FileProvider para ver el archivo de ayuda: %1$s Error fatal del teclado con %1$s:%2$s para el idioma %3$s. Cargando teclado predeterminado. - - Error en el teclado %1$s:%2$s para el idioma %3$s. Keyman requiere que WebView esté instalado.\" diff --git a/android/KMEA/app/src/main/res/values-b+shu+latn/strings.xml b/android/KMEA/app/src/main/res/values-b+shu+latn/strings.xml index 58be85253b..5c86164db9 100644 --- a/android/KMEA/app/src/main/res/values-b+shu+latn/strings.xml +++ b/android/KMEA/app/src/main/res/values-b+shu+latn/strings.xml @@ -84,8 +84,6 @@ FilProvider library bindawar ley fakkakanal shu\'ul da: %1$s Mushkila kabirey bey %1$s:%2$s layl %3$s lugga. Dassasan shabal keyboard hanal gabul. - - Mushkila fyl keyboard %1$s:%2$s layl %3$s lugga. Shafiyan kakkad abu kalimat shaba da ley dassasana Cannot connect to Keyman server to check for associated dictionary to download diff --git a/android/KMEA/app/src/main/res/values-bwr-rNG/strings.xml b/android/KMEA/app/src/main/res/values-bwr-rNG/strings.xml index b2082bf2a1..abd597c8d2 100644 --- a/android/KMEA/app/src/main/res/values-bwr-rNG/strings.xml +++ b/android/KMEA/app/src/main/res/values-bwr-rNG/strings.xml @@ -80,8 +80,6 @@ Mda akwa bara library na ar FileProvider kamnyar ka mdǝ wutǝ fayil ar dlara: %1$s Dametǝdzi na ar Fatal akwa keyboard ka %1$s:%2$s ala %3$s hulfur mnya. Akwa hara lodi ar default keyboard. - - Dametǝdzi akwa keyboard %1$s:%2$s na ar %3$s hulfur mnya. Akwa pakǝ dictionary na kǝɓa kari kamnyar katsa hara dawunlodi ni Cannot connect to Keyman server to check for associated dictionary to download diff --git a/android/KMEA/app/src/main/res/values-ckl-rNG/strings.xml b/android/KMEA/app/src/main/res/values-ckl-rNG/strings.xml index 61768013b7..aca85a1639 100644 --- a/android/KMEA/app/src/main/res/values-ckl-rNG/strings.xml +++ b/android/KMEA/app/src/main/res/values-ckl-rNG/strings.xml @@ -80,8 +80,6 @@ Gada bara library nǝr FileProvider akuyaka gǝ wul su akwa fail nǝr dlarɛ: %1$s Fatal keyboard error with %1$s:%2$s for %3$s language. Loading default keyboard. - - Su kura kal kalakwa kibod %1$s:%2$s nǝr %3$s nya. Ata kǝra chakǝnta akuyaka ɓui suyere tara tsukwar bwar dictionary kadǝbar ka ndǝ download ko sǝgǝl akǝr Gadiyata mǝzi bui sava nǝr Keyman wɛ akuya ka gǝ bui ka sǝgǝl aka jiliyir dikshinari namtǝ gada bara. diff --git a/android/KMEA/app/src/main/res/values-cs-rCZ/strings.xml b/android/KMEA/app/src/main/res/values-cs-rCZ/strings.xml index 1270bc7f21..7fbf846156 100644 --- a/android/KMEA/app/src/main/res/values-cs-rCZ/strings.xml +++ b/android/KMEA/app/src/main/res/values-cs-rCZ/strings.xml @@ -84,8 +84,6 @@ Knihovna FileProvider potřebná k zobrazení nápovědy: %1$s Fatální chyba klávesnice s %1$s:%2$s pro jazyk %3$s . Načítání výchozí klávesnice. - - Chyba v klávesnici %1$s:%2$s pro jazyk %3$s. Keyman vyžaduje, aby byl nainstalován WebView.“ diff --git a/android/KMEA/app/src/main/res/values-de-rDE/strings.xml b/android/KMEA/app/src/main/res/values-de-rDE/strings.xml index 6c79a08291..fc36e8d3b1 100644 --- a/android/KMEA/app/src/main/res/values-de-rDE/strings.xml +++ b/android/KMEA/app/src/main/res/values-de-rDE/strings.xml @@ -80,8 +80,6 @@ FileProvider-Bibliothek zum Anzeigen der Hilfe-Datei: %1$s Fataler Tastaturfehler mit %1$s:%2$s für %3$s Sprache. Standard-Tastatur wird geladen. - - Fehler in Tastatur %1$s:%2$s für %3$s Sprache. Keyman benötigt die Installation von WebView.\" diff --git a/android/KMEA/app/src/main/res/values-es-rES/strings.xml b/android/KMEA/app/src/main/res/values-es-rES/strings.xml index 4846da0dac..8bb803c545 100644 --- a/android/KMEA/app/src/main/res/values-es-rES/strings.xml +++ b/android/KMEA/app/src/main/res/values-es-rES/strings.xml @@ -80,8 +80,6 @@ Biblioteca de FileProvider necesaria para ver el archivo de ayuda: %1$s Error de teclado fatal con %1$s:%2$s para %3$s idioma. Cargando teclado predeterminado. - - Error en el teclado %1$s:%2$s para %3$s idioma. Keyman requiere que WebView esté instalado.\" diff --git a/android/KMEA/app/src/main/res/values-ff-rNG/strings.xml b/android/KMEA/app/src/main/res/values-ff-rNG/strings.xml index 2ada2b9441..873583bfd1 100644 --- a/android/KMEA/app/src/main/res/values-ff-rNG/strings.xml +++ b/android/KMEA/app/src/main/res/values-ff-rNG/strings.xml @@ -80,8 +80,6 @@ Babal fayel ɗo mari haaje laarugo fayel mballa: %1$s Kibod man wari bee masala bee %1$s:%2$s jee %3$s ɗemngal. Ɗo nastina kibod ko naftirta. - - Masala nder kibod %1$s:%2$s jee %3$s ɗemngal. Ɗo tefa deftere ma`ana kalimaji ngam jippina Waawaa seŋaade e sarworde Keyman ngam ƴeewtaade so saggitorde yahdoonde heen ena woodi diff --git a/android/KMEA/app/src/main/res/values-ff-rZA/strings.xml b/android/KMEA/app/src/main/res/values-ff-rZA/strings.xml index 7d52d61f6b..17d5c1d50e 100644 --- a/android/KMEA/app/src/main/res/values-ff-rZA/strings.xml +++ b/android/KMEA/app/src/main/res/values-ff-rZA/strings.xml @@ -80,8 +80,6 @@ Deftordu FileProvider ena soklaa ngam yiyde fiilde ballal: %1$s Juumre tappirde halkoore e %1$s: %2$s mo ɗemngal %3$s. Nana loowa tappirde woowaande. - - Juumre e tappirde %1$s:%2$s ɗemngal %3$s language. Nana ƴeewtoo saggitorde yahdiinde ngam aawtaade Waawaa seŋaade e sarworde Keyman ngam ƴeewtaade so saggitorde aawtoonde ena woodi diff --git a/android/KMEA/app/src/main/res/values-fr-rFR/strings.xml b/android/KMEA/app/src/main/res/values-fr-rFR/strings.xml index fc23855ed1..9e5fdd27de 100644 --- a/android/KMEA/app/src/main/res/values-fr-rFR/strings.xml +++ b/android/KMEA/app/src/main/res/values-fr-rFR/strings.xml @@ -80,8 +80,6 @@ Librairie FileProvider nécessaire pour afficher le fichier d\'aide : %1$s Erreur fatale de clavier avec %1$s:%2$s pour %3$s langue. Chargement du clavier par défaut. - - Erreur dans le clavier %1$s:%2$s pour la langue %3$s. Vérification du dictionnaire associé à télécharger Impossible de se connecter au serveur Keyman pour chercher un dictionnaire à télécharger diff --git a/android/KMEA/app/src/main/res/values-ha-rHG/strings.xml b/android/KMEA/app/src/main/res/values-ha-rHG/strings.xml index 78960c0f0c..804afa5b49 100644 --- a/android/KMEA/app/src/main/res/values-ha-rHG/strings.xml +++ b/android/KMEA/app/src/main/res/values-ha-rHG/strings.xml @@ -80,8 +80,6 @@ Ana buƙatar wajen karatu na FileProvider domin duba fayil ɗin taimako: %1$s Matsalar madanni da %1$s:%2$s domin %3$s yaruka. Saukar da madanni mai kyau. - - Kuskure a yaren %1$s:%2$s for %3$s madanni. Duba ƙamus mai alaƙa domin a sauke Cannot connect to Keyman server to check for associated dictionary to download diff --git a/android/KMEA/app/src/main/res/values-hia-rNG/strings.xml b/android/KMEA/app/src/main/res/values-hia-rNG/strings.xml index 5af3bf14fa..7cce5b3c27 100644 --- a/android/KMEA/app/src/main/res/values-hia-rNG/strings.xml +++ b/android/KMEA/app/src/main/res/values-hia-rNG/strings.xml @@ -82,8 +82,6 @@ FileProvider library needed to view help file: %1$s Fatal keyboard nda kuskure %1$s:%2$s anga %3$s gwaɗaha luwa. Kalt girgira keyboard. - - Kuskure an keyboard %1$s:%2$s for %3$s gwaɗa luwa. Naghata anga gwaft dictionary da sangata Cannot connect to Keyman server to check for associated dictionary to download diff --git a/android/KMEA/app/src/main/res/values-in-rID/strings.xml b/android/KMEA/app/src/main/res/values-in-rID/strings.xml index 2bbdf84827..c3c4667bef 100644 --- a/android/KMEA/app/src/main/res/values-in-rID/strings.xml +++ b/android/KMEA/app/src/main/res/values-in-rID/strings.xml @@ -78,8 +78,6 @@ Butuh FileProvider library untuk menampilkan berkas bantuan: %1$s Terjadi masalah dengan papan tombol %1$s:%2$s untuk bahasa %3$s. Papan tombol diubah ke setelah baku. - - Error in keyboard %1$s:%2$s for %3$s language. Mengecek kamus yang terkait untuk diunduh Cannot connect to Keyman server to check for associated dictionary to download diff --git a/android/KMEA/app/src/main/res/values-it-rIT/strings.xml b/android/KMEA/app/src/main/res/values-it-rIT/strings.xml index fb8651a915..4df8487203 100644 --- a/android/KMEA/app/src/main/res/values-it-rIT/strings.xml +++ b/android/KMEA/app/src/main/res/values-it-rIT/strings.xml @@ -80,8 +80,6 @@ Libreria FileProvider necessaria per visualizzare il file d\'aiuto: %1$s Errore fatale della tastiera con %1$s:%2$s per %3$s lingua. Caricamento tastiera predefinita. - - Errore nella tastiera %1$s:%2$s per %3$s lingua. Keyman richiede che WebView sia installato.\" diff --git a/android/KMEA/app/src/main/res/values-km-rKH/strings.xml b/android/KMEA/app/src/main/res/values-km-rKH/strings.xml index 55340f80cb..e53a560cee 100644 --- a/android/KMEA/app/src/main/res/values-km-rKH/strings.xml +++ b/android/KMEA/app/src/main/res/values-km-rKH/strings.xml @@ -78,8 +78,6 @@ ត្រូវការបណ្ណាល័យ FileProvider ដើម្បី​មើលឯកសារជំនួយ៖ %1$s មាន​បញ្ហាធ្ងន់ធ្ងរចំពោះក្ដារចុច %1$s:%2$s សម្រាប់​ភាសា %3$s។ កំពុង​ផ្ទុក​ក្ដារចុច​លំនាំដើម។ - - បញ្ហាក្នុងក្ដារចុច %1$s:%2$s សម្រាប់ភាសា %3$s។ Keyman តម្រូវឱ្យដំឡើង WebView ។\" diff --git a/android/KMEA/app/src/main/res/values-kn-rIN/strings.xml b/android/KMEA/app/src/main/res/values-kn-rIN/strings.xml index e281e0bfe0..a24e4926e5 100644 --- a/android/KMEA/app/src/main/res/values-kn-rIN/strings.xml +++ b/android/KMEA/app/src/main/res/values-kn-rIN/strings.xml @@ -80,8 +80,6 @@ ಸಹಾಯ ಫೈಲ್ ವೀಕ್ಷಿಸಲು FileProvider ಲೈಬ್ರರಿ ಅಗತ್ಯವಿದೆ: %1$s %1$s:%2$s ಕೀಲಿಮಣೆಯಲ್ಲಿ %3$s ಭಾಷೆಯೊಂದಿಗೆ ದೋಷವಿದೆ. ಅದರ ಬದಲಿಗೆ ಪೂರ್ವನಿರ್ಧರಿತ ಕೀಲಿಮಣೆ ಲೋಡ್ ಆಗುತ್ತಿದೆ. - - %1$s:%2$s ಕೀಲಿಮಣೆಯಲ್ಲಿ %3$s ಭಾಷೆಯೊಂದಿಗೆ ದೋಷವಿದೆ. ಸಂಬಂಧಿಸಿದ ಶಬ್ದಕೋಶವನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲು ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ ಸಂಬಂಧಿಸಿದ ಶಬ್ದಕೋಶವನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲು ಕೀಮ್ಯಾನ್ ಸರ್ವರ್ ಅನ್ನು ಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲಾ diff --git a/android/KMEA/app/src/main/res/values-kr-rNG/strings.xml b/android/KMEA/app/src/main/res/values-kr-rNG/strings.xml index fba50a2eaf..6f6ae410e2 100644 --- a/android/KMEA/app/src/main/res/values-kr-rNG/strings.xml +++ b/android/KMEA/app/src/main/res/values-kr-rNG/strings.xml @@ -80,8 +80,6 @@ FileProvider library needed to view help file: %1$s Fatal keyboard error with %1$s:%2$s for %3$s language. Loading default keyboard. - - Taltǝ keyboard dǝn mbeji %1$s:%2$s for %3$s tǝlama. Dictionary shiro kǝllata mane download nzǝ diye Cannot connect to Keyman server to check for associated dictionary to download diff --git a/android/KMEA/app/src/main/res/values-mfi-rNG/strings.xml b/android/KMEA/app/src/main/res/values-mfi-rNG/strings.xml index b35d941715..3c1e862c2b 100644 --- a/android/KMEA/app/src/main/res/values-mfi-rNG/strings.xml +++ b/android/KMEA/app/src/main/res/values-mfi-rNG/strings.xml @@ -80,8 +80,6 @@ FileProvider library a kátá zhara file mla: %1$s Kuskure Fatal keyboard antara%1$s:%2$s gé %3$s nare. femhe nde default keyboard. - - Kuskure am keyboard %1$s:%2$s for %3$s nare. Zharanahe dictionary harzhe gé tsukwanahe Cannot connect to Keyman server to check for associated dictionary to download diff --git a/android/KMEA/app/src/main/res/values-mnw-rMM/strings.xml b/android/KMEA/app/src/main/res/values-mnw-rMM/strings.xml index 9cde602180..980fe6ce45 100644 --- a/android/KMEA/app/src/main/res/values-mnw-rMM/strings.xml +++ b/android/KMEA/app/src/main/res/values-mnw-rMM/strings.xml @@ -78,8 +78,6 @@ တၚ်နၚ်လိက် FileProvider မိက်ဂွံဗဵု ဝှါၚ်အရီုဗၚ်: %1$s ကဳဗုဒ်ယောၚ်ယာဇၞော်ဇၞော်နကဵု %1$s:%2$s သွက် ဘာသာ %3$s ။ ဂြဲပ္တိုန်မံၚ် ကဳဗုဒ်ပကတိ။ - - တၚ်ယောၚ်ယာ ပ္ဍဲကဳဗုဒ် %1$s:%2$s သွက် ဘာသာ %3$s သ္ဂောံဂြဲဖျေံ Keyman ဂှ် ဒးသုၚ်စောဲ WebView ရောၚ်။ diff --git a/android/KMEA/app/src/main/res/values-mrt-rNG/strings.xml b/android/KMEA/app/src/main/res/values-mrt-rNG/strings.xml index b30da84ab0..766705f358 100644 --- a/android/KMEA/app/src/main/res/values-mrt-rNG/strings.xml +++ b/android/KMEA/app/src/main/res/values-mrt-rNG/strings.xml @@ -80,8 +80,6 @@ FileProvider library needed to view help file: %1$s Fatal keyboard error with %1$s:%2$s for %3$s language. Loading default keyboard. - - Ŋya nur keyboard %1$s:%2$s anu %3$s kra kalkal. Luba dictionary kuku nagu acittu downloadi Cannot connect to Keyman server to check for associated dictionary to download diff --git a/android/KMEA/app/src/main/res/values-nl-rNL/strings.xml b/android/KMEA/app/src/main/res/values-nl-rNL/strings.xml index 79f79f253a..b08264a69a 100644 --- a/android/KMEA/app/src/main/res/values-nl-rNL/strings.xml +++ b/android/KMEA/app/src/main/res/values-nl-rNL/strings.xml @@ -80,8 +80,6 @@ FileProvider bibliotheek nodig om het hulpbestand te bekijken: %1$s Fatale toetsenbord fout met %1$s:%2$s voor %3$s taal. Standaard toetsenbord wordt geladen. - - Fout in toetsenbord %1$s:%2$s voor %3$s taal. Downloaden van bijbehorende woordenboek Cannot connect to Keyman server to check for associated dictionary to download diff --git a/android/KMEA/app/src/main/res/values-pl-rPL/strings.xml b/android/KMEA/app/src/main/res/values-pl-rPL/strings.xml index 2eabe36953..ec0ae4fe1b 100644 --- a/android/KMEA/app/src/main/res/values-pl-rPL/strings.xml +++ b/android/KMEA/app/src/main/res/values-pl-rPL/strings.xml @@ -84,8 +84,6 @@ Biblioteka FileProvider potrzebna, aby wyświetlić plik pomocy: %1$s Błąd krytycznej klawiatury z %1$s:%2$s dla %3$s języka. Ładowanie domyślnej klawiatury. - - Błąd w klawiaturze %1$s:%2$s dla %3$s języka. Sprawdzanie dla skojarzonego słownika do pobrania Cannot connect to Keyman server to check for associated dictionary to download diff --git a/android/KMEA/app/src/main/res/values-pt-rPT/strings.xml b/android/KMEA/app/src/main/res/values-pt-rPT/strings.xml index c4c7968039..a425410926 100644 --- a/android/KMEA/app/src/main/res/values-pt-rPT/strings.xml +++ b/android/KMEA/app/src/main/res/values-pt-rPT/strings.xml @@ -80,8 +80,6 @@ Biblioteca de FileProvider necessária para ver o arquivo de ajuda: %1$s Erro fatal de teclado com %1$s:%2$s para %3$s idioma. Carregando o teclado padrão. - - Erro no teclado %1$s:%2$s para %3$s idioma. Keyman requer que o WebView seja instalado.\" diff --git a/android/KMEA/app/src/main/res/values-ru-rRU/strings.xml b/android/KMEA/app/src/main/res/values-ru-rRU/strings.xml index 678a22dc1b..fd93b4a680 100644 --- a/android/KMEA/app/src/main/res/values-ru-rRU/strings.xml +++ b/android/KMEA/app/src/main/res/values-ru-rRU/strings.xml @@ -84,8 +84,6 @@ Библиотека файлового провайдера необходима для просмотра файла справки: %1$s Неустранимая ошибка клавиатуры %1$s:%2$s для %3$s языка. Загрузка по умолчанию клавиатуры. - - Ошибка в клавиатуре %1$s:%2$s для языка %3$s. Проверка соответствующего словаря для загрузки Cannot connect to Keyman server to check for associated dictionary to download diff --git a/android/KMEA/app/src/main/res/values-sv-rSE/strings.xml b/android/KMEA/app/src/main/res/values-sv-rSE/strings.xml index ca9e0ba02a..88dfcdb4bc 100644 --- a/android/KMEA/app/src/main/res/values-sv-rSE/strings.xml +++ b/android/KMEA/app/src/main/res/values-sv-rSE/strings.xml @@ -80,8 +80,6 @@ Filleverantörsbibliotek behövs för att visa hjälpfilen: %1$s Kritiskt tangentbordsfel med %1$s:%2$s för %3$s språk. Laddar standardtangentbordet. - - Fel i tangentbordet %1$s:%2$s för %3$s språk. Söker efter tillhörande ordbok att ladda ner Cannot connect to Keyman server to check for associated dictionary to download diff --git a/android/KMEA/app/src/main/res/values-uk-rUA/strings.xml b/android/KMEA/app/src/main/res/values-uk-rUA/strings.xml index bc53218a87..5b3b18636e 100644 --- a/android/KMEA/app/src/main/res/values-uk-rUA/strings.xml +++ b/android/KMEA/app/src/main/res/values-uk-rUA/strings.xml @@ -84,8 +84,6 @@ Бібліотека FileProvider необхідна для перегляду файлу довідки: %1$s Критична помилка в клавіатурі з %1$s:%2$s для мови %3$s . Завантаження клавіатури за замовчуванням. - - Помилка в клавіатурі %1$s:%2$s для мови %3$s. Перевірка пов\'язаного словника для завантаження Cannot connect to Keyman server to check for associated dictionary to download diff --git a/android/KMEA/app/src/main/res/values-vi-rVN/strings.xml b/android/KMEA/app/src/main/res/values-vi-rVN/strings.xml index bf130166e3..b6965b8dfd 100644 --- a/android/KMEA/app/src/main/res/values-vi-rVN/strings.xml +++ b/android/KMEA/app/src/main/res/values-vi-rVN/strings.xml @@ -78,8 +78,6 @@ Cần có Thư viện FileProvider để xem phần trợ giúp file: %1$s Lỗi bàn phím nghiêm trọng với %1$s: %2$s cho ngôn ngữ %3$s. Đang tải bàn phím mặc định. - - Lỗi trong bàn phím %1$s:%2$s cho ngôn ngữ %3$s. Keyman yêu cầu phải cài đặt WebView\". diff --git a/android/KMEA/app/src/main/res/values-zh-rCN/strings.xml b/android/KMEA/app/src/main/res/values-zh-rCN/strings.xml index 62011953f9..fdc6e19f9c 100644 --- a/android/KMEA/app/src/main/res/values-zh-rCN/strings.xml +++ b/android/KMEA/app/src/main/res/values-zh-rCN/strings.xml @@ -78,8 +78,6 @@ 需要文件提供者文库来查看帮助文件: %1$s %1$s键盘错误:%2$s为%3$s 语言。正在加载默认键盘。 - - 对于 %3$s 语言,键盘出现错误 %1$s:%2$s 。 正在检查相关字典以下载 无法连接到 Keyman 服务器以检查要下载的相关字典 diff --git a/android/KMEA/app/src/main/res/values/strings.xml b/android/KMEA/app/src/main/res/values/strings.xml index 86f2076586..ad56c6f370 100644 --- a/android/KMEA/app/src/main/res/values/strings.xml +++ b/android/KMEA/app/src/main/res/values/strings.xml @@ -123,13 +123,9 @@ FileProvider library needed to view help file: %1$s - - - Fatal keyboard error with %1$s:%2$s for %3$s language. Loading default keyboard. - - - Error in keyboard %1$s:%2$s for %3$s language. + + Keyman encountered an error and will restart diff --git a/common/test/keyboards/invalid/README.md b/common/test/keyboards/invalid/compiler/README.md similarity index 100% rename from common/test/keyboards/invalid/README.md rename to common/test/keyboards/invalid/compiler/README.md diff --git a/common/test/keyboards/invalid/source/CERR_400A_balochi_phonetic.kmn b/common/test/keyboards/invalid/compiler/source/CERR_400A_balochi_phonetic.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_400A_balochi_phonetic.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_400A_balochi_phonetic.kmn diff --git a/common/test/keyboards/invalid/source/CERR_400D_balochi_phonetic.kmn b/common/test/keyboards/invalid/compiler/source/CERR_400D_balochi_phonetic.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_400D_balochi_phonetic.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_400D_balochi_phonetic.kmn diff --git a/common/test/keyboards/invalid/source/CERR_400E_balochi_phonetic.kmn b/common/test/keyboards/invalid/compiler/source/CERR_400E_balochi_phonetic.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_400E_balochi_phonetic.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_400E_balochi_phonetic.kmn diff --git a/common/test/keyboards/invalid/source/CERR_4013_balochi_phonetic.kmn b/common/test/keyboards/invalid/compiler/source/CERR_4013_balochi_phonetic.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_4013_balochi_phonetic.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_4013_balochi_phonetic.kmn diff --git a/common/test/keyboards/invalid/source/CERR_4015_k_014___groups_and_virtual_keys.kmn b/common/test/keyboards/invalid/compiler/source/CERR_4015_k_014___groups_and_virtual_keys.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_4015_k_014___groups_and_virtual_keys.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_4015_k_014___groups_and_virtual_keys.kmn diff --git a/common/test/keyboards/invalid/source/CERR_4016_k_014___groups_and_virtual_keys.kmn b/common/test/keyboards/invalid/compiler/source/CERR_4016_k_014___groups_and_virtual_keys.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_4016_k_014___groups_and_virtual_keys.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_4016_k_014___groups_and_virtual_keys.kmn diff --git a/common/test/keyboards/invalid/source/CERR_4017_balochi_phonetic.kmn b/common/test/keyboards/invalid/compiler/source/CERR_4017_balochi_phonetic.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_4017_balochi_phonetic.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_4017_balochi_phonetic.kmn diff --git a/common/test/keyboards/invalid/source/CERR_4019_balochi_phonetic.kmn b/common/test/keyboards/invalid/compiler/source/CERR_4019_balochi_phonetic.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_4019_balochi_phonetic.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_4019_balochi_phonetic.kmn diff --git a/common/test/keyboards/invalid/source/CERR_401D_k_034___options_double_set_reset.kmn b/common/test/keyboards/invalid/compiler/source/CERR_401D_k_034___options_double_set_reset.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_401D_k_034___options_double_set_reset.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_401D_k_034___options_double_set_reset.kmn diff --git a/common/test/keyboards/invalid/source/CERR_4026_balochi_phonetic.kmn b/common/test/keyboards/invalid/compiler/source/CERR_4026_balochi_phonetic.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_4026_balochi_phonetic.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_4026_balochi_phonetic.kmn diff --git a/common/test/keyboards/invalid/source/CERR_4029_balochi_phonetic.kmn b/common/test/keyboards/invalid/compiler/source/CERR_4029_balochi_phonetic.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_4029_balochi_phonetic.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_4029_balochi_phonetic.kmn diff --git a/common/test/keyboards/invalid/source/CERR_402B_balochi_phonetic.kmn b/common/test/keyboards/invalid/compiler/source/CERR_402B_balochi_phonetic.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_402B_balochi_phonetic.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_402B_balochi_phonetic.kmn diff --git a/common/test/keyboards/invalid/source/CERR_402D_balochi_phonetic.kmn b/common/test/keyboards/invalid/compiler/source/CERR_402D_balochi_phonetic.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_402D_balochi_phonetic.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_402D_balochi_phonetic.kmn diff --git a/common/test/keyboards/invalid/source/CERR_4031_balochi_phonetic.kmn b/common/test/keyboards/invalid/compiler/source/CERR_4031_balochi_phonetic.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_4031_balochi_phonetic.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_4031_balochi_phonetic.kmn diff --git a/common/test/keyboards/invalid/source/CERR_4034_balochi_phonetic.kmn b/common/test/keyboards/invalid/compiler/source/CERR_4034_balochi_phonetic.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_4034_balochi_phonetic.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_4034_balochi_phonetic.kmn diff --git a/common/test/keyboards/invalid/source/CERR_4038_balochi_phonetic.kmn b/common/test/keyboards/invalid/compiler/source/CERR_4038_balochi_phonetic.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_4038_balochi_phonetic.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_4038_balochi_phonetic.kmn diff --git a/common/test/keyboards/invalid/source/CERR_4039_balochi_phonetic.kmn b/common/test/keyboards/invalid/compiler/source/CERR_4039_balochi_phonetic.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_4039_balochi_phonetic.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_4039_balochi_phonetic.kmn diff --git a/common/test/keyboards/invalid/source/CERR_403A_014_groups_and_virtual_keys.kmn b/common/test/keyboards/invalid/compiler/source/CERR_403A_014_groups_and_virtual_keys.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_403A_014_groups_and_virtual_keys.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_403A_014_groups_and_virtual_keys.kmn diff --git a/common/test/keyboards/invalid/source/CERR_403E_imsample.kmn b/common/test/keyboards/invalid/compiler/source/CERR_403E_imsample.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_403E_imsample.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_403E_imsample.kmn diff --git a/common/test/keyboards/invalid/source/CERR_4040_balochi_phonetic.kmn b/common/test/keyboards/invalid/compiler/source/CERR_4040_balochi_phonetic.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_4040_balochi_phonetic.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_4040_balochi_phonetic.kmn diff --git a/common/test/keyboards/invalid/source/CERR_4044_014_groups_and_virtual_keys.kmn b/common/test/keyboards/invalid/compiler/source/CERR_4044_014_groups_and_virtual_keys.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_4044_014_groups_and_virtual_keys.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_4044_014_groups_and_virtual_keys.kmn diff --git a/common/test/keyboards/invalid/source/CERR_4045_balochi_phonetic.kmn b/common/test/keyboards/invalid/compiler/source/CERR_4045_balochi_phonetic.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_4045_balochi_phonetic.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_4045_balochi_phonetic.kmn diff --git a/common/test/keyboards/invalid/source/CERR_4046_balochi_phonetic.kmn b/common/test/keyboards/invalid/compiler/source/CERR_4046_balochi_phonetic.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_4046_balochi_phonetic.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_4046_balochi_phonetic.kmn diff --git a/common/test/keyboards/invalid/source/CERR_4047_k_022___options_with_preset.kmn b/common/test/keyboards/invalid/compiler/source/CERR_4047_k_022___options_with_preset.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_4047_k_022___options_with_preset.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_4047_k_022___options_with_preset.kmn diff --git a/common/test/keyboards/invalid/source/CERR_4049_k_022___options_with_preset.kmn b/common/test/keyboards/invalid/compiler/source/CERR_4049_k_022___options_with_preset.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_4049_k_022___options_with_preset.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_4049_k_022___options_with_preset.kmn diff --git a/common/test/keyboards/invalid/source/CERR_404A_k_025___options_with_reset.kmn b/common/test/keyboards/invalid/compiler/source/CERR_404A_k_025___options_with_reset.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_404A_k_025___options_with_reset.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_404A_k_025___options_with_reset.kmn diff --git a/common/test/keyboards/invalid/source/CERR_404B_k_025___options_with_reset.kmn b/common/test/keyboards/invalid/compiler/source/CERR_404B_k_025___options_with_reset.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_404B_k_025___options_with_reset.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_404B_k_025___options_with_reset.kmn diff --git a/common/test/keyboards/invalid/source/CERR_404C_k_023___options_with_save.kmn b/common/test/keyboards/invalid/compiler/source/CERR_404C_k_023___options_with_save.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_404C_k_023___options_with_save.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_404C_k_023___options_with_save.kmn diff --git a/common/test/keyboards/invalid/source/CERR_404D_balochi_phonetic.kmn b/common/test/keyboards/invalid/compiler/source/CERR_404D_balochi_phonetic.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_404D_balochi_phonetic.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_404D_balochi_phonetic.kmn diff --git a/common/test/keyboards/invalid/source/CERR_404F_k_026___system_stores.kmn b/common/test/keyboards/invalid/compiler/source/CERR_404F_k_026___system_stores.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_404F_k_026___system_stores.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_404F_k_026___system_stores.kmn diff --git a/common/test/keyboards/invalid/source/CERR_405C_balochi_phonetic.kmn b/common/test/keyboards/invalid/compiler/source/CERR_405C_balochi_phonetic.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_405C_balochi_phonetic.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_405C_balochi_phonetic.kmn diff --git a/common/test/keyboards/invalid/source/CERR_405D_balochi_phonetic.kmn b/common/test/keyboards/invalid/compiler/source/CERR_405D_balochi_phonetic.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_405D_balochi_phonetic.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_405D_balochi_phonetic.kmn diff --git a/common/test/keyboards/invalid/source/CERR_405E_balochi_phonetic.kmn b/common/test/keyboards/invalid/compiler/source/CERR_405E_balochi_phonetic.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_405E_balochi_phonetic.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_405E_balochi_phonetic.kmn diff --git a/common/test/keyboards/invalid/source/CERR_4060_balochi_phonetic.kmn b/common/test/keyboards/invalid/compiler/source/CERR_4060_balochi_phonetic.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_4060_balochi_phonetic.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_4060_balochi_phonetic.kmn diff --git a/common/test/keyboards/invalid/source/CERR_4061_balochi_phonetic.kmn b/common/test/keyboards/invalid/compiler/source/CERR_4061_balochi_phonetic.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_4061_balochi_phonetic.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_4061_balochi_phonetic.kmn diff --git a/common/test/keyboards/invalid/source/CERR_4064_caps_lock_layer_3620.kmn b/common/test/keyboards/invalid/compiler/source/CERR_4064_caps_lock_layer_3620.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_4064_caps_lock_layer_3620.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_4064_caps_lock_layer_3620.kmn diff --git a/common/test/keyboards/invalid/source/CERR_4065_test_expansion_invalid.kmn b/common/test/keyboards/invalid/compiler/source/CERR_4065_test_expansion_invalid.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_4065_test_expansion_invalid.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_4065_test_expansion_invalid.kmn diff --git a/common/test/keyboards/invalid/source/CERR_4066_test_expansion_invalid.kmn b/common/test/keyboards/invalid/compiler/source/CERR_4066_test_expansion_invalid.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_4066_test_expansion_invalid.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_4066_test_expansion_invalid.kmn diff --git a/common/test/keyboards/invalid/source/CERR_4067_test_expansion_invalid.kmn b/common/test/keyboards/invalid/compiler/source/CERR_4067_test_expansion_invalid.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_4067_test_expansion_invalid.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_4067_test_expansion_invalid.kmn diff --git a/common/test/keyboards/invalid/source/CERR_4068_test_expansion_invalid.kmn b/common/test/keyboards/invalid/compiler/source/CERR_4068_test_expansion_invalid.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_4068_test_expansion_invalid.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_4068_test_expansion_invalid.kmn diff --git a/common/test/keyboards/invalid/source/CERR_4069_test_casedkeys_invalid_1.kmn b/common/test/keyboards/invalid/compiler/source/CERR_4069_test_casedkeys_invalid_1.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_4069_test_casedkeys_invalid_1.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_4069_test_casedkeys_invalid_1.kmn diff --git a/common/test/keyboards/invalid/source/CERR_406A_test_casedkeys_invalid_2.kmn b/common/test/keyboards/invalid/compiler/source/CERR_406A_test_casedkeys_invalid_2.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_406A_test_casedkeys_invalid_2.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_406A_test_casedkeys_invalid_2.kmn diff --git a/common/test/keyboards/invalid/source/CERR_406B_test_casedkeys_mnemonic_1.kmn b/common/test/keyboards/invalid/compiler/source/CERR_406B_test_casedkeys_mnemonic_1.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_406B_test_casedkeys_mnemonic_1.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_406B_test_casedkeys_mnemonic_1.kmn diff --git a/common/test/keyboards/invalid/source/CERR_406C_test_5963_readonlygroup_usenonreadonly.kmn b/common/test/keyboards/invalid/compiler/source/CERR_406C_test_5963_readonlygroup_usenonreadonly.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_406C_test_5963_readonlygroup_usenonreadonly.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_406C_test_5963_readonlygroup_usenonreadonly.kmn diff --git a/common/test/keyboards/invalid/source/CERR_406E_test_5963_readonlygroup_misplacedcontext.kmn b/common/test/keyboards/invalid/compiler/source/CERR_406E_test_5963_readonlygroup_misplacedcontext.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_406E_test_5963_readonlygroup_misplacedcontext.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_406E_test_5963_readonlygroup_misplacedcontext.kmn diff --git a/common/test/keyboards/invalid/source/CERR_406F_test_5963_newcontext_2.kmn b/common/test/keyboards/invalid/compiler/source/CERR_406F_test_5963_newcontext_2.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_406F_test_5963_newcontext_2.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_406F_test_5963_newcontext_2.kmn diff --git a/common/test/keyboards/invalid/source/CERR_4070_test_5963_postkeystroke_2.kmn b/common/test/keyboards/invalid/compiler/source/CERR_4070_test_5963_postkeystroke_2.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_4070_test_5963_postkeystroke_2.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_4070_test_5963_postkeystroke_2.kmn diff --git a/common/test/keyboards/invalid/source/CERR_4071_balochi_phonetic.kmn b/common/test/keyboards/invalid/compiler/source/CERR_4071_balochi_phonetic.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_4071_balochi_phonetic.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_4071_balochi_phonetic.kmn diff --git a/common/test/keyboards/invalid/source/CERR_4072_balochi_phonetic.kmn b/common/test/keyboards/invalid/compiler/source/CERR_4072_balochi_phonetic.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_4072_balochi_phonetic.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_4072_balochi_phonetic.kmn diff --git a/common/test/keyboards/invalid/source/CERR_4073_balochi_phonetic.kmn b/common/test/keyboards/invalid/compiler/source/CERR_4073_balochi_phonetic.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_4073_balochi_phonetic.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_4073_balochi_phonetic.kmn diff --git a/common/test/keyboards/invalid/source/CERR_80C0_test_expansion_absurd.kmn b/common/test/keyboards/invalid/compiler/source/CERR_80C0_test_expansion_absurd.kmn similarity index 100% rename from common/test/keyboards/invalid/source/CERR_80C0_test_expansion_absurd.kmn rename to common/test/keyboards/invalid/compiler/source/CERR_80C0_test_expansion_absurd.kmn diff --git a/common/test/keyboards/invalid/source/CERR__balochi_phonetic.ico b/common/test/keyboards/invalid/compiler/source/CERR__balochi_phonetic.ico similarity index 100% rename from common/test/keyboards/invalid/source/CERR__balochi_phonetic.ico rename to common/test/keyboards/invalid/compiler/source/CERR__balochi_phonetic.ico diff --git a/common/test/keyboards/invalid/engine/README.md b/common/test/keyboards/invalid/engine/README.md new file mode 100644 index 0000000000..305a6d2091 --- /dev/null +++ b/common/test/keyboards/invalid/engine/README.md @@ -0,0 +1,12 @@ +# Invalid keyboards for testing Keyman Engine + +## javascript_error.kmp + +A keyboard package that has a Javascript keyboard with an error in `gs()` to test runtime keyboard handling + +## TODO: other invalid keyboards to add here + +* invalid_packages - missing files, metadata, etc +* script_load_error - unparseable JS +* invalid kmx +* invalid fonts diff --git a/common/test/keyboards/invalid/engine/javascript_error/HISTORY.md b/common/test/keyboards/invalid/engine/javascript_error/HISTORY.md new file mode 100644 index 0000000000..fc4cd373a5 --- /dev/null +++ b/common/test/keyboards/invalid/engine/javascript_error/HISTORY.md @@ -0,0 +1,6 @@ +Banne Change History +==================== + +1.0 (2024-07-12) +---------------- +* Created by Sophia Ku diff --git a/common/test/keyboards/invalid/engine/javascript_error/LICENSE.md b/common/test/keyboards/invalid/engine/javascript_error/LICENSE.md new file mode 100644 index 0000000000..9d9ff006e3 --- /dev/null +++ b/common/test/keyboards/invalid/engine/javascript_error/LICENSE.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright © 2024 SIL + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/common/test/keyboards/invalid/engine/javascript_error/README.md b/common/test/keyboards/invalid/engine/javascript_error/README.md new file mode 100644 index 0000000000..64ade5335d --- /dev/null +++ b/common/test/keyboards/invalid/engine/javascript_error/README.md @@ -0,0 +1,14 @@ +# javascript_error keyboard + +## Description + +Keyboard with a script error in `gs()`, taken originally from release/b/banne + +The .js and .kmp files in modified_build/ have been manually tweaked to throw the error: + +```js + this.gs=function(t,e) { + throw new Error("javascript_error.js - runtime error"); + // return this.g_main_0(t,e); + }; +``` \ No newline at end of file diff --git a/common/test/keyboards/invalid/engine/javascript_error/javascript_error.kpj b/common/test/keyboards/invalid/engine/javascript_error/javascript_error.kpj new file mode 100644 index 0000000000..d3a678044b --- /dev/null +++ b/common/test/keyboards/invalid/engine/javascript_error/javascript_error.kpj @@ -0,0 +1,8 @@ + + + + 2.0 + True + True + + diff --git a/common/test/keyboards/invalid/engine/javascript_error/modified_build/javascript_error.js b/common/test/keyboards/invalid/engine/javascript_error/modified_build/javascript_error.js new file mode 100644 index 0000000000..47c3661e20 --- /dev/null +++ b/common/test/keyboards/invalid/engine/javascript_error/modified_build/javascript_error.js @@ -0,0 +1,816 @@ +if(typeof keyman === 'undefined') { + console.log('Keyboard requires KeymanWeb 10.0 or later'); + if(typeof tavultesoft !== 'undefined') tavultesoft.keymanweb.util.alert("This keyboard requires KeymanWeb 10.0 or later"); +} else { +KeymanWeb.KR(new Keyboard_javascript_error()); +} +function Keyboard_javascript_error() +{ + var modCodes = keyman.osk.modifierCodes; + var keyCodes = keyman.osk.keyCodes; + + this._v=(typeof keyman!="undefined"&&typeof keyman.version=="string")?parseInt(keyman.version,10):9; + this.KI="Keyboard_javascript_error"; + this.KN="javascript_error"; + this.KMINVER="10.0"; + this.KV={F:' 1em "Arial"',K102:0}; + this.KV.KLS={ + "default": ["`","1","2","3","4","5","6","7","8","9","0","-","=","","","","q","w","e","r","t","y","u","i","o","p","[","]","\\","","","","a","s","d","f","g","h","j","k","l",";","'","","","","","","\\","z","x","c","v","b","n","m",",",".","/","","","","","",""], + "shift": ["~","!","@","#","$","%","^","&","*","(",")","_","+","","","","Q","W","E","R","T","Y","U","I","O","P","{","}","|","","","","A","S","D","F","G","H","J","K","L",":","«","","","","","","|","Z","X","C","V","B","N","M","<",">","?","","","","","",""] + }; + this.KV.BK=(function(x){ + var + empty=Array.apply(null, Array(65)).map(String.prototype.valueOf,""), + result=[], v, i, + modifiers=['default','shift','ctrl','shift-ctrl','alt','shift-alt','ctrl-alt','shift-ctrl-alt']; + for(i=modifiers.length-1;i>=0;i--) { + v = x[modifiers[i]]; + if(v || result.length > 0) { + result=(v ? v : empty).slice().concat(result); + } + } + return result; + })(this.KV.KLS); + this.KDU=0; + this.KH=''; + this.KM=0; + this.KBVER="1.0"; + this.KMBM=modCodes.SHIFT /* 0x0010 */; + this.KVKL={ + "phone": { + "font": "Tahoma", + "layer": [ + { + "id": "default", + "row": [ + { + "id": "1", + "key": [ + { + "id": "K_Q", + "text": "q" + }, + { + "id": "K_W", + "text": "w" + }, + { + "id": "K_E", + "text": "e" + }, + { + "id": "K_R", + "text": "r" + }, + { + "id": "K_T", + "text": "t" + }, + { + "id": "K_Y", + "text": "y" + }, + { + "id": "K_U", + "text": "u" + }, + { + "id": "K_I", + "text": "i" + }, + { + "id": "K_O", + "text": "o" + }, + { + "id": "K_P", + "text": "p" + } + ] + }, + { + "id": "2", + "key": [ + { + "id": "K_A", + "text": "a", + "pad": "50" + }, + { + "id": "K_S", + "text": "s", + "sk": [ + { + "text": "š", + "id": "U_0161" + } + ] + }, + { + "id": "K_D", + "text": "d" + }, + { + "id": "K_F", + "text": "f" + }, + { + "id": "K_G", + "text": "g" + }, + { + "id": "K_H", + "text": "h" + }, + { + "id": "K_J", + "text": "j" + }, + { + "id": "K_K", + "text": "k" + }, + { + "id": "K_L", + "text": "l" + }, + { + "id": "T_new_88", + "width": "10", + "sp": "10" + } + ] + }, + { + "id": "3", + "key": [ + { + "id": "K_SHIFT", + "text": "*Shift*", + "sp": "1", + "nextlayer": "shift" + }, + { + "id": "K_Z", + "text": "z" + }, + { + "id": "K_X", + "text": "x" + }, + { + "id": "K_C", + "text": "c" + }, + { + "id": "K_V", + "text": "v" + }, + { + "id": "K_B", + "text": "b" + }, + { + "id": "K_N", + "text": "n" + }, + { + "id": "K_M", + "text": "m" + }, + { + "id": "K_PERIOD", + "text": ".", + "sk": [ + { + "text": ",", + "id": "K_COMMA" + }, + { + "text": "!", + "id": "K_1", + "layer": "shift" + }, + { + "text": "?", + "id": "K_SLASH", + "layer": "shift" + }, + { + "text": "‹", + "id": "U_2039" + }, + { + "text": "›", + "id": "U_203A" + }, + { + "text": "«", + "id": "U_00AB", + "layer": "shift" + }, + { + "text": "»", + "id": "U_00BB" + }, + { + "text": "\\", + "id": "K_BKSLASH" + }, + { + "text": ":", + "id": "K_COLON", + "layer": "shift" + }, + { + "text": ";", + "id": "K_COLON" + } + ] + }, + { + "id": "K_BKSP", + "text": "*BkSp*", + "width": "100", + "sp": "1" + } + ] + }, + { + "id": "4", + "key": [ + { + "id": "K_NUMLOCK", + "text": "*123*", + "width": "150", + "sp": "1", + "nextlayer": "numeric" + }, + { + "id": "K_LOPT", + "text": "*Menu*", + "width": "120", + "sp": "1" + }, + { + "id": "K_SPACE", + "width": "610" + }, + { + "id": "K_ENTER", + "text": "*Enter*", + "width": "150", + "sp": "1" + } + ] + } + ] + }, + { + "id": "shift", + "row": [ + { + "id": "1", + "key": [ + { + "id": "K_Q", + "text": "Q" + }, + { + "id": "K_W", + "text": "W" + }, + { + "id": "K_E", + "text": "E" + }, + { + "id": "K_R", + "text": "R" + }, + { + "id": "K_T", + "text": "T" + }, + { + "id": "K_Y", + "text": "Y" + }, + { + "id": "K_U", + "text": "U" + }, + { + "id": "K_I", + "text": "I" + }, + { + "id": "K_O", + "text": "O" + }, + { + "id": "K_P", + "text": "P" + } + ] + }, + { + "id": "2", + "key": [ + { + "id": "K_A", + "text": "A", + "pad": "50" + }, + { + "id": "K_S", + "text": "S", + "sk": [ + { + "text": "Š", + "id": "U_0160" + } + ] + }, + { + "id": "K_D", + "text": "D" + }, + { + "id": "K_F", + "text": "F" + }, + { + "id": "K_G", + "text": "G" + }, + { + "id": "K_H", + "text": "H" + }, + { + "id": "K_J", + "text": "J" + }, + { + "id": "K_K", + "text": "K" + }, + { + "id": "K_L", + "text": "L" + }, + { + "id": "T_new_122", + "width": "10", + "sp": "10" + } + ] + }, + { + "id": "3", + "key": [ + { + "id": "K_SHIFT", + "text": "*Shift*", + "sp": "2", + "nextlayer": "default" + }, + { + "id": "K_Z", + "text": "Z" + }, + { + "id": "K_X", + "text": "X" + }, + { + "id": "K_C", + "text": "C" + }, + { + "id": "K_V", + "text": "V" + }, + { + "id": "K_B", + "text": "B" + }, + { + "id": "K_N", + "text": "N" + }, + { + "id": "K_M", + "text": "M" + }, + { + "id": "K_PERIOD", + "text": ".", + "layer": "default", + "sk": [ + { + "text": ",", + "id": "K_COMMA", + "layer": "default" + }, + { + "text": "!", + "id": "K_1", + "layer": "shift" + }, + { + "text": "?", + "id": "K_SLASH", + "layer": "shift" + }, + { + "text": "‹", + "id": "U_2039", + "layer": "default" + }, + { + "text": "›", + "id": "U_203A" + }, + { + "text": "«", + "id": "U_00AB", + "layer": "shift" + }, + { + "text": "»", + "id": "U_00BB" + }, + { + "text": "\\", + "id": "K_BKSLASH", + "layer": "default" + }, + { + "text": ":", + "id": "K_COLON", + "layer": "shift" + }, + { + "text": ";", + "id": "K_COLON", + "layer": "default" + } + ] + }, + { + "id": "K_BKSP", + "text": "*BkSp*", + "sp": "1" + } + ] + }, + { + "id": "4", + "key": [ + { + "id": "K_NUMLOCK", + "text": "*123*", + "width": "150", + "sp": "1", + "nextlayer": "numeric" + }, + { + "id": "K_LOPT", + "text": "*Menu*", + "width": "120", + "sp": "1" + }, + { + "id": "K_SPACE", + "width": "610" + }, + { + "id": "K_ENTER", + "text": "*Enter*", + "width": "150", + "sp": "1" + } + ] + } + ] + }, + { + "id": "numeric", + "row": [ + { + "id": "1", + "key": [ + { + "id": "K_1", + "text": "1" + }, + { + "id": "K_2", + "text": "2" + }, + { + "id": "K_3", + "text": "3" + }, + { + "id": "K_4", + "text": "4" + }, + { + "id": "K_5", + "text": "5" + }, + { + "id": "K_6", + "text": "6" + }, + { + "id": "K_7", + "text": "7" + }, + { + "id": "K_8", + "text": "8" + }, + { + "id": "K_9", + "text": "9" + }, + { + "id": "K_0", + "text": "0", + "width": "100" + } + ] + }, + { + "id": "2", + "key": [ + { + "id": "K_4", + "text": "$", + "pad": "50", + "layer": "shift" + }, + { + "id": "K_2", + "text": "@", + "layer": "shift" + }, + { + "id": "K_3", + "text": "#", + "layer": "shift" + }, + { + "id": "K_5", + "text": "%", + "layer": "shift" + }, + { + "id": "K_7", + "text": "&", + "layer": "shift" + }, + { + "id": "K_HYPHEN", + "text": "-" + }, + { + "id": "K_HYPHEN", + "text": "_", + "layer": "shift" + }, + { + "id": "K_EQUAL", + "text": "=", + "layer": "default" + }, + { + "id": "K_BKSLASH", + "text": "|", + "layer": "shift" + }, + { + "id": "K_BKSLASH", + "text": "\\", + "layer": "default" + } + ] + }, + { + "id": "3", + "key": [ + { + "id": "K_LBRKT", + "text": "[", + "pad": "110", + "sk": [ + { + "text": "<", + "id": "K_COMMA", + "layer": "shift" + }, + { + "text": "{", + "id": "K_LBRKT", + "layer": "shift" + } + ] + }, + { + "id": "K_9", + "text": "(", + "layer": "shift", + "sk": [ + { + "text": "‹", + "id": "U_2039" + }, + { + "text": "«", + "id": "U_00AB" + } + ] + }, + { + "id": "K_0", + "text": ")", + "layer": "shift", + "sk": [ + { + "text": "›", + "id": "U_203A" + }, + { + "text": "»", + "id": "U_00BB" + } + ] + }, + { + "id": "K_RBRKT", + "text": "]", + "sk": [ + { + "text": ">", + "id": "K_PERIOD", + "layer": "shift" + }, + { + "text": "}", + "id": "K_RBRKT", + "layer": "shift" + } + ] + }, + { + "id": "U_0027", + "text": "'" + }, + { + "id": "U_0022", + "text": "\"" + }, + { + "id": "K_EQUAL", + "text": "+", + "layer": "shift" + }, + { + "id": "K_8", + "text": "*", + "layer": "shift" + }, + { + "id": "K_SLASH", + "text": "/" + }, + { + "id": "K_BKSP", + "text": "*BkSp*", + "width": "100", + "sp": "1" + } + ] + }, + { + "id": "4", + "key": [ + { + "id": "K_LOWER", + "text": "*abc*", + "width": "150", + "sp": "1", + "nextlayer": "default" + }, + { + "id": "K_LOPT", + "text": "*Menu*", + "width": "120", + "sp": "1" + }, + { + "id": "K_SPACE", + "width": "610" + }, + { + "id": "K_ENTER", + "text": "*Enter*", + "width": "150", + "sp": "1" + } + ] + } + ] + } + ], + "displayUnderlying": false + } +}; + this.KVER="19.0.254.0"; + this.KVS=[]; + this.gs=function(t,e) { + throw new Error("javascript_error.js - runtime error"); + // return this.g_main_0(t,e); + }; + this.g_main_0=function(t,e) { + var k=KeymanWeb,r=0,m=0; + if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_QUOTE /* 0xDE */)) { + if(k.KFCM(1,t,['«'])){ + r=m=1; // Line 26 + k.KDC(1,t); + k.KO(-1,t,"»"); + } + else if(k.KFCM(1,t,['»'])){ + r=m=1; // Line 27 + k.KDC(1,t); + k.KO(-1,t,"«"); + } + else if(k.KFCM(1,t,[';'])){ + r=m=1; // Line 30 + k.KDC(1,t); + k.KO(-1,t,"\""); + } + else if(1){ + r=m=1; // Line 25 + k.KDC(0,t); + k.KO(-1,t,"«"); + } + } + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_QUOTE /* 0xDE */)) { + if(k.KFCM(1,t,['\''])){ + r=m=1; // Line 20 + k.KDC(1,t); + k.KO(-1,t,"‹"); + } + else if(k.KFCM(1,t,['‹'])){ + r=m=1; // Line 21 + k.KDC(1,t); + k.KO(-1,t,"›"); + } + else if(k.KFCM(1,t,['›'])){ + r=m=1; // Line 22 + k.KDC(1,t); + k.KO(-1,t,"‹"); + } + else if(k.KFCM(1,t,['<'])){ + r=m=1; // Line 33 + k.KDC(1,t); + k.KO(-1,t,"‹"); + } + else if(k.KFCM(1,t,['>'])){ + r=m=1; // Line 34 + k.KDC(1,t); + k.KO(-1,t,"›"); + } + else if(k.KFCM(1,t,['s'])){ + r=m=1; // Line 42 + k.KDC(1,t); + k.KO(-1,t,"š"); + } + else if(k.KFCM(1,t,['S'])){ + r=m=1; // Line 43 + k.KDC(1,t); + k.KO(-1,t,"Š"); + } + } + else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_COMMA /* 0xBC */)) { + if(k.KFCM(1,t,['<'])){ + r=m=1; // Line 35 + k.KDC(1,t); + k.KO(-1,t,"«"); + } + } + else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_PERIOD /* 0xBE */)) { + if(k.KFCM(1,t,['>'])){ + r=m=1; // Line 36 + k.KDC(1,t); + k.KO(-1,t,"»"); + } + } + return r; + }; +} diff --git a/common/test/keyboards/invalid/engine/javascript_error/modified_build/javascript_error.keyboard_info b/common/test/keyboards/invalid/engine/javascript_error/modified_build/javascript_error.keyboard_info new file mode 100644 index 0000000000..234993db7d --- /dev/null +++ b/common/test/keyboards/invalid/engine/javascript_error/modified_build/javascript_error.keyboard_info @@ -0,0 +1,39 @@ +{ + "id": "javascript_error", + "name": "javascript_error", + "license": "mit", + "authorName": "Marc Durdin", + "description": "

javascript_error test keyboard

", + "languages": { + "amf": { + "examples": [], + "languageName": "Hamer-Banne", + "displayName": "Hamer-Banne" + } + }, + "lastModifiedDate": "2026-07-13T07:51:37.473Z", + "packageFilename": "javascript_error.kmp", + "packageFileSize": 6898, + "jsFilename": "javascript_error.js", + "jsFileSize": 20557, + "packageIncludes": [ + "visualKeyboard", + "welcome", + "documentation" + ], + "version": "1.0", + "encodings": [ + "unicode" + ], + "platformSupport": { + "windows": "full", + "macos": "full", + "linux": "full", + "desktopWeb": "full", + "ios": "full", + "android": "full", + "mobileWeb": "full" + }, + "minKeymanVersion": "10.0", + "helpLink": "https://help.keyman.com/keyboard/javascript_error" +} \ No newline at end of file diff --git a/common/test/keyboards/invalid/engine/javascript_error/modified_build/javascript_error.kmp b/common/test/keyboards/invalid/engine/javascript_error/modified_build/javascript_error.kmp new file mode 100644 index 0000000000000000000000000000000000000000..a7e846f245629c34089698e64fc4bdbc5070064e GIT binary patch literal 7076 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 literal 0 HcmV?d00001 diff --git a/common/test/keyboards/invalid/engine/javascript_error/source/javascript_error.keyman-touch-layout b/common/test/keyboards/invalid/engine/javascript_error/source/javascript_error.keyman-touch-layout new file mode 100644 index 0000000000..6bd2c4cb68 --- /dev/null +++ b/common/test/keyboards/invalid/engine/javascript_error/source/javascript_error.keyman-touch-layout @@ -0,0 +1,701 @@ +{ + "phone": { + "font": "Tahoma", + "layer": [ + { + "id": "default", + "row": [ + { + "id": 1, + "key": [ + { + "id": "K_Q", + "text": "q" + }, + { + "id": "K_W", + "text": "w" + }, + { + "id": "K_E", + "text": "e" + }, + { + "id": "K_R", + "text": "r" + }, + { + "id": "K_T", + "text": "t" + }, + { + "id": "K_Y", + "text": "y" + }, + { + "id": "K_U", + "text": "u" + }, + { + "id": "K_I", + "text": "i" + }, + { + "id": "K_O", + "text": "o" + }, + { + "id": "K_P", + "text": "p" + } + ] + }, + { + "id": 2, + "key": [ + { + "id": "K_A", + "text": "a", + "pad": 50 + }, + { + "id": "K_S", + "text": "s", + "sk": [ + { + "text": "š", + "id": "U_0161" + } + ] + }, + { + "id": "K_D", + "text": "d" + }, + { + "id": "K_F", + "text": "f" + }, + { + "id": "K_G", + "text": "g" + }, + { + "id": "K_H", + "text": "h" + }, + { + "id": "K_J", + "text": "j" + }, + { + "id": "K_K", + "text": "k" + }, + { + "id": "K_L", + "text": "l" + }, + { + "id": "T_new_88", + "text": "", + "width": 10, + "sp": 10 + } + ] + }, + { + "id": 3, + "key": [ + { + "id": "K_SHIFT", + "text": "*Shift*", + "sp": 1, + "nextlayer": "shift" + }, + { + "id": "K_Z", + "text": "z" + }, + { + "id": "K_X", + "text": "x" + }, + { + "id": "K_C", + "text": "c" + }, + { + "id": "K_V", + "text": "v" + }, + { + "id": "K_B", + "text": "b" + }, + { + "id": "K_N", + "text": "n" + }, + { + "id": "K_M", + "text": "m" + }, + { + "id": "K_PERIOD", + "text": ".", + "sk": [ + { + "text": ",", + "id": "K_COMMA" + }, + { + "text": "!", + "id": "K_1", + "layer": "shift" + }, + { + "text": "?", + "id": "K_SLASH", + "layer": "shift" + }, + { + "text": "‹", + "id": "U_2039" + }, + { + "text": "›", + "id": "U_203A" + }, + { + "text": "«", + "id": "U_00AB", + "layer": "shift" + }, + { + "text": "»", + "id": "U_00BB" + }, + { + "text": "\\", + "id": "K_BKSLASH" + }, + { + "text": ":", + "id": "K_COLON", + "layer": "shift" + }, + { + "text": ";", + "id": "K_COLON" + } + ] + }, + { + "id": "K_BKSP", + "text": "*BkSp*", + "width": 100, + "sp": 1 + } + ] + }, + { + "id": 4, + "key": [ + { + "id": "K_NUMLOCK", + "text": "*123*", + "width": 150, + "sp": 1, + "nextlayer": "numeric" + }, + { + "id": "K_LOPT", + "text": "*Menu*", + "width": 120, + "sp": 1 + }, + { + "id": "K_SPACE", + "text": "", + "width": 610, + "sp": 0 + }, + { + "id": "K_ENTER", + "text": "*Enter*", + "width": 150, + "sp": 1 + } + ] + } + ] + }, + { + "id": "shift", + "row": [ + { + "id": 1, + "key": [ + { + "id": "K_Q", + "text": "Q" + }, + { + "id": "K_W", + "text": "W" + }, + { + "id": "K_E", + "text": "E" + }, + { + "id": "K_R", + "text": "R" + }, + { + "id": "K_T", + "text": "T" + }, + { + "id": "K_Y", + "text": "Y" + }, + { + "id": "K_U", + "text": "U" + }, + { + "id": "K_I", + "text": "I" + }, + { + "id": "K_O", + "text": "O" + }, + { + "id": "K_P", + "text": "P" + } + ] + }, + { + "id": 2, + "key": [ + { + "id": "K_A", + "text": "A", + "pad": 50 + }, + { + "id": "K_S", + "text": "S", + "sk": [ + { + "text": "Š", + "id": "U_0160" + } + ] + }, + { + "id": "K_D", + "text": "D" + }, + { + "id": "K_F", + "text": "F" + }, + { + "id": "K_G", + "text": "G" + }, + { + "id": "K_H", + "text": "H" + }, + { + "id": "K_J", + "text": "J" + }, + { + "id": "K_K", + "text": "K" + }, + { + "id": "K_L", + "text": "L" + }, + { + "id": "T_new_122", + "text": "", + "width": 10, + "sp": 10 + } + ] + }, + { + "id": 3, + "key": [ + { + "id": "K_SHIFT", + "text": "*Shift*", + "sp": 2, + "nextlayer": "default" + }, + { + "id": "K_Z", + "text": "Z" + }, + { + "id": "K_X", + "text": "X" + }, + { + "id": "K_C", + "text": "C" + }, + { + "id": "K_V", + "text": "V" + }, + { + "id": "K_B", + "text": "B" + }, + { + "id": "K_N", + "text": "N" + }, + { + "id": "K_M", + "text": "M" + }, + { + "id": "K_PERIOD", + "text": ".", + "layer": "default", + "sk": [ + { + "text": ",", + "id": "K_COMMA", + "layer": "default" + }, + { + "text": "!", + "id": "K_1", + "layer": "shift" + }, + { + "text": "?", + "id": "K_SLASH", + "layer": "shift" + }, + { + "text": "‹", + "id": "U_2039", + "layer": "default" + }, + { + "text": "›", + "id": "U_203A" + }, + { + "text": "«", + "id": "U_00AB", + "layer": "shift" + }, + { + "text": "»", + "id": "U_00BB" + }, + { + "text": "\\", + "id": "K_BKSLASH", + "layer": "default" + }, + { + "text": ":", + "id": "K_COLON", + "layer": "shift" + }, + { + "text": ";", + "id": "K_COLON", + "layer": "default" + } + ] + }, + { + "id": "K_BKSP", + "text": "*BkSp*", + "sp": 1 + } + ] + }, + { + "id": 4, + "key": [ + { + "id": "K_NUMLOCK", + "text": "*123*", + "width": 150, + "sp": 1, + "nextlayer": "numeric" + }, + { + "id": "K_LOPT", + "text": "*Menu*", + "width": 120, + "sp": 1 + }, + { + "id": "K_SPACE", + "text": "", + "width": 610, + "sp": 0 + }, + { + "id": "K_ENTER", + "text": "*Enter*", + "width": 150, + "sp": 1 + } + ] + } + ] + }, + { + "id": "numeric", + "row": [ + { + "id": 1, + "key": [ + { + "id": "K_1", + "text": "1" + }, + { + "id": "K_2", + "text": "2" + }, + { + "id": "K_3", + "text": "3" + }, + { + "id": "K_4", + "text": "4" + }, + { + "id": "K_5", + "text": "5" + }, + { + "id": "K_6", + "text": "6" + }, + { + "id": "K_7", + "text": "7" + }, + { + "id": "K_8", + "text": "8" + }, + { + "id": "K_9", + "text": "9" + }, + { + "id": "K_0", + "text": "0", + "width": 100 + } + ] + }, + { + "id": 2, + "key": [ + { + "id": "K_4", + "text": "$", + "pad": 50, + "layer": "shift" + }, + { + "id": "K_2", + "text": "@", + "layer": "shift" + }, + { + "id": "K_3", + "text": "#", + "layer": "shift" + }, + { + "id": "K_5", + "text": "%", + "layer": "shift" + }, + { + "id": "K_7", + "text": "&", + "layer": "shift" + }, + { + "id": "K_HYPHEN", + "text": "-" + }, + { + "id": "K_HYPHEN", + "text": "_", + "layer": "shift" + }, + { + "id": "K_EQUAL", + "text": "=", + "layer": "default" + }, + { + "id": "K_BKSLASH", + "text": "|", + "layer": "shift" + }, + { + "id": "K_BKSLASH", + "text": "\\", + "layer": "default" + } + ] + }, + { + "id": 3, + "key": [ + { + "id": "K_LBRKT", + "text": "[", + "pad": 110, + "sk": [ + { + "text": "<", + "id": "K_COMMA", + "layer": "shift" + }, + { + "text": "{", + "id": "K_LBRKT", + "layer": "shift" + } + ] + }, + { + "id": "K_9", + "text": "(", + "layer": "shift", + "sk": [ + { + "text": "‹", + "id": "U_2039" + }, + { + "text": "«", + "id": "U_00AB" + } + ] + }, + { + "id": "K_0", + "text": ")", + "layer": "shift", + "sk": [ + { + "text": "›", + "id": "U_203A" + }, + { + "text": "»", + "id": "U_00BB" + } + ] + }, + { + "id": "K_RBRKT", + "text": "]", + "sk": [ + { + "text": ">", + "id": "K_PERIOD", + "layer": "shift" + }, + { + "text": "}", + "id": "K_RBRKT", + "layer": "shift" + } + ] + }, + { + "id": "U_0027", + "text": "'" + }, + { + "id": "U_0022", + "text": "\"" + }, + { + "id": "K_EQUAL", + "text": "+", + "layer": "shift" + }, + { + "id": "K_8", + "text": "*", + "layer": "shift" + }, + { + "id": "K_SLASH", + "text": "/" + }, + { + "id": "K_BKSP", + "text": "*BkSp*", + "width": 100, + "sp": 1 + } + ] + }, + { + "id": 4, + "key": [ + { + "id": "K_LOWER", + "text": "*abc*", + "width": 150, + "sp": 1, + "nextlayer": "default" + }, + { + "id": "K_LOPT", + "text": "*Menu*", + "width": 120, + "sp": 1 + }, + { + "id": "K_SPACE", + "text": "", + "width": 610, + "sp": 0 + }, + { + "id": "K_ENTER", + "text": "*Enter*", + "width": 150, + "sp": 1 + } + ] + } + ] + } + ] + } +} \ No newline at end of file diff --git a/common/test/keyboards/invalid/engine/javascript_error/source/javascript_error.kmn b/common/test/keyboards/invalid/engine/javascript_error/source/javascript_error.kmn new file mode 100644 index 0000000000..38925963e7 --- /dev/null +++ b/common/test/keyboards/invalid/engine/javascript_error/source/javascript_error.kmn @@ -0,0 +1,43 @@ +c banne generated from template at 2024-07-12 10:16:50 +c with name "Banne" +store(&VERSION) '10.0' +store(&NAME) 'javascript_error' +store(©RIGHT) 'Copyright © SIL' +store(&KEYBOARDVERSION) '1.0' +store(&TARGETS) 'any' +store(&VISUALKEYBOARD) 'javascript_error.kvks' +store(&LAYOUTFILE) 'javascript_error.keyman-touch-layout' + +begin Unicode > use(main) + +group(main) using keys + +c ------------------------------------------------------------------------------ +c punctuation characters +c ------------------------------------------------------------------------------ + +c Toggle between ‹ and › by continuing to input ' +"'" + "'" > U+2039 c ‹ +U+2039 + "'" > U+203A c › +U+203A + "'" > U+2039 c ‹ + +c Toggle between « and » by continuing to input " ++ '"' > U+00AB c « +U+00AB + '"' > U+00BB c » +U+00BB + '"' > U+00AB c « + +c Revert to default " character +";" + '"' > '"' + +c Use angle brackets to type characters +"<" + "'" > U+2039 c ‹ +">" + "'" > U+203A c › +"<" + "<" > U+00AB c « +">" + ">" > U+00BB c » + +c ------------------------------------------------------------------------------ +c s with caron +c ------------------------------------------------------------------------------ + +"s" + "'" > U+0161 c š +"S" + "'" > U+0160 c Š diff --git a/common/test/keyboards/invalid/engine/javascript_error/source/javascript_error.kps b/common/test/keyboards/invalid/engine/javascript_error/source/javascript_error.kps new file mode 100644 index 0000000000..56d8e9edb8 --- /dev/null +++ b/common/test/keyboards/invalid/engine/javascript_error/source/javascript_error.kps @@ -0,0 +1,75 @@ + + + + 17.0.326.0 + 7.0 + + + + readme.htm + ..\LICENSE.md + + + + + + + + + + javascript_error + Copyright © SIL + Marc Durdin + javascript_error test keyboard + + + + + ..\build\javascript_error.kmx + + 0 + .kmx + + + ..\build\javascript_error.js + + 0 + .js + + + ..\build\javascript_error.kvk + + 0 + .kvk + + + welcome.htm + + 0 + .htm + + + readme.htm + + 0 + .htm + + + ..\LICENSE.md + + 0 + .md + + + + + javascript_error + javascript_error + 1.0 + + Hamer-Banna + + + + + diff --git a/common/test/keyboards/invalid/engine/javascript_error/source/javascript_error.kvks b/common/test/keyboards/invalid/engine/javascript_error/source/javascript_error.kvks new file mode 100644 index 0000000000..d4171d4e01 --- /dev/null +++ b/common/test/keyboards/invalid/engine/javascript_error/source/javascript_error.kvks @@ -0,0 +1,110 @@ + + +
+ 10.0 + banne + +
+ + + ` + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 0 + - + = + q + w + e + r + t + y + u + i + o + p + [ + ] + \ + a + s + d + f + g + h + j + k + l + ; + ' + \ + z + x + c + v + b + n + m + , + . + / + + + ~ + ! + @ + # + $ + % + ^ + & + * + ( + ) + _ + + + Q + W + E + R + T + Y + U + I + O + P + { + } + | + A + S + D + F + G + H + J + K + L + : + « + | + Z + X + C + V + B + N + M + < + > + ? + + +
diff --git a/common/test/keyboards/invalid/engine/javascript_error/source/readme.htm b/common/test/keyboards/invalid/engine/javascript_error/source/readme.htm new file mode 100644 index 0000000000..80f2c3f038 --- /dev/null +++ b/common/test/keyboards/invalid/engine/javascript_error/source/readme.htm @@ -0,0 +1,22 @@ + + + + + + Banne + + + + +

javascript_error

+ +

+Keyboard with a script error in `gs()`, taken originally from release/b/banne. The .js and .kmp files in modified_build/ have been manually tweaked to throw an error. +

+ + + diff --git a/common/test/keyboards/invalid/engine/javascript_error/source/welcome.htm b/common/test/keyboards/invalid/engine/javascript_error/source/welcome.htm new file mode 100644 index 0000000000..acc98782a0 --- /dev/null +++ b/common/test/keyboards/invalid/engine/javascript_error/source/welcome.htm @@ -0,0 +1,178 @@ + + + + + + Start Using Banne + + + + +

Start Using Banne

+ +

+Keyboard with a script error in `gs()`, taken originally from release/b/banne. The .js and .kmp files in modified_build/ have been manually tweaked to throw an error. +

+ +

Keyboard Layout

+

Keystrokes

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Base+Modifier=Result
s+'=š
S+'=Š
+

Punctuation

+

+ The ' key has been modified to cycle between (U+2039) and (U+203A) from the second keypress onwards. +
+ The first keypress will produce the ' (U+0027) character as expected, and pressing it again will turn the ' into a . Pressing the ' key one more time will produce a . +

+

+ The " key has been modified to automatically type the character « (U+00AB). To cancel this, pressing the ; key before typing a " will produce a normal ". +
+ Pressing the " key repeatedly will cycle between the » (U+00BB) and « characters. +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Base+Modifier=Result
'+'=
<+'=
>+'=
" =«
<+<=«
>+>=»
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Base+Modifier=Result
+'=
+'=
«+"=»
»+"=«
;+"="
+
+ + + \ No newline at end of file