Fixes#3084.
This does two things:
1. Cleans up a bunch of places where we used to use `(int)` typecasts
for pointer math, which was problematic. We now use `(INT_PTR)` per
MSDN https://docs.microsoft.com/en-us/windows/win32/winprog64/rules-for-using-pointers
and then cast that down to `(int)` where necessary, e.g. when storing
string lengths which are never going to be more than a few hundred
characters! Doing this explicitly helps to clarify that we are aware
of the typecast and believe it to be safe.
2. Adds in some build infrastructure for future use of Coverity Scan
https://scan.coverity.com/ which we plan to use for further code
quality updates. I have submitted the project to Coverity and are
now waiting for approval so we can check results. Once we have
approval, I do plan to add this to the nightly build (we need to
keep submissions under 3 builds/day).
Note: I have not yet added Keyman Core (Windows) to this project,
nor are we currently building Keyman Core (macOS) or Keyman for
Linux, but we should consider adding those in future.
If the user does not specify a language in the bootstrap install,
then the package would be installed without any language selection.
Also, the elevated portion was doing a register and install instead
of just register.
Fixes#3560. This reworks the functionality for disabling
keyboards to work with the new TIP registration pattern. Much
of the code is the same as in Keyman 13, but there are some
significant differences, so it all needs to be reviewed.
Fixes#3487.
The fontsize property for touch layout elements was treated as
an integer by Developer but should be a string (as it might contain
units such as 'em').
To help with back-compat, updated the GetValue string overload
to ignore value type and return the stringified form, regardless of
the actual type, which should always work.
Now that we have an idempotent function to register a TIP for a
language, it makes sense to use that to repair existing profiles,
rather than the prior, rather WET code (which also was not quite
right for the new design, anyway).
Cleans up the listing of languages in the Keyboard Language
dialog and removes some of the confusing entries. Hides the
localized country name because that is not available for
majority of languages in the dialog, leading to confusion.
This upgrades a 11.0-13.0 install to the 14.0 model for registered TIPs.
It does not yet deal with transient TIPs or disabled keyboards (these
will come in a separate PR). There is also more tidy up coming in a
future PR for language names.
This PR handles the case where Windows installs a BCP 47 tag that may not
match our tag 100% precisely. In this case, Keyman maps the Windows BCP 47
tag to the in-memory data for consistency. It also allows for install of
more complex tags.
Keyman32/keyman64 were not reading the new 'Transient Language Profiles'
key which is needed with Keyman 14. Minor tweak to ensure we don't scan
through more profiles than necessary when activating tip in aiTIP.cpp also.