Commit graph

2740 commits

Author SHA1 Message Date
Sabine
b6612c1470 chore(developer): new GetCompilerErrorString() used in AddCompileMessage() 2022-09-14 18:57:32 +02:00
Sabine
a667b36f11 chore(developer): removed unused datatype typedefs 2022-09-14 18:43:12 +02:00
Marc Durdin
ba88412dfe chore(developer): improve kmc validation and corresponding tests
* Add a bunch of tests for keys
* Add tests for version. (improves meta test coverage to 100%)
* A bit more consistency cleanup also of error message functions.
* Adds a compiler failure (FATAL) if compile fails after validate
  passes.
* Overall test coverage now 93.5% lines. Biggest gap still kmx-builder.
  All compiler units are >90%.
2022-09-14 11:47:14 +10:00
Marc Durdin
110f6ffbbd feat(developer): add kmx metadata to kmxplus compiles
Fixes #7273.

Adds 4 kmx system stores to allow existing configuration tools to load
and process KMXPlus files without modification:

* `TSS_NAME` (first `<name>`)
* `TSS_COMPILEDVERSION` (only if `options.addCompilerVersion == true`)
* `TSS_KEYBOARDVERSION` (from `<version number>`)
* `TSS_TARGETS` (currently always 'desktop', will later include more
  targets)

In order for `TSS_COMPILEDVERSION` to be handled correctly, needed to
plumb in the new `CompilerOptions` interface. This could be a separate
PR, but the changes are not huge, so opted to append the changes here.

Updates related tests and fixtures. Refactored some of the e2e helpers
into helpers/index.ts for use with the metadata-compiler tests.
2022-09-14 09:26:22 +10:00
Sabine
136b5b4148 chore(developer): removed several Windows-specific functions 2022-09-13 18:09:49 +02:00
Marc Durdin
ea902d2f1c
Merge pull request #7225 from keymanapp/fix/developer/7028-touch-layout-desktop-view-has-broken-format
fix(developer): hide key-sizes when in desktop layout in touch layout editor
2022-09-13 11:31:15 +10:00
Marc Durdin
3fd9df5277 chore(core): Merge branch 'feature-ldml' into chore/core/7247-use-builder-for-build-sh 2022-09-13 07:25:10 +10:00
Marc Durdin
3e6d9356c3
Merge pull request #7255 from keymanapp/chore/7222-optional-checksum
chore: make checksum optional 🙀
2022-09-13 06:30:04 +10:00
Sabine
910ae7419a chore(developer): tidied up code 2022-09-12 16:31:43 +02:00
Marc Durdin
74a6c65710
Merge branch 'feature-ldml' into chore/merge-master-into-feature-ldml 2022-09-12 15:24:19 +10:00
Marc Durdin
bd48ba646b
Merge pull request #7219 from keymanapp/fix/developer/7216-suppress-repeated-warnings-unreachable-code
fix(developer): suppress repeated warnings about unreachable code
2022-09-12 11:18:54 +10:00
Marc Durdin
91d375ac81 chore(core): use builder_ for build.sh
Refactoring of build.sh to use the builder_ functions. The script should
now be a lot cleaner. Usage is available with `core/build.sh --help`

Targets are :x86, :x64, :wasm, :arch (linux/mac).

Supports additional requirements of Linux build (--target-path,
--configure).

By default will attempt to build all available targets.

Actions are: clean, configure, build, test, install, uninstall.

The install and uninstall actions only work for linux and mac targets at
present.
2022-09-12 09:56:32 +10:00
Marc Durdin
89ccc393ab chore: make checksum optional
Fixes #7222.
2022-09-09 17:23:07 +10:00
Marc Durdin
d9512027f9 refactor(developer): kmc - encapsulate strs and elem items for sort
Fixes #7235.

Encapsulates all strings in the in-memory compile so that we can binary
sort them for build. This means that finalization of strs and elem is
no longer needed -- it's part of setup of build_strs and build_elem --
so that is factored away. Renamed alloc_string and alloc_element_string.

It may be worth renaming some of the ELEM_STRING objects / interfaces as
currently they are a little confusing.
2022-09-09 15:17:39 +10:00
Marc Durdin
c82326f595 chore(developer): kmc - use local reference for json schema
Fixes #7221.
2022-09-09 09:29:08 +10:00
Marc Durdin
39c79dfcf5 chore: chmod +x 2022-09-09 09:20:06 +10:00
Marc Durdin
561899a2a0 refactor(developer): rename kmldmlc to kmc
Fixes #7237.

Full clean, configure and build will be required for Core, Developer
after this change.

