diff --git a/HISTORY.md b/HISTORY.md index 899cc2a5df..4e973c3864 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,5 +1,16 @@ # Keyman Version History +## 18.0.164 alpha 2025-01-08 + +* fix(windows): add language and close button fit inside pop-window (#12855) +* chore(windows): add bcp47 code and tips to diagnostic (#12843) +* fix(android/engine): Cleanup KMManager API keys and calls (#12861) +* docs(developer,mac): add playable video links to the help documentation (#12828) + +## 18.0.163 alpha 2025-01-06 + +* docs: clarify that sections in KMX file might not be aligned (#12856) + ## 18.0.162 alpha 2024-12-19 * fix(mac): standardize interaction between OSK and physical keyboard (#12836) diff --git a/VERSION.md b/VERSION.md index 99025bb930..6a2a803540 100644 --- a/VERSION.md +++ b/VERSION.md @@ -1 +1 @@ -18.0.163 \ No newline at end of file +18.0.165 \ No newline at end of file diff --git a/android/KMEA/app/src/main/assets/android-host.js b/android/KMEA/app/src/main/assets/android-host.js index 21f783ffc5..5a25367223 100644 --- a/android/KMEA/app/src/main/assets/android-host.js +++ b/android/KMEA/app/src/main/assets/android-host.js @@ -241,11 +241,11 @@ function enableSuggestions(model, suggestionType) { [true, true, false], // 2 = SuggestionType.PREDICTIONS_WITH_CORRECTIONS [true, true, true], // 3 = SuggestionType.PREDICTIONS_WITH_AUTO_CORRECT ]; - const t = suggestionSettings[suggestionType] + const t = suggestionSettings[suggestionType] ? suggestionSettings[suggestionType] : suggestionSettings[0]; keyman.core.languageProcessor.mayPredict = t[0]; keyman.core.languageProcessor.maySuggest = t[1]; - // keyman.core.languageProcessor.mayAutoCorrect = t[2]; + keyman.core.languageProcessor.mayAutoCorrect = t[2]; registerModel(model); } diff --git a/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java b/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java index e776476aff..cc12b36dca 100644 --- a/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java +++ b/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java @@ -249,7 +249,7 @@ public final class KMManager { public final static String predictionPrefSuffix = ".mayPredict"; public final static String correctionPrefSuffix = ".mayCorrect"; - public final static String autoCorrectionPrefSuffix = ".mayAutoCorect"; + public final static String autoCorrectionPrefSuffix = ".mayAutoCorrect"; // Special override for when the keyboard may have haptic feedback when typing. // haptic feedback disabled for hardware keystrokes @@ -305,11 +305,6 @@ public final class KMManager { public static final String KMKey_LexicalModelVersion = "lmVersion"; public static final String KMKey_LexicalModelPackageFilename = "kmpPackageFilename"; - // DEPRECATED keys - public static final String KMKey_CustomKeyboard = "CustomKeyboard"; - public static final String KMKey_CustomModel = "CustomModel"; - public static final String KMKey_HelpLink = "helpLink"; - // Keyman internal keys protected static final String KMKey_ShouldShowHelpBubble = "ShouldShowHelpBubble"; @@ -1714,26 +1709,6 @@ public final class KMManager { return KeyboardPickerActivity.addKeyboard(context, keyboardInfo); } - // Intend to deprecate in Keyman 15.0 - public static boolean addKeyboard(Context context, HashMap keyboardInfo) { - String packageID = keyboardInfo.get(KMManager.KMKey_PackageID); - String keyboardID = keyboardInfo.get(KMManager.KMKey_KeyboardID); - String keyboardName = keyboardInfo.get(KMManager.KMKey_KeyboardName); - String languageID = keyboardInfo.get(KMManager.KMKey_LanguageID); - String languageName = keyboardInfo.get(KMManager.KMKey_LanguageName); - String version = keyboardInfo.get(KMManager.KMKey_KeyboardVersion); - String helpLink = keyboardInfo.get(KMManager.KMKey_CustomHelpLink); - String kmpLink = MapCompat.getOrDefault(keyboardInfo, KMManager.KMKey_KMPLink, ""); - String font = keyboardInfo.get(KMManager.KMKey_Font); - String oskFont = keyboardInfo.get(KMManager.KMKey_OskFont); - boolean isNewKeyboard = true; - - Keyboard k = new Keyboard(packageID, keyboardID, keyboardName, - languageID, languageName, version, helpLink, kmpLink, - isNewKeyboard, font, oskFont); - return addKeyboard(context, k); - } - public static boolean removeKeyboard(Context context, int position) { return KeyboardPickerActivity.removeKeyboard(context, position); } diff --git a/android/KMEA/app/src/test/java/com/keyman/engine/KMManagerTest.java b/android/KMEA/app/src/test/java/com/keyman/engine/KMManagerTest.java index 59a0237b37..91fc7dd370 100644 --- a/android/KMEA/app/src/test/java/com/keyman/engine/KMManagerTest.java +++ b/android/KMEA/app/src/test/java/com/keyman/engine/KMManagerTest.java @@ -126,7 +126,6 @@ public class KMManagerTest { HashMap kmInfo = new HashMap(); kmInfo.put(KMManager.KMKey_PackageID, "khmer_angkor"); kmInfo.put(KMManager.KMKey_KeyboardID, "khmer_angkor"); - kmInfo.put(KMManager.KMKey_CustomKeyboard, "Y"); kmInfo.put(KMManager.KMKey_LanguageID, "km"); kmInfo.put(KMManager.KMKey_KeyboardName, "Khmer Angkor"); kmInfo.put(KMManager.KMKey_LanguageName, "Central Khmer"); diff --git a/android/KMEA/app/src/test/java/com/keyman/engine/view/FunctionalTestHelper.java b/android/KMEA/app/src/test/java/com/keyman/engine/view/FunctionalTestHelper.java index b56a4063eb..0d4b7c81de 100644 --- a/android/KMEA/app/src/test/java/com/keyman/engine/view/FunctionalTestHelper.java +++ b/android/KMEA/app/src/test/java/com/keyman/engine/view/FunctionalTestHelper.java @@ -66,7 +66,21 @@ public class FunctionalTestHelper { Assert.assertEquals(installedKbds.size(),1); - KMManager.addKeyboard(ApplicationProvider.getApplicationContext(),(HashMap) installedKbds.get(0)); + HashMap map = (HashMap)installedKbds.get(0); + Keyboard keyboard = new Keyboard( + map.get(KMManager.KMKey_PackageID), + map.get(KMManager.KMKey_KeyboardID), + map.get(KMManager.KMKey_KeyboardName), + map.get(KMManager.KMKey_LanguageID), + map.get(KMManager.KMKey_LanguageName), + map.get(KMManager.KMKey_KeyboardVersion), + map.get(KMManager.KMKey_CustomHelpLink), + map.get(KMManager.KMKey_KMPLink), + true, + null, + null + ); + KMManager.addKeyboard(ApplicationProvider.getApplicationContext(), keyboard); } diff --git a/developer/docs/help/guides/intro.md b/developer/docs/help/guides/intro.md index fd72c898f9..d9d6fa116c 100644 --- a/developer/docs/help/guides/intro.md +++ b/developer/docs/help/guides/intro.md @@ -12,8 +12,9 @@ Linux. There are two core applications included in Keyman Developer: the Keyman Developer IDE (formerly called TIKE), and the command line compiler kmc. -[Watch a video](https://youtu.be/kwhgx_eX4Es) that highlights some of -the Keyman Developer features. +Watch a video that highlights some of the Keyman Developer 14.0 features (57:23) + +:Keyman Developer 14.0 Webinar ## Keyman Developer IDE diff --git a/docs/file-formats/kmx-file-format.md b/docs/file-formats/kmx-file-format.md index 67288bc123..e13575ae4a 100644 --- a/docs/file-formats/kmx-file-format.md +++ b/docs/file-formats/kmx-file-format.md @@ -18,11 +18,14 @@ source files. zeroed. Note that `COMP_KEYBOARD_KMXPLUS` must follow immediately after `COMP_KEYBOARD` with no empty space (that is at byte offset 64). -A .kmx file is essentially a 32-bit memory mapped file. In a 32-bit process, the +A .kmx file is essentially a 32-bit memory mapped file, however there is +no guarantee that all sections start at a 32-bit boundary. +In a 32-bit process on architectures that use flexible alignment, the file can be loaded into a memory buffer, and (assuming the file is valid), all offset values in the file can be rewritten into pointers by adding the base of -the memory buffer to them. (In a 64-bit process, a fixup is needed to make space -for 64-bit pointers.) +the memory buffer to them. (In a 64-bit process or on architectures that +use strict alignment (like emscripten), a fixup is needed to make space +for aligned pointers.) ## `COMP_KEYBOARD`: KMX header diff --git a/mac/docs/help/start/install-keyboard.md b/mac/docs/help/start/install-keyboard.md index c8f2aa025a..bf9310c8bb 100644 --- a/mac/docs/help/start/install-keyboard.md +++ b/mac/docs/help/start/install-keyboard.md @@ -8,7 +8,9 @@ You must have a Keyman keyboard installed to type with Keyman for macOS in your Here's how to download and install a Keyman keyboard within Keyman for macOS: -[![](../mac_images/video.png) Watch Video](https://youtu.be/VirHygx8iqg) for installing the Khmer Angkor keyboard for Keyman for macOS. +![](../mac_images/video.png) Watch this video for installing the Khmer Angkor keyboard for Keyman for macOS (0:51) + +:Tutorial: Install Khmer Angkor Keyboard on Keyman for macOS 1. Choose Keyman from the Input menu in the menu bar. 2. Open Keyman Configuration, from the Configuration link under Keyman in the Input menu. diff --git a/mac/docs/help/start/install-keyman.md b/mac/docs/help/start/install-keyman.md index a3bbdb0733..b8aaa3a19d 100644 --- a/mac/docs/help/start/install-keyman.md +++ b/mac/docs/help/start/install-keyman.md @@ -5,7 +5,9 @@ title: Install Keyman for macOS *Keyman for macOS* is available for [download](https://keyman.com/mac/download) as a standard Apple Disk Image (.dmg) file. It should be installed according to the following instructions. -[![Play](../mac_images/video.png) Watch Video](https://youtu.be/7Ax71QeUNfo) +![Play](../mac_images/video.png) Watch Video (0:33) + +:Tutorial: Install Keyman for macOS 1. Double click the DMG file to open it in Finder. 2. Double click the **Install Keyman** icon to open the Keyman installer. diff --git a/web/src/engine/interfaces/src/prediction/languageProcessor.interface.ts b/web/src/engine/interfaces/src/prediction/languageProcessor.interface.ts index b26125982e..eafdac2d39 100644 --- a/web/src/engine/interfaces/src/prediction/languageProcessor.interface.ts +++ b/web/src/engine/interfaces/src/prediction/languageProcessor.interface.ts @@ -71,4 +71,6 @@ export interface LanguageProcessorSpec extends EventEmitter; get wordbreaksAfterSuggestions(): boolean; + + get mayAutoCorrect(): boolean; } diff --git a/web/src/engine/interfaces/src/prediction/predictionContext.ts b/web/src/engine/interfaces/src/prediction/predictionContext.ts index b131752d96..ec632a5058 100644 --- a/web/src/engine/interfaces/src/prediction/predictionContext.ts +++ b/web/src/engine/interfaces/src/prediction/predictionContext.ts @@ -324,7 +324,7 @@ export default class PredictionContext extends EventEmitter { private _mayPredict: boolean = true; private _mayCorrect: boolean = true; + private _mayAutoCorrect: boolean = false; // initialized to false - #12767 private _state: StateChangeEnum = 'inactive'; @@ -402,6 +403,14 @@ export class LanguageProcessor extends EventEmitter { this._mayCorrect = flag; } + public get mayAutoCorrect() { + return this._mayAutoCorrect; + } + + public set mayAutoCorrect(flag: boolean) { + this._mayAutoCorrect = flag; + } + public get wordbreaksAfterSuggestions() { return this.configuration.wordbreaksAfterSuggestions; } diff --git a/windows/src/desktop/kmshell/xml/config.css b/windows/src/desktop/kmshell/xml/config.css index 851964112b..ac9ddcee0c 100644 --- a/windows/src/desktop/kmshell/xml/config.css +++ b/windows/src/desktop/kmshell/xml/config.css @@ -614,6 +614,7 @@ table tr { display: flex; flex-direction: column; + height: 200px; gap: 4px; } .list_languages_title @@ -622,6 +623,11 @@ table tr } /* keyboard languages */ +.keyboard_language_list +{ + flex-grow:1 +} + .keyboard_language { display: flex; @@ -1199,10 +1205,8 @@ th } .list_languages_add { - padding-top: 10px; - position: fixed; - top: 223px; /* Have to use fixed position can't use flex or grid inside a fixed child */ - right: 281px; + padding-bottom: 10px; + align-self: flex-end; } .modify .keyboard_language { diff --git a/windows/src/desktop/kmshell/xml/keyman_keyboardlist.xsl b/windows/src/desktop/kmshell/xml/keyman_keyboardlist.xsl index f61c1b3f7f..5f15a88d0a 100644 --- a/windows/src/desktop/kmshell/xml/keyman_keyboardlist.xsl +++ b/windows/src/desktop/kmshell/xml/keyman_keyboardlist.xsl @@ -394,7 +394,7 @@
-
+
1 diff --git a/windows/src/engine/tsysinfo/si_language.xslt b/windows/src/engine/tsysinfo/si_language.xslt index c3015aec98..2b4973c962 100644 --- a/windows/src/engine/tsysinfo/si_language.xslt +++ b/windows/src/engine/tsysinfo/si_language.xslt @@ -34,6 +34,38 @@ +

User Profile Options

+ + + + + + + + + + + + + + +
LanguagesShowAutoCorrectionShowTextPredictionShowCasingShowShiftLockInputMethodOverride
+ +

BCP47 Codes

+ + + + + + + + + + + + +
BCP47 CodeTransient LangIdCached Language Name{LangID}:{Keyboard Layout ID}
+

Windows Keyboard Hotkeys

@@ -88,7 +120,7 @@ - + @@ -96,9 +128,9 @@ - + - + @@ -114,6 +146,27 @@ + + + + + + + + + + + + + + + + 0000 @@ -125,7 +178,7 @@ - + @@ -166,7 +219,7 @@ No - + - +
Keyman system shadow keyboard
+ + + , + +