Commit graph

1249 commits

Author SHA1 Message Date
Marc Durdin
729c71d64d chore: minor cleanup prior to merge of web-core preflight
Some checks failed
Keyman Build Summary / Summarize build status checks (push) Has been cancelled
2026-05-28 14:16:19 +02:00
Marc Durdin
39fba5e29c chore(core): fixup const cast 2026-05-27 15:17:48 +02:00
Marc Durdin
6a98a39b8a
Merge branch 'master' into chore/web-core-preflight 2026-05-27 22:37:12 +10:00
rc-swag
4e4dfe7275 fix(windows): add cstring include to action.cpp
Some checks failed
Keyman Build Summary / Summarize build status checks (push) Has been cancelled
2026-05-19 14:01:06 +10:00
rc-swag
3b6e0a8da1 fix(windows): add comment to capture issue in test code
Some checks are pending
Keyman Build Summary / Summarize build status checks (push) Waiting to run
2026-05-18 21:18:25 +10:00
rc-swag
29b12ba42e fix(core): fix memory leak in state_api test
Some checks are pending
Keyman Build Summary / Summarize build status checks (push) Waiting to run
2026-05-18 14:10:22 +10:00
rc-swag
c0a29a32f7 fix(core): remove white space and comments
Some checks failed
Keyman Build Summary / Summarize build status checks (push) Has been cancelled
2026-05-14 16:28:59 +10:00
rc-swag
3c0e7a72c1 fix(core): update unit tests 2026-05-14 15:58:12 +10:00
rc-swag
33cddff16e fix(windows): deep copy for state object
This commit update the state object to have a deep copy for the
action_struct member. The tests have been modified but have
a few issues however this branch is out of date with the refacted
master branch for unit tests. This commit gets the main change in
a future commit will update the tests.
2026-05-12 18:03:46 +10:00
rc-swag
bd1e404ae4
Merge branch 'master' into fix/windows/15857/caps-indicator-switched-off-select
Some checks failed
Keyman Build Summary / Summarize build status checks (push) Has been cancelled
2026-05-06 10:47:24 +10:00
rc-swag
28d2c98030 fix(windows): rename local variable no actions
Some checks failed
Keyman Build Summary / Summarize build status checks (push) Has been cancelled
2026-04-27 10:39:34 +10:00
rc-swag
874c2509b0 fix(windows): initialise action object in contructor
Some checks failed
Keyman Build Summary / Summarize build status checks (push) Has been cancelled
2026-04-24 10:40:45 +10:00
rc-swag
986ee97cb3 fix(windows): add apply actions call to core_event
add apply_actions_and_merge_app_context to km_core_event parent.
This ensures any actions as result of the km_core_event are applied
and actions object updated.

Fixes:#15857
2026-04-23 15:04:51 +10:00
Marc Durdin
a5c09f40a1 chore(core): fixup test keyboard paths 2026-03-27 10:52:34 +01:00
Marc Durdin
8311c65077
Merge branch 'epic/web-core' into auto/A19S25-merge-master-into-web-core 2026-03-27 16:30:55 +11:00
Eberhard Beilharz
3816077d0a
Merge pull request #15609 from keymanapp/fix/core/15569_ldml
fix(core): fix keydown/up handling for LDML keyboards

For LDML keyboards this change fixes the `emit_keystroke` flag so that it always has the same value for the KeyDown and the KeyUp event. This fixes some problems with stuck keys. Previously we would set `emit_keystroke=TRUE` on KeyDown but `emit_keystroke=FALSE` on KeyUp for frame keys. This caused Linux to never see the KeyUp event, resulting in a stuck key.

Also add unit tests that verifies that the actions that we get after calling `km_core_process_event` are what we expect.