kmc is much less unwieldy a name than kmldmlc, and becomes our platform
for future compiler integration. Start of implementation for #5283 also.
2022-09-09 09:13:39 +10:00
Marc Durdin
b6c4e21c1d chore(developer): remove name from meta section
Fixes #7214.
2022-09-09 08:57:52 +10:00
Marc Durdin
70cff601d6
Merge pull request #7213 from keymanapp/feat/developer/kmldmlc-test-coverage
feat(developer): add nyc to kmldmlc for test coverage 🙀
2022-09-09 05:22:05 +10:00
Marc Durdin
0def7dd97d
Merge pull request #7212 from keymanapp/feat/developer/kmldmlc-transform-sections
feat(developer): kmldmlc compiler for transforms 🙀
2022-09-09 05:21:54 +10:00
Marc Durdin
5a14f27d07
Merge pull request #7211 from keymanapp/refactor/developer/kmldmlc-split-builder-functions
refactor(developer): split kmxplus builder functions into separate files 🙀
2022-09-09 05:21:44 +10:00
Sabine
fab2670c9e Merge branch 'refactor/developer/6026-kmcompx-compiler-cross-platform-part-2-NEW_VERSION' of https://github.com/keymanapp/keyman into refactor/developer/6026-kmcompx-compiler-cross-platform-part-2-NEW_VERSION
# Conflicts:
#	developer/src/kmcmpdll/CheckForDuplicates.cpp
#	developer/src/kmcmpdll/Compiler.cpp
#	developer/src/kmcmpdll/NamedCodeConstants.cpp
conflicts solved
2022-09-08 17:01:40 +02:00
Sabine
9296e57398 chore(developer): tidied up code 2022-09-08 16:55:26 +02:00
Sabine
667c2fb89d chore(developer): removed all commentaries _S2 2022-09-08 16:18:32 +02:00
Sabine
129bc242bd chore(developer): tidied up code 2022-09-08 15:37:03 +02:00
Sabine
a3c2956f47 chore(developer): tiedied up code 2022-09-08 15:20:28 +02:00
Sabine
9fc1c63783 Merge branch 'refactor/developer/6026-kmcompx-compiler-cross-platform-part-2-NEW_VERSION' of https://github.com/keymanapp/keyman into refactor/developer/6026-kmcompx-compiler-cross-platform-part-2-NEW_VERSION
# Conflicts:
#	developer/src/kmcmpdll/Compiler.cpp
solved
2022-09-07 19:00:07 +02:00
Sabine
b9ba055e31 chore(developer): tidied up code 2022-09-07 18:39:34 +02:00
Sabine
271ca512b9 chore(developer): tidied up code 2022-09-07 17:37:56 +02:00
Sabine
bfc1f681da chore(developer): CheckFNConsuistency: called u16printf with f´different par. 2022-09-07 15:44:03 +02:00
Marc Durdin
ec5a83a3fa
Merge pull request #7204 from keymanapp/feat/core/ldml-transform-table-specs-and-constants
feat(core): ldml keyboard transform elements 🙀
2022-09-07 11:28:42 +10:00
Marc Durdin
89331b62c4
Merge pull request #7203 from keymanapp/chore/developer/add-test-for-messages-and-improve-reporting-on-e2e
chore(developer): add test for compiler messages and cleanup e2e test 🙀
2022-09-07 11:28:35 +10:00
Marc Durdin
6ba737de9f
Merge pull request #7202 from keymanapp/refactor/developer/kmldmlc-cleanup-vkey-constants
refactor(developer): cleanup virtual key constants 🙀
2022-09-07 11:28:29 +10:00
Marc Durdin
f96e3493af fix(developer): hide key-sizes when in desktop layout in touch layout editor
Fixes #7028.

Note that the desktop layout is not currently used by KeymanWeb. The
designer has a number of additional issues, as the .keyman-touch-layout
format is not well suited to describing a fixed hardware layout, but
fixing this is outside the scope of this issue.
2022-09-07 11:13:22 +10:00
Marc Durdin
c98fb89b86 fix(developer): suppress repeated warnings about unreachable code
Fixes #7216.

The warning message 0x209A 'The rule will never be matched because its
key code is never fired.' was being generated multiple times for a
single line because the `JavaScript_Key` function it is generated by is
used for various purposes.

This PR keeps a cache of reported key rules to ensure that the message
is reported only once for a given key rule, and also improves the
reporting to clarify which specific key is unreachable, which makes it
easier to diagnose when using `any(k)` style messages, for example:

```
lao_phonetic.kmn (237): Warning: 209A The rule will never be matched for key 'ñ' because its key code is never fired.
```

