Commit graph

5162 commits

Author SHA1 Message Date
Marc Durdin
306934eb62 fix(developer): kmc-package support for keyboard metadata
Fixes #9208.
Fixes #9209.
Fixes #9203.
Fixes #9198.

The changes here overlap in kmp-compiler.ts. Addresses several issues
with the package compiler:

* refactors the reading of the metadata from keyboards to make use of it
  when refreshing the keyboard metadata in kmp.json (#9208). This is the
  bulk of the changes.
* Fixes case on some fields in the kps file format (#9209)
* Removes code which emitted strings table to kmp.json, as these were
  only ever used for package installer executables (#9203)
* Cleans up code which emitted Start Menu items to make it match spec
  (#9198)
2023-07-06 13:49:04 +07:00
Joshua A. Horton
f21d8183ed chore(web): right, a sourceRoot would help sentry-manager 2023-07-06 12:27:53 +07:00
Joshua A. Horton
d47433da56 chore(web): normalizes srcMap paths for cleaner Sentry reports 2023-07-06 10:51:40 +07:00
Steven R. Loomis
1bea614fd5 chore(common): improve coverage, fix todos 🙀
- remove SectionCompiler.required as unused
- minor fixes to common setSplitter
- add edge case tests

for: #8069
2023-07-05 15:48:12 -05:00
Marc Durdin
413e32f389 fix(developer): strip pure whitespace from key text in kvks reader
Fixes #9184.

kmcomp was unable to track pure whitespace in .kvks files. To match this
behaviour, we should strip pure space whitespace from key element values
in .kvks files only.
2023-07-05 10:19:46 +07:00
Marc Durdin
7ac6bfc189 fix(developer): kmc - support bitmap field in .kvk/kvks files
Fixes #9180.
2023-07-05 09:45:59 +07:00
Marc Durdin
c11393b834 fix(developer): strip default values when compiling touch layout
Fixes #9178.

The values `pad`, `width`, and `hint` should not be emitted in a
compiled touch layout file, if they have default values of `0`, `0`,
or `""`, respectively. This matches the legacy kmcomp pattern.
2023-07-05 09:40:08 +07:00
Marc Durdin
1a06133d9d fix(developer): vk constants requires K_oDF and K_?C1
Fixes #9177.

Some imported visual keyboards include `K_oDF` or `K_?C1` key codes.
These are not made visible in the UI but as they are "valid" VK codes,
they should not cause an error.
2023-07-05 09:37:41 +07:00
Steven R. Loomis
8cd846f298 fix(common): support multichar escapes in element sets 🙀
- \u{22 0127} acts like \u{22}\u{0127}

for: #7377
2023-07-04 12:47:58 -05:00
Steven R. Loomis
52b8dfb205 feat(common): preflighting on uset 🙀
- update docs on UnicodeSet
- uset parser: fix/clarify that the wasm interface takes a bufferSize, but the ts interface takes a range count. This was muddled before.

For: #7377
2023-07-04 10:26:50 -05:00
Marc Durdin
70f7c1634d fix(developer): kvks file reader needs to handle bitmaps
Fixes #9159.

If a key contains a bitmap, then ignore the text for the key.
2023-07-04 14:46:51 +07:00
Marc Durdin
d2acfdec5c fix(developer): improve kmcmplib/kmw compiler performance
Fixes #9154.

Improves performance in both kmcmplib and in kmc-kmn/kmw-compiler. After
these changes are applied, vietnamese_telex keyboard builds in around 6
seconds on my machine (down from over 2 minutes). This is certainly only
the surface of performance improvements we could make.

Addresses excessive memory reallocations in kmcmplib, by reallocating
store and key arrays in large chunks of 100 items rather than
reallocating on each new item added. This resulted in a 250x speed-up on
functions such as `AddStore` in WASM build.

Some careful modulus arithmetic was needed for resizing the key array,
which can be grown in larger increments.

Resolved excessive zeroing out of destination buffer in u16ncpy, which
was being called with an 8kb destination buffer on every line of the
file.

In the kmw side, vast majority of the performance cost was in copying of
buffers while loading a .kmx into memory, rather than creating views
into the memory. Essentially replaced this pattern:

```
return this.rString.fromBuffer(source.slice(offset));
```

with:

```
const data = new Uint8Array(source.buffer, source.byteOffset + offset);
return this.rString.fromBuffer(data);
```
2023-07-04 14:36:25 +07:00
Marc Durdin
9dacaaac4e fix(developer): kmc-kmn/kmw should add/delete certain fields in touch layout when writing
Fixes #9160.

To match the behaviour of kmcomp, kmc should add/delete the following
fields when writing out a kmw touch layout:

* `platform.displayUnderlying` flag is always emitted by kmcomp, so kmc
  should always emit it too.
* `platform.font` and `platform.fontsize` should be eliminated if empty
  string
* `key.id` should be eliminated if empty string
2023-07-04 14:29:19 +07:00
Steven R. Loomis
0f0c1e5e61 feat(common): preflighting on uset 🙀
- allow uset to preflight (calculate # of ranges)

For: #7377
2023-07-03 18:48:48 -05:00
Steven R. Loomis
a6dcf4dfce
Apply suggestions from code review
Co-authored-by: Marc Durdin <marc@durdin.net>
2023-07-03 18:20:20 -05:00
Steven R. Loomis
a25d3819d1 Merge remote-tracking branch 'upstream/master' into feat/developer-7377-reorder-uset 2023-07-03 18:09:22 -05:00
Steven R. Loomis
3ecf8da917
Apply suggestions from code review
Co-authored-by: Marc Durdin <marc@durdin.net>
2023-07-03 18:08:25 -05:00
Marc Durdin
33affc660f fix(common): legacy .kpj schema
Fixes #9140.
Fixes #9148.

Keyman Developer 9.0 .kpj files included a lot of additional state
metadata. We need a schema which validates these files, as they are
otherwise valid to load (we'll never save them any more). Rather than
add all the extra metadata to what is otherwise a fairly clean schema,
we'll provide a legacy .schema.json.

In the future, we may be able to merge these schemas, as we move towards
the .kpj 2.0 format which doesn't list files. Ideally, all three formats
(Keyman Developer 9.0 schema, call it legacy, 1.0 schema for Keyman
Developer 10.0+ which has Options and Files listed, 2.0 schema for
capturing just project settings for a folder) will be supported by a
single schema file.
2023-07-03 09:06:03 +07:00
Steven R. Loomis
88650e2085 feat(developer): uset in element string 🙀
- fix uset builder and other missing uset parts
- basic.xml passes
- update to constants

Fixes: #7377
2023-06-30 17:27:04 -05:00
Steven R. Loomis
5d5b61cd0a feat(developer): uset in element string 🙀
- update element string constructors to support UnicodeString and the segmented array from ElementParser
- update compiler machinery to pass USetParser in the DependencySections
- test cases

#7377
2023-06-30 15:56:45 -05:00
Steven R. Loomis
067c0b2f67 feat(common): unescaper / element updates for uset 🙀
- add unescaper for quad string (\u0127)

#7377
2023-06-30 15:50:38 -05:00
Steven R. Loomis
3d6af245de feat(common): add segmenter for element strings 🙀
- detect and reject nested square brackets, for now
- implement segmentation of reorder element strings,
  including type identification (escape, codepoint, uset)
- tests

For #7377
2023-06-30 08:49:07 -05:00
Joshua Horton
2a62e3cecf
Merge pull request #9128 from keymanapp/chore/web/rework-touchpath-turtle
chore(web): touchpath-turtle rework 🐵
2023-06-30 11:58:21 +07:00
Joshua Horton
8f8d31c265
Merge pull request #9127 from keymanapp/refactor/web/headless-input-tracking
refactor(web): all gesture-oriented input control flows now have a headless form 🐵
2023-06-30 11:58:12 +07:00
Joshua Horton
951ef90157
Merge pull request #9126 from keymanapp/chore/web/sample-gesture-recording-end
fix(web): touchpath recordings always sample end of path, even when stationary 🐵
2023-06-30 11:58:05 +07:00
Joshua Horton
883f9575e6
Merge pull request #9122 from keymanapp/feat/web/hovered-item-tracking
change(web): tracking for 'initial' and 'current' UI item per touchpoint 🐵
2023-06-30 11:57:58 +07:00
Joshua Horton
08f761c90f
Merge pull request #9067 from keymanapp/chore/web/disconnect-subsegmentation
chore(web): disconnects the gesture-oriented touchpath-subsegmentation engine 🐵
2023-06-30 11:57:50 +07:00
Joshua Horton
768a4e7cbd
Merge pull request #9066 from keymanapp/chore/web/gesture-source-reorg
chore(web): feature-gesture reorganization 🐵
2023-06-30 11:57:40 +07:00
Joshua A. Horton
08e583adad fix(web): previously-missed post-rebase corrections 2023-06-30 09:01:43 +07:00
Marc Durdin
d021526e38 fix(common): give friendly error when .kvks is in binary format
Fixes #9124.
2023-06-30 08:43:01 +07:00
Marc Durdin
56da64796f fix(common): specify alignment for COMP_ structs
When we read .kmx files, they have no alignment guarantees, so we need
to tell the compiler to generate unaligned-safe code for accesses to
`COMP_` structure members, because typically we point into the buffer
and read at any offset.

A .kmx file will generally be 2-byte aligned, as there are no structures
or data types with smaller than 2 byte widths. There is no requirement
that this be the case per the .kmx spec, though. So we use a 1 byte
alignment attribute for the compiler, so it will generate safe code when
reading these structs.

Note that we are assuming that `COMP_KEYBOARD` is aligned because it is
always the start of the file, so will be at the start of any buffer
which will automatically be aligned correctly.

We should probably review some of our design decisions and structs for
KMXPlus given this.
2023-06-30 08:29:20 +07:00
Joshua A. Horton
4def47a5cc feat(web): touchpath turtle now supports 'hovered item' emulation 2023-06-29 15:56:02 +07:00
Joshua A. Horton
a1dc6fde9f chore(web): simplifies TouchpathTurtle, adds sample-path tracking 2023-06-29 15:50:20 +07:00
Joshua A. Horton
1be864c1ff chore(web): drops mocked-subsegmentation / segment-construction unit tests 2023-06-29 15:49:34 +07:00
Joshua A. Horton
d4f6d5a9c3 feat(web): headless test-sequence playback now InputEngine based 2023-06-29 14:27:57 +07:00
Joshua A. Horton
327a9271a5 refactor(web): fully headless TrackedInput, top-level class equivalent 2023-06-29 14:26:35 +07:00
Joshua A. Horton
a7e2c7aa32 chore(web): now always samples end of touchpath sequence, even if was stationary 2023-06-29 14:23:24 +07:00
Joshua A. Horton
3fbd59d59d chore(web): build.sh configure fix 2023-06-29 14:22:43 +07:00
Joshua A. Horton
d7a642e610 change(web): moves tagged HoveredItem onto InputSample 2023-06-29 14:22:08 +07:00
Joshua A. Horton
d983f4afa8 chore(web): Merge branch 'chore/web/disconnect-subsegmentation' into feat/web/hovered-item-tracking 2023-06-29 09:20:23 +07:00
Joshua A. Horton
c43f8371a5 docs(web): notes a test component that's subsegmentation-only 2023-06-29 09:20:04 +07:00
Joshua A. Horton
a976d970ab feat(web): right, currentHoveredItem 2023-06-28 15:46:40 +07:00
Joshua A. Horton
ac7d09e331 feat(web): tracking of TrackedPoint initial and current 'hovered item'
Includes related abstraction; also makes TrackedPoint headless-friendly
2023-06-28 15:17:08 +07:00
Joshua A. Horton
aff62134b6 change(web): deserialization constructors changed to static class methods 2023-06-28 14:59:29 +07:00
Marc Durdin
6027360544 fix(developer): handle empty File Details in package reader
Fixes #9109.
2023-06-28 07:27:42 +07:00
Steven R. Loomis
fbf6005bc4
Merge pull request #9084 from keymanapp/feat/developer-9050-utf32-epic-ldml
feat(developer,common,core): ldml UTF-32 literals in binary 🙀
2023-06-26 20:33:27 -05:00
Steven R. Loomis
30c4a89149 feat(developer): improve fix for UTF-32 single chars 🙀
- add some asserts

Fixes: #9050
2023-06-26 18:56:57 -05:00
Marc Durdin
d914b6918d chore: Merge branch 'feature-kmc-kmw' into chore/merge-master-into-feature-kmc-kmw-a17s16-start 2023-06-26 14:33:20 +07:00
Joshua A. Horton
176eb4cfe1 chore: Merge branch 'master' into chore/update-feature-gestures-a17s16-start 2023-06-26 10:58:40 +07:00
Joshua Horton
2ac8a4503b
Merge branch 'master' into feature-esmodule-web-engine 2023-06-26 09:09:43 +07:00