Commit graph

30353 commits

Author SHA1 Message Date
Marc Durdin
0c071bb2b7
Merge pull request #15551 from keymanapp/fix/core/cherry-pick/15491-15505-bengali-normalization-and-tests
fix(core): normalization segment should end on NFC boundary, not NFD 🍒 🏠
2026-02-04 09:54:03 +07:00
Marc Durdin
2f5bbccd52
Merge pull request #15494 from keymanapp/fix/core/cherry-pick/15487-bksp
fix(core): handle backspace decomposition 🍒 🏠
2026-02-04 09:53:53 +07:00
Marc Durdin
75b540c4d9 chore(core): update test from nfd to nfc 2026-02-04 06:35:56 +11:00
Marc Durdin
c16af76186 chore(core): address review comments
Co-authored-by: Darcy Wong <darcy_wong@sil.org>
Co-authored-by: Eberhard Beilharz <ermshiperete@users.noreply.github.com>
2026-02-04 06:16:19 +11:00
Marc Durdin
2e96fe93b6 fix(core): normalization segment should end on NFC boundary, not NFD
When normalizing, we need to stop processing on an NFC boundary, not an
NFD boundary, to support normalizations such as in Bengali, where
appending `U+09D7` to a context of `U+0995 U+09C7` should result in
`U+0995 U+09CC`.

The specification is unclear on this; see https://unicode-org.atlassian.net/browse/CLDR-19218

This also updates the ldml keyboard unit test suite to support running
in full NFC mode (used in all Engine implementations) as well retaining
the NFD mode (now only used by the debugger).

Side note: the Bengali normalization failure case was picked up by the
improvements to the unit test suite, proving once again that good tests
are so valuable.

Fixes: #15491
Fixes: #15505
Follows: #15488
Cherry-pick-of: #15506
Relates-to: CLDR-19218
2026-02-04 06:15:35 +11:00
Marc Durdin
da6e53a0b3 docs(core): add comments post review
Co-authored-by: srl295@gmail.com
2026-02-04 06:13:26 +11:00
Darcy Wong
56f3a29194
Merge pull request #15496 from keymanapp/cherrypick/fv/fv_tlingityoo
chore(ios): Add fv_tlingityooxatangi to FirstVoices for iOS app 🏠
2026-02-02 15:18:21 +07:00
Darcy Wong
65eb008f21 chore(ios): Add fv_tlingityooxatangi to FirstVoices for iOS app
* Also increment sil_euro_latin version
2026-01-26 08:36:32 +07:00
Marc Durdin
598b75fa24 fix(core): handle backspace decomposition 🍒
Ensure that when a single backspace decomposes the last NFC character in
the app context, the remainder of the 'cluster' is preserved, matching
the implication of the CLDR keyboard specification.

This addresses the behavior in #15487 where the cached context became
out of sync with the app context after deleting an entire NFC cluster
such as ê, which caused a loop ending up with the entire context being
deleted, at which point the loop exited with a fail-safe.

Note that the LDML keyboard tests (ldml.cpp) do not currently exercise
the normalization code; this is a gap that should be addressed to ensure
that we are testing final application behavior.

This cherry-pick only adds the direct normalization patch and unit test
and skips the additional changes for logging.

Fixes: #15487
Cherry-pick-of: #15488
2026-01-26 11:30:04 +11:00
Darcy Wong
e94b699d32
Merge pull request #15468 from keymanapp/chore/primperprep-link
docs(developer): update primerprep link 🏠
2026-01-20 08:49:18 +07:00
Meng-Heng
b5a7573b45 chore: update primerprep link 2026-01-19 13:52:27 +07:00
Eberhard Beilharz
f5bf729250
Merge pull request #15424 from keymanapp/maint/linux/cherry-pick/plucky
maint(linux): remove EOL Ubuntu 25.04 Plucky 🍒

Support for Ubuntu 25.04 Plucky ends on 15th January 2026 after which it is no longer possible to upload and build on Launchpad. This change removes Plucky.

Fixes: #14955
Cherry-pick-of: #15423
2026-01-14 09:59:20 +01:00
Eberhard Beilharz
007e82f47a
maint(linux): remove EOL Ubuntu 25.04 Plucky 🍒
Support for Ubuntu 25.04 Plucky ends on 15th January 2026 after which
it is no longer possible to upload and build on Launchpad. This change
removes Plucky.

