Commit graph

2286 commits

Author SHA1 Message Date
Marc Durdin
efad936105 feat(common): add KMX+ file reader in Typescript
Add a KMX+ file reader and tests, including a round-trip builder:reader
test.

Move basic-17.txt, basic-19.txt, and basic.xml to common test resources
folder so they can be used by unit tests in common and developer.

Test-bot: skip
2026-03-16 07:21:38 +01:00
Marc Durdin
f3bab43e96
chore(developer): Apply suggestions from code review
Co-authored-by: Eberhard Beilharz <ermshiperete@users.noreply.github.com>
2025-12-01 11:15:58 +01:00
Marc Durdin
56cdf428ea feat(developer): make shared constants tree-shakable
In order to avoid embedding unused tables of constants into KeymanWeb,
we need to make their declarations pure.

https://esbuild.github.io/api/#tree-shaking-and-side-effects
2025-11-28 10:45:34 +01:00
Marc Durdin
12b77a5a78 feat(developer): convert .kvk into KMX+ and embed into .kmx
Implement the conversion from .kvk into KMX+ format, and embed the
result into the .kmx file. This change does not yet support &displaymap.

Move some virtual key modifier state helpers out of
visual-keyboard-compiler.ts and into shared module
modifier-key-constants.ts.

This change also flags the need to update the package compiler to
rewrite the font metadata into the KMX+ tables.

Test-bot: skip
2025-11-25 11:59:34 +01:00
Marc Durdin
cecc518db0
Update common/web/types/src/consts/modifier-key-constants.ts
Co-authored-by: Eberhard Beilharz <ermshiperete@users.noreply.github.com>
2025-11-21 14:45:29 +01:00
Marc Durdin
f11803651d refactor(developer): pass extra data from kmcmplib and move helpers for embed
Move some modifier key conversion utilities to a shared unit and also
add touchLayoutFilename and targetVersion to the kmcmplib extra data,
in preparation for generating and embedding OSK data.

Test-bot: skip
2025-11-20 10:47:55 +01:00
Marc Durdin
a53a1593ec feat(common): add v19 sections to KMX+ in Core and Developer
The disp and layr sections have new v19 layouts, to support the Keyman
OSK requirements for epic/embed-osk-in-kmx. This supports writing the
new versions of these sections in Developer and loading them into Core,
doing transformations where necessary so that Core always works with v19
structures after load.

This does not implement the transformations required to support the OSK
APIs; that will be implemented in a follow-up PR. Nor is support for
writing the OSK data from source .kvks and .keyman-touch-layout
supported; this is just the scaffolding for supporting the structures in
the KMX+ data.

Test-bot: skip
2025-11-18 13:55:01 +01:00
Marc Durdin
fc0ff90684 refactor(developer): rename layr.lists to layr.forms
The name `form` better represents the semantic meaning of the
structure, and reduces confusion with the `list` section and other uses
of `list` in KMX+.

Test-bot: skip
2025-11-12 11:29:58 +01:00
Keyman Server
b7c93d9e37
Merge branch 'epic/embed-osk-in-kmx' into auto/A19S15-merge-master-into-embed-osk-in-kmx 2025-11-07 14:06:33 +01:00
Marc Durdin
df212364a2 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.

Test-bot: skip
Build-bot: skip
2025-10-29 14:35:31 +01:00
Marc Durdin
ba411774f6 maint(resources): move NPM package publishing to GitHub Actions
Due to recent changes in NPM package publishing security requirements,
we have to move from TeamCity build to a GitHub Action to publish our
NPM packages, so we can take advantage of trusted publishing. This
change also consolidates and centralizes the npm publishing into
resources/build/ci/npm-publish.sh, which removes a lot of boilerplate
from each of the build.sh scripts, and ensures consistency.

Packages will be `npm pack`ed on PR and test builds, and published in
release builds.

Ref: https://docs.npmjs.com/trusted-publishers
Ref: https://github.blog/changelog/2025-09-29-strengthening-npm-security-important-changes-to-authentication-and-token-management/
Fixes: #14963
Test-bot: skip
Build-bot: release:developer
2025-10-27 16:31:55 +01:00
Marc Durdin
83b6247139
Update common/web/types/src/kmx/kmx.ts 2025-10-23 13:32:57 +02:00
Marc Durdin
e3fbe510e7
Merge branch 'feat/core/add-kmx-plus-version-header' into feat/developer/add-targetversion-parameter 2025-10-22 15:08:38 +02:00
Marc Durdin
0227b277f0
Merge branch 'refactor/common/consolidate-kmx-plus-header-struct' into feat/developer/add-kmx-plus-version-header 2025-10-22 15:08:22 +02:00
Marc Durdin
95a5bcc362
Merge branch 'epic/embed-osk-in-kmx' into refactor/common/consolidate-kmx-plus-header-struct 2025-10-22 15:08:07 +02:00
Marc Durdin
f16545380a docs(common): clarify usage of KMXPlus structures
Build-bot: skip
2025-10-22 14:32:30 +02:00
Marc Durdin
8d74d2c8a6 feat(developer): add targetVersion support to kmc and kmc-kmn
Make the target version parameter for kmc-ldml into a generic build
parameter, so we can use it for any compiler. Add support and tests
to kmc-kmn, kmcmplib, kmc-ldml, kmc.

