Keyman cross platform input methods system running on Android, iOS, Linux, macOS, Windows and mobile and desktop web
Find a file
Marc Durdin fe5de67c1f feat(developer): Range expansions
Relates to #2241.

Range expansions are a new language feature that reduce verbosity in
Keyman Keyboard Language (.kmn) files by making it possible to collapse
sequential ranges with a new `..` operator. It is envisioned that these
will be used primarily in stores.

Two kinds of expansions are available: character ranges, and virtual key
ranges.

The syntax is:

```
char '..' char
vkey '..' vkey
```

Where the `char` terminator is a single normal character, and the `vkey`
terminator is a single virtual key. `outs` is permissible for
terminators but no other statement is allowed. Whitespace is per normal
Keyman keyboard language syntax.

Character ranges will replace the range with the set of characters
between the terminators, based on the Unicode value of the terminators.

Examples:

```
store(alphabet) 'a' .. 'z'
store(alpha_not_bq) 'ac'..'pr'..'z'
store(capitals) U+0041 .. U+005A
```

Virtual key ranges work in a similar fashion, but with virtual keys. The
starting and terminating virtual key must have the same shift state.
This will be most useful for character and numeric virtual keys, as the
ranges are based on the numeric value of the virtual key as defined by
Windows, not its position on the keyboard.

Examples:

```
store(alphakeys) [K_A] .. [K_Z]
store(numkeys) [K_0] .. [K_9]
```

Ranges must be positive, that is, you cannot use `'z' .. 'a'`.

While this expansion is not expected to be very useful in rules, it is
still permitted. `context()` and other offsets are calculated on the
expanded form, not the collapsed form. Similarly, `any()`/`index()`
offsets are calculated on the expanded form.

'a' .. 'z' > context(3)  c this produces 'c', not 'z'

Because ranges are expanded at compile time, ranges that are overly
long will result in an error, so you cannot use, for example:

```
store(AllUnicode) U+0020 .. U+10FFFF
```

The precise maximum length of a range is dependent on the context where
it is used.

The changes are entirely compiler-based; no change is made to the .kmx
file format or to the Keyman apps.
2021-03-04 09:43:30 +11:00
.github chore: Enhance PR labeling based on PR title 2021-01-27 16:06:25 +01:00
android chore(android): Check in crowdin files for de 2021-03-03 14:45:53 +07:00
common auto: increment beta version to 14.0.252 2021-03-03 13:02:52 -05:00
developer auto: increment beta version to 14.0.252 2021-03-03 13:02:52 -05:00
docs chore(linux): Update debian metadata based on Debian repos 2021-01-12 18:38:18 +01:00
ios fix(ios): handling of cases with no welcome.htm 2021-03-03 13:21:49 +07:00
linux Merge pull request #4569 from keymanapp/feat/linux/issue-4542 2021-03-03 14:54:59 +01:00
mac chore(mac): Check in markdown help 2021-02-11 15:02:16 +07:00
oem/firstvoices Merge pull request #4471 from keymanapp/change/oem/fv/ios/use-fv_all-package 2021-02-11 15:50:36 +07:00
resources auto: increment beta version to 14.0.252 2021-03-03 13:02:52 -05:00
web auto: increment beta version to 14.0.252 2021-03-03 13:02:52 -05:00
windows/src feat(developer): Range expansions 2021-03-04 09:43:30 +11:00
.editorconfig fix(linux): add more package requirements 2020-02-06 18:26:57 +01:00
.flake8 feat(linux): Install keyboard on Gnome 2020-06-24 19:13:40 +02:00
.gitignore chore(windows): remove obsolete importkeyboard app 2020-12-15 11:20:09 +11:00
configure-repo.sh feat(common): Support git worktree when configuring local hooks 2020-02-24 18:30:57 +01:00
crowdin.yml chore(common): Update crowdin.yml Windows files for fr 2021-02-03 20:40:09 +07:00
HISTORY.md auto: increment beta version to 14.0.252 2021-03-03 13:02:52 -05:00
lerna.json auto: increment beta version to 14.0.252 2021-03-03 13:02:52 -05:00
linux.code-workspace default platform and baselayout for linux 2018-12-18 15:49:56 +07:00
package-lock.json fix(common): specifies version of hoisted TypeScript 2020-05-25 10:04:13 +07:00
package.json fix(common): specifies version of hoisted TypeScript 2020-05-25 10:04:13 +07:00
README.md chore: Add localization progress badge 2021-02-04 11:40:34 +07:00
TIER.md chore: update tier 2020-12-15 06:43:19 +11:00
VERSION.md auto: increment beta version to 14.0.252 2021-03-03 13:02:52 -05:00

Keyman

Keyman makes it possible for you to type in any language on Windows, macOS, Linux, iPhone, iPad, Android tablets and phones, and even instantly in your web browser. Create keyboard layouts with Keyman Developer and share them with the community in the keyboards repository. The Keyman Community have already contributed keyboard layouts for over 1,500 languages!

Keyman is an open source project distributed under the MIT license.

Get Involved

Crowdin

Get involved

Development Status on status.keyman.com

Platform Alpha Beta Stable
Windows Alpha Beta Stable
macOS Alpha Beta Stable
Web Alpha Beta Stable
Android Alpha Beta Stable
iOS Alpha Beta Stable
Linux Alpha Beta Stable

Getting Started

Desktop Platforms

Web & Mobile Platforms

Release Types

Each platform maintains multiple types of releases:

  • Stable: A released version. On a stable or stable-<version> branch.
  • Beta: A version that is nearing full "stable" release. On the beta branch.
  • Alpha: Contains the very latest code. These versions are published daily whenever the code changes. On master branch.

License

Copyright (c) 2018-2021 SIL International. All rights reserved.

Licensed under the MIT License.

Keyman for Linux is licensed under the MIT License apart from ibus-kmfl which is licensed under the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

Notes for Contributors

When cloning this repo for local development on a Windows machine, take care not to place it overly deep in your file system. Some of the paths for compilation can push character lengths around 160 characters long, while certain operations on Windows systems may be limited to paths of 260 characters or less. For example, git clean on Windows with msys is limited due to dependence on older Windows APIs.