This also reduces the warning to a hint, as this should not be a
blocking issue for a keyboard, rather just a place the keyboard author
can tidy up.
2022-09-07 06:02:46 +10:00
Sabine
c3be2ba6da Merge branch 'refactor/developer/6026-kmcompx-compiler-cross-platform-part-2-NEW_VERSION' of https://github.com/keymanapp/keyman into refactor/developer/6026-kmcompx-compiler-cross-platform-part-2-NEW_VERSION
# Conflicts:
#	developer/src/kmcmpdll/CheckFilenameConsistency.cpp
#	developer/src/kmcmpdll/CheckFilenameConsistency.h
chore(developer): solved conflicts
2022-09-06 18:46:40 +02:00
Sabine
2c6726974a chore(developer): Win-functions in FileNameConsistency 2022-09-06 17:44:18 +02:00
Sabine
143ad3f206 chore(developer): Win-functions in FileNameConsistency 2022-09-06 17:23:09 +02:00
Marc Durdin
447b9afead feat(developer): add nyc for test coverage to kmldmlc 2022-09-06 11:52:22 +10:00
Marc Durdin
8e5ce35f4d feat(developer): kmldmlc compiler and tests for transforms
Adds compilers and minimal unit tests for transform sections bksp,
finl, ordr, and tran, and cleans up problems in the corresponding
builders.

Adds a utility script for building test fixtures for manual analysis:
  ./build.sh build-fixtures

Refactors constants to give us design-time type safety once more.
2022-09-06 10:15:31 +10:00
Marc Durdin
14cbab10a2 feat(developer): add builders for transform sections
Note: basic.txt changed becuase I fixed the build order for sections.
2022-09-05 16:13:15 +10:00
Marc Durdin
917b39e7da refactor(developer): split kmxplus builder functions into separate files
This refactor work simply splits the existing functions into separate
files to prevent kmx-plus-builder.ts getting too big.

The functions now have no side-effects. Some of them mutate input
parameters, but they are fairly self-contained, which should make
unit tests simpler. Note that `alloc_string` is used extensively, but
works on the input parameter `sect_strs`.
2022-09-05 14:02:04 +10:00
Marc Durdin
9f5f8e976e feat(core): ldml keyboard transform elements
Adds definitions for LDML keyboard transform elements `transforms`,
`backspaces`, and `reorders`, and the binary format sections `bksp`,
`elem`, `finl`, `ordr`, and `tran`.

Minimally updates the compiler so that it will build, but no other
changes to the compiler.

Compiler and Typescript updates to support building these sections will
come in the next PR.
2022-09-05 13:11:51 +10:00
Marc Durdin
a708b2f85d chore(developer): add test for compiler messages and cleanup e2e test
The purpose of these tests is to ensure that our slightly WET constant
definitions for compiler errors are consistent in their usage:

  * that names are consistent between the message functions and
    constants
  * that constants have unique codes
  * that constants have the right error mask for their type

This means we don't have to worry about DRYing out the constants, which
would probably require us to have a preprocessing step, which has its
own negatives.

Also, added more reporting to e2e test in case of failures.
2022-09-05 10:43:01 +10:00
Marc Durdin
93551c36b7 chore: fixup import 2022-09-05 10:39:32 +10:00
Marc Durdin
645bca194a refactor(developer): cleanup virtual key constants
Uses our `K_xxx` constants for the CLDR VKey Enum mapping. Renames
us-virtual-keys to virtual-key-constants, better reflecting its purpose,
and adds a unit test to verify that the codes in the CLDR VKey Enum
mapping correspond to our expected Keyman virtual key codes.
2022-09-05 10:35:09 +10:00
Marc Durdin
3524b41b04
Update developer/src/kmldmlc/test/fixtures/sections/vkey/redundant.xml 2022-09-05 10:23:40 +10:00
Marc Durdin
cc0ddffd61 feat(developer): add vkey support
vkeyMaps table compiler, unit test, and fixes to json schema. Adds a
vkeyMaps entry to the basic e2e test.

us-virtual-keys.ts has a new mapping for CLDR VKey Enums, but I will
tweak this in an upcoming commit to use constants instead of hard-coded
values.
2022-09-05 10:14:10 +10:00
Marc Durdin
c08dbfbf9f feat(developer): add unit tests for 'name' compiler 2022-09-04 12:40:02 +10:00
Marc Durdin
b2b62733e6 refactor(developer): kmldmlc - rename CompilerErrors to CompilerMessages
Just wanted to rename this to make it clearer. Also added a prefix to
each message generator to indicate the type of message, as otherwise it
is not obvious within the compiler which messages are going to cause the
compiler to fail.

Note that the message generator function prefixes are Title Cased
whereas the message identifier constant prefixes are CAPS. I guess this
could be confusing but I think it works okay in practice.
2022-09-04 12:28:25 +10:00