Fixes: #14955
Cherry-pick-of: #15423
Test-bot: skip
2026-01-13 18:12:15 +01:00
Eberhard Beilharz
bb6bc7c426
Merge pull request #15281 from keymanapp/chore/linux/changelog 2025-12-09 12:32:42 +01:00
Eberhard Beilharz
4f513a7066
chore(linux): Update debian changelog 2025-12-04 10:18:58 +01:00
Marc Durdin
89ffdfc6b7
Merge pull request #15274 from keymanapp/docs/ios/cherry-pick/15253-cdn-dev
docs(ios): Use /cdn/dev assets for Engine guides 🍒 🏠
2025-12-03 15:02:48 +01:00
Darcy Wong
ceafff7adf
Merge pull request #15273 from keymanapp/cherrypick/common/fv-all-versions
cherrypick(common):  Update FirstVoices versions in keyboards.csv 🏠
2025-12-03 20:32:17 +07:00
Darcy Wong
af34bc9939 docs(ios): Use /cdn/dev assets for Engine guides
Cherry-pick-of: #15253
Test-bot: skip
Build-bot: skip
2025-12-03 13:20:20 +01:00
Darcy Wong
905c3a0239 cherrypick(common): Update FirstVoices versions in keyboards.csv 2025-12-03 16:39:02 +07:00
Keyman Server
22b21fdbce
Merge pull request #15271 from keymanapp/auto/version-stable-18.0-18.0.246
auto: increment stable-18.0 version to 18.0.246
2025-12-03 08:33:13 +01:00
Keyman Build Agent
1e3eebc4ca auto: increment stable-18.0 version to 18.0.246 2025-12-03 01:32:42 -06:00
Marc Durdin
27d8bb2cdd
Merge pull request #15219 from keymanapp/fix/windows/cherry-pick/8064-low-level-hook-watch-dog
fix(windows): reinstall low level keyboard hook if it gets removed 🍒 🏠
2025-11-28 10:49:08 +01:00
Marc Durdin
83251358b0 fix(windows): reinstall low level keyboard hook if it gets removed 🍒
This change improves the stability of Keyman for Windows by monitoring
the health of the low level keyboard hook. If keyman.exe is unresponsive
at any time, Windows can silently uninstall its low level keyboard hook,
which results in (at least) two problems:

* Keyman's hotkeys stop working
* A modifier key can become stuck, if it was pressed around the time
  Keyman became unresponsive.

The most common scenario in which Keyman can become unresponsive is high
system load, e.g. rendering graphics, videoconference calls, compiling
software.

Restarting Keyman always resolved both of these two issues in the past,
but with this patch, I hope that this will no longer be necessary.

A related 'fakefreeze' project is not included in this cherry-pick; see
PR #15179 for this.

Logging has been updated; look for "LowLevelHookWatchDog" in the log for
related events.

One final small change in keyman32.cpp, as I refactored the
WH_KEYBOARD_LL hook installation/uninstallation, was to always clear out
hook variables when uninstalling a hook, because if the hook fails to
uninstall, there's really nothing we can do about it anyway, and we
probably shouldn't be trying again.

Fixes: #8064
Cherry-pick-of: #15179
Test-bot: skip
Build-bot: skip
2025-11-21 16:00:28 +01:00
Marc Durdin
177d136598
Merge pull request #15195 from keymanapp/feat/windows/cherry-pick/15192-upgrade-wix-3-14-1
feat(windows): update wix to 3.14.1 🍒🏠
2025-11-20 11:08:15 +01:00
rc-swag
90469c8105 feat(windows): update wix to 3.14.1
Update the WiX toolset build version to 3.14.1 for Arm64.

Fixes: #15192
2025-11-20 10:22:44 +01:00
Eberhard Beilharz
756f71a25c
Merge pull request #15132 from keymanapp/chore/linux/changelog 2025-11-17 08:32:27 +01:00
Marc Durdin
1086c12c4e
Merge pull request #15175 from keymanapp/fix/windows/cherry-pick/14342-invalid-data-type-for-regkey
fix(windows): add check a fix for registry datatypes 🍒 🏠
2025-11-15 06:48:45 +01:00
rc-swag
b5b916abbf fix(windows): remove dead code 2025-11-15 05:43:27 +01:00
rc-swag
b04229efe5 fix(windows): free the correct object KeyboardToggleReg 2025-11-15 05:43:26 +01:00
rc-swag
5bf1f635a6 fix(windows): add check a fix for registry datatypes
Fixes: #14342
The Windows system level keyboard hotkeys controlled in
registry have sometimes been incorrectly written as
a DWORD datatype. There 106 events in sentry for just
July. When opening the Windows setting dialog and the registry
has DWORDS it will show unassinged in the dialog if apply
is pressed it will convert the keys to REG_SZ.
This fix follows a similar pattern it will check the data
type of the registry key if it is DWORD it will remove it
and add a new key of the same name as REG_SZ and set it to
the unassigned value.