Support not yet in place for lexical models, or packages. However,
packages will be picking up the min version from the embedded keyboards.
Lexical models need work on minimum version support before this can be
implemented there.
2025-10-22 05:48:24 +02:00
Marc Durdin
693c741884 feat(common): add version header to KMX+ Typescript modules
Add support for header.version to KMX+ files, with differentiation
between v17 and v19 in the compiler, and associated tests. This does not
yet make the target version accessible to authors using `kmc`, but the
interfaces from `kmc-ldml` are available.

A v17 KMX+ file will have:
* comp_header.version = VERSION_17
* initial 'sect' section in KMX+ data
* no sect.header.version field in any section

A v19+ KMX+ file will have:
* comp_header.version = VERSION_19
* initial 'sec2' section in KMX+ data
* sect.header.version field for all sections
* each section 4 bytes larger to accommodate
* 'sec2' must have sect.header.version = KMXPlusVersion.Version19
* currently all other sections have sect.header.version = Version17
2025-10-17 11:23:09 +02:00
Marc Durdin
b4bb07ecc4 refactor(common): consolidate header struct to kmx-plus-file.ts
Consolidate the header structure in KMX+ to make it easier to add a
version value to the header for v19+ KMX+ files; also DRYs out the
header definitions a little.
2025-10-17 08:46:53 +02:00
Marc Durdin
1f8c6fbf58
Merge branch 'epic/embed-osk-in-kmx' into feat/common/add-osk-embed-support-to-kmx-plus 2025-10-16 12:46:07 +02:00
Marc Durdin
9406e16294 refactor(common): split KMX+ binary format from in-memory representation
Split kmx-plus.ts into two files, so that the in-memory parsed
representation of the file can be maintained separately from the binary
structures, which need to maintain version metadata.

This refactor makes no functional changes.

Test-bot: skip
Build-bot: build
2025-10-15 10:21:17 +02:00
Marc Durdin
fd17bb5f81
Merge pull request #14869 from keymanapp/feat/common/kmx-plus-osk-flag-in-header
feat(common): add KF_KMXPLUSOSK and VERSION_190 to kmx_file.h 🔱
2025-10-13 14:43:54 +02:00
Eberhard Beilharz
34c43b1e15
refactor(web): cleanup in test scripts
Also use common function for running web types tests.

Test-bot: skip
2025-09-30 17:40:15 +02:00
Marc Durdin
49846fea2d feat(common): add KF_KMXPLUSOSK and VERSION_190 to kmx_file.h
Add version 19.0 flags and metadata relating to embed-osk-in-kmx to
kmx_file.h and corresponding headers for other languages.

Test-bot: skip
2025-09-30 14:51:40 +02:00
Marc Durdin
81c807c257 chore(common): Merge branch 'master' into maint/common/14453-move-ci-scripts 2025-08-19 10:46:11 +02:00
Joshua Horton
e24deefdb8 fix(web): improve typing accuracy for suggestions & suggestion-generation
Also adds doc-comments to a couple of the related types
2025-08-13 10:27:13 -05:00
Marc Durdin
f3fb3ac87b maint(common): move build-utils-ci.inc.sh to ci/ci-publish.inc.sh
Removes a number of unused functions from the file, renames remaining
functions to match our builder script prefix patterns, removes unused
imports from various build scripts (e.g. Android).

Fixes: #14453
2025-08-05 12:54:56 +10:00
Marc Durdin
2726050601 maint(common): rename and move node-related script functions into node.inc.sh
Consolidates the node-related script functions into node.inc.sh, as part
of cleaning up the build scripts and making them easier to maintain into
the future.

Fixes: #14447
2025-08-02 13:34:29 +10:00
Marc Durdin
f394245636 maint(common): consolidate builder scripts
Clarifies the confusing builder.inc.sh / build-utils.sh distinction by
giving the scripts more appropriate names. Most build scripts should use
builder-full.inc.sh; some helper scripts can use builder-basic.inc.sh.
Documented in resources/build/README.md.

Renames:
* resources/build/builder.inc.sh to resources/build/builder-full.inc.sh
* resources/build/build-utils.sh to resources/build/builder-basic.inc.sh

Other changes:
* Moves Android-specific functions out of builder-basic.inc.sh and into
  android/build.sh.
* Renames functions in builder-basic.inc.sh

More functions may be moved from builder-basic.inc.sh into utils.inc.sh
or other scripts in the future.

Fixes: #14065
Build-bot: build all
Test-bot: skip
2025-08-02 08:11:24 +10:00
Marc Durdin
65158a0526 maint(common): rename shellHelperFunctions.sh to utils.inc.sh
Adds documentation for various functions, removes unused functions (a
couple of simple, very lightly used functions were unDRYed; these could
go back the other way across all shell scripts if necessary). TODO items
noted for follow-up refactoring.