Follows: #15656 
Fixes: #15569
Fixes: #15550
2026-03-25 11:20:11 +01:00
Eberhard Beilharz
aa36cfe961
fix(core): address code review comments
Some checks failed
Keyman Build Summary / Summarize build status checks (push) Has been cancelled
2026-03-24 12:43:11 +01:00
Marc Durdin
70c54b0b40 chore: Merge branch 'epic/web-core' into auto/A19S24-merge-master-into-web-core
Some checks are pending
Keyman Build Summary / Summarize build status checks (push) Waiting to run
2026-03-16 04:49:38 +01:00
Eberhard Beilharz
1c5dbe8caf
docs(core): improve keyhandling doc
This improves the keyhandling doc according to the code review suggestions
in #15629.

Follows: #15629
Build-bot: skip
Test-bot: skip
2026-03-12 18:15:09 +01:00
Eberhard Beilharz
87da33796a
Merge pull request #15656 from keymanapp/refactor/core/cleanup
refactor(core): cleanup 

- fix whitespace
- rename private fields of `ldml_processor` to start with underscore

Precedes: #15609
2026-03-04 15:27:47 +01:00
Eberhard Beilharz
9836070299
fix(core): clarify and extend comment 2026-03-02 17:43:34 +01:00
Eberhard Beilharz
67468c4dce
fix(core): address code review comments
Co-authored-by: Marc Durdin <marc@durdin.net>
2026-03-02 17:28:19 +01:00
Eberhard Beilharz
382b5d45e3
fix(core): fix keydown/up handling for LDML keyboards
For LDML keyboards this change fixes the `emit_key` flag so that it has
the same value for the KeyDown and the KeyUp event. This fixes some
problems with stuck keys. Previously we would set `emit_key=TRUE` on
KeyDown but `emit_key=FALSE` on KeyUp for frame keys. This caused Linux
to never see the KeyUp event, resulting in a stuck key.

Also add unit tests that verifies that the actions that we get after
calling `km_core_process_event` are what we expect.

Fixes: #15569
Fixes: #15550
2026-03-02 17:27:36 +01:00
Eberhard Beilharz
2bd6cfd735
refactor(core): rename fields to start with underscore
Test-bot: skip
2026-03-02 17:27:15 +01:00
Eberhard Beilharz
d8a5f694da
refactor(core): fix whitespace
Build-bot: skip
Test-bot: skip
2026-03-02 17:26:14 +01:00
Eberhard Beilharz
3c525cc244
chore: Merge branch 'epic/web-core' into auto/A19S23-merge-master-into-web-core 2026-02-27 10:19:18 +01:00
Eberhard Beilharz
f07f95452f
docs(core): add keyhandling doc
This documents the state of `km_core_actions.emit_keystroke` for
different keys pressed. Also some cleanup in other docs.

This documents the state after merging #15609 (for ldml keyboards) and
NN (for kmn keyboards).

Follows: #15609
Build-bot: skip
Test-bot: skip
2026-02-25 19:31:00 +01:00
Eberhard Beilharz
2237db95f6
test(core): add LDML baseline test with minimal keyboard
This replaces and enables the commented `k_000_null_keyboard` test which
didn't work because keys that are not on any layer don't produce output.
This instead defines a minimal keyboard with just two keys and then tests
typing a key that is on the keyboard followed by a key not on the keyboard.

Test-bot: skip
2026-02-20 12:09:08 +01:00
Eberhard Beilharz
b405bf5842
refactor(core): simplify loop for removing text
Instead of using an iterator to loop over the context items, incrementing
a counter on each iteration, and then finally removing the calculated
number of context items from the list, this change loops through the list
and looks at the last context item, removing it if necessary.

Follows: #15596
Test-bot: skip
2026-02-18 17:34:02 +01:00
Eberhard Beilharz
df2b675202
fix(core): changed ldml tests to use context list instead of vector
Production code uses a list of context items, so this change modifies
the tests to also use a list instead of a vector to more closely match
production code.

Addresses code review comment.

Test-bot: skip
2026-02-18 16:08:59 +01:00
Eberhard Beilharz
32bb1c8502
fix(core): fix iterator in backspace handling
This change replaces the reverse iterator loop that holds a stale iterator
across `pop_back()` calls with a pattern that directly accesses
`context.back()` on each iteration. This avoids undefined behavior from
iterator invalidation when mutating the list or vector.