Fixes: KEYMAN-WINDOWS-4NK
2025-11-15 05:43:25 +01:00
Eberhard Beilharz
9eeb6be695
chore(linux): Update debian changelog 2025-11-10 17:06:42 +01:00
Eberhard Beilharz
d7e160cc36
Merge pull request #14964 from keymanapp/chore/linux/changelog
chore(linux): Update debian changelog 🏠
2025-11-04 19:29:21 +01:00
Eberhard Beilharz
97d7266e31
Merge branch 'stable-18.0' into chore/linux/changelog 2025-11-03 14:44:57 +01:00
Marc Durdin
8362fb0e99
Merge pull request #15068 from keymanapp/maint/resources/npm-publish-use-v18-env-var
maint(resources): use VERSION_ENVIRONMENT var for v18 🏠
2025-11-03 05:19:06 +01:00
Marc Durdin
376b5fd612
Merge pull request #15081 from keymanapp/chore/18.0/vs2022
chore(windows): VS2022 patch for stable-18.0 🏠
2025-10-31 15:39:22 +01:00
Marc Durdin
d7b16aece9 chore(windows): upgrade VC++ projects to v143 (VS2022)
Test-bot: skip
Build-bot: skip release:developer,windows
2025-10-31 13:37:24 +01:00
Marc Durdin
f7d1b6ceb5 maint(resources): use VERSION_ENVIRONMENT var for v18
Follows: #15054
Build-bot: skip
Test-bot: skip
2025-10-31 11:36:32 +01:00
Keyman Server
b068e0af45
Merge pull request #15066 from keymanapp/auto/version-stable-18.0-18.0.245
auto: increment stable-18.0 version to 18.0.245
2025-10-31 07:39:26 +01:00
Keyman Build Agent
e2f5cbd9d7 auto: increment stable-18.0 version to 18.0.245 2025-10-31 01:38:44 -05:00
Marc Durdin
9a9f825119
Merge pull request #15057 from keymanapp/chore/developer/cherry-pick/11706-extra-debugging-redux-bksp
chore(developer): further debugging for assertion failure 🍒 🏠
2025-10-31 07:29:03 +01:00
Marc Durdin
c01637e358
Merge pull request #15059 from keymanapp/chore/developer/cherry-pick/11916-extra-debugging-crash-on-exit
chore(developer): add breadcrumbs to trace sporadic crashes on exit 🍒 🏠
2025-10-31 06:30:34 +01:00
Marc Durdin
7c5d6f704f chore(developer): add breadcrumbs to trace sporadic crashes on exit
Relates-to: #11916
Test-bot: skip
Cherry-pick-of: #15058
2025-10-30 15:02:42 +01:00
Marc Durdin
ec57939f4d chore(developer): further debugging for assertion failure
Adds breadcrumbs for debug memo to try and narrow down sequence of
events leading to assertion failure with backspace.

Relates-to: #11706
Test-bot: skip
Cherry-pick-of: #15056
2025-10-30 14:36:55 +01:00
Marc Durdin
82a8567845
Merge pull request #15054 from keymanapp/maint/resources/cherry-pick/npm-publish
maint(resources): move NPM package publishing to GitHub Actions 🍒 🏠
2025-10-30 10:55:44 +01:00
Marc Durdin
2af0faeb65 maint(resources): use older VERSION_GIT_TAG variable 2025-10-30 08:11:44 +01:00
Marc Durdin
96d836125a maint(resources): fixup includes for npm-publish.sh for 18.0 2025-10-30 07:46:52 +01:00
Marc Durdin
0653e10c25 chore: unix line endings and unused include 2025-10-30 07:41:00 +01:00
Marc Durdin
57a50ba7a1 maint(resources): cherry-pick changes to npm-publish scripts
This commit collects all changes to npm-publish.yml and npm-publish.sh,
from the series of PRs associated with PR #15029.
2025-10-30 07:11:41 +01:00
Marc Durdin
6449dfe2bf maint(resources): add repository record for all published packages
While not documented as such, it appears that the repository record is
required with trusted publishing of npm packages.

Cherry-pick-of: #15049
Build-bot: skip release:developer
2025-10-30 07:10:45 +01:00
Marc Durdin
1d8cc3afcd maint(developer): reduce coverage threshold for node 24 for dev-utils
I am not entirely clear why the coverage dropped, but I suspect it's due
to code paths that are not activated in node 24. For now, just dropping
coverage threshold to 40%.

Cherry-pick-of: #15042
2025-10-30 07:07:38 +01:00