Fixes: #14275
Relates-to: #14269
Build-bot: build all
Test-bot: skip
2025-08-02 06:58:40 +10:00
Steven R. Loomis
c8ab945348 chore(common): clarify docs on boxXmlArray
- not related to #14117 but mention o[x] instead of o.x in jsdocs
2025-06-26 15:58:47 -05:00
Steven R. Loomis
0a35181bed chore(developer): rename x: to compileContext:
Fixes: #14117
2025-06-26 15:58:43 -05:00
Steven R. Loomis
7a741dc9d0 chore(developer): ldml: additional line numbers
- ajv validation
- more fixes from out of box testing

Fixes: #14099
2025-06-02 16:30:29 -05:00
Steven R. Loomis
fab29aad77 feat(developer): ldml: update errors for unparseable reorder
Fixes: #14091
2025-06-02 08:52:00 -05:00
Steven R. Loomis
e1638ad458 feat(comon): ldml: test fix for element strings with context
Fixes: #13937
2025-05-31 07:46:11 -05:00
Steven R. Loomis
9d0d34bf09 feat(developer): ldml: list compiler: add context to lists. vars, markers, usets...
- update several messages and the substitution tracker to take context

Fixes: #13935
2025-05-30 14:34:40 -05:00
Steven R. Loomis
8662acc46d feat(developer): ldml: list compiler: add context to lists
add contexts to lists and elements and uset

Fixes: #13935
2025-05-30 12:55:57 -05:00
Steven R. Loomis
db24750bd3 feat(developer): update strs compiler to collect context
- default state needs to be null not undefined

For: #13932
2025-05-28 20:17:45 -05:00
Steven R. Loomis
633f9551c7 feat(developer): update strs compiler to collect context
- attempt to find an object with a context

For: #13932
2025-05-28 20:17:44 -05:00
Marc Durdin
9f15e7c7ec maint: add empty 'scripts' tag to package.json to silence warning
Also removes './' from front of gosh.js to address another npm cleanup
(from `npm pkg fix`).

Fixes: #13833
2025-05-25 06:35:28 +07:00
Joshua Horton
155c1a2b12 maint: update mocha
Some of the npm audit warnings left after #13897 require an updated `mocha` version to remedy.  As we only really use `mocha` to do unit-testing, it should be safe to update if all of our existing tests pass with the new version.

Test-bot: skip
2025-05-13 14:02:02 +07:00
Eberhard Beilharz
4d81589f48
maint(common): use unique names for Keyman version variables
Previously the builder scripts defined a readonly `VERSION` environment
variable for the Keyman version. That caused problems when another
(external) script tried to define a `VERSION` variable. We encountered
this problem when trying to move the TC build steps of a configuration
into a single script (#13399) when we tried to source `~/.nvm/nvm.sh`.

This change uses a Keyman specific prefix for the version variables and
renames `VERSION` → `KEYMAN_VERSION` etc. Unfortunately these variables
are used in a lot of places, so this turned out to be a bit of a yak
shave.

Test-bot: skip
2025-05-07 18:46:51 +02:00
Eberhard Beilharz
af1f2629dd
maint(common): use function to detect if running on TC
This change makes use of the new builder script function to detect if
the script is running on TeamCity.
2025-05-06 17:42:25 +02:00
Joshua Horton
e382bf45ce
Merge pull request #13785 from keymanapp/change/web/drop-usvstring-alias
change(web): replace USVString with string in predictive-text engine
2025-05-06 08:16:28 +07:00
Joshua Horton
e328aa03f7 chore(common): address common/web/types linter issues 2025-04-30 12:34:14 +07:00
Joshua Horton
2011d117d6 chore(developer): finalize activation of prefer-const within developer TS modules 2025-04-30 09:41:07 +07:00
Joshua Horton
e601d59b59 change(web): replace USVString with string in predictive-text engine
Fixes: #12046

It was only ever an alias (for `string`!) for its intended use, with actual `USVString` typing being unavailable in the browser.
2025-04-29 10:47:20 +07:00
Steven R. Loomis
b59bb6d4de feat(developer): serialize KMXPlus into XML 🍒
Cherry pick of #12969
> feat(developer): serialize KMXPlus (back) into XML 🗼

(cherry picked from commit f93c45c9e8 #12969)

Fixes: #12874
2025-02-10 12:12:12 -06:00
Dr Mark C. Sinclair
6ead43b899
Merge pull request #13122 from keymanapp/fix/common/web/types/12945-replace-invalid-StrsItem-identity-checks-with-isEqual
fix(common/web): replace invalid StrsItem identity checks with isEqual()
2025-02-04 11:20:53 +00:00
Dr Mark C. Sinclair
6d060df601 fix(common/web): add two test cases for Strs.allocString() 2025-02-03 15:02:05 +00:00