While so far the previous code didn't show problems, it might still access
released memory depending on the implementation. The documentation for
`pop_back()` says "References and iterators to the erased element are
invalidated", so the previous implementation was clearly wrong.

Test-bot: skip
2026-02-18 15:58:45 +01:00
Eberhard Beilharz
1b4a04a35a
Merge pull request #15590 from keymanapp/chore/core/docs
chore(core): update API `changes.md` document 🎼

Turns out we have a document for the API changes, in addition to the release notes. That document got overlooked so far. This change now updates that doc with the API changes that happened since v17.

Follow-up-of: #15471
Follow-up-of: #12769
2026-02-16 10:32:08 +01:00
Marc Durdin
90f77bdbd6
Merge pull request #15589 from keymanapp/auto/A19S22-merge-master-into-web-core
auto: A19S22 merge master into web-core 🎼
2026-02-13 18:28:40 +07:00
Eberhard Beilharz
0af3a2a89d
chore(core): update API changes.md document
Turns out we have a document for the API changes, in addition to the
release notes. That document got overlooked so far. This change now
updates that doc with the API changes that happened since v17.

Build-bot: skip
Test-bot: skip
Follow-up-of: #15471
Follow-up-of: #12769
2026-02-13 12:08:35 +01:00
Marc Durdin
ed63b70bb4
Merge branch 'epic/web-core' into auto/A19S22-merge-master-into-web-core 2026-02-13 11:08:05 +07:00
Marc Durdin
74d1bc8fc2 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-01 06:47:49 +11:00
Marc Durdin
766c6992ed 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
Relates-to: CLDR-19218
2026-01-28 14:32:25 +11:00
Marc Durdin
033e3eeb3f docs(core): add comments post review
Co-authored-by: srl295@gmail.com
2026-01-27 10:50:26 +11:00
Marc Durdin
f7cd0c41ba 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.

Fixes: #15487
2026-01-25 07:24:15 +11:00
Eberhard Beilharz
de49944aa7
chore(web): remove keyboard_attributes._folder_path 2026-01-21 18:27:37 +01:00
Eberhard Beilharz
0422b3f912
chore(core): Remove km_core_keyboard_attrs.folder_path
PR #12769 removed `km_core_keyboard_load` that allowed loading a keyboard
from a path. Instead we now pass a BLOB to core to load a keyboard.
With the function gone there is no longer a need to have a field with the
path.

Follow-up-of: #12497
Related-to: #12769
Test-bot: skip
2026-01-20 15:17:38 +01:00
Eberhard Beilharz
f7f23df040
Merge branch 'epic/web-core' into feat/core/optionsupdate 2026-01-20 11:42:14 +01:00
Eberhard Beilharz
83dca0f779
feat(core): address code review comments
Test-bot: skip
2026-01-19 16:28:52 +01:00
Marc Durdin
f6b8bfb463
Merge branch 'epic/web-core' into auto/A19S20-merge-master-into-web-core 2026-01-16 08:40:12 +01:00
Eberhard Beilharz
9909d7d901
feat(core): expose km_core_state_options_update to WASM
Part-of: #13426
Test-bot: skip
2026-01-15 12:28:56 +01:00
Eberhard Beilharz
a329ef967d
Update core/tests/unit/kmx/README.md
Co-authored-by: Marc Durdin <marc@durdin.net>
2026-01-15 12:05:25 +01:00
Eberhard Beilharz
b339a9772c
docs(common): improve documentation for .kmn test files
Build-bot: skip
Test-bot: skip
2026-01-14 18:16:57 +01:00
Eberhard Beilharz
afe6f467e3
Merge branch 'epic/web-core' into test/web/problem 2026-01-07 11:37:49 +01:00
Eberhard Beilharz
f65a752b47
test(web): address code review comments 2026-01-06 18:19:07 +01:00
Marc Durdin
484acff8e8
Merge pull request #15353 from keymanapp/maint/win/15065-arm64-core-test
maint(windows): add GitHub Action for ARM64 test for Keyman Core 🦾
2025-12-16 18:49:57 +01:00