From 084478010453bed0429c46e1f91c5bfa4c74bd22 Mon Sep 17 00:00:00 2001 From: DavidLRowe Date: Thu, 15 Jan 2026 19:45:56 -0900 Subject: [PATCH 01/45] Update index.md to include walkthrough --- developer/docs/help/guides/develop/index.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/developer/docs/help/guides/develop/index.md b/developer/docs/help/guides/develop/index.md index 8d8490c42c..d53a527431 100644 --- a/developer/docs/help/guides/develop/index.md +++ b/developer/docs/help/guides/develop/index.md @@ -2,6 +2,8 @@ title: Developing Keyboards --- +[Keyman Developer Walkthrough](walkthrough) + [Keyman keyboard tutorial](tutorial) [An advanced keyboard development example](advanced-keyboard-development-example) @@ -16,4 +18,4 @@ title: Developing Keyboards ------------------------------------------------------------------------ -[Keyman Developer 16 Tutorial](https://lingtran.net/Keyman-Developer-16-Tutorial) (external on Lingtran.net) \ No newline at end of file +[Keyman Developer 16 Tutorial](https://lingtran.net/Keyman-Developer-16-Tutorial) (external on Lingtran.net) From 441a385cb18a11fb1b5ce45867c4fef56933beca Mon Sep 17 00:00:00 2001 From: DavidLRowe Date: Thu, 15 Jan 2026 19:47:22 -0900 Subject: [PATCH 02/45] Add files for walkthrough tutorial --- .../develop/walkthrough/00-introduction.md | 75 +++ .../01-creating-keyboard-project.md | 189 ++++++++ .../02-designing-desktop-layout.md | 145 ++++++ .../walkthrough/03-creating-desktop-layout.md | 327 +++++++++++++ .../develop/walkthrough/04-using-debugger.md | 34 ++ .../walkthrough/05-designing-touch-layout.md | 58 +++ .../walkthrough/06-creating-touch-layout.md | 151 ++++++ .../07-writing-keyboard-documentation.md | 110 +++++ .../08-preparing-keyboard-package.md | 63 +++ .../09-distributing-keyboard-package.md | 35 ++ .../10-generating-lexical-model.md | 373 +++++++++++++++ .../11-installing-lexical-model.md | 32 ++ .../develop/walkthrough/Aduna_anndaaka.txt | 439 ++++++++++++++++++ .../develop/walkthrough/dag-short-wl.txt | 25 + .../guides/develop/walkthrough/glossary.md | 203 ++++++++ .../walkthrough/images/add-language.png | Bin 0 -> 13122 bytes .../walkthrough/images/add-longpress.png | Bin 0 -> 77639 bytes .../images/characters-in-comments.png | Bin 0 -> 20570 bytes .../walkthrough/images/charmap-to-text.png | Bin 0 -> 12100 bytes .../develop/walkthrough/images/charmap.png | Bin 0 -> 31315 bytes .../develop/walkthrough/images/code-tab.png | Bin 0 -> 47177 bytes .../walkthrough/images/copy-wordlist.png | Bin 0 -> 42876 bytes .../walkthrough/images/debugger-output.png | Bin 0 -> 48098 bytes .../walkthrough/images/distribution-tab.png | Bin 0 -> 42222 bytes .../walkthrough/images/history-md-file.png | Bin 0 -> 11321 bytes .../images/keyboard-model-device.png | Bin 0 -> 4922 bytes .../walkthrough/images/keyboards-tab.png | Bin 0 -> 39099 bytes .../images/keyman-developer-icon.png | Bin 0 -> 8068 bytes .../walkthrough/images/keyman-icon.png | Bin 0 -> 6745 bytes .../walkthrough/images/layer-selection.png | Bin 0 -> 1624 bytes .../walkthrough/images/longpress-fields.png | Bin 0 -> 6443 bytes .../walkthrough/images/new-lexical-model.png | Bin 0 -> 10638 bytes .../walkthrough/images/new-longpress-key.png | Bin 0 -> 5109 bytes .../walkthrough/images/new-project-dialog.png | Bin 0 -> 22627 bytes .../walkthrough/images/notepadpp-case.png | Bin 0 -> 44644 bytes .../walkthrough/images/notepadpp-regex.png | Bin 0 -> 40704 bytes .../walkthrough/images/primerprep-input.png | Bin 0 -> 19674 bytes .../walkthrough/images/primerprep-start.png | Bin 0 -> 62479 bytes .../images/primerprep-with-words.png | Bin 0 -> 72506 bytes .../walkthrough/images/shift-layer.png | Bin 0 -> 6300 bytes .../images/test-keyboard-browser-display.png | Bin 0 -> 4004 bytes .../images/test-keyboard-browser.png | Bin 0 -> 41283 bytes .../images/test-lexical-model-k.png | Bin 0 -> 33745 bytes .../images/test-lexical-model-setup.png | Bin 0 -> 7188 bytes .../walkthrough/images/test-longpress.png | Bin 0 -> 37394 bytes .../develop/walkthrough/images/u-0254.png | Bin 0 -> 6863 bytes .../images/unicode-character-value.png | Bin 0 -> 3219 bytes .../walkthrough/images/windows-save-txt.png | Bin 0 -> 24805 bytes .../help/guides/develop/walkthrough/index.md | 46 ++ 49 files changed, 2305 insertions(+) create mode 100644 developer/docs/help/guides/develop/walkthrough/00-introduction.md create mode 100644 developer/docs/help/guides/develop/walkthrough/01-creating-keyboard-project.md create mode 100644 developer/docs/help/guides/develop/walkthrough/02-designing-desktop-layout.md create mode 100644 developer/docs/help/guides/develop/walkthrough/03-creating-desktop-layout.md create mode 100644 developer/docs/help/guides/develop/walkthrough/04-using-debugger.md create mode 100644 developer/docs/help/guides/develop/walkthrough/05-designing-touch-layout.md create mode 100644 developer/docs/help/guides/develop/walkthrough/06-creating-touch-layout.md create mode 100644 developer/docs/help/guides/develop/walkthrough/07-writing-keyboard-documentation.md create mode 100644 developer/docs/help/guides/develop/walkthrough/08-preparing-keyboard-package.md create mode 100644 developer/docs/help/guides/develop/walkthrough/09-distributing-keyboard-package.md create mode 100644 developer/docs/help/guides/develop/walkthrough/10-generating-lexical-model.md create mode 100644 developer/docs/help/guides/develop/walkthrough/11-installing-lexical-model.md create mode 100644 developer/docs/help/guides/develop/walkthrough/Aduna_anndaaka.txt create mode 100644 developer/docs/help/guides/develop/walkthrough/dag-short-wl.txt create mode 100644 developer/docs/help/guides/develop/walkthrough/glossary.md create mode 100644 developer/docs/help/guides/develop/walkthrough/images/add-language.png create mode 100644 developer/docs/help/guides/develop/walkthrough/images/add-longpress.png create mode 100644 developer/docs/help/guides/develop/walkthrough/images/characters-in-comments.png create mode 100644 developer/docs/help/guides/develop/walkthrough/images/charmap-to-text.png create mode 100644 developer/docs/help/guides/develop/walkthrough/images/charmap.png create mode 100644 developer/docs/help/guides/develop/walkthrough/images/code-tab.png create mode 100644 developer/docs/help/guides/develop/walkthrough/images/copy-wordlist.png create mode 100644 developer/docs/help/guides/develop/walkthrough/images/debugger-output.png create mode 100644 developer/docs/help/guides/develop/walkthrough/images/distribution-tab.png create mode 100644 developer/docs/help/guides/develop/walkthrough/images/history-md-file.png create mode 100644 developer/docs/help/guides/develop/walkthrough/images/keyboard-model-device.png create mode 100644 developer/docs/help/guides/develop/walkthrough/images/keyboards-tab.png create mode 100644 developer/docs/help/guides/develop/walkthrough/images/keyman-developer-icon.png create mode 100644 developer/docs/help/guides/develop/walkthrough/images/keyman-icon.png create mode 100644 developer/docs/help/guides/develop/walkthrough/images/layer-selection.png create mode 100644 developer/docs/help/guides/develop/walkthrough/images/longpress-fields.png create mode 100644 developer/docs/help/guides/develop/walkthrough/images/new-lexical-model.png create mode 100644 developer/docs/help/guides/develop/walkthrough/images/new-longpress-key.png create mode 100644 developer/docs/help/guides/develop/walkthrough/images/new-project-dialog.png create mode 100644 developer/docs/help/guides/develop/walkthrough/images/notepadpp-case.png create mode 100644 developer/docs/help/guides/develop/walkthrough/images/notepadpp-regex.png create mode 100644 developer/docs/help/guides/develop/walkthrough/images/primerprep-input.png create mode 100644 developer/docs/help/guides/develop/walkthrough/images/primerprep-start.png create mode 100644 developer/docs/help/guides/develop/walkthrough/images/primerprep-with-words.png create mode 100644 developer/docs/help/guides/develop/walkthrough/images/shift-layer.png create mode 100644 developer/docs/help/guides/develop/walkthrough/images/test-keyboard-browser-display.png create mode 100644 developer/docs/help/guides/develop/walkthrough/images/test-keyboard-browser.png create mode 100644 developer/docs/help/guides/develop/walkthrough/images/test-lexical-model-k.png create mode 100644 developer/docs/help/guides/develop/walkthrough/images/test-lexical-model-setup.png create mode 100644 developer/docs/help/guides/develop/walkthrough/images/test-longpress.png create mode 100644 developer/docs/help/guides/develop/walkthrough/images/u-0254.png create mode 100644 developer/docs/help/guides/develop/walkthrough/images/unicode-character-value.png create mode 100644 developer/docs/help/guides/develop/walkthrough/images/windows-save-txt.png create mode 100644 developer/docs/help/guides/develop/walkthrough/index.md diff --git a/developer/docs/help/guides/develop/walkthrough/00-introduction.md b/developer/docs/help/guides/develop/walkthrough/00-introduction.md new file mode 100644 index 0000000000..5c4d0faaa3 --- /dev/null +++ b/developer/docs/help/guides/develop/walkthrough/00-introduction.md @@ -0,0 +1,75 @@ +--- +title: Introduction +--- + +[Next: Part 1 - Creating a Keyboard Project →](01-creating-keyboard-project) + +## Step-by-Step + +The Step-by-Step tutorial starts with an introduction to the Keyman Developer program and instructions on installing it. Then use the link to advance to the next topic and complete the Step-by-Step section there. Continue on through all the topics, completing the Step-by-Step section and moving on to the next topic by using the link at the end of each Step-by-Step section. + +If you encounter unfamiliar terms, please consult the [glossary](glossary). + +### Introducing Keyman Developer + +Keyman Developer is a powerful tool you can use to create custom keyboards optimized to type in any language you choose. Keyboard authors can distribute their work for desktop, web, tablet and phone, enabling global communities to quickly benefit from keyboards made for their own language. + +Keyboards created with Keyman Developer can be used on Windows, Mac, Linux, iOS, Android, and the web. + +This tutorial focuses on the Keyman Developer IDE (integrated development environment). +Currently this software is Windows-only, although the command line tools it uses can run on other platforms (such as Linux and macOS). + +### Installing Keyman Developer + +Keyman Developer is completely free to download and use. You can download it from [https://keyman.com/developer/download](https://keyman.com/developer/download). + +On the downloads page, just click the big green “Download Now” button to get the latest version of Keyman. Once you have it, run the `keymandeveloper.exe` file you’ve received. The numbers following “keymandeveloper” indicate which version of Keyman Developer you are installing. + +After installing Keyman Developer, you should be able to run it on your computer and begin creating projects immediately. + +Note that Keyman Developer is a separate app from Keyman, which is the app that lets you use any keyboard created with Keyman Developer. +In order to use the keyboard you create with Keyman Developer, you'll need to have the Keyman app installed on your computer or device. +Keyman is available on the following platforms: Windows, MacOS, Linux, iOS, Android, and the web. + +The icons for Keyman Developer ![Keyman Developer icon](images/keyman-developer-icon.png) and Keyman ![Keyman icon](images/keyman-icon.png) are similar but slightly different. + +To continue the Step-by-Step tutorial move to the next page: [Part 1 - Creating a Keyboard Project](01-creating-keyboard-project) + +--- + + +## Engaging with the Keyman Community and Resources + +Keyman Developer also has an active community and documentation for each major release of the app. If you need any additional help, be sure to visit the following resources for information: + +### Keyman Community Forum + +Ask questions and talk with other keyboard authors on the [Keyman Community Forum](https://community.software.sil.org/c/keyman/19) + +### Keyman online help + +[Keyman Developer Language Documentation](https://help.keyman.com/developer/language/guide/) + +Reference for the general structure of the Keyman language. + +[Keyman Developer Language Reference](https://help.keyman.com/developer/language/reference/) + +Reference for keywords and other components of the Keyman language. + +[Keyman Developer Training Videos](https://help.keyman.com/developer/videos) + +Videos from past Keyman Developer workshops hosted by the team. + +### Keyman Blog + +Read up on Keyman’s latest releases and patch notes on the [Keyman Blog](https://blog.keyman.com/). + +### Keyman GitHub repositories + +Keyman uses a number of [Github](https://github.com/keymanapp) repositories to store source code, keyboards, lexical models and documentation. +There is also a mechanism for reporting problems. [Keyman Bug Reports](https://github.com/keymanapp/keyman/issues) + +Report Keyman software bugs and issues here. NOTE: NOT for help and support questions. The Keyman community forum is the best place to ask for help with development. Think you’ve found a Keyman bug or a problem with a specific keyboard? Describe what you’ve found on the Keyman community forum and ask whether to report a bug. + +[Next: Part 1 - Creating a Keyboard Project →](01-creating-keyboard-project) + diff --git a/developer/docs/help/guides/develop/walkthrough/01-creating-keyboard-project.md b/developer/docs/help/guides/develop/walkthrough/01-creating-keyboard-project.md new file mode 100644 index 0000000000..dedf88f71c --- /dev/null +++ b/developer/docs/help/guides/develop/walkthrough/01-creating-keyboard-project.md @@ -0,0 +1,189 @@ +--- +title: Creating a Keyboard Project +--- + +Part 1 of the [Keyman Developer Walkthrough](../walkthrough). + +[← Back: Introduction](00-introduction) + +[Next: Part 2 - Designing a Desktop Layout →](02-designing-desktop-layout) + +## Step-by-Step + +For the Dagbani keyboard, the keyboard planning has been done for you. Follow these steps to create the Dagbani keyboard project: + +- Open Keyman Developer and select `New Project` from the `Project` menu. +- The `Keyman Keyboard` option is selected by default. Click `OK`. +- A new dialog should pop up with fields for you to fill out: + +![](images/new-project-dialog.png) + +- For the Keyboard Name field, enter **Dagbani** (which will also fill in the Keyboard ID field). +- For the Description field, enter **A keyboard for typing the Dagbani language of Ghana.** +- For the Author field, you can put in your own name. Note that the Copyright and Full copyright fields are initialized. Since the copyright really belongs to SIL Global, we’ll change those fields for this tutorial. (When you create a real keyboard project, follow the advice in the [Author, Copyright and Full Copyright](#toc-author-copyright-and-full-copyright) section below.) +- In the Copyright field enter **Copyright © SIL Global** +- In the Full Copyright field enter **Copyright © 2021-2025 SIL Global** . (The date range goes from the first year that the keyboard was written to the current year. A new keyboard usually just lists a single year.) +- The Version field defaults to **1.0** and you can accept that default version number. +- The Target field defaults to **any** (meaning “any and all” of the listed target platforms). This is what will be used for the Dagbani keyboard. +- The Path field defaults to “Keyman Developer\Projects\” in the user’s “Documents” folder. +- The Keyboard ID field was initialized to **dagbani** based on the Keyboard Name entered earlier. We will keep this value. The Project filename of …**Documents\Keyman Developer\Projects\dagbani\dagbani.kpj** is displayed for information. It is the Path field plus the keyboard’s project folder (which uses the Keyboard ID field as its name) plus the keyboard project file (which uses the Keyboard ID field as the name with the .kpj file type). +- Select the `Add` button to add a BCP 47 language tag for the language. In the dialog that comes up, enter **dag** in the `Language tag` field and verify that the Language name field shows as **Dagbani**. +- Select `OK` to close the `Select BCP 47 tag` dialog. +- Select `OK` to close the `New Basic Keyboard Project` dialog. + +To continue the Step-by-Step tutorial move to the next page: [Part 2 - Designing a Desktop Layout](02-designing-desktop-layout) + +--- + +## Planning a Keyboard + +The first step is identifying the language or languages your keyboard will cover. Some keyboards support multiple different languages within the same region. This approach, however, has some significant drawbacks: + +- it is difficult to optimize a keyboard for multiple languages since a rarely used character for one language may be a common character for another. +- it is harder for users to find the keyboard since the name of the keyboard may not relate to the particular language they are researching. +- a separate lexical model (for predictive text) is needed for each language, so having a keyboard that handles multiple languages may make installation of a lexical model harder. + +Furthermore, having a keyboard specifically designed for a single language may help with community acceptance. + +If you do need to provide keyboard support for a number of languages in a region, consider planning the keyboards together, so that you can make them as similar as possible, but then make a separate keyboard for each language. + +Once you have figured out what language your keyboard will support, you will need to familiarize yourself with which characters (including punctuation) are used to write it. You will need to determine what key or key combinations are needed to produce these characters. There may be major benefits in keeping as close as possible to the standard layout for a language of wider communication. On the other hand, repurposing a key from the standard layout may make it easier to type the target language. + +## Understanding User Needs + +Once you understand what is needed to support the language, you should seek to understand the needs of its speakers. +A few good questions to start with are: + +- Who will use this keyboard? +- What devices will they use it on? +- What are the most important keys on the keyboard? +- What have people been using to type instead? + +Understanding the users is the key to designing an effective keyboard. Is it intended for fluent or basic speakers of the language? Are the users familiar with common keyboards already? Have they already learned a certain keyboard format or style of typing? (If you plan to be the primary user of this keyboard, think about how others may want to use it if it turns into a more valuable tool than you anticipated.) + +Be sure to look for keyboards that may exist for the language(s) you want to support before beginning work. Although they may not be perfect solutions, if there is a keyboard that your language’s speakers already have and are familiar with, building on its foundation can significantly save time. You might discover a keyboard that already does exactly what you need! + +Once you’ve planned the basic premise of your keyboard, you can open Keyman Developer and start filling out your project info. + +## Creating a Keyboard Project + +Open Keyman Developer and select `New Project` from the `Project` menu. + +The `Keyman Keyboard` option is selected by default. Click `OK`. A new dialogue should pop up with fields for you to fill out. + +The information that you enter will initialize several files in your keyboard project. +Making sure that the information is correct at the beginning will avoid having to correct your files later. + +### Keyboard Name and Keyboard ID + +This is the name of your keyboard project. + +Make sure to name your keyboards intuitively. A good standard starts with the name of the language or language group you are developing for, followed by any necessary identifiers such as `Phonetic`, `Mnemonic`, `Latin`, `QWERTY`, etc. in case there are multiple keyboards available for the same language. +Do not use the word “keyboard” in the name. Adding “keyboard” to the keyboard name is redundant and will not help people find it. Similarly, don’t include “Unicode” in the name. + +If you decide to change the name of the keyboard, you’ll need to change it in a number of files: `HISTORY.md`, `README.md`, `readme.htm`, and `welcome.htm`, as well as the `.kmn` and `.kps` files. + +Note that the `Keyboard ID` (near the bottom of the dialog) fills in automatically with the name you choose, but formatted like `keyboard_name` (changing uppercase characters to lowercase, and non-English characters and spaces to underscore). +You can modify the value in this field, though you are limited to the characters a-z, the numbers 0-9 and underscore. +This value will be used as the base filename of many of your Keyman files. + +If you decide to change the keyboard ID, you’ll need to change most of the files in the project. +This is best done using Keyman Developer’s `Clone local project` feature. + +- From the `Project` menu, select `New Project` then `Clone local project`. +- Use the `Browse` button to navigate to the `.kpj` file of your existing project. +- Specify a new `project ID` (and adjust `Destination path` if desired), then select `OK`. + +### Description + +This brief description of your keyboard is included in all of your information files. +Try to keep this short but informative, as this is what people will see when searching for your keyboard. +It may be useful to include alternate language names, the script (Latin, Devanagari, etc) +if the language is written in more than one script, the region where it is used, or other details about the keyboard. + +### Author, Copyright, and Full Copyright + +Enter your name in the `Author` field. +Note that the `Copyright` and `Full Copyright` fields will automatically populate with your name as well. +If you are developing keyboards that will be copyrighted by an organization, make sure to edit the Copyright fields accordingly. +The Full Copyright field has the date as well as the copyright holder. + +The name used in the Copyright fields must be the real name of an individual or of an organization. +Copyright cannot be assigned to a pseudonym. + +### Languages + +This table displays the [BCP 47](https://help.keyman.com/developer/current-version/reference/bcp-47) tag (or tags) associated with your keyboard. +A BCP 47 tag identifies a language and will help users find your keyboard when they search for their language. +If you don’t know what your language’s tag is, you can search for its name and find the corresponding tag in the [IANA Language Subtag Registry](https://www.iana.org/assignments/language-subtag-registry/language-subtag-registry), which contains all existing BCP 47 tags, the [Glottolog](https://glottolog.org/glottolog/language) (under the ISO-639-3 column), or the [SIL Ethnologue](https://www.ethnologue.com/). + +The SIL Ethnologue is the most user-friendly option of the three, if you are unfamiliar with language tags. + +In addition to your basic BCP 47 tag, you can add +[Script](https://help.keyman.com/developer/current-version/reference/bcp-47#toc-the-script-subtag) and +[Region](https://help.keyman.com/developer/current-version/reference/bcp-47#toc-the-region-subtag) subtags. +However, you should always use the simplest possible BCP 47 tag to identify your language. +Only add Script and Region tags if your keyboard is for a script or region that differs from the most commonly used form of the language. + +### Version + +The keyboard version number allows Keyman to tell which of two copies of a keyboard is newer. This allows Keyman to offer users updated versions of keyboards. + +The version number consists of two or three integer numbers separated by periods. Don’t use more than three numbers. Don’t use leading zeros. If the third number is absent, it is considered to be zero. Version numbers are compared number by number, so `2.51` is a higher version number than `2.6.1` (since 51 is greater than 6). + +New keyboards usually start with version `1.0` (which is equivalent to `1.0.0`). +Generally the first number is incremented for major changes to the keyboard, +the second for minor changes, and the third for corrections or bug fixes. +But the most important point is that the new version number be greater than the existing one (as noted above). + +The version number appears in the `HISTORY.md` file and the `.kmn` file. +It should be updated in both places whenever you distribute a new version of the keyboard. + +### Targets + +This is where you choose which platforms that your keyboard will be supported on. +As you can see, Keyman offers support for a wide variety of platforms. +Although you can pick and choose what formats you wish to develop for, `any` is the best option, because it will automatically generate files to support all formats that Keyman offers. +If you select `any`, you do not need to (and should not) choose any other options. + +It is best practice to support as many devices as possible when creating your keyboard, because it is hard to predict who will use your keyboard in the future. By making your keyboard as accessible as possible, you can help even more people. + +If you decide not to include a touch layout, untick the `any` option and select `desktop` and `web` which will allow the keyboard to be used on a web page as well as on Linux, Mac and Windows (the three `desktop` platforms). If you later add a touch layout, you can reverse this process and go back to selecting just `any`. + +### Path + +This is location on your computer where your keyboard project and all associated files will be stored. +By default, your projects will be stored in a folder with the same name as the `Keyboard ID` value +and that folder will be placed under the keyboard author's `Documents\Keyman Developer\Projects\` folder. + +It’s a good idea to let Keyman handle naming your files, since it uses good naming convention and will make things easier to find in the future. However, if you need to place the project somewhere else, you can click the `Browse...` button beside this field and navigate to the desired folder. + +Once you have filled out all of the fields, +Keyman Developer will create your project and open it in a new window with your project’s `.kpj` (Keyman project) file displayed. +You can read more about the `.kpj` file type in the [official Keyman documentation](https://help.keyman.com/developer/current-version/reference/file-types/kpj). + +## Basing a new Keyboard Project on an existing one + +Keyman has a well-maintained [Github repository](https://github.com/keymanapp/keyboards) for keyboards that have been published by the team or community members. +You can download a keyboard from the repository and use it as the basis for your own project. +The easiest way to do this is with the `Clone project from Keyman Cloud` feature of Keyman Developer (version 18 and later). + +Open Keyman Developer and navigate to `Project` > `New Project` in the top menu bar. + +Select the `Clone project from Keyman Cloud` option, then `OK`. A new dialog appears where you can: + +- search for a keyboard (by keyboard name, language, script, country, BCP 47 tag) +- select a keyboard from the search results +- specify a New project ID +- optionally move external files into the new project folder +- optionally navigate to a different destination folder + +When ready, select `OK` to download the files, adjust the filenames and open the new project in Keyman Developer. + +## Conclusion + +Now that you have your project set up, continue to the next section of the tutorial to start developing your first keyboard layout. + +[← Back: Introduction](00-introduction) + +[Next: Part 2 - Designing a Desktop Layout →](02-designing-desktop-layout) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/walkthrough/02-designing-desktop-layout.md b/developer/docs/help/guides/develop/walkthrough/02-designing-desktop-layout.md new file mode 100644 index 0000000000..2e398aa6ee --- /dev/null +++ b/developer/docs/help/guides/develop/walkthrough/02-designing-desktop-layout.md @@ -0,0 +1,145 @@ +--- +title: Designing a Desktop Layout +--- + +Part 2 of the [Keyman Developer Walkthrough](../walkthrough). + +[← Back: Part 1 - Creating a Keyboard Project](01-creating-keyboard-project) + +[Next: Part 3 - Creating a Desktop Layout →](03-creating-desktop-layout) + +## Step-by-Step + +Dagbani uses the characters **ɛ ɔ ŋ ɣ ʒ** and the corresponding capital letters **Ɛ Ɔ Ŋ Ɣ Ʒ**. +Rather than try to assign each of these characters to a key on the physical keyboard, +we will use a pair of keys to produce each of these characters. +We’ll start with the default QWERTY layout and add rules so that typing ; followed by e will produce “ɛ”, +; followed by o will produce “ɔ”, etc. + +This Step-by-Step tutorial won’t be using the visual layout features of Keyman Developer for creating the desktop keyboard. + +To continue the Step-by-Step tutorial move to the next page: [Part 3 - Creating a Desktop Layout](03-creating-desktop-layout) + +--- + +## Defining a List of Keys + +After you have gathered some basic information about the language for which you are creating a keyboard, +along with the needs of the people who will be using it, +the next step is to figure out what format will suit the needs of your keyboard’s users and be most familiar to them. + +Keyman is available across [many different platforms](https://help.keyman.com/products/), so consider whether you need to design keyboard formats for computer keyboards, phones, or tablets. +Keyman makes it easy to keep designs consistent across these types, but it is also possible to design each layout individually. + +Make a list of all of the characters that your language uses in its written form. For example, the Dagbani language uses the following characters, in addition to a standard A-Z alphabet: + +| Name | Character | +|--------|-------------| +| Open e | ɛ Ɛ | +| Open o | ɔ Ɔ | +| Eng | ŋ Ŋ | +| Gamma | ɣ Ɣ | +| Ezh | ʒ Ʒ | + + +This is a simple example. Some languages may have extensive punctuation marks, special glyphs, or use a non-Latin alphabet. +Be thorough in your list so that you are not missing any keys when you design your keyboard. + +Note that Unicode contains some characters that are quite similar, so verify the Unicode values you are using. +For example, this example uses `ɔ` (`U+0254`) "open o", not `ↄ` (`U+2184`) "reversed c". + +## Creating a Visual Layout + +Once you know what keys your keyboard will need, it is time to determine how to arrange them. +The best way to do this varies widely depending on your language. +If users have been typing with a certain keyboard layout and are familiar with it, that might provide a good starting point. +Research existing keyboard layouts and build off of them where possible. +You may want to use the keyboard layout common in the area (QWERTY in English-speaking areas, AZERTY in French-speaking areas, etc.) as a basis for your keyboard. + +For visual mapping, this can be done with tools as rudimentary as a pen and paper, but Keyman Developer also offers a handy visual keyboard for design purposes. + +Navigate to your `.kpj` file, go to the `Keyboards` tab, and open your `.kmn` file. This is where your keyboard’s information lies, as well as the code that makes it work. + +You can read more about the `.kmn` file type in the [official Keyman documentation](https://help.keyman.com/developer/current-version/reference/file-types/kmn). + +Inside your `.kmn` file, select the `Layout` tab on the left. +For a new project, the `Design` tab (at the bottom) should already be selected. +This is a visual representation of your desktop keyboard. +Note that once you add rules using the `Code` tab (as, for example, in the Dagbani keyboard developed in the Step-by-Step tutorial), +Keyman Developer no longer offers the `Design` tab option. + +By default, Keyman Developer uses a QWERTY layout, but it is very easy to remap this. +If you are using a non-QWERTY base keyboard layout, select each key and press the corresponding key on your keyboard. +This will automatically change the keyboard code to type the key you have selected. + +To access the characters needed for your language, you can paste the Unicode characters you need into the two fields at the bottom. +`Unicode Character Value(s)` is for the Unicode value (for example, `U+0061`) of the character you would like the keyboard to type, +while `Output character(s)` is for the character the keyboard will produce (for example, `a`). +Typing in either field will automatically populate the other one with matching information, so it does not matter which one you use. + +If a key needs to produce multiple characters (for example, a key that produces `ch`), you can place multiple characters in the `Output character(s)` field. + +After some research, you may find that your language has more characters than there are keys on the keyboard. +This is especially true of languages with many glyphs, combined characters, or diacritical marks on letters. +In this case, it is especially helpful to follow a default keyboard layout for your base design, +and plan out special keystrokes so users can type the characters that are not immediately available on the keyboard. +Try to ensure that the most essential keys (usually the ones used to type the alphabet) are available before worrying about adding less frequent characters. + +## Planning Keystrokes + +Once you know what you want your keyboard layout to look like, you can begin planning what keystrokes will be needed. +You can specify rules so that Keyman will transform typed keystroke combinations into the desired characters. + +For example, you can use the keystrokes `'` + `e` to produce the character `é` rather than dedicating a separate key to `é`. + +When choosing keys to use for characters you are adding to your keyboard, be careful not to block the normal function of those keys. +In the above example, consider whether there would be a need to allow someone to type an actual apostrophe. + +To easily plan keystrokes, you can reference the list you made of the special characters needed for your language. Disregarding the letters and symbols already included in the base layout you designed, how many more do you need to fit onto your keyboard? You can utilize the number row, punctuation characters, deadkeys, and the Right-Alt, Shift, or Shift+Right-Alt modifier keys in your layout. Remember to make them as intuitive as possible for users. If the key combination is too complex, it will slow users down significantly when attempting to type. + +Remember to include capital letters in your list! Keyman treats these separately, so you will have to code uppercase and lowercase letters separately. + +Here’s an example of how to list your keystrokes. (This can also be reused when you document your keyboard’s layout later!) If you want to be thorough, you can also list the Unicode values for each character to avoid any confusion about which character is used. + +| Base | Modifier | Result | +|------|----------|--------| +| a | ^ | â | +| e | ^ | ê | +| i | ^ | î | +| o | ^ | ô | +| u | ^ | û | + +Once you have planned the visual layout of your keyboard and determined how to assign the rest of the keys on the keyboard, it’s time to begin coding. +If your layout is simple enough that you do not need to program additional keys, you do not need to worry as much about the next section. +In some cases, using Keyman’s visual editor is enough for a desktop keyboard. +Note that once you begin adding rules, the keyboard becomes too complex to modify with the visual layout tools, so it is best to do any visual layout work first using the `Design` tab, then add the additional rules using the `Code` tab. + +### Deadkeys + +The Step-by-Step tutorial uses `;` plus another key (`e E o O n N g G z Z`) to produce the ten additional characters (`ɛ Ɛ ɔ Ɔ ŋ Ŋ ɣ Ɣ ʒ Ʒ`). +When the “;” is typed it appears on the screen. +When one of the ten keys is typed directly after the “;” then the “;” is replaced by the corresponding additional characters. + +In contrast to this approach, the “deadkey” alternative could be used. +A deadkey produces no display when typed, but modifies the keystroke that follows it. +To use a deadkey approach for the Dagbani keyboard, we would use a rule to convert the `;` keystroke into a deadkey, which will not display on the screen, but will then be used to create the appropriate additional character when one of the ten characters is typed. +Some European language keyboards (French, for example) use deadkeys, so users in French-speaking countries may already be familiar with their use. + +While useful in some situations, deadkeys can also confuse users. +In this example, when the `;` key is pressed, it will not produce anything. +If you include deadkeys in your keyboard, be sure to document them well so that users understand what is happening when they type them. + +For more information, see the Keyman documentation for the [`deadkey()` statement](https://help.keyman.com/developer/language/reference/deadkey). + +### Reassigning keys + +But consider the Dagbani example again. +Suppose we don’t want to have to type two keys to obtain each of these additional characters (as if they were somehow inferior to the other twenty-six). +We could choose to design the keyboard so that typing `[ { ] } - _ = + \ |` will produce `ɛ Ɛ ɔ Ɔ ŋ Ŋ ɣ Ɣ ʒ Ʒ`, respectively. +That could be done with the `Design` mode using the visual layout tools, or by adding rules. +We would then want to add rules to allow the user to type the characters that were on the ten keys that we repurposed to type the additional characters, for example type the `;` key then the `[` key to get an actual `[` character. + + +[← Back: Part 1 - Creating a Keyboard Project](01-creating-keyboard-project) + +[Next: Part 3 - Creating a Desktop Layout →](03-creating-desktop-layout) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/walkthrough/03-creating-desktop-layout.md b/developer/docs/help/guides/develop/walkthrough/03-creating-desktop-layout.md new file mode 100644 index 0000000000..80b64b9fa6 --- /dev/null +++ b/developer/docs/help/guides/develop/walkthrough/03-creating-desktop-layout.md @@ -0,0 +1,327 @@ +--- +title: Creating a Desktop Layout +--- + +Part 3 of the [Keyman Developer Walkthrough](../walkthrough). + +[← Back: Part 2 - Designing a Desktop Layout](02-designing-desktop-layout) + +[Next: Part 4 - Using the Debugger →](04-using-debugger) + +## Step-by-Step + +On the “Creating a Keyboard Project” page, the **dagbani** keyboard project was created. +Keyman Developer displays a tab for the project file `dagbani.kpj` (just below the menu and toolbar). +There are tabs across the bottom for different steps in the process. + +![](images/keyboards-tab.png) + +- Click on the `Keyboards` tab at the bottom of the Keyman Developer window. +- Then click on the `dagbani.kmn` filename. This will open the dagbani.kmn file (as a second tab along the top, just below the menu and the toolbar) and display a set of tabs along the left side of the Keyman Developer window. Initially the `Details` tab is displayed and you can see some of the items you entered when creating the project. +- Click on the `Layout` tab from the set of tabs on the left. +- By default the `Design` view is shown and you can use the Character Map to assign characters to various keys: + +![](images/code-tab.png) + +- For this tutorial, however, we’re going to use the `Code` view. At the bottom of the Layout pane, click on the `Code` tab and the Keyman code is displayed: + +```keyman +store(&VERSION) '10.0' +store(&NAME) 'Dagbani' +store(©RIGHT) 'Copyright © SIL Global' +store(&KEYBOARDVERSION) '1.0' +store(&TARGETS) 'any' +store(&BITMAP) 'dagbani.ico' +store(&VISUALKEYBOARD) 'dagbani.kvks' +store(&LAYOUTFILE) 'dagbani.keyman-touch-layout' + +begin Unicode > use(main) + +group(main) using keys +``` + +- Choose one of the following two options (which produce equivalent results). You can type the lines or copy and paste from the tutorial. The first option lists a separate rule for each character. This may make it easier to understand what the rules do. The second option makes use of features in the Keyman language that allow more compact rules to be written. +- Option 1: Add the following lines after the `group(main) using keys` line. Each line has the code to generate one character based on “;” and a base key. + +```keyman +";" + "e" > "ɛ" +";" + "E" > "Ɛ" +";" + "o" > "ɔ" +";" + "O" > "Ɔ" +";" + "n" > "ŋ" +";" + "N" > "Ŋ" +";" + "g" > "ɣ" +";" + "G" > "Ɣ" +";" + "z" > "ʒ" +";" + "Z" > "Ʒ" +``` + +- Option 2: Add the following lines after the `group(main) using keys` line. The base keys are placed in one `store` (storage area) and the characters to produce are placed in a second store. The third line has a single rule that does the equivalent of the ten rules listed above. + +```keyman +store(basekey) "eongzEONGZ" +store(output_char) "ɛɔŋɣʒƐƆŊƔƷ" +";" + any(basekey) > index(output_char,2) +``` + +- Select the `Icon` tab on the left side of the window. This icon is displayed by the operating system when the keyboard is active. By default Keyman Developer creates a short abbreviation of the keyboard name (”DAG” in this case). You can use the color palette at the right to select different colors and click on squares in the grid to change their color. For this tutorial we will accept the default. +- Select the `On-Screen` tab on the left. This is the keyboard image that is displayed when the uses asks for help. As you can see it’s currently blank, which is not so helpful. +- Tick the `Auto-fill from underlying layout` checkbox at the bottom of the keyboard display. +- Then select the `Fill from layout` button at the top. Keyman Developer fills in the keyboard. Since we didn’t modify any keys, the display shows up as a normal QWERTY keyboard. This is still useful, since the on-screen keyboard can also be used to enter text and typing on a blank keyboard is difficult! +- Select the `Build` tab on the left, then the `Compile Keyboard` button. (Alternatively you can use the `Keyboard` menu, `Compile Keyboard` menu item to compile the keyboard. Or you can use the F7 function key as a shortcut.) +- You should see messages at the bottom indicating `dagbani.kmn built successfully`. If this is not the case, you’ll need to examine the error messages to see what the error is and correct it. + +To continue the Step-by-Step tutorial move to the next page: [Part 4 - Using the Debugger](04-using-debugger) + +--- + +## Using the Visual Editor + +At the end of the [Designing a Desktop Layout](02-designing-desktop-layout) topic, an alternative Dagbani keyboard design was mentioned. +In that approach, typing the +[ { ] } - _ = + \ | +keys would produce `ɛ Ɛ ɔ Ɔ ŋ Ŋ ɣ Ɣ ʒ Ʒ`, respectively. + +If you wanted to implement such a design, Keyman Developer's Visual Editor would be very useful. +When the `Layout` tab is selected on the left, Keyman Developer starts off in `Design` mode, displaying the keyboard. +If the Character Map is not displayed on the right-hand side of the window, +you can use the `View` menu and the `Character Map` menu item to show or hide it. +(Shift+Ctrl+C is a keyboard shortcut to accomplish the same thing.) + +![](images/charmap.png) + +To assign the `ɛ` character to the `[` key, locate the desired character in the Character Map and drag it to the desired key. +If you click on that key, you’ll see it change color and the information about it will be displayed below the keyboard layout. + +![](images/unicode-character-value.png) + +This shows: + +- `[` the default value from the QWERTY layout +- `ɛ` the value displayed on this key for the On-screen Keyboard (OSK) +- `U+025B` the Unicode value that the key will produce +- `ɛ` the character that the key will produce (the equivalent of the Unicode value) + +The last two of these values are linked. If you change one, the other will change. Most of the time the second and fourth items will be the same, but sometimes it might be helpful to display something different than what is actually produced. If, for example, the character being produced is not visible, such as a no-break space or a right-to-left mark, it might be helpful to display `NBSP` or `RTL` or some symbol to remind the user what the key produces. + +Clicking on the `Code` tab at the bottom of the window displays the code equivalent of the work in the visual editor: + +```keyman +group(main) using keys ++ [K_LBRKT] > 'ɛ' +``` + +Note that `[K_LBRKT]` is how Keyman Developer refers to the left square bracket key (the key just to the right of the “P” key on a QWERTY keyboard). +It also accepts `'['` or `"["` as equivalent ways to refer to that key. + +If you were to continue this example, you would drag the `ɔ` character to the `]` key and repeat the process for the other three lower case characters. Then you would click on one of the two “Shift” keys and repeat the process for the five upper case characters. + +## Understanding Keyman Code + +Keyman’s Visual Editor (the `Design` tab) is helpful in assigning characters to keys in a consistent manner. For a simple keyboard, it may be all that you need. It’s likely, however, that you’ll need to use the `Code` tab to provide the logic needed for your keyboard. + +When you begin an new project (using the “Project” menu, “New Project” menu item), Keyman Developer initializes your `.kmn` file. +With the `Layout` tab on the left selected, you will see two small tabs at the bottom of the window: the `Design` tab and the `Code` tab. +When you switch to the `Code` tab, you should see something like the following. (This example is from the Step-by-Step tutorial.) + +```keyman +store(&VERSION) '10.0' +store(&NAME) 'Dagbani' +store(©RIGHT) 'Copyright © SIL Global' +store(&KEYBOARDVERSION) '1.0' +store(&TARGETS) 'any' +store(&BITMAP) 'dagbani.ico' +store(&VISUALKEYBOARD) 'dagbani.kvks' +store(&LAYOUTFILE) 'dagbani.keyman-touch-layout' + +begin Unicode > use(main) + +group(main) using keys +``` + +The `store()` statements at the top are called the “header” of your file. +This is where the important information about your keyboard is stored. + +A summary of the elements of the Keyman header can be found in part of [another tutorial](https://help.keyman.com/developer/18.0/guides/develop/tutorial/step-3) and detailed information is in the official Keyman documentation: + +- [&version](https://help.keyman.com/developer/language/reference/version) +- [&name](https://help.keyman.com/developer/language/reference/name) +- [©right](https://help.keyman.com/developer/language/reference/copyright) +- [&keyboardversion](https://help.keyman.com/developer/language/reference/keyboardversion) +- [&targets](https://help.keyman.com/developer/language/reference/targets) +- [&bitmap](https://help.keyman.com/developer/language/reference/bitmap) +- [&visualkeyboard](https://help.keyman.com/developer/language/reference/visualkeyboard) +- [&layoutfile](https://help.keyman.com/developer/language/reference/layoutfile) +- [&mnemoniclayout](https://help.keyman.com/developer/language/reference/mnemoniclayout) + + +## Writing Keyman Rules + +The body of your code begins after the header. This is where the bulk of your keyboard’s functionality will be. + +```keyman +begin Unicode > use (main) +``` + +The preceeding line tells Keyman + +- to use Unicode encoding when typing characters, and +- to look for the rules determining what characters should be produced in `group(main)` . + +```keyman +group(main) using keys +``` + +is the default group for defining keyboard rules. This is where we will write code to implement the keystrokes you decided to use. + +For more advanced uses of the `begin` rule, like defining different rulesets based on typing context, see the [official Keyman documentation](https://help.keyman.com/developer/language/reference/begin). + + +There are a few key terms that you must know when writing rules: + +**Context** + +The context specifies the conditions that will trigger a rule. +If the character(s) to the left of the cursor match the context of a rule, the rule will be processed by Keyman. + +**Key** + +The key specifies which keystroke the rule will act upon. +For more information on keys and keystrokes, read the [official Keyman documentation](https://help.keyman.com/developer/language/guide/virtual-keys). + +**Output** + +The output determines which characters are produced by a rule. When a rule is processed, Keyman will replace the context with the output. + +The Context (which may be empty) is separated from the Key by “+”. + +The Key is separated from the Output by “>”. + +You can include comments in your Keyman code by typing a plain `c` followed by a space then any text you like afterwards. (If you want the letter “c”, you must surround in in quotes like `"c"`.) This is a good way to document your code and make things easier to read later, both for yourself and others. Comments can be made at the end of a line (with a space before the `c` as well as after) or be on their own line. Any text that follows the `c` through the end of the line will be ignored when the keyboard is compiled. + +Writing rules in Keyman is very straightforward for simple key substitutions. Suppose we want circumflex plus “a” to produce the character “â”. The Keyman code is actually very similar: + +`"^" + "a" > "â"` + +In this example, the **context** is `^`, the **key** is `a`, and the **output** is `â`. +Whenever Keyman finds the context (`^`) to the left of the cursor and the current keystroke is `a`, it will replace the context (and the typed character) with `â`. + +Characters written into Keyman code should always be surrounded by single quotes (`' '`) or double quotes (`" "`). +Either pair will work (as long as they match). +It is also possible to use the Unicode values of characters directly in the code. +These are never written with quotes around them. + +The previous line of code, when rewritten to use Unicode values, looks like this: + +```keyman +U+005E + U+0061 > U+00E2 +``` + +While less readable to a human, using Unicode values for uncommon or easily confused characters is often a good idea. + +It's possible to use a comment to provide both the Unicode value and the character itself, for example rewriting the above line as: + +```keyman +"^" + "a" > U+00E2 c â +``` + +At a glance, this tells you that a circumflex (`^`) combined with `a` will produce the Unicode character `â` (whose value is U+00E2). +Including a comment at the end of each rule that shows the output character will make reviewing your code significantly easier while still being extremely clear about which characters are used. + +Below is an example of useful comments in the SIL EL Ethiopic Latin keyboard explaining a set of rules and each rule’s output: + +![](images/characters-in-comments.png) + +Some Keyman rules have no context, that is, a context that is empty. The following line: + +```keyman ++ "e" > U+025B c ɛ +``` + +is an example of the most basic rule possible. You may have noticed lines like these in your code after using the `Design` tab to edit your keyboard. + +Note that rules created when using the `Design` tab use [virtual key codes](/developer/language/guide/virtual-keys#common-virtual-key-codes) rather than the corresponding characters. +This does not matter unless you are writing a [mnemonic layout](https://help.keyman.com/developer/language/reference/mnemoniclayout) keyboard. Keyman keyboards are positional by default, so unless you specify a mnemonic layout in your header, the following two lines of code will produce the same output: + +```keyman ++ "e" > U+025B ++ [K_E] > U+025B +``` + +### Stores + +Stores can be used to write concise rules that apply to a set of characters. +For example, in the following code, the store called `basekeys` contains the keys for five vowels. +A second group called `vowels_acute` contains the same five vowels (in corresponding order) with an acute accent. +And the single rule combines the apostrophe with a base vowel to produce a vowel with an acute accent. + +```keyman +store(basekeys) "aeiou" +store(vowels_acute) "áéíóú" +"'" + any(basekeys) > index(vowels_acute,2) +``` + +Thus the code above is equivalent to the following five rules: + +```keyman +"'" + "a" > "á" +"'" + "e" > "é" +"'" + "i" > "í" +"'" + "o" > "ó" +"'" + "u" > "ú" +``` + +You can read more about the `store`, `index` and `any` keywords in the [Keyman language documentation](https://help.keyman.com/developer/language/reference/). + +### Deadkeys + +At the end of the previous topic, an example was given of using the “;” key as a “deadkey”. Typing the deadkey produces no output, but it potentially changes the output of the following key. Changing the first two rules from the Step-by-Step example to treat the “;” as a deadkey, would result in: + +```keyman ++ ";" > dk(1) c Define ";" as a deadkey +dk(1) + "e" > "ɛ" c deadkey followed by "e" produces "ɛ" +dk(1) + "E" > "Ɛ" c deadkey followed by "E" produces "Ɛ" +``` + +If you follow the instructions for the Debugger, you’ll find that the keystroke log is the same, but in the right-hand side of the display, the “;” is replaced by an indication of the deadkey. + +### Groups + +Groups can be used in several ways to make your code simpler and more efficient. There are two types of groups: + +- groups that process only the context +- groups that process the context and the keystrokes + +You can read more about their uses in the [Keyman documentation](/developer/language/guide/groups). + +## Creating an On-Screen Keyboard Layout + +An on-screen keyboard (OSK) is a graphic representation of the desktop layout. It is displayed on the computer screen to show where keys are located. In can also be used to input text by clicking on the keys. + +Select the `On-Screen` tab on the left to display the layout (one layer at a time). +You can manually create the OSK by clicking on a key and typing the character that should be displayed there. + +It is also possible to create an on-screen layout automatically based on what you have designed and coded on the Layout tab. +(If you have manually created your on-screen layout information, you should be aware that the following automatic process will overwrite what you have created.) + +- Any key that you don’t reassign will have the function of the US English keyboard. If you are relying on this in your keyboard, you should tick the `Auto-fill underlying layout` box below the keyboard image. +- Select the `Fill from layout` button above the keyboard image +- Check the results. + +## Exporting an On-Screen Keyboard Layout + +One way to document a keyboard layout is to use images of the keyboard showing the different layers: default layer, Shift layer, Right-Alt layer, etc. +Keyman Developer provides a way to export such images from the `On-Screen` tab. + +Once you have the layout (created either manually or automatically), you can use the `Export` button. +Then complete the information needed: + +- Navigate to the folder where you want to create the files +- Supply a base filename +- For the `Save as type` field, select `Image (*.png)` +- Select `Save` +- In the `Output Bitmap Parameters` dialog, select `One file per shift state`, `Output Unicode keyboards`, and adjust the width of the image as needed, then select `OK`. Keyman Developer will create one or more files using the base filename plus letters to indicate the shift state plus `.png`. You can reference these files in your welcome.htm file. + +[← Back: Part 2 - Designing a Desktop Layout](02-designing-desktop-layout) + +[Next: Part 4 - Using the Debugger →](04-using-debugger) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/walkthrough/04-using-debugger.md b/developer/docs/help/guides/develop/walkthrough/04-using-debugger.md new file mode 100644 index 0000000000..2ccef0a387 --- /dev/null +++ b/developer/docs/help/guides/develop/walkthrough/04-using-debugger.md @@ -0,0 +1,34 @@ +# Using the Debugger + +Part 4 of the [Keyman Developer Walkthrough](../walkthrough). + +[← Back: Part 3 - Creating a Desktop Layout](03-creating-desktop-layout) + +[Next: Part 5 - Designing a Touch Layout →](05-designing-touch-layout) + +## Step-by-Step + +- From the `Debug` menu, select the `Start Debugging` menu item. Some extra fields will be shown. +- Type ;. The Keystroke log will show `;`. The display to the right has two sections. The upper section shows the characters displayed on the screen. The lower section shows a table of characters and their Unicode values. Here the upper section will show `;` and the lower section will show `;` and `U+003B`. (U+003B is the Unicode value for “;”.) +- Type e. The Keystroke log will show `;` and `E`. The display to the right will show `ɛ` in the upper section and `ɛ` and `U+025B` in the lower section. (U+025B is the Unicode value for “ɛ”.) +- Type ; then E. The Keystroke log will show `;` `E` `;` `Shift+E`. The display to the right will show `ɛƐ` in the upper section and `ɛ` and `U+025B` then `Ɛ` and `U+0190` in the lower section. + +![](images/debugger-output.png) + +- From the `Debug` menu, select the `Stop Debugger` menu item. + +To continue the Step-by-Step tutorial move to the next page: [Part 5 - Designing a Touch Layout](05-designing-touch-layout) + +--- + +## Running the Debugger + +See [https://help.keyman.com/developer/current-version/context/debug](https://help.keyman.com/developer/current-version/context/debug) for more information on running the debugger. + +## Interpreting Errors + +When compiling your Keyman code, Keyman Developer will report any errors, warnings and hints in the box at the bottom of the window. The message will give a short description of what the compiler found was wrong along with the line number of where the problem was detected. The error, warning or hint has an identifier (“KM02033” for example). This identifier is a link to a more detailed description. + +[← Back: Part 3 - Creating a Desktop Layout](03-creating-desktop-layout) + +[Next: Part 5 - Designing a Touch Layout →](05-designing-touch-layout) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/walkthrough/05-designing-touch-layout.md b/developer/docs/help/guides/develop/walkthrough/05-designing-touch-layout.md new file mode 100644 index 0000000000..8850187e8e --- /dev/null +++ b/developer/docs/help/guides/develop/walkthrough/05-designing-touch-layout.md @@ -0,0 +1,58 @@ +--- +title: Designing a Touch Layout +--- + +Part 5 of the [Keyman Developer Walkthrough](../walkthrough). + +[← Back: Part 4 - Using the Debugger](04-using-debugger) + +[Next: Part 6 - Creating a Touch Layout →](06-creating-touch-layout) + +## Step-by-Step + +In the Dagbani keyboard, `;e` was selected as the way to generate the character `ɛ` , but having to type a `;` on a touch screen followed by `e` to get the `ɛ` character would be tedious. It is preferable to assign `ɛ` as a longpress key on the `e` key. + +For the Step-by-Step tutorial, the design decisions have been made for you. We will be adding ten longpress keys to the default touch layout. + +To continue the Step-by-Step tutorial move to the next page: [Part 6 - Creating a Touch Layout](06-creating-touch-layout) + +--- + +## Creating a Basic Visual Layout + +Adding a touch keyboard layout to your keyboard project allows a user to input text on touch devices, such as tablets and phones. + +A desktop keyboard is dependent on the physical keyboard. With a touch layout, you will be displaying the keys on the device for the user to see and interact with. + +There is some flexibility in arranging keys, though adding too many keys to a row or too many rows to a layout will make the keyboard difficult to use. Additionally, there are options for activating a key: + +- touch, that is touch and release the key +- longpress, that is touch and hold the key, then select a character from a popup menu +- flick, that is touch the key and slide in one of eight directions +- mulitap, that is rapidly touch and release the key: one tap produces the base key, two taps produces the first multi-tap key, three produces the second multi-tap key, etc. + +## Planning Keystrokes + +You’ll want to plan your touch layout just as you did for the desktop (physical keyboard) layout. There is some value in making the touch layout similar to the desktop layout, but the primary concern is making it easy to use. + +Another possibility, if a small number of additional characters are needed, is to give each of them their own keys. This is possible since a touch layout is displayed on the screen. + +If you use Keyman Developer’s New Project feature, a touch layout is added automatically. + +## Using the desktop layout as a basis for the touch layout + +There are advantages to basing the touch layout on the desktop layout. +Users who switch between the two may benefit from the similarity. +In addition, your touch layout may be able to take advantage of the logic in the desktop layout code you’ve already created. +Specifically, if the `ID` field for a key in the touch layout begins with `K_` then the Keyman processes the keystroke information (as modified by the active layer of the touch layout) according to what is in the .kmn file. + +If you establish the desktop keyboard layout and create the On-Screen Keyboard, +you can switch to the Touch Editor and import from the OSK. +This will provide a “tablet” layout, with “default” and “shift” layers. +To switch to a “phone” layout, select the basic template, which rearranges the keys and moves some to a “numeric” layer. +(For more details, see the next topic.) +The result will need to be reviewed and tested, but using this approach may save you some time. + +[← Back: Part 4 - Using the Debugger](04-using-debugger) + +[Next: Part 6 - Creating a Touch Layout →](06-creating-touch-layout) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/walkthrough/06-creating-touch-layout.md b/developer/docs/help/guides/develop/walkthrough/06-creating-touch-layout.md new file mode 100644 index 0000000000..e2d383b0df --- /dev/null +++ b/developer/docs/help/guides/develop/walkthrough/06-creating-touch-layout.md @@ -0,0 +1,151 @@ +--- +title: Creating a Touch Layout +--- + +Part 6 of the [Keyman Developer Walkthrough](../walkthrough). + +[← Back: Part 5 - Designing a Touch Keyboard](05-designing-touch-layout) + +[Next: Part 7 - Writing Keyboard Documentation Files →](07-writing-keyboard-documentation) + +## Step-by-Step + +- Click on the `Touch Layout` tab on the left. The touch layout is shown, with the `q` key selected and details about the selected key shown on the right. Farther to the right is the Character Map which will be used in a later step. If the Character Map is not displayed, use the `View` menu, `Character Map` menu item to turn on the display. + + +![](images/add-longpress.png) + + +- Click on the `e` key to select it and display its information. +- Click on the `+` button in the `Longpress Keys` section. A new key is added (and the `+` button moved). The new key is given an arbitrary ID (`T_new_103` in this example). + +![](images/new-longpress-key.png) + +- Note that information about this key is placed to the right. + +![](images/longpress-fields.png) + +- We’ve added this longpress key to the `e` key. Now we want to make it (1) display `ɛ` so users will see what the key will produce and (2) change the ID so that activating this longpress key will generate `ɛ`. Find the `ɛ` character in the Character Map and drag it to the `Text` field. This will put `ɛ` in the `Text` field, `U+025B` in the `Text Unicode` field and `U_025B` in the `ID` field. + +![](images/charmap-to-text.png) + +Note: To find the `ɛ` character in the Character Map, you can use the scroll bar on the right to scroll down to `U+025B`. Alternatively, you can type `25B` in the `Filter by` field at the bottom of the character map. + +- Click on the `o` key in the keyboard layout. This will select the `o` key and display its information. +- Click on the `+` button in the `Longpress Keys` section. A new key is added (and the `+` button moved). The new key is given an arbitrary ID (`T_new_104` in this example). In addition, information about this key is placed to the right. +- We’ve added this longpress key to the `o` key. Now we want to make it (1) display `ɔ` and (2) change the ID. We could use the same procedure as in the previous steps, but this time we’ll use a different method. Click in the `Text Unicode` field and type `U+0254` (this will also place `ɔ` in the `Text`, but will not change the `ID` field). +- Click in the `ID` field and replace the generated ID (`T_new_104` in this example) with `U_0254`. (Note that the ID uses an underscore rather than a plus sign.) + +![](images/u-0254.png) + +- Add three longpress keys using one of the above methods: + - on the `n` key, add a longpress key for `ŋ` = U+014B + - on the `g` key, add a longpress key for `ɣ` = U+0263 + - on the `z` key, add a longpress key for `ʒ` = U+0292 +- You've made these five changes on the `default` layer. Now we need to switch to the `shift` layer. Select the drop-down menu under the `Layer` heading and select `shift`. + +![](images/shift-layer.png) + +- With the capital letters displayed on the keyboard, add five longpress keys using one of the above methods: + - on the `E` key, add a longpress key for `Ɛ` = U+0190 + - on the `O` key, add a longpress key for `Ɔ` = U+0186 + - on the `N` key, add a longpress key for `Ŋ` = U+014A + - on the `G` key, add a longpress key for `Ɣ` = U+0194 + - on the `Z` key, add a longpress key for `Ʒ` = U+01B7 +- Select the `Build` tab on the left and then the `Compile Keyboard` button. You should see a `dagbani.kmn built successfully` message. If you don’t, examine the error messages to see where the problem lies. + +### Testing the touch layout + +Keyman Developer provides a way to test your keyboard in a web browser. +- On the Build tab, you can select `Test Keyboard on web` followed by `Open in browser`. +- Select the `Keyboard` drop-down menu, then select the `dagbani` keyboard. You should have a display that looks like: + +![](images/test-keyboard-browser.png) + +- The display defaults to the Windows keyboard. You can type on the computer keyboard or use your mouse to click on the keys. Enter ; e ; o ; g ; z ; n and you should have the following result. + +![](images/test-keyboard-browser-display.png) + +- Select the `Device` drop-down menu and select `iPhone 5S`. The display will change to show a simulated phone screen with your touch layout. You can use your mouse to click on the keys. To access the longpress keys, click and hold, then slide the mouse to select the letter on the longpress key. Try this with the five longpress keys on `e` `o` `g` `z` and `n`. (There’s a dot in the upper right corner of the key to indicate the presence of at least one longpress key.) The period (full stop) also has a longpress menu that allows various punctuation characters to be entered. + +![](images/test-longpress.png) + +- If you click on the `Shift` key, the display changes to the `shift` layer and you can enter characters from that layer. +- When you are finished testing, you can close the browser tab. + +To continue the Step-by-Step tutorial move to the next page: [Part 7 - Writing Keyboard Documentation Files](07-writing-keyboard-documentation) + +--- + +## Configuring a Touch Layout + +There are a number of items to the left of the keyboard layout that allow you to configure the touch layout and select what portions to display. If you have done the Step-by-Step tutorial for this page, you’ve seen how to choose a different layer from the drop-down menu under the “Layer” heading. + +### Template and Import from On Screen buttons + +When you are initially creating a touch layout, it may be helpful to start from the On-screen Keyboard you created for the desktop layout and/or from a template. Since using these buttons overwrites the existing touch layout, you’ll only want to use them at the beginning of your touch layout work. + +- `Import from On Screen` will create a `tablet` layout with `default` and `shift` layers from the On Screen keyboard for the `desktop` layout. +- `Template`, then `template-basic` will distribute the keys for a `phone` layout with `default`, `shift` and `numeric` layers. +- `Template`, then `template-latin` will rearrange the keys for a `phone` layout with `default`, `shift`, `numeric` and `symbol` layers. It includes longpress keys for accented Latin characters. An identical `tablet` layout is also created. See the note under `Choosing the Platform` below. +- `Template`, then `template-traditional` will distribute the keys for a `phone` layout with `default`, `shift` and `numeric` layers, but also make a `tablet` layout based on the desktop one. + +### View Options + +By default the list of modifier-based layers is limited to the most commonly used desktop layers +(`default`, `shift`, `rightalt`, `rightalt-shift`, `caps`). +Selecting this option will extend that list to include layer names like `rightctrl-rightalt-shift`. +It doesn’t add these layers to the layout, but merely adds them to the list of predefined names that you could choose to use. +It’s likely you will never want to choose this option. + +You can always choose the `(custom)` option and enter any valid name (limited to A-Z, a-z, 0-9, underscore and hyphen). + +### Choosing the Platform + + Options are “phone”, “tablet”, “desktop” + +- A “phone” layout typically has four rows (counting the row with the space bar) with ten or eleven keys per row. A “tablet” layout typically has five rows with thirteen or fourteen keys per row +- Don’t include both a “phone” layout and a “tablet” layout unless those layouts are different. Keyman will use a “phone” layout on a tablet if no “tablet” layout exists and use a “tablet” layout on a phone if no “phone” layout exists. Thus it is twice the work (or more) to maintain identical “phone” and “tablet” layouts. +- The “desktop” layout option is not currently used. It is intended for Windows touch screens but currently Windows does not make it feasible to support custom touch keyboards. + +### Adjusting Keyboard Layers + +A keyboard layout generally includes multiple layers. (See description of [Keyboard Layer](glossary) in the glossary.) The Touch Layout editor displays one layer at a time. The “default” layer is the layer that is presented when no key (such as Shift) has been used to activate another layer. + +In the Touch Layout editor you switch layers using the drop-down menu described below. In addition, you need to make sure that each of the layer activation keys specifies in the “Next Layer” field which layer is to be activated. For example, on the default layer, the Shift key has “shift” in the “Next Layer” field, and on the shift layer, the Shift key has “default” in the “Next Layer” field. + +Under the “Layer” heading you can: + +![](images/layer-selection.png) + +- choose an existing layer from the drop-down menu to display that layer +- choose the “+” button to add a new layer (either choosing a name from the “Modifier-based layer” list, or choosing “(custom)” from that list and entering a name in the “Name” field) +- choose the “-” button to delete the layer whose name is displayed +- choose the “Edit” button to change the name of the current layer + +## Longpress, Flicks and Multitap Gestures + +If you completed the Step-by-Step tutorial for this topic, you added longpress keys to certain base keys in the touch layout by clicking on the “+” button in the “Longpress” section and supplying the needed information to define the longpress key. + +Similarly, if you wish to add a flick gesture, choose one of the eight “+” buttons in the “Flicks” section — the one that corresponds to the direction that you want to assign for this flick gesture — and click on it. Then supply the needed information to define that flick gesture. + +A multitap gesture is defined in a similar way. Click on the “+” button in the “Multitap” section and add the information to define the multitap key. The base key will respond as normal for a single tap, the first multitap key listed will respond to a double tap, the second multitap key to a triple tap, etc. + +Use care when combining different kinds of gestures as some of them may conflict. + +- Don’t use too many keys in a longpress menu +- Don’t use too many flicks. For example, NE, N, and NW flicks are easily confused +- When using north-flicks and longpress, be aware that the north-flick shortcut for the default longpress will be blocked +- Don’t assign too many multitap keys to the same base key + +## Reference + +See [https://help.keyman.com/developer/current-version/context/keyboard-editor#toc-touch-layout-tab](https://help.keyman.com/developer/current-version/context/keyboard-editor#toc-touch-layout-tab) for more details. + +## Testing Touch Keyboards + +See the end of the Step-by-Step section above for a description of how to use Keyman Developer to test your touch layout in a browser window. It’s also possible to transfer the .kmp file to a touch device and install the keyboard there for testing. + +[← Back: Part 5 - Designing a Touch Keyboard](05-designing-touch-layout) + +[Next: Part 7 - Writing Keyboard Documentation Files →](07-writing-keyboard-documentation) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/walkthrough/07-writing-keyboard-documentation.md b/developer/docs/help/guides/develop/walkthrough/07-writing-keyboard-documentation.md new file mode 100644 index 0000000000..c1475f82b4 --- /dev/null +++ b/developer/docs/help/guides/develop/walkthrough/07-writing-keyboard-documentation.md @@ -0,0 +1,110 @@ +--- +title: Writing Keyboard Documentation +--- + +Part 7 of the [Keyman Developer Walkthrough](../walkthrough). + +[← Back: Part 6 - Creating a Touch Layout](06-creating-touch-layout) + +[Next: Part 8 - Preparing a Keyboard Package →](08-preparing-keyboard-package) + +## Step-by-Step + +- Click on the `dagbani.kpj` tab at the top (just under the menu and toolbar), then click on the `Distribution` tab at the bottom. + +![](images/distribution-tab.png) + +- There are a number of files that provide information about the keyboard. Some are for the keyboard author and for maintainers of the Keyman keyboards repository, some are to help users of the keyboard understand how it works. + +![](images/history-md-file.png) + +- In the list of files, click on the `HISTORY.md` one to open that file. The file will open in a text editor and show you the information that you entered when setting up the keyboard project, specifically version 1.0, today’s date, and the author’s name. Since this information is correct, you can close this file by clicking on the red “X” on the righthand side of the `HISTORY.md` tab at the top of the text area. +- Click on `LICENSE.md` to open that file. This has been filled out using the Full copyright information you provided. Close the file by clicking on the red “X”. +- Click on `README.md` to open that file. This has been initialized for you. Close the file by clicking on the red “X”. (This file provides a place for information about the design of the keyboard that would be useful to a keyboard author wanting to update the keyboard or use it as a basis for a new keyboard. Don’t confuse it with the next item which is information for the keyboard user.) +- Click on `source\readme.htm` to open that file. This is the information displayed to the user just before the keyboard is installed. It has the description supplied when setting up the keyboard project. Other helpful information can be added, but the file should be kept as short as possible. Close the file. +- Click on `source\welcome.htm` to open that file. This is the help information that is packaged with the keyboard and available to the user. It should contain enough information so that the user can learn to type with the keyboard. This can be in the form of: + - image files referenced by the welcome.htm file, or + - a chart (in HTML format) showing how two keystrokes produce a character, or + - descriptive text in the HTML file, or + - some combination of the above. +- For this tutorial, we’re going to add one line of instruction. Find the following line: + +``` + +``` + +- Instead of inserting images, we're going to copy the following HTML text and paste it into the file: + +`

Type ";" followed by e o n g z E O N G Z to produce ɛ ɔ ŋ ɣ ʒ Ɛ Ɔ Ŋ Ɣ Ʒ

` + +- Close the welcome.htm file. Click “Yes” to save the changes. + +To continue the Step-by-Step tutorial move to the next page: [Part 8 - Preparing a Keyboard Package](08-preparing-keyboard-package) + +## Editing the README.md file + +The `README.md` file contains information about the keyboard useful for other keyboard authors who might revise or adapt the keyboard at some future date. This information is not presented to the end user. + +## Editing the LICENSE.md file + +If you filled out all the information in the New Project dialog, the `LICENSE.md` file should have been set up correctly. +Normally the only thing to change here would be changing the initial date into a date range (from `2026` to `2026-2027`, for example). +Changing the date in this manner is only needed when the keyboard is updated. + +## Editing the readme.htm file + +The `readme.htm` file is displayed as the user begins to install the keyboard. +It should contain a brief description of the keyboard with enough information to reassure the user that the right keyboard has been selected for installation. +Instructions for using the keyboard should be reserved for the `welcome.htm` file. + +## Editing the welcome.htm help file + +The `welcome.htm` file provides the help that is packaged with the keyboard. +This help file is displayed after the keyboard is first installed. +The user can also ask for the help file to be displayed. + +This file should contain enough information that the user can discover all the features of the keyboard. +This could be in the form of +- keyboard images for the different layers, +- a chart of how to type, +- a description of how to type (such as was used in the Step-by-Step tutorial), +- or some combination of these. + +One way to create keyboard images is to use the procedure in the "Exporting an On-Screen Keyboard layout" section of [Creating a Desktop Layout](03-creating-desktop-layout). +These images can be referenced from the welcome.htm file in this fashion: + +```html +

Desktop keyboard layout

+

Default (unshifted)

+

Default (unshifted) state

+

Shift

+

Shift state

+

Right Alt (unshifted)

+

Right Alt (unshifted) state

+``` +All the files to be included in the package must be specified in the Keyman package source (.kps) file. +These files end up in a single directory in the Keyman package (.kmp) file. +Thus it is preferable to put images referenced by welcome.htm in the same folder as the welcome.htm file in order to allow easy local testing. + +There are two approaches: +1. put the welcome.htm file and all the images it references in the `source` folder, or +2. create a `welcome` folder under the `source` folder and put the welcome.htm file and all the images it references in the `welcome` folder. + +Keyman Developer's `New Project` feature follows the first approach when it creates the directory structure for the new project. +If you decide to use the second approach (which might be helpful if you have lots of images to include), +you'll need to change the location of the welcome.htm file in the list of files in the package. +The easiest way to do this is to remove the welcome.htm file from the list, then add it again by navigating to the new location. + +For either of the two approaches, all the image files that are referenced by the welcome.htm file need to be added to the list of files to be included in the package. + +## Editing the PHP help file + +When a keyboard is submitted to the Keyman keyboards repository, a PHP file is included which provides the online help available on the [keyman.com](https://keyman.com) site. (If you do not plan to submit your keyboard to the Keyman repository, you don’t need to include this PHP help file.) + +The Keyman keyboards repository requires that this PHP file have the name of the keyboard project plus the `.php` extension and be located in a folder named `help`, which is located in the `source` folder. + +The PHP help file often contains the same information as is in the welcome.htm file. See [Keyman Keyboard help document (PHP help file)](https://help.keyman.com/developer/keyboards/phphelpfile) for more details. + +[← Back: Part 6 - Creating a Touch Layout](06-creating-touch-layout) + +[Next: Part 8 - Preparing a Keyboard Package →](08-preparing-keyboard-package) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/walkthrough/08-preparing-keyboard-package.md b/developer/docs/help/guides/develop/walkthrough/08-preparing-keyboard-package.md new file mode 100644 index 0000000000..86d59a1420 --- /dev/null +++ b/developer/docs/help/guides/develop/walkthrough/08-preparing-keyboard-package.md @@ -0,0 +1,63 @@ +--- +title: Preparing a Keyboard Package +--- + +Part 8 of the [Keyman Developer Walkthrough](../walkthrough). + +[← Back: Part 7 - Writing Keyboard Documentation](07-writing-keyboard-documentation) + +[Next: Part 9 - Distributing a Keyboard Package →](09-distributing-keyboard-package) + +## Step-by-Step + +- Select the `dagbani.kpj` project filename at the top (just under the menu and toolbar). +- Select the `Packaging` tab at the bottom, then the `dagbani.kps` file. This will open the Keyboard Package Source file and display some tabs down the left side of the window that will help you manage the content. Most of the information has been set up for you when you first created the keyboard project. + - The `Files` tab lists the files that will be included in the package. + - The `Keyboards` tab lists the language codes supported by this keyboard. +- Select the `Details` tab. +- If the value in the `Welcome file` field is `(none)`, then select that field and select `welcome.htm` from the drop-down list. +- Select `File` in the menu bar, then `Save` to save the changes. (The Ctrl+S shortcut also works.) +- Select the `Build` tab, then the `Compile Package` button. A **dagbani.kps built successfully** message should be displayed. +- Congratulations! You have successfully built and packaged a keyboard for the Dagbani language. + +To continue the Step-by-Step tutorial move to the next page: [Part 9 - Distributing a Keyboard Package](09-distributing-keyboard-package) + +--- + +## Package Files + +See the [Keyman Package Editor documentation](https://help.keyman.com/developer/18.0/context/package-editor) if you need more details on the following items. + +### Files + +In addition to the files that are included in the package by default when you create the keyboard project with the New Project feature, you have the option of adding additional files to the package. Files that might be added: + +- keyboard image files referenced by the welcome.htm help file +- fonts +- an image file (see under Details) + +### Keyboards + +Enter a language tag (that is, a BCP 47 tag) for each language supported by the keyboard. + +Optionally, you can specify an example of a word the keyboard produces and the keys used to produce it. + +If you include fonts in the package, you can specify that Keyman use them for displaying the on-screen keyboard or the touch keyboard. + +### Details + +Here is where you can enter information for: + +- Package name: Initially set to the name of the keyboard, so usually won’t need to change +- Welcome file: normally set to `welcome.htm` +- Readme file: normally set to `readme.htm` +- License file: normally set to `LICENSE.md` +- Version: Recommendation is to tick the `Package version follows keyboard version` box and leave the version field blank +- Copyright: normally established in the New Project dialog, but you can make needed changes here. Current practice is to omit the copyright year from this field (since it is in the [LICENSE.md](http://LICENSE.md) file). +- Author, Email address, Web Site: You can include as much or as little information about the author as you wish +- Image file: If you supply a 140 pixel wide x 250 pixel high image in JPEG or PNG format, then your custom image will be shown during installation (in place of the default Keyman image). Your image file must be added to the Files list before it will be available to be selected here. +- Related packages: If your keyboard is part of a group of keyboards, you can specify which other keyboards are part of the group. (For example, you might have three keyboards for the same language, one based on the QWERTY layout, one AZERTY, one QWERTZ, and you could use this field to note the relationship between them.) You can also use this feature to deprecate another keyboard that your keyboard supersedes. + +[← Back: Part 7 - Writing Keyboard Documentation](07-writing-keyboard-documentation) + +[Next: Part 9 - Distributing a Keyboard Package →](09-distributing-keyboard-package) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/walkthrough/09-distributing-keyboard-package.md b/developer/docs/help/guides/develop/walkthrough/09-distributing-keyboard-package.md new file mode 100644 index 0000000000..d2e0aff0e7 --- /dev/null +++ b/developer/docs/help/guides/develop/walkthrough/09-distributing-keyboard-package.md @@ -0,0 +1,35 @@ +--- +title: Distributing a Keyboard Package +--- + +Part 9 of the [Keyman Developer Walkthrough](../walkthrough). + +[← Back: Part 8 - Preparing a Keyboard Package](08-preparing-keyboard-package) + +[Next: Part 10 - Generating a Lexical Model →](10-generating-lexical-model) + +## Step-by-Step + +For the Step-by-Step tutorial, there’s really nothing to do for this page. This tutorial is for learning only, therefore you don't want to submit this keyboard to the Keyman keyboards repository (since it already contains a keyboard by that name). If you like, you could look at the other sections on this page before continuing the Step-by-Step tutorial (or come back to them later). + +To continue the Step-by-Step tutorial move to the next page: [Part 10 - Generating a Lexical Model](10-generating-lexical-model) + +--- + +## Submitting a keyboard to the Keyman Keyboards Repository + +Follow the instructions at [https://help.keyman.com/developer/keyboards/](https://help.keyman.com/developer/keyboards/) to submit your keyboard to the Keyman keyboards repository. This will enable anyone with Internet access to download and use the keyboard. (Please do not submit the Dagbani keyboard used in the Step-by-Step tutorial. There is already a Dagbani keyboard in the repository.) + +One requirement for keyboards that are submitted to the Keyman keyboards repository is the addition of a PHP help file that provides the online help available on the keyman.com site. See the **Editing the PHP help file** section of the [Writing Keyboard Documentation](07-writing-keyboard-documentation) page for more details. + +## Other Distribution Methods + +A keyboard package is contained in a file with the file type `.kmp`. The package contains everything needed for any of the supported platforms to run the keyboard. If you want to test a keyboard package, it is possible to transfer the `.kmp` file to a device with Keyman installed and use Keyman on that device to install the keyboard. + +With Keyman Developer running, it’s possible to select `Packaging`, and the `.kps` file, then the `Build` tab, and then select the `Test package on web`. This will display a number of possible Internet addresses where the keyboard could be downloaded over a local network to a device running Keyman. There are also options that will install the package on the local machine running Keyman Developer. + +The Keyboard App Builder (KAB) lets you put a Keyman keyboard (and optionally a lexical model) into an app for iOS or Android, which can be distributed. More details can be found on the [Keyboard App Builder](https://software.sil.org/keyboardappbuilder/) page. + +[← Back: Part 8 - Preparing a Keyboard Package](08-preparing-keyboard-package) + +[Next: Part 10 - Generating a Lexical Model →](10-generating-lexical-model) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/walkthrough/10-generating-lexical-model.md b/developer/docs/help/guides/develop/walkthrough/10-generating-lexical-model.md new file mode 100644 index 0000000000..47d908c0ce --- /dev/null +++ b/developer/docs/help/guides/develop/walkthrough/10-generating-lexical-model.md @@ -0,0 +1,373 @@ +--- +title: Generating a Lexical Model +--- + +Part 10 of the [Keyman Developer Walkthrough](../walkthrough). + +[← Back: Part 9 - Distributing a Keyboard Package](09-distributing-keyboard-package) + +[Next: Part 11 - Installing a Keyman Lexical Model →](11-installing-lexical-model) + +## Step-by-Step + +For the purposes of this tutorial, we'll use a very short word list (of only 25 words) +selected from the first chapter of the gospel of Mark from the online version of Dagbani Bible +([https://www.bible.com/bible/2264/MRK.1.DBWDB](https://www.bible.com/bible/2264/MRK.1.DBWDB)). +The sample text is a verse from that chapter, so it is not a very realistic test! +This is just so that you can see how the lexical model is used for predictive text. + +For a real project you would want thousands of words, ideally drawn from a number of sources. +In addition, the list of words should be reviewed. +(For details, see the discussion that follows the Step-by-Step section on this page.) + +- Open Keyman Developer, and select the `Project` menu and the `New Project` menu item. In the `New Project` dialog, select `Wordlist Lexcial Model`, then `OK`. + +![](images/new-lexical-model.png) + +- A `New Wordlist Lexical Model Project` dialog is displayed. +- In the `Author Name` field, put `SIL Global`. This also fills in the Copyright and Full Copyright fields. +- In the `Model Name` field, put `WL` (for `wordlist`). +- The version number defaults to `1.0` and we will keep that value. +- In the `Description` field, put **A test lexical model for Dagbani keyboard tutorial. Not for real use.** +- Select the `Add` button on the right and enter `dag` in the `Language tag` field and select `OK` +- Change the `Author ID` field from `sil_global` to `sil`. +- Verify that the `Model ID` field now shows `sil.dag.wl`, then select `OK`. + - Note: If you are using Keyman Developer 17, it might display the message **This project file is in an old format. You should update it to the Keyman Developer 17.0 project format.** If so, select the `Upgrade project` button. + +- Select the `Models` tab at the bottom of the window, then select the `sil.dag.wl.model.ts` file. +- Tick the `Language uses casing` checkbox (located on the `Details` tab) +- In this tutorial, we're going to open a file, copy its contents, then paste those lines into the `wordlist.tsv` file to replace the default content. Depending on how your browser is configured, when you open the file, it may open in a new tab or it may open in the same tab as this set of instructions. In the first case you can close the tab to return here, but in the second case you'll need to use the Back feature of your browser. (You may want to read ahead to make sure you understand the next few steps since the instructions might be hidden temporarily.) +- Click on the **dag-short-wl.txt** filename just below this paragraph to open the file (or right-click and select Open in a new tab). + +[dag-short-wl.txt](./dag-short-wl.txt) + +- Use Ctrl+A to select the entire contents and Ctrl+C to copy the selected text. +- Return to these instructions, either with the browser's Back feature, or by closing the newly opened tab, as appropriate. +- In Keyman Developer, select the `wordlist.tsv` tab on the left, then the `Code` tab at the bottom, then use Ctrl+A to select the entire contents and Ctrl+V to paste in the text that you just copied in a previous step. +- Use `File`, `Save` (or, alternatively, the Ctrl+S shortcut) to save the modified wordlist.tsv file. +- Select the `Build` tab on the left, then the `Compile Model` button. Verify that the **sil.dag.wl.model.ts built successfully** message is displayed. +- To test the model, we’ll first select the keyboard that we made in an earlier step. (The following instructions assume that the default location was chosen when creating the keyboard project and the lexical model project. If you chose a different location, you’ll need to navigate there.) Select the `Browse` button and Keyman Developer will open a file navigation window. Navigate to the `Documents` folder, then the `Keyman Developer` folder, then `Projects`, then `dagbani`, then `build`, then open the `dagbani.js` file. This will fill in the `Keyboard for testing` field. + +![](images/test-lexical-model-setup.png) + +- Select the `Test Lexical Model` button, then the `Open in browser` button. You should have a new browser tab that looks like: + +![](images/keyboard-model-device.png) + +- Select the `Keyboard` button and choose the `dagbani` keyboard from the list. +- Select the `Device` button and choose one of the `Phone Devices` from the list. (The illustrations were made with the `iPhone 5S` option.) +- Select the `Model` button and choose the `sil_dag_wl` lexical model from the list. +- Click in the text area (box with pale yellow background). The text we’re using as a test is **Ka bɛ daa dii chɛ bɛ lansi maa ka dol’ o.** You’ll be using the mouse to simulate the phone’s touch screen (unless your computer has a touch screen). Move your cursor to the desired key on the display, then click the mouse to “touch” the key. +- Click the Shift key (the key on the left with an uparrow), then K, then select **Ka** from the banner. + +![](images/test-lexical-model-k.png) + +- Click b, then select **bɛ** from the banner. +- Since **daa** is in the banner already, select it. +- Click d, then select **dii** from the banner. +- Click c, then select **chɛ** from the banner. +- Click b, then select **bɛ** from the banner. +- Click l, a, n, s, i, and the space bar. +- Since **maa** is in the banner already, select it. +- Since **ka** is in the banner already, select it. +- Click d, then select **dol’** from the banner. +- Click o and . to conclude this test. +- Close the browser tab and return to Keyman Developer. +- Select `sil.dag.wl.kpj` from the top of the window (under the menu bar and toolbar), then select the `Packaging` tab at the bottom, then the `sil.dag.wl.model.kps` file. +- Select the `Details` tab on the left. + - If the `Welcome file` field contains `(none)`, select that field and choose `welcome.htm` from the list. Use the Ctrl+S shortcut to save the change. +- Select the `Build` tab on the left. Then select the `Compile Package` button. Verify that you get the **sil.dag.wl.model.kps built successfully** message. +- Congratulations! You have successfully built and packaged a lexical model for the Dagbani language. + +To continue the Step-by-Step tutorial move to the next page: [Part 11 - Installing a Keyman Lexical Model](11-installing-lexical-model) + +## Introduction + +A Keyman touch layout can link to a lexical model in order to suggest words to automatically finish what you are typing, based on the characters you have already entered. The currently available lexical models only predict words based on how frequently they are used in the entire language, and will not suggest next words according to context or grammatical rules. However, for languages with long words or complex character combinations, lexical models can be a valuable tool to aid users of your keyboard. + +## Before You Begin + +In order to create a lexical model for a language, you should have one or more sources of words in the language. Examples could be: + +- Text files written in the language of your lexical model +- A lexicon or dictionary, from which you can export a list of words + +You should choose sources with open licenses (such as Creative Commons, MIT, etc). You may need to ask the source for permission to relicense the list of words under the MIT license if you submit the lexical model to the Keyman lexical models repository (which always uses the MIT license). + +## Creating a Lexical Model + +Keyman Developer allows you to create a lexical model project, which is separate from your keyboard project. The link between a keyboard and a lexical model depends on having a BCP 47 code in common. Although it may seem confusing to make a separate project for a lexical model that is intended to go with your existing keyboard, this separation allows a lexical model to be used by any keyboard that supports that language. Similarly a keyboard user might have multiple lexical models to choose from. + +In Keyman Developer, from the `Project` menu, select `New Project`. In the `New Project` dialog, select `Wordlist lexical model` from the list. Another dialog will appear to collect the basic information for your model. + +### **Author Name, Author ID and Copyright** + +Enter your name in the `Author Name` field. The value in this field is also used in the `Copyright`, `Full Copyright` and `Author ID` fields. If the copyright is held by an organization, adjust the name in the copyright fields. The name that appears in the copyright fields needs to be the full name of an individual or organization. + +The `Author ID` value is based on your name (if you are working independently) or the name of your organization. You should use the shortest feasible version of the name (initials, for example), since the `Author ID` is the first of the three parts of a lexical model project. It will also become the parent folder in Keyman’s repository for all lexical models submitted by you or your organization. + +### Model Name + +This is the third of the three parts of the complete lexical model project name. It serves to distinguish between multiple lexical models by the same author for the same BCP 47 tag. + +You could use: + +- the name of the language this lexical model will serve +- some indication of the source of the words +- the type of lexical model, such as “wordlist” or “wl” (since Keyman currently only supports wordlist-based models) + +As with the keyboard project ID, you are limited to lower case ASCII alphanumeric characters and the underscore character. + +### Version + +For a brand new model, there is no need to edit this. However, when making changes or additions to a lexical model, increment the first digit (for example, from `1.0` to `2.0`) for major changes, and the second digit (for example, from `1.0` to `1.1`) for minor changes. (As with the version number for keyboards, an optional third digit is available for revisions. Do not use more than three numbers. Don’t add zeroes to the beginning of numbers.) + +### Languages + +As with a keyboard, you must add a BCP 47 tag to your lexical model to properly identify the language it is intended for. This is the link that allows Keyman to match keyboards and lexical models. It will be used as the second of three parts of the complete lexical model project name. + +Select `Add` and fill in the fields accordingly. You’ll want to use the same BCP 47 tag which you used in the [Creating a Keyboard Project](01-creating-keyboard-project) step. + +![](images/add-language.png) + +It is best to use the simplest possible BCP 47 tag to identify your language. Only add Script and Region tags if you are specifically working with a script or region that differs from the most commonly used form of your language. + +### Description + +For the `Description` field, you can simply state that this a lexical model based on a list of words for the specific language. You might also include information about where those words were gathered. (Don’t, however, include details about how many words are included. Otherwise you’ll need to revise the description everywhere it’s used for each new version of the lexical model that changes the word count!) + +Note how the `Model ID` field is automatically filled in. +The naming scheme for lexical models is `author_name`.`language-tag`.`model_name`. +The `language-tag` value is derived from the `Primary Language` that you choose, so be sure to select the correct language. +If your Author or Model names are excessively long, edit the `Author ID` and `Unique Name` fields respectively to give your project an abbreviated name. (For example, in the Step-by-Step section, the Author field was changed from "sil_global" to "sil".) + +Once you have filled out all of the fields, you are ready to create your lexical model. + +## Details + +Keyman will place you in your `.kpj` file immediately, as with a keyboard project. Navigate to your `model.ts` file. On the `Details` tab, you’ll find some options. + +Currently `Wordlist (trie-1.0)` is the only choice for the `Format` field. + +You’ll normally want to keep the `default` choice for the `Word breaker` field and the `(Space U+0020)` option for the `Insert after word` field, unless you are dealing with an orthography that doesn’t use space to separate words. For scripts such as Khmer, Thai, and Lao, which have special ways to delimit words, see the Keyman documentation on [coding a custom word breaker](https://help.keyman.com/developer/current-version/guides/lexical-models/advanced/word-breaker). + +You can specify the opening and closing quotation marks, and whether the language is using a right-to-left script (such as Arabic, Hebrew, Syriac, etc.) + +If your language uses a script with uppercase and lowercase (such as Latin, Cyrillic, Greek, etc.) you probably will want to enable the `Language uses casing` checkbox, so that Keyman will take casing into account when matching and suggesting words. For example, if you start typing `Rab`, Keyman will propose `Rabbit` rather than `rabbit`. + +The Keyman site has more details on [advanced topics](https://help.keyman.com/developer/17.0/guides/lexical-models/advanced/word-breaker). + +## Editing Wordlists + +On the `Details` tab, there is a field labeled `Wordlists`, where one or more wordlist files are specified. Every wordlist that you add to your lexical model will be listed in the “Wordlists” list on the “Details” tab and have its own tab below the “Details” tab. + +Keyman provides a default `wordlist.tsv` file for you as an example. You can replace its contents with your own data or remove it. Use the buttons on the right to add or remove wordlists. + +For a newly created project, the only wordlist present is `wordlist.tsv`. +If you open that file, you'll see some sample data included as an illustration. + +For advanced information on Keyman wordlist file formats and exporting your own wordlist files, read the [TSV file documentation](https://help.keyman.com/developer/17.0/reference/file-types/tsv). + +### Ignored lines + +Any line beginning with `#` is ignored. You can write any notes or commentary on such lines. + +### Word Form + +The `Word Form` is the first column of your wordlist, and will contain every single word that you want your lexical model to suggest to users while typing. Naturally, this includes grammatical variations and other alternate forms of words used in your language. + +### Count + +The `Count` is the second column of your wordlist, and is a number indicating the relative frequency with which a word appears in your language. This is most commonly done by an automated count of words that occur in actual texts in your language, but it is possible to manually adjust the frequency count of one or more words. + +If the `Count` field is empty for a given word, it will be counted as one. If you omit the `Count` field for all the words in a file, they will all be considered equally likely. Your lexical model will be more useful if it can suggest words according to how common they are. + +Since a lexical model project can have multiple wordlist files, you could have one file with words and frequency counts derived from actual documents in the language, then add a second file extracted from a lexicon with no frequency count. +When compiling the model, Keyman Developer will add the counts. +In this way the lexicon will provide some less common words with a frequency count of one (and increase by one the frequency count of words in the first wordlist). +Thus the list from the lexicon can supplement the list formed by analyzing actual documents. + +### Comment + +The `Comment` is the third column of your wordlist. This is an entirely optional column, but if you would like to leave notes for certain words, you can insert your notes into the third column of your `.tsv` file and Keyman will ignore them while processing your wordlist. + +### Simple Tool for Wordlist Creation + +PrimerPrep is a tool that will extract words from text files and create a simple .tsv file in the correct format for use in your lexical model. +The [Generating Wordlists with PrimerPrep](#toc-generating-wordlists-with-primerprep) section at the end of this page gives a brief tutorial on how to use PrimerPrep to create a wordlist suitable for your lexical model. + +### Importing Wordlists into Keyman Developer + +In Keyman Developer, with your lexical model project open and the .model.ts file selected, select the `Details` tab to see the list of wordlist files included in this lexical model. If you have another file (perhaps one created with PrimerPrep) which you want to addd, select the `Add` button on the far right and navigate to the file to be included. You’ll see a dialog something like the following: + +![](images/copy-wordlist.png) + +Click `Yes` so that Keyman can make a copy of this file to include with the other source files your lexical model project. + +You’ll also want to `Remove` the default `wordlist.tsv` file (unless you have replaced the example content with your own data). + +Note that if you remove a wordlist (the default `wordlist.tsv`, for example) from the `Wordlists` list on the `Details` tab, the file itself will not be removed from your project folder. +You will have to use a file manager to delete any unnecessary wordlist files yourself. +If you decide not to use the default `wordlist.tsv` file, you should remove it from the list on the `Details` tab, then delete it from your project files. + +Once you have specified one or more wordlist files, save your project and compile it. +You should now have a lexical model that is compatible with any keyboard that uses the same BCP 47 tag as the lexical model. + +## Testing Lexical Models + +To test your lexical model, go to the `Build` tab of your `model.ts` file and click `Test Lexical Model`. Keyman will start up a development server to let you test keyboards and models on the web. + +If you are working with your own keyboard and lexical model and have previously compiled your keyboard and run it on the Keyman development server, it will already be among the options for testing. +However, you can also add your keyboard for direct testing in the `Keyboard for testing` field. Simply click the `Browse...` button and search for your keyboard’s `.js` file. It should be located inside your keyboard’s `build` folder. + +Once Keyman confirms that your testing server is active, you can scan the generated QR code with a mobile device to begin testing. + +Another testing possibility is to select the `Open in Browser` button and a new browser window (or tab) will open with three dropdown lists at the top of the page: `Keyboard`, `Model`, and `Device`. +- Set the `Device` to one of the `Phone Devices` or `Tablet Devices` options. +- Set `Keyboard` to the keyboard you selected. +- Then set `Model` to the lexical model you are testing. You can then test the lexical model on the simulated keyboard. + +## Packaging + +Just like a keyboard, the lexical model must be packaged before it is ready for distribution and use with a Keyman keyboard. +Use the `Packaging` tab at the bottom of the screen and select your .kps file. +You can then select the `Build` tab on the left and then the `Compile Package` button to create the package (.kmp) file. + +## Publishing a Lexical Model + +You can submit your lexical model to the Keyman lexical models repository in a manner similar to submitting a keyboard to the keyboards repository. +This makes the lexical model available to anyone with Internet access. +See [Guide for Lexical Model Submissions](/developer/lexical-models/submission/). + +The [Distribute lexical modes to Keyman Applications](../../lexical-models/distribute/packages) page details other distribution possibilities. + +In addition, it is possible to use [Keyboard App Builder](https://software.sil.org/keyboardappbuilder/), which will allow you to build an app that includes Keyman, a specific keyboard and a specific lexical model. +You can then distribute this app to users directly or through the platform's source of apps. + +## Generating Wordlists with PrimerPrep + +Creating a wordlist manually is a difficult task. +Instead, wordlists are usually generated using a software tool that can process text files written in the given language, +identify unique words and tally up how frequently they appear in the text. + +One tool that can do this is [PrimerPrep](https://software.sil.org/primerprep/), which is available for free on Windows and Linux. This tutorial will cover how to use PrimerPrep to generate a wordlist from preexisting texts. + +Before generating a wordlist with this method, you must first have one or more texts to take words from. This allows you to include relevant and commonly used words and their various grammatical forms in your lexical model, rather than attempting to select appropriate words yourself. + +When selecting texts to use in generating your lexical model, try to find long texts that include a variety of formats and uses of the language. This increases the likelihood that your lexical model will cover common wordforms and accurately predict the most frequently used words. + +Be sure to back up the original text and save your edited version under a new name. You will need to cut various unwanted words from the document before generating a wordlist from it, which is obviously undesirable if you need the full document later. + +For the purposes of this tutorial, we’ve provided a sample text that you can download and use to follow along with instructions. If you already have a project in mind and appropriate sample texts, feel free to use those instead. + +The sample text is a collection of folktales for the Fulfulde language. Right-click on the **Anduna_anndaaka.txt** link below and select `Save link as` and navigate to a folder where you can save the file and work on it. After you have deleted some unneeded words from the file you'll use PrimerPrep to create a wordlist file that you will then include in the `source` folder of your lexical model project. + +[Aduna_anndaaka.txt](./Aduna_anndaaka.txt) + +### File Preparation + +Before extracting words from a document to create a wordlist, you can first remove any words that are unlikely to be needed by users. (Alternatively, you can create the wordlist first and remove unwanted words later, but that may end up being more work.) + +Generally, you'll want to exclude such words as: + +- Proper nouns (names, places, etc.) +- Acronyms and abbreviations (e.g. D.I.Y., LHR) +- Numerals and extra symbols +- Anything that is not used as a regular word in the language + +PrimerPrep will remove any punctuation and numerals for you when it processes your document, but you will need to remove proper nouns and acronyms before using PrimerPrep. The easiest way to do this is with Regular Expressions (Regex), which allow you to quickly find specific strings of characters and remove them from your document. + +If you do not have a word processing app that supports Regex searches, you can download and use the free program [Notepad++](https://notepad-plus-plus.org/downloads/). Otherwise, feel free to use your Regex-compatible word processor of choice. + +When you open the Aduna_anndaaka.txt file you’ll notice that the title page is written in French. Delete everything that comes before the following line: + +``` +Aysata Aamadu Siise +``` + +The lines before it are either in French or contain mostly acronyms or proper nouns, which we do not want to include. + +In general, you will want to ensure that the text you are processing contains only text in the language for which you want to create a lexical model, so that your model won't suggest words in a different language. +This is especially important if you are using a text that contains translations or other footnotes meant for non-native speakers. + +Open up the file you want to take your wordlist from in Notepad++. In our case, this is `Aduna_anndaka.txt`. +In Notepad++, press Ctrl+H (or from the `Search` menu, select `Replace`) to open the Find and Replace dialog. +Enable the `Regular Expression` setting at the very bottom. + +![](images/notepadpp-regex.png) + +You will need to perform several Regular Expression (Regex) search and replace operations to remove unneeded elements from the document. +For each Regex string, simply paste it into the `Find what:` field, and leave the `Replace with:` field blank. +(A blank “replacement” effectively deletes what the search finds.) + +The regular expressions provided here are tailored for the Fulfulde language, which includes the characters `ɓɗɲŋƴ` and `ƁƊƝŊƳ`. +You may have to dive deeper into Regex rules to filter words in languages that use different character sets. +[Regex101](https://regex101.com/) is a great resource for building and testing regular expressions. +Just make sure that the Regex “flavor” you use on the site matches that of your word processor. + +### Removing Proper Nouns + +``` +\b[A-ZƁƊƝŊƳ][a-zɓɗɲŋƴ]*\b +``` + +This Regex searches for any words that begin with an uppercase letter followed by zero or more lowercase letters. +(The `\b` represents a word boundary. `[A-ZƁƊƝŊƳ]` represents one of 31 uppercase letters. `[a-zɓɗɲŋƴ]` represents one of 31 lowercase letters, however `*` indicates that `[a-zɓɗɲŋƴ]` should be repeated zero or more times.) +Although it will also remove any words that begin a sentence (or words that are in titles), it will remove most unwanted names. +The idea is that if a word is common enough, it will appear multiple times in different places, so it is acceptable to remove the few times the word happens to begin a sentence. + +- Make sure to activate the `Match case` option when using Regex to look for capitalized letters. Otherwise, it will match words of **any** case (and may replace your entire document)! + +![](images/notepadpp-case.png) + +- Copy the regular expression above and paste it into the `Find what` field. +- Select the `Find Next` button a few times to see what Notepad++ is matching. It should be highlighting capitalized words only. (Note that Notepad++ highlights the matched word in one color and also, in a slightly different color, any other occurrences of the same word, **regardless of case**. This can be confusing.) +- Once you’re satisfied with the results, return to the top of the file and select `Replace All`. + +### Removing Acronyms + +``` +\b([A-ZƁƊƝŊƳ][.-]?)+\b +``` + +This Regex will remove all words that are either in ALL CAPS, or in caps with separating punctuation (i.e. D.I.Y.). +Note that if the acronym does have separating punctuation, there may be one last `.` left on the end. +This is not a problem because PrimerPrep will clean up all of the punctuation for us later. + +- Return to the top of the file +- Copy the regular expression above and paste it into the `Find what` field. +- Select `Find Next`. In this case, you will likely get a `Can't find...` message, indicating that no matching acronyms were found. +(If it is matching random words, ensure that `Match case` is checked.) +For this text, this particular test wasn't needed. Deleting the front matter from the text removed several acronyms already. + +Your text should be ready for PrimerPrep now. It may look messy to a human, but PrimerPrep will ignore all of the extra spaces and punctuation and simply extract the words from the document. It will look something like this: + +![](images/primerprep-input.png) + +- Save your file with a new name (`Aduna_anndaaka_lowercase.txt` for example) and place it somewhere that will be easy to find. + +### Generating the Wordlist + +- If you haven’t already, download [PrimerPrep](https://software.sil.org/primerprep/downloads/) and run it. This is the basic appearance: + +![](images/primerprep-start.png) + +It may look complicated, but the wordlist generation only uses one of the functions of PrimerPrep. + +- Select the `Add Text(s)` button +- Navigate to the text you just prepared +- Double-click on the file (or select the file and then select `Open`). It should populate the window with words and frequency counts: + +![](images/primerprep-with-words.png) + +- From the `File` menu, select `Save Word List` and save your wordlist file in an appropriate location. Be sure to rename it something that distinguishes it from any other wordlists you may generate. PrimerPrep suggests a `.txt` extension, but Keyman generally uses `.tsv` + +That’s all you need to do. You can now exit PrimerPrep and return to Keyman Developer. PrimerPrep will warn you about unsaved data, but you can safely ignore this because you have saved the wordlist file and don't need other functions of PrimerPrep. + +Note: The text provided for this tutorial is already in a `.txt` file format. For your own project, you may be working with files in other formats and you will need to convert them to a `.txt` file in UTF-8 Unicode encoding in order to import them into PrimerPrep. For example, if your files are in Microsoft Word format, the dialog for saving a `.txt` file would look something like this: + +![](images/windows-save-txt.png) + +[← Back: Part 9 - Distributing a Keyboard Package](09-distributing-keyboard-package) + +[Next: Part 11 - Installing a Keyman Lexical Model →](11-installing-lexical-model) diff --git a/developer/docs/help/guides/develop/walkthrough/11-installing-lexical-model.md b/developer/docs/help/guides/develop/walkthrough/11-installing-lexical-model.md new file mode 100644 index 0000000000..34e78f8216 --- /dev/null +++ b/developer/docs/help/guides/develop/walkthrough/11-installing-lexical-model.md @@ -0,0 +1,32 @@ +--- +title: Installing a Keyman Lexical Model +--- + +Part 11 of the [Keyman Developer Walkthrough](../walkthrough). + +[← Back: Part 10 - Generating a Lexical Model](10-generating-lexical-model) + +## Step-by-Step + +For the Step-by-Step tutorial, there’s really nothing to do for this page. +This tutorial is for learning only, therefore you don't want to submit this lexical model to the Keyman lexical-models repository. +You could look at other sections on this page if you like. + +This concludes the walkthrough. Hopefully it has given you an overview of the entire process. + +--- + +## Submitting a lexical model to the Keyman Lexical Models Repository + +Follow the instructions at [https://help.keyman.com/developer/lexical-models/](https://help.keyman.com/developer/lexical-models/) to submit your lexical model to the Keyman lexical models repository. This will enable anyone with Internet access to download and use the lexical model. (Please do not submit the Dagbani lexical model used in the Step-by-Step tutorial. It’s really not suitable for submission to the repository.) + +Once the lexical model has been published, any Android or iOS device with Keyman installed and access to the Internet should be able to access and load the lexical model for use with a keyboard with the same language tag (BCP 47 code) as the lexical model. + +## Other Distribution Methods + +If an Android or iOS device has access to the Keyman package file (.kmp) that contains the lexical model, the Keyman program on the device can load the model. This access could be over the Internet, over a local network or by moving the file to the device’s file storage. + +As mentioned earlier, the Keyboard App Builder (KAB) lets you put a Keyman keyboard along with a lexical model into an app for iOS or Android, which can be distributed. +More details can be found on the [Keyboard App Builder](https://software.sil.org/keyboardappbuilder/) page. + +[← Back: Part 10 - Generating a Lexical Model](10-generating-lexical-model) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/walkthrough/Aduna_anndaaka.txt b/developer/docs/help/guides/develop/walkthrough/Aduna_anndaaka.txt new file mode 100644 index 0000000000..545a0a1ad2 --- /dev/null +++ b/developer/docs/help/guides/develop/walkthrough/Aduna_anndaaka.txt @@ -0,0 +1,439 @@ + +Adunaaru anndataako +(Le monde est inconnu) + +Aysata Aamadu Siise +e Haawa Amiiri Duwansa + +Un livre de contes, proverbes, etc. + +Ecrit par Aysata Aamadou Cissé +Raconter par Hawa Amiri de Douentza + + + + + + + + +© Tous droits réservés, 2001 + +Dépôt : + +MELM, B.P. 33 Sévaré + +Jannde Fulfuldé, B.P. 34 Sévaré + +Puɗɗooɗe: + Miɗo winnda dewtere ndee fewtude e tokara am Ay Daado, abbam e mammam. + Haawa Amiiri Duwansa pillaniiɗo kam ɗii fillaaji e puri. + Teddungal manngal e MELM e PDI-MELM laatiiɓe sabaabu faa dewtere ndee waɗee. + Mi barkinii sanne Aminata Sidibe (Anne Lise), Abdullaayi Bari (Morten) e Umaru Siise (Ingvald Frøyen), hooreejo PDI-MELM Alayiɗi Bari, Bookar Ba, Mawluudu Dikko, balluɗo kam e gollidiiɓe am fuu e ley porojee oo. + + +Aysata Aamadu Siise +Hammadiyel kinkeƴuru + Ɗum waɗiino debbo gooto e gorum, debbo oo haamili tan gorko oo ɲawi, o wii o hulii! So o maayii, so debbo oo ana rima fuu hippa la'al kirtorgal makko ngal de o rima, so suka oo gorko duu o inndira ɗum Hammadiyel kinkeƴuru. O waɗi non. Ko suka oo mawni ɗum, o wii inniiko: +• Ko tawu-mi abba ana golla? +Inna oo wii: +• Abba maa o donsanke. +Cukalel ngel ɓami malfa abba mum, fiɗi lelli, jaawle e kulle ladde hokki inna mum faa ɓe ɲaama. + Amiiri wuro ngoo duu ana wiyee Hammadi Arɗo, omo jogii ndawwal, so ngal warii e boɓi fuu neɗɗo suusaa riiwde ngal faa ngal haara, so gawri maa timmi fuu timmii, walaa ko mbaaw-ɗaa, sabi riiwataake Amiiri jey ngal. + Ɲannde wootere ndawwal ngal wari watti hundoko mum e ley wowru inna Hammadiyel kinkeƴuru, inna oo huli, seli unde faa o wari, o wii: +• Inne, ko saabi a riiwataa foondu nduu ana ɲaama gawri maa? +Inna oo wii: +• Miɗa hula, ɗum ndawwal Amiiri. +Hammadiyel kinkeƴuru fii ndawwal, nanngi ngal, hirsi, hokki inna mum defa. Kaɲum duu ana defa tan ana henta nebbam ana watta e looɗe. + Hiiri ndawwal ngal wartaali, inna Hammadi Arɗo yalti ana tewta faa futoro, o yiitaayi. Nden o noddi garibaaɓe, o wii: +• Njaa garbinowa e ley cuuɗi faa o faama homo hirsi ndawwal ɓiyiiko ngal. +Non gariibu gooto wari ɗo Hammadiyel kinkeƴuru, inniiko wii: +• Alla new gariibu +Tan o wii: +• Ko saabi? +• Alla kaa newii, sabi mi warii ndawwal Amiiri annii tew faa heewi. +O tacci tew, o hokki gariibu oo. Kam duu holloy inna Amiiri. + O warti fajiri faa o taƴora ɗum, o yehi suudu Hammadiyel kinkeƴuru o tawaay oon ton, o wii inna mum: +• Yalla maataay nebbam ndawwal faa o watta e nowru taaniiko? +Inna oo wii: +• Maataay! +O wari faa o yalta fuu o hawri e Hammadiyel, wii: +• Ee! Inne kori jam waddi maa faa gaa. +O wii: +• Ɓinngel mon nowru mum naawata, de sabi a donsanke ngar-mi ndaardude ma nebbam ndawwal. Inna maa wii: Walaa! +Hammadiyel, wii: +• Inne war heey! Njehen faa mi hokke. +Inna Amiiri yehi, Hammadiyel nanngi mo wari mo. O ɲowi daage o watti ɗum ton. Gujjo ana hetti e maɓɓe, o acci faa jemma hejjere o noddi gen gujjo oo, o wii: +• War nanngu. +o nanngi o resowi tew inna Amiiri ley faddaare faa e ley leeso. + Nde gorko oo wari nden, o wii: +• Hannden kaa mi heɓaali fay huunde. +Debbo oo wii: +• Anndan Alla faddaare huurnde keɓu-ɗaa de a wii a heɓaali. +Gorko oo wemmbaa, o wii debbo oo wadda ɗum, o waddi, ɓe itti, ɓe tawi inna Amiiri. Ɓe mbii ɓe mbonii! Sabi ɓe mbarete. Debbo oo wii: +• En ɓaman ko njogi-ɗen fuu e aduna kokken Hammadiyel faa bilta en e bonnde ndee. +Ɓe njehi ɓe kaalani mo ɓe kokki mo. O nanngi fuu, jawdi ndii e maayɗo oo. + Faa hiiri, futoro wari, o yehi caggal ngenndi o tawi ton ittooɓe njumndi, o waɗi daande makko hono daande debbo, o wii: +• Jam hiiri kokkeree kam njumndi +Ɓe mbii: +• Aan homo? +O wii: +Miin inna Hammadi Arɗo. +• Min kokkataa! Ko min kokki Amiiri ɗum fuu heƴataa faa ngaraa gaa mbeeraa min. +O wii: +• Miin so on kokkaay kam tan mi maayan. +Ɓe mbii: +• Maayu! +Tan Hammadiyel faɗɗi inna Amiiri, hono ko o wii o maaya ɗum: +• O maayi! +Ɓe ngari ɓe tawi omo fukkii. Ɓe kuli, ɓe mbii: +• So miɗen anndi a maayan, min kokkerete njumndi ndii fuu. +Tan ɓe mbii: +• En mbarete en fuu. + Gooto e maɓɓe wii: +• Njehen to Hammadiyel kam tan waawi biltude en e ndee bonnde. +Ɓe njehi ɓe kokki Hammadiyel ko ɓe njogii fuu e aduna faa nannga tew inna Amiiri oo e junngo maɓɓe. Hammadiyel wii wooɗi, nanngi maayɗo oo resi. + O yehi to Amiiri, o wii: +• Tokara, mi nanii ndawwal maa lallii, inna maa lallii. Tokara, ɗaana ɲalooma de ndoomaa suudu maa jemma, ko maatu-ɗaa fuu piɗaa. +O wii: +• Wooɗi! +Tan o waɗi non. Hammadiyel ɓami tew inna Amiiri, wari galle Amiiri ley jemma waɗi koso-koso Amiiri ɗojjini malfa mum, fiɗi ɓanni inna oo heɓi ɗum ɓecce, o fukkini ɗum, o dilli. + Fajiri wari, Amiiri wii: +• Hankin mi fiɗii huunde kaa mi anndaa ko ɗum. +Ɓe tawi inniiko, o ɓami ɗum, o irowi ɗum. Amiiri wii ɗum golle Hammadiyel, noddanee kam o wara. Hammadiyel kam wari inniiko e ndawwal makko. Hammadiyel wii: +• Ngoonga, sabi ndawwal ngal ɲaami gawri innam, mi warii ngal, inna maa wari martude kumpa, mi warii ɗum. +Amiiri lamndii hono o haani waɗeede. Ɓee mbii o hirsee. Ɓee mbii o hettee kusel kusel. Ɓee mbii o duppee, mo waree. Hammadiyel lamdii yalla ana waawi haalude, ɓe mbii omo waawi. O wii: +• Maayo men ngoo, won naɗɗo e maggo so yalti abada? +Ɓe mbii: +• Walaa. +O wii: +• Amiiri, kokkaa maccuɓe maa ɓee ngaari ɓe kaɓɓa kam faa mi yoora, ɓe pukkina kam daande maggo ɓe ɲaama tew nagge oo faa ɓe kaara, ɓe kunca kam ɓe paɗɗa kam e ley maggo. +Maccuɓe fuu mbii: +• Ngoonga, ngoonga! +Ɓe ngarri non. Hammadiyel ana fukkii daande maayo ngoo ana doomi. + Faa gorko goɗɗo feri wuro muɓɓen, sabi mawniiko laaminoo ko oon maayi ɗum omo haanunoo laamaade, kaa wuro ngoo wii Hammadi amiiri maayɗo oo ɓurani ɗum, tan o ɓerni o feri. O tawi Hammadiyel ana haɓɓaa ana fukkii. O maati koyɗe puccu gorko oo fuu, o fuɗɗi wullude, o wii: +• Mi laamataako dee kinaa mi laamoo, mi waawaa ittude jakka, mi waawaa ittude muddi, de so mi laamaaki fuu, on paɗɗan kam e ley maayo. +Gorko oo nani, darii, wii kam kaa ana yiɗi laamaade. Hammadiyel wii: +• Humtan faa mi haɓɓe tan. +Ɓe ngaɗi non. + Hammadiyel hooƴi puccu makko waɗɗii, wii mo: +• So ɓe ngari fuu mbiyaa: Miɗe laamoo, tan ɓe kumtete laamowo-ɗaa wuro ngoo. +O wii: +• Wooɗi. +Nde maccuɓe ɓee tilii ɲaamde ngari kunci mo, o wii: +• Miɗo laamoo +Ɓe nootaaki, ɓe paɗɗi mo ley maayo, ɓe mbii: +• O haanɗii. + Hammadiyel hooti suudu muɓɓen ina ɲaama, ana ɲammina puccu mum, faa ɓe payi sanne. Njumndi ndi o heɓunoo ndii, o wii inniiko: +• Moƴƴinanam jiminta maaro e jiminta gawri. +Ɲannde wootere o pari puccu makko faa gasi, o watti jiminta oo e ley danngaaji puccu makko. O yehi suudu Amiiri. Puccu kuu fayi faa ana hulɓinii. O wii cile tati: +• Assalaamu aleykum tokara +Amiiri nootii, o wii ɗum: +• Puccu kuu yo ndoontoori laakara +O hokki ɗum jiminta maaro, o wii ɗum: +• Oo dumo maaro +O jiminta gawri oo, o wii: +• Dumo mbayeeri, kaa mi heɓaali dumo gawri, sabi rewɓe cottaali gawri. +Saaraaɓe maa ɓee ana njiɗi yiide ma. +O wii: +• Hono ngaɗan-mi? +O wii: +• Kokkaa maccuɓe maa ɓee ngaari, ɲaama, paɗɗe e ley maayo a yiidan e laakaraa a yiyan inna maa e abba maa. +O wii: +• Wooɗi. +O waɗi non, ɓe paɗɗi mo e ley maayo. Tan Hammadiyel warti suudu, o wii: +• Abada on njiyaay maayɗo so warti, nii mo warti! +O wii: +• Amiiri maayii. Mo jokkaay kam fuu, mi waran ɗum. +O laatii Amiiri. O ɓamti rewɓe Amiiri, suudu Amiiri nduu o watti inniiko, o laamii wuro ngoo! +Debbo e ɓiyum debbo + Waɗiino e jamaanuuji, debbo gooto e gorum ana ngondi, kaa ko debbo oo rimi fuu, gorko oo ɲaaman. Faa ɲannde wootere o rimi ɓiɗɗo debbo, o wii gorko oo: +• Sabi Alla accanam ngel kaa, faa mi yiya engel ŋaara. +• Haya so ngel waawi fuu, mi ɲaaman ngel. +Worri non, faa ngel waawi ŋaarude, gorko oo wii: +• Sarti oo yottike, mi ɲaaman ngel. +Inniigel oo wii mo kasen: +• Accanam mi yiya engel surbinɗina, sabi abada mi yiyaayi ɓiyam surba. +Ɗum welaali gorko oo, kaa o hulii gite debbo oo, o wii o jaɓii. + Nii debbo oo haaldi e baylo sehana ɗum leggel ɗo suka oo waawi naatude. Inna oo soodi kaŋŋe, cardi e kaddule faa keewi, o watti e ley leggel ngel. + Ko ngel surbinɗini koo, abba oo wii: +• So weetii fuu mi teenoya leɗɗe, de mi warta mi ɲaama cukalel am ngel. +Debbo oo wii: +• Mi jaɓii. +Fajiri law gorko oo dawi teenoyde leɗɗe faa wara ɲaama ɓiyum oo. + Debbo oo wii ɓiyum oo naata ley leggel ngel de doga, sabi so abba mum tawii ɗum ɗoo fuu, ɲaaman ɗum. +• Ɗo njaa-ɗaa fuu mbiyaa: «Giɗo Alla ɗo leggel ɓaaroo.» +Suka oo wii wooɗi, o waynondiri e inniiko, o dilli faa abada. + Debbo oo dogi, naati ley wuro, soodi mbeewa paynga faa sanne, o hirsi nga, o defi faa ɓenndi, mukisii. + Nde gorko oo wartunoo teenoyde ndee tawi tampii, yolbii faa sanne. Ndeen debbo oo wii mo: Mi heppii ma, mi hirsanii ma suka oo, mi defii faa ɓenndii. + Ɗum weli gorko oo sabi tawii yolbii sanne, o ɲaami, kaa o wii: +• Tew oo walaa dakam sabi suka oo ƴaanɗii. +Kaa o annditaali ɗum tew mbeewa. + Suka oo caggal wittii, yehi e wuro wooto, wii: +• Giɗo Alla ɗo leggel ɓaaroo. +Neɗɗo gooto wii mo: +• Ya suudu Amiiri. +Mo yehi, mo lamndii Amiiri, o hollaa, o tawi ton inna mum, o wii noon, inna oo wii mo: +• War, doomu faa Amiiri wara, so mo jaɓii tan gasii. + Ko Amiiri wari koo, inna mum haalani ɗum haala suka oo. O wii: +• So o jaɓii, so tawii puccu am kuu ana silla fuu, mo yalta ku silla dow makko, so ɲallooɓe am ɓee ana tutta, naa ana kaartoo tutta dow makko. So mo jaɓii ɗum nii, annii, o heddoo ɗoo, so mo jaɓaali ɗum duu, mo yalta suudu am nduu. +Leggel jaabii, wii: +• Mi jaɓii abba. + Mo worri non ley galle Amiiri oo, faa ɲannde wootere, wiyaa: Kuurtungu ana waɗa e gure ɓadiiɗe ɗee, Amiiri’en cihe ɓadiiɗe ɗee fuu ngaran, kawra ton. Noon njaatigi leggel oo duu yehi. + Leggel wii debbo mawɗo oo ana yiɗi kaɲum duu yaade e kuurtungu oo. Debbo mawɗo oo jaabii, wii: +• Miɗo hula, sabi so Amiiri yii ma ton fuu riiwete e galle mum oo. +Leggel wii: +• O yiyataa kam, sabi kanko, to fijooji e kelle ton mo tawetee, miin to unooɓe e defooɓe ton ngon-mi. +Inna Amiiri wii mo: +• Wooɗi, tinna pati o yiye. + O yehi faa mo ganndii wuro ngoo, o fanti waande, mo yalti ley leggel ngel, mo parii faa gasi, mo watti masiri makko faa mo wooɗi, mo ɓaari leggel ngel e waande ndee, nii tan mo foonndii wuro ngoo to ɲallo Amiiri’en ton jaati. + Nde Amiiri njaatigi makko oo soyninoo mo ndee, wii: +• Cuggam e surba debbo garoowo ton oo. + Amiiri oo immii, sakkitii leggel, joƴƴini mogere mum, hirsani ɗum mbaalu payɗo, ɓe njooɗii eɓe ngaajoo, Amiiri itti hootonnde mum hokki mo, kaa annditaali yalla ɗum leggel. + Ɓe ngondi e ɲallo faa hiiri, surba oo wii hootan. Jamaa oo fuu ɗowti ɗum faa anndi ɓadike waande ndee, wii: +• Njoppee kam ɗoo. +Ɓe kokki mo koyngal tew kirsaandi makko ndii, ɓe mbaynii mo, ɓe mbaylitii. + Nde leggel seli yiide ɓe ndee, naati ley leggel mum, dogi faa e debbo mawɗo oo, wii: +• Hee yimɓe ton ɓee ana caahii faa sanne! Sabi mi wallii ɓe defude tan, ɓe kokki kam koyngal mbaalu. + Debbo mawɗo oo, ɗum weli ɗum faa sanne, wii: +• Gasii. Kaa kori Amiiri yihaali ma? +O jaabii, o wii: +• Mi yaltaali ley kaatane gila njaa-mi. + Ko Amiiri warti koo, puccu mum kuu wari faa silla, Amiiri heddii ana duka: +• Hoto leggel woni? Puccu kuu annii silla, a yaltataa naa? +Leggel dogi warde faa puccu kuu silla dow mum. Inna Amiiri defi tew oo, kaa o haalani Amiiri taakallemme makko hokki mo tew oo, sabi mbaalu mum waati. + Ko ɓe ɲaami koo, Amiiri wii: +• Inna, dawol hewtike kam, ngaɗanaa kam cobbal so weetii, mi jahoowo caggal maayo. +Inna uni gawri faa waɗa cobbal tame. Nde mo tamata ndee, leggel wii: +• Accu miin duu mi tama fay so gootel. + Inna oo jaɓaali, kaa o siini. Nde inna oo hokkunoo mo ndee, mo tami ɓooɗel gootel, mo tamdi ngel e hootonnde nde Amiiri hokkunoo mo ndee. + Caggal weetii, Amiiri oo e jamaa mum ndawi caggal maayo. Fade maɓɓe lummbude maayo ngoo, Amiiri oo wii ɓe: +• Taƴen kooƴol de lummben. + Amiiri hokki homo fuu ɓoodde, gootel tusukel keddiingel ngel woni ngel leggel tamidi e hootonnde ndee, ɗum laatii ngeɗu Amiiri. Nde mo fecci ngel ndee, mo yii hootonnde ndee, mo ƴeewi faa gasi, mo tawi ɗum hootonnde makko nde mo hokki surba debbo oo jaati ndee. O wii jamaa oo: +• Accanon kam hakke, mbirfo-ɗen wuro, sabi hoore am ana naawa kam sanne, mi waawaa yaade. + Ɓe coƴƴii. Mo yaafii jamaa oo, o wii inniiko: +• Homo tami cobbal ngal? +Inna oo huli faa sanne, wii: +• Miin jaati tami. +O holli ɗum Alla, haala ngoonga; inna oo wii: +• Wallaahi mi fenataa ɗum. +Ndeen inna oo wii: +• Leggel tamii. +Amiiri oo wii: +• Inna, mi ɓaman Leggel. +inna oo yowi junngo mum dow hoore mum ana wulla, ana wiha: +• Hammadi am haanɗii. Sabi wii ɓaman Leggel. + Amiiri yehi e debbo mawɗo faa lamndoo ɗum hono watta so surba oo yalta ley leggel ngel. Debbo mawɗo oo jaabii, wii: +• O waalataa ley maggel. Horu mo, so mo yaltii fuu, kakkilaa, jawdi mawndi ana ley leggel ngel, mbaylaa ndi faa ndi laaɓa, de cumaa leggel ngel. + Nde jemma warnoo ndee, Amiiri acci faa Leggel yalti ley leggel ngel fukkii, ɗaanii. Mo warri no debbo mawɗo wiiri mo nii. Surba oo nde ɗemƴii ndee tawi jawdi mum fuu dow daago, leggel ngel sumaama; mo anndi ɗum yo golle Amiiri. + Nde weetunoo ndee, inna yii surba e jawdi ndii, o darii omo woma, omo wiya: +• Hammadi am huurtinii kaŋŋe, hammadi am huurtinii cardi. +Nii Amiiri huurtiniri mo ley galle mum. + + +Sukaaɓe rewɓe taton + Ɗum waɗiino, sukaaɓe rewɓe taton: Diko, Kummbo e Penndo. Eɓe kiira jemma faa Diko oo wii: +• Miin kaa, Alla wan mi laatoo gen moƴƴinoowo buuru Amiiri oo. +Kummbo oo duu wii: +• Miin kaa, mi laatoo gen Amiiri oo jaati ɓurani kam. +Penndo oo duu jaabii: +• Miin duu, mi laatoo gen duppoowo tew makko tan, mi ɲaama tew faa mi haara. + Amiiri wuro oo duu jemma fuu ana yiiloo ley wuro faa nana ko yimɓe wuro kaalata e mum. Tan o nani ko sukaaɓe rewɓe taton ɓee kaali. Nde weeti nden, o neli maccuɗo makko nodda ɓe ngara. Ɓe ngari, o wii ɓe pilloo ko homo fuu haalnoo. Nden o warri non: Diko oo ɓamaa jom buuru. Penndo oo duppoowo tew, Kummbo oo, Amiiri oo jaati. + Ɓe ngorri non faa Kummbo inne ɓami reedu. Nde o maati ndimu nden, o neli e Diko inne wara. Nde o warata nden, o saawi ley saaya makko ɓinngel bilel baatungel. + Diko inne wii: +• Kummbo inne, mummu gite maa, sabi so neɗɗo ana rima fuu uddan gite mum. +Kummbo inne warri non. Nde o rimi nden, Diko inne suumi suka oo pati ewa, o faɗɗi ley doginirgol, o lelni ɓinngel bilel baatungel. Kummbo inne mettaa sanne, kaa faamaali ko mawnum oo waɗi ɗum. + Ko ɓami reedu ɗiɗaɓurdu nden duu, o warri non. Kaa nden, ɓinngel ŋusuwel baatungel o waddi. Nde tataɓurdu nden duu, hayre o saawi, o waddi. + Deeɗi tati ɗi Kummbo inne rimi ɗii fuu wo ɓiɓɓe worɓe: Hammadi, Sammbo e Yero. Nde Diko inne faɗɗi ɓiɓɓe ɓee fuu, ndegoroo doginirgol ngol faa naatawa ley sardiŋe gorko mawɗo e genndum, ɓe ndimaali abada. Aranndeejo oo nde ɓe koocci ɗum ɓe kuyi ɓe mbii: +• Alla yurmike en, neldi en ɓiɗɗo. +Ɗiɗaɓo oo e tataɓo oo fuu, non ɓe miili. + Nii non ɓiɓɓe taton ɓee keddii e junngo gorko mawɗo e debbo mawɗo faa ɓe mawni, ɓe laatii jokolɓe, faa mawɓe ɓee maayi, ɓe keddii e nokku maɓɓe. + Ɲannde wootere, hammadiijo oo hooƴi malfa mum yehi lowangal. + Amiiri wuro ngoo, ɗum woni abbiiɓe jaati, oon duu yehi lowangal. Homo fuu yii lella ngaa, homo fuu enndi nga, felli nga faa homo e maɓɓe fuu sikki kaɲum tan felli nga. Nde lella ngaa saami nden, hammadiijo oo yehi faa ɓama nga, Amiiri oo duu neli maccuɗo mum hoccawa lella ngaa. Nden homo fuu wii: «Miin fiɗi nga.» Nde Amiiri oo wari yii suka jokolle oo yiɗi mo ley yonki mum sanne, kaa anndaa mo. Nde ɓe kaaldi nden, Amiiri oo wii o hooƴa lella ngaa, hokki mo nga. Ɗum weli mo sanne. Kanko duu o wii: +• Faa mi yoɓe ngal teddeengal, ngaraa ɲallanaa kam alan garoowo nokku am ley ladde. +Ɗum weli Amiiri, jaɓani mo teddeengal ngal. + Homo fuu hooti suudu mum. Hammadiijo oo narriino gorko mawɗo oo e nguurndam mum ana haala ndiyam kaaloojam e foondu haalooru. O wii sanaa o waddana Amiiri oo huunde teentiliinde nde oon woowaa yiide. Sabi teddinɗo mo warata suudu makko. + Dow sifa gorko mawɗo oo, o jokki laawol omo yaha faa o tawi: Annii ley ladde ndee ginnaaji. O wii faa o welloo fuu, ɗi keddii eɗi paɗɗa mo kaaƴe, o nootaaki. Omo yaha faa o tawi kasen goɗɗi ana njala mo, o nootaaki. Faa o yehi o ɲeɗi ndiyam kaaloojam ɗam, o nanngi foondu haalooru nduu. Ginnaaji ɗii ummii ana caaƴa sanne faa kulɓina mo. Kaa o hulaali fey, faa o warti. O lalindii faa gasi, kanko e miɲiraaɓe makko, jaɓɓaade Amiiri maɓɓe. Kaa ɓe anndaa salla abbiiɓe. + Nde Amiiri oo wardi e yimɓe mum, ɓe njaɓɓitii mo ɓe ngaajii sanne, ɓe ɲaami faa ɓe kaari o holli ɓe nokku makko, sardiŋe makko e foondu nduu e ndiyam kaaloojam ɗam. Ko foondu nduu yii ɓe ɗum, wii: +• Amiiri, ɓiɓɓe ɓee ɓiɓɓe maa! +Tan o fillorii gila nde sukaaɓe rewɓe taton ɓee mawniri, faa e lella ngaa. Tan, ɓe fuu ɓe kaaynaa, ɓe njurŋinii, ɓe mboyi, ɓe ƴeewondiri, ɓe nanngondiri juuɗe. Amiiri oo wii: +• Ngaree faa kooten. +Hammadiijo oo haalani miɲiraaɓe mum, ɓe njaɓi. Kaa Hammadi wii: +• Faa horra foondu nduu e ndiyam ɗam to tawi ton tafon. +O warri non. + O warti, o yaadi e abbiiko e miɲiraaɓe makko to inniiɓe, kam duu, ko haalanaa ɗum seyii sanne. Kaa Diko inne, nesi mum taƴi laatii waande. + + +Taali +Mi yehii wuro, baabam hokki kam lonngere ndonku-mi timminde. +Mi yehii wuro baabam, taw-mi ɓiɓɓe am ɓee fuu woɗeeɓe. +Njoƴƴin-mi jommbaajo am dow laawol, bellotooɗo fuu wiyan kuyuuja. +Leelewal ley leeso. +Mbana yahataa, mbana warataa, yawooɓe ndaɗataa mbana. +Ɓiɓɓe am ɓee fuu wo sukuɲaaɓe. +Teketol mbuubu heewi ganure (loonde mawnde). +Kaatane ley ndiyam. +Mi lummba maayo, mi lummbita maayo, mi tappa paɗe am colla ana runnda. +Getogel ɓalewel ley toggere ɓaleere. +Jabaabu +1. Kaata +2. Gelleeje +3. Njaaɓi +4. Ɓoccooɗe +5. Laawol +6. Padakaaje +7. Tuundi ley yitere +8. Gangariije +9. Ɓoye +10. Tennga ley hoore + + +Amiiri wuro lobbo ŋari sanne + Dum waɗiino, amiiri wuro wooto, o ŋarɗi faa sanne faa omo hoolii hoore makko. O wii so wanaa debbo ɓurɗo mo ŋari fuu, o ɓamataa ɗum. Yimɓe ana tewta faa ɓe njii e wuro wooto, ɓe tawi suka debbo lobbo sanne faa ana ɓuri amiiri oo ŋarɗude. Nii ɓe kaalani ɗum. Nde weeti nden, o humi puccu makko yaade ton. O tawi no wiiraa noon worri. O ɓami suka oo to abba mum, o wii o hokkan abba oo muddiije kaŋŋe sappo. Abba oo wii ɗum heɓataa ɓiyum. Amiiri oo ana terma faa o wii: +• Mi hokkete muddiije teemedere. +O jaabii: +• Heɓataa. +O wii: +• Ndeennoo ko heɓata ɓiya oo? +Abba oo jaabii, wii: +• Amaana heɓata ɓiyam oo. Miɗo ndaarde pati o tampa, pati o heyɗa, pati o ɲaanoo faa abada. +Amiiri oo wii: +• Nanii, jaɓii. +Hokki mo aadi faa abada o jippataako sooro, o yihataa naange. + Amiiri oo huurtini mo, yaadi e makko wuro mum. Faa ɗum waɗi lebbi, tan suka oo wokkiti, nii fuɗɗi wullude. Jom suudu makko lamndii mo ko o woyata, maa ko ɲakani mo e aduna. O jaabii, o wii o yeewaa. Gorko oo lamndii ko yeewtinta mo. O wii omo yiɗi tiimtorgal kaŋŋe ngal o tiimtoroo, ana yeewtina mo. + Hono naanen, wayluɓe noddaa, tafi tiimtorgal ngal, ngal ŋeɲaa kulle ladde faa ngal heewi. Ɓe ngorri noon faa ɲannde wootere, gorko oo yalti fajiri law, tan suka jokolle lobbo ŋari sanne, kaa o gariibu o walaa fay huunde. O garbinii debbo oo, hokka mo sabi Alla ko ɓuri fuu yidde e adunaaru nduu. Debbo oo jaabii: +• Ko ɓur-mi yidde e adunaaru nduu kaa yo ɓiɗɗo, kaa mi walaa. Kaa miɗo jogii tiimtorgal kaŋŋe ngal njiɗu-mi sanne, ngal goram tafani kam faa mi yeewtira. +Hono ngal, hokki mo ngal saabi Alla mo o inndi oo. + Gariibu oo yehi wuro mum`en, ana tacca seeɗa seeɗa e kaŋŋe, ana sootta, ana laatoo jom jawdi faa gasi. Omo warra ko Alla, wuro ngoo hoolii mo, hokki mo laamu. + Caggal debbo oo hokkii gariibu oo tiimtorgal ngal, gorko oo wayri yiide debbo oo ana tiimtoo. O lamndii ɗum no tiimtorgal ngal waɗi, debbo oo haalani mo no waddi e gariibu oo, gorko oo bilaa sanne faa mo wii: +• Hollam junngo ngo kokkir-ɗaa gariibu oo tiimtorgal ngal +O holli junngo makko ɲaamo, gorko oo nanngi ngo tacci ngo, seeri debbo oo, riiwii mo, mo yalta e galle mum. + Debbo oo woowaa naange, mo tampi sanne fade makko jippaade sooro ngoo, o fonndii wuro maɓɓe. Ɲalooma fuu, mo suulta ley leɗɗe kaa jemma fuu mo yahan, faa mo tampi, mo daali. + Sukaaɓe jokolɓe ɗiɗon tawi mo ley ladde, ɓe njurmii mo, ɓe lamndii mo ko foti waddude mo ɗoo, o fillanii ɓe. Ɓeen mballi mo faa mo yottoyii abbiiko. Abba oo barkini sukaaɓe jokolɓe ɓee sanne. + Gariibu mo mo sakkii tiimtorgal kaŋŋe ngal oo ana tewta debbo faa yimɓe kaalani ɗum haala debbo oo. Kaa mo anndaa salla ɗum gen kaananke cakkuɗo mo oon noon. O ƴami, o hokkaa ɗum, o huurtini ɗum. Kaa no debbo oo foti woodde, o taykaaki salla junngo mum ko taccaa. Nde kuurtungu oo dammbitii nden, gorko oo se’ini laana faa ɓe njaha wuro maɓɓe. + Debbo oo sulli sanne, sabi junngo mum yo tayngo, mo ɲaagii Alla suura mo pati yimɓe anndita mo guddo. + Saabi Alla mo gariibu oo wardi e makko oo so mo hokki ɗum tiimtorgal ngal, nde saabanii mo junngo tayngo ngoo. + Debbo oo fukkii ley jemma, o fini e baawɗe Alla, o tawi junngo ngoo dobii. + Debbo oo yettiri Laamɗo ko waɗani ɗum koo. O wondi e goriiko faa Alla hokki ɓe ɓinngel gorel, gorko oo ana horsini ngel sanne. Gorii debbo oo aranndeejo oo, taccuɗo junngo makko oo, ana yaara caggal fajiri fuu, gilla nde mo tacci junngo debbo oo ndee, faa o timmini jawdi makko, faa omo garbinoo. Wuro ngoo ittii mo e amiiraaku. Omo yaha, omo garbinoo faa mo nani haala Amiiri wuro jom jawdi oo. Fajiri law, o wari e gen amiiri oo, tawi gorko oo yaltidi e ɓinngel mum gorel ngel faa ɓe njiildoo e ley wuro fade naange wulde. + Amiiri talkinɗinɗo faa laatii gariibu oo, wari e debbo oo, wii: +• Fii sabiilillahi! Hokkam ko ɓur-ɗaa yiɗude e adunaaru nduu fuu. +Debbo oo jaabii, wii: +• Subahaanahuu! Ko ɓur-mi fuu yiɗude e adunaaru nduu, yo ɓinngel am gorel, ngel nee abba mum yaltidii e mum, kaa miɗo jogii goje kaŋŋe ɗe goram tafani kam faa mi yeewtira, miɗo yiɗi ɗe sanne. +Debbo oo hooƴi ɗe, hokki mo. Nde mo wari faa mo jippoo sooro ngoo ndee, o hawri e gorko oo. Oon wii mo: +• Yaa yoppoy ko kooƴu-ɗaa ɗum, a gujjo. +Debbo oo jaabii: +• A wihaay miin hokku maa naa? +Ndeen o fillanii gorko oo no ɓe ngaddi. Ɗum welaali gorko oo sanne, kaa mo miccitii no mo sakkiraa tiimtorgal kaŋŋe ngal nii e junngo gen kaananke oo. O yamiri hoorɓe loota mo, kokka mo kaddule kaɲum e ko mo ɲaama, kanko kaa mo yalti. + Gorko koɗo oo ana ɲaama, ana ƴeewa debbo oo, laatii hono annditii ɗum nii, kaa omo anndi oon junngo mum ko taccaa. + Mo lamndii debbo oo yalla ana anndi debbo mo junngo mum taccaa, gen amiiri kiiɗɗo naa? Debbo oo duu wii: +• Aɗa nanndani kam e goram aranndeejo, kaa oon kaa wanaa gariibu, o kaananke wuro. +Gorko jaabii, wii: +• Miin noon +Debbo oo duu wii kaɲum noon! Kaa Alla dobii junngo mum ngoo. + Ɓe ɗiɗon fuu ɓe kaayɗinaa, ɓe mbemmbaa, ɓe tawi ɗum Alla fodi. Ko goriiko oo warti koo, mo fillanii ɗum no ɗum laatirii. Gorko oo wii mo: Miin duu, miin woni gariibu mo cakku-ɗaa tiimtorgal kaŋŋe oo. Homo fuu annditi banndum, simtiri, anndi Alla waawi. + Ndeen amiiri gorii debbo oo, wii o ɲiɓanee sooro hono ngo mum ngoo, o naati. Wii o suɓoo debbo mo o yiɗi ley wuro ngoo fuu, ɓamani mo, ɓe ngondi faa abada. + +Puri +11. Mi hawrii e pooli: wooturu nduu ana ardii ɗiɗi, wooturu nduu ana hetti caggal ɗiɗi, wooturu nduu ana tummbii hakkunde ɗiɗi. Hono foti ɗii pooli? +Miɗe yaha luumo, pantu-mi esam, o neldi kam buuɗi makko teemedere, o wii: Mi soodana mo daabaaji: bey, baali e nay faa daabaaji ɗii kiɓɓa teemedere. Njaa-mi luumo, taw-mi nagge fuu buuɗi joy, mbaalu fuu mbuuɗu, bey joy fuu mbuuɗu. Hono ngaɗan-mi faa teemedere ndee heɓa daabaaji teemedere, pati mbuuɗu fuu heddoo? + +Jabaabu: +12. Pooli ɗii yo tati +Mi soodan nay sappo, laatoo buuɗi debe e sappo, baali debe laatoo buuɗi debe, bey debe e sappo laatoo buuɗi sappo. +No debbo gooto foti yiɗude adunaaru + Waɗiino e jamaanuuji debbo gooto, wii so rimi ɓiɗɗo ɓurɗo ɗum ŋarɗude fuu o faɗɗayan ɓinngel ngel ladde. Alla waɗi o rimi ɓiɗɗo debbo, yimɓe fuu mbii ɓiɗɗo oo ana ɓuri inna oo ŋarɗude. Inna oo acci faa suka oo ƴoƴi. Ɲannde wootere omo yaha teenoyde, o naɓi cukalel ngel ladde. Caggal o tilike teenude o joƴƴini cukalel ngel ley lekki bannge waande, o wii ngel dooma mo, jooni o waran. Nii o hooti cuuɗi, o yoppi ngel ton. + Cukalel ngel doomi faa tampi engel wulla. Gorko gooto ana waɗɗii ngeelooba, wari tawi cukalel ngel ana wulla, o lamndii ngel, ko saabi so engel wulla? Ngel wii mo: +• A yiyanaali kam ton innam naa? +Gorko oo wii ngel: +• Hoto inna maa jeyaa? +Ngel jaabii gorko oo: +• Mi anndaa! + Ngel yurminii gorko oo faa sanne, nii o ɓami ngel, o waɗɗini ngel dow ngeelooba makko. Tawi suka oo inna mum haɓɓaniino ɗum ceede tati e keeci mum. Suka oo ɗo waɗɗii dow ngeelooba ngaa, hunti ceede mum ɗee haɓɓi e samme ngeelooba gorko oo, eɓe njaha faa ɓe njottii ngenndi ngootiri, o naɓi suka oo to Amiiri ngenndi ndii, gorko oo fillanii yimɓe ngenndi ndii no o hoocciri suka oo ley ladde. Nde gorko oo wii faa witta nden: Suka oo heddii ana wulla, wii kaɲum jey ngeelooba ngaa. Haala kaa laatanii yimɓe ngenndi ɓee wemmbere. Ɗum laatii sariya hakkunde maɓɓe. Yimɓe ngenndi ɓee mbii suka oo holla maande mum. Suka oo wii: +• Ceede tati ana kaɓɓii e samme ngeelooba ngaa, miin jey nga. +Gorko oo hunii waatii so ceede tati tawaama e samme ngeelooba ngaa fuu, o harminii nga faa yeeso Alla. Nde yimɓe ngenndi ɓee ƴeewunoo nden, tawi ceede tati ana kaɓɓii e samme magga. Yimɓe ɓee mbii: +• Suka oo ngoongoto, kaɲum jey ngeelooba ngaa. +Nii gorko oo jippii hokki suka oo ngeelooba ngaa, wittiri koyɗe ɓole ɓernde mum ana woya. + Suka heddii e junngo Amiiri faa o laatii surba debbo, sakiraaɓe makko anndaaka. Amiiri ngenndi ndii huurtini suka oo, sabi kaɲum duu ɓooyii heɓaali ɓiɗɗo. Ko o ɓami suka oo koo kaɲum duu ɓooyi rimaali, kaa ana jogii korɗo mum debbo kaamilɗo, o wii ɗum so rimii fuu hokka mo ɓinngel mum ngel, de ko yiɗi fuu waɗa ley galle ton - korɗo debbo oo jaɓani mo. Kanko suka oo lewru fuu o ɓama licce o watta ley reedu makko faa korɗo debbo oo maati ndimu mum. Yehi rimoy to suka debbo oo, o lootii faa o laaɓi. Suka debbo oo jooɗii ley ƴiiƴam ɗam gere ɓinngel ngel, o neli Amiiri haalanee o rimii o heɓii ɓiɗɗo gorko. + Amiiri e jamaa mum fuu kuyi faa sanne, sabu abada o heɓaali ɓiɗɗo. Ɲannde wootere omo womina ɓinngel ngel fuu, o wii: +• Coo wajjere, coo wajarde, inna maa waawi bonnde teetii joom ngeelooba mum, teetii ma aan duu inna maa. +Tawi jokko Amiiri gooto warii faa yara ndiyam, nani haala kaa tan, wii debbo oo: +• Eyyo! Ɓiɗɗo oo wanaa ɓiya naa? + Debbo oo jaabii, wii mo: +• Gilla Amiiri laatii giɗo maa a yarii cobbal makko njumndi ngal na? + Gorko oo gila nani haala cobbal ngal tan, yeggiti haala ɓinngel ngel. O wii: +• Abada o yaraali ngal cobbal. +Debbo oo naati ley suudu yaltini hokki mo, o yari. Debbo oo wii mo o loota hunduko makko pati Amiiri oo anndita. O looti hunduko makko, debbo oo wii: +• Laaɓaali. Sabu ɗemngal maa ngal ana oolɗi, waddu mi heefene faa laaɓa pati Amiiri anndita. + Nii o ɓattii debbo oo nanngi ɗemngal ngal tacci. Ƴiiƴam heddii ana jooroo. Gorko oo fonndii bolongal Amiiri, nde o yottii ndee, yimɓe ngonnooɓe ɗoon ɓee fuu immii cakkitii o faa lamndoo mo, nii o sappii debbo Amiiri oon. Debbo oo lamndaa, jaabii ɓe, wii kaɲum kaa yiino omo dardii e jom`en pucci, kaa anndaa ko ɓe kaaldi, tawan ɓeen tacci ɗemngal makko so ndilli. Wakkati oon fuu Amiiri wii: +• Pucci kumee, pucci kumaa. +Wii ɓe tewɲa jom`en pucci ɓee. + Jamaa oo tewɲi henndu, njiiloyii faa tampi ɓe njiyaali fay huunde, nii ɓe ngarti. + + + +Taali tacciti: +13. Debbo lobbo mo ɓamataake +Ɓiɓɓe am ɓee fuu ɓe kumitirngol gootol +Kaɓɓu-mi puccu am ley suudu laaci makku ana yalti sella +Mi yehii wuro baabam, taw-mi yimɓe fuu ana njala. +Jabaabu: +14. Leelewal +Piisirɗi + + +Curki +Liyeewa pernga (haabu) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/developer/docs/help/guides/develop/walkthrough/dag-short-wl.txt b/developer/docs/help/guides/develop/walkthrough/dag-short-wl.txt new file mode 100644 index 0000000000..53968e2c8b --- /dev/null +++ b/developer/docs/help/guides/develop/walkthrough/dag-short-wl.txt @@ -0,0 +1,25 @@ +ka 93 +o 63 +ni 55 +daa 51 +maa 28 +ti 23 +n 17 +a 16 +bɛ 14 +nti 12 +di 12 +dii 10 +yi 9 +ba 9 +so 8 +na 7 +m 7 +la 7 +jɔn 7 +chɛ 7 +pam 6 +kpe 6 +be 6 +ŋɔ 5 +dol’ 2 diff --git a/developer/docs/help/guides/develop/walkthrough/glossary.md b/developer/docs/help/guides/develop/walkthrough/glossary.md new file mode 100644 index 0000000000..336afef590 --- /dev/null +++ b/developer/docs/help/guides/develop/walkthrough/glossary.md @@ -0,0 +1,203 @@ +--- +title: Glossary of Key Terms +--- + +## Core Software & Tools + +### Keyman Developer + +Keyman Developer is a powerful tool you can use to create custom keyboards optimized to type in any language you choose. Keyboards created with Keyman Developer can be used on Windows, Mac, Linux, iOS, Android, and the web. The Keyman Developer IDE (integrated development environment) is currently Windows-only, however the command line tools it uses can run on other platforms (such as Linux and macOS). + +### Keyman + +The application that allows users to actually use keyboards created with Keyman Developer. Available on Windows, MacOS, Linux, iOS, Android, and the web. Distinguished from Keyman Developer by its regular (not faded) app icon. + +### Keyboard Editor + +The primary tool within Keyman Developer used to design and program keyboard layouts, accessible through both drag-and-drop visual design and direct source code editing. + +### Package Editor + +A tool within Keyman Developer used to bundle keyboard files, fonts, documentation, and other resources into a distributable package file (.kmp). + +### Debugger + +An interactive tool in Keyman Developer that allows keyboard authors to test keyboard rules, step through complex logic, inspect store contents, and examine context, deadkey state, and output at each point during keyboard operation. + +## Keyboard Components & Concepts + +### Keyboard Project + +A complete project containing all files and resources needed to develop, test, and distribute a keyboard. Organized through a .kpj project file. + +### Keyboard Layout + +An arrangement of keys (either physical keys on a physical keyboard or key images on the screen of a touch device) allowing a set of characters to be typed. A layout is composed of one or more layers, which are accessed by modifier keys (such as Shift or Alt). + +### Keyboard Layer + +A subset of the keys in a keyboard layout. This subset is accessed by a modifier key. For example, holding down the Shift key on a physical keyboard gives you access to the Shift layer. Similarly, tapping the “!#1” key on a touch layout presents the Numeric layer. + +### Desktop Layout + +A keyboard layout designed for use on desktop/laptop computers with physical keyboards (Windows, Mac, Linux). It is also used when a physical keyboard is attached to a touch device. Stored in .kmn files. + +### Visual Keyboard / On Screen Keyboard + +A graphical representation of the keyboard layout that shows users which keys produce which characters. Files with .kvks extension. + +### Touch Layout + +A keyboard layout designed for use on touchscreen devices like smartphones and tablets (iOS and Android). Created using the touch layout editor and stored in .keyman-touch-layout files. + +### Keyboard Package + +A bundled distribution file (.kmp) that contains one or more keyboards along with fonts, documentation, and on-screen keyboard files, ready for installation on user devices. + +### Lexical Model Package + +A bundled distribution file (.kmp) that contains a lexical model, ready for installation on user devices. + +### Keyboard Authors + +Individuals or organizations who create custom keyboard layouts using Keyman Developer. + +## Lexical Models & Predictive Text + +### Lexical Model + +A language model that powers predictive text and autocorrect functionality for a keyboard. Also called a “dictionary” in Keyman apps. It uses word lists to suggest completions, corrections, and properly accented variants as a user types. + +### Wordlist + +A list of words in a language, typically stored in a tab-separated values (.tsv) file, used as the foundation for creating a lexical model. To be effective as a source for suggesting words, each word should have a number indicating its relative frequency in normal usage. This is often accomplished by counting words in a large text sample. + +## Programming Concepts + +### Deadkey + +An invisible placeholder character used in keyboard programming that doesn't appear on screen but can be matched by future rules. Deadkeys allow complex input sequences, such as distinguishing between typing an apostrophe twice for a quote versus once before a vowel for an accent. Keyman supports up to 65,534 unique deadkeys per keyboard. + +### Context + +The text or characters that precede the current cursor position, which keyboard rules can examine to determine appropriate output. + +### Rule + +A programming statement in Keyman keyboard language that transforms inputs to outputs, following the pattern: context + keystroke > output. + +### Store + +A named variable in Keyman keyboard language that holds a set of characters or deadkeys for use in keyboard rules. + +### Group + +A collection of related keyboard rules organized together for processing keystrokes or manipulating context. + +## Language & Encoding + +### BCP 47 Tags + +Language identification codes following the Best Current Practice 47 standard (e.g., "en" for English, "str-Latn" for Straits Salish in Latin script). These tags consist of: + +- **Language subtag**: ISO 639-1 (2-letter) or ISO 639-3 (3-letter) code +- **Script subtag** (optional): ISO 15924 4-letter code for writing system (e.g., "Latn" for Latin, "Cans" for Canadian Aboriginal Syllabics) +- **Region subtag** (optional): ISO 3166-1 alpha-2 country code or UN M49 region code + +Keyman uses BCP 47 tags to provide language metadata, facilitate keyboard searches, and associate keyboards with operating system language settings. + +### Unicode + +The universal character encoding standard that Keyman keyboards fully support, allowing access to characters from any writing system. + +## File Types + +### .kpj (Keyman Project) + +The main project file that contains references to all components: keyboards, models, and packages. Used to organize and manage the entire keyboard development project. + +### .kmn (Keyman Source) + +A plain text keyboard source file that contains all the code and rules for a Keyman keyboard. This is the human-readable programming file that keyboard authors edit. + +### .kvks (Keyman Visual Keyboard Source) + +The source file for an on-screen keyboard, created in Keyman Developer's visual keyboard editor. + +### .keyman-touch-layout + +A JSON format file that describes a keyboard layout specifically for touch devices (phones and tablets). + +### .model.ts (Model TypeScript) + +A TypeScript source file that defines a lexical model, specifying the format, word-breaking rules, and source files (wordlists) to use for predictive text. + +### .tsv (Tab-Separated Values) + +A text file containing a list of words, one per line, with an optional tab-separated frequency count, used as source data for creating a lexical model. + +### .kps (Keyman Package Source) + +A package source file created in the Package Editor that specifies which files (keyboards, fonts, documentation) should be included in a distributable keyboard package or which lexical model files should be included in a distributable lexical model package. + +### .kmx (Keyman Compiled Keyboard) + +A compiled binary keyboard file created from a .kmn source file. Used by Keyman on Windows, macOS, and Linux. This is the file used by the Keyman program on the user’s computer to provide keyboard functionality on physical keyboards. + +### .kvk (Compiled Keyman Visual Keyboard) + +A compiled on-screen keyboard file that shows the visual layout of a keyboard. + +### .js (Compiled Keyboard JavaScript) + +A JavaScript file created from a .keyman-touch-layout source file, used by Keyman apps on touch devices to provide touch keyboard functionality. + +### .model.js (Model JavaScript) + +The compiled JavaScript file created from a .model.ts source file, used by Keyman apps to provide predictive text functionality. + +### .kmp (Keyman Package) + +A compiled, distributable package file that bundles keyboards, fonts, documentation, and other resources into a single installer. This is what end users download and install. + +## Distribution & Community + +### Keyman Community Forum + +An online forum ([community.software.sil.org/c/keyman](http://community.software.sil.org/c/keyman)) where keyboard authors can ask questions, share knowledge, and get support from other developers. + +### Keyman GitHub Repository + +The open-source code repository ([github.com/keymanapp](http://github.com/keymanapp)) where Keyman software is developed and where users can contribute keyboards, report bugs, and submit improvements. + +[**help.keyman.com**](https://help.keyman.com) + +The comprehensive online documentation site for Keyman Developer, containing language references, tutorials, guides, and API documentation. + +## Advanced Concepts + +### Base Layout + +The keyboard layout of the system when Keyman is not active. For example, the base layout might be the QWERTY (US English) layout, the AZERTY (French) layout, or a Thai layout, depending on the settings of the device. + +### Mnemonic Layout + +A keyboard layout where keys are identified by the character produced after the [base layout](#toc-base-layout) is applied, rather than by their physical position. For example, on a US English (QWERTY) keyboard the “A” key is directly to the right of the Caps Lock key and the “Q” key is above it, but on a French (AZERTY) keyboard the “Q” key is directly to the right of the Caps Lock key and the “A” key is above it. If a Keyman keyboard has `&mnemoniclayout` enabled, the rules for “A” will take the base layout into account and respond to the “A” key, even though it is a different physical key on the two keyboards. + +Note that some keyboards in the Keyman keyboards repository use the term “mnemonic” in the title or description to indicate that the characters (usually of a non-Latin script) are assigned to keys according to their correspondence with the US English (QWERTY) layout. For example, the Arabic “beh” character might be assigned to the location of the “B” on the QWERTY keyboard. + +### Positional Layout + +A keyboard layout where keys are identified by their physical position on the keyboard rather than the character displayed on the keycap. For example, the "Z" position on a US keyboard corresponds to the "Y" position on a German keyboard. + +### Transient Language Profiles + +Custom language profiles in Windows (limited to 4) for languages that Windows doesn't have built-in support for, automatically managed when installing keyboards with custom BCP 47 tags. + +### Word Breaker + +An algorithm that determines where word boundaries occur in running text, essential for lexical models. Different languages require different word-breaking rules (e.g., space-separated vs. no obvious breaks in East Asian scripts). + +--- + +*This glossary is based on the Keyman Developer General Tutorial and official Keyman documentation. For the most current information, visit [help.keyman.com](http://help.keyman.com).* \ No newline at end of file diff --git a/developer/docs/help/guides/develop/walkthrough/images/add-language.png b/developer/docs/help/guides/develop/walkthrough/images/add-language.png new file mode 100644 index 0000000000000000000000000000000000000000..c2f1c8880322f9cef1f8540c626ed08350fa6846 GIT binary patch literal 13122 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

jI01ZYkWyiHdapOj-2V3 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 H){p)T9>~*f literal 0 HcmV?d00001 diff --git a/developer/docs/help/guides/develop/walkthrough/images/keyboard-model-device.png b/developer/docs/help/guides/develop/walkthrough/images/keyboard-model-device.png new file mode 100644 index 0000000000000000000000000000000000000000..ed6b5807e36bc952eebcaf8cf499929bfde026a1 GIT binary patch literal 4922 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 literal 0 HcmV?d00001 diff --git a/developer/docs/help/guides/develop/walkthrough/images/keyboards-tab.png b/developer/docs/help/guides/develop/walkthrough/images/keyboards-tab.png new file mode 100644 index 0000000000000000000000000000000000000000..d36945796b21c6f406a363e15b91cb81f1bec913 GIT binary patch literal 39099 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 S;`)yO0000BetO{bhZ%?ZsplCD8-M92G^^cr-3 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 literal 0 HcmV?d00001 diff --git a/developer/docs/help/guides/develop/walkthrough/images/layer-selection.png b/developer/docs/help/guides/develop/walkthrough/images/layer-selection.png new file mode 100644 index 0000000000000000000000000000000000000000..2ec89966f3f4a6bcf2a52c106bca443100db7151 GIT binary patch literal 1624 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 K8H(@fV^)KyJ|?Ay;C;qhbTS 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 literal 0 HcmV?d00001 diff --git a/developer/docs/help/guides/develop/walkthrough/images/new-longpress-key.png b/developer/docs/help/guides/develop/walkthrough/images/new-longpress-key.png new file mode 100644 index 0000000000000000000000000000000000000000..a1bd60dbed7b2038deb2590d765e100bac7b41db GIT binary patch literal 5109 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 X)e2=UUV~qT00000NkvXXu0mjflODfG literal 0 HcmV?d00001 diff --git a/developer/docs/help/guides/develop/walkthrough/images/new-project-dialog.png b/developer/docs/help/guides/develop/walkthrough/images/new-project-dialog.png new file mode 100644 index 0000000000000000000000000000000000000000..5bd61d2e5baf1f2402470afc41fc89fc9101eba9 GIT binary patch literal 22627 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≻ldi`3VIDJisd7WrE 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 X{HxtztD#32z~_aMref9e*Wv#I6>(4I literal 0 HcmV?d00001 diff --git a/developer/docs/help/guides/develop/walkthrough/images/primerprep-input.png b/developer/docs/help/guides/develop/walkthrough/images/primerprep-input.png new file mode 100644 index 0000000000000000000000000000000000000000..ef46c91e90b1e84a52ce2338b550c9d1da884625 GIT binary patch literal 19674 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⁣~Vj!ZICZ+Jg)1H-al>(1Ok~Fo6Pl|2V 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≺` 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 literal 0 HcmV?d00001 diff --git a/developer/docs/help/guides/develop/walkthrough/images/test-keyboard-browser-display.png b/developer/docs/help/guides/develop/walkthrough/images/test-keyboard-browser-display.png new file mode 100644 index 0000000000000000000000000000000000000000..5243a8939b6ef47d770fd4743cc6a2bfc6deb8f4 GIT binary patch literal 4004 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 literal 0 HcmV?d00001 diff --git a/developer/docs/help/guides/develop/walkthrough/images/test-keyboard-browser.png b/developer/docs/help/guides/develop/walkthrough/images/test-keyboard-browser.png new file mode 100644 index 0000000000000000000000000000000000000000..2925a7108695f26ffaba9b5a205f7882e3195668 GIT binary patch literal 41283 zcmeFZ2UwF?*Dfp~G789y1w;@=Q4whh0wT?hbQJ-S5)ncMDUn`62*?OlkS-k?s0dMd zO+b{A2%#t;1PDk8B@iHxkc1@v6HsU7edj&jd%p8s=RfB<-*u@eKF{83ueJ8tYu)#H za`%FTk=W*4o7b&dCuV&9%%yef*0X`X=YQG=e8VFtB?B)4ewU0+tt)DmnFKy;fSfcx zxo+LNIFS`+A>i|-o9FHP)~(w&!T&38%SA{A_;RcN*(?55P&fY|XJ7C-BVRDs+wV81 zzmxS(z%9Ae#%E4m4tAQU^GK2zgU=R-JDJLniD7eBo3Hwmj}|6gA&g$RTZcQTt9x?O z-3AMaangpg53#qjZ4Ng?xq6=3su!r$Nw<)R|K0QM&imKC#v7fFD$ShS(gkiYvmkuF#}|*Jn^(RPP)k^Qr2gPV?13?-n*sN@b1QDHU5im z^CMt*ci}5^W7Q$QUxWv9&P0t!0xut;T+RbGmkKJg_esuG-4Uc(K5dx454?PBII<6z z)a@Qq&gq~Z8PUt29eqnlbokqWHT?|3vcl@1C5u@s@ku!SK^O;SKjwlCP5i`R3ZcM> z?~5&c1#<2mo8#`=C4=U_$jY1sRQo*nwQcvOWQ zccxcl;R8(#8)TUk52fg<@aT&oT_t2YrlBSJARL#OLX}NRqGkmfhg#O{v(z(G!E#v{ z>Qo3ByCf2BJibv+HQ^Nnm#(QKIp@>u9X8K>9`JYiKbk0xpoE4jPCVB;!YvMCj3&L& z`=12;FI zVbKS8ibL<}wwF*Wi<0ATGbtx=IH%=QQhZJtTX&(uwSK`^Y9b}4Dx|PB!VtP&0Aa7R zYEi_&<9U8$>~2AUisW9!pb3|7cSyaLacA>+R=;+!XZX*lgi(Hu@Lm$P#DJ}~Hw8MUJIo6XEVsBCyc~pvNs934L#t~*8f~POVnbIC5z<74i=w4VXNy`ICcNZi9N;Za zuI*9Xku9^icpI3PpvNA)%Ivd69SVwBFdTcLkdsP7v7@7KXJvwU7ff7Ox(oA-emqjqdW?XxWpzewkFt1Otx+5L)ONh0JC zOHkry!$8bfIXdLLMA#y_m8Xx0TOy#Atim=G`Yf`ncyd zdI)S-TWQVMnR@sI#6-4QDnBU+Vbdpa<6dIWjo*>yt@E;$WpyVQp$OZtAm06Im|O*S z9#dhIT1pcfC_a2`<%WY=kf_7LfZArB%b6&?1LZ{>SG_W^RIWCo9A`J+HTLc`#~>_r z8p>Nnzgeo=aw`Y1e?`;frcW3gOk!M(IifkTd+|vYp<6G4}jydq`u1NOr?LI%RliR6=7yU4+PNrgAYs2nMucyUUiqRovt5CACcBD3eGLW?I1mOF!L{U)GG0+e`q`yJBY6YM zUpc2=QQCNw$jVg39osDh79>)J7A`63=8eLtM}}jYBjbShYnXIH>SKbV(z7L;F<7(~cX8mT3NEGuGxLJn zLhHSVLnIUJeZ!KFVCKV#*~@B~cVMYq)KhaieV}qji_)SERX|W3}hH0%^`TSVyvHqYrU0|p@s5R>67kV31wdrCx_9y)-^n2SF2Zjrg(R_1NBPYHy+G51-gv zn_>iq-UD6pdA;K-sbc;9T!(b1@ax}GIrYsVhb){|7DJe`5Rcpb!w{JCp!AKoINPJZ z0JSbtOyVhqtgwM__Lv})A@RAAZ0Jr1x*0Y-S34MnY~B2Y9bzDQ(io|)&Ba5r1PuZQ zMvQ2bAZWo3ZrtDj(r$)Y;sz2`0a&W

CGxacw!rf>)Z=V3=xK&b1rBsfJVI#+vIY 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 F{{uOzHWvT@ literal 0 HcmV?d00001 diff --git a/developer/docs/help/guides/develop/walkthrough/images/test-lexical-model-k.png b/developer/docs/help/guides/develop/walkthrough/images/test-lexical-model-k.png new file mode 100644 index 0000000000000000000000000000000000000000..99aa345043a216f8ff00d579c1661da8623e90f2 GIT binary patch literal 33745 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 WYcC{!kjKD3nRJfnAI(Bvy!$_tL(VP$ literal 0 HcmV?d00001 diff --git a/developer/docs/help/guides/develop/walkthrough/images/test-lexical-model-setup.png b/developer/docs/help/guides/develop/walkthrough/images/test-lexical-model-setup.png new file mode 100644 index 0000000000000000000000000000000000000000..645e44398d6704d5b39ae7033a435bc547521f56 GIT binary patch literal 7188 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 P4H}@Ks`a=?1seJv?f?(F literal 0 HcmV?d00001 diff --git a/developer/docs/help/guides/develop/walkthrough/images/test-longpress.png b/developer/docs/help/guides/develop/walkthrough/images/test-longpress.png new file mode 100644 index 0000000000000000000000000000000000000000..c9a8126d7b334fa590f7f6e4a0a27a1a12722972 GIT binary patch literal 37394 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 OYX4q~J-LRbgZ>ZrC=~+$ literal 0 HcmV?d00001 diff --git a/developer/docs/help/guides/develop/walkthrough/images/u-0254.png b/developer/docs/help/guides/develop/walkthrough/images/u-0254.png new file mode 100644 index 0000000000000000000000000000000000000000..6c9f5342395dcb78be2f55af8e896ef7ae0eea3c GIT binary patch literal 6863 zcmb_hc{E#Vzt;A&+A2<4E!CnEYCb4hlul;hG-?W>rHUvq#XPj7b+qQO4M8=D28pVv zV#p~~Ll9&eN^ulLQlcSIA#tPUyZ3(UTW8(%ox8q2vUc{n_V4$;d#(3*-sgFC;;&XF z!uuun3kV1Zo0(n*^RFxcfgPvz?&1F{@%}Q;zw8JCn_Lwj^qyGY-~8lx1$0F~pfXix z^Y(83{XTzF#~=X#k=E_sj&}H~JN&^z!A1_jHt@T_p|=A)1WW=wJp6*Z;K5Maz5EhM zW3%g5ZiYb@QLaf+EJXXTHY{sS@rYS=f?aagt_-7+?j}Z<4ZLF-)rd{ZRMn z8!sQbSY9!Lg!sA@XC$DnzEOCM{nZwaL?4kA`r?W)J$UFR$^AK|H)i}M2IRbB2J5Tl zc)g5n_}!&^y|vzt4U-kC2lcjMH0e!+7fH{JBEL+8&l&C%xE1n@sw5x~dE9hdb8?GE ziXVnX3g1uvz7$H*`QANGN&gAFwwLQqaB0|c*@yQ2F>vW>D3sf}^Oo2vH#+6;E?neK z;9W{-qY7z~4i5mU2f*+9(INZMd+biu*qqdQy%UGpiFz7=?<~J)vh=G8?A{&ax;mo562A zzm-ifVmBu-zPDoCGdPcu^UM!r=F3x>Aft7OW)>gBy8*LDEd$!*{W;UpSPC5oXG94XFXWr76R*GE;z6Z5- zU(x;SG^U4P?5-}U0nYaK#~}un%)`74V)__FxB4G$jSAbtpL^wu(K9Q`XA$}P|D>o37 z=Eh~Hp!S9KbhgLQ=mW#*`^v$QrNG5ff?kvMFCu$zL2%M+P%y_5M5bHJwOEYNZ+mDG zrfIL>J8@xcF@qWl$GdH&y1}fKd)a_~O4Ly+j1@`#l86dC!htDMc_0o>?^>}Qw)+4&Ezi?H7!IG22p=z_C>`whFYB){(j+jk4F z^ME(VF4x;vXib9XkgjUXo~m8{9t8QQ^-2>gFS=6TKA&(c)J4D;W979Iyz3YD%P@hv z2l$Mjq@*NJZ5*3&HjQX9pAdI42S^m&M*NwfA6R}bxee@Ohh5t!Kj`xV@@~T0lN*=+ zAcNnuelSDjo^8x;7d==yIv}4WS&6Lyj7*ZMBW1bcUk$d5Yq2zVhz^1>QU;zZL$b{L z8n--}Hafx?pMBk>Qdcu8F@A?IG6MzugLE*v6i}CmXDIhRQZxMaV&c|*^pas&S=nt* zPm>DiawjJzYMJ0M3)px_?MZg`=Vsdo(x>E8i;hP&d=3(CjN9ilYkb1$`TRnp8$+5_ zqMOhF2N^`J_nD{34c7pqW=`1muS=|$Ria=k{Z#y9yv%{pMzP%M*hMv{qlF?*o)LCB z%fv|T*dZiuG4;g7jNd@6RNYbIjrnJoi4o`C^LZ8x*9HU)wcDQ_YG-*k2427N^cyCg zbK`!$jlZrnZ%-QIcU*;qYDqGCfYI|3P-c7}G*BkRjdI3JHxCENx6YQe#k>Nzk7q7L zefK|ID~7C{Eq!|f=5l3P`(ku98PZ+MD%&JRsmkrgtqqe8DLB=aVd4q+WFX>bQEo$# z1uk}d00#E6+^(Jg>#po=Hn)#cDU)}8MqGI3QcYKqKNS0Ky7jIS8~C0bNsb2!+`d< z+rrtSz7AjIUMRSmfyk>Vk22h`hkVw_VruUL=aMv& z+zRu7fUln$*F9-&&nvvu^lhjysfA7F(;7$Y^iAdpaCE;t9l@;>0Cda=_Ryf?M*e1= z$3uh7S<$Fdmc&?Rlj#q%f~7K#o-4yxxFkoI%LF^Z4D6tBgirPK<#Sp_&0IMznH-lT zYpOptB%ht|DN-JfkrpiYLSwzOF&rU?c0MkPQzM)V0|KgYuEFSy=|yS zaHa(Mj&d(%{0T4N-;;LWB8{!f1SEEE57MMx$cQ|20LyEmmk$1a`u`IYA?B!%$uyvj zgmc^4lw#EK7l6zGn*=U~j_$&h-3NZtI-I7vXw&9<8*%L-B<9{q4tg}mux#_~h7f;d zY9-)3Z1K@WLpz1q^9R)&B@?=}gAZ`sY{(kfJlB0UoMtV2Qp?SH4s3InQ!4I7tk6Ug z_V5uNtcpN*lHEq5qpq;wj{)25d95%*6rj4XIoPl76{-ODl+|`V-zbGn|1chV-ke*8 zT7DV3Y3IPJ%4-oG7OyIvNYT;42oibCR6O!X8RBeocx@c21teaRS4 z`>&CtHBzT~2X8Mr#5@xiTsI2isqy@Otu%}ot80yn(9~Gr(^jR0R7=GKkG|X<6g1WM zpzSq_F!7{2g3oRr(m6U)f>RUYbM)j~mffA9e6>QU*4oByeG>+q&&%h{ zlTRM`Yx@1iM*OFZ@^5fYp3^@Adz4 zQR5xi%YB>9-$!RdHOJ%x`6r0C0?THKV0lgZ^O=ODeUxlAycqhdu6DS!KW^b|_0mxN z`tm&6+I+)86;&X#EdwEw1stDzF%Wo*Lz|wm7B!H7+S9GNQ3rA>o@5J$^P0bFW(m_~ zIoAY_Cb)M!W_KsAm7o^GWtya)TS3gFj@c3-XpfGW(3W12KA5QsZ!;0PQ3yNW$~6F)O6f3s;%*BN3g~YoV(T>job18WF{LML|=NxbkD0h z8yclzl?iOJm;?O-5=1angRz2}^?W@1VtAHqU4h@^F3>Zk9Tvbag^B~V(`ttAXh$`= zU_I$`unc57dh1JXqNRb9h09H?oWwhK9ZfSn`(!*!EvtC=(hOC=;EeSq*k=KO(I-ez zQjLa_!B1AYe9Cz|=9YAboEpOM^G)WnKun5`9+a~2E&L=RcHt&Wtzl5=^Hi>Xw_ zl`aWPZ($reyV!pG=b3Muh}FQ{uymwsudTmyT*`|e(|4!%HO{co{J>FUUWmy)W=rR{ z>hmsU__DgJMk^YTQDN~R8`;b&C)#1te8q4tt8J$gc?|I_bZ|kK>K!D%R^>MO*^;zt z8l@t9%J@>k#Dpe0%now{pFzyuohpn)o)eB%RiJIP=5M{997zudv3~ zS-UPft2+jE}jn*Ubzy!q;1Te*HhC)L-@ITdwV* zu2pmj7hQ(j0hD|q2rlUGl|7<34e!6odzl&1oMu_N59K*(it>4^0}DMcj(-zf4A?d` zrY+pPhjX7?U^d&WUSyx~#aQLd9w|;f?PD9)(7y{O|9o(8@O4$yOMB5FJRZL=7?&iA zKup(Hx6rsqvNQ?ZG*0%}|pXo@yevgA3>en7MX;)@__!4** z;=Cm7cr)PRZ7@MCRgH3L*3yZR6KNc@tKsGlO(d^M4FP#npL*W=oD$3hlVY=S7k2~K zAle!EeR=BoJ%#hWWZQt3z-(9h*qyDr^`8JWVw8wW=XCOw6sJ(D@i>TDB-ROs7)&7} zz|^--(}=@fm3i@42~2^gc&+QP4h1EGSV6jqPdKr$@1z}+7Uo{0NIp_$1`AiIKb~$c zcdCY0*I|Yq8!6@sEro5NRRuV!&jR*BIaiNx92}s!5bB-gD3PX^m_9Ymh<~0zNlrwC zY56f%m?H{-Nl6FO<(QRVamsWWk@R{5bk*iV1~SJi|9hZ0sgHPQD7RNutz`9S`3cU6 zbhjw(0LUEGoNQf)^Iq=;SNhf#;)MEV#^CFgpzy8F(Q#ZdxIJJ-{Y|1iDmCU27Bkd- zX8ds>E>EKt_$g7$0~9-{TrwBD>s90xyHJsE)pdPB$tL7xQ?#9HRx&dZw$9F*w4yK6 zMQw1`t70#f1A!1;qMq~tpOP*xIp~kY&{%I3)&;LqW7l+&f+H%FSmk}ju%FVOBLSC= z+znd?@#%5}5(GO1n>LvTo7g%OJ&#~Ii*B4YF{r(&)YM?12;?8(;Jr3D_ zr01(?@VJTU=}ZrdyZ319mLu=^5gQkXT5PXJ zJsEY8N>|ZgQ+otFVt@HapwowPm+>{QAPI39PenXz8q-r z@rj~}QwLLfT$6|gIAI^VV{!@_#?0|bzgl7CaMa`194}mwQ==dM&F?{3#Tjgrh)D9g z_BQpdY?sM+uXRF&>>p)spir|UBqcixhM;q7ba#TStzlgF zBnGghBARPOGtBd>hMzlTB2Tx;(c-auGSh8ZECG}04*~Uc(GbOSBO3GBEUwvz_DSN~ zg;56Ef9vC6m`ih)Ju0XIMDqBDi$VF7#n|OgfQ4_5Hhs}Ub1!B!Ehu*|gl4;~>U3TE z2i0ed_8+{ndxoa{1cx@lC$W zcurI}oJm|-)FF*yS*u5zP(YM$Kv$bu7rP7)2`Ww1kHfFtyxWzPm29rZ~xai@jo6RY@d6`AuxHO|C4zF(R*2U zsj*VL!7Z%VjP_}=WvD5Sep=6IegZ-)6MW>fYPu>joa-Bv#v6dZuIk{<;OY?~@Ddrn zd+&CQYM9|XgpPkqc$yMxs#Qcq$(QLmcd&KSh?ADrX-oqm<*1ii2DqdNTN-KE`6UDa z4s!pFFH@7l2d2kpsN;mvgM9tS(+@Nd?e3Co~J>ZK{Zjht9uF|Nt-8mx_SFG>ng z)>znH!x&uOrVe8U<91t|ax8=1?F5>*Lpo1R%fyo|vVLE_dqYbr0Wjdd+86_O3gLvr z5Vo2EZ30OpLu##ibL^K~2kFPa8>T+Ecfk@yu%9~l*{jD1T+or+et3QQM(yMU&uvNZ;pIXF%#UU5*mIF`}Wv!K$J>w z0nsu3>qgsLF`^FcCqk%)<$F_&VIOBwu4PR6vme~9z*kf3`khmU_+o{w z!xm-Wl?P2o66Z%p_t1xpky5UA5oMUT&#=k1cR!jP zUXVM>m}*TpT#4zcR1!rYZ`IYZ(LU?&&XGev%k2yAKKJ&7Q=z zD&)Gwup8Rz%bExq-85bKU!y|gUMbS+CIcO&ZUUKWgd6XW$tL<5U_Rr~X z()wnk3+xFm+YSYQ;G`h%ipJJh=X9W2?>4j0nsz3Z!heoTtOZZU8eF-cses@HaVLuK zfY>Iyc&~>XreL=+_{`oPpFaLhcB;PGx}!*i6Lj{$4~$9PKep??k-@R*Q@Sl{!~LYM8^oQ~O^ zi}z(roj$GV1R+M@e+YNX_1p5-IAi5KC%YMN{a#fnAx*~a#JKWPN&BS)+RoBZJ#gTW zmto?Wgkxfg*P-xpQ{l+bVY~^S%=nGZf0$#3%6I>_PkIza%?zwllT02;1H z=mCJPW~3MpB9vw1^~~aRB>QXTwEDQRoa0AfRs%eh$_UrVs z<}dI!@B(Z$Yev;wEKy+qz&$-VV{tc$w8Xa4Ej~#xvo+-?vjj9G) ztSj-oo-`Z)(!8u}b>t~iQ_&vn)V#cv$W`0>8hA5G(X|>uJo{sM{$W7#dl6EfN2pRU zk#DEet(+N79)MrnQD6K$(2)J^%#V@wxQA*|)#1uS+eB9hEMyB1T4OdM?Y&#x+1btr z@25I&B_>5H0foXJA>K9sQVDg%nn9o4&wSUB!ijHssCMMc9LS`QC)yXoNRBh?WG|%9 z-&_UIG#YWK40s$;*|rPEF^DnhlmsrEg6alZ#AOA+vqXDrCEI%E!?^ArwFkqs{!u%l z5znQ!BVE&zQI^Y{KgPxRwv$;IqiX>oXAwUf(=$A0r@PR0V@>Q=@#?~n_+F!t0^?XL zlK8Y^h1kX0p^+$HW=~E|>=v@>z5}$*qbi)0@3Cm~EyVCNbEhH2jmgO5ZnP??ciM0A zYL6|nE}>^JO{*)yOUDq8ZPEWWOXnA?VerM1LROmOXLy#U@4thbF6>|rL16>m=3nrM z-yg4)z-oyORr)sMFZv~Cg*NMeew!?iTJ{51ODgby)r`KC<=v>lJr$N z<|z|nGuqANu_4T zB_}hOOy)uIQ}MK{Qj`J>D-M8je!S&hmXq1jip9K)?CKU1Qwe z`1AobXW_0HIdnigudF&uOI-P~J=I0ARo9;CUnlL2E^DjE-A;)ivtp-)=3+K7=*m5 z^xja$OZ%g;8QH~kutea^r43mdUfZ9`ido=fFO7JFQ8U6Em^f3pzM)3TVu{MO##g$@ z7>rMZ0#S&Ob-pLflD}SE=rrH#80Hq56Rh}47NTKbu_|PyZ6&RjUXN9JD+2nro=B^IKjClo8 zUBz9+_QuT8^8tKM)=RV$@Xhvr4C^PPB;Ai zqVL(M$L$1Nq+2i!+;9;Hw)IJ{_2!E`dUA73g(6>h0PWczq|k!GrMS1o`pX^aDTM>K zW7}JrLUo!CCOS=6=b=gYIke|VC(Os?^5Esx*#zTBkAPu*t%+;rL4i4r~?ZpujYm$zVb>9(osb#{=&woR`$L1XwbhzOt5(4^MG)=0RNmU2@s~@N zH8K_vh-7D#2;5@rtTCzVEf{6Z>E>b+9YJoanpepJqxHtpkT^?ozepXK*U^6Yy;tPP z_b$Q|?fX5nrM*MTgHm*ElpTP_WD%bEe||~cK03jg5q?V8pPh7(&>KS&Dh|NC(1d56 z-{BPP!%lvObJzYVK15<7y}rJ_X;3oNc^-=}H8s6UzmP_-FNZ)Nl-}N(mS$!^YPRqR zzo1H_^ndCi*;kU1UP20&Piun+`#QV3sK@g`8#Hd6`7tbo3YF|aaM6P`f@L!Eg9wY1)se|guVH<@eLfZAeq#gGa!axkVS zG{Z6ydRy2oWgkg_9_wwdlALQ{Bw()B26UWmD^Gk4;|ir6STds*+*Qn(-_wD*tUF4s zJ@iELELCoc&W|v~*2Y$ED*UKokf+O7PRV33&HcGWNlpcl;k2|4}&* XazrgcOm`na#QWT literal 0 HcmV?d00001 diff --git a/developer/docs/help/guides/develop/walkthrough/images/windows-save-txt.png b/developer/docs/help/guides/develop/walkthrough/images/windows-save-txt.png new file mode 100644 index 0000000000000000000000000000000000000000..975733e3726146f455846863f77ae77cf3122c09 GIT binary patch literal 24805 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 b&ad!7t3+aL7;w=4Yd~3EL#|TBGVFf=<6+}L literal 0 HcmV?d00001 diff --git a/developer/docs/help/guides/develop/walkthrough/index.md b/developer/docs/help/guides/develop/walkthrough/index.md new file mode 100644 index 0000000000..95e826b594 --- /dev/null +++ b/developer/docs/help/guides/develop/walkthrough/index.md @@ -0,0 +1,46 @@ +--- +title: Keyman Developer Walkthrough +--- + +## Overview + +This walkthrough will give you a basic overview of Keyman Developer’s keyboard development and packaging features. + +Some tutorials seek to give the reader detailed step-by-step instructions to produce a specific result. The focus is on learning the tool and how to use it. All decisions about what to do with the tool are provided by the tutorial. + +Other tutorials seek to present a series of topics and then invite readers to consider how these apply to their own data. + +This walkthrough attempts to provide both tutorial approaches. For each topic in the Table of Contents, the first section of that topic will provide a step-by-step guide to producing a keyboard for the Dagbani language. Subsequent sections under that topic will give other examples and discuss alternative approaches that readers can consider for their own data. + +To begin the "Step-by-Step" tutorial, start with the [Introduction](00-introduction). + +## Table of Contents + + +[Introduction](00-introduction) + +[Creating a Keyboard Project](01-creating-keyboard-project) + +[Designing a Desktop Layout](02-designing-desktop-layout) + +[Creating a Desktop Layout](03-creating-desktop-layout) + +[Using the Debugger](04-using-debugger) + +[Designing a Touch Layout](05-designing-touch-layout) + +[Creating a Touch Layout](06-creating-touch-layout) + +[Writing Keyboard Documentation](07-writing-keyboard-documentation) + +[Preparing a Keyboard Package](08-preparing-keyboard-package) + +[Distributing a Keyboard Package](09-distributing-keyboard-package) + +[Generating a Lexical Model](10-generating-lexical-model) + +[Installing a Keyman Lexical Model](11-installing-lexical-model) + +[Glossary of Key Terms](glossary) + + From 8f36d072784a45609bc9719be90858d32a8bd1d4 Mon Sep 17 00:00:00 2001 From: DavidLRowe Date: Mon, 2 Feb 2026 13:01:35 -0500 Subject: [PATCH 03/45] add TOC link in response to Darcy's suggestion Co-authored-by: Darcy Wong --- developer/docs/help/guides/develop/walkthrough/index.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/developer/docs/help/guides/develop/walkthrough/index.md b/developer/docs/help/guides/develop/walkthrough/index.md index 95e826b594..20095f23f5 100644 --- a/developer/docs/help/guides/develop/walkthrough/index.md +++ b/developer/docs/help/guides/develop/walkthrough/index.md @@ -10,7 +10,8 @@ Some tutorials seek to give the reader detailed step-by-step instructions to pro Other tutorials seek to present a series of topics and then invite readers to consider how these apply to their own data. -This walkthrough attempts to provide both tutorial approaches. For each topic in the Table of Contents, the first section of that topic will provide a step-by-step guide to producing a keyboard for the Dagbani language. Subsequent sections under that topic will give other examples and discuss alternative approaches that readers can consider for their own data. +This walkthrough attempts to provide both tutorial approaches. For each topic in the [Table of Contents](#toc-table-of-contents), the first section of that topic will provide a step-by-step guide to producing a keyboard for the Dagbani language. Subsequent sections under that topic will give other examples and discuss alternative approaches that readers can consider for their own data. + To begin the "Step-by-Step" tutorial, start with the [Introduction](00-introduction). From aa6f6d2fa330fd94be2e2771f5ba2a80a4b70164 Mon Sep 17 00:00:00 2001 From: DavidLRowe Date: Mon, 2 Feb 2026 13:47:19 -0500 Subject: [PATCH 04/45] update arrows and macOS references --- .../help/guides/develop/walkthrough/00-introduction.md | 8 ++++---- .../walkthrough/01-creating-keyboard-project.md | 10 +++++----- .../develop/walkthrough/02-designing-desktop-layout.md | 8 ++++---- .../develop/walkthrough/03-creating-desktop-layout.md | 8 ++++---- .../guides/develop/walkthrough/04-using-debugger.md | 8 ++++---- .../develop/walkthrough/05-designing-touch-layout.md | 8 ++++---- .../develop/walkthrough/06-creating-touch-layout.md | 8 ++++---- .../walkthrough/07-writing-keyboard-documentation.md | 8 ++++---- .../walkthrough/08-preparing-keyboard-package.md | 8 ++++---- .../walkthrough/09-distributing-keyboard-package.md | 8 ++++---- .../develop/walkthrough/10-generating-lexical-model.md | 8 ++++---- .../develop/walkthrough/11-installing-lexical-model.md | 4 ++-- 12 files changed, 47 insertions(+), 47 deletions(-) diff --git a/developer/docs/help/guides/develop/walkthrough/00-introduction.md b/developer/docs/help/guides/develop/walkthrough/00-introduction.md index 5c4d0faaa3..cf5d032750 100644 --- a/developer/docs/help/guides/develop/walkthrough/00-introduction.md +++ b/developer/docs/help/guides/develop/walkthrough/00-introduction.md @@ -2,7 +2,7 @@ title: Introduction --- -[Next: Part 1 - Creating a Keyboard Project →](01-creating-keyboard-project) +[Next: Part 1 - Creating a Keyboard Project >](01-creating-keyboard-project) ## Step-by-Step @@ -14,7 +14,7 @@ If you encounter unfamiliar terms, please consult the [glossary](glossary). Keyman Developer is a powerful tool you can use to create custom keyboards optimized to type in any language you choose. Keyboard authors can distribute their work for desktop, web, tablet and phone, enabling global communities to quickly benefit from keyboards made for their own language. -Keyboards created with Keyman Developer can be used on Windows, Mac, Linux, iOS, Android, and the web. +Keyboards created with Keyman Developer can be used on Windows, macOS, Linux, iOS, Android, and the web. This tutorial focuses on the Keyman Developer IDE (integrated development environment). Currently this software is Windows-only, although the command line tools it uses can run on other platforms (such as Linux and macOS). @@ -29,7 +29,7 @@ After installing Keyman Developer, you should be able to run it on your computer Note that Keyman Developer is a separate app from Keyman, which is the app that lets you use any keyboard created with Keyman Developer. In order to use the keyboard you create with Keyman Developer, you'll need to have the Keyman app installed on your computer or device. -Keyman is available on the following platforms: Windows, MacOS, Linux, iOS, Android, and the web. +Keyman is available on the following platforms: Windows, macOS, Linux, iOS, Android, and the web. The icons for Keyman Developer ![Keyman Developer icon](images/keyman-developer-icon.png) and Keyman ![Keyman icon](images/keyman-icon.png) are similar but slightly different. @@ -71,5 +71,5 @@ There is also a mechanism for reporting problems. [Keyman Bug Reports](https://g Report Keyman software bugs and issues here. NOTE: NOT for help and support questions. The Keyman community forum is the best place to ask for help with development. Think you’ve found a Keyman bug or a problem with a specific keyboard? Describe what you’ve found on the Keyman community forum and ask whether to report a bug. -[Next: Part 1 - Creating a Keyboard Project →](01-creating-keyboard-project) +[Next: Part 1 - Creating a Keyboard Project >](01-creating-keyboard-project) diff --git a/developer/docs/help/guides/develop/walkthrough/01-creating-keyboard-project.md b/developer/docs/help/guides/develop/walkthrough/01-creating-keyboard-project.md index dedf88f71c..630c00821c 100644 --- a/developer/docs/help/guides/develop/walkthrough/01-creating-keyboard-project.md +++ b/developer/docs/help/guides/develop/walkthrough/01-creating-keyboard-project.md @@ -4,9 +4,9 @@ title: Creating a Keyboard Project Part 1 of the [Keyman Developer Walkthrough](../walkthrough). -[← Back: Introduction](00-introduction) +[< Back: Introduction](00-introduction) -[Next: Part 2 - Designing a Desktop Layout →](02-designing-desktop-layout) +[Next: Part 2 - Designing a Desktop Layout >](02-designing-desktop-layout) ## Step-by-Step @@ -148,7 +148,7 @@ If you select `any`, you do not need to (and should not) choose any other option It is best practice to support as many devices as possible when creating your keyboard, because it is hard to predict who will use your keyboard in the future. By making your keyboard as accessible as possible, you can help even more people. -If you decide not to include a touch layout, untick the `any` option and select `desktop` and `web` which will allow the keyboard to be used on a web page as well as on Linux, Mac and Windows (the three `desktop` platforms). If you later add a touch layout, you can reverse this process and go back to selecting just `any`. +If you decide not to include a touch layout, untick the `any` option and select `desktop` and `web` which will allow the keyboard to be used on a web page as well as on Linux, macOS and Windows (the three `desktop` platforms). If you later add a touch layout, you can reverse this process and go back to selecting just `any`. ### Path @@ -184,6 +184,6 @@ When ready, select `OK` to download the files, adjust the filenames and open the Now that you have your project set up, continue to the next section of the tutorial to start developing your first keyboard layout. -[← Back: Introduction](00-introduction) +[< Back: Introduction](00-introduction) -[Next: Part 2 - Designing a Desktop Layout →](02-designing-desktop-layout) \ No newline at end of file +[Next: Part 2 - Designing a Desktop Layout >](02-designing-desktop-layout) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/walkthrough/02-designing-desktop-layout.md b/developer/docs/help/guides/develop/walkthrough/02-designing-desktop-layout.md index 2e398aa6ee..2fc65182cd 100644 --- a/developer/docs/help/guides/develop/walkthrough/02-designing-desktop-layout.md +++ b/developer/docs/help/guides/develop/walkthrough/02-designing-desktop-layout.md @@ -4,9 +4,9 @@ title: Designing a Desktop Layout Part 2 of the [Keyman Developer Walkthrough](../walkthrough). -[← Back: Part 1 - Creating a Keyboard Project](01-creating-keyboard-project) +[< Back: Part 1 - Creating a Keyboard Project](01-creating-keyboard-project) -[Next: Part 3 - Creating a Desktop Layout →](03-creating-desktop-layout) +[Next: Part 3 - Creating a Desktop Layout >](03-creating-desktop-layout) ## Step-by-Step @@ -140,6 +140,6 @@ That could be done with the `Design` mode using the visual layout tools, or by a We would then want to add rules to allow the user to type the characters that were on the ten keys that we repurposed to type the additional characters, for example type the `;` key then the `[` key to get an actual `[` character. -[← Back: Part 1 - Creating a Keyboard Project](01-creating-keyboard-project) +[< Back: Part 1 - Creating a Keyboard Project](01-creating-keyboard-project) -[Next: Part 3 - Creating a Desktop Layout →](03-creating-desktop-layout) \ No newline at end of file +[Next: Part 3 - Creating a Desktop Layout >](03-creating-desktop-layout) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/walkthrough/03-creating-desktop-layout.md b/developer/docs/help/guides/develop/walkthrough/03-creating-desktop-layout.md index 80b64b9fa6..090e9cb627 100644 --- a/developer/docs/help/guides/develop/walkthrough/03-creating-desktop-layout.md +++ b/developer/docs/help/guides/develop/walkthrough/03-creating-desktop-layout.md @@ -4,9 +4,9 @@ title: Creating a Desktop Layout Part 3 of the [Keyman Developer Walkthrough](../walkthrough). -[← Back: Part 2 - Designing a Desktop Layout](02-designing-desktop-layout) +[< Back: Part 2 - Designing a Desktop Layout](02-designing-desktop-layout) -[Next: Part 4 - Using the Debugger →](04-using-debugger) +[Next: Part 4 - Using the Debugger >](04-using-debugger) ## Step-by-Step @@ -322,6 +322,6 @@ Then complete the information needed: - Select `Save` - In the `Output Bitmap Parameters` dialog, select `One file per shift state`, `Output Unicode keyboards`, and adjust the width of the image as needed, then select `OK`. Keyman Developer will create one or more files using the base filename plus letters to indicate the shift state plus `.png`. You can reference these files in your welcome.htm file. -[← Back: Part 2 - Designing a Desktop Layout](02-designing-desktop-layout) +[< Back: Part 2 - Designing a Desktop Layout](02-designing-desktop-layout) -[Next: Part 4 - Using the Debugger →](04-using-debugger) \ No newline at end of file +[Next: Part 4 - Using the Debugger >](04-using-debugger) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/walkthrough/04-using-debugger.md b/developer/docs/help/guides/develop/walkthrough/04-using-debugger.md index 2ccef0a387..86fc2b6c46 100644 --- a/developer/docs/help/guides/develop/walkthrough/04-using-debugger.md +++ b/developer/docs/help/guides/develop/walkthrough/04-using-debugger.md @@ -2,9 +2,9 @@ Part 4 of the [Keyman Developer Walkthrough](../walkthrough). -[← Back: Part 3 - Creating a Desktop Layout](03-creating-desktop-layout) +[< Back: Part 3 - Creating a Desktop Layout](03-creating-desktop-layout) -[Next: Part 5 - Designing a Touch Layout →](05-designing-touch-layout) +[Next: Part 5 - Designing a Touch Layout >](05-designing-touch-layout) ## Step-by-Step @@ -29,6 +29,6 @@ See [https://help.keyman.com/developer/current-version/context/debug](https://he When compiling your Keyman code, Keyman Developer will report any errors, warnings and hints in the box at the bottom of the window. The message will give a short description of what the compiler found was wrong along with the line number of where the problem was detected. The error, warning or hint has an identifier (“KM02033” for example). This identifier is a link to a more detailed description. -[← Back: Part 3 - Creating a Desktop Layout](03-creating-desktop-layout) +[< Back: Part 3 - Creating a Desktop Layout](03-creating-desktop-layout) -[Next: Part 5 - Designing a Touch Layout →](05-designing-touch-layout) \ No newline at end of file +[Next: Part 5 - Designing a Touch Layout >](05-designing-touch-layout) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/walkthrough/05-designing-touch-layout.md b/developer/docs/help/guides/develop/walkthrough/05-designing-touch-layout.md index 8850187e8e..cd8fee607b 100644 --- a/developer/docs/help/guides/develop/walkthrough/05-designing-touch-layout.md +++ b/developer/docs/help/guides/develop/walkthrough/05-designing-touch-layout.md @@ -4,9 +4,9 @@ title: Designing a Touch Layout Part 5 of the [Keyman Developer Walkthrough](../walkthrough). -[← Back: Part 4 - Using the Debugger](04-using-debugger) +[< Back: Part 4 - Using the Debugger](04-using-debugger) -[Next: Part 6 - Creating a Touch Layout →](06-creating-touch-layout) +[Next: Part 6 - Creating a Touch Layout >](06-creating-touch-layout) ## Step-by-Step @@ -53,6 +53,6 @@ To switch to a “phone” layout, select the basic template, which rearranges t (For more details, see the next topic.) The result will need to be reviewed and tested, but using this approach may save you some time. -[← Back: Part 4 - Using the Debugger](04-using-debugger) +[< Back: Part 4 - Using the Debugger](04-using-debugger) -[Next: Part 6 - Creating a Touch Layout →](06-creating-touch-layout) \ No newline at end of file +[Next: Part 6 - Creating a Touch Layout >](06-creating-touch-layout) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/walkthrough/06-creating-touch-layout.md b/developer/docs/help/guides/develop/walkthrough/06-creating-touch-layout.md index e2d383b0df..e820856f7e 100644 --- a/developer/docs/help/guides/develop/walkthrough/06-creating-touch-layout.md +++ b/developer/docs/help/guides/develop/walkthrough/06-creating-touch-layout.md @@ -4,9 +4,9 @@ title: Creating a Touch Layout Part 6 of the [Keyman Developer Walkthrough](../walkthrough). -[← Back: Part 5 - Designing a Touch Keyboard](05-designing-touch-layout) +[< Back: Part 5 - Designing a Touch Keyboard](05-designing-touch-layout) -[Next: Part 7 - Writing Keyboard Documentation Files →](07-writing-keyboard-documentation) +[Next: Part 7 - Writing Keyboard Documentation Files >](07-writing-keyboard-documentation) ## Step-by-Step @@ -146,6 +146,6 @@ See [https://help.keyman.com/developer/current-version/context/keyboard-editor#t See the end of the Step-by-Step section above for a description of how to use Keyman Developer to test your touch layout in a browser window. It’s also possible to transfer the .kmp file to a touch device and install the keyboard there for testing. -[← Back: Part 5 - Designing a Touch Keyboard](05-designing-touch-layout) +[< Back: Part 5 - Designing a Touch Keyboard](05-designing-touch-layout) -[Next: Part 7 - Writing Keyboard Documentation Files →](07-writing-keyboard-documentation) \ No newline at end of file +[Next: Part 7 - Writing Keyboard Documentation Files >](07-writing-keyboard-documentation) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/walkthrough/07-writing-keyboard-documentation.md b/developer/docs/help/guides/develop/walkthrough/07-writing-keyboard-documentation.md index c1475f82b4..e64ba5163c 100644 --- a/developer/docs/help/guides/develop/walkthrough/07-writing-keyboard-documentation.md +++ b/developer/docs/help/guides/develop/walkthrough/07-writing-keyboard-documentation.md @@ -4,9 +4,9 @@ title: Writing Keyboard Documentation Part 7 of the [Keyman Developer Walkthrough](../walkthrough). -[← Back: Part 6 - Creating a Touch Layout](06-creating-touch-layout) +[< Back: Part 6 - Creating a Touch Layout](06-creating-touch-layout) -[Next: Part 8 - Preparing a Keyboard Package →](08-preparing-keyboard-package) +[Next: Part 8 - Preparing a Keyboard Package >](08-preparing-keyboard-package) ## Step-by-Step @@ -105,6 +105,6 @@ The Keyman keyboards repository requires that this PHP file have the name of the The PHP help file often contains the same information as is in the welcome.htm file. See [Keyman Keyboard help document (PHP help file)](https://help.keyman.com/developer/keyboards/phphelpfile) for more details. -[← Back: Part 6 - Creating a Touch Layout](06-creating-touch-layout) +[< Back: Part 6 - Creating a Touch Layout](06-creating-touch-layout) -[Next: Part 8 - Preparing a Keyboard Package →](08-preparing-keyboard-package) \ No newline at end of file +[Next: Part 8 - Preparing a Keyboard Package >](08-preparing-keyboard-package) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/walkthrough/08-preparing-keyboard-package.md b/developer/docs/help/guides/develop/walkthrough/08-preparing-keyboard-package.md index 86d59a1420..63be79445a 100644 --- a/developer/docs/help/guides/develop/walkthrough/08-preparing-keyboard-package.md +++ b/developer/docs/help/guides/develop/walkthrough/08-preparing-keyboard-package.md @@ -4,9 +4,9 @@ title: Preparing a Keyboard Package Part 8 of the [Keyman Developer Walkthrough](../walkthrough). -[← Back: Part 7 - Writing Keyboard Documentation](07-writing-keyboard-documentation) +[< Back: Part 7 - Writing Keyboard Documentation](07-writing-keyboard-documentation) -[Next: Part 9 - Distributing a Keyboard Package →](09-distributing-keyboard-package) +[Next: Part 9 - Distributing a Keyboard Package >](09-distributing-keyboard-package) ## Step-by-Step @@ -58,6 +58,6 @@ Here is where you can enter information for: - Image file: If you supply a 140 pixel wide x 250 pixel high image in JPEG or PNG format, then your custom image will be shown during installation (in place of the default Keyman image). Your image file must be added to the Files list before it will be available to be selected here. - Related packages: If your keyboard is part of a group of keyboards, you can specify which other keyboards are part of the group. (For example, you might have three keyboards for the same language, one based on the QWERTY layout, one AZERTY, one QWERTZ, and you could use this field to note the relationship between them.) You can also use this feature to deprecate another keyboard that your keyboard supersedes. -[← Back: Part 7 - Writing Keyboard Documentation](07-writing-keyboard-documentation) +[< Back: Part 7 - Writing Keyboard Documentation](07-writing-keyboard-documentation) -[Next: Part 9 - Distributing a Keyboard Package →](09-distributing-keyboard-package) \ No newline at end of file +[Next: Part 9 - Distributing a Keyboard Package >](09-distributing-keyboard-package) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/walkthrough/09-distributing-keyboard-package.md b/developer/docs/help/guides/develop/walkthrough/09-distributing-keyboard-package.md index d2e0aff0e7..1580d9d2fd 100644 --- a/developer/docs/help/guides/develop/walkthrough/09-distributing-keyboard-package.md +++ b/developer/docs/help/guides/develop/walkthrough/09-distributing-keyboard-package.md @@ -4,9 +4,9 @@ title: Distributing a Keyboard Package Part 9 of the [Keyman Developer Walkthrough](../walkthrough). -[← Back: Part 8 - Preparing a Keyboard Package](08-preparing-keyboard-package) +[< Back: Part 8 - Preparing a Keyboard Package](08-preparing-keyboard-package) -[Next: Part 10 - Generating a Lexical Model →](10-generating-lexical-model) +[Next: Part 10 - Generating a Lexical Model >](10-generating-lexical-model) ## Step-by-Step @@ -30,6 +30,6 @@ With Keyman Developer running, it’s possible to select `Packaging`, and the `. The Keyboard App Builder (KAB) lets you put a Keyman keyboard (and optionally a lexical model) into an app for iOS or Android, which can be distributed. More details can be found on the [Keyboard App Builder](https://software.sil.org/keyboardappbuilder/) page. -[← Back: Part 8 - Preparing a Keyboard Package](08-preparing-keyboard-package) +[< Back: Part 8 - Preparing a Keyboard Package](08-preparing-keyboard-package) -[Next: Part 10 - Generating a Lexical Model →](10-generating-lexical-model) \ No newline at end of file +[Next: Part 10 - Generating a Lexical Model >](10-generating-lexical-model) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/walkthrough/10-generating-lexical-model.md b/developer/docs/help/guides/develop/walkthrough/10-generating-lexical-model.md index 47d908c0ce..8902f8dda4 100644 --- a/developer/docs/help/guides/develop/walkthrough/10-generating-lexical-model.md +++ b/developer/docs/help/guides/develop/walkthrough/10-generating-lexical-model.md @@ -4,9 +4,9 @@ title: Generating a Lexical Model Part 10 of the [Keyman Developer Walkthrough](../walkthrough). -[← Back: Part 9 - Distributing a Keyboard Package](09-distributing-keyboard-package) +[< Back: Part 9 - Distributing a Keyboard Package](09-distributing-keyboard-package) -[Next: Part 11 - Installing a Keyman Lexical Model →](11-installing-lexical-model) +[Next: Part 11 - Installing a Keyman Lexical Model >](11-installing-lexical-model) ## Step-by-Step @@ -368,6 +368,6 @@ Note: The text provided for this tutorial is already in a `.txt` file format. Fo ![](images/windows-save-txt.png) -[← Back: Part 9 - Distributing a Keyboard Package](09-distributing-keyboard-package) +[< Back: Part 9 - Distributing a Keyboard Package](09-distributing-keyboard-package) -[Next: Part 11 - Installing a Keyman Lexical Model →](11-installing-lexical-model) +[Next: Part 11 - Installing a Keyman Lexical Model >](11-installing-lexical-model) diff --git a/developer/docs/help/guides/develop/walkthrough/11-installing-lexical-model.md b/developer/docs/help/guides/develop/walkthrough/11-installing-lexical-model.md index 34e78f8216..2531ab71e6 100644 --- a/developer/docs/help/guides/develop/walkthrough/11-installing-lexical-model.md +++ b/developer/docs/help/guides/develop/walkthrough/11-installing-lexical-model.md @@ -4,7 +4,7 @@ title: Installing a Keyman Lexical Model Part 11 of the [Keyman Developer Walkthrough](../walkthrough). -[← Back: Part 10 - Generating a Lexical Model](10-generating-lexical-model) +[< Back: Part 10 - Generating a Lexical Model](10-generating-lexical-model) ## Step-by-Step @@ -29,4 +29,4 @@ If an Android or iOS device has access to the Keyman package file (.kmp) that co As mentioned earlier, the Keyboard App Builder (KAB) lets you put a Keyman keyboard along with a lexical model into an app for iOS or Android, which can be distributed. More details can be found on the [Keyboard App Builder](https://software.sil.org/keyboardappbuilder/) page. -[← Back: Part 10 - Generating a Lexical Model](10-generating-lexical-model) \ No newline at end of file +[< Back: Part 10 - Generating a Lexical Model](10-generating-lexical-model) \ No newline at end of file From 0373122027c882b0ed31fd40095e2aaaf7105ae0 Mon Sep 17 00:00:00 2001 From: DavidLRowe Date: Mon, 2 Feb 2026 13:52:54 -0500 Subject: [PATCH 05/45] update macOS references in glossary --- developer/docs/help/guides/develop/walkthrough/glossary.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/developer/docs/help/guides/develop/walkthrough/glossary.md b/developer/docs/help/guides/develop/walkthrough/glossary.md index 336afef590..66375d0152 100644 --- a/developer/docs/help/guides/develop/walkthrough/glossary.md +++ b/developer/docs/help/guides/develop/walkthrough/glossary.md @@ -6,11 +6,11 @@ title: Glossary of Key Terms ### Keyman Developer -Keyman Developer is a powerful tool you can use to create custom keyboards optimized to type in any language you choose. Keyboards created with Keyman Developer can be used on Windows, Mac, Linux, iOS, Android, and the web. The Keyman Developer IDE (integrated development environment) is currently Windows-only, however the command line tools it uses can run on other platforms (such as Linux and macOS). +Keyman Developer is a powerful tool you can use to create custom keyboards optimized to type in any language you choose. Keyboards created with Keyman Developer can be used on Windows, macOS, Linux, iOS, Android, and the web. The Keyman Developer IDE (integrated development environment) is currently Windows-only, however the command line tools it uses can run on other platforms (such as Linux and macOS). ### Keyman -The application that allows users to actually use keyboards created with Keyman Developer. Available on Windows, MacOS, Linux, iOS, Android, and the web. Distinguished from Keyman Developer by its regular (not faded) app icon. +The application that allows users to actually use keyboards created with Keyman Developer. Available on Windows, macOS, Linux, iOS, Android, and the web. Distinguished from Keyman Developer by its regular (not faded) app icon. ### Keyboard Editor @@ -40,7 +40,7 @@ A subset of the keys in a keyboard layout. This subset is accessed by a modifier ### Desktop Layout -A keyboard layout designed for use on desktop/laptop computers with physical keyboards (Windows, Mac, Linux). It is also used when a physical keyboard is attached to a touch device. Stored in .kmn files. +A keyboard layout designed for use on desktop/laptop computers with physical keyboards (Windows, macOS, Linux). It is also used when a physical keyboard is attached to a touch device. Stored in .kmn files. ### Visual Keyboard / On Screen Keyboard From 65c151b33cfe0698bdc45ae7fc976a1ff83262d5 Mon Sep 17 00:00:00 2001 From: Shawn Schantz Date: Wed, 4 Feb 2026 14:40:43 -0500 Subject: [PATCH 06/45] fix(mac): improved adherence to backspace rule introduces an alternative to approach to backspace for compliant apps by using the insertText API to replace a character to be deleted and the preceding character from the context with only the character from the context Fixes: #15543 --- .../Keyman4MacIM/KMInputMethodEventHandler.m | 96 ++++++++++++++++--- .../Keyman4MacIM/TextApiCompliance.h | 1 + 2 files changed, 84 insertions(+), 13 deletions(-) diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMInputMethodEventHandler.m b/mac/Keyman4MacIM/Keyman4MacIM/KMInputMethodEventHandler.m index dd9a8a3cee..20409a3a09 100644 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMInputMethodEventHandler.m +++ b/mac/Keyman4MacIM/Keyman4MacIM/KMInputMethodEventHandler.m @@ -8,6 +8,7 @@ #import "KMInputMethodEventHandler.h" #import #import /* For kVK_ constants. */ +#import #import "KeySender.h" #import "TextApiCompliance.h" #import "KMSettingsRepository.h" @@ -370,7 +371,7 @@ CGEventSourceRef _sourceForGeneratedEvent = nil; contextString = attributedString.string; //only uncomment for testing as we do not want to write context in logs - //os_log_debug([KMLogs testLog], " length: %lu result: %{public}@", contextString.length, contextString); + //os_log_debug([KMLogs keyTraceLog], " length: %lu result: %{public}@", contextString.length, contextString); } } } @@ -405,18 +406,7 @@ CGEventSourceRef _sourceForGeneratedEvent = nil; [KMSentryHelper addDebugBreadCrumb:@"event" message:message]; [self insertAndReplaceTextForOutput:output client:client]; } else if (output.isDeleteOnlyScenario) { - if ((event.keyCode == kVK_Delete) && output.codePointsToDeleteBeforeInsert == 1) { - // let the delete pass through in the original event rather than sending a new delete - NSString *message = @"applyOutputToTextInputClient, delete only scenario with passthrough"; - os_log_debug([KMLogs keyTraceLog], "%@", message); - [KMSentryHelper addDebugBreadCrumb:@"event" message:message]; - handledEvent = NO; - } else { - NSString *message = @"applyOutputToTextInputClient, delete only scenario"; - os_log_debug([KMLogs keyTraceLog], "%@", message); - [KMSentryHelper addDebugBreadCrumb:@"event" message:message]; - [self sendEvents:event forOutput:output]; - } + handledEvent = [self handleDeleteOnlyScenario:output keyDownEvent:event client:client]; } else if (output.isDeleteAndInsertScenario) { // TODO: fix issue #10246 /* @@ -511,6 +501,86 @@ CGEventSourceRef _sourceForGeneratedEvent = nil; } } +/** + * Handles deleting without an associated insert in one of three methods: + * 1. delete via replace: do the delete by replacing two (or more) characters with one. + * 2. backspace passthrough : if the original keydown event was a backspace, pass it through unhandled + * 3. generate event: generate keydown backspace events as necessary + */ +-(BOOL)handleDeleteOnlyScenario:(CoreKeyOutput*)output keyDownEvent:(nonnull NSEvent *)event client:(id) client { + + // attempt to delete by replacing -- for compliant apps only + if ([self handleDeleteWithReplacement:output keyDownEvent:event client:client]) { + return YES; + } + + // pass through if this was a backspace keydown event + if ((event.keyCode == kVK_Delete) && output.codePointsToDeleteBeforeInsert == 1) { + // let the delete pass through in the original event rather than sending a new delete + NSString *message = @"handleDeleteOnlyForOutput, delete only scenario with passthrough"; + os_log_debug([KMLogs keyTraceLog], "%@", message); + [KMSentryHelper addDebugBreadCrumb:@"event" message:message]; + + // instruct system to handle the event + return NO; + } + // otherwise generate a backspace + else { + NSString *message = @"handleDeleteOnlyForOutput, send backspace event"; + os_log_debug([KMLogs keyTraceLog], "%@", message); + [KMSentryHelper addDebugBreadCrumb:@"event" message:message]; + [self sendEvents:event forOutput:output]; + + return YES; + } +} + +/** + * For compliant apps only. + * This an attempt to do a more precise delete. When generating a backspace event or allowing a backspace + * to pass through, it may delete a combining diacritic and the preceding codepoint that it combines with. + * Instead, we can delete the combining diacritic alone by using the insertText API to replace two code points with one. + * This method only works for compliant apps because non-compliant apps do not support the insertText API. + */ +-(BOOL)handleDeleteWithReplacement:(CoreKeyOutput*)output keyDownEvent:(nonnull NSEvent *)event client:(id) client { + BOOL handledEvent = NO; + NSString *context = [self readContext:event forClient:client]; + int codePointsToDelete = (int) output.codePointsToDeleteBeforeInsert; + + if ((self.apiCompliance.canReplaceText) && ([context length] > codePointsToDelete)) { + int codePointsToReplace = codePointsToDelete + 1; + NSRange replacementStringRange = NSMakeRange([context length] - codePointsToReplace, 1); + NSString *replacementString = [context substringWithRange:replacementStringRange]; + + // replace only works for non-control characters + // if replacementString contains control characters, then return without handling event + NSString *message = nil; + if ([self containsControlCharacter:replacementString]) { + message = @"handleDeleteByReplace, replacementString contains control characters, cannot delete with replace"; + os_log_debug([KMLogs keyTraceLog], "%@", message); + [KMSentryHelper addDebugBreadCrumb:@"event" message:message]; + return NO; + } else { + message = @"handleDeleteByReplace, canReplaceText == true"; + os_log_debug([KMLogs keyTraceLog], "%@", message); + [KMSentryHelper addDebugBreadCrumb:@"event" message:message]; + handledEvent = YES; + } + + NSRange replacementRange = NSMakeRange(replacementStringRange.location, codePointsToReplace); + [client insertText:replacementString replacementRange:replacementRange]; + } + + return handledEvent; +} + +-(BOOL) containsControlCharacter:(NSString*)text { + NSCharacterSet *controlSet = [NSCharacterSet controlCharacterSet]; + NSRange range = [text rangeOfCharacterFromSet:controlSet]; + + return (range.location != NSNotFound); +} + /** * Calculates the range where text will be inserted and replace existing text. * Returning {NSNotFound, NSNotFound} for range signifies to insert at current location without replacement. diff --git a/mac/Keyman4MacIM/Keyman4MacIM/TextApiCompliance.h b/mac/Keyman4MacIM/Keyman4MacIM/TextApiCompliance.h index 1f5b55f17f..40c516a8db 100644 --- a/mac/Keyman4MacIM/Keyman4MacIM/TextApiCompliance.h +++ b/mac/Keyman4MacIM/Keyman4MacIM/TextApiCompliance.h @@ -22,6 +22,7 @@ NS_ASSUME_NONNULL_BEGIN -(void) checkComplianceAfterInsert:(NSString *)insertedText deleted:(NSString *)deletedText; -(BOOL)isComplianceUncertain; -(BOOL)canReadText; +-(BOOL)canReplaceText; -(BOOL)mustBackspaceUsingEvents; @end From c2a667635a389c45ff169ca20e3878c40b1f91aa Mon Sep 17 00:00:00 2001 From: Shawn Schantz <89134789+sgschantz@users.noreply.github.com> Date: Tue, 10 Feb 2026 21:53:05 -0500 Subject: [PATCH 07/45] Update mac/Keyman4MacIM/Keyman4MacIM/KMInputMethodEventHandler.m Co-authored-by: Marc Durdin --- .../Keyman4MacIM/KMInputMethodEventHandler.m | 31 ++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMInputMethodEventHandler.m b/mac/Keyman4MacIM/Keyman4MacIM/KMInputMethodEventHandler.m index 20409a3a09..659d723c01 100644 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMInputMethodEventHandler.m +++ b/mac/Keyman4MacIM/Keyman4MacIM/KMInputMethodEventHandler.m @@ -537,10 +537,33 @@ CGEventSourceRef _sourceForGeneratedEvent = nil; /** * For compliant apps only. - * This an attempt to do a more precise delete. When generating a backspace event or allowing a backspace - * to pass through, it may delete a combining diacritic and the preceding codepoint that it combines with. - * Instead, we can delete the combining diacritic alone by using the insertText API to replace two code points with one. - * This method only works for compliant apps because non-compliant apps do not support the insertText API. + * + * This an attempt to make sure that deletion removes only the expected codepoints. + * When handling a transform which only deletes a character, or when allowing a + * backspace to pass through, the OS or application may not use the same rules + * around deletion as Keyman -- especially when deleting clusters such as letter + + * combining diacritic (e.g. `U+0062 U+0301`), where some applications may delete + * both together as they represent a single 'grapheme cluster'. + * + * (Note, the question of whether it is appropriate for backspace to delete a + * cluster rather than a codepoint from an end-user perspective is not relevant + * here, because what is important is that we match the rules that the keyboard has + * provided, which means we need a method of deleting a precise number of + * codepoints. The keyboard author can and should include rules for cluster + * deletion that meet end-user expectations.) + * + * The `insertText` API takes two parameters: a string to insert, and a range to + * replace with that string. However, we cannot simply pass through a zero-length + * insertion string along with the range to delete, because the `insertText` API + * treats this as an invalid call and ignores it. + * + * Instead, we can delete the desired number of codepoints only by using the + * `insertText` API to replace e.g. two codepoints with one. + * + * This method only works for compliant apps because non-compliant apps do not + * support the `insertText` API. + * + * Ref: https://developer.apple.com/documentation/appkit/nstextinputclient/inserttext(_:replacementrange:) */ -(BOOL)handleDeleteWithReplacement:(CoreKeyOutput*)output keyDownEvent:(nonnull NSEvent *)event client:(id) client { BOOL handledEvent = NO; From 553a2e557184ba5d943f103087fc4863cddbfa57 Mon Sep 17 00:00:00 2001 From: Shawn Schantz <89134789+sgschantz@users.noreply.github.com> Date: Tue, 10 Feb 2026 21:54:00 -0500 Subject: [PATCH 08/45] Apply suggestions from code review Co-authored-by: Marc Durdin --- mac/Keyman4MacIM/Keyman4MacIM/KMInputMethodEventHandler.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMInputMethodEventHandler.m b/mac/Keyman4MacIM/Keyman4MacIM/KMInputMethodEventHandler.m index 659d723c01..828daec2f9 100644 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMInputMethodEventHandler.m +++ b/mac/Keyman4MacIM/Keyman4MacIM/KMInputMethodEventHandler.m @@ -515,7 +515,7 @@ CGEventSourceRef _sourceForGeneratedEvent = nil; } // pass through if this was a backspace keydown event - if ((event.keyCode == kVK_Delete) && output.codePointsToDeleteBeforeInsert == 1) { + if (event.keyCode == kVK_Delete && output.codePointsToDeleteBeforeInsert == 1) { // let the delete pass through in the original event rather than sending a new delete NSString *message = @"handleDeleteOnlyForOutput, delete only scenario with passthrough"; os_log_debug([KMLogs keyTraceLog], "%@", message); @@ -524,8 +524,8 @@ CGEventSourceRef _sourceForGeneratedEvent = nil; // instruct system to handle the event return NO; } - // otherwise generate a backspace else { + // otherwise generate a backspace NSString *message = @"handleDeleteOnlyForOutput, send backspace event"; os_log_debug([KMLogs keyTraceLog], "%@", message); [KMSentryHelper addDebugBreadCrumb:@"event" message:message]; From f8e9f7221023254cc4536a2a60435f7b9a290d12 Mon Sep 17 00:00:00 2001 From: Shawn Schantz Date: Sat, 14 Feb 2026 16:02:53 -0500 Subject: [PATCH 09/45] fix(mac): improved adherence to backspace rule deals with preceding character being a surrogate pair when a delete occurs Fixes: #15543 --- .../Keyman4MacIM/KMInputMethodEventHandler.m | 133 +++++++++++++++--- 1 file changed, 114 insertions(+), 19 deletions(-) diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMInputMethodEventHandler.m b/mac/Keyman4MacIM/Keyman4MacIM/KMInputMethodEventHandler.m index 828daec2f9..3dfbd8593b 100644 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMInputMethodEventHandler.m +++ b/mac/Keyman4MacIM/Keyman4MacIM/KMInputMethodEventHandler.m @@ -568,33 +568,128 @@ CGEventSourceRef _sourceForGeneratedEvent = nil; -(BOOL)handleDeleteWithReplacement:(CoreKeyOutput*)output keyDownEvent:(nonnull NSEvent *)event client:(id) client { BOOL handledEvent = NO; NSString *context = [self readContext:event forClient:client]; - int codePointsToDelete = (int) output.codePointsToDeleteBeforeInsert; - if ((self.apiCompliance.canReplaceText) && ([context length] > codePointsToDelete)) { - int codePointsToReplace = codePointsToDelete + 1; - NSRange replacementStringRange = NSMakeRange([context length] - codePointsToReplace, 1); - NSString *replacementString = [context substringWithRange:replacementStringRange]; + // guard: only for compliant apps with sufficient context + if (!(self.apiCompliance.canReplaceText) || ([context length] <= output.textToDelete.length)) { + os_log_debug([KMLogs keyTraceLog], "cannot replace text, non-compliant or insufficient context"); + return NO; // return without deleting/replacing + } + + // guard: the logic of this method depends on locating textToDelete in the context + if (![self stringToDeleteMatchesContextSuffix:output.textToDelete context:context]) { + os_log_debug([KMLogs keyTraceLog], "cannot replace text, textToDelete not found at end of context"); + return NO; // return without deleting/replacing + } + + NSUInteger deletionTargetLength = output.textToDelete.length; + NSUInteger deletionTargetLocation = context.length-deletionTargetLength; + NSUInteger precedingCharacterLocation = deletionTargetLocation - 1; + + if ([self deletionWillReplacePartOfCluster: deletionTargetLocation precedingCharacterLocation:precedingCharacterLocation context:context]) { + handledEvent = [self deleteByReplacingWithPrecedingCharacter:precedingCharacterLocation deleteLength:deletionTargetLength context:context client:client]; + } else { + handledEvent = [self deleteByReplacingWithPrecedingCluster:precedingCharacterLocation deleteLength:deletionTargetLength context:context client:client]; + } + + return handledEvent; +} + +/** + * Check whether the string to be deleted is found at the tail end of the current context. + */ +-(BOOL) stringToDeleteMatchesContextSuffix:(NSString*)textToDelete context:(NSString*) context { + BOOL doesMatch = NO; + + // get length of string to delete and compare to end of context + NSUInteger deleteLength = textToDelete.length; + NSUInteger locationOfDeletionTarget = context.length-deleteLength; + NSUInteger locationOfPrecedingCharacter = locationOfDeletionTarget - 1; + NSString *contextSuffix = [context substringFromIndex:context.length-deleteLength]; + + os_log_debug([KMLogs keyTraceLog], "stringToDeleteMatchesSuffix, textToDelete: '%{public}@', contextSuffix: '%{public}@', locationOfDeletionTarget: %u, locationOfprecedingCharacter: %u", textToDelete, contextSuffix, (int)locationOfDeletionTarget, (int)locationOfPrecedingCharacter); + + doesMatch = [textToDelete isEqualToString:contextSuffix]; + os_log_debug([KMLogs keyTraceLog], "stringToDeleteMatchesSuffix: %{public}@", doesMatch?@"YES":@"NO"); + return doesMatch; +} + +/** + * Check whether the string to be deleted is part of the same cluster as the character in the context that precedes it. + */ +-(BOOL) deletionWillReplacePartOfCluster: (NSUInteger)deletionLocation precedingCharacterLocation: (NSUInteger)precedingLocation context:(NSString*) context { + // NSString objects hold UTF-16 characters, so a single unicode composed character + // or grapheme cluster may occupy a range of NSString indices instead of a single character. + // This includes base and combining characters potentially composed of surrogate pairs. + NSRange firstDeletionTargetClusterRange = [context rangeOfComposedCharacterSequenceAtIndex: deletionLocation]; + + // get range of the preceding cluster in the context + NSRange precedingClusterRange = [context rangeOfComposedCharacterSequenceAtIndex: precedingLocation]; + + NSString *firstFullCharacterToDelete = [context substringWithRange:firstDeletionTargetClusterRange]; + NSString *precedingFullCharacter = [context substringWithRange:precedingClusterRange]; + os_log_debug([KMLogs keyTraceLog], "firstDeletionTargetCharacterRange: %{public}@, deletionCharacter: %{public}@, precedingCharacterRange %{public}@, precedingCharacter: %{public}@", NSStringFromRange(firstDeletionTargetClusterRange), firstFullCharacterToDelete, NSStringFromRange(precedingClusterRange), precedingFullCharacter); + + // true when the first character to delete and the preceding character + // from the context are part of the same grapheme cluster + return NSEqualRanges(firstDeletionTargetClusterRange, precedingClusterRange); +} + +/** + * Replace both the text to delete and the character preceding it solely with the character that precedes it. + * Returns YES if executing the replace/delete and NO otherwise. + */ +-(BOOL) deleteByReplacingWithPrecedingCharacter:(NSUInteger)precedingCharacterLocation deleteLength:(NSUInteger)deleteLength context:(NSString*) context client:(id) client { + + os_log_debug([KMLogs keyTraceLog], "deleteByReplacingWithPrecedingCharacter, deletion target is part of the same grapheme cluster as the character that precedes it"); + // get the preceding character + NSRange precedingCharacterRange = NSMakeRange(precedingCharacterLocation, 1); + NSString *replacementString = [context substringWithRange:precedingCharacterRange]; + + // guard: if preceding character is a control character, return NO + if ([self containsControlCharacter:replacementString]) { + NSString *message = @"replacementString contains control characters, cannot delete with replace"; + os_log_debug([KMLogs keyTraceLog], "%@", message); + [KMSentryHelper addDebugBreadCrumb:@"event" message:message]; + return NO; + } + + // perform the replacement + NSUInteger replacementLength = [replacementString length] + deleteLength; + NSRange replacementRange = NSMakeRange(precedingCharacterLocation, replacementLength); + os_log_debug([KMLogs keyTraceLog], "replacementRange: %{public}@", NSStringFromRange(replacementRange)); + [client insertText:replacementString replacementRange:replacementRange]; + + return YES; +} + +/** + * Replace both the text to delete and the cluster preceding it solely with the cluster that precedes it. + * The 'cluster' may be just one character, but if contains surrogate pairs, this ensures that they stay together. + * Returns YES if executing the replace/delete and NO otherwise. + */ + -(BOOL) deleteByReplacingWithPrecedingCluster:(NSUInteger)precedingCharacterLocation deleteLength:(NSUInteger)deleteLength context:(NSString*) context client:(id) client { + + os_log_debug([KMLogs keyTraceLog], "deleteByReplacingWithPrecedingCluster, deletion target is independent of the grapheme cluster that precedes it"); - // replace only works for non-control characters - // if replacementString contains control characters, then return without handling event - NSString *message = nil; + // get range of the preceding cluster and the substring from the context + NSRange precedingClusterRange = [context rangeOfComposedCharacterSequenceAtIndex: precedingCharacterLocation]; + NSString *replacementString = [context substringWithRange:precedingClusterRange]; + + // guard: if preceding cluster contains control characters, return NO if ([self containsControlCharacter:replacementString]) { - message = @"handleDeleteByReplace, replacementString contains control characters, cannot delete with replace"; + NSString *message = @"replacementString contains control characters, cannot delete with replace"; os_log_debug([KMLogs keyTraceLog], "%@", message); [KMSentryHelper addDebugBreadCrumb:@"event" message:message]; return NO; - } else { - message = @"handleDeleteByReplace, canReplaceText == true"; - os_log_debug([KMLogs keyTraceLog], "%@", message); - [KMSentryHelper addDebugBreadCrumb:@"event" message:message]; - handledEvent = YES; } - - NSRange replacementRange = NSMakeRange(replacementStringRange.location, codePointsToReplace); + + // perform the replacement + NSUInteger replacementLength = [replacementString length] + deleteLength; + NSRange replacementRange = NSMakeRange([context length] - replacementLength, replacementLength); + os_log_debug([KMLogs keyTraceLog], "replacementRange: %{public}@", NSStringFromRange(replacementRange)); [client insertText:replacementString replacementRange:replacementRange]; - } - - return handledEvent; + + return YES; } -(BOOL) containsControlCharacter:(NSString*)text { From c10a74cdf0cfa873ad91e50f1b3250826642dd0d Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Tue, 17 Feb 2026 14:01:17 +0100 Subject: [PATCH 10/45] docs: feedback for walkthrough Presenting as a commit as I made many minor edits in-place and this was much simpler than trying to use GitHub review for this level of detail. Test-bot: skip Build-bot: skip --- .../develop/walkthrough/00-introduction.md | 28 ++++++--- .../01-creating-keyboard-project.md | 59 +++++++++++------- .../02-designing-desktop-layout.md | 24 ++++--- .../walkthrough/03-creating-desktop-layout.md | 46 ++++++++------ .../develop/walkthrough/04-using-debugger.md | 19 +++--- .../walkthrough/05-designing-touch-layout.md | 20 +++--- .../walkthrough/06-creating-touch-layout.md | 19 +++--- .../07-writing-keyboard-documentation.md | 17 ++--- .../08-preparing-keyboard-package.md | 19 +++--- .../09-distributing-keyboard-package.md | 19 +++--- .../10-generating-lexical-model.md | 25 ++++---- .../11-installing-lexical-model.md | 11 +++- .../guides/develop/walkthrough/__index.txt | 13 ++++ .../develop/walkthrough/images/code-tab.png | Bin 47177 -> 115371 bytes .../develop/walkthrough/walkthrough.css | 16 +++++ 15 files changed, 213 insertions(+), 122 deletions(-) create mode 100644 developer/docs/help/guides/develop/walkthrough/__index.txt create mode 100644 developer/docs/help/guides/develop/walkthrough/walkthrough.css diff --git a/developer/docs/help/guides/develop/walkthrough/00-introduction.md b/developer/docs/help/guides/develop/walkthrough/00-introduction.md index cf5d032750..0577ecef53 100644 --- a/developer/docs/help/guides/develop/walkthrough/00-introduction.md +++ b/developer/docs/help/guides/develop/walkthrough/00-introduction.md @@ -2,7 +2,12 @@ title: Introduction --- -[Next: Part 1 - Creating a Keyboard Project >](01-creating-keyboard-project) + +

## Step-by-Step @@ -12,7 +17,7 @@ If you encounter unfamiliar terms, please consult the [glossary](glossary). ### Introducing Keyman Developer -Keyman Developer is a powerful tool you can use to create custom keyboards optimized to type in any language you choose. Keyboard authors can distribute their work for desktop, web, tablet and phone, enabling global communities to quickly benefit from keyboards made for their own language. +Keyman Developer is a powerful tool you can use to create custom software keyboards optimized to type in any language you choose. Keyboard authors can distribute their work for desktop, web, tablet and phone, enabling global communities to quickly benefit from keyboards made for their own language. Keyboards created with Keyman Developer can be used on Windows, macOS, Linux, iOS, Android, and the web. @@ -23,7 +28,7 @@ Currently this software is Windows-only, although the command line tools it uses Keyman Developer is completely free to download and use. You can download it from [https://keyman.com/developer/download](https://keyman.com/developer/download). -On the downloads page, just click the big green “Download Now” button to get the latest version of Keyman. Once you have it, run the `keymandeveloper.exe` file you’ve received. The numbers following “keymandeveloper” indicate which version of Keyman Developer you are installing. +On the downloads page, just click the big green “Download Now” button to get the latest version of Keyman. Once you have it, run the `keymandeveloper-a.b.c.exe` file you’ve downloaded. The numbers following “keymandeveloper” indicate which version of Keyman Developer you are installing; you can also see the Keyman Developer version in the main installer window, or after installation, in the Help/About dialog. After installing Keyman Developer, you should be able to run it on your computer and begin creating projects immediately. @@ -31,9 +36,11 @@ Note that Keyman Developer is a separate app from Keyman, which is the app that In order to use the keyboard you create with Keyman Developer, you'll need to have the Keyman app installed on your computer or device. Keyman is available on the following platforms: Windows, macOS, Linux, iOS, Android, and the web. -The icons for Keyman Developer ![Keyman Developer icon](images/keyman-developer-icon.png) and Keyman ![Keyman icon](images/keyman-icon.png) are similar but slightly different. +The Keyman Developer icon ![Keyman Developer icon](images/keyman-developer-icon.png) is a faded version of the Keyman icon ![Keyman icon](images/keyman-icon.png). +
To continue the Step-by-Step tutorial move to the next page: [Part 1 - Creating a Keyboard Project](01-creating-keyboard-project) +
--- @@ -48,9 +55,9 @@ Ask questions and talk with other keyboard authors on the [Keyman Community Foru ### Keyman online help -[Keyman Developer Language Documentation](https://help.keyman.com/developer/language/guide/) +[Keyman Developer Language Guide](https://help.keyman.com/developer/language/guide/) -Reference for the general structure of the Keyman language. +Information about the general structure and concepts of the Keyman language. [Keyman Developer Language Reference](https://help.keyman.com/developer/language/reference/) @@ -69,7 +76,12 @@ Read up on Keyman’s latest releases and patch notes on the [Keyman Blog](https Keyman uses a number of [Github](https://github.com/keymanapp) repositories to store source code, keyboards, lexical models and documentation. There is also a mechanism for reporting problems. [Keyman Bug Reports](https://github.com/keymanapp/keyman/issues) -Report Keyman software bugs and issues here. NOTE: NOT for help and support questions. The Keyman community forum is the best place to ask for help with development. Think you’ve found a Keyman bug or a problem with a specific keyboard? Describe what you’ve found on the Keyman community forum and ask whether to report a bug. +Report Keyman software bugs and issues here. -[Next: Part 1 - Creating a Keyboard Project >](01-creating-keyboard-project) +> [!NOTE] +> GitHub issues are not the best place to ask for help or support questions. The Keyman community forum is a better place to ask for help with keyboard development. Think you’ve found a Keyman bug or a problem with a specific keyboard? Describe what you’ve found on the Keyman community forum and ask whether to report a bug. + +
+ [Next: Part 1 - Creating a Keyboard Project →](01-creating-keyboard-project) +
diff --git a/developer/docs/help/guides/develop/walkthrough/01-creating-keyboard-project.md b/developer/docs/help/guides/develop/walkthrough/01-creating-keyboard-project.md index 630c00821c..1e5c8f8078 100644 --- a/developer/docs/help/guides/develop/walkthrough/01-creating-keyboard-project.md +++ b/developer/docs/help/guides/develop/walkthrough/01-creating-keyboard-project.md @@ -2,11 +2,12 @@ title: Creating a Keyboard Project --- -Part 1 of the [Keyman Developer Walkthrough](../walkthrough). + +
+ Part 1 of the [Keyman Developer Walkthrough](.). -[< Back: Introduction](00-introduction) - -[Next: Part 2 - Designing a Desktop Layout >](02-designing-desktop-layout) + [← Introduction](00-introduction)   [Part 2 - Designing a Desktop Layout →](02-designing-desktop-layout) +
## Step-by-Step @@ -31,8 +32,9 @@ For the Dagbani keyboard, the keyboard planning has been done for you. Follow th - Select `OK` to close the `Select BCP 47 tag` dialog. - Select `OK` to close the `New Basic Keyboard Project` dialog. +
To continue the Step-by-Step tutorial move to the next page: [Part 2 - Designing a Desktop Layout](02-designing-desktop-layout) - +
--- ## Planning a Keyboard @@ -41,7 +43,7 @@ The first step is identifying the language or languages your keyboard will cover - it is difficult to optimize a keyboard for multiple languages since a rarely used character for one language may be a common character for another. - it is harder for users to find the keyboard since the name of the keyboard may not relate to the particular language they are researching. -- a separate lexical model (for predictive text) is needed for each language, so having a keyboard that handles multiple languages may make installation of a lexical model harder. +- it is more difficult for users to select the correct language for during installation, particularly if a keyboard handles many languages. This is particularly important for lexical models for predictive text, as a separate model is needed for each language. Furthermore, having a keyboard specifically designed for a single language may help with community acceptance. @@ -87,20 +89,23 @@ Note that the `Keyboard ID` (near the bottom of the dialog) fills in automatical You can modify the value in this field, though you are limited to the characters a-z, the numbers 0-9 and underscore. This value will be used as the base filename of many of your Keyman files. -If you decide to change the keyboard ID, you’ll need to change most of the files in the project. -This is best done using Keyman Developer’s `Clone local project` feature. - -- From the `Project` menu, select `New Project` then `Clone local project`. -- Use the `Browse` button to navigate to the `.kpj` file of your existing project. -- Specify a new `project ID` (and adjust `Destination path` if desired), then select `OK`. +> [!NOTE] +> If you decide to change the keyboard ID, you’ll need to change most of the files in the project. This is best done using Keyman Developer’s `Clone local project` feature. +> • From the `Project` menu, select `New Project` then `Clone local project`. +> • Use the `Browse` button to navigate to the `.kpj` file of your existing project. +> • Specify a new `project ID` (and adjust `Destination path` if desired), then select `OK`. ### Description This brief description of your keyboard is included in all of your information files. -Try to keep this short but informative, as this is what people will see when searching for your keyboard. +Try to keep this short but informative, as this is what people will see when searching for your keyboard on the keyman.com website. It may be useful to include alternate language names, the script (Latin, Devanagari, etc) if the language is written in more than one script, the region where it is used, or other details about the keyboard. +The description field can use [Markdown](https://www.markdownguide.org/cheat-sheet/) for basic formatting and links. + +The description is added to `README.md` and the package `.kps` file. + ### Author, Copyright, and Full Copyright Enter your name in the `Author` field. @@ -111,20 +116,25 @@ The Full Copyright field has the date as well as the copyright holder. The name used in the Copyright fields must be the real name of an individual or of an organization. Copyright cannot be assigned to a pseudonym. +The short copyright message is added to `README.md`, `welcome.htm`, `readme.htm`, package `.kps` details, and the [`©right` keyboard system store](https://help.keyman.com/developer/language/reference/copyright) in the `.kmn` file. +The full copyright message is added to `LICENSE.md`. + ### Languages -This table displays the [BCP 47](https://help.keyman.com/developer/current-version/reference/bcp-47) tag (or tags) associated with your keyboard. +This table displays the [BCP 47](../../../reference/bcp-47) tag (or tags) associated with your keyboard. A BCP 47 tag identifies a language and will help users find your keyboard when they search for their language. If you don’t know what your language’s tag is, you can search for its name and find the corresponding tag in the [IANA Language Subtag Registry](https://www.iana.org/assignments/language-subtag-registry/language-subtag-registry), which contains all existing BCP 47 tags, the [Glottolog](https://glottolog.org/glottolog/language) (under the ISO-639-3 column), or the [SIL Ethnologue](https://www.ethnologue.com/). The SIL Ethnologue is the most user-friendly option of the three, if you are unfamiliar with language tags. In addition to your basic BCP 47 tag, you can add -[Script](https://help.keyman.com/developer/current-version/reference/bcp-47#toc-the-script-subtag) and -[Region](https://help.keyman.com/developer/current-version/reference/bcp-47#toc-the-region-subtag) subtags. +[Script](../../../reference/bcp-47#toc-the-script-subtag) and +[Region](../../../reference/bcp-47#toc-the-region-subtag) subtags. However, you should always use the simplest possible BCP 47 tag to identify your language. Only add Script and Region tags if your keyboard is for a script or region that differs from the most commonly used form of the language. +Language information is added to `README.md` and in the package `.kps` file, in the Keyboards section. + ### Version The keyboard version number allows Keyman to tell which of two copies of a keyboard is newer. This allows Keyman to offer users updated versions of keyboards. @@ -133,10 +143,11 @@ The version number consists of two or three integer numbers separated by periods New keyboards usually start with version `1.0` (which is equivalent to `1.0.0`). Generally the first number is incremented for major changes to the keyboard, -the second for minor changes, and the third for corrections or bug fixes. -But the most important point is that the new version number be greater than the existing one (as noted above). +the second for minor changes, and the third for corrections or bug fixes (this is known as [semantic versioning](https://semver.org); note that Keyman keyboard versions do not allow additional labels). -The version number appears in the `HISTORY.md` file and the `.kmn` file. +The most important point is that the new version number be greater than the existing one (as noted above). + +The version number appears in the `HISTORY.md` file and the `.kmn` file in the [`&keyboardversion` keyboard system store](https://help.keyman.com/developer/language/reference/keyboardversion). It should be updated in both places whenever you distribute a new version of the keyboard. ### Targets @@ -148,7 +159,7 @@ If you select `any`, you do not need to (and should not) choose any other option It is best practice to support as many devices as possible when creating your keyboard, because it is hard to predict who will use your keyboard in the future. By making your keyboard as accessible as possible, you can help even more people. -If you decide not to include a touch layout, untick the `any` option and select `desktop` and `web` which will allow the keyboard to be used on a web page as well as on Linux, macOS and Windows (the three `desktop` platforms). If you later add a touch layout, you can reverse this process and go back to selecting just `any`. +If you decide not to include a touch layout, untick the `any` option and select `desktop` and `web` which will allow the keyboard to be used on a web page as well as on Linux, macOS and Windows (the three `desktop` platforms). If you later add a touch layout, you can reverse this process and go back to selecting just `any` in the [`&targets` keyboard system store](https://help.keyman.com/developer/language/reference/targets). ### Path @@ -160,7 +171,7 @@ It’s a good idea to let Keyman handle naming your files, since it uses good na Once you have filled out all of the fields, Keyman Developer will create your project and open it in a new window with your project’s `.kpj` (Keyman project) file displayed. -You can read more about the `.kpj` file type in the [official Keyman documentation](https://help.keyman.com/developer/current-version/reference/file-types/kpj). +You can read more about the `.kpj` file type in the [official Keyman documentation](../../../reference/file-types/kpj). ## Basing a new Keyboard Project on an existing one @@ -184,6 +195,6 @@ When ready, select `OK` to download the files, adjust the filenames and open the Now that you have your project set up, continue to the next section of the tutorial to start developing your first keyboard layout. -[< Back: Introduction](00-introduction) - -[Next: Part 2 - Designing a Desktop Layout >](02-designing-desktop-layout) \ No newline at end of file +
+ [← Introduction](00-introduction)   [Part 2 - Designing a Desktop Layout →](02-designing-desktop-layout) +
diff --git a/developer/docs/help/guides/develop/walkthrough/02-designing-desktop-layout.md b/developer/docs/help/guides/develop/walkthrough/02-designing-desktop-layout.md index 2fc65182cd..ad87d0052d 100644 --- a/developer/docs/help/guides/develop/walkthrough/02-designing-desktop-layout.md +++ b/developer/docs/help/guides/develop/walkthrough/02-designing-desktop-layout.md @@ -2,11 +2,12 @@ title: Designing a Desktop Layout --- -Part 2 of the [Keyman Developer Walkthrough](../walkthrough). + +
+Part 2 of the [Keyman Developer Walkthrough](.). -[< Back: Part 1 - Creating a Keyboard Project](01-creating-keyboard-project) - -[Next: Part 3 - Creating a Desktop Layout >](03-creating-desktop-layout) +[← Part 1 - Creating a Keyboard Project](01-creating-keyboard-project)   [Part 3 - Creating a Desktop Layout →](03-creating-desktop-layout) +
## Step-by-Step @@ -18,7 +19,9 @@ We’ll start with the default QWERTY layout and add rules so that typing ; This Step-by-Step tutorial won’t be using the visual layout features of Keyman Developer for creating the desktop keyboard. +
To continue the Step-by-Step tutorial move to the next page: [Part 3 - Creating a Desktop Layout](03-creating-desktop-layout) +
--- @@ -60,7 +63,7 @@ For visual mapping, this can be done with tools as rudimentary as a pen and pape Navigate to your `.kpj` file, go to the `Keyboards` tab, and open your `.kmn` file. This is where your keyboard’s information lies, as well as the code that makes it work. -You can read more about the `.kmn` file type in the [official Keyman documentation](https://help.keyman.com/developer/current-version/reference/file-types/kmn). +You can read more about the `.kmn` file type in the [official Keyman documentation](../../../reference/file-types/kmn). Inside your `.kmn` file, select the `Layout` tab on the left. For a new project, the `Design` tab (at the bottom) should already be selected. @@ -112,7 +115,9 @@ Here’s an example of how to list your keystrokes. (This can also be reused whe Once you have planned the visual layout of your keyboard and determined how to assign the rest of the keys on the keyboard, it’s time to begin coding. If your layout is simple enough that you do not need to program additional keys, you do not need to worry as much about the next section. In some cases, using Keyman’s visual editor is enough for a desktop keyboard. -Note that once you begin adding rules, the keyboard becomes too complex to modify with the visual layout tools, so it is best to do any visual layout work first using the `Design` tab, then add the additional rules using the `Code` tab. + +> [!NOTE] +> Once you begin adding multi-part rules, the keyboard becomes too complex to modify with the visual layout tools, so it is best to do any visual layout work first using the `Design` tab, then add the additional rules using the `Code` tab. ### Deadkeys @@ -139,7 +144,6 @@ We could choose to design the keyboard so that typing `[ { ] } - _ = + \ |` will That could be done with the `Design` mode using the visual layout tools, or by adding rules. We would then want to add rules to allow the user to type the characters that were on the ten keys that we repurposed to type the additional characters, for example type the `;` key then the `[` key to get an actual `[` character. - -[< Back: Part 1 - Creating a Keyboard Project](01-creating-keyboard-project) - -[Next: Part 3 - Creating a Desktop Layout >](03-creating-desktop-layout) \ No newline at end of file +
+[← Part 1 - Creating a Keyboard Project](01-creating-keyboard-project)   [Part 3 - Creating a Desktop Layout →](03-creating-desktop-layout) +
\ No newline at end of file diff --git a/developer/docs/help/guides/develop/walkthrough/03-creating-desktop-layout.md b/developer/docs/help/guides/develop/walkthrough/03-creating-desktop-layout.md index 090e9cb627..0e28aa5173 100644 --- a/developer/docs/help/guides/develop/walkthrough/03-creating-desktop-layout.md +++ b/developer/docs/help/guides/develop/walkthrough/03-creating-desktop-layout.md @@ -2,11 +2,12 @@ title: Creating a Desktop Layout --- -Part 3 of the [Keyman Developer Walkthrough](../walkthrough). + +
+Part 3 of the [Keyman Developer Walkthrough](.). -[< Back: Part 2 - Designing a Desktop Layout](02-designing-desktop-layout) - -[Next: Part 4 - Using the Debugger >](04-using-debugger) +[← Part 2 - Designing a Desktop Layout](02-designing-desktop-layout)   [Part 4 - Using the Debugger →](04-using-debugger) +
## Step-by-Step @@ -71,7 +72,9 @@ store(output_char) "ɛɔŋɣʒƐƆŊƔƷ" - Select the `Build` tab on the left, then the `Compile Keyboard` button. (Alternatively you can use the `Keyboard` menu, `Compile Keyboard` menu item to compile the keyboard. Or you can use the F7 function key as a shortcut.) - You should see messages at the bottom indicating `dagbani.kmn built successfully`. If this is not the case, you’ll need to examine the error messages to see what the error is and correct it. +
To continue the Step-by-Step tutorial move to the next page: [Part 4 - Using the Debugger](04-using-debugger) +
--- @@ -95,14 +98,17 @@ If you click on that key, you’ll see it change color and the information about ![](images/unicode-character-value.png) -This shows: +On the key cap, this shows: - `[` the default value from the QWERTY layout -- `ɛ` the value displayed on this key for the On-screen Keyboard (OSK) -- `U+025B` the Unicode value that the key will produce -- `ɛ` the character that the key will produce (the equivalent of the Unicode value) +- `ɛ` the character that the key will produce -The last two of these values are linked. If you change one, the other will change. Most of the time the second and fourth items will be the same, but sometimes it might be helpful to display something different than what is actually produced. If, for example, the character being produced is not visible, such as a no-break space or a right-to-left mark, it might be helpful to display `NBSP` or `RTL` or some symbol to remind the user what the key produces. +Below the key cap, there are two edit fields which allow you to change the character that the key will product: + +- `U+025B` the Unicode value(s) that the key will produce +- `ɛ` the character(s) that the key will produce (the equivalent of the Unicode value) + +These two edit fields are linked. If you change one, the other will change. Clicking on the `Code` tab at the bottom of the window displays the code equivalent of the work in the visual editor: @@ -118,7 +124,7 @@ If you were to continue this example, you would drag the `ɔ` character to the ` ## Understanding Keyman Code -Keyman’s Visual Editor (the `Design` tab) is helpful in assigning characters to keys in a consistent manner. For a simple keyboard, it may be all that you need. It’s likely, however, that you’ll need to use the `Code` tab to provide the logic needed for your keyboard. +Keyman’s Visual Editor (the `Design` mode of the `Layout` tab) is helpful in assigning characters to keys in a consistent manner. For a simple keyboard, it may be all that you need. It’s likely, however, that you’ll need to use the `Code` tab to provide the logic needed for your keyboard. When you begin an new project (using the “Project” menu, “New Project” menu item), Keyman Developer initializes your `.kmn` file. With the `Layout` tab on the left selected, you will see two small tabs at the bottom of the window: the `Design` tab and the `Code` tab. @@ -142,7 +148,7 @@ group(main) using keys The `store()` statements at the top are called the “header” of your file. This is where the important information about your keyboard is stored. -A summary of the elements of the Keyman header can be found in part of [another tutorial](https://help.keyman.com/developer/18.0/guides/develop/tutorial/step-3) and detailed information is in the official Keyman documentation: +A summary of the elements of the Keyman header can be found in the [language guide](https://help.keyman.com/developer/language/guide/headers) and detailed information is in the official Keyman documentation: - [&version](https://help.keyman.com/developer/language/reference/version) - [&name](https://help.keyman.com/developer/language/reference/name) @@ -182,7 +188,7 @@ There are a few key terms that you must know when writing rules: **Context** The context specifies the conditions that will trigger a rule. -If the character(s) to the left of the cursor match the context of a rule, the rule will be processed by Keyman. +If the character(s) prior to the cursor match the context of a rule, the rule will be processed by Keyman. **Key** @@ -193,9 +199,9 @@ For more information on keys and keystrokes, read the [official Keyman documenta The output determines which characters are produced by a rule. When a rule is processed, Keyman will replace the context with the output. -The Context (which may be empty) is separated from the Key by “+”. +The Context (which may be empty) is separated from the Key by `+`. -The Key is separated from the Output by “>”. +The Key is separated from the Output by `>`. You can include comments in your Keyman code by typing a plain `c` followed by a space then any text you like afterwards. (If you want the letter “c”, you must surround in in quotes like `"c"`.) This is a good way to document your code and make things easier to read later, both for yourself and others. Comments can be made at the end of a line (with a space before the `c` as well as after) or be on their own line. Any text that follows the `c` through the end of the line will be ignored when the keyboard is compiled. @@ -204,7 +210,7 @@ Writing rules in Keyman is very straightforward for simple key substitutions. Su `"^" + "a" > "â"` In this example, the **context** is `^`, the **key** is `a`, and the **output** is `â`. -Whenever Keyman finds the context (`^`) to the left of the cursor and the current keystroke is `a`, it will replace the context (and the typed character) with `â`. +Whenever Keyman finds the context (`^`) prior to the cursor and the current keystroke is `a`, it will replace the context (and the typed character) with `â`. Characters written into Keyman code should always be surrounded by single quotes (`' '`) or double quotes (`" "`). Either pair will work (as long as they match). @@ -275,7 +281,7 @@ You can read more about the `store`, `index` and `any` keywords in the [Keyman l ### Deadkeys -At the end of the previous topic, an example was given of using the “;” key as a “deadkey”. Typing the deadkey produces no output, but it potentially changes the output of the following key. Changing the first two rules from the Step-by-Step example to treat the “;” as a deadkey, would result in: +At the end of the previous topic, an example was given of using the ; key as a “deadkey”. Typing the deadkey produces no output, but it potentially changes the output of the following key. Changing the first two rules from the Step-by-Step example to treat the ; as a deadkey, would result in: ```keyman + ";" > dk(1) c Define ";" as a deadkey @@ -308,6 +314,8 @@ It is also possible to create an on-screen layout automatically based on what yo - Select the `Fill from layout` button above the keyboard image - Check the results. +The On-Screen Keyboard editor looks very similar to the `Design` mode of the `Layout` tab. Most of the time, the key caps will be the same as in the `Design` mode of the `Layout` tab, but sometimes it might be helpful to display something different than what is actually produced. If, for example, the character being produced is not visible, such as a no-break space or a right-to-left mark, it might be helpful to display `NBSP` or `RTL` or some symbol to remind the user what the key produces. + ## Exporting an On-Screen Keyboard Layout One way to document a keyboard layout is to use images of the keyboard showing the different layers: default layer, Shift layer, Right-Alt layer, etc. @@ -322,6 +330,6 @@ Then complete the information needed: - Select `Save` - In the `Output Bitmap Parameters` dialog, select `One file per shift state`, `Output Unicode keyboards`, and adjust the width of the image as needed, then select `OK`. Keyman Developer will create one or more files using the base filename plus letters to indicate the shift state plus `.png`. You can reference these files in your welcome.htm file. -[< Back: Part 2 - Designing a Desktop Layout](02-designing-desktop-layout) - -[Next: Part 4 - Using the Debugger >](04-using-debugger) \ No newline at end of file +
+[← Part 2 - Designing a Desktop Layout](02-designing-desktop-layout)   [Part 4 - Using the Debugger →](04-using-debugger) +
\ No newline at end of file diff --git a/developer/docs/help/guides/develop/walkthrough/04-using-debugger.md b/developer/docs/help/guides/develop/walkthrough/04-using-debugger.md index 86fc2b6c46..932fec3aaf 100644 --- a/developer/docs/help/guides/develop/walkthrough/04-using-debugger.md +++ b/developer/docs/help/guides/develop/walkthrough/04-using-debugger.md @@ -1,10 +1,11 @@ # Using the Debugger -Part 4 of the [Keyman Developer Walkthrough](../walkthrough). + +
+Part 4 of the [Keyman Developer Walkthrough](.). -[< Back: Part 3 - Creating a Desktop Layout](03-creating-desktop-layout) - -[Next: Part 5 - Designing a Touch Layout >](05-designing-touch-layout) +[← Part 3 - Creating a Desktop Layout](03-creating-desktop-layout)   [Part 5 - Designing a Touch Layout →](05-designing-touch-layout) +
## Step-by-Step @@ -17,18 +18,20 @@ Part 4 of the [Keyman Developer Walkthrough](../walkthrough). - From the `Debug` menu, select the `Stop Debugger` menu item. +
To continue the Step-by-Step tutorial move to the next page: [Part 5 - Designing a Touch Layout](05-designing-touch-layout) +
--- ## Running the Debugger -See [https://help.keyman.com/developer/current-version/context/debug](https://help.keyman.com/developer/current-version/context/debug) for more information on running the debugger. +See the [debugger documentation](../../../context/debug) for more information on running the debugger. ## Interpreting Errors When compiling your Keyman code, Keyman Developer will report any errors, warnings and hints in the box at the bottom of the window. The message will give a short description of what the compiler found was wrong along with the line number of where the problem was detected. The error, warning or hint has an identifier (“KM02033” for example). This identifier is a link to a more detailed description. -[< Back: Part 3 - Creating a Desktop Layout](03-creating-desktop-layout) - -[Next: Part 5 - Designing a Touch Layout >](05-designing-touch-layout) \ No newline at end of file +
+[← Part 3 - Creating a Desktop Layout](03-creating-desktop-layout)   [Part 5 - Designing a Touch Layout →](05-designing-touch-layout) +
\ No newline at end of file diff --git a/developer/docs/help/guides/develop/walkthrough/05-designing-touch-layout.md b/developer/docs/help/guides/develop/walkthrough/05-designing-touch-layout.md index cd8fee607b..acc2f9d6d5 100644 --- a/developer/docs/help/guides/develop/walkthrough/05-designing-touch-layout.md +++ b/developer/docs/help/guides/develop/walkthrough/05-designing-touch-layout.md @@ -2,11 +2,12 @@ title: Designing a Touch Layout --- -Part 5 of the [Keyman Developer Walkthrough](../walkthrough). + +
+Part 5 of the [Keyman Developer Walkthrough](.). -[< Back: Part 4 - Using the Debugger](04-using-debugger) - -[Next: Part 6 - Creating a Touch Layout >](06-creating-touch-layout) +[← Part 4 - Using the Debugger](04-using-debugger)   [Next: Part 6 - Creating a Touch Layout →](06-creating-touch-layout) +
## Step-by-Step @@ -14,7 +15,9 @@ In the Dagbani keyboard, `;e` was selected as the way to generate the character For the Step-by-Step tutorial, the design decisions have been made for you. We will be adding ten longpress keys to the default touch layout. +
To continue the Step-by-Step tutorial move to the next page: [Part 6 - Creating a Touch Layout](06-creating-touch-layout) +
--- @@ -44,7 +47,8 @@ If you use Keyman Developer’s New Project feature, a touch layout is added aut There are advantages to basing the touch layout on the desktop layout. Users who switch between the two may benefit from the similarity. In addition, your touch layout may be able to take advantage of the logic in the desktop layout code you’ve already created. -Specifically, if the `ID` field for a key in the touch layout begins with `K_` then the Keyman processes the keystroke information (as modified by the active layer of the touch layout) according to what is in the .kmn file. +Specifically, if the `ID` field for a key in the touch layout begins with `K_` then Keyman treats the key as the same as the corresponding desktop key (as modified by the active layer of the touch layout) +according to the rules that are in the .kmn file. If you establish the desktop keyboard layout and create the On-Screen Keyboard, you can switch to the Touch Editor and import from the OSK. @@ -53,6 +57,6 @@ To switch to a “phone” layout, select the basic template, which rearranges t (For more details, see the next topic.) The result will need to be reviewed and tested, but using this approach may save you some time. -[< Back: Part 4 - Using the Debugger](04-using-debugger) - -[Next: Part 6 - Creating a Touch Layout >](06-creating-touch-layout) \ No newline at end of file +
+[← Part 4 - Using the Debugger](04-using-debugger)   [Part 6 - Creating a Touch Layout →](06-creating-touch-layout) +
\ No newline at end of file diff --git a/developer/docs/help/guides/develop/walkthrough/06-creating-touch-layout.md b/developer/docs/help/guides/develop/walkthrough/06-creating-touch-layout.md index e820856f7e..b4fab0a85c 100644 --- a/developer/docs/help/guides/develop/walkthrough/06-creating-touch-layout.md +++ b/developer/docs/help/guides/develop/walkthrough/06-creating-touch-layout.md @@ -2,11 +2,12 @@ title: Creating a Touch Layout --- -Part 6 of the [Keyman Developer Walkthrough](../walkthrough). + +
+Part 6 of the [Keyman Developer Walkthrough](.). -[< Back: Part 5 - Designing a Touch Keyboard](05-designing-touch-layout) - -[Next: Part 7 - Writing Keyboard Documentation Files >](07-writing-keyboard-documentation) +[← Part 5 - Designing a Touch Keyboard](05-designing-touch-layout)   [Part 7 - Writing Keyboard Documentation Files →](07-writing-keyboard-documentation) +
## Step-by-Step @@ -73,7 +74,9 @@ Keyman Developer provides a way to test your keyboard in a web browser. - If you click on the `Shift` key, the display changes to the `shift` layer and you can enter characters from that layer. - When you are finished testing, you can close the browser tab. +
To continue the Step-by-Step tutorial move to the next page: [Part 7 - Writing Keyboard Documentation Files](07-writing-keyboard-documentation) +
--- @@ -140,12 +143,12 @@ Use care when combining different kinds of gestures as some of them may conflict ## Reference -See [https://help.keyman.com/developer/current-version/context/keyboard-editor#toc-touch-layout-tab](https://help.keyman.com/developer/current-version/context/keyboard-editor#toc-touch-layout-tab) for more details. +See [Touch layout editor documentation](../../../context/keyboard-editor#toc-touch-layout-tab) for more details. ## Testing Touch Keyboards See the end of the Step-by-Step section above for a description of how to use Keyman Developer to test your touch layout in a browser window. It’s also possible to transfer the .kmp file to a touch device and install the keyboard there for testing. -[< Back: Part 5 - Designing a Touch Keyboard](05-designing-touch-layout) - -[Next: Part 7 - Writing Keyboard Documentation Files >](07-writing-keyboard-documentation) \ No newline at end of file +
+[← Part 5 - Designing a Touch Keyboard](05-designing-touch-layout)   [Part 7 - Writing Keyboard Documentation Files →](07-writing-keyboard-documentation) +
\ No newline at end of file diff --git a/developer/docs/help/guides/develop/walkthrough/07-writing-keyboard-documentation.md b/developer/docs/help/guides/develop/walkthrough/07-writing-keyboard-documentation.md index e64ba5163c..13d70cb317 100644 --- a/developer/docs/help/guides/develop/walkthrough/07-writing-keyboard-documentation.md +++ b/developer/docs/help/guides/develop/walkthrough/07-writing-keyboard-documentation.md @@ -2,11 +2,12 @@ title: Writing Keyboard Documentation --- -Part 7 of the [Keyman Developer Walkthrough](../walkthrough). + +
+Part 7 of the [Keyman Developer Walkthrough](.). -[< Back: Part 6 - Creating a Touch Layout](06-creating-touch-layout) - -[Next: Part 8 - Preparing a Keyboard Package >](08-preparing-keyboard-package) +[← Part 6 - Creating a Touch Layout](06-creating-touch-layout)   [Part 8 - Preparing a Keyboard Package →](08-preparing-keyboard-package) +
## Step-by-Step @@ -39,7 +40,9 @@ Part 7 of the [Keyman Developer Walkthrough](../walkthrough). - Close the welcome.htm file. Click “Yes” to save the changes. +
To continue the Step-by-Step tutorial move to the next page: [Part 8 - Preparing a Keyboard Package](08-preparing-keyboard-package) +
## Editing the README.md file @@ -105,6 +108,6 @@ The Keyman keyboards repository requires that this PHP file have the name of the The PHP help file often contains the same information as is in the welcome.htm file. See [Keyman Keyboard help document (PHP help file)](https://help.keyman.com/developer/keyboards/phphelpfile) for more details. -[< Back: Part 6 - Creating a Touch Layout](06-creating-touch-layout) - -[Next: Part 8 - Preparing a Keyboard Package >](08-preparing-keyboard-package) \ No newline at end of file +
+[← Part 6 - Creating a Touch Layout](06-creating-touch-layout)   [Part 8 - Preparing a Keyboard Package →](08-preparing-keyboard-package) +
\ No newline at end of file diff --git a/developer/docs/help/guides/develop/walkthrough/08-preparing-keyboard-package.md b/developer/docs/help/guides/develop/walkthrough/08-preparing-keyboard-package.md index 63be79445a..9bd0956cdb 100644 --- a/developer/docs/help/guides/develop/walkthrough/08-preparing-keyboard-package.md +++ b/developer/docs/help/guides/develop/walkthrough/08-preparing-keyboard-package.md @@ -2,11 +2,12 @@ title: Preparing a Keyboard Package --- -Part 8 of the [Keyman Developer Walkthrough](../walkthrough). + +
+Part 8 of the [Keyman Developer Walkthrough](.). -[< Back: Part 7 - Writing Keyboard Documentation](07-writing-keyboard-documentation) - -[Next: Part 9 - Distributing a Keyboard Package >](09-distributing-keyboard-package) +[← Part 7 - Writing Keyboard Documentation](07-writing-keyboard-documentation)   [Part 9 - Distributing a Keyboard Package →](09-distributing-keyboard-package) +
## Step-by-Step @@ -20,13 +21,15 @@ Part 8 of the [Keyman Developer Walkthrough](../walkthrough). - Select the `Build` tab, then the `Compile Package` button. A **dagbani.kps built successfully** message should be displayed. - Congratulations! You have successfully built and packaged a keyboard for the Dagbani language. +
To continue the Step-by-Step tutorial move to the next page: [Part 9 - Distributing a Keyboard Package](09-distributing-keyboard-package) +
--- ## Package Files -See the [Keyman Package Editor documentation](https://help.keyman.com/developer/18.0/context/package-editor) if you need more details on the following items. +See the [Keyman Package Editor documentation](../../../context/package-editor) if you need more details on the following items. ### Files @@ -58,6 +61,6 @@ Here is where you can enter information for: - Image file: If you supply a 140 pixel wide x 250 pixel high image in JPEG or PNG format, then your custom image will be shown during installation (in place of the default Keyman image). Your image file must be added to the Files list before it will be available to be selected here. - Related packages: If your keyboard is part of a group of keyboards, you can specify which other keyboards are part of the group. (For example, you might have three keyboards for the same language, one based on the QWERTY layout, one AZERTY, one QWERTZ, and you could use this field to note the relationship between them.) You can also use this feature to deprecate another keyboard that your keyboard supersedes. -[< Back: Part 7 - Writing Keyboard Documentation](07-writing-keyboard-documentation) - -[Next: Part 9 - Distributing a Keyboard Package >](09-distributing-keyboard-package) \ No newline at end of file +
+[← Part 7 - Writing Keyboard Documentation](07-writing-keyboard-documentation)   [Part 9 - Distributing a Keyboard Package →](09-distributing-keyboard-package) +
\ No newline at end of file diff --git a/developer/docs/help/guides/develop/walkthrough/09-distributing-keyboard-package.md b/developer/docs/help/guides/develop/walkthrough/09-distributing-keyboard-package.md index 1580d9d2fd..756e83509e 100644 --- a/developer/docs/help/guides/develop/walkthrough/09-distributing-keyboard-package.md +++ b/developer/docs/help/guides/develop/walkthrough/09-distributing-keyboard-package.md @@ -2,23 +2,26 @@ title: Distributing a Keyboard Package --- -Part 9 of the [Keyman Developer Walkthrough](../walkthrough). + +
+Part 9 of the [Keyman Developer Walkthrough](.). -[< Back: Part 8 - Preparing a Keyboard Package](08-preparing-keyboard-package) - -[Next: Part 10 - Generating a Lexical Model >](10-generating-lexical-model) +[← Part 8 - Preparing a Keyboard Package](08-preparing-keyboard-package)   [Part 10 - Generating a Lexical Model →](10-generating-lexical-model) +
## Step-by-Step For the Step-by-Step tutorial, there’s really nothing to do for this page. This tutorial is for learning only, therefore you don't want to submit this keyboard to the Keyman keyboards repository (since it already contains a keyboard by that name). If you like, you could look at the other sections on this page before continuing the Step-by-Step tutorial (or come back to them later). +
To continue the Step-by-Step tutorial move to the next page: [Part 10 - Generating a Lexical Model](10-generating-lexical-model) +
--- ## Submitting a keyboard to the Keyman Keyboards Repository -Follow the instructions at [https://help.keyman.com/developer/keyboards/](https://help.keyman.com/developer/keyboards/) to submit your keyboard to the Keyman keyboards repository. This will enable anyone with Internet access to download and use the keyboard. (Please do not submit the Dagbani keyboard used in the Step-by-Step tutorial. There is already a Dagbani keyboard in the repository.) +Follow the instructions at [Working with the Keyman Cloud Keyboard Repository](https://help.keyman.com/developer/keyboards/) to submit your keyboard to the Keyman keyboards repository. This will enable anyone with Internet access to download and use the keyboard. (Please do not submit the Dagbani keyboard used in the Step-by-Step tutorial. There is already a Dagbani keyboard in the repository.) One requirement for keyboards that are submitted to the Keyman keyboards repository is the addition of a PHP help file that provides the online help available on the keyman.com site. See the **Editing the PHP help file** section of the [Writing Keyboard Documentation](07-writing-keyboard-documentation) page for more details. @@ -30,6 +33,6 @@ With Keyman Developer running, it’s possible to select `Packaging`, and the `. The Keyboard App Builder (KAB) lets you put a Keyman keyboard (and optionally a lexical model) into an app for iOS or Android, which can be distributed. More details can be found on the [Keyboard App Builder](https://software.sil.org/keyboardappbuilder/) page. -[< Back: Part 8 - Preparing a Keyboard Package](08-preparing-keyboard-package) - -[Next: Part 10 - Generating a Lexical Model >](10-generating-lexical-model) \ No newline at end of file +
+[← Part 8 - Preparing a Keyboard Package](08-preparing-keyboard-package)   [Part 10 - Generating a Lexical Model →](10-generating-lexical-model) +
\ No newline at end of file diff --git a/developer/docs/help/guides/develop/walkthrough/10-generating-lexical-model.md b/developer/docs/help/guides/develop/walkthrough/10-generating-lexical-model.md index 8902f8dda4..805877979f 100644 --- a/developer/docs/help/guides/develop/walkthrough/10-generating-lexical-model.md +++ b/developer/docs/help/guides/develop/walkthrough/10-generating-lexical-model.md @@ -2,11 +2,12 @@ title: Generating a Lexical Model --- -Part 10 of the [Keyman Developer Walkthrough](../walkthrough). + +
+Part 10 of the [Keyman Developer Walkthrough](.). -[< Back: Part 9 - Distributing a Keyboard Package](09-distributing-keyboard-package) - -[Next: Part 11 - Installing a Keyman Lexical Model >](11-installing-lexical-model) +[← Part 9 - Distributing a Keyboard Package](09-distributing-keyboard-package)   [Part 11 - Installing a Keyman Lexical Model →](11-installing-lexical-model) +
## Step-by-Step @@ -39,7 +40,7 @@ In addition, the list of words should be reviewed. - In this tutorial, we're going to open a file, copy its contents, then paste those lines into the `wordlist.tsv` file to replace the default content. Depending on how your browser is configured, when you open the file, it may open in a new tab or it may open in the same tab as this set of instructions. In the first case you can close the tab to return here, but in the second case you'll need to use the Back feature of your browser. (You may want to read ahead to make sure you understand the next few steps since the instructions might be hidden temporarily.) - Click on the **dag-short-wl.txt** filename just below this paragraph to open the file (or right-click and select Open in a new tab). -[dag-short-wl.txt](./dag-short-wl.txt) + * [dag-short-wl.txt](./dag-short-wl.txt) - Use Ctrl+A to select the entire contents and Ctrl+C to copy the selected text. - Return to these instructions, either with the browser's Back feature, or by closing the newly opened tab, as appropriate. @@ -79,7 +80,9 @@ In addition, the list of words should be reviewed. - Select the `Build` tab on the left. Then select the `Compile Package` button. Verify that you get the **sil.dag.wl.model.kps built successfully** message. - Congratulations! You have successfully built and packaged a lexical model for the Dagbani language. +
To continue the Step-by-Step tutorial move to the next page: [Part 11 - Installing a Keyman Lexical Model](11-installing-lexical-model) +
## Introduction @@ -149,13 +152,13 @@ Keyman will place you in your `.kpj` file immediately, as with a keyboard projec Currently `Wordlist (trie-1.0)` is the only choice for the `Format` field. -You’ll normally want to keep the `default` choice for the `Word breaker` field and the `(Space U+0020)` option for the `Insert after word` field, unless you are dealing with an orthography that doesn’t use space to separate words. For scripts such as Khmer, Thai, and Lao, which have special ways to delimit words, see the Keyman documentation on [coding a custom word breaker](https://help.keyman.com/developer/current-version/guides/lexical-models/advanced/word-breaker). +You’ll normally want to keep the `default` choice for the `Word breaker` field and the `(Space U+0020)` option for the `Insert after word` field, unless you are dealing with an orthography that doesn’t use space to separate words. For scripts such as Khmer, Thai, and Lao, which have special ways to delimit words, see the Keyman documentation on [coding a custom word breaker](../../../guides/lexical-models/advanced/word-breaker). You can specify the opening and closing quotation marks, and whether the language is using a right-to-left script (such as Arabic, Hebrew, Syriac, etc.) If your language uses a script with uppercase and lowercase (such as Latin, Cyrillic, Greek, etc.) you probably will want to enable the `Language uses casing` checkbox, so that Keyman will take casing into account when matching and suggesting words. For example, if you start typing `Rab`, Keyman will propose `Rabbit` rather than `rabbit`. -The Keyman site has more details on [advanced topics](https://help.keyman.com/developer/17.0/guides/lexical-models/advanced/word-breaker). +The Keyman site has more details on [advanced topics](../../../guides/lexical-models/advanced/word-breaker). ## Editing Wordlists @@ -166,7 +169,7 @@ Keyman provides a default `wordlist.tsv` file for you as an example. You can rep For a newly created project, the only wordlist present is `wordlist.tsv`. If you open that file, you'll see some sample data included as an illustration. -For advanced information on Keyman wordlist file formats and exporting your own wordlist files, read the [TSV file documentation](https://help.keyman.com/developer/17.0/reference/file-types/tsv). +For advanced information on Keyman wordlist file formats and exporting your own wordlist files, read the [TSV file documentation](../../../reference/file-types/tsv). ### Ignored lines @@ -368,6 +371,6 @@ Note: The text provided for this tutorial is already in a `.txt` file format. Fo ![](images/windows-save-txt.png) -[< Back: Part 9 - Distributing a Keyboard Package](09-distributing-keyboard-package) - -[Next: Part 11 - Installing a Keyman Lexical Model >](11-installing-lexical-model) +
+[← Part 9 - Distributing a Keyboard Package](09-distributing-keyboard-package)   [Part 11 - Installing a Keyman Lexical Model →](11-installing-lexical-model) +
\ No newline at end of file diff --git a/developer/docs/help/guides/develop/walkthrough/11-installing-lexical-model.md b/developer/docs/help/guides/develop/walkthrough/11-installing-lexical-model.md index 2531ab71e6..02d7594421 100644 --- a/developer/docs/help/guides/develop/walkthrough/11-installing-lexical-model.md +++ b/developer/docs/help/guides/develop/walkthrough/11-installing-lexical-model.md @@ -2,9 +2,12 @@ title: Installing a Keyman Lexical Model --- + +
Part 11 of the [Keyman Developer Walkthrough](../walkthrough). -[< Back: Part 10 - Generating a Lexical Model](10-generating-lexical-model) +[← Part 10 - Generating a Lexical Model](10-generating-lexical-model) +
## Step-by-Step @@ -18,7 +21,7 @@ This concludes the walkthrough. Hopefully it has given you an overview of the en ## Submitting a lexical model to the Keyman Lexical Models Repository -Follow the instructions at [https://help.keyman.com/developer/lexical-models/](https://help.keyman.com/developer/lexical-models/) to submit your lexical model to the Keyman lexical models repository. This will enable anyone with Internet access to download and use the lexical model. (Please do not submit the Dagbani lexical model used in the Step-by-Step tutorial. It’s really not suitable for submission to the repository.) +Follow the instructions at [Working with the Keyman Cloud Lexical Models Repository](https://help.keyman.com/developer/lexical-models/) to submit your lexical model to the Keyman lexical models repository. This will enable anyone with Internet access to download and use the lexical model. (Please do not submit the Dagbani lexical model used in the Step-by-Step tutorial. It’s really not suitable for submission to the repository.) Once the lexical model has been published, any Android or iOS device with Keyman installed and access to the Internet should be able to access and load the lexical model for use with a keyboard with the same language tag (BCP 47 code) as the lexical model. @@ -29,4 +32,6 @@ If an Android or iOS device has access to the Keyman package file (.kmp) that co As mentioned earlier, the Keyboard App Builder (KAB) lets you put a Keyman keyboard along with a lexical model into an app for iOS or Android, which can be distributed. More details can be found on the [Keyboard App Builder](https://software.sil.org/keyboardappbuilder/) page. -[< Back: Part 10 - Generating a Lexical Model](10-generating-lexical-model) \ No newline at end of file +
+[← Part 10 - Generating a Lexical Model](10-generating-lexical-model) +
diff --git a/developer/docs/help/guides/develop/walkthrough/__index.txt b/developer/docs/help/guides/develop/walkthrough/__index.txt new file mode 100644 index 0000000000..2bb307d6f9 --- /dev/null +++ b/developer/docs/help/guides/develop/walkthrough/__index.txt @@ -0,0 +1,13 @@ +00-introduction.md +01-creating-keyboard-project.md +02-designing-desktop-layout.md +03-creating-desktop-layout.md +04-using-debugger.md +05-designing-touch-layout.md +06-creating-touch-layout.md +07-writing-keyboard-documentation.md +08-preparing-keyboard-package.md +09-distributing-keyboard-package.md +10-generating-lexical-model.md +11-installing-lexical-model.md +glossary.md diff --git a/developer/docs/help/guides/develop/walkthrough/images/code-tab.png b/developer/docs/help/guides/develop/walkthrough/images/code-tab.png index 9e55f71e17c577b2e543566f414dd3745f238bc4..2bf030010164b303b2e98c25b9115703247491c2 100644 GIT binary patch literal 115371 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
y(0^DVlB6 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 Date: Wed, 18 Feb 2026 10:56:01 +0100 Subject: [PATCH 11/45] docs(developer): address review comments on walkthrough Co-authored-by: Darcy Wong --- .../docs/help/guides/develop/walkthrough/04-using-debugger.md | 4 +++- .../develop/walkthrough/09-distributing-keyboard-package.md | 2 +- .../guides/develop/walkthrough/10-generating-lexical-model.md | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/developer/docs/help/guides/develop/walkthrough/04-using-debugger.md b/developer/docs/help/guides/develop/walkthrough/04-using-debugger.md index 932fec3aaf..a86917754e 100644 --- a/developer/docs/help/guides/develop/walkthrough/04-using-debugger.md +++ b/developer/docs/help/guides/develop/walkthrough/04-using-debugger.md @@ -1,4 +1,6 @@ -# Using the Debugger +--- +title: Using the Debugger +---
diff --git a/developer/docs/help/guides/develop/walkthrough/09-distributing-keyboard-package.md b/developer/docs/help/guides/develop/walkthrough/09-distributing-keyboard-package.md index 756e83509e..1a38688018 100644 --- a/developer/docs/help/guides/develop/walkthrough/09-distributing-keyboard-package.md +++ b/developer/docs/help/guides/develop/walkthrough/09-distributing-keyboard-package.md @@ -23,7 +23,7 @@ To continue the Step-by-Step tutorial move to the next page: [Part 10 - Generati Follow the instructions at [Working with the Keyman Cloud Keyboard Repository](https://help.keyman.com/developer/keyboards/) to submit your keyboard to the Keyman keyboards repository. This will enable anyone with Internet access to download and use the keyboard. (Please do not submit the Dagbani keyboard used in the Step-by-Step tutorial. There is already a Dagbani keyboard in the repository.) -One requirement for keyboards that are submitted to the Keyman keyboards repository is the addition of a PHP help file that provides the online help available on the keyman.com site. See the **Editing the PHP help file** section of the [Writing Keyboard Documentation](07-writing-keyboard-documentation) page for more details. +One requirement for keyboards that are submitted to the Keyman keyboards repository is the addition of a PHP help file that provides the online help available on the keyman.com site. See the **Editing the PHP help file** section of the [Writing Keyboard Documentation](07-writing-keyboard-documentation#toc-editing-the-php-help-file) page for more details. ## Other Distribution Methods diff --git a/developer/docs/help/guides/develop/walkthrough/10-generating-lexical-model.md b/developer/docs/help/guides/develop/walkthrough/10-generating-lexical-model.md index 805877979f..a946ded54f 100644 --- a/developer/docs/help/guides/develop/walkthrough/10-generating-lexical-model.md +++ b/developer/docs/help/guides/develop/walkthrough/10-generating-lexical-model.md @@ -265,7 +265,7 @@ For the purposes of this tutorial, we’ve provided a sample text that you can d The sample text is a collection of folktales for the Fulfulde language. Right-click on the **Anduna_anndaaka.txt** link below and select `Save link as` and navigate to a folder where you can save the file and work on it. After you have deleted some unneeded words from the file you'll use PrimerPrep to create a wordlist file that you will then include in the `source` folder of your lexical model project. -[Aduna_anndaaka.txt](./Aduna_anndaaka.txt) +* [Aduna_anndaaka.txt](./Aduna_anndaaka.txt) ### File Preparation From 4c4643644e0702f3492d0a6acc6483b05bd5ab7f Mon Sep 17 00:00:00 2001 From: Shawn Schantz Date: Thu, 26 Feb 2026 11:30:27 -0500 Subject: [PATCH 12/45] fix(mac): surrogate pair backspace handling replaces with surrogate pair or single character but not with a larger composed character or grapheme cluster Fixes: #15543 --- .../Keyman4MacIM/KMInputMethodEventHandler.m | 80 ++++++++++++++++++- 1 file changed, 76 insertions(+), 4 deletions(-) diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMInputMethodEventHandler.m b/mac/Keyman4MacIM/Keyman4MacIM/KMInputMethodEventHandler.m index 3dfbd8593b..09276a3143 100644 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMInputMethodEventHandler.m +++ b/mac/Keyman4MacIM/Keyman4MacIM/KMInputMethodEventHandler.m @@ -585,10 +585,13 @@ CGEventSourceRef _sourceForGeneratedEvent = nil; NSUInteger deletionTargetLocation = context.length-deletionTargetLength; NSUInteger precedingCharacterLocation = deletionTargetLocation - 1; - if ([self deletionWillReplacePartOfCluster: deletionTargetLocation precedingCharacterLocation:precedingCharacterLocation context:context]) { - handledEvent = [self deleteByReplacingWithPrecedingCharacter:precedingCharacterLocation deleteLength:deletionTargetLength context:context client:client]; + // if the preceding character is the trailing half of a surrogate pair + // then delete by replacing with the entire surrogate pair + if ([self precededBySurrogatePair:precedingCharacterLocation context:context]) { + handledEvent = [self deleteByReplacingWithPrecedingSurrogate:precedingCharacterLocation deleteLength:deletionTargetLength context:context client:client]; } else { - handledEvent = [self deleteByReplacingWithPrecedingCluster:precedingCharacterLocation deleteLength:deletionTargetLength context:context client:client]; + // otherwise replace with only the preceding character + handledEvent = [self deleteByReplacingWithPrecedingCharacter:precedingCharacterLocation deleteLength:deletionTargetLength context:context client:client]; } return handledEvent; @@ -615,6 +618,7 @@ CGEventSourceRef _sourceForGeneratedEvent = nil; /** * Check whether the string to be deleted is part of the same cluster as the character in the context that precedes it. + * This function made not be needed, using `precededBySurrogatePair` instead. */ -(BOOL) deletionWillReplacePartOfCluster: (NSUInteger)deletionLocation precedingCharacterLocation: (NSUInteger)precedingLocation context:(NSString*) context { // NSString objects hold UTF-16 characters, so a single unicode composed character @@ -634,13 +638,37 @@ CGEventSourceRef _sourceForGeneratedEvent = nil; return NSEqualRanges(firstDeletionTargetClusterRange, precedingClusterRange); } +/** + * Check whether the preceding character, which is to be used for the replacement, + * is part of a surrogate pair that is distinct from the character being deleted. + */ +-(BOOL) precededBySurrogatePair: (NSUInteger)precedingLocation context:(NSString*) context { + BOOL precedingCharacterIsLowSurrogate = false; + unichar precedingCharacter = [context characterAtIndex:precedingLocation]; + + if (CFStringIsSurrogateHighCharacter(precedingCharacter)) { + // preceding character is high character + // this is not expected from Keyman Core; write to log but return false + precedingCharacterIsLowSurrogate = false; + NSString *message = [NSString stringWithFormat:@"High surrogate found for preceding character at %ld", (long)precedingCharacter]; + os_log_debug([KMLogs keyTraceLog], "%{public}@", message); + } else if (CFStringIsSurrogateLowCharacter(precedingCharacter)) { + // preceding character is low surrogate + precedingCharacterIsLowSurrogate = true; + NSString *message = [NSString stringWithFormat:@"Low surrogate found for preceding character at %ld", (long)precedingCharacter]; + os_log_debug([KMLogs keyTraceLog], "%{public}@", message); + } + + return precedingCharacterIsLowSurrogate; +} + /** * Replace both the text to delete and the character preceding it solely with the character that precedes it. * Returns YES if executing the replace/delete and NO otherwise. */ -(BOOL) deleteByReplacingWithPrecedingCharacter:(NSUInteger)precedingCharacterLocation deleteLength:(NSUInteger)deleteLength context:(NSString*) context client:(id) client { - os_log_debug([KMLogs keyTraceLog], "deleteByReplacingWithPrecedingCharacter, deletion target is part of the same grapheme cluster as the character that precedes it"); + os_log_debug([KMLogs keyTraceLog], "deleteByReplacingWithPrecedingCharacter"); // get the preceding character NSRange precedingCharacterRange = NSMakeRange(precedingCharacterLocation, 1); NSString *replacementString = [context substringWithRange:precedingCharacterRange]; @@ -662,10 +690,54 @@ CGEventSourceRef _sourceForGeneratedEvent = nil; return YES; } +/** + * Replace both the text to delete and the surrogate pair preceding it with the surrogate pair preceding it. + * Returns YES if executing the replace/delete and NO otherwise. + */ +-(BOOL) deleteByReplacingWithPrecedingSurrogate:(NSUInteger)precedingCharacterLocation deleteLength:(NSUInteger)deleteLength context:(NSString*) context client:(id) client { + + os_log_debug([KMLogs keyTraceLog], "deleteByReplacingWithPrecedingSurrogate"); + + // guard: return NO if there is no character before the precedingCharacterLocation + if (precedingCharacterLocation <= 0) { + NSString *message = @"no characters exist before precedingCharacterLocation, so it cannot be a surrogate pair"; + os_log_debug([KMLogs keyTraceLog], "%@", message); + return NO; + } + + // get the preceding character + NSRange precedingCharacterRange = NSMakeRange(precedingCharacterLocation - 1, 2); + NSString *replacementString = [context substringWithRange:precedingCharacterRange]; + + unichar highCharacter = [replacementString characterAtIndex:0]; + unichar lowCharacter = [replacementString characterAtIndex:1]; + + // verify that preceding characters comprise a surrogate pair + if ((CFStringIsSurrogateHighCharacter(highCharacter)) && (CFStringIsSurrogateLowCharacter(lowCharacter))) { + NSString *message = [NSString stringWithFormat:@"Replacement string containing surrogate %@", replacementString]; + os_log_debug([KMLogs keyTraceLog], "%{public}@", message); + [KMSentryHelper addDebugBreadCrumb:@"event" message:message]; + } else { + NSString *message = [NSString stringWithFormat:@"Preceding characters of string do not comprise a surrogate pair: 0x%02x, 0x%02x", (unsigned int)highCharacter, (unsigned int)lowCharacter]; + os_log_debug([KMLogs keyTraceLog], "%@", message); + [KMSentryHelper addDebugBreadCrumb:@"event" message:message]; + return NO; + } + + // perform the replacement + NSUInteger replacementLength = [replacementString length] + deleteLength; + NSRange replacementRange = NSMakeRange(precedingCharacterRange.location, replacementLength); + os_log_debug([KMLogs keyTraceLog], "replacementRange: %{public}@", NSStringFromRange(replacementRange)); + [client insertText:replacementString replacementRange:replacementRange]; + + return YES; +} + /** * Replace both the text to delete and the cluster preceding it solely with the cluster that precedes it. * The 'cluster' may be just one character, but if contains surrogate pairs, this ensures that they stay together. * Returns YES if executing the replace/delete and NO otherwise. + * This function may not be needed, using `deleteByReplacingWithPrecedingSurrogate` instead. */ -(BOOL) deleteByReplacingWithPrecedingCluster:(NSUInteger)precedingCharacterLocation deleteLength:(NSUInteger)deleteLength context:(NSString*) context client:(id) client { From 382b5d45e3fe125efe4c6e457b01cf2acf9681be Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Mon, 2 Mar 2026 17:17:36 +0100 Subject: [PATCH 13/45] fix(core): fix keydown/up handling for LDML keyboards For LDML keyboards this change fixes the `emit_key` flag so that it has the same value for the KeyDown and the KeyUp event. This fixes some problems with stuck keys. Previously we would set `emit_key=TRUE` on KeyDown but `emit_key=FALSE` on KeyUp for frame keys. This caused Linux to never see the KeyUp event, resulting in a stuck key. Also add unit tests that verifies that the actions that we get after calling `km_core_process_event` are what we expect. Fixes: #15569 Fixes: #15550 --- core/src/km_core_processevent_api.cpp | 7 + core/src/ldml/ldml_processor.cpp | 49 ++- core/src/ldml/ldml_processor.hpp | 3 + core/src/state.cpp | 3 +- core/src/state.hpp | 7 + .../unit/km_core_process_event.tests.cpp | 355 ++++++++++++++++++ core/tests/unit/meson.build | 12 + 7 files changed, 420 insertions(+), 16 deletions(-) create mode 100644 core/tests/unit/km_core_process_event.tests.cpp diff --git a/core/src/km_core_processevent_api.cpp b/core/src/km_core_processevent_api.cpp index a2bca95ea8..ade2665353 100644 --- a/core/src/km_core_processevent_api.cpp +++ b/core/src/km_core_processevent_api.cpp @@ -50,6 +50,9 @@ km_core_process_event(km_core_state *state, if(state == nullptr) { return KM_CORE_STATUS_INVALID_ARGUMENT; } + if (vk == KM_CORE_VKEY_BKSP && is_key_down) { + state->set_backspace_handled_internally(false); + } km_core_status status = state->processor().process_event(state, vk, modifier_state, is_key_down, event_flags); if (state_should_invalidate_context(state, vk, modifier_state, is_key_down, event_flags)) { @@ -78,6 +81,10 @@ km_core_process_event(km_core_state *state, state->apply_actions_and_merge_app_context(); + if (vk == KM_CORE_VKEY_BKSP) { + state->set_backspace_handled_internally(!state->action_struct().emit_keystroke); + } + return status; } diff --git a/core/src/ldml/ldml_processor.cpp b/core/src/ldml/ldml_processor.cpp index 9ef36b62fc..031669fbe5 100644 --- a/core/src/ldml/ldml_processor.cpp +++ b/core/src/ldml/ldml_processor.cpp @@ -179,21 +179,20 @@ ldml_processor::process_event( ldml_state.clear(); try { - if (!is_key_down) { - process_key_up(ldml_state); - } else { - switch (vk) { - // Currently, only one VK gets spoecial treatment. - // Special handling for backspace VK - case KM_CORE_VKEY_BKSP: - process_backspace(ldml_state); - break; - default: - // all other VKs + switch (vk) { + // Currently, only one VK gets special treatment. + // Special handling for backspace VK + case KM_CORE_VKEY_BKSP: + process_backspace(ldml_state); + break; + default: + // all other VKs + if (is_key_down) { process_key_down(ldml_state); - } // end of switch - } // end of normal processing - + } else { + process_key_up(ldml_state); + } + } // end of switch // all key-up and key-down events end up here. // commit the ldml state into the core state ldml_state.commit(); @@ -210,11 +209,31 @@ void ldml_processor::process_key_up(ldml_event_state &ldml_state) const { // TODO-LDML: Implement caps lock handling - ldml_state.clear(); + + // Look up the key + bool found = false; + const std::u16string key_str = keys.lookup(ldml_state.get_vk(), ldml_state.get_modifier_state(), found); + + if (!found) { + ldml_state.emit_passthrough_keystroke(); + } } void ldml_processor::process_backspace(ldml_event_state &ldml_state) const { + if (ldml_state.get_modifier_state() & K_MODIFIERFLAG) { + // we never process modifier+bksp + ldml_state.emit_passthrough_keystroke(); + return; + } + + if (!ldml_state.is_key_down()) { + if (!ldml_state.get_state()->backspace_handled_internally()) { + ldml_state.emit_passthrough_keystroke(); + } + return; + } + if (!!bksp_transforms) { // process with an empty string via the bksp transforms auto matchedContext = process_output(ldml_state, std::u32string(), bksp_transforms.get()); diff --git a/core/src/ldml/ldml_processor.hpp b/core/src/ldml/ldml_processor.hpp index b673a9275c..a10294cc32 100644 --- a/core/src/ldml/ldml_processor.hpp +++ b/core/src/ldml/ldml_processor.hpp @@ -176,6 +176,9 @@ public: * @return the number of context items consumed */ size_t context_to_string(std::u32string &str, bool include_markers = true); + km_core_state* get_state() const { return state; } + + uint8_t is_key_down() const { return _is_key_down; } private: km_core_virtual_key _vk; diff --git a/core/src/state.cpp b/core/src/state.cpp index c6142b3456..47f29d0a67 100644 --- a/core/src/state.cpp +++ b/core/src/state.cpp @@ -52,6 +52,7 @@ state::state(km::core::abstract_processor & ap, km_core_option_item const *env) env->key, env->value); } + _backspace_handled_internally = false; _imx_callback = nullptr; _imx_object = nullptr; memset(const_cast(&_action_struct), 0, sizeof(km_core_actions)); @@ -117,4 +118,4 @@ void state::apply_actions_and_merge_app_context() { } this->_action_struct.deleted_context = km::core::get_deleted_context(app_context_for_deletion, this->_action_struct.code_points_to_delete); -} \ No newline at end of file +} diff --git a/core/src/state.hpp b/core/src/state.hpp index 49eea8ffd2..fafe78edfa 100644 --- a/core/src/state.hpp +++ b/core/src/state.hpp @@ -130,6 +130,7 @@ protected: core::debug_items _debug_items; km_core_keyboard_imx_platform _imx_callback; void *_imx_object; + bool _backspace_handled_internally; public: state(core::abstract_processor & kb, km_core_option_item const *env); @@ -174,6 +175,12 @@ public: km_core_actions const &actions ); void apply_actions_and_merge_app_context(); + + // This is used to track whether the backspace key was handled internally + // during the keydown event. This is needed so that we can return the same + // value from the keyup event. Only used when processing KM_CORE_VKEY_BKSP. + void set_backspace_handled_internally(bool handled) { _backspace_handled_internally = handled; } + bool backspace_handled_internally() const { return _backspace_handled_internally; } }; } // namespace core } // namespace km diff --git a/core/tests/unit/km_core_process_event.tests.cpp b/core/tests/unit/km_core_process_event.tests.cpp new file mode 100644 index 0000000000..67b84760b3 --- /dev/null +++ b/core/tests/unit/km_core_process_event.tests.cpp @@ -0,0 +1,355 @@ +/* + * Keyman is copyright (C) SIL Global. MIT License. + */ +#include +#include "path.hpp" +#include "state.hpp" +#include "kmx/kmx_processevent.h" + +#include "emscripten_filesystem.h" +#include "kmnkbd/action_items.hpp" +#include "load_kmx_file.hpp" + +using namespace km::core::kmx; +km::core::path test_dir; + +km_core_option_item test_env_opts[] = {KM_CORE_OPTIONS_END}; + +#define KEY_DOWN TRUE +#define KEY_UP FALSE + +struct TestData { + const char* test_name; + + const char* keyboard_name; + km_core_virtual_key vkey; + uint16_t modifier_state; + + // Initial context + km_core_cu const* context; + + // Whether keydown handled the event. Only relevant for keyup tests. + bool keydown_handled; + + // Expected actions for keydown and keyup + std::initializer_list keydown_actions; + std::initializer_list keyup_actions; +}; + +std::string GenerateTestName(const testing::TestParamInfo& info) { + return info.param.test_name; +} + +class ProcessEventTests : public testing::TestWithParam { +protected: + km_core_keyboard* keyboard = nullptr; + km_core_state* state = nullptr; + KMX_ProcessEvent process_event; + + void Initialize(TestData const& data) { + km::core::path kmxfile = km::core::path(test_dir / data.keyboard_name); + auto blob = km::tests::load_kmx_file(kmxfile.native().c_str()); + + EXPECT_EQ(km_core_keyboard_load_from_blob(kmxfile.stem().c_str(), blob.data(), blob.size(), &this->keyboard), KM_CORE_STATUS_OK); + EXPECT_EQ(km_core_state_create(this->keyboard, test_env_opts, &this->state), KM_CORE_STATUS_OK); + EXPECT_TRUE(this->process_event.Load(blob.data(), blob.size())); + if (data.context) { + EXPECT_EQ(km_core_state_context_set_if_needed(this->state, data.context), KM_CORE_CONTEXT_STATUS_UPDATED); + } + ((km::core::state*)this->state)->set_backspace_handled_internally(data.keydown_handled); + } + + void TearDown() override { + if (this->state) { + km_core_state_dispose(this->state); + this->state = nullptr; + } + if (this->keyboard) { + km_core_keyboard_dispose(this->keyboard); + this->keyboard = nullptr; + } + } +}; + +void print_all_action_items(km_core_state const* state) { + size_t n = 0; + auto act = km_core_state_action_items(state, &n); + std::cout << "Action items:" << std::endl; + for (size_t i = 0; i < n; i++) { + print_action_item("", *act++); + } + std::cout << "---------------" << std::endl; +} + +TEST_P(ProcessEventTests, ReturnsExpectedActionsForKeyDown) { + auto data = GetParam(); + Initialize(data); + EXPECT_EQ(km_core_process_event(this->state, data.vkey, data.modifier_state, + KEY_DOWN, KM_CORE_EVENT_FLAG_DEFAULT), KM_CORE_STATUS_OK); + // print_all_action_items(this->state); + EXPECT_TRUE(action_items(this->state, data.keydown_actions)); +} + +TEST_P(ProcessEventTests, ReturnsExpectedActionsForKeyUp) { + auto data = GetParam(); + Initialize(data); + EXPECT_EQ(km_core_process_event(this->state, data.vkey, data.modifier_state, KEY_UP, KM_CORE_EVENT_FLAG_DEFAULT), KM_CORE_STATUS_OK); + // print_all_action_items(this->state); + EXPECT_TRUE(action_items(this->state, data.keyup_actions)); +} + +union backspace_union { + km_core_backspace_item backspace; + uint32_t value; +}; +// const backspace_union backspace_with_context = {{KM_CORE_BT_CHAR, 'x'}}; +const backspace_union backspace_no_context = {{KM_CORE_BT_CHAR, 0}}; + +const TestData values[] = { + //-------------------------------------------------------------------- + // KMN + // Key with rule + {"KMN_VKey_A", "kmx/k_005___nul_with_initial_context.kmx", KM_CORE_VKEY_A, 0, u"x", true, + { // KeyDown + {KM_CORE_IT_CHAR, { 0, }, {'d'}}, + {KM_CORE_IT_END} + }, + { // KeyUp + {KM_CORE_IT_EMIT_KEYSTROKE, { 0, }, {0}}, + {KM_CORE_IT_END} + } + }, + {"KMN_Ctrl_VKey_A", "kmx/k_005___nul_with_initial_context.kmx", KM_CORE_VKEY_A, KM_CORE_MODIFIER_LCTRL, u"x", true, + { // KeyDown + {KM_CORE_IT_INVALIDATE_CONTEXT, { 0, }, {0}}, + {KM_CORE_IT_EMIT_KEYSTROKE, { 0, }, {0}}, + {KM_CORE_IT_END} + }, + { // KeyUp + {KM_CORE_IT_EMIT_KEYSTROKE, { 0, }, {0}}, + {KM_CORE_IT_END} + } + }, + // Key without rule + {"KMN_VKey_X", "kmx/k_005___nul_with_initial_context.kmx", KM_CORE_VKEY_X, 0, u"x", true, + { // KeyDown + {KM_CORE_IT_CHAR, { 0, }, {'x'}}, + {KM_CORE_IT_END} + }, + { // KeyUp + {KM_CORE_IT_EMIT_KEYSTROKE, { 0, }, {0}}, + {KM_CORE_IT_END} + } + }, + {"KMN_Ctrl_VKey_X", "kmx/k_005___nul_with_initial_context.kmx", KM_CORE_VKEY_X, KM_CORE_MODIFIER_LCTRL, u"x", true, + { // KeyDown + {KM_CORE_IT_INVALIDATE_CONTEXT, { 0, }, {0}}, + {KM_CORE_IT_EMIT_KEYSTROKE, { 0, }, {0}}, + {KM_CORE_IT_END} + }, + { // KeyUp + {KM_CORE_IT_EMIT_KEYSTROKE, { 0, }, {0}}, + {KM_CORE_IT_END} + } + }, + // Frame key without rule + {"KMN_VKey_Enter", "kmx/k_000___null_keyboard.kmx", KM_CORE_VKEY_ENTER, 0, u"x", false, + { // KeyDown + {KM_CORE_IT_INVALIDATE_CONTEXT, { 0, }, {0}}, + {KM_CORE_IT_EMIT_KEYSTROKE, { 0, }, {0}}, + {KM_CORE_IT_END} + }, + { // KeyUp + {KM_CORE_IT_EMIT_KEYSTROKE, { 0, }, {0}}, + {KM_CORE_IT_END} + } + }, + // // Backspace (with available context) + // // TODO: fix the implementation to make this test pass. Currently failing in KeyUp + // {"KMN_VKey_Backspace_Ctxt", "kmx/k_000___null_keyboard.kmx", KM_CORE_VKEY_BKSP, 0, u"x", true, + // { // KeyDown + // // Once we use C++ 20 we can use: + // //{KM_CORE_IT_BACK, { 0, }, {.backspace = {KM_CORE_BT_CHAR, 'x'}}}, + // {KM_CORE_IT_BACK, { 0, }, {backspace_with_context.value}}, + // {KM_CORE_IT_END} + // }, + // { // KeyUp + // {KM_CORE_IT_END} + // } + // }, + // Backspace (without context) + {"KMN_VKey_Backspace_NoCtxt", "kmx/k_000___null_keyboard.kmx", KM_CORE_VKEY_BKSP, 0, NULL, false, + { // KeyDown + {KM_CORE_IT_INVALIDATE_CONTEXT, { 0, }, {0}}, + {KM_CORE_IT_EMIT_KEYSTROKE, { 0, }, {0}}, + {KM_CORE_IT_END} + }, + { // KeyUp + {KM_CORE_IT_EMIT_KEYSTROKE, { 0, }, {0}}, + {KM_CORE_IT_END} + } + }, + // Ctrl+Backspace (with context) + {"KMN_Ctrl_VKey_Backspace_Ctxt", "kmx/k_000___null_keyboard.kmx", KM_CORE_VKEY_BKSP, KM_CORE_MODIFIER_LCTRL, u"x", true, + { // KeyDown + {KM_CORE_IT_INVALIDATE_CONTEXT, { 0, }, {0}}, + {KM_CORE_IT_EMIT_KEYSTROKE, { 0, }, {0}}, + {KM_CORE_IT_END} + }, + { // KeyUp + {KM_CORE_IT_EMIT_KEYSTROKE, { 0, }, {0}}, + {KM_CORE_IT_END} + } + }, + // Ctrl+Backspace (no context) + {"KMN_Ctrl_VKey_Backspace_NoCtxt", "kmx/k_000___null_keyboard.kmx", KM_CORE_VKEY_BKSP, KM_CORE_MODIFIER_LCTRL, NULL, false, + { // KeyDown + {KM_CORE_IT_INVALIDATE_CONTEXT, { 0, }, {0}}, + {KM_CORE_IT_EMIT_KEYSTROKE, { 0, }, {0}}, + {KM_CORE_IT_END} + }, + { // KeyUp + {KM_CORE_IT_EMIT_KEYSTROKE, { 0, }, {0}}, + {KM_CORE_IT_END} + } + }, + // Modifier frame key + {"KMN_VKey_Shift", "kmx/k_000___null_keyboard.kmx", KM_CORE_VKEY_SHIFT, 0, u"x", false, + { // KeyDown + {KM_CORE_IT_END} + }, + { // KeyUp + {KM_CORE_IT_END} + } + }, + + //-------------------------------------------------------------------- + // LDML + // Key with rule + {"LDML_VKey_A", "ldml/keyboards/k_020_fr.kmx", KM_CORE_VKEY_A, 0, u"x", true, + { // KeyDown + {KM_CORE_IT_CHAR, { 0, }, {'q'}}, + {KM_CORE_IT_END} + }, + { // KeyUp + {KM_CORE_IT_END} + } + }, + {"LDML_Ctrl_VKey_A", "ldml/keyboards/k_020_fr.kmx", KM_CORE_VKEY_A, KM_CORE_MODIFIER_LCTRL, u"x", true, + { // KeyDown + {KM_CORE_IT_INVALIDATE_CONTEXT, { 0, }, {0}}, + {KM_CORE_IT_EMIT_KEYSTROKE, { 0, }, {0}}, + {KM_CORE_IT_END} + }, + { // KeyUp + {KM_CORE_IT_EMIT_KEYSTROKE, { 0, }, {0}}, + {KM_CORE_IT_END} + } + }, + // Key without rule + {"LDML_VKey_X", "ldml/keyboards/k_000_minimal_keyboard.kmx", KM_CORE_VKEY_X, 0, u"x", true, + { // KeyDown + {KM_CORE_IT_END} // LDML: no output without rule + }, + { // KeyUp + {KM_CORE_IT_END} + } + }, + {"LDML_Ctrl_VKey_X", "ldml/keyboards/k_000_minimal_keyboard.kmx", KM_CORE_VKEY_X, KM_CORE_MODIFIER_LCTRL, u"x", true, + { // KeyDown + {KM_CORE_IT_INVALIDATE_CONTEXT, { 0, }, {0}}, + {KM_CORE_IT_EMIT_KEYSTROKE, { 0, }, {0}}, + {KM_CORE_IT_END} // LDML: no output without rule + }, + { // KeyUp + {KM_CORE_IT_EMIT_KEYSTROKE, { 0, }, {0}}, + {KM_CORE_IT_END} + } + }, + // Frame key without rule + {"LDML_VKey_Enter", "ldml/keyboards/k_000_minimal_keyboard.kmx", KM_CORE_VKEY_ENTER, 0, u"x", false, + { // KeyDown + {KM_CORE_IT_INVALIDATE_CONTEXT, { 0, }, {0}}, + {KM_CORE_IT_EMIT_KEYSTROKE, { 0, }, {0}}, + {KM_CORE_IT_END} + }, + { // KeyUp + {KM_CORE_IT_EMIT_KEYSTROKE, { 0, }, {0}}, + {KM_CORE_IT_END} + } + }, + // Backspace (with available context) + {"LDML_VKey_Backspace_Ctxt", "ldml/keyboards/k_000_minimal_keyboard.kmx", KM_CORE_VKEY_BKSP, 0, u"x", true, + { // KeyDown + // Once we use C++ 20 we can use: + //{KM_CORE_IT_BACK, { 0, }, {.backspace = {KM_CORE_BT_CHAR, 0}}}, + {KM_CORE_IT_BACK, { 0, }, {backspace_no_context.value}}, + {KM_CORE_IT_END} + }, + { // KeyUp + {KM_CORE_IT_END} + } + }, + // Backspace (without context) + {"LDML_VKey_Backspace_NoCtxt", "ldml/keyboards/k_000_minimal_keyboard.kmx", KM_CORE_VKEY_BKSP, 0, NULL, false, + { // KeyDown + {KM_CORE_IT_INVALIDATE_CONTEXT, { 0, }, {0}}, + {KM_CORE_IT_EMIT_KEYSTROKE, { 0, }, {0}}, + {KM_CORE_IT_END} + }, + { // KeyUp + {KM_CORE_IT_EMIT_KEYSTROKE, { 0, }, {0}}, + {KM_CORE_IT_END} + } + }, + // Ctrl+Backspace (with context) + {"LDML_Ctrl_VKey_Backspace_Ctxt", "ldml/keyboards/k_000_minimal_keyboard.kmx", KM_CORE_VKEY_BKSP, KM_CORE_MODIFIER_LCTRL, u"x", false, + { // KeyDown + {KM_CORE_IT_INVALIDATE_CONTEXT, { 0, }, {0}}, + {KM_CORE_IT_EMIT_KEYSTROKE, { 0, }, {0}}, + {KM_CORE_IT_END} + }, + { // KeyUp + {KM_CORE_IT_EMIT_KEYSTROKE, { 0, }, {0}}, + {KM_CORE_IT_END} + } + }, + // Ctrl+Backspace (no context) + {"LDML_Ctrl_VKey_Backspace_NoCtxt", "ldml/keyboards/k_000_minimal_keyboard.kmx", KM_CORE_VKEY_BKSP, KM_CORE_MODIFIER_LCTRL, NULL, false, + { // KeyDown + {KM_CORE_IT_INVALIDATE_CONTEXT, { 0, }, {0}}, + {KM_CORE_IT_EMIT_KEYSTROKE, { 0, }, {0}}, + {KM_CORE_IT_END} + }, + { // KeyUp + {KM_CORE_IT_EMIT_KEYSTROKE, { 0, }, {0}}, + {KM_CORE_IT_END} + } + }, + // Modifier frame key + {"LDML_VKey_Shift", "ldml/keyboards/k_000_minimal_keyboard.kmx", KM_CORE_VKEY_SHIFT, 0, u"x", false, + { // KeyDown + {KM_CORE_IT_EMIT_KEYSTROKE, { 0, }, {0}}, + {KM_CORE_IT_END} + }, + { // KeyUp + {KM_CORE_IT_EMIT_KEYSTROKE, { 0, }, {0}}, + {KM_CORE_IT_END} + } + }, +}; + +INSTANTIATE_TEST_SUITE_P(KMXProcessEvent, ProcessEventTests, testing::ValuesIn(values), GenerateTestName); + +// provide our own `main` so that we can get the path of the exe so that +// we have a well-defined location to find our test keyboards +int main(int argc, char** argv) { +#ifdef __EMSCRIPTEN__ + test_dir = get_wasm_file_path(km::core::path(argv[0]).parent()); +#else + test_dir = km::core::path(argv[0]).parent(); +#endif + std::cout << "test_dir=" << test_dir.c_str() << std::endl; + testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/core/tests/unit/meson.build b/core/tests/unit/meson.build index 0637ace96e..3861d45912 100644 --- a/core/tests/unit/meson.build +++ b/core/tests/unit/meson.build @@ -48,6 +48,18 @@ kmcorekeyboardapitests = executable('km_core_keyboard_api.tests', test('km-core-keyboard-api-tests', kmcorekeyboardapitests) +# tests for km_core_process_even +km_core_process_event_tests_exe = executable( + 'km_core_process_event_tests', + ['km_core_process_event.tests.cpp', common_test_files], + include_directories: [inc, libsrc], + cpp_args: defns + warns, + link_args: [ links, extra_link_args ], + dependencies: [icu_uc, icu_i18n, gtest_dep, gmock_dep], + objects: lib.extract_all_objects(recursive: false), +) +test('km_core_process_event', km_core_process_event_tests_exe) + subdir('json') subdir('utftest') subdir('kmnkbd') From 67468c4dce64329659ffd2acf319fda3af7cf808 Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Fri, 27 Feb 2026 18:21:48 +0100 Subject: [PATCH 14/45] fix(core): address code review comments Co-authored-by: Marc Durdin --- core/src/state.hpp | 8 +++++--- core/tests/unit/meson.build | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/core/src/state.hpp b/core/src/state.hpp index fafe78edfa..1be699f3c5 100644 --- a/core/src/state.hpp +++ b/core/src/state.hpp @@ -176,9 +176,11 @@ public: ); void apply_actions_and_merge_app_context(); - // This is used to track whether the backspace key was handled internally - // during the keydown event. This is needed so that we can return the same - // value from the keyup event. Only used when processing KM_CORE_VKEY_BKSP. + /** + * This is used to track whether the backspace key was handled internally + * during the keydown event. This is needed so that we can return the same + * value from the keyup event. Only used when processing KM_CORE_VKEY_BKSP. + */ void set_backspace_handled_internally(bool handled) { _backspace_handled_internally = handled; } bool backspace_handled_internally() const { return _backspace_handled_internally; } }; diff --git a/core/tests/unit/meson.build b/core/tests/unit/meson.build index 3861d45912..5456650372 100644 --- a/core/tests/unit/meson.build +++ b/core/tests/unit/meson.build @@ -48,7 +48,7 @@ kmcorekeyboardapitests = executable('km_core_keyboard_api.tests', test('km-core-keyboard-api-tests', kmcorekeyboardapitests) -# tests for km_core_process_even +# tests for km_core_process_event km_core_process_event_tests_exe = executable( 'km_core_process_event_tests', ['km_core_process_event.tests.cpp', common_test_files], From 9836070299e0894ac02949561cf32faee2a4764e Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Mon, 2 Mar 2026 17:43:34 +0100 Subject: [PATCH 15/45] fix(core): clarify and extend comment --- core/src/state.hpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/core/src/state.hpp b/core/src/state.hpp index 1be699f3c5..8e6584b05c 100644 --- a/core/src/state.hpp +++ b/core/src/state.hpp @@ -179,7 +179,15 @@ public: /** * This is used to track whether the backspace key was handled internally * during the keydown event. This is needed so that we can return the same - * value from the keyup event. Only used when processing KM_CORE_VKEY_BKSP. + * value from the keyup event as we did for the keydown event. + * + * Backspace is the only key that we sometimes handle internally (if we + * have enough context) and sometimes not. By the time we get the keyup + * event the context already got updated and so we have no way of knowing + * whether or not the keydown handled it internally. Therefore this + * flag exists. + * + * Only used when processing KM_CORE_VKEY_BKSP. */ void set_backspace_handled_internally(bool handled) { _backspace_handled_internally = handled; } bool backspace_handled_internally() const { return _backspace_handled_internally; } From 60148856662d6a724ec78a5e9936414549c762ef Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Mon, 9 Mar 2026 15:04:26 +0100 Subject: [PATCH 16/45] docs: remove old content that is deprecated by walkthrough Remove old content and place redirects where the content is adequately replaced by the new walkthrough. Leaves some content which does not overlap the walkthrough. Moved reference information about package contents. Test-bot: skip --- .../docs/help/context/keyboard-editor.md | 34 +- developer/docs/help/guides/__index.txt | 1 + .../docs/help/guides/develop/__index.txt | 4 + ...ard-layout-for-amharic-the-nitty-gritty.md | 755 +----------------- ...ing-a-touch-keyboard-layout-for-amharic.md | 123 +-- developer/docs/help/guides/develop/index.md | 22 +- .../touch-keyboard-tutorial/gestures.md | 25 +- .../develop/touch-keyboard-tutorial/index.md | 59 +- .../making-touch-keyboard.md | 360 +-------- .../help/guides/develop/tutorial/index.md | 55 +- .../help/guides/develop/tutorial/step-1.md | 70 +- .../help/guides/develop/tutorial/step-2.md | 52 +- .../help/guides/develop/tutorial/step-3.md | 98 +-- .../help/guides/develop/tutorial/step-4.md | 101 +-- .../help/guides/develop/tutorial/step-5.md | 75 +- .../help/guides/develop/tutorial/step-6.md | 115 +-- .../help/guides/develop/tutorial/step-7.md | 51 +- .../help/guides/develop/tutorial/step-8.md | 77 +- .../help/guides/develop/tutorial/step-9.md | 65 +- .../docs/help/guides/distribute/__index.txt | 4 + .../docs/help/guides/distribute/index.md | 10 +- .../guides/distribute/install-kmp-android.md | 77 +- .../help/guides/distribute/install-kmp-ios.md | 52 +- .../docs/help/guides/distribute/packages.md | 130 +-- .../help/guides/distribute/tutorial/index.md | 35 +- .../help/guides/distribute/tutorial/step-1.md | 34 +- .../help/guides/distribute/tutorial/step-2.md | 126 +-- .../help/guides/distribute/tutorial/step-3.md | 30 +- .../help/guides/distribute/tutorial/step-4.md | 62 +- .../help/guides/distribute/tutorial/step-5.md | 48 +- .../help/guides/distribute/tutorial/step-6.md | 67 +- developer/docs/help/guides/index.md | 7 +- .../guides/test/keyboard-touch-and-desktop.md | 14 - .../test/keyboard-touch-mobile-emulator.md | 10 - .../docs/help/reference/file-types/kps.md | 105 +++ 35 files changed, 194 insertions(+), 2759 deletions(-) create mode 100644 developer/docs/help/guides/__index.txt create mode 100644 developer/docs/help/guides/develop/__index.txt create mode 100644 developer/docs/help/guides/distribute/__index.txt diff --git a/developer/docs/help/context/keyboard-editor.md b/developer/docs/help/context/keyboard-editor.md index 8dbc6e04b5..433cce5c4f 100644 --- a/developer/docs/help/context/keyboard-editor.md +++ b/developer/docs/help/context/keyboard-editor.md @@ -209,24 +209,24 @@ Display 102nd Key (as on European keyboards) : European keyboards (ISO layout) have one extra key that is not on US keyboards (ANSI layout). This key is positioned to the right of the left shift key. Some other keyboards have additional keys; these are not shown on the - layout designer. - + layout designer. + If you have a European layout selected as your Windows layout, the 102nd key will always be visible in the designer; ensure you select this checkbox if you want the 102nd key to always be visible to end users of the layout, irrespective of - their selected base layout. - + their selected base layout. + When a European layout is selected as your Windows layout, the shape of the Enter key will also change to take two rows, and the backslash key will move down one row, but not - otherwise change in behaviour. + otherwise change in behaviour. Keyboard Editor - On-Screen tab with ISO layout *See the difference between the two layouts in Keyman Developer.* > [!NOTE] - > The "Display 102nd Key (as on European keyboards)" checkbox can be left unchecked. + > The "Display 102nd Key (as on European keyboards)" checkbox can be left unchecked. > To ensure compatibility, the extra key shouldn't be assigned since it won't be accessible on an ANSI physical keyboard. Auto-fill underlying layout @@ -270,20 +270,20 @@ Template... be lost. Therefore, selecting an appropriate template early in the development process is suggested. - - template-basic: has only a phone layout (4 rows of keys), with three layers: default (K_A through K_Z - plus some punctuation), shift (Shift K_A through Shift K_Z, plus some punctuation), numeric (K_0 through + - template-basic: has only a phone layout (4 rows of keys), with three layers: default (K_A through K_Z + plus some punctuation), shift (Shift K_A through Shift K_Z, plus some punctuation), numeric (K_0 through K_9 unshifted and shifted, plus other non-alphanumerice keys). - - template-latin: has both phone and tablet layouts (which are identical except for some key spacing, - each with 4 rows of keys), with four layers: default, shift, numeric, symbol. The first three layers - are similar to those of template-basic, with the addition of longpress keys for accented characters. + - template-latin: has both phone and tablet layouts (which are identical except for some key spacing, + each with 4 rows of keys), with four layers: default, shift, numeric, symbol. The first three layers + are similar to those of template-basic, with the addition of longpress keys for accented characters. The symbol layer has many symbols not usually seen on a physical keyboard. - - template-traditional: has both phone (4 rows of keys) and tablet (5 rows of keys) layouts. The phone - layout is similar to the template-basic layout. The tablet layout has eight layers: default, shift, ctrl, - shift-ctrl, alt, shift-alt, ctrl-alt, shift-ctrl-alt. The default layer has the keys from the default layer + - template-traditional: has both phone (4 rows of keys) and tablet (5 rows of keys) layouts. The phone + layout is similar to the template-basic layout. The tablet layout has eight layers: default, shift, ctrl, + shift-ctrl, alt, shift-alt, ctrl-alt, shift-ctrl-alt. The default layer has the keys from the default layer of the desktop layout, the shift layer has the keys from the shift layer of the desktop layout, and so on. - + Import from On Screen : If you have an existing On-Screen Keyboard for your keyboard layout, importing the design from the On-Screen Keyboard can reduce the @@ -413,7 +413,7 @@ ID - `U_####[_####]` is used as a shortcut for a key that will output those Unicode values, if no rule matches it. This is similar to the overloaded behaviour for `K_` ids. Thus `####` - must be valid Unicode characters. + must be valid Unicode characters. The square bracket characters `[` and `]` indicate an optional portion of the sequence and are not to be included in the shortcut. E.g. `U_0259` would generate a schwa if no rule matches. It is still valid to have a rule such @@ -479,7 +479,7 @@ file. This makes certain operations simpler, such as batched rearranging of keys, or using another text editor to make bulk changes. The Code view uses the standard [editor](editor). -The format of the layout file is described in [Creating a touch keyboard layout guide](../guides/develop/creating-a-touch-keyboard-layout-for-amharic-the-nitty-gritty). +The format of the layout file is described in [.keyman-touch-layout file format](../reference/file-types/keyman-touch-layout). #### Long-press, Flicks, and Multitaps controls diff --git a/developer/docs/help/guides/__index.txt b/developer/docs/help/guides/__index.txt new file mode 100644 index 0000000000..57ea270e2f --- /dev/null +++ b/developer/docs/help/guides/__index.txt @@ -0,0 +1 @@ +-distribute \ No newline at end of file diff --git a/developer/docs/help/guides/develop/__index.txt b/developer/docs/help/guides/develop/__index.txt new file mode 100644 index 0000000000..e88328ff8a --- /dev/null +++ b/developer/docs/help/guides/develop/__index.txt @@ -0,0 +1,4 @@ +-creating-a-touch-keyboard-layout-for-amharic-the-nitty-gritty.md +-creating-a-touch-keyboard-layout-for-amharic.md +-tutorial +-touch-keyboard-tutorial diff --git a/developer/docs/help/guides/develop/creating-a-touch-keyboard-layout-for-amharic-the-nitty-gritty.md b/developer/docs/help/guides/develop/creating-a-touch-keyboard-layout-for-amharic-the-nitty-gritty.md index f33ea20c34..a895225331 100644 --- a/developer/docs/help/guides/develop/creating-a-touch-keyboard-layout-for-amharic-the-nitty-gritty.md +++ b/developer/docs/help/guides/develop/creating-a-touch-keyboard-layout-for-amharic-the-nitty-gritty.md @@ -1,756 +1,3 @@ --- -title: Creating a Touch Keyboard Layout Part 2 +redirect: . --- - -
- - -
- -This article will continue the guide to creating a touch keyboard layout. In -particular, we'll look in more detail at how keys are arranged, just what can be -specified for each key, and lastly, how this all looks in the JSON code used to -define the long press layout. - -## Key and Key Layer Organization - -There are two issues that are immediately apparent when considering key layout -on touch devices. - -First, on smaller touch devices, such as phones, if we try to display the same -arrangement of keys that is used for a typical desktop keyboard, the keys are so -small that it is difficult to reliably select the wanted key. If used in -'portrait' view, key widths are too narrow for our 'fat fingers': - -![](../../images/touch_amharic_keyboard_4.png) - -Or if in 'landscape' view, key heights are too small: - -![](../../images/touch_amharic_keyboard_5.png) - -The situation is improved markedly if we limit the number of keys per row to ten -and have no more than four key rows: - -![](../../images/touch_amharic_keyboard_6.png) - -and, in landscape view: - -![](../../images/touch_amharic_keyboard_7.png) - -So which keys can be eliminated, and which keys must be on the base (default) -layer? This brings us to the second point. When using phones and other touch -layout devices rather than desktop keyboards, text entry is most often -single-handed, which makes it best to avoid using the 'shift' layer for entering -normal text. Secondary keyboard layers will, of course, still be usually needed -for uppercase, numerals and symbols, but will be used much less frequently. - -Most desktop keyboards (for European languages, at least) are already laid out -with no more than ten letter (or digit) keys per row, with the remaining keys -being used for accented letters, punctuation and other non-letter input. So the -obvious choice is to move non-letter keys (and accented letters) either to a -secondary key layer, or to long press ('pop-up') keys. The GFF Amharic desktop -keyboard is fortunately also arranged with only ten letters per key row (other -keys being used for punctuation, etc.), as the many different characters in the -Amharic 'abugida' are generated by multi-letter sequences rather than being -displayed on separate keys. The Geez script does not have both upper-case and -lower-case forms, so those initial consonants that require use of the 'shift' -layer on the desktop keyboard have been added to the corresponding base-layer -key as long press keys: - -![](../../images/touch_amharic_keyboard_8.png) - -Arrangement of punctuation and other non-letter keys is more flexible as mobile -users are generally familiar with using long press keys or a secondary key layer -for finding and entering digits and special characters. However, some -punctuation characters are used so frequently that they need to be on the base -layer. For the GFF Amharic keyboard, the most frequently used punctuation -characters can be output from the base layer using standard or long press keys. -The Geez word space character, in particular, is so frequently used that it was -considered useful to add it to the bottom key, adjacent to the space bar, as is -sometimes done for other scripts, such as Japanese, on desktop (physical) -keyboards. - -##
Arranging keys with the layout editor - -The Keyman Developer layout editor really makes it quite easy to try different -key layouts and choose what is best for your keyboard. The image below -highlights just how, for any selected key, using the clickable icons circled, a -key row can be added above (1) or below (2), a key added before (3) or after -(4), the selected key deleted (5), and how an array of long press keys -(sometimes called "subkeys") can be added (6). - -![](../../images/touch_amharic_keyboard_9.png) - -## Key properties - -For each visual key, the appearance and behaviour is determined by a number of -properties: - -### Key code - -Each key must be given an identifying key code which is unique to the key layer. -Key codes by and large correspond to the virtual key codes used when creating a -keyboard program for a desktop keyboard, and should start with `K_`, for keys -mapped to standard Keyman virtual key names, e.g. `K_HYPHEN`, and `T_` or `U_` -for user-defined names, e.g. `T_ZZZ`. If keyboard rules exist matching the key -code in context, then the output from the key will be determined by the -processing of those rules. It is usually best to include explicit rules to -manage the output from each key, but if no rules matching the key code are -included in the keyboard program, and the key code matches the pattern -`U_xxxx[_yyyy...]` (where `xxxx` and -`yyyy` are 4 to 6-digit hex strings), then the Unicode characters -`U+xxxx` and `U+yyyy` will be output. As of Keyman 15, you -can use more than one Unicode character value in the id (earlier versions -permitted only one). The key code is always required, and a default code will -usually be generated automatically by Keyman Developer. - -- `K_xxxx` is used for a standard Keyman Desktop key name, e.g. - `K_W`, `K_ENTER`. You cannot make up your own `K_xxxx` names. - Many of the `K_` ids have overloaded output behaviour, for instance, if no - rule is matched for `K_W`, Keyman will output 'w' when it is touched. The - standard key names are listed in [Virtual Keys and Virtual Character - Keys](/developer/language/guide/virtual-keys "Virtual Keys and Virtual -Character Keys"). Typically, you would use only the "common" virtual key - codes. - -- `T_xxxx` is used for any user defined names, e.g. `T_SCHWA`. If you wanted - to use it, `T_ENTER` would also be valid. If no rule matches it, the key - will have no output behaviour. - -- `U_####[_####]` is used as a shortcut for a key that will output those - Unicode values, if no rule matches it. This is similar to the overloaded - behaviour for `K_` ids. Thus `####` must be valid Unicode characters. - The square bracket characters `[` and `]` indicate an optional portion of the sequence - and are not to be included in the shortcut. E.g. - `U_0259` would generate a schwa if no rule matches. It is still valid to - have a rule such as `+ [U_0259] > ...` - -As noted above, some `K_xxxx` codes emit characters, if no rule is defined. -There are also some codes which have special functions: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IdentifierMeaning
`K_ENTER`Submit a form, or add a new line (multi-line); the key action may vary depending on the situation.
`K_BKSP`Delete back a single character. This key, if held down, will repeat. It is the only key code which triggers - repeat behavior.
`K_LOPT`Open the language menu (aka Globe key).
`K_ROPT`Hide the on screen keyboard.
`K_TAB`, `K_TABBACK`, `K_TABFWD`Move to next or previous element in a form. Note that these key functions are normally - implemented outside the touch layout, so should not typically be used. `K_TAB` will go to previous - element if used with the `shift` modifier.
- -Any key can be used to switch keyboard layers (see -[`nextlayer`](#toc-nextlayer)), but the following layer-switching key codes have -been added for switching to some commonly used secondary layers. Note that these -keys have no specific meaning; you must still set the `nextlayer` property on -the key. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IdentifierMeaning
`K_NUMERALS`Switch to a numeric layer
`K_SYMBOLS`Switch to a symbol layer
`K_CURRENCIES`Switch to a currency layer
`K_SHIFTED`Switch to a shift layer
`K_ALTGR`Switch to a right-alt layer (desktop compatibility)
- -### Key text - -The key text is simply the character (or characters) that you want to appear on -the key cap. This will usually be the same as the characters generated when the -key is touched, unless contextual rules are used to generate output according to -a multi-key sequence, as will be true for the GFF Amharic keyboard. Unicode -characters can be specified either as a string using a target font or using the -standard hex notation `\uxxxx`. This may be sometimes more convenient, for -example, for characters from an uninstalled font, or for diacritic characters -that do not render well alone. - -A number of special text labels are recognized as identifying special purpose -keys, such as Shift, Backspace, Enter, etc., for which icons are more -appropriately used than a text label. A special font including these icons is -included with Keyman and automatically embedded and used in any web page using -Keyman. The list of icons in the font will probably be extended in future, but -for now the following special labels are recognized: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Text StringKey CapKey Purpose
`*Shift*`Select Shift layer (inactive). Use on the Shift key to indicate that it switches to the shift layer.
`*Shifted*`Select Shift layer (active). Use on the Shift key on the shift layer to switch back to the default layer.
`*ShiftLock*`Switch to Caps layer (inactive). Not commonly used; generally double-tap on Shift key is used to access the - caps layer.
`*ShiftedLock*`Switch to Caps layer (active). Use on the Shift key on the caps layer to switch back to the default layer. -
`*Enter*` or Return or Enter key (shape determined by writing system direction)
`*LTREnter*`Return or Enter key (left-to-right script shape)
`*RTLEnter*`Return or Enter key (right-to-left script shape)
`*BkSp*` or Backspace key (shape determined by writing system direction)
`*LTRBkSp*`Backspace key (left-to-right script shape)
`*RTLBkSp*`Backspace key (right-to-left script shape)
`*Menu*`Globe key; display the language menu. Use on the `K_LOPT` key.
`*Hide*`Hide the on screen keyboard. Use on the `K_ROPT` key.
`*ABC*`Select alphabetic layer (Uppercase)
`*abc*`Select alphabetic layer (Lowercase)
`*123*`Select the numeric layer
`*Symbol*`Select the symbol layer
`*Currency*`Select the currency symbol layer
`*ZWNJ*` (iOS) or  (Android)Zero Width Non Joiner (shape determined by current platform)
`*ZWNJiOS*`Zero Width Non Joiner (iOS style shape)
`*ZWNJAndroid*`Zero Width Non Joiner (Android style shape)
`*ZWNJGeneric*`Zero Width Non Joiner (not platform-specific)
`*Sp*`Regular space
`*NBSp*`No-Break Space
`*NarNBSp*`Narrow No-Break Space
`*EnQ*`En Quad
`*EmQ*`Em Quad
`*EnSp*`En Space
`*EmSp*`Em Space
`*PunctSp*`Punctuation Space
`*ThSp*`Thin Space
`*HSp*`Hair Space
`*ZWSp*`Zero Width Space
`*ZWJ*`Zero Width Joiner
`*WJ*`Word Joiner
`*CGJ*`Combining Grapheme Joiner
`*LTRM*`Left-to-right Mark
`*RTLM*`Right-to-left Mark
`*SH*`Soft Hyphen
`*HTab*`Horizontal Tabulation
- -The following additional symbols are also available, but intended for working -with legacy desktop layouts, and not recommended for general use: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Text StringKey CapKey Purpose
`*Tab*`Move to next input element in tab order
`*TabLeft*`Move to previous input element in tab order
`*Caps*`Select caps layer (legacy)
`*AltGr*`Select AltGr (Right-Alt) layer (desktop layout compatibility)
`*Alt*`Select Alt layer (desktop layout compatibility)
`*Ctrl*`Select Ctrl layer (desktop layout compatibility)
`*LAlt*`Select Left-Alt layer (desktop layout compatibility)
`*RAlt*`Select Right-Alt layer (desktop layout compatibility)
`*LCtrl*`Select Left-Ctrl layer (desktop layout compatibility)
`*RCtrl*`Select Right-Ctrl layer (desktop layout compatibility)
`*LAltCtrl*`Select Left-Alt-Ctrl layer (desktop layout compatibility)
`*RAltCtrl*`Select Right-Alt-Ctrl layer (desktop layout compatibility)
`*LAltCtrlShift*`Select Left-Alt-Ctrl-Shift layer (desktop layout compatibility)
`*RAltCtrlShift*`Select Right-Alt-Ctrl-Shift layer (desktop layout compatibility)
`*AltShift*`Select Alt-Shift layer (desktop layout compatibility)
`*CtrlShift*`Select Ctrl-Shift layer (desktop layout compatibility)
`*AltCtrlShift*`Select Alt-Ctrl-Shift layer (desktop layout compatibility)
`*LAltShift*`Select Left-Alt-Shift layer (desktop layout compatibility)
`*RAltShift*`Select Right-Alt-Shift layer (desktop layout compatibility)
`*LCtrlShift*`Select Left-Ctrl-Shift layer (desktop layout compatibility)
`*RCtrlShift*`Select Right-Ctrl-Shift layer (desktop layout compatibility)
- -### Key type - -The general appearance of each key is determined by the key type, which is -selected (in Keyman Developer) from a drop-down list. While generally behavior -is not impacted by the key type, Spacer keys cannot be selected. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Key TypeValueMeaning
Default`0`Any normal key that emits a character
Special`1`The frame keys such as Shift, Enter, BkSp.
Special (active)`2`A frame key which is currently active, such as the Shift key on the shift layer.
Deadkey`8`Does not impact behavior, but colors the key differently to indicate it has a special function, such as a - desktop-style deadkey.
Blank`9`A blank key, which may be used to maintain a layout shape. Usually colored differently. Does not impact - behavior.
Spacer`10`Does not render the key, but leaves a same-sized gap in its place. The key cannot be selected.
- -The colour, shading and borders of each key type is actually set by a style -sheet which can be customized by the page developer. - -### font-family - -If a different font is required for a particular key text, the `font-family` -name can be specified. The font used to display icons for the special keys (as -mentioned above) does not need to be specified, as it will be automatically -applied to a key that uses any of the special key text labels. - -### font-size - -If a particular key cap text requires a different font size from the default for -the layout, it should be specified in em units. This can be helpful if a the key -text is either an unusually large character or, alternatively, a word or string -of several characters that would not normally fit on the key. - -### width - -The layout is scaled to fit the widest row of keys in the device width, assuming -a default key width of 100 units. Keys that are to be wider or narrower than the -default width should have width specified as a percentage of the default width. -For any key row that is narrower than the widest row, the width of the last key -in the row will be automatically increased to align the right hand side of the -key with the key with the right edge of the keyboard. However, where this is not -wanted, a "spacer" key can be inserted to leave a visible space instead. As -shown in the above layouts, where the spacer key appears on the designer screen -as a narrow key, but will not be visible in actual use. - -### pad - -Padding to the left of each key can be adjusted, and specified as a percentage -of the default key width. If not specified, a standard padding of 5% of the key -width is used between adjacent keys. - -### layer - -To simplify correspondence with desktop keyboards and avoid the need for using a -separate keyboard mapping program, touch layout keys can specify a desktop -keyboard layer that the keystroke should be interpreted as coming from. Layer -names of `shift`, `ctrl`, `alt`, `ctrlshift`, `altshift`, `ctrlalt` and -`ctrlaltshift` can be used to simulate use of the appropriate modifier keys when -processing rules. - -### nextlayer - -The virtual keys `K_SHIFT`, `K_CONTROL`, `K_MENU`, etc. are normally used to -switch to another key layer, which is implied by the key code. The left and -right variants of those key codes, and also additional layer-switching keys -mentioned above (`K_NUMERALS`, `K_SYMBOLS`, `K_CURRENCIES`, `K_ALTGR`) can also -be used to automatically switch to the appropriate key layer instead of -outputting a character. However, it is sometimes useful for a key to output a -character first, then switch to a new layer, for example, switching back to the -default keyboard layer after a punctuation key on a secondary layer had been -used. Specifying the `nextlayer` for a key allows a different key layer to be -selected automatically following the output of the key. Of course, that can be -manually overridden by switching to a different layer if preferred. - -Another way the `nextlayer` property can be used is for a non-standard layer -switching key. So, for example, for the GFF Amharic keyboard phone layout, -switching back to the base layer uses a `T_ALPHA` key code, in which `nextlayer` -is set as default. In this case, it is also necessary to add a rule to the -keyboard program: - -```keyman -+ [T_ALPHA] > nul -``` - -to ensure that the key's scan code is ignored by the keyboard mapping. - -When a key in a touch layout definition includes a **Next Layer** control, this -takes precedence over setting layer via the -[`layer`](/developer/language/reference/layer) store (as the **Next Layer** -control is applied once the rule has finished processing). - -### subkey - -Arrays of longpress 'subkeys' or pop-up keys can be defined for any key, and -will appear momentarily after the key is touched if not immediately released. -This provides a major advantage over physical desktop keyboards in that many -more keys can be made available from a single layer, without cluttering up the -basic appearance of the layout. For the GFF Amharic keyboard, we have already -noted how such subkey arrays are used to manage the extra keys that, on the -desktop keyboard, would appear in the shift layer. But they are also used to -provide another way to enter the two different types of each syllable-initial -vowels (glottal or pharyngeal), as a visual alternative to pressing the key -twice. - -The same properties that are defined for standard keys can also be specified for -each subkey except that the width of each key in a subkey array will always be -the same as the width of the key that causes the subkeys to be shown, and key -spacing always uses the default padding value. - -The GFF Amharic keyboard, like many others, is mnemonic, so it is useful to also -display the standard key cap letter that would appear on the key of a desktop -keyboard. This is enabled globally in the On-Screen layout editor and applies to -both the On-Screen keyboard and touch layouts. - -## Representing (and editing) the visual layout with JSON code - -In case you are wondering, 'Why do I need to know that?', the reason is that, -just as with keyboard mapping code, it is sometimes easier to edit a text -specification than to use the GUI layout design tool. Keyman Developer switches -seamlessly between the visual layout tool and the code editor, unless, of -course, careless editing of the code results in invalid JSON syntax! - -The GFF Amharic phone layout code starts as: - -```javascript - { - "phone": { - "font": "Tahoma", - "layer": [{ - "id": "default", - "row": [{ - "id": 1, - "key": [{ - "id": "K_Q", - "text": "ቅ", - "pad": "0" - }, { - "id": "K_W", - "text": "ው" - }, - - . . . -``` - -As long as standard JSON syntax is remembered - nested braces {…}, quoted -strings "…" for both element names and values, element or object arrays in -square brackets […], and no trailing comma after the last element in an array - -it is quite easy to understand a layout, which will usually comprise a list of -two separate JSON objects for tablet and phone. - -Now you're ready to create a great touch layout for your own Keyman keyboard! - -Other articles on developing touch layouts: - -- [Creating a touch keyboard layout for Amharic - part 1](creating-a-touch-keyboard-layout-for-amharic) -- [How to test your keyboard layout — touch and desktop](../test/keyboard-touch-and-desktop) - -You can distribute your keyboard to other users by following the instructions in -this article: - -- [Distribute keyboards to Keyman applications](../distribute/packages) diff --git a/developer/docs/help/guides/develop/creating-a-touch-keyboard-layout-for-amharic.md b/developer/docs/help/guides/develop/creating-a-touch-keyboard-layout-for-amharic.md index 3dc96dfc95..a895225331 100644 --- a/developer/docs/help/guides/develop/creating-a-touch-keyboard-layout-for-amharic.md +++ b/developer/docs/help/guides/develop/creating-a-touch-keyboard-layout-for-amharic.md @@ -1,124 +1,3 @@ --- -title: Creating a Touch Keyboard Layout Part 1 +redirect: . --- - -This article describes the approach taken and some of the issues encountered when adapting the existing GFF‑AMH‑7 Amharic keyboard for easier use on phone and tablet touch screen devices. - -A widely used Keyman Desktop phonetic keyboard for Amharic (developed by Geez Frontier Foundation) was also compiled and made available for use with KeymanWeb. When used with web browsers on desktop computers, the behaviour of the keyboard was identical to use with Keyman Desktop, but use of the same Amharic keyboard on smart phones or other touch screen devices revealed a number of weaknesses in the layout. - -### Background - -The desktop layout has a default layer and a shift layer which are fairly similar: - -![](../../images/touch_amharic_keyboard.png) - - -Several keycaps have more than one Geez script letter, indicating that pressing the key twice changes the character output. Geez script is better understood as an Abugida, rather than an alphabet, since each consonant-vowel syllable is a modification of the original letter rather than having separate letters for consonant and vowel. So when entering Amharic, the form of a consonant changes from the default syllable form to the appropriate syllable character for the consonant and vowel pressed. However, as each vowel can also occur in stand-alone syllables as either pharyngeal or glottal forms, the two separate syllables for each vowel are shown on the "a", "e", "i", "o" and "u" keys. - -But what about the extra characters on the "s" and "h" keys? Amharic (like most Semitic languages) is rich in fricative sounds, and Geez has four separate, distinct phonemes that are roughly similar to the English -"s", and three similar to "h". The desktop layout handles this by using -repeated keystrokes in combination with shift to select the alternate -consonants (before typing the appropriate vowel). That works for a -desktop keyboard, but not for a touch screen device, for which it is -often impractical to hold a shift key while touching another key. - -Small format touch-screen devices such as phones have a further -difficulty in that if they display the full number of key rows and keys -in each row that appear in the desktop layout, the keys are too small -for convenient use. - -On the other hand, touch screen devices offer one very significant -advantage over layouts based on a physical keyboard - it is quite easy -to configure dynamic touch screen layouts to display contextually -appropriate character alternates in separate key windows as each key is -touched. - -### Design goals - -With the above background, the following design goals were set for -developing a touch screen layout for Amharic: -- Maintain the same basic phonetic layout functionality that users are familiar with. -- Instead of having "default" and "shift" layers, design the layout so that all alphabetic text and frequently used punctuation can be entered from a single layer, moving less commonly used punctuation and symbols to the second "symbol" layer. -- Use a dynamic window rather than the shift key to select the initial "s" or "h" consonant for a syllable. -- Use a separate key (adjacent to the space bar) for the Ethiopic word-space character, instead of requiring shift + space to be pressed. -- For tablet devices, increase key size slightly by removing most non-letter keys from each row, moving them either to dynamic ("pop-up") key windows, or to the symbol layer. -- For phones and other small-format devices, further increase the key size by not displaying the digits in the default (alphabetic) layer, and moving many of the less commonly used characters to dynamic windows, reducing the number of key rows by one for each layer. - -### Implementation - -Achieving the design goals required making a number of decisions for -each format (tablet and phone), in particular: - -- Which keys can be removed from the default layer? -- Which keys can be removed from the symbol layer? -- Which "pop-up" keys should be grouped with each base character? - -Keyman Developer 17's Touch Layout editor greatly simplifies the process -of developing the JSON layout file that specifies the touch layout for -each device, making it easy to move keys around, create pop-up key -arrays, and adjust key widths, labels and other parameters. While the -graphical interface does not allow moving entire key rows between layers -or device types, that is easily managed using the code window. - -To keep a keyboard compatible with the desktop version, it is important -to use the same key identifiers and "shift states". So, no matter -whether a particular character occurs in a visible row or in a pop-up -array, it should usually use the same code as on the original desktop -layout keyboard. - -Where a key did not occur in the original layout and does not correspond -to a desktop layout key, identifiers will usually be something like -T\_<name> where <name> will typically be a Unicode character -name, or an obvious contraction of it. Note that this is just a rule of -thumb and key identifiers can be anything that makes sense. Such keys -are distinct from the K\_<name> identifiers that are associated -with physical keys, and should normally have a mapping rule added -explicitly to the mapping program. If no rule is added, output will -default to the keycap text, but this is not recommended. - -All key "rotations" - pressing the same key repeatedly to select from -alternate output characters - in the original desktop keyboard program -are still supported, but have been supplemented by pop-up key arrays, -allowing a user to visually select the wanted character instead of -stepping through alternates. Similarly, Ethiopian numerals can be -selected from a pop-up key array attached to each numeral key, as well -as being output by pressing the single quote key before a digit key. - -The final tablet default keyboard layer, as displayed in the Touch -Layout editor in the previous release of Keyman Developer 10, now appears -as: - -![](../../images/touch_amharic_keyboard_2.png) - -Here the editor is shown with the "s" key selected, displaying the -pop-up key array with the four different Geez characters that can be -produced, each of which will combine as necessary with any subsequently -typed vowel. - -For the small format (e.g. iPhone) layout, the two keyboard layers are: - -![](../../images/touch_amharic_keyboard_3.png) - -For these layouts, the row length has been reduced to the minimum number -of ten keys, moving backspace to another row. The numerals only appear -on the second layer, as is usual with phone layouts. All less-frequently -used keys are now available only in pop-up key windows. - -### Summary - -With these principles guiding all the changes made, the Amharic keyboard -now adapts to various device form factors, making use of device-specific -usability factors, while retaining the same conceptual input model as -the original keyboard. This means that users can use the keyboard layout -on different devices with a minimum of difficulty. These methods should -be applicable to other keyboard layouts. - -Other articles on developing touch layouts: - -- [Creating a touch keyboard layout for Amharic - the nitty gritty](creating-a-touch-keyboard-layout-for-amharic-the-nitty-gritty) -- [How to test your keyboard layout — touch and desktop](../test/keyboard-touch-and-desktop) - -You can distribute your keyboard to other users by following the -instructions in this article: - -- [Distribute keyboards to Keyman applications](../distribute/packages) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/index.md b/developer/docs/help/guides/develop/index.md index d53a527431..c86743b294 100644 --- a/developer/docs/help/guides/develop/index.md +++ b/developer/docs/help/guides/develop/index.md @@ -2,20 +2,16 @@ title: Developing Keyboards --- -[Keyman Developer Walkthrough](walkthrough) +In version 19, the main keyboard tutorials have been replaced by the Keyman +Developer Walkthrough, which covers all the topics found in the main tutorials +in greater depth. -[Keyman keyboard tutorial](tutorial) +* [The Keyman Developer Walkthrough →](walkthrough/) -[An advanced keyboard development example](advanced-keyboard-development-example) +Other tutorials: -[Creating a simple touch keyboard layout](touch-keyboard-tutorial) +* [An advanced keyboard development example](advanced-keyboard-development-example) +* [Input Method Extensions (IMX)](imx) -[Creating a touch keyboard layout for Amharic - part 1](creating-a-touch-keyboard-layout-for-amharic) - -[Creating a touch keyboard layout for Amharic - part 2](creating-a-touch-keyboard-layout-for-amharic-the-nitty-gritty) - -[Input Method Extensions (IMX)](imx) - ------------------------------------------------------------------------- - -[Keyman Developer 16 Tutorial](https://lingtran.net/Keyman-Developer-16-Tutorial) (external on Lingtran.net) +> [!NOTE] +> The old tutorials can still be found in earlier versions of the Keyman Developer help; see the version selector at the top right of this page. diff --git a/developer/docs/help/guides/develop/touch-keyboard-tutorial/gestures.md b/developer/docs/help/guides/develop/touch-keyboard-tutorial/gestures.md index b09d5919cf..0b6ffea441 100644 --- a/developer/docs/help/guides/develop/touch-keyboard-tutorial/gestures.md +++ b/developer/docs/help/guides/develop/touch-keyboard-tutorial/gestures.md @@ -1,26 +1,5 @@ --- -title: Using Gestures in Keyman Developer +redirect: .. --- -Keyman Developer offers **Longpress** keys, **Flicks**, and **Multitaps** for touch keyboard layout. To allow gestures onto your keyboard, go to the Touch layout tab and define the keys as follows: - -Keyman Developer touch layout gestures - -## Tips - -***Flicks** and **long presses** can both be used in a single keyboard. In this scenario, it is recommended to use flicks in only one direction—south (down). Long presses work well alongside this pattern. See, for example, [sil_euro_latin](https://help.keyman.com/keyboard/sil_euro_latin/3.0.3/sil_euro_latin#toc-mobile-keyboard-layout). - * Another helpful tip seen in the sil_euro_latin keyboard is using south-flicks on the base and shift layers corresponding to the numeric/symbol layer, this aids in both memorization and discovery. -* **Flicks** in multiple directions are possible, but currently Keyman does not support hints for multiple directions, so they are not very discoverable. -* **Long presses** are more discoverable, but **flicks** are faster. We suggest using south flicks along with long presses, and including the flick output in the long press for maximum discoverability and optimum ergonomics. - -## Caution - -* **Flicks** near screen edges tend to be problematic--once you drag off the screen, then Keyman can no longer tell that you are flicking (or you may end up activating system controls on the bottom edge): - * On the bottom row, south flicks are not recommended. - * On the top row, we have the banner space reserved in order to be able to support flicks and long presses up into that region of the screen. - * Left/right screen edges, horizontal flicks are not the best practice. - -## See also - -* The [Winchus keyboard](https://help.keyman.com/keyboard/winchus/1.4/winchus#guia-rapida-celular) -* The [GFF Amharic keyboard](https://help.keyman.com/keyboard/gff_amharic/3.2.1/gff_amharic#toc-using-this-keyboard) \ No newline at end of file +(Removed in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/touch-keyboard-tutorial/index.md b/developer/docs/help/guides/develop/touch-keyboard-tutorial/index.md index acfe3efcec..0b6ffea441 100644 --- a/developer/docs/help/guides/develop/touch-keyboard-tutorial/index.md +++ b/developer/docs/help/guides/develop/touch-keyboard-tutorial/index.md @@ -1,60 +1,5 @@ --- -title: Creating a Simple Touch keyboard +redirect: .. --- -## Introduction and design - -If you have experience in designing Keyman keyboards for computers, the -interface for designing mobile keyboards looks very similar, but it -hides the reality of additional steps necessary for mobile keyboards. -This tutorial attempts to walk you through the process. - -The [Quick French tutorial](../tutorial/) shows how to create a simple -desktop keyboard for typing accented characters used in French and other -European languages. It is possible to create a touch screen format of -that keyboard, but it is probably unnecessary. The default keyboards for -both Android and iOS devices have a way to type these accented -characters. Press and hold on a vowel, and a popup menu will give you a -choice of accents to put on that letter. - -For this tutorial we will demonstrate something usable for the Fulfulde -language cluster spoken across many Sahelian countries of Africa. -Fulfulde is usually written using the Latin alphabet, but there are a -few characters added to the usual list of alphabetical characters. So -this is a useful example for any language wanting to add a few -characters to the standard Latin keyboard. Here are the characters we -are going to add, together with their Unicode values. - -| | | | | | | | | | -|-----|----------|-----|----------|-----|-----|----------|-----|----------| -| `ɓ` | `U+0253` | `Ɓ` | `U+0181` | | `ɗ` | `U+0257` | `Ɗ` | `U+018A` | -| `ŋ` | `U+014B` | `Ŋ` | `U+014A` | | `ƴ` | `U+01B4` | `Ƴ` | `U+01B3` | - -Here we will likely want to proceed differently than with the desktop -keyboard. The usual approach for a desktop keyboard is to create a -deadkey. The keyboards I have used for Fulfulde (going back to decades -ago) used the / key as the deadkey. -/b gave ɓ, -/d gave ɗ, and so on. - -It would be possible to use that desktop keyboard logic on touch -screens. But your mobile device users will find these rules annoying. - -Instead of two keys they would probably have to press four, since the -standard alphabetical keyboard on most touch devices does not have the -slash key. So they would have to press the key to switch to the numeric -keyboard, then press slash, then press the key to switch back to the -alphabetical keyboard, and then the letter. What touch screen users would -appreciate is something that uses the great feature of touch screens, -the long press or press and hold on a letter, to see analogous letters. - -So we’ll set up a touch screen keyboard that lets you -* press and hold ‘d’ to see the two hooked d characters -* press and hold ‘b’ to see the hooked b characters, and so on. - -[Next: Making, testing and distributing the touch -keyboard](making-touch-keyboard) - -## See also - -* Tips for using [gestures](gestures) in Keyman Developer +(Removed in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/touch-keyboard-tutorial/making-touch-keyboard.md b/developer/docs/help/guides/develop/touch-keyboard-tutorial/making-touch-keyboard.md index 5039acb262..0b6ffea441 100644 --- a/developer/docs/help/guides/develop/touch-keyboard-tutorial/making-touch-keyboard.md +++ b/developer/docs/help/guides/develop/touch-keyboard-tutorial/making-touch-keyboard.md @@ -1,361 +1,5 @@ --- -title: Making a touchscreen keyboard +redirect: .. --- -## Setting up your Keyman project - -This is a useful convention for keeping track of your files: - -1. Create a folder on your hard drive for all your Keyman developer - files -2. In that folder, create a folder for this project, named after the - language. Use all lowercase letters for compatibility with other - platforms. -3. Now create a project in Keyman Developer with the same name as the - new folder, and save it inside the new folder - -Now you will be able to use this project to organize and create any -files for desktop, mobile, web or other. It also facilitates uploading -the files to the Keyman website later on. - -## Add touch to an existing keyboard or create a new keyboard? - -You can add a mobile touchscreen keyboard to an existing desktop -keyboard, or you can create a new touchscreen keyboard from scratch. You -should be aware that there will be cross-over between mobile and desktop -keyboards. (In Keyman terms, "desktop" includes laptop computers or any -device with a physical keyboard). Your mobile device can have an -external keyboard, which will use the desktop Keyman keyboard. So the -Keyman strategy is to always bundle touch keyboards with desktop -keyboards to make them work on multiple platforms. - -If creating from scratch, you click the New icon in the Keyman Developer -toolbar (or select File > New from the menu), and specify the file -name for your keyboard. We recommend a name using only lowercase -letters, numbers and underscore. I’ll choose “mobile_fulfulde.kmn” . - -![choose new file -type](../../../images/simpleTouchKeyboard_1.png) - -## Adding the required metadata - -After creating the file, Keyman Developer will ask you to name the -keyboard. This name can include spaces and upper case letters if -desired. I’ll name this one “Fulfulde for Mobile”. - -![keyboard -metadata](../../../images/simpleTouchKeyboard_2.png) - -The first thing you need to do is to tell Keyman Developer this keyboard -will include some kind of mobile device.  You do this in the Targets -list just below the keyboard name. I’ll select “mobile ” in the list, -(towards the end). You see in the picture above that Keyman Developer -checked the “windows” box by default, I can uncheck that or leave it -checked if I am going to add a Windows keyboard to this set. - -![mobile target](../../../images/simpleTouchKeyboard_3.png ) - -This will include all mobile devices, both Android and iOS, both phones -and tablets. It is possible if needed to select Android only or iOS only -if needed, and to develop a different keyboard layout for tablets than -for phones, but for this example, with only a few characters needed to -be added to the default keyboards, there is no need for that kind of -complexity. - -(If you are adding a mobile layout to an existing keyboard file, you -would open that file in Keyman Developer, go to the Targets box and -check “mobile” or whatever mobile targets you wanted to specify, then -follow along from here). - -## Adding the touch optimized feature - -The next step is to add the touch-optimised feature to our keyboard -setup. If you scroll to the bottom of the details tab, there is the list -of features to add. I’ll click the Add button and choose “touch -optimised keyboard.” - -![touch-optimised](../../../images/simpleTouchKeyboard_4.png) - -Keyman developer asks me to choose one of three templates for the mobile -layout. - -![three templates](../../../images/simpleTouchKeyboard_5.png) - -The “template-latin” layout includes many accented characters, like the -default keyboards for Android and iOS do. The “template-basic” layout -has no extra characters, and the template-traditional has a few extra -characters (mostly punctuation symbols if you long-press period or full -stop). For this example, I’ll choose “template-basic” because accented -characters are not needed for Fulfulde. But if I knew that many eventual -users might want to be able to type French or other European languages -as well as Fulfulde, and wouldn’t like to have to switch the keyboard to -do so, I could choose “template-latin”. - -## Defining one or several touch layouts - -I select the template and click OK. Keyman Developer now adds a new tab -in the left column, the Touch Layout tab. - -![touch layout](../../../images/simpleTouchKeyboard_6.png) - -That is where we need to go now to add characters to our touch layout. -But before doing that, there is one important thing to take note of in -the touch layout. By default, Keyman Developer has created a layout for -phones and another layout for tablets. They all start out the same, but -as I add characters, I will have to make sure I add all the characters -to both layouts, or I’ll discover that my keyboard does not work for all -device sizes. - -In the image, you see in the Platform box that Keyman Developer is currently showing the -tablet layout. This box is where I’d choose which layout I’d design in. - -But I’m going to make this keyboard simple, and just have one layout for -both tablets and phones. So in the platform box, I am going to click -the “minus” button, to delete the tablet layout. When there is only one -mobile layout, Keyman Developer will compile that layout for all mobile -devices. (I could also have chosen to delete the phone layout and done -my layout design in the tablet layout). - -![platform list](../../../images/simpleTouchKeyboard_7.png) - -## Adding longpress characters - -Now I can start adding characters. I’ll click on the “y” key in the -layout, then I’ll look at the “longpress keys” area at the lower -left. - -![add longpress](../../../images/simpleTouchKeyboard_8.png) - -I click that, and Keyman Developer adds a new key below the keyboard -layout. - -![longpress added](../../../images/simpleTouchKeyboard_9.png) - -I'm going to use this key for the y with hook. I click inside it to make it active, then I’ll go look for my y -with hook character in the character map to the right. If I type “y -hook” in the search box, Keyman Developer shows the character I’m -looking for. - -![adding keycap](../../../images/simpleTouchKeyboard_10.png) - -If I double click on the lower case y with hook, that copies the character -to the keycap box of my new key. (I could also click and drag the character from the character map to the key). - -![keycap added](../../../images/simpleTouchKeyboard_11.png) - -## New key info - -There are several important pieces of information that got copied over. If we -look at the properties of the new key to the right, we see that this new key has -the “text” ƴ (what appears on the keycap), the “Unicode value” U+01B4 and the -“ID” U_01B4. All of these were copied from the character map. - -NOTE: If you copy one character from the character map to a new key, then -realize you copied the wrong character, dragging a second character may not -replace all the needed information into the key. If a key has a character in it -already, it works better to hold Ctrl as you drag the new character -into it. - -I could add the other three characters; hook b, hook d, and eng, as longpress -characters as well. I could select the regular letter I want to longpress, -click plus in the longpress keys area and copy the needed character. Here for -example is the b with hook: - -![keycap added](../../../images/simpleTouchKeyboard_12.png) - -After I have added my four lowercase characters as longpress keys, the keyboard -looks like this. Even when I don't have that letter selected, I can see which -keys have longpress keys by the dot beside the letter. - -![keycap added](../../../images/simpleTouchKeyboard_12-2.png) - -[See the Keyman Language guide on virtual keys](../../../../language/guide/virtual-keys#toc-virtual-keys-and-touch-layouts) - -## Adding uppercase characters - -I could do two different things for the upper case letters. I could add them as -longpress keys beside their lowercase equivalents, by pressing the plus key -again to add a second longpress character to each letter. - -This would mean users would not have to press Shift to be able to type the upper -case hook y. But since a user needs to press Shift for all the regular Latin -upper case letters, it might make more sense to put the uppercase letters into -the Shift layer. - -I can change to the shift layer by finding the layer box at lower left, and -choosing `shift` instead of `default`. - -![changing to shift layer](../../../images/simpleTouchKeyboard_13.png) - -Now I see the upper case letters on the keyboard, and I can add longpress -characters to these in the same way I did on the default layer. I click the -letter, then click `+` to add a key, then copy the character info from the -character map. Adding my upper case y hook to Y would look like this: - -![new key added to row](../../../images/simpleTouchKeyboard_14.png) - -(If I had clicked on the green triangle to the left of my first key, the -new key would be added to the left of that key). - -For this new key, I go through the same steps. I click in the empty box -on the new key, then double click the upper case y with hook in the -character map to put that in the keycap. I also change the code of this -new key to “U_01B3” - -![keycap and code added to new -key](../../../images/simpleTouchKeyboard_15.png) - -## Another option for upper case characters - -I might also add the upper case character to a longpress character on -the upper-case Y key, because some users will press the Shift key then -look for the letter to type. To do this, I change the layer at the top -of the tablet layout to "shift" from "default". - -![changing -layer](../../../images/simpleTouchKeyboard_15b.png) - -Now I click the Y key, and add a longpress character, then add the upper -case y with hook to the keycap and add the keycode as shown before. - -![key added to longpress -Y](../../../images/simpleTouchKeyboard_16b.png) - -You can design your keyboard either way, with the upper case characters -in the same longpress row as the lower case, or in a longpress row off -of the shift layer. The rest of this tutorial shows the upper case -characters in the same row as the lower case, but I don't mean to -present this as the best way. If you do put upper case characters in the -shift layer, you'll have to remember to change the layer back to -"default" when you want to add a lower case letter, then back to "shift" -when adding an upper case letter. You could put the upper case -characters in both places, if you think that best. - -Now I’ll add the two d hook characters as a longpress popup for the d -key. I click the d key in the layout, click “Add longpress popup”, add -the lower case hook d to the keycap and change the code to “U_0257”; -then click the plus sign to add a second key, add the upper case hook D -to the keycap and change its code to “U_018A”. The end result should -look like this: - -![longpress row on -d](../../../images/simpleTouchKeyboard_16.png) - -I’ll do the similar step to add two characters as a longpress popup for -“b” - -![longpress row on -b](../../../images/simpleTouchKeyboard_17.png) - -And two characters as a longpress popup for “n”. (Tip, to search for ŋ -in the character map, type “eng”). - -![longpress row on -n](../../../images/simpleTouchKeyboard_18.png) - -When no keys are selected in the keyboard layout, I can still see which -ones I have set up longpress popups for, because Keyman Developer shows -a faint gray line at the top right corner of the key. So you should have -a faint diagonal line on your y, d, b and n keys. - -![lines on longpress -keys](../../../images/simpleTouchKeyboard_19.png) - -## Replacing the Unicode and Code automatically - -1. Hold the Ctrl key while dragging and - dropping a character from the Character Map to the touch layout - editor, and it will replace the Code as well as the character. -2. Hold the Shift key while dropping, and it - will only add the character to the key. -3. Finally, hold - Ctrl+Shift, this - will add the character to the key AND update the Code to match the - full set of characters represented on the key. - -## Compiling your keyboard - -Now click Save to save your work, and compile the keyboard. (Keyboard -> Compile Keyboard, or press F7). Hopefully you’ll see it compiled -with no error messages: - -![successful -compile](../../../images/simpleTouchKeyboard_20.png) - -If you see a warning like: - -``` -Warning: line 0  warning 2092: Key " T_new_579" on layer "default", platform "phone", is a custom key but has no corresponding rule in the source. -``` - -This shows you forgot to enter the correct keycode for a new key you -added. Double check your longpress popup keys for one with a “T_new_NNN” -code, and add in the desired “U_NNNN” code. - -You might also see a message like - -``` -Error: line 0  error 405A: Key " U+0181" on "phone", layer "default" has an invalid identifier. -``` - -This shows you attempted to change the keycode but mistyped the code. -I’ve gotten this more than once, because I am used to typing `U+0181`to -refer to a Unicode value, but the correct syntax for a keycode in Keyman -Developer is `U_0181` - -# Testing your keyboard - -Other Keyman help pages describe how you can test your keyboard: - -- [On a virtual device in the Chrome web browser on your - computer](../../test/keyboard-touch-mobile-emulator) -- [On your own device accessing the keyboard over the - network](../../test/keyboard-touch-and-desktop) - -If your device cannot connect to your computer on the local network (for -instance if your computer is on a wired office network and your device -is on the wireless office network), the above technique for sharing may -not work. You can put your keyboard in a package and share it over the -Internet with your device, as described below. - -# Packaging and distributing your keyboard - -Another Keyman help file describes [how to build a package -file.](../../distribute/tutorial) - -## BCP 47 tags for Fulfulde - -[Step 3](../../distribute/tutorial/step-3) of the package building -tutorial describes adding the BCP 47 language tag to your package. When -I came to the step of adding a tag for Fulfulde, I had to do some -research. I naively thought "Fulfulde" was a clear enough label for the -language. It is not, since it is a language chain rather than one -language. The BCP 47 tag in many cases is the same as the [SIL -Ethnologue code](https://www.ethnologue.com), so that is where I had to -go to find the tags I needed. In the end I added four tags for four -Fulfulde languages: - -![BCP 47 tags](../../../images/simpleTouchKeyboard_36.png) - -I also added the script designator `Latn` for Latin script. This is -recommended for Windows, which sometimes fails to install the desktop -keyboard if there is not a script designator on the BCP 47 tag. We -recommend that you always put in the script tag unless there is a -specific reason not to. - -Some languages have only two letters in their BCP 47 tag. For instance, -the Hausa language has an Ethnologue code `hau` but the BCP 47 tag is -`ha`. Keyman Developer knows about this, and will change the tag to `ha` -if I put in the Ethnologue tag. - -# Next steps - -The two following articles on Amharic describe a more complex -touchscreen example where quite frequently two keys are pressed to get -one distinct character. (Amharic is a Abugida or syllabary script, where -one character can represent a consonant and following vowel). - -- [Creating a touch keyboard layout for Amharic - part - 1](../creating-a-touch-keyboard-layout-for-amharic) -- [Creating a touch keyboard layout for Amharic - part - 2](../creating-a-touch-keyboard-layout-for-amharic-the-nitty-gritty) \ No newline at end of file +(Removed in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/tutorial/index.md b/developer/docs/help/guides/develop/tutorial/index.md index 3642ddc1ed..e27c01cf2f 100644 --- a/developer/docs/help/guides/develop/tutorial/index.md +++ b/developer/docs/help/guides/develop/tutorial/index.md @@ -1,56 +1,3 @@ --- -title: Keyboard Tutorial +redirect: .. --- - -[Step 1: Planning the Keyboard](step-1) - -[Step 2: Writing the Header](step-2) - -[Step 3: The Keyboard Header](step-3) - -[Step 4: The Keyboard Body](step-4) - -[Step 5: Rules with Context](step-5) - -[Step 6: Stores, 'any', and 'index'](step-6) - -[Step 7: Testing the Keyboard](step-7) - -[Step 8: Deadkeys](step-8) - -[Step 9: The Finished Keyboard](step-9) - -## Overview - -Welcome! In this tutorial, you will learn the basics of Keyman keyboards -and create a simple French keyboard which can be used with any physical -keyboard layout. - -The keyboard will use a basic English layout, and add some deadkeys to -define vowel diacritics and a few other characters. - -While this tutorial is based on a physical keyboard such as used on a -desktop or laptop computer, the principles of the keyboard language that -you will learn are applicable to developing touch layouts as well. - -This keyboard will use Unicode. Unicode is a character encoding standard -that supports most of the world's scripts, and includes support for -user-defined scripts. Unicode is the accepted standard for text encoding -in modern applications and operating systems. - -In Keyman Developer keyboard source files, Unicode characters are -specified with `U+xxxx`, where `xxxx` is a four-digit hexadecimal -number. - -At the bottom of each page in the tutorial, will be a link to both the -previous page and the next page. You can use these links to work your -way through the tutorial. You may also find links to reference -information, which you can select to learn more about a particular -aspect of creating Keyman keyboards. - -## Let's begin - -Let's get started! Move on to the next topic to begin the first step, -planning the keyboard. - -- [Continue with Step 1: Planning the Keyboard](step-1) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/tutorial/step-1.md b/developer/docs/help/guides/develop/tutorial/step-1.md index 96db7592ee..0b6ffea441 100644 --- a/developer/docs/help/guides/develop/tutorial/step-1.md +++ b/developer/docs/help/guides/develop/tutorial/step-1.md @@ -1,71 +1,5 @@ --- -title: Step 1: Planning the Keyboard +redirect: .. --- -## Choosing the characters - -First of all, we need to decide which characters we want the keyboard to -produce. Next, we must find out the codes used to represent them, using -a program such as Character Map, or with the Character Map in Keyman -Developer (go to **View**, **Character Map**). - -French uses the same 26 letters as English, with some additions. As our -keyboard is based on English, we only need to work with these additional -letters. Note that for completeness, we will design our keyboard to -produce a few other accented vowels that are not used in French. Also, -we want our keyboard to include the angled quotes `«` and `»`. - -These characters, with both uppercase and lowercase forms, are listed in -the table below along with their Unicode codes. - -| | | | | | | | | | -|-----|----------|-----|----------|-----|-----|----------|-----|----------| -| `À` | `U+00C0` | `à` | `U+00E0` | | `Á` | `U+00C1` | `á` | `U+00E1` | -| `È` | `U+00C8` | `è` | `U+00E8` | | `É` | `U+00C9` | `é` | `U+00E9` | -| `Ì` | `U+00CC` | `ì` | `U+00EC` | | `Í` | `U+00CD` | `í` | `U+00ED` | -| `Ò` | `U+00D2` | `ò` | `U+00F2` | | `Ó` | `U+00D3` | `ó` | `U+00F3` | -| `Ù` | `U+00D9` | `ù` | `U+00F9` | | `Ú` | `U+00DA` | `ú` | `U+00FA` | -| `Â` | `U+00C2` | `â` | `U+00E2` | | `Ä` | `U+00C4` | `ä` | `U+00E4` | -| `Ê` | `U+00CA` | `ê` | `U+00EA` | | `Ë` | `U+00CB` | `ë` | `U+00EB` | -| `Î` | `U+00CE` | `î` | `U+00EE` | | `Ï` | `U+00CF` | `ï` | `U+00EF` | -| `Ô` | `U+00D4` | `ô` | `U+00F4` | | `Ö` | `U+00D6` | `ö` | `U+00F6` | -| `Û` | `U+00DB` | `û` | `U+00FB` | | `Ü` | `U+00DC` | `ü` | `U+00FC` | -| `Ý` | `U+00DD` | `ý` | `U+00FD` | | `Ç` | `U+00C7` | `ç` | `U+00E7` | -| `«` | `U+00AB` | `»` | `U+00BB` | | | | | | - -If you are not familiar with the hexadecimal (base-16) numbering system, -don't worry: you can use the Character Map in Keyman Developer to find -the character you want, and then drag-and-drop or copy-and-paste its -character code into your keyboard. - -Note that you must be careful to use the right character: The Unicode -standard has many characters with the same shape as another, but a -different meaning; an example of this is the Greek capital letter Sigma -(`U+03A3` Σ) and the mathematical summation symbol (`U+2211`, ∑). An application -supporting Unicode would treat these two characters differently. If in -doubt whether a character is the right one, you can look up the -reference tables at [www.unicode.org](http://www.unicode.org/). - -## Designing the layout - -After choosing the characters we want our keyboard to use, we must -decide how we want the user to be able to enter them. For some -languages, you might replace each letter on the English keyboard with a -letter from the language. In this case, however, most of the letters are -accented vowels, we will use two keystrokes for each: one for the -accent, and one for the vowel. - -| Character | Keystrokes | -|-------------|-------------------------------| -| `À, à, ...` | back-quote (`), then the vowel key. | -| `Á, á, ...` | quote ('), then the vowel key. | -| `Â, â, ...` | caret (^), then the vowel key. | -| `Ä, ä, ...` | double-quote ("), then the vowel key. | -| `Ç, ç` | quote ('), then lower- or uppercase C. | -| `«, »` | two less-than (<<) or greater-than (>>) symbols. | - -Now that we have decided which character to use and how the user can -enter them, we can start to write the keyboard. - -- [Continue with Step 2: Writing the Header](step-2) -- [Back to the Introduction](index) +(Removed in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/tutorial/step-2.md b/developer/docs/help/guides/develop/tutorial/step-2.md index 5867973fb3..aed745dd57 100644 --- a/developer/docs/help/guides/develop/tutorial/step-2.md +++ b/developer/docs/help/guides/develop/tutorial/step-2.md @@ -1,53 +1,5 @@ --- -title: Step 2: Writing the Header +redirect: . --- -## Overview of a keyboard file - -A keyboard file is divided into two sections: the **header** and the -**rules** section. The header section defines the name of the keyboard, -its bitmap, and other general settings. The rules are used to define how -the keyboard responds to keystrokes from the user, and are divided into -groups. We will start by writing the header. - -## The keyboard header - -The keyboard header is the first part of a keyboard; it consists of -statements that help Keyman identify the keyboard and set default -options for it. Each statement in the header must be on a separate line. -While there is no technical requirement to put header statements at the -start of a keyboard source file, keeping them there helps you identify -them easily, and keeps them consistent with keyboard programs other -people might write. - -We will begin to write the keyboard. If Keyman Developer is not already -running, start it now. Create a new keyboard file, navigate to the -**Layout** tab, and click on the **Code** tab at the bottom of the -screen to switch to the Code view. - -Type or paste the following code into the keyboard file. This is the -header of our keyboard file. - -```keyman -c Simplified French Keyboard for Keyman 9.0 -c -c This keyboard program uses a simplified set of keys -c for typing French, especially for those who don't know the -c standard French keyboard. -c -c NOTE: This keyboard was created from the Keyman keyboard -c programming tutorial. - -store(&Version) "9.0" c This keyboard is for use with Keyman 9.0 -store(&Name) "Quick French" -store(&Bitmap) "qfrench.ico" -store(&MnemonicLayout) "1" c This keyboard uses a mnemonic layout. - -begin Unicode > use(Main) -``` - -An explanation of the various parts of the header follows on the next -page. - -- [Continue with Step 3: The Keyboard Header](step-3) -- [Back to Step 1: Planning the Keyboard](step-1) \ No newline at end of file +(Removed in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/tutorial/step-3.md b/developer/docs/help/guides/develop/tutorial/step-3.md index 81777aec6a..aed745dd57 100644 --- a/developer/docs/help/guides/develop/tutorial/step-3.md +++ b/developer/docs/help/guides/develop/tutorial/step-3.md @@ -1,99 +1,5 @@ --- -title: Step 3: The Keyboard Header +redirect: . --- -## Comments - -```keyman -c Simplified French Keyboard for Keyman 9.0 -``` - -Most of the header in this example is made up of -[comments](/developer/language/guide/comments). A comment is used -to make notes about the keyboard, or to provide information on the -workings of the keyboard. The comments are readable by anyone looking at -the source code of the keyboard. - -A comment always starts with a lowercase `c`, followed by one or more -spaces, and continues to the end of the line. Keyman Developer will -ignore comments when compiling a keyboard. - -Comments can take up a whole line, or can start in the middle of the -line. The latter is useful for making short notes about individual -lines. As you can see we have used both kinds of comments in the header. - -## The `&Version` store - -```keyman -store(&Version) "9.0" c This keyboard is for use with Keyman 9.0 -``` - -The [`&Version` store](/developer/language/reference/version) -identifies the Keyman version for which this keyboard was written; this -keyboard is for use with Keyman 9.0. The `&Version` store is an optional -part of the keyboard header, but if present, it should be the first -store in the file. - -## The `&Name` store - -```keyman -store(&Name) "Quick French" -``` - -The [`&Name` store](/developer/language/reference/name) specifies -a descriptive name for the keyboard, which can be up to eighty -characters long. The name we have given to this keyboard is -`"Quick French"`. The `&Name` store is not required but is highly -recommended! - -## The `&Bitmap` store - -```keyman -store(&Bitmap) "qfrench.ico" -``` - -The optional [`&Bitmap` store](/developer/language/reference/bitmap) -tells Keyman which image to use for the keyboard's icon. The picture -should be in the standard Windows .ico format, and should contain at -least a single 16x16 pixel image. It can also contain higher resolution -images for high resolution "High DPI" displays. If you use a modern icon -editor, the icon can use alpha transparency. -For this keyboard we will be using the following bitmap: -![](../../../images/tutorial_keyboard_qfrench.gif); it is -found in the Keyman Developer folder, under -`Samples\Examples\qfrench.ico` - you should copy it into the same folder -in which you will save your keyboard. - -## The `&MnemonicLayout` store - -```keyman -store(&MnemonicLayout) "1" -``` - -The [`&MnemonicLayout` store](/developer/language/reference/mnemoniclayout) tells Keyman that -the layout is meant to conform to the user's keyboard layout; for -example, if the user presses the quote key ' on -their keyboard (whether they are using a US English, UK English, French, -German, Swedish, or other keyboard) it should work in the same way. The -opposite of this is a positional layout (which is the default if this -store omitted), which is intended for keyboards for which there is not -necessarily a correspondence between what is printed on the physical -keyboard and what is output when that key is pressed. - -## The `begin` statement - -```keyman -begin Unicode > use(Main) -``` - -The [`begin` statement](/developer/language/reference/begin) tells -Keyman which group of rules to process first when it receives a -keystroke. The use of multiple groups is an advanced feature, and -unnecessary for this tutorial, so we will use a single group, called -`Main`. The `begin` statement is required in every keyboard, and marks the -start of the keyboard body. The `begin` statement also tells Keyman -which encoding to use for the keyboard. Nearly all keyboards will use -`Unicode`, today. - -- [Continue with Step 4: The Keyboard Body](step-4) -- [Back to Step 2: Writing the Header](step-2) \ No newline at end of file +(Removed in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/tutorial/step-4.md b/developer/docs/help/guides/develop/tutorial/step-4.md index e8a861ae1c..aed745dd57 100644 --- a/developer/docs/help/guides/develop/tutorial/step-4.md +++ b/developer/docs/help/guides/develop/tutorial/step-4.md @@ -1,102 +1,5 @@ --- -title: Step 4: The Keyboard Body +redirect: . --- -The body of the keyboard is the most important part: it determines the -behaviour of the keyboard. The body consists of groups, which in turn -contain one or more rules which define the responses of the keyboard to -certain keystrokes. - -## Groups - -There are two types of groups: -* groups that process the keys pressed and the context. -* groups that process only the context. - -For simple keyboards, the latter type of group will not be required. A group begins -with a [`group` statement](/developer/language/reference/group), and -ends either at the start of another group, or at the end of the keyboard -file. - -We will only use one group in the Quick French keyboard, called `Main`. -We mark the start of it with the `group` statement below. Add this line -to the keyboard if it's not already there. - -```keyman -group(Main) using keys -``` - -The `using keys` clause tells Keyman that this group will process -keystrokes. - -## Basic Rules - -A rule tells Keyman the output to produce for a certain input. A rule -consists of three parts: the **context**, the **key**, and the -**output**. - -* The **context** specifies the conditions under which a rule will act. If -what is shown in the document to the left of the cursor matches the -context of a rule, the rule will be processed. -* The **key** specifies which keystroke the rule will act upon. -* The **output** determines the characters that are produced by a rule. -The output replaces the matched context in the document. - -## Simple rules - -The simplest rules in Keyman consist of just a key and output, as below. -(The examples in this section are just for illustration, and do not form -part of the Quick French keyboard). - -```keyman -+ "a" > "ä" -``` - -In this rule, the key is a, and the output is `"ä"`. A simple rule -begins with a plus sign, followed by the key, a greater-than symbol -(suggesting "becomes"), and finally the output. As you might guess, this -rule will change a lowercase a key typed by the -user into **ä**. - -The key and output can be written as a character in single or double -quotes (as above), or as its Unicode character code, or using a named -constant. The rule above could have also been written any of the -following ways, among others: - -```keyman -+ 'a' > 'ä' - -+ U+0061 > U+00E4 - -store(ADIERESIS) 'ä' -+ 'a' > $ADIERESIS -``` - -You can also write the key in one form and the context in another. - -## Rules with longer output - -The output of a rule is not limited to a single character. You could, -for example, write a rule such as the following: - -```keyman -+ "f" > "ph" -``` - -This would change any f keys typed into **ph**. -If the output of a rule consists of more than one character, you can -write the characters in different ways if necessary, with a space -separating each part. You can specify multiple characters in quotes, but -if you use the Unicode codes to write the characters, you must separate -each with a space: - -```keyman -+ "f" > U+0070 U+0068 - -+ "f" > U+0070 "h" -``` - -These rules are functionally identical to the one [further above](#toc-simple-rules). - -- [Continue with Step 5: Rules with Context](step-5) -- [Back to Step 3: The Keyboard Header](step-3) \ No newline at end of file +(Removed in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/tutorial/step-5.md b/developer/docs/help/guides/develop/tutorial/step-5.md index 88a76bce34..aed745dd57 100644 --- a/developer/docs/help/guides/develop/tutorial/step-5.md +++ b/developer/docs/help/guides/develop/tutorial/step-5.md @@ -1,76 +1,5 @@ --- -title: Step 5: Rules with Context +redirect: . --- -## Rules with Context - -Very often we want a keyboard to produce different output based on more -than just the last keystroke. For example, in the Quick French keyboard, -we want the key e to produce one of è, é, -ë, ê, or just e, depending on what was typed immediately before -it. To do this we must make our rules look at the context. - -The context is the output from previous rules; that is, the characters -that are displayed on the screen. We can make a rule work with only -certain context by putting this before the plus sign in the rule: - -```keyman -"^" + "e" > "ê" -``` - -With this rule, whenever an e is typed, if it -was preceded by a caret (^), the output will be ê. It is important -to remember that the context consists of **output -from previous rules**, not the previous keystrokes. To emphasize -this point, consider the four rules below: - -```keyman -+ "a" > "b" -+ "b" > "c" -"b" + "c" > "d" -"c" + "d" > "e" -``` - -With these rules, typing b c would produce the -output `cc`, and not `d`, as you might initially expect. This is because -the key b is converted by the second rule into -the output `c`, while the third rule expects a context of b, and not -c; we would have to type a c to get `d`. - -However, if a key has no matching rule, the output will be the same as -the key: so the output `e` will be produced for either of the inputs c d (because c by itself has no rule), and b d. - -## Continuing the Quick French keyboard - -Now we know how to create context-dependent rules, we can continue -making the Quick French keyboard. Let's start with the rules for -acute-accented characters, using the ANSI codes from the table we -prepared earlier: - -```keyman -c lowercase characters with acute accent -"'" + "a" > U+00E1 -"'" + "e" > U+00E9 -"'" + "i" > U+00ED -"'" + "o" > U+00F3 -"'" + "u" > U+00FA -"'" + "y" > U+00FD - -c uppercase characters with acute accent -"'" + "A" > U+00C1 -"'" + "E" > U+00C9 -"'" + "I" > U+00CD -"'" + "O" > U+00D3 -"'" + "U" > U+00DA -"'" + "Y" > U+00DD -``` - -We can also create similar rules for the other thirty-odd accented -characters. - -As you can see, even for a simple keyboard like this we quickly end up -with a large number of rules, which makes for clumsiness. We can make -things simpler using stores, and the `any()` and `index()` statements. - -- [Continue with Step 6: Stores, `any()`, and `index()`](step-6) -- [Back to Step 4: The Keyboard Body](step-4) \ No newline at end of file +(Removed in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/tutorial/step-6.md b/developer/docs/help/guides/develop/tutorial/step-6.md index 95ade8767c..aed745dd57 100644 --- a/developer/docs/help/guides/develop/tutorial/step-6.md +++ b/developer/docs/help/guides/develop/tutorial/step-6.md @@ -1,116 +1,5 @@ --- -title: Step 6: Stores, any(), and index() +redirect: . --- -When we have many similar rules, as in the last example on the previous -page, we can group them together into one rule by using stores. A store -is a set of characters that are grouped under a single name. Stores are -used in rules with the [`any()`](/developer/language/reference/any) and -[`index()`](/developer/language/reference/index) statements. We create a -store with a [`store()` statement](/developer/language/reference/store): - -```keyman -store(vowels) "aeiou" -``` - -This creates a store called `vowels`, which contains the five lowercase -vowels. -> #### Note: -We could also have written the content of the store -using ANSI or Unicode character codes, in the same way as the output. - -The `any()` statement is used to match a character from a specific -store. For example, the following rule will replace any vowel with a -period, when used with the store above: - -```keyman -+ any(vowels) > "." -``` - -The `any()` statement can be used in the context or in the key part of a -rule. It cannot be used in the output. - -The second statement that is used with stores is the `index()` -statement. It is usually used in the output of a rule, and will output -the character from a particular store at the same position as the -character matched by a specified `any()` statement. This is best shown -with an example; this rule will convert all input to uppercase: - -```keyman -store(lowercase) "abcdefghijklmnopqrstuvwxyz" -store(uppercase) "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - -+ any(lowercase) > index(uppercase,1) -``` - -When a letter, such as j is typed, the `any()` -statement finds its position in the `lowercase` store; the `index()` -statement then gets this index from the `any()` statement, and outputs -the character at the same position in the `uppercase` store, in this -case `J`. - -The `index()` statement has two parts: the store from which it takes the -output character, and the offset of the `any()` statement that it gets -the character position from. This offset is found by counting the -characters and statements in the context and key parts of the rule up to -the `any()` statement. Again, a few examples may help to illustrate -this: - -```keyman -"a" + any(somestore) > index(otherstore,2) c The 'any' statement - c is character #2 -"ab" any(somestore) + "c" > index(otherstore,3) c The 'any' statement - c is character #3 - -c Here the 'index' statement references the second 'any' statement used, -c which is character #4 -U+0041 any(somestore) "B" + any(otherstore) > index(thirdstore,4) - -c You can have multiple 'index' statements in the output, which can -c reference the same or different 'any's -any(store1) + any(store2) > index(store1,2) index(store2,1) index(store3,2) -``` - -## Using stores in the Quick French keyboard - -We can now reduce the number of rules needed for the Quick French -keyboard by using stores. We will make five stores: one for the -unaccented vowels, and one each for vowels with acute accents, grave -accents, circumflexes, and diereses. For clarity, the `group()` -statement is repeated below: - -```keyman -group(Main) using keys - -store( plainvowels ) 'a' 'e' 'i' 'o' 'u' 'A' 'E' 'I' 'O' 'U' -store( acutevowels ) U+00E1 U+00E9 U+00ED U+00F3 U+00FA U+00C1 U+00C9 U+00CD U+00D3 U+00DA -store( gravevowels ) U+00E0 U+00E8 U+00EC U+00F2 U+00F9 U+00C0 U+00C8 U+00CC U+00D2 U+00D9 -store( circumvowels ) U+00E2 U+00EA U+00EE U+00F4 U+00FB U+00C2 U+00CA U+00CE U+00D4 U+00DB -store( dresisvowels ) U+00E4 U+00EB U+00EF U+00F6 U+00FC U+00C4 U+00CB U+00CF U+00D6 U+00DC - -"'" + any( plainvowels ) > index( acutevowels, 2 ) -"`" + any( plainvowels ) > index( gravevowels, 2 ) -"^" + any( plainvowels ) > index( circumvowels, 2 ) -'"' + any( plainvowels ) > index( dresisvowels, 2 ) -``` - -This is far clearer than the long list of rules that we used earlier. -Obviously we should add one or two more ordinary rules to produce uppercase -and lower-case ç, ý, and also the angled quotes « and ». Then we -will have almost finished the keyboard: - -```keyman -"'" + "y" > U+00FD c Acute-accented Y -"'" + "Y" > U+00DD - -"'" + "c" > U+00E7 c C-cedilla -"'" + "C" > U+00C7 - -"<" + "<" > U+00AB c Angled quotes -">" + ">" > U+00BB -``` - -All we need to do now is to test the keyboard. - -- [Continue with Step 7: Testing the Keyboard](step-7) -- [Back to Step 5: Rules with Context](step-5) \ No newline at end of file +(Removed in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/tutorial/step-7.md b/developer/docs/help/guides/develop/tutorial/step-7.md index 2432bb76f4..aed745dd57 100644 --- a/developer/docs/help/guides/develop/tutorial/step-7.md +++ b/developer/docs/help/guides/develop/tutorial/step-7.md @@ -1,52 +1,5 @@ --- -title: Step 7: Testing the Keyboard +redirect: . --- -# Compiling the Keyboard - -Before we can test the keyboard, we must compile it. Choose -Keyboard, Compile -Keyboard or press F7 to compile the -keyboard. The Message window will display the results of the -compilation; if you have no typing errors, the keyboard should compile -successfully. - -If there are any mistakes, an error message will be displayed in the -Message window, which will tell you the line on which the error -occurred. - -## Compiling the Keyboard - -After compiling the keyboard successfully, we can start testing it. -Choose Debug, -Start Debugging or press -F5 to begin testing. The Keyboard debug window -will appear. - -Now we test that all the rules operate as expected. To test the rules, -we type the keystrokes that will give us the output; for example, we can -type a quote ' followed by one of -A, E, -I, O, -U, or Y to test the -uppercase acute-accented vowels. Similarly we can test the other -accents, and C-cedilla (`Ç`) and the angled quotes. If the rules are -correct, all this should work as we wanted. - -Testing the rules in isolation like this will show if the rules are -correct or not, but won't show other possible errors that might occur in -everyday usage of the keyboard. For example, look at what happens if you -type the following quote: - -> `'Alors Alice demande, "Où est mon chat ?"'` - -As you can see, it comes out incorrectly as: - -> `Álors Alice demande, Öù est mon chat ?"'` - -The problem occurs when we have a word in quotes that begins with a -vowel: the keyboard will convert it to an accented vowel. We will need -to come up with a solution to this problem. - -- [Continue with Step 8: Deadkeys](step-8) -- [Back to Step 6: Stores, `any()`, and `index()`](step-6) \ No newline at end of file +(Removed in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/tutorial/step-8.md b/developer/docs/help/guides/develop/tutorial/step-8.md index 52f532ce76..aed745dd57 100644 --- a/developer/docs/help/guides/develop/tutorial/step-8.md +++ b/developer/docs/help/guides/develop/tutorial/step-8.md @@ -1,78 +1,5 @@ --- -title: Step 8: Deadkeys +redirect: . --- -## Solving the Problem - -Probably the easiest solution to the problem which we encountered on the -last page is to design the keyboard so that the user types a quote key -twice when they want to produce a quote, but once when they want to use -it as an accent. However, we cannot simply use the rule: - -```keyman -"'" + "'" > "'" -``` - -This will certainly produce a single quote after it's typed twice; -however it will still produce the same error, because the following -keystroke will continue to swallow the quote character from the context. -We need to distinguish between the output of this rule, when the user -wants a quote, and that of a single quote press, when the user wants to -place an accent on a vowel. To implement this behaviour, we use -[deadkeys](/developer/language/reference/deadkey). - -## Deadkeys - -A deadkey is like a character that is used in the context or output but -never appears on the screen. We use deadkeys like this: - -```keyman -+ "'" > deadkey(quote) - -c Handle acute accents -deadkey(quote) + any( plainvowels ) > index( acutevowels, 2 ) - -c Handle a single quote -deadkey(quote) + "'" > "'" -``` - -Note that for the sake of convenience, a deadkey can also be written in -a short form: - -```keyman -dk(quote) c This is identical to deadkey(quote) -``` - -Type the three rules above in place of the existing rule for acute -accents in the keyboard so far. If you test the keyboard now, you will -find that the error no longer occurs. This is because accented vowels -are only produced after the deadkey, and no deadkey is output if the -user types a quote key twice. - -But we've introduced another difference to the keyboard now: the quote -is no longer displayed before you type the vowel. This is because we are -converting the quote to a deadkey. If we prefer, we can still -distinguish between rules in the above manner and display the quote, if -we just add a quote before the deadkey, like this: - -```keyman -+ "'" > "'" dk(quote) - -c Handle acute accents -"'" dk(quote) + any( plainvowels ) > index( acutevowels, 3 ) - -c Handle a single quote -"'" dk(quote) + "'" > "'" -``` - -However, we will not use this technique for the Quick French keyboard. - -Now we can make changes so that all the other accents use deadkeys as -well, for consistency, and add rules to output the accent character by -typing the key twice. - -The Quick French keyboard is now complete. The full source is on the -next page. - -- [Continue with Step 9: The Finished Keyboard](step-9) -- [Back to Step 7: Testing the Keyboard](step-7) \ No newline at end of file +(Removed in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/tutorial/step-9.md b/developer/docs/help/guides/develop/tutorial/step-9.md index 03e00a2787..aed745dd57 100644 --- a/developer/docs/help/guides/develop/tutorial/step-9.md +++ b/developer/docs/help/guides/develop/tutorial/step-9.md @@ -1,66 +1,5 @@ --- -title: Step 9: The Finished Keyboard +redirect: . --- -## The Quick French Keyboard - -Here is the completed keyboard: - -```keyman -c Simplified French Keyboard for Keyman 9.0 -c -c This keyboard program uses a simplified set of keys -c for typing French, especially for those who don't know the -c standard French keyboard. -c -c NOTE: This keyboard was created from the Keyman keyboard -c programming tutorial. - -store(&Version) "9.0" c This keyboard is for use with Keyman 9.0 -store(&Name) "Quick French" -store(&Bitmap) "qfrench.ico" -store(&MnemonicLayout) "1" c This keyboard uses a mnemonic layout. - -begin Unicode > use(Main) - -group( Main ) using keys - -c Store the upper and lowercase vowels with different accents -store( plainvowels ) 'a' 'e' 'i' 'o' 'u' 'A' 'E' 'I' 'O' 'U' -store( acutevowels ) U+00E1 U+00E9 U+00ED U+00F3 U+00FA U+00C1 U+00C9 U+00CD U+00D3 U+00DA -store( gravevowels ) U+00E0 U+00E8 U+00EC U+00F2 U+00F9 U+00C0 U+00C8 U+00CC U+00D2 U+00D9 -store( circumvowels ) U+00E2 U+00EA U+00EE U+00F4 U+00FB U+00C2 U+00CA U+00CE U+00D4 U+00DB -store( dresisvowels ) U+00E4 U+00EB U+00EF U+00F6 U+00FC U+00C4 U+00CB U+00CF U+00D6 U+00DC - -c Output deadkeys only for the accent keys pressed -+ "'" > dk(quote) c Quote for acute accent -+ "`" > dk(bkquote) c Backquote for grave accent -+ "^" > dk(caret) c Caret for circumflex -+ '"' > dk(dbquote) c Double-quote for dieresis - -c Rules for accented vowels -dk(quote) + any( plainvowels ) > index( acutevowels, 2 ) -dk(bkquote) + any( plainvowels ) > index( gravevowels, 2 ) -dk(caret) + any( plainvowels ) > index( circumvowels, 2 ) -dk(dbquote) + any( plainvowels ) > index( dresisvowels, 2 ) - -c Rules for other characters -dk(quote) + "y" > U+00FD c Acute-accented Y -dk(quote) + "Y" > U+00DD - -dk(quote) + "c" > U+00E7 c C-cedilla -dk(quote) + "C" > U+00C7 - -"<" + "<" > U+00AB c Angled quotes -">" + ">" > U+00BB - -c Rules for the accent character itself (type it twice) -dk(quote) + "'" > "'" c Quote -dk(bkquote) + "`" > "`" c Backquote -dk(caret) + "^" > "^" c Caret -dk(dbquote) + '"' > '"' c Double-quote - -c End of keyboard -``` - -- [Back to Step 8: Deadkeys](step-8) \ No newline at end of file +(Removed in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/distribute/__index.txt b/developer/docs/help/guides/distribute/__index.txt new file mode 100644 index 0000000000..807ccfd46b --- /dev/null +++ b/developer/docs/help/guides/distribute/__index.txt @@ -0,0 +1,4 @@ +-install-kmp-android.md +-install-kmp-ios.md +-packages.md +-tutorial \ No newline at end of file diff --git a/developer/docs/help/guides/distribute/index.md b/developer/docs/help/guides/distribute/index.md index 4ffe845c38..f6fff6c68d 100644 --- a/developer/docs/help/guides/distribute/index.md +++ b/developer/docs/help/guides/distribute/index.md @@ -1,10 +1,8 @@ --- -title: Distributing keyboards +title: Package Tutorial --- -- [Package development tutorial](tutorial) (Keyman for Windows, Keyman for macOS, Keyman for mobile apps) -- [Distribute keyboards to Keyman applications](packages) +In version 19, the Package Tutorial has been replaced by the Keyman +Developer Walkthrough, which covers all the topics in greater depth. -## See also - -- [Keyman Engine](/developer/engine/) \ No newline at end of file +* [The Keyman Developer Walkthrough →](../develop/walkthrough/08-preparing-keyboard-package) diff --git a/developer/docs/help/guides/distribute/install-kmp-android.md b/developer/docs/help/guides/distribute/install-kmp-android.md index bdba196c90..aed745dd57 100644 --- a/developer/docs/help/guides/distribute/install-kmp-android.md +++ b/developer/docs/help/guides/distribute/install-kmp-android.md @@ -1,78 +1,5 @@ --- -title: Installing Custom Keyboards to your Android Device +redirect: . --- -## Overview - -In [Keyman for Android 10.0](/products/android/10.0/), we added the ability to -easily download/share custom keyboards to your Android device. - -## Installing a custom keyboard - -To install a custom keyboard, you will need a link to download the -keyboard package. If you have already copied the kmp file onto the -Android device, skip to Step 2. - -If you want to build and dev your own keyboard, you will need some -technical skills for this, and can read our full step-by-step -instructional on how to do this [here](packages). - -Once you have a website or email with a link to the keyboard package, -follow these steps on your Android device to download and install the -keyboard package into the Keyman for Android application: - -## Step 1) Click the link to save your custom keyboard package file - -The link in this example is for Khmer Angkor keyboard. - -![](../../images/dist-url-screen-ap.png) - -## Step 2) Add Keyboard from Device - -Once the KMP file is on your device, you will need to browse to the KMP -file and select it. From the Keyman menu, select "Settings". From the -Keyman Settings menu, select "Add Keyboard from Device". - -![](../../images/settings-language-ap.png) - -The device will launch a file browser where you'll browse to the -directory of your KMP file. A common places to look is the "Downloads" -folder. - -![](../../images/dist-file-browser-ap.png) - -Selecting the KMP file should bring you to Step 3) - -## Step 3) Grant Keyman for Android access to storage (Android 6.0+ only) - -On Android 6.0 (Marshmallow) and higher, mobile apps need to request -permission to access storage. Keyman for Android needs access to read -storage for installing the KMP file. At the dialog, select "ALLOW". Once -authorized, Keyman for Android won't need to ask for storage permission -again, unless the user revokes or uninstalls the app. - -![](../../images/dist-storage-permission-ap.png) - -Older versions of Android grant Storage permissions at app installation -time, so those users can skip this step. - -## Step 4) Keyboard Package welcome screen - -Keyman for Android will parse the metadata in the package. If the -keyboard package includes a "welcome.htm" file, this will be displayed -at the confirmation to install the keyboard package - -![](../../images/dist-welcome-ap.png) - -If "welcome.htm" is not included, a generic page with the package ID and -package version will be shown. - -Click the left "Install" button to install the entire keyboard package - -## Step 5) The keyboard is successfully installed! - -All the keyboards in the package are installed as a group. In this -example, the package only has the "Khmer Angkor" keyboard, so it becomes -the active keyboard - -![](../../images/dist-install1-ap.png) \ No newline at end of file +(Removed in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/distribute/install-kmp-ios.md b/developer/docs/help/guides/distribute/install-kmp-ios.md index de4d3a64cb..aed745dd57 100644 --- a/developer/docs/help/guides/distribute/install-kmp-ios.md +++ b/developer/docs/help/guides/distribute/install-kmp-ios.md @@ -1,53 +1,5 @@ --- -title: Installing Custom Keyboards to your iPhone or iPad +redirect: . --- -## Overview - -In version 10 of Keyman for iPhone and iPad, we added the ability to easily download custom keyboards to your iOS device. - -## Installing a custom keyboard - -To install a custom keyboard, you will first need a link to the keyboard -package on a website or in your email. - -If you want to build and dev your own keyboard, you will need some -technical skills for this, and can read our full step-by-step -instructional on how to do this [here](packages). - -Once you have a website or email with a link to the keyboard package, -follow these steps on your iPhone or iPad to download and install the -keyboard package into the Keyman for iPhone and iPad application: - -## Step 1) Click the link to your custom keyboard package file - -The link in this example is for GFF Amharic 7 keyboard. - -![](../../images/dist-url-screen-i.png) - -Safari will display an option to open the KMP file with Keyman - -![](../../images/dist-kmp-open-i.png) - -## Step 2) Click Open in "Keyman" - -Keyman for iPhone and iPad will parse the metadata in the package. If -the keyboard package includes a "welcome.htm" file, this will be -displayed at the confirmation to install the keyboard package - -![](../../images/dist-welcome-i.png) - -If "welcome.htm" is not included, a generic page with the package ID and -package version will be shown. - -## Step 3) Click the top right "Install" button - -The keyboard from the keyboard package is successfully installed! - -![](../../images/dist-kmp-success-i.png) - -All the keyboards in the package are installed as a group. In this -example, the package only has the "GFF Amharic 7" keyboard, so it -becomes the active keyboard - -![](../../images/dist-install1-i.png) +(Removed in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/distribute/packages.md b/developer/docs/help/guides/distribute/packages.md index 5bc1e7de80..aed745dd57 100644 --- a/developer/docs/help/guides/distribute/packages.md +++ b/developer/docs/help/guides/distribute/packages.md @@ -1,131 +1,5 @@ --- -title: Distribute keyboards to Keyman Applications +redirect: . --- -## Overview - -Keyboard package files contain one or more keyboards, along with readme -files, fonts (if your keyboard requires a custom font), and any other -files you wish to include. You should create a package file to bundle -your keyboard with fonts and help into a simple, single file that is -easy for an end-user to install. - -Internally, as well as your own files, the package file will contain -metadata files "kmp.inf" and "kmp.json", which list the details Keyman -needs to install the package. The package file is a ZIP compatible -archive. - -> ### Tip -You can distribute keyboards and lexical models in package files, but -you can't include both in the same package file. - -#### Keyman for Windows - -Keyman for Windows can install package files, including installing fonts, -creating Start Menu shortcuts, and adding appropriate registry entries -for uninstallation. - -On Windows, the context menu for a package file has one additional -entry: "Install". - -#### Keyman for macOS - -Keyman for macOS can install package files with fonts and keyboards, and -shortcuts in the package will be available through the keyboard's entry -in Keyman Configuration. - -#### Keyman for Android and Keyman for iPhone and iPad - -Keyman mobile applications can install the same package files as Keyman -for Windows, as long as the package includes keyboards for touch layouts. - -## Package file contents - -A package can have a variety of different files contained within. The -following files and file types are recognized by the package installer: - -\*.kmx (Keyman for Windows, Linux, and macOS only) -: Keyboard files. Each of these will be installed. Keyman - Configuration will not allow installation or uninstallation of a - single keyboard from a package. They will always be treated as a - group for installation and uninstallation. - -\*.kvk (Keyman for Windows, Linux, and macOS only) -: On Screen Keyboard files, associated with each keyboard file. - -\*.js (mobile only) -: Touch layout Keyboard files. When Keyman mobile applications install - a keyboard package, all included keyboards will be installed as a - group. With Keyman Developer 10, the keyboard version information is - in kmp.json, and no longer within the JS file names. - -welcome.htm -: Introductory help for the keyboard, HTML format. This will normally - be displayed when the package is installed by the user, and is also - the entry point for help when accessed via Keyman's help system or - Keyman Configuration. - -readme.htm -: Displayed before a package is installed, together with brief - metadata about the package, to allow the user to determine if they - wish to continue installation of the package. - -kmp.inf (Legacy versions of Keyman) -: A Windows .ini format file that lists each of the files in the - package, together with metadata. - -kmp.json -: A JSON format file contains metadata for the keyboard package such - as package version, keyboard versions, and lists each of the files - in the package. For more explanation of the structure of the JSON - file, please read the - [metadata](../../reference/file-types/metadata) documentation. - -\*.ttf, \*.otf, \*.ttc -: Truetype font files that will be installed with the package, and - uninstalled when the package is removed. On mobile, these fonts will - be available only within the Keyman app and the on-screen-keyboard, - not in other apps. - -## Share the keyboard package file - -> ### Tip -Read [Step 2: Organizing the Keyboard Files](../../../keyboards/github/step-2) -to know which files to include or exclude in the keybord folder. - -Once the keyboard package .kmp file is created, you can share them via -external storage devices (USB drive, SD card, etc). You can also share -the package file via a cloud storage system (Google Drive, Dropbox or -similar service), then share the link to your device via text, note or -email. Alternatively, you can upload the .kmp file to a public facing -website. For this example, the keyboard package for Khmer Angkor is -being uploaded: - -1. khmer_angkor.kmp (the keyboard package .kmp file) - -## Putting the keyboard package on a website - -Once all the files have been uploaded, you will need to provide a link -to the keyboard package .kmp file for your device to download and -install. This can either be a link on a web page, or a link in an email. -In this tutorial, a very simple .html web page with a link to the -khmer_angkor.kmp file is created: - -``` markup - - - - - Custom Keyboard URL - - -``` - -The link must be in the format `http://` or `https://` - -Upload the web page to your public facing website. Once done, you can -install the keyboard package onto your mobile devices by following these -steps: - -- [Installing custom keyboards to your iPhone or iPad](install-kmp-ios) -- [Installing custom keyboards to your Android device](install-kmp-android) +(Removed in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/distribute/tutorial/index.md b/developer/docs/help/guides/distribute/tutorial/index.md index 89bc2eb2a9..0b6ffea441 100644 --- a/developer/docs/help/guides/distribute/tutorial/index.md +++ b/developer/docs/help/guides/distribute/tutorial/index.md @@ -1,36 +1,5 @@ --- -title: Package Tutorial +redirect: .. --- -[Step 1: What do we include?](step-1) - -[Step 2: Creating Additional Files for the Package](step-2) - -[Step 3: Creating a package and adding files](step-3) - -[Step 4: Filling in package details](step-4) - -[Step 5: Shortcuts](step-5) - -[Step 6: Compiling, testing and distributing a Package](step-6) - -## Overview - -Welcome! In this tutorial, you will learn how to create a -[package](../../../reference/file-types/kmp). A package is a collection -of files, compressed into a single file, just like a ZIP file. It is -designed to make installation of keyboards, fonts and related -documentation straightforward for the end user. When done, the package -can be installed into Keyman for Windows through a simple dialog. Keyman for -mobile apps can also download and install keyboards through the keyboard -package. - -We will be creating a Khmer Angkor package. You can make your own -package based on the Quick French keyboard from the [keyboard tutorial](../../develop/tutorial). - -### Let's begin - -Let's get started! Move on to the next topic to begin the first step, -choosing what to include in the package. - -[Step 1: What do we include?](step-1) +(Removed in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/distribute/tutorial/step-1.md b/developer/docs/help/guides/distribute/tutorial/step-1.md index a18fce49ac..0b6ffea441 100644 --- a/developer/docs/help/guides/distribute/tutorial/step-1.md +++ b/developer/docs/help/guides/distribute/tutorial/step-1.md @@ -1,35 +1,5 @@ --- -title: Step 1: What do we include? +redirect: .. --- -What is the purpose of a package? To make installation of a keyboard, -fonts, documentation, and on screen keyboard as straightforward as -possible for the end user. - -We need to keep this goal in mind as we work on all the aspects of a -package. - -A good package will: - -1. Collect the keyboard and font files together for simple installation -2. Include Start Menu items for documentation - -A great package will also: - -1. Include a 'readme' visible before install. -2. Include a 'welcome.htm' file which is displayed after install. -3. Include an On Screen Keyboard if relevant. -4. Include documentation on use of the keyboard. - -Packages uploaded to the Tavultesoft website will get basic icon ratings -reflecting their ease of install/use: - -- ![](../../../images/tutorial_package_includesfonts.gif) includes fonts -- ![](../../../images/tutorial_package_includesdocs.gif) includes documentation -- ![](../../../images/tutorial_package_includesosk.gif) includes on screen keyboards -- ![](../../../images/tutorial_package_includeswelcome.gif) includes welcome.htm - -In general, the more icons that a package earns, the easier that end -users will find it to start using. - -[Step 2: Creating Additional Files for the Package](step-2) \ No newline at end of file +(Removed in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/distribute/tutorial/step-2.md b/developer/docs/help/guides/distribute/tutorial/step-2.md index 7ed9aea576..0b6ffea441 100644 --- a/developer/docs/help/guides/distribute/tutorial/step-2.md +++ b/developer/docs/help/guides/distribute/tutorial/step-2.md @@ -1,127 +1,5 @@ --- -title: Step 2: Creating Additional Files for the Package +redirect: .. --- -You should create or select some additional files for a package. Below -are a list of the typical files that you would create for or include in -a package. - -readme.htm - -: A short description of the package, its use restrictions, and what - it includes. Try to keep the readme under 10 lines long. The readme - is displayed in the package install dialog and should be an html - file for optimal formatting. - - > ### Tip - As the package has not been installed at this stage, and you are using fonts that may not yet be available on the target device, you should use CSS @font-face declarations to ensure that the text is readable on all devices. - - Create the HTML file in any HTML editor. - - > ### Tip - If using Microsoft Word, choose HTML (clean) when saving to create a smaller file. - - Note, if your HTML editor puts images into a subfolder, you will need to edit the HTML source so that all files are in the same folder -- the package builder will not maintain subfolders. You can easily edit the HTML source in Keyman Developer. - - Also, if your welcome or readme files use embedded external images, stylesheets, javascript or other files, you will need to add these files to your package as well. - -welcome.htm - -: When including an introductory help file in your package, you must - name the file welcome.htm. This file will be detected during install - and displayed (in a window roughly two thirds of the user's screen - width) after the package install completes successfully. Make sure - that you design your HTML file so that it can be resized to fit the - user's screen - avoid extra wide tables or wide fixed width - elements. - - At this stage of the installation, fonts in the package have been installed, so you can include text that uses those fonts. - - Welcome.htm will also be accessible after installation from Keyman Configuration under the Package Options menu, and from the Keyboard Help item and On Screen Keyboard toolbar button. - - The intention of welcome.htm is to provide instructions on getting started with your keyboards. - - > ### Tip - Useful information to include in welcome.htm is: - - key sequences - especially for characters that may not be immediately obvious. - - names of fonts in the package. - - names of keyboards in the package. - - links to additional help on your website or more extensive documentation files in the package. - - a link to an official distribution site for your package (even - if it is the Keyman website) - so that users know where to find - the latest version of your package. - - You should avoid including instructions for the use of Keyman - itself - although a basic "click the Keyman icon and choose Quick - French" would be helpful. - - > ### Tip - If you want links to your website to open in the user's preferred - browser, preface the href link with `link:`, e.g. - `website` - The `link:` sceheme will open the referred file in the default - application - that is, a web browser for URLs and links, Notepad for - .txt files, Adobe Reader for PDFs. You can use `link:` to open any - of the files in the package, e.g. `link:docs.pdf` will open the file - docs.pdf in Adobe Reader or the default PDF reader on the system. - - To save you the effort of writing a welcome and readme file for the - Quick French example, we have placed some in the Samples/QFrench - folder. - - If you create documents in other formats, for example PDF or - printable documentation, you should link to that in the welcome.htm. - - > ### Tip - You can include multiple "welcome.htm" files for different languages - by appending a hyphen and the BCP 47 language code to the filename, - for example welcome-fr.htm for French. - -Fonts - -: A font is the single most important item to include with a keyboard - – if the characters of the language you are supporting are not in - fonts included with target operating systems. Installing fonts is - tedious, so make sure that your users don't have to locate and - install fonts themselves! - - .TTF, .OTF, and .TTC fonts will be installed by the package - installer, and uninstalled when the package is uninstalled. A list - of the fonts installed is displayed in the Install Package dialog. - -Keyboards - -: Add the .kmx compiled Keyman keyboards to the package. You can add - multiple keyboards to the package, but be judicious. - - > ### Tip - Don't forget to add the On Screen keyboard .KVK file associated with - your keyboard to the package. KVK files are not compiled into the - .KMX file -- although the .ICO/.BMP is. - - Add the .js compiled Keyman touch layout keyboards to the package. - -Documentation - -: The two preferred documentation formats are HTML and PDF. You should - avoid .DOC, .RTF, and other formats -- .DOC files in particular are - not recommended due to the possibility of macro viruses. - - Remember that HTML files can be displayed on any computer without - additional software. PDF files require Adobe Reader or a compatible - PDF viewer application. You may choose to include both and HTML - documentation - PDF documents often print better than HTML - documents, but HTML documentation is more accessible and translates - better to on-screen or web use. - - > ### Tip - If you use HTML, don't forget to also add all the included files - such as images and stylesheets! - -Splash Image -: The splash image is a 140x250 pixel image that is displayed when the - package is installed, at the left of the Package Install dialog. - Including a splash image makes your package look more professional - and polished, so a splash image is recommended! - -[Step 3: Creating a package and adding files](step-3) \ No newline at end of file +(Removed in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/distribute/tutorial/step-3.md b/developer/docs/help/guides/distribute/tutorial/step-3.md index 657f2cd02b..0b6ffea441 100644 --- a/developer/docs/help/guides/distribute/tutorial/step-3.md +++ b/developer/docs/help/guides/distribute/tutorial/step-3.md @@ -1,31 +1,5 @@ --- -title: Step 3: Creating a package and adding files +redirect: .. --- -We are finally ready to open up the Package Editor and create the new -package. - -- In the Project Window in Keyman Developer, click the **Packages** tab, and click **New Package...**. Enter the path and filename of the package you are creating. - -> ### Tip -This tutorial makes a package named `khmer_angkor.kps`, but you could call yours `qfrench.kps`. - -A package source file will have the extension .kps, and will be compiled in a file with extension .kmp. - -After you click OK, the Package Editor will open with the Files tab visible. - -![](../../../images/tutorial_distribute_keyboard_3_files.png) - -- In the Files tab, click **Add...** to add - all the files we discussed in the previous step to the package. You - can add multiple files at once, and from multiple folders. When the - package is compiled, all the files will be placed in the same folder - within the package. -- If your package includes .js touch layout keyboards, you can - associate fonts and languages in the Keyboards tab. A valid [BCP 47 language tag](../../../reference/bcp-47) must be set or the keyboard will not install on your mobile device. - -![](../../../images/tutorial_distribute_keyboard_3.png) - -You could stop here. This would be a completely valid package, but it would not be as good as it could be. So let's continue on to the next step, and fill in some descriptions of the package. - -[Step 4: Filling in package details](step-4) \ No newline at end of file +(Removed in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/distribute/tutorial/step-4.md b/developer/docs/help/guides/distribute/tutorial/step-4.md index fcebc042f6..0b6ffea441 100644 --- a/developer/docs/help/guides/distribute/tutorial/step-4.md +++ b/developer/docs/help/guides/distribute/tutorial/step-4.md @@ -1,63 +1,5 @@ --- -title: Step 4: Filling in package details +redirect: .. --- -Click on the Details tab in the Package Editor. You should fill in as -many details as you can on this page. - -![](../../../images/tutorial_distribute_keyboard_details.png) - -Package Name - -: The Package Name will be displayed in the package install dialog, - and within Keyman Configuration, wherever the package is - referred to. - -Readme File - -: Select the readme file from the list of files you added in the - previous step. Remember that it should be a HTML file for optimum - clarity. - -Version - -: A version number for the package is important - it helps the your - users know that they are using the most recent update of your - package. The version format you should use is `1.0`. When making a - major change to your package or keyboards in your package, increment - the first part and set the second part to, e.g. `2.0`; when making a - bug fix or a minor update, increment the second part, e.g. `1.1`. - -Version numbers should be in the form `major.minor[.subversion]`. - Subversion is optional but is helpful for small bug fix releases. - Each of the sections of the version should be an integer. Keyman - for Windows does integer comparisons on the version numbers, so, for - example, version `2.01` is regarded as older than version `2.2`. - Alphabetic or date formats should be avoided as the installer for - the keyboard cannot determine which version is older reliably. - -Copyright - -: Enter copyright details for your package and keyboards. Keep this - reasonably short or it won't be clear for end users. - -Author - -: Enter your name or the name of your company. - -Email - -: Enter a contact email address where package users can contact you. - If you don't want to be contacted via email, leave this field empty - -Website - -: Enter the name of the website where you will have information about - this keyboard. If you want to host it on keyman.com, you could enter - `https://keyman.com/` - -Image file -: Select the splash image file that you created in Step 2 from the - list of files in your package. - -[Step 5: Shortcuts](step-5) +(Removed in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/distribute/tutorial/step-5.md b/developer/docs/help/guides/distribute/tutorial/step-5.md index f8c89fd635..0b6ffea441 100644 --- a/developer/docs/help/guides/distribute/tutorial/step-5.md +++ b/developer/docs/help/guides/distribute/tutorial/step-5.md @@ -1,49 +1,5 @@ --- -title: Step 5: Shortcuts +redirect: .. --- -Click on the Shortcuts tab in the Package Editor. - -![](../../../images/tutorial_distribute_keyboard_shortcuts.png) - -While it may be a good idea to include Start Menu shortcuts for your -package, on recent versions of Windows these are not very visible to end -users. This means that you should ensure that all instructions are -available through the **welcome.htm** file as well. The Start Menu -shortcuts were designed originally for Windows-based keyboard packages -and work slightly differently in macOS. - -You should consider adding the following items to the Start Menu: - -- Documentation shortcuts -- Welcome.htm shortcut - -> ### Note -While Keyman Developer 8.0 and earlier versions of the documentation -advised including an uninstall shortcut to the package, this is no -longer recommended. Users should uninstall your package from Keyman -Configuration. Adding an uninstall shortcut to the package adds -confusion to the Start Menu search on Windows, and is not compatible -with macOS keyboards. - -Click **New** to add a new shortcut to the -package. Enter a description for the shortcut, and select the program or -file to start from the Program list. Four predefined program entries -(Start Product), (Product Configuration), (Product Help) and (About -Product) will be translated into the appropriate shortcuts to start -Keyman for Windows tasks as described. - -> ### Note -In Keyman 6 and earlier, the predefined targets $KEYMAN\keyman.exe and -$KEYMAN\kmshell.exe were available. These are translated to (Start -Product) and (Product Configuration), respectively, in Keyman -7.0 and later versions. - - - -> ### Tip -Packages are not listed in the Control Panel Add/Remove Programs applet -with Keyman 7.0 and later versions. Packages can be uninstalled -through the Start Menu shortcut or from Keyman Configuration. - -[Step 6: Compiling, testing and distributing a Package](step-6) +(Removed in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/distribute/tutorial/step-6.md b/developer/docs/help/guides/distribute/tutorial/step-6.md index 374584c3e1..0b6ffea441 100644 --- a/developer/docs/help/guides/distribute/tutorial/step-6.md +++ b/developer/docs/help/guides/distribute/tutorial/step-6.md @@ -1,68 +1,5 @@ --- -title: Step 6: Compiling, testing and distributing a Package +redirect: .. --- -In the Package Editor, click on the **Compile** tab. - -![](../../../images/tutorial_distribute_keyboard_compile.png) - -Click **Compile Package** to compile the -package into a .kmp file. Compiling takes all the files listed for the -package, compresses them (using a .ZIP-compatible format) and adds the -package information, all into a single file. If any files are not -available, an error will be listed in the Messages window. - -After compiling, you can test the package installation in Keyman -Desktop, by clicking **Install Package**. You -should test that all the keyboards and fonts install successfully, that -the Readme and Welcome files are displayed during the install, and that -the documentation is accessible to the end user. Make sure that the On -Screen Keyboard installs with your keyboards, and that the shortcuts are -correctly listed and working in the Start Menu. - -> ### Advice -The distribution model for Keyman keyboards is changing. We now -recommend distributing source for keyboards through the [Keyman Cloud Keyboard Repository](/developer/keyboards/). The instructions here -remain, but the binary distribution model is deprecated. - -## Distributing a package on the Keyman Cloud Keyboard Repository - -Once you have tested the package to your satisfaction, it is time to -distribute it. We recommend uploading your keyboard package to the -[Keyman Cloud Keyboard Repository](/developer/keyboards/) - -## Distributing a package on your own website - -If you distribute a package on your own site, we have the following -recommendations: - -1. Ensure the MIME type on the web server or folder for .KMX and .KMP - files is set up to application/octet-stream. Without this, .KMP - files may be recognised as .ZIP files -- this is not helpful to the - end user as it will be opened in the wrong application. If you can't - make this change, consider hosting the keyboard package on the - Tavultesoft website to make things easier for your end user. -2. Avoid putting the .KMP file in an archive (e.g. .ZIP) or - self-expanding archive (.EXE) - this makes it harder for end users - to install. A .KMP file is already compressed (it is actually just a - ZIP archive file!) and you won't save much space by recompressing - it. -3. Include a link to the Keyman download page: - `http://keyman.com/desktop/` - -## Distributing a package by email - -Attaching the KMP file directly to an email may be blocked for security -reasons. As mentioned above, a KMP file is basically a ZIP file and -mobile keyboard data is in JavaScript, this is a combination that looks -suspicious to many email servers. You can upload it to a Google drive, -and email a link for downloading the file - -You may need to do some exploring to get your mobile device to load the -keyboard from the KMP file into Keyman. The device may not open the file -directly, claiming it is an unrecognized type. If you look for other -options to open the file, hopefully you can get it to Keyman. For -example, in iOS, I had to tap on the three dots to the right, then -choose "Open in" and then I could choose "Copy to Keyman." In Android, I -had to download the file to my device, then open the KMP file in a file -manager before I could install it in Keyman. \ No newline at end of file +(Removed in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/index.md b/developer/docs/help/guides/index.md index 55604780ad..09749d0616 100644 --- a/developer/docs/help/guides/index.md +++ b/developer/docs/help/guides/index.md @@ -5,9 +5,8 @@ title: Keyman Developer Guides Need help using Keyman Developer? You'll find everything you need here, including product documentation, frequently asked questions and tutorials. - [Introduction to Keyman Developer](intro) -- [Developing Keyman keyboards](develop/) -- [Testing Keyman keyboards](test/) -- [Distributing Keyman keyboards](distribute/) +- [The Keyman Developer Walkthrough](develop/walkthrough) - [Developing Keyman lexical models (for predictive text and autocorrect)](lexical-models/) +- [Testing Keyman keyboards and lexical models](test/) - [Distributing Keyman lexical models](lexical-models/distribute/) -- [Keyman Developer command line tools guide](command-line) \ No newline at end of file +- [Keyman Developer command line tools guide](command-line) diff --git a/developer/docs/help/guides/test/keyboard-touch-and-desktop.md b/developer/docs/help/guides/test/keyboard-touch-and-desktop.md index 9db50afbbb..5e7a9a7575 100644 --- a/developer/docs/help/guides/test/keyboard-touch-and-desktop.md +++ b/developer/docs/help/guides/test/keyboard-touch-and-desktop.md @@ -133,17 +133,3 @@ installed, across all apps. You can test multiple keyboards just by clicking **Test Keyboard on web** in each keyboard editor. -## Related articles - -Other articles on developing touch layouts: - -- [Creating a touch keyboard layout for Amharic - part - 1](../develop/creating-a-touch-keyboard-layout-for-amharic) -- [Creating a touch keyboard layout for Amharic - the nitty - gritty](../develop/creating-a-touch-keyboard-layout-for-amharic-the-nitty-gritty) - -You can distribute your keyboard to other users by following the -instructions in this article: - -- [Distribute keyboards to Keyman - applications](../distribute/packages) diff --git a/developer/docs/help/guides/test/keyboard-touch-mobile-emulator.md b/developer/docs/help/guides/test/keyboard-touch-mobile-emulator.md index fb68b11f2b..6c7afc034d 100644 --- a/developer/docs/help/guides/test/keyboard-touch-mobile-emulator.md +++ b/developer/docs/help/guides/test/keyboard-touch-mobile-emulator.md @@ -47,15 +47,5 @@ You can now test the keyboard layout and get an idea of how it will feel on a real touch device. Rotation, or changing device types will require a page load (F5) in order to render correctly. -- [Creating a touch keyboard layout for Amharic - part - 1](../develop/creating-a-touch-keyboard-layout-for-amharic) -- [Creating a touch keyboard layout for Amharic - the nitty - gritty](../develop/creating-a-touch-keyboard-layout-for-amharic-the-nitty-gritty) - [How to test your keyboard layout — touch and desktop](keyboard-touch-and-desktop) - -You can distribute your keyboard to other users by following the -instructions in this article: - -- [Distribute keyboards to Keyman - applications](../distribute/packages) diff --git a/developer/docs/help/reference/file-types/kps.md b/developer/docs/help/reference/file-types/kps.md index ef4095d9ae..11fa4b7f14 100644 --- a/developer/docs/help/reference/file-types/kps.md +++ b/developer/docs/help/reference/file-types/kps.md @@ -19,9 +19,114 @@ Distributed with keyboard: ## File format +A keyboard package file contains one or more keyboards, along with readme files, +fonts (if your keyboard requires a custom font), and any other files you wish to +include. You should create a package file to bundle your keyboard with fonts and +help into a simple, single file that is easy for an end-user to install. + +A lexical model package file contains a single lexical model, optionally also +fonts and/or documentation. + +Internally, as well as your own files, the package file will contain metadata +file "kmp.json", which lists the details Keyman needs to install the package. +The package file is a ZIP compatible archive. + +> [!Tip] You can distribute keyboards and lexical models in package files, but +> you can't include both in the same package file. + The optional `` section of the file can be included to customise the text in the bootstrap installer. The default strings are found in the file: [strings.xml](https://github.com/keymanapp/keyman/blob/stable-14.0/windows/src/desktop/setup/locale/en/strings.xml). You can add your own strings for a given package which are used when compiling as a bundled installer. + +#### Keyman for Windows + +Keyman for Windows can install keyboard package files, including installing +fonts, creating Start Menu shortcuts, and adding appropriate registry entries +for uninstallation. + +On Windows, the context menu for a package file has one additional entry: +"Install". + +#### Keyman for mac + +Keyman for mac can install package files with fonts and keyboards, and shortcuts +in the package will be available through the keyboard's entry in Keyman +Configuration. + +#### Keyman for Linux + +Keyman for mac can install package files with fonts and keyboards. + +#### Keyman for Android and Keyman for iPhone and iPad + +Keyman mobile applications can install the same package files as Keyman for +Windows; the package must contain a touch-compatible keyboard (keyboard file +with a .js extension). + +## Package file contents + +A package can have a variety of different files contained within. The +following files and file types are recognized by the package installer: + +\*.kmx (Keyman for Windows, Linux, and macOS only) +: Keyboard files. Each of these will be installed. Keyman + Configuration will not allow installation or uninstallation of a + single keyboard from a package. They will always be treated as a + group for installation and uninstallation. + +\*.kvk (Keyman for Windows, Linux, and macOS only) +: On Screen Keyboard files, associated with each keyboard file. + +\*.js (mobile only) +: Touch layout Keyboard files. When Keyman mobile applications install + a keyboard package, all included keyboards will be installed as a + group. With Keyman Developer 10, the keyboard version information is + in kmp.json, and no longer within the JS file names. + +welcome.htm +: Introductory help for the keyboard, HTML format. This will normally + be displayed when the package is installed by the user, and is also + the entry point for help when accessed via Keyman's help system or + Keyman Configuration. + +readme.htm +: Displayed before a package is installed, together with brief + metadata about the package, to allow the user to determine if they + wish to continue installation of the package. + +kmp.inf (Legacy versions of Keyman) +: A Windows .ini format file that lists each of the files in the + package, together with metadata. + +kmp.json +: A JSON format file contains metadata for the keyboard package such + as package version, keyboard versions, and lists each of the files + in the package. For more explanation of the structure of the JSON + file, please read the + [metadata](metadata) documentation. + +\*.ttf, \*.otf, \*.ttc +: Truetype font files that will be installed with the package, and + uninstalled when the package is removed. On mobile, these fonts will + be available only within the Keyman app and the on-screen-keyboard, + not in other apps. + +## Share the package file + +> [!TIP] +> Read [File Layout](../file-layout) to know which files to include or exclude in the project folder. + +The best way to distribute packages is to distribute it through Keyman Cloud: + +* [Share a keyboard package](/developer/keyboards) +* [Share a lexical model package](/developer/lexical-models) + +It is also possible to share a .kmp package through other means. Once the +keyboard package .kmp file is created, you can share it via external storage +devices (USB drive, SD card, etc). You can also share the package file via a +cloud storage system (Google Drive, Dropbox or similar service), then share the +link to your device via text, note or email. Alternatively, you can upload the +.kmp file to a public facing website. From 82e7804c3a71265548051e1c0708351848ca60b4 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Mon, 9 Mar 2026 15:28:47 +0100 Subject: [PATCH 17/45] docs: move walkthrough up one level Test-bot: skip --- developer/docs/help/guides/develop/index.md | 2 +- developer/docs/help/guides/distribute/index.md | 2 +- developer/docs/help/guides/index.md | 2 +- .../{develop => }/walkthrough/00-introduction.md | 0 .../walkthrough/01-creating-keyboard-project.md | 8 ++++---- .../walkthrough/02-designing-desktop-layout.md | 2 +- .../walkthrough/03-creating-desktop-layout.md | 0 .../{develop => }/walkthrough/04-using-debugger.md | 2 +- .../walkthrough/05-designing-touch-layout.md | 0 .../walkthrough/06-creating-touch-layout.md | 2 +- .../07-writing-keyboard-documentation.md | 0 .../walkthrough/08-preparing-keyboard-package.md | 2 +- .../walkthrough/09-distributing-keyboard-package.md | 0 .../walkthrough/10-generating-lexical-model.md | 8 ++++---- .../walkthrough/11-installing-lexical-model.md | 2 +- .../{develop => }/walkthrough/Aduna_anndaaka.txt | 0 .../guides/{develop => }/walkthrough/__index.txt | 0 .../{develop => }/walkthrough/dag-short-wl.txt | 0 .../guides/{develop => }/walkthrough/glossary.md | 0 .../walkthrough/images/add-language.png | Bin .../walkthrough/images/add-longpress.png | Bin .../walkthrough/images/characters-in-comments.png | Bin .../walkthrough/images/charmap-to-text.png | Bin .../{develop => }/walkthrough/images/charmap.png | Bin .../{develop => }/walkthrough/images/code-tab.png | Bin .../walkthrough/images/copy-wordlist.png | Bin .../walkthrough/images/debugger-output.png | Bin .../walkthrough/images/distribution-tab.png | Bin .../walkthrough/images/history-md-file.png | Bin .../walkthrough/images/keyboard-model-device.png | Bin .../walkthrough/images/keyboards-tab.png | Bin .../walkthrough/images/keyman-developer-icon.png | Bin .../walkthrough/images/keyman-icon.png | Bin .../walkthrough/images/layer-selection.png | Bin .../walkthrough/images/longpress-fields.png | Bin .../walkthrough/images/new-lexical-model.png | Bin .../walkthrough/images/new-longpress-key.png | Bin .../walkthrough/images/new-project-dialog.png | Bin .../walkthrough/images/notepadpp-case.png | Bin .../walkthrough/images/notepadpp-regex.png | Bin .../walkthrough/images/primerprep-input.png | Bin .../walkthrough/images/primerprep-start.png | Bin .../walkthrough/images/primerprep-with-words.png | Bin .../walkthrough/images/shift-layer.png | Bin .../images/test-keyboard-browser-display.png | Bin .../walkthrough/images/test-keyboard-browser.png | Bin .../walkthrough/images/test-lexical-model-k.png | Bin .../walkthrough/images/test-lexical-model-setup.png | Bin .../walkthrough/images/test-longpress.png | Bin .../{develop => }/walkthrough/images/u-0254.png | Bin .../walkthrough/images/unicode-character-value.png | Bin .../walkthrough/images/windows-save-txt.png | Bin .../help/guides/{develop => }/walkthrough/index.md | 0 .../{develop => }/walkthrough/walkthrough.css | 0 54 files changed, 16 insertions(+), 16 deletions(-) rename developer/docs/help/guides/{develop => }/walkthrough/00-introduction.md (100%) rename developer/docs/help/guides/{develop => }/walkthrough/01-creating-keyboard-project.md (96%) rename developer/docs/help/guides/{develop => }/walkthrough/02-designing-desktop-layout.md (98%) rename developer/docs/help/guides/{develop => }/walkthrough/03-creating-desktop-layout.md (100%) rename developer/docs/help/guides/{develop => }/walkthrough/04-using-debugger.md (93%) rename developer/docs/help/guides/{develop => }/walkthrough/05-designing-touch-layout.md (100%) rename developer/docs/help/guides/{develop => }/walkthrough/06-creating-touch-layout.md (97%) rename developer/docs/help/guides/{develop => }/walkthrough/07-writing-keyboard-documentation.md (100%) rename developer/docs/help/guides/{develop => }/walkthrough/08-preparing-keyboard-package.md (95%) rename developer/docs/help/guides/{develop => }/walkthrough/09-distributing-keyboard-package.md (100%) rename developer/docs/help/guides/{develop => }/walkthrough/10-generating-lexical-model.md (97%) rename developer/docs/help/guides/{develop => }/walkthrough/11-installing-lexical-model.md (95%) rename developer/docs/help/guides/{develop => }/walkthrough/Aduna_anndaaka.txt (100%) rename developer/docs/help/guides/{develop => }/walkthrough/__index.txt (100%) rename developer/docs/help/guides/{develop => }/walkthrough/dag-short-wl.txt (100%) rename developer/docs/help/guides/{develop => }/walkthrough/glossary.md (100%) rename developer/docs/help/guides/{develop => }/walkthrough/images/add-language.png (100%) rename developer/docs/help/guides/{develop => }/walkthrough/images/add-longpress.png (100%) rename developer/docs/help/guides/{develop => }/walkthrough/images/characters-in-comments.png (100%) rename developer/docs/help/guides/{develop => }/walkthrough/images/charmap-to-text.png (100%) rename developer/docs/help/guides/{develop => }/walkthrough/images/charmap.png (100%) rename developer/docs/help/guides/{develop => }/walkthrough/images/code-tab.png (100%) rename developer/docs/help/guides/{develop => }/walkthrough/images/copy-wordlist.png (100%) rename developer/docs/help/guides/{develop => }/walkthrough/images/debugger-output.png (100%) rename developer/docs/help/guides/{develop => }/walkthrough/images/distribution-tab.png (100%) rename developer/docs/help/guides/{develop => }/walkthrough/images/history-md-file.png (100%) rename developer/docs/help/guides/{develop => }/walkthrough/images/keyboard-model-device.png (100%) rename developer/docs/help/guides/{develop => }/walkthrough/images/keyboards-tab.png (100%) rename developer/docs/help/guides/{develop => }/walkthrough/images/keyman-developer-icon.png (100%) rename developer/docs/help/guides/{develop => }/walkthrough/images/keyman-icon.png (100%) rename developer/docs/help/guides/{develop => }/walkthrough/images/layer-selection.png (100%) rename developer/docs/help/guides/{develop => }/walkthrough/images/longpress-fields.png (100%) rename developer/docs/help/guides/{develop => }/walkthrough/images/new-lexical-model.png (100%) rename developer/docs/help/guides/{develop => }/walkthrough/images/new-longpress-key.png (100%) rename developer/docs/help/guides/{develop => }/walkthrough/images/new-project-dialog.png (100%) rename developer/docs/help/guides/{develop => }/walkthrough/images/notepadpp-case.png (100%) rename developer/docs/help/guides/{develop => }/walkthrough/images/notepadpp-regex.png (100%) rename developer/docs/help/guides/{develop => }/walkthrough/images/primerprep-input.png (100%) rename developer/docs/help/guides/{develop => }/walkthrough/images/primerprep-start.png (100%) rename developer/docs/help/guides/{develop => }/walkthrough/images/primerprep-with-words.png (100%) rename developer/docs/help/guides/{develop => }/walkthrough/images/shift-layer.png (100%) rename developer/docs/help/guides/{develop => }/walkthrough/images/test-keyboard-browser-display.png (100%) rename developer/docs/help/guides/{develop => }/walkthrough/images/test-keyboard-browser.png (100%) rename developer/docs/help/guides/{develop => }/walkthrough/images/test-lexical-model-k.png (100%) rename developer/docs/help/guides/{develop => }/walkthrough/images/test-lexical-model-setup.png (100%) rename developer/docs/help/guides/{develop => }/walkthrough/images/test-longpress.png (100%) rename developer/docs/help/guides/{develop => }/walkthrough/images/u-0254.png (100%) rename developer/docs/help/guides/{develop => }/walkthrough/images/unicode-character-value.png (100%) rename developer/docs/help/guides/{develop => }/walkthrough/images/windows-save-txt.png (100%) rename developer/docs/help/guides/{develop => }/walkthrough/index.md (100%) rename developer/docs/help/guides/{develop => }/walkthrough/walkthrough.css (100%) diff --git a/developer/docs/help/guides/develop/index.md b/developer/docs/help/guides/develop/index.md index c86743b294..b9f661c032 100644 --- a/developer/docs/help/guides/develop/index.md +++ b/developer/docs/help/guides/develop/index.md @@ -6,7 +6,7 @@ In version 19, the main keyboard tutorials have been replaced by the Keyman Developer Walkthrough, which covers all the topics found in the main tutorials in greater depth. -* [The Keyman Developer Walkthrough →](walkthrough/) +* [The Keyman Developer Walkthrough →](../walkthrough/) Other tutorials: diff --git a/developer/docs/help/guides/distribute/index.md b/developer/docs/help/guides/distribute/index.md index f6fff6c68d..f69eee8972 100644 --- a/developer/docs/help/guides/distribute/index.md +++ b/developer/docs/help/guides/distribute/index.md @@ -5,4 +5,4 @@ title: Package Tutorial In version 19, the Package Tutorial has been replaced by the Keyman Developer Walkthrough, which covers all the topics in greater depth. -* [The Keyman Developer Walkthrough →](../develop/walkthrough/08-preparing-keyboard-package) +* [The Keyman Developer Walkthrough →](../walkthrough/08-preparing-keyboard-package) diff --git a/developer/docs/help/guides/index.md b/developer/docs/help/guides/index.md index 09749d0616..f36d44bbd3 100644 --- a/developer/docs/help/guides/index.md +++ b/developer/docs/help/guides/index.md @@ -5,7 +5,7 @@ title: Keyman Developer Guides Need help using Keyman Developer? You'll find everything you need here, including product documentation, frequently asked questions and tutorials. - [Introduction to Keyman Developer](intro) -- [The Keyman Developer Walkthrough](develop/walkthrough) +- [The Keyman Developer Walkthrough](walkthrough) - [Developing Keyman lexical models (for predictive text and autocorrect)](lexical-models/) - [Testing Keyman keyboards and lexical models](test/) - [Distributing Keyman lexical models](lexical-models/distribute/) diff --git a/developer/docs/help/guides/develop/walkthrough/00-introduction.md b/developer/docs/help/guides/walkthrough/00-introduction.md similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/00-introduction.md rename to developer/docs/help/guides/walkthrough/00-introduction.md diff --git a/developer/docs/help/guides/develop/walkthrough/01-creating-keyboard-project.md b/developer/docs/help/guides/walkthrough/01-creating-keyboard-project.md similarity index 96% rename from developer/docs/help/guides/develop/walkthrough/01-creating-keyboard-project.md rename to developer/docs/help/guides/walkthrough/01-creating-keyboard-project.md index 1e5c8f8078..703163964f 100644 --- a/developer/docs/help/guides/develop/walkthrough/01-creating-keyboard-project.md +++ b/developer/docs/help/guides/walkthrough/01-creating-keyboard-project.md @@ -121,15 +121,15 @@ The full copyright message is added to `LICENSE.md`. ### Languages -This table displays the [BCP 47](../../../reference/bcp-47) tag (or tags) associated with your keyboard. +This table displays the [BCP 47](../../reference/bcp-47) tag (or tags) associated with your keyboard. A BCP 47 tag identifies a language and will help users find your keyboard when they search for their language. If you don’t know what your language’s tag is, you can search for its name and find the corresponding tag in the [IANA Language Subtag Registry](https://www.iana.org/assignments/language-subtag-registry/language-subtag-registry), which contains all existing BCP 47 tags, the [Glottolog](https://glottolog.org/glottolog/language) (under the ISO-639-3 column), or the [SIL Ethnologue](https://www.ethnologue.com/). The SIL Ethnologue is the most user-friendly option of the three, if you are unfamiliar with language tags. In addition to your basic BCP 47 tag, you can add -[Script](../../../reference/bcp-47#toc-the-script-subtag) and -[Region](../../../reference/bcp-47#toc-the-region-subtag) subtags. +[Script](../../reference/bcp-47#toc-the-script-subtag) and +[Region](../../reference/bcp-47#toc-the-region-subtag) subtags. However, you should always use the simplest possible BCP 47 tag to identify your language. Only add Script and Region tags if your keyboard is for a script or region that differs from the most commonly used form of the language. @@ -171,7 +171,7 @@ It’s a good idea to let Keyman handle naming your files, since it uses good na Once you have filled out all of the fields, Keyman Developer will create your project and open it in a new window with your project’s `.kpj` (Keyman project) file displayed. -You can read more about the `.kpj` file type in the [official Keyman documentation](../../../reference/file-types/kpj). +You can read more about the `.kpj` file type in the [official Keyman documentation](../../reference/file-types/kpj). ## Basing a new Keyboard Project on an existing one diff --git a/developer/docs/help/guides/develop/walkthrough/02-designing-desktop-layout.md b/developer/docs/help/guides/walkthrough/02-designing-desktop-layout.md similarity index 98% rename from developer/docs/help/guides/develop/walkthrough/02-designing-desktop-layout.md rename to developer/docs/help/guides/walkthrough/02-designing-desktop-layout.md index ad87d0052d..b92794db32 100644 --- a/developer/docs/help/guides/develop/walkthrough/02-designing-desktop-layout.md +++ b/developer/docs/help/guides/walkthrough/02-designing-desktop-layout.md @@ -63,7 +63,7 @@ For visual mapping, this can be done with tools as rudimentary as a pen and pape Navigate to your `.kpj` file, go to the `Keyboards` tab, and open your `.kmn` file. This is where your keyboard’s information lies, as well as the code that makes it work. -You can read more about the `.kmn` file type in the [official Keyman documentation](../../../reference/file-types/kmn). +You can read more about the `.kmn` file type in the [official Keyman documentation](../../reference/file-types/kmn). Inside your `.kmn` file, select the `Layout` tab on the left. For a new project, the `Design` tab (at the bottom) should already be selected. diff --git a/developer/docs/help/guides/develop/walkthrough/03-creating-desktop-layout.md b/developer/docs/help/guides/walkthrough/03-creating-desktop-layout.md similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/03-creating-desktop-layout.md rename to developer/docs/help/guides/walkthrough/03-creating-desktop-layout.md diff --git a/developer/docs/help/guides/develop/walkthrough/04-using-debugger.md b/developer/docs/help/guides/walkthrough/04-using-debugger.md similarity index 93% rename from developer/docs/help/guides/develop/walkthrough/04-using-debugger.md rename to developer/docs/help/guides/walkthrough/04-using-debugger.md index a86917754e..683a1d1836 100644 --- a/developer/docs/help/guides/develop/walkthrough/04-using-debugger.md +++ b/developer/docs/help/guides/walkthrough/04-using-debugger.md @@ -28,7 +28,7 @@ To continue the Step-by-Step tutorial move to the next page: [Part 5 - Designing ## Running the Debugger -See the [debugger documentation](../../../context/debug) for more information on running the debugger. +See the [debugger documentation](../../context/debug) for more information on running the debugger. ## Interpreting Errors diff --git a/developer/docs/help/guides/develop/walkthrough/05-designing-touch-layout.md b/developer/docs/help/guides/walkthrough/05-designing-touch-layout.md similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/05-designing-touch-layout.md rename to developer/docs/help/guides/walkthrough/05-designing-touch-layout.md diff --git a/developer/docs/help/guides/develop/walkthrough/06-creating-touch-layout.md b/developer/docs/help/guides/walkthrough/06-creating-touch-layout.md similarity index 97% rename from developer/docs/help/guides/develop/walkthrough/06-creating-touch-layout.md rename to developer/docs/help/guides/walkthrough/06-creating-touch-layout.md index b4fab0a85c..e7664fb797 100644 --- a/developer/docs/help/guides/develop/walkthrough/06-creating-touch-layout.md +++ b/developer/docs/help/guides/walkthrough/06-creating-touch-layout.md @@ -143,7 +143,7 @@ Use care when combining different kinds of gestures as some of them may conflict ## Reference -See [Touch layout editor documentation](../../../context/keyboard-editor#toc-touch-layout-tab) for more details. +See [Touch layout editor documentation](../../context/keyboard-editor#toc-touch-layout-tab) for more details. ## Testing Touch Keyboards diff --git a/developer/docs/help/guides/develop/walkthrough/07-writing-keyboard-documentation.md b/developer/docs/help/guides/walkthrough/07-writing-keyboard-documentation.md similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/07-writing-keyboard-documentation.md rename to developer/docs/help/guides/walkthrough/07-writing-keyboard-documentation.md diff --git a/developer/docs/help/guides/develop/walkthrough/08-preparing-keyboard-package.md b/developer/docs/help/guides/walkthrough/08-preparing-keyboard-package.md similarity index 95% rename from developer/docs/help/guides/develop/walkthrough/08-preparing-keyboard-package.md rename to developer/docs/help/guides/walkthrough/08-preparing-keyboard-package.md index 9bd0956cdb..6a4f769788 100644 --- a/developer/docs/help/guides/develop/walkthrough/08-preparing-keyboard-package.md +++ b/developer/docs/help/guides/walkthrough/08-preparing-keyboard-package.md @@ -29,7 +29,7 @@ To continue the Step-by-Step tutorial move to the next page: [Part 9 - Distribut ## Package Files -See the [Keyman Package Editor documentation](../../../context/package-editor) if you need more details on the following items. +See the [Keyman Package Editor documentation](../../context/package-editor) if you need more details on the following items. ### Files diff --git a/developer/docs/help/guides/develop/walkthrough/09-distributing-keyboard-package.md b/developer/docs/help/guides/walkthrough/09-distributing-keyboard-package.md similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/09-distributing-keyboard-package.md rename to developer/docs/help/guides/walkthrough/09-distributing-keyboard-package.md diff --git a/developer/docs/help/guides/develop/walkthrough/10-generating-lexical-model.md b/developer/docs/help/guides/walkthrough/10-generating-lexical-model.md similarity index 97% rename from developer/docs/help/guides/develop/walkthrough/10-generating-lexical-model.md rename to developer/docs/help/guides/walkthrough/10-generating-lexical-model.md index a946ded54f..610c3fe913 100644 --- a/developer/docs/help/guides/develop/walkthrough/10-generating-lexical-model.md +++ b/developer/docs/help/guides/walkthrough/10-generating-lexical-model.md @@ -152,13 +152,13 @@ Keyman will place you in your `.kpj` file immediately, as with a keyboard projec Currently `Wordlist (trie-1.0)` is the only choice for the `Format` field. -You’ll normally want to keep the `default` choice for the `Word breaker` field and the `(Space U+0020)` option for the `Insert after word` field, unless you are dealing with an orthography that doesn’t use space to separate words. For scripts such as Khmer, Thai, and Lao, which have special ways to delimit words, see the Keyman documentation on [coding a custom word breaker](../../../guides/lexical-models/advanced/word-breaker). +You’ll normally want to keep the `default` choice for the `Word breaker` field and the `(Space U+0020)` option for the `Insert after word` field, unless you are dealing with an orthography that doesn’t use space to separate words. For scripts such as Khmer, Thai, and Lao, which have special ways to delimit words, see the Keyman documentation on [coding a custom word breaker](../../guides/lexical-models/advanced/word-breaker). You can specify the opening and closing quotation marks, and whether the language is using a right-to-left script (such as Arabic, Hebrew, Syriac, etc.) If your language uses a script with uppercase and lowercase (such as Latin, Cyrillic, Greek, etc.) you probably will want to enable the `Language uses casing` checkbox, so that Keyman will take casing into account when matching and suggesting words. For example, if you start typing `Rab`, Keyman will propose `Rabbit` rather than `rabbit`. -The Keyman site has more details on [advanced topics](../../../guides/lexical-models/advanced/word-breaker). +The Keyman site has more details on [advanced topics](../../guides/lexical-models/advanced/word-breaker). ## Editing Wordlists @@ -169,7 +169,7 @@ Keyman provides a default `wordlist.tsv` file for you as an example. You can rep For a newly created project, the only wordlist present is `wordlist.tsv`. If you open that file, you'll see some sample data included as an illustration. -For advanced information on Keyman wordlist file formats and exporting your own wordlist files, read the [TSV file documentation](../../../reference/file-types/tsv). +For advanced information on Keyman wordlist file formats and exporting your own wordlist files, read the [TSV file documentation](../../reference/file-types/tsv). ### Ignored lines @@ -242,7 +242,7 @@ You can submit your lexical model to the Keyman lexical models repository in a m This makes the lexical model available to anyone with Internet access. See [Guide for Lexical Model Submissions](/developer/lexical-models/submission/). -The [Distribute lexical modes to Keyman Applications](../../lexical-models/distribute/packages) page details other distribution possibilities. +The [Distribute lexical modes to Keyman Applications](../lexical-models/distribute/packages) page details other distribution possibilities. In addition, it is possible to use [Keyboard App Builder](https://software.sil.org/keyboardappbuilder/), which will allow you to build an app that includes Keyman, a specific keyboard and a specific lexical model. You can then distribute this app to users directly or through the platform's source of apps. diff --git a/developer/docs/help/guides/develop/walkthrough/11-installing-lexical-model.md b/developer/docs/help/guides/walkthrough/11-installing-lexical-model.md similarity index 95% rename from developer/docs/help/guides/develop/walkthrough/11-installing-lexical-model.md rename to developer/docs/help/guides/walkthrough/11-installing-lexical-model.md index 02d7594421..367863b8e9 100644 --- a/developer/docs/help/guides/develop/walkthrough/11-installing-lexical-model.md +++ b/developer/docs/help/guides/walkthrough/11-installing-lexical-model.md @@ -4,7 +4,7 @@ title: Installing a Keyman Lexical Model
-Part 11 of the [Keyman Developer Walkthrough](../walkthrough). +Part 11 of the [Keyman Developer Walkthrough](.). [← Part 10 - Generating a Lexical Model](10-generating-lexical-model)
diff --git a/developer/docs/help/guides/develop/walkthrough/Aduna_anndaaka.txt b/developer/docs/help/guides/walkthrough/Aduna_anndaaka.txt similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/Aduna_anndaaka.txt rename to developer/docs/help/guides/walkthrough/Aduna_anndaaka.txt diff --git a/developer/docs/help/guides/develop/walkthrough/__index.txt b/developer/docs/help/guides/walkthrough/__index.txt similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/__index.txt rename to developer/docs/help/guides/walkthrough/__index.txt diff --git a/developer/docs/help/guides/develop/walkthrough/dag-short-wl.txt b/developer/docs/help/guides/walkthrough/dag-short-wl.txt similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/dag-short-wl.txt rename to developer/docs/help/guides/walkthrough/dag-short-wl.txt diff --git a/developer/docs/help/guides/develop/walkthrough/glossary.md b/developer/docs/help/guides/walkthrough/glossary.md similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/glossary.md rename to developer/docs/help/guides/walkthrough/glossary.md diff --git a/developer/docs/help/guides/develop/walkthrough/images/add-language.png b/developer/docs/help/guides/walkthrough/images/add-language.png similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/images/add-language.png rename to developer/docs/help/guides/walkthrough/images/add-language.png diff --git a/developer/docs/help/guides/develop/walkthrough/images/add-longpress.png b/developer/docs/help/guides/walkthrough/images/add-longpress.png similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/images/add-longpress.png rename to developer/docs/help/guides/walkthrough/images/add-longpress.png diff --git a/developer/docs/help/guides/develop/walkthrough/images/characters-in-comments.png b/developer/docs/help/guides/walkthrough/images/characters-in-comments.png similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/images/characters-in-comments.png rename to developer/docs/help/guides/walkthrough/images/characters-in-comments.png diff --git a/developer/docs/help/guides/develop/walkthrough/images/charmap-to-text.png b/developer/docs/help/guides/walkthrough/images/charmap-to-text.png similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/images/charmap-to-text.png rename to developer/docs/help/guides/walkthrough/images/charmap-to-text.png diff --git a/developer/docs/help/guides/develop/walkthrough/images/charmap.png b/developer/docs/help/guides/walkthrough/images/charmap.png similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/images/charmap.png rename to developer/docs/help/guides/walkthrough/images/charmap.png diff --git a/developer/docs/help/guides/develop/walkthrough/images/code-tab.png b/developer/docs/help/guides/walkthrough/images/code-tab.png similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/images/code-tab.png rename to developer/docs/help/guides/walkthrough/images/code-tab.png diff --git a/developer/docs/help/guides/develop/walkthrough/images/copy-wordlist.png b/developer/docs/help/guides/walkthrough/images/copy-wordlist.png similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/images/copy-wordlist.png rename to developer/docs/help/guides/walkthrough/images/copy-wordlist.png diff --git a/developer/docs/help/guides/develop/walkthrough/images/debugger-output.png b/developer/docs/help/guides/walkthrough/images/debugger-output.png similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/images/debugger-output.png rename to developer/docs/help/guides/walkthrough/images/debugger-output.png diff --git a/developer/docs/help/guides/develop/walkthrough/images/distribution-tab.png b/developer/docs/help/guides/walkthrough/images/distribution-tab.png similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/images/distribution-tab.png rename to developer/docs/help/guides/walkthrough/images/distribution-tab.png diff --git a/developer/docs/help/guides/develop/walkthrough/images/history-md-file.png b/developer/docs/help/guides/walkthrough/images/history-md-file.png similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/images/history-md-file.png rename to developer/docs/help/guides/walkthrough/images/history-md-file.png diff --git a/developer/docs/help/guides/develop/walkthrough/images/keyboard-model-device.png b/developer/docs/help/guides/walkthrough/images/keyboard-model-device.png similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/images/keyboard-model-device.png rename to developer/docs/help/guides/walkthrough/images/keyboard-model-device.png diff --git a/developer/docs/help/guides/develop/walkthrough/images/keyboards-tab.png b/developer/docs/help/guides/walkthrough/images/keyboards-tab.png similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/images/keyboards-tab.png rename to developer/docs/help/guides/walkthrough/images/keyboards-tab.png diff --git a/developer/docs/help/guides/develop/walkthrough/images/keyman-developer-icon.png b/developer/docs/help/guides/walkthrough/images/keyman-developer-icon.png similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/images/keyman-developer-icon.png rename to developer/docs/help/guides/walkthrough/images/keyman-developer-icon.png diff --git a/developer/docs/help/guides/develop/walkthrough/images/keyman-icon.png b/developer/docs/help/guides/walkthrough/images/keyman-icon.png similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/images/keyman-icon.png rename to developer/docs/help/guides/walkthrough/images/keyman-icon.png diff --git a/developer/docs/help/guides/develop/walkthrough/images/layer-selection.png b/developer/docs/help/guides/walkthrough/images/layer-selection.png similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/images/layer-selection.png rename to developer/docs/help/guides/walkthrough/images/layer-selection.png diff --git a/developer/docs/help/guides/develop/walkthrough/images/longpress-fields.png b/developer/docs/help/guides/walkthrough/images/longpress-fields.png similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/images/longpress-fields.png rename to developer/docs/help/guides/walkthrough/images/longpress-fields.png diff --git a/developer/docs/help/guides/develop/walkthrough/images/new-lexical-model.png b/developer/docs/help/guides/walkthrough/images/new-lexical-model.png similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/images/new-lexical-model.png rename to developer/docs/help/guides/walkthrough/images/new-lexical-model.png diff --git a/developer/docs/help/guides/develop/walkthrough/images/new-longpress-key.png b/developer/docs/help/guides/walkthrough/images/new-longpress-key.png similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/images/new-longpress-key.png rename to developer/docs/help/guides/walkthrough/images/new-longpress-key.png diff --git a/developer/docs/help/guides/develop/walkthrough/images/new-project-dialog.png b/developer/docs/help/guides/walkthrough/images/new-project-dialog.png similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/images/new-project-dialog.png rename to developer/docs/help/guides/walkthrough/images/new-project-dialog.png diff --git a/developer/docs/help/guides/develop/walkthrough/images/notepadpp-case.png b/developer/docs/help/guides/walkthrough/images/notepadpp-case.png similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/images/notepadpp-case.png rename to developer/docs/help/guides/walkthrough/images/notepadpp-case.png diff --git a/developer/docs/help/guides/develop/walkthrough/images/notepadpp-regex.png b/developer/docs/help/guides/walkthrough/images/notepadpp-regex.png similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/images/notepadpp-regex.png rename to developer/docs/help/guides/walkthrough/images/notepadpp-regex.png diff --git a/developer/docs/help/guides/develop/walkthrough/images/primerprep-input.png b/developer/docs/help/guides/walkthrough/images/primerprep-input.png similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/images/primerprep-input.png rename to developer/docs/help/guides/walkthrough/images/primerprep-input.png diff --git a/developer/docs/help/guides/develop/walkthrough/images/primerprep-start.png b/developer/docs/help/guides/walkthrough/images/primerprep-start.png similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/images/primerprep-start.png rename to developer/docs/help/guides/walkthrough/images/primerprep-start.png diff --git a/developer/docs/help/guides/develop/walkthrough/images/primerprep-with-words.png b/developer/docs/help/guides/walkthrough/images/primerprep-with-words.png similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/images/primerprep-with-words.png rename to developer/docs/help/guides/walkthrough/images/primerprep-with-words.png diff --git a/developer/docs/help/guides/develop/walkthrough/images/shift-layer.png b/developer/docs/help/guides/walkthrough/images/shift-layer.png similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/images/shift-layer.png rename to developer/docs/help/guides/walkthrough/images/shift-layer.png diff --git a/developer/docs/help/guides/develop/walkthrough/images/test-keyboard-browser-display.png b/developer/docs/help/guides/walkthrough/images/test-keyboard-browser-display.png similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/images/test-keyboard-browser-display.png rename to developer/docs/help/guides/walkthrough/images/test-keyboard-browser-display.png diff --git a/developer/docs/help/guides/develop/walkthrough/images/test-keyboard-browser.png b/developer/docs/help/guides/walkthrough/images/test-keyboard-browser.png similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/images/test-keyboard-browser.png rename to developer/docs/help/guides/walkthrough/images/test-keyboard-browser.png diff --git a/developer/docs/help/guides/develop/walkthrough/images/test-lexical-model-k.png b/developer/docs/help/guides/walkthrough/images/test-lexical-model-k.png similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/images/test-lexical-model-k.png rename to developer/docs/help/guides/walkthrough/images/test-lexical-model-k.png diff --git a/developer/docs/help/guides/develop/walkthrough/images/test-lexical-model-setup.png b/developer/docs/help/guides/walkthrough/images/test-lexical-model-setup.png similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/images/test-lexical-model-setup.png rename to developer/docs/help/guides/walkthrough/images/test-lexical-model-setup.png diff --git a/developer/docs/help/guides/develop/walkthrough/images/test-longpress.png b/developer/docs/help/guides/walkthrough/images/test-longpress.png similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/images/test-longpress.png rename to developer/docs/help/guides/walkthrough/images/test-longpress.png diff --git a/developer/docs/help/guides/develop/walkthrough/images/u-0254.png b/developer/docs/help/guides/walkthrough/images/u-0254.png similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/images/u-0254.png rename to developer/docs/help/guides/walkthrough/images/u-0254.png diff --git a/developer/docs/help/guides/develop/walkthrough/images/unicode-character-value.png b/developer/docs/help/guides/walkthrough/images/unicode-character-value.png similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/images/unicode-character-value.png rename to developer/docs/help/guides/walkthrough/images/unicode-character-value.png diff --git a/developer/docs/help/guides/develop/walkthrough/images/windows-save-txt.png b/developer/docs/help/guides/walkthrough/images/windows-save-txt.png similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/images/windows-save-txt.png rename to developer/docs/help/guides/walkthrough/images/windows-save-txt.png diff --git a/developer/docs/help/guides/develop/walkthrough/index.md b/developer/docs/help/guides/walkthrough/index.md similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/index.md rename to developer/docs/help/guides/walkthrough/index.md diff --git a/developer/docs/help/guides/develop/walkthrough/walkthrough.css b/developer/docs/help/guides/walkthrough/walkthrough.css similarity index 100% rename from developer/docs/help/guides/develop/walkthrough/walkthrough.css rename to developer/docs/help/guides/walkthrough/walkthrough.css From 6872e947d33e30da8a1d2e0c9f10af33f95d8143 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Mon, 9 Mar 2026 16:15:30 +0100 Subject: [PATCH 18/45] docs: tweak walkthrough content Test-bot: skip Build-bot: skip --- .../help/guides/walkthrough/03-creating-desktop-layout.md | 6 +++++- developer/docs/help/guides/walkthrough/04-using-debugger.md | 4 ---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/developer/docs/help/guides/walkthrough/03-creating-desktop-layout.md b/developer/docs/help/guides/walkthrough/03-creating-desktop-layout.md index 0e28aa5173..f7b1c6cc63 100644 --- a/developer/docs/help/guides/walkthrough/03-creating-desktop-layout.md +++ b/developer/docs/help/guides/walkthrough/03-creating-desktop-layout.md @@ -72,6 +72,10 @@ store(output_char) "ɛɔŋɣʒƐƆŊƔƷ" - Select the `Build` tab on the left, then the `Compile Keyboard` button. (Alternatively you can use the `Keyboard` menu, `Compile Keyboard` menu item to compile the keyboard. Or you can use the F7 function key as a shortcut.) - You should see messages at the bottom indicating `dagbani.kmn built successfully`. If this is not the case, you’ll need to examine the error messages to see what the error is and correct it. +## Interpreting Errors + +When compiling your Keyman code, Keyman Developer will report any errors, warnings and hints in the box at the bottom of the window. The message will give a short description of what the compiler found was wrong along with the line number of where the problem was detected. The error, warning or hint has an identifier (“KM02033” for example). This identifier is a link to a more detailed description. +
To continue the Step-by-Step tutorial move to the next page: [Part 4 - Using the Debugger](04-using-debugger)
@@ -247,7 +251,7 @@ Some Keyman rules have no context, that is, a context that is empty. The followi is an example of the most basic rule possible. You may have noticed lines like these in your code after using the `Design` tab to edit your keyboard. Note that rules created when using the `Design` tab use [virtual key codes](/developer/language/guide/virtual-keys#common-virtual-key-codes) rather than the corresponding characters. -This does not matter unless you are writing a [mnemonic layout](https://help.keyman.com/developer/language/reference/mnemoniclayout) keyboard. Keyman keyboards are positional by default, so unless you specify a mnemonic layout in your header, the following two lines of code will produce the same output: +This does not matter unless you are writing a [mnemonic layout](https://help.keyman.com/developer/language/reference/mnemoniclayout) keyboard. Keyman keyboards are positional -- the opposite of mnemonic -- by default, so unless you specify a mnemonic layout in your header, the following two lines of code will produce the same output: ```keyman + "e" > U+025B diff --git a/developer/docs/help/guides/walkthrough/04-using-debugger.md b/developer/docs/help/guides/walkthrough/04-using-debugger.md index 683a1d1836..42b8de61c4 100644 --- a/developer/docs/help/guides/walkthrough/04-using-debugger.md +++ b/developer/docs/help/guides/walkthrough/04-using-debugger.md @@ -30,10 +30,6 @@ To continue the Step-by-Step tutorial move to the next page: [Part 5 - Designing See the [debugger documentation](../../context/debug) for more information on running the debugger. -## Interpreting Errors - -When compiling your Keyman code, Keyman Developer will report any errors, warnings and hints in the box at the bottom of the window. The message will give a short description of what the compiler found was wrong along with the line number of where the problem was detected. The error, warning or hint has an identifier (“KM02033” for example). This identifier is a link to a more detailed description. -
[← Part 3 - Creating a Desktop Layout](03-creating-desktop-layout)   [Part 5 - Designing a Touch Layout →](05-designing-touch-layout)
\ No newline at end of file From e08247d4f6b24d0e63a6bebb7b4b349b2a662ca7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Mar 2026 00:29:09 +0000 Subject: [PATCH 19/45] chore(deps): bump tar Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.10 to 7.5.11. - [Release notes](https://github.com/isaacs/node-tar/releases) - [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md) - [Commits](https://github.com/isaacs/node-tar/compare/v7.5.10...v7.5.11) --- updated-dependencies: - dependency-name: tar dependency-version: 7.5.11 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- .../src/win32/trayicon/addon-src/package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/developer/src/server/src/win32/trayicon/addon-src/package-lock.json b/developer/src/server/src/win32/trayicon/addon-src/package-lock.json index 246f1b5ffe..3b320611f1 100644 --- a/developer/src/server/src/win32/trayicon/addon-src/package-lock.json +++ b/developer/src/server/src/win32/trayicon/addon-src/package-lock.json @@ -642,9 +642,9 @@ } }, "node_modules/tar": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.10.tgz", - "integrity": "sha512-8mOPs1//5q/rlkNSPcCegA6hiHJYDmSLEI8aMH/CdSQJNWztHC9WHNam5zdQlfpTwB9Xp7IBEsHfV5LKMJGVAw==", + "version": "7.5.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.11.tgz", + "integrity": "sha512-ChjMH33/KetonMTAtpYdgUFr0tbz69Fp2v7zWxQfYZX4g5ZN2nOBXm1R2xyA+lMIKrLKIoKAwFj93jE/avX9cQ==", "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", @@ -1166,9 +1166,9 @@ } }, "tar": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.10.tgz", - "integrity": "sha512-8mOPs1//5q/rlkNSPcCegA6hiHJYDmSLEI8aMH/CdSQJNWztHC9WHNam5zdQlfpTwB9Xp7IBEsHfV5LKMJGVAw==", + "version": "7.5.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.11.tgz", + "integrity": "sha512-ChjMH33/KetonMTAtpYdgUFr0tbz69Fp2v7zWxQfYZX4g5ZN2nOBXm1R2xyA+lMIKrLKIoKAwFj93jE/avX9cQ==", "requires": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", From 4a16a608ae411e4ed8b869a56e6d8bdd8cb37176 Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Thu, 12 Mar 2026 12:39:28 +0100 Subject: [PATCH 20/45] chore(linux): Update debian changelog (cherry picked from commit ff68125ac4e4115e12fc68aeb7153b8d21ac126b) --- linux/debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/linux/debian/changelog b/linux/debian/changelog index 516340d09b..94958e3690 100644 --- a/linux/debian/changelog +++ b/linux/debian/changelog @@ -1,3 +1,9 @@ +keyman (18.0.248-1) unstable; urgency=medium + + * New upstream release. + + -- Eberhard Beilharz Thu, 12 Mar 2026 12:39:18 +0100 + keyman (18.0.247-1) unstable; urgency=medium * New upstream release. From 9c6b4e2c5cb6373ce09338e6842d69fffb017181 Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Thu, 12 Mar 2026 17:57:40 +0100 Subject: [PATCH 21/45] =?UTF-8?q?chore(linux):=20fix=20dependency=20of=20D?= =?UTF-8?q?ebian=20test=20suite=20=F0=9F=8D=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The test suite had a dependency on the deprecated `pkg-config`. This change replaces this with `pkgconf`. This fixes a lintian warning. Cherry-pick-of: #15734 Test-bot: skip --- linux/debian/tests/control | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linux/debian/tests/control b/linux/debian/tests/control index 9163c8c213..695494d739 100644 --- a/linux/debian/tests/control +++ b/linux/debian/tests/control @@ -1,5 +1,5 @@ Tests: test-build test-gnome-cli test-ibus-cli Depends: @, build-essential, - pkg-config, + pkgconf, Architecture: amd64 arm64 armel armhf i386 loong64 mips64el mipsel ppc64el riscv64 From 1c5dbe8cafcfc957f616e1f012121bd04c99af48 Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Thu, 12 Mar 2026 18:15:09 +0100 Subject: [PATCH 22/45] docs(core): improve keyhandling doc This improves the keyhandling doc according to the code review suggestions in #15629. Follows: #15629 Build-bot: skip Test-bot: skip --- core/docs/api/keyhandling.md | 45 +++++++++++++++++------------------- 1 file changed, 21 insertions(+), 24 deletions(-) diff --git a/core/docs/api/keyhandling.md b/core/docs/api/keyhandling.md index 6dcc3177b0..76576b56d8 100644 --- a/core/docs/api/keyhandling.md +++ b/core/docs/api/keyhandling.md @@ -1,42 +1,39 @@ # Key Handling -For each key press the processor will called twice, for the key down event -as well as for the key up event. Depending on the type of key pressed the -processor might handle the key itself or pass it on to the application. -The value of `emit_keystroke` in `km_core_actions` struct tells if the -processor handled the key (`emit_keystroke=0`) or not (`emit_keystroke=1`). -It is important that the same value gets set for both key down and key up -events, otherwise the application might miss some events which then looks -to the user like keys are stuck. +While Keyman Core does not generally emit actions from key up events, +the `emit_keystroke` value for a key up event will match the corresponding +key down event, in order to avoid 'stuck key' scenarios'. Usually the processor won't handle any frame keys and let the application deal with it. This allows shortcut keys like Ctrl+C -to work. The only exception is the Backspace key which is -handled internally if enough context is available. Regular keys will be -handled by the processor. +to work. One exception is the Backspace key which is +handled internally if enough context is available. Keyboards can define +rules for other frame keys, e.g. Ctrl+Key which are then +also handled internally. Regular keys will be handled by the processor. Note that there is a difference between CLDR/LDML and KMN keyboards if there are no rules/transforms defined for a key: KMN keyboards will output the cap value of the key (e.g. pressing a will output `a` if no rule is defined), whereas CLDR/LDML keyboards will suppress -any output for that key. +any output for that key. However, `km_core_actions.emit_keystroke` will +be `FALSE` for both KMN and CLR/LDML keyboards. The following table lists the state of `km_core_actions.emit_keystroke` on return of `km_core_process_event` when the following type of key is pressed: -|Type | KeyDown | KeyUp | -|-----------------------------|---------------|----------| -|Key with rule | FALSE | FALSE | -|Key w/o rule | FALSE | FALSE | -|Framekeys: | | | -|Enter | TRUE | TRUE | -|Backspace¹ | FALSE | FALSE | -|Backspace² | TRUE | TRUE | -|Ctrl+Key | TRUE | TRUE | -|Modifier key Shift| TRUE | TRUE | -|Modifier key Ctrl | TRUE | TRUE | -|Modifier key LAlt | TRUE | TRUE | +|Type | KeyDown/Up | +|-----------------------------|------------| +|Core key with rule | FALSE | +|Core key w/o rule | FALSE | +|Framekeys: | | +|Enter | TRUE | +|Backspace¹ | FALSE | +|Backspace² | TRUE | +|Ctrl+Key | TRUE | +|Modifier key Shift| TRUE | +|Modifier key Ctrl | TRUE | +|Modifier key LAlt | TRUE | 1: context available
2: without or with empty context From 0a896861c8ba3ffffc2d553977b192133c62f4f7 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Fri, 13 Mar 2026 07:41:03 +0100 Subject: [PATCH 23/45] docs: address review comments Co-authored-by: Eberhard Beilharz --- .../touch-keyboard-tutorial/gestures.md | 2 +- .../develop/touch-keyboard-tutorial/index.md | 2 +- .../making-touch-keyboard.md | 2 +- .../help/guides/develop/tutorial/step-1.md | 2 +- .../help/guides/develop/tutorial/step-2.md | 2 +- .../help/guides/develop/tutorial/step-3.md | 2 +- .../help/guides/develop/tutorial/step-4.md | 2 +- .../help/guides/develop/tutorial/step-5.md | 2 +- .../help/guides/develop/tutorial/step-6.md | 2 +- .../help/guides/develop/tutorial/step-7.md | 2 +- .../help/guides/develop/tutorial/step-8.md | 2 +- .../help/guides/develop/tutorial/step-9.md | 2 +- .../guides/distribute/install-kmp-android.md | 2 +- .../help/guides/distribute/install-kmp-ios.md | 2 +- .../docs/help/guides/distribute/packages.md | 2 +- .../help/guides/distribute/tutorial/index.md | 2 +- .../help/guides/distribute/tutorial/step-1.md | 2 +- .../help/guides/distribute/tutorial/step-2.md | 2 +- .../help/guides/distribute/tutorial/step-3.md | 2 +- .../help/guides/distribute/tutorial/step-4.md | 2 +- .../help/guides/distribute/tutorial/step-5.md | 2 +- .../help/guides/distribute/tutorial/step-6.md | 2 +- .../docs/help/reference/file-types/kps.md | 29 ++++++++++--------- 23 files changed, 37 insertions(+), 36 deletions(-) diff --git a/developer/docs/help/guides/develop/touch-keyboard-tutorial/gestures.md b/developer/docs/help/guides/develop/touch-keyboard-tutorial/gestures.md index 0b6ffea441..7505708ee1 100644 --- a/developer/docs/help/guides/develop/touch-keyboard-tutorial/gestures.md +++ b/developer/docs/help/guides/develop/touch-keyboard-tutorial/gestures.md @@ -2,4 +2,4 @@ redirect: .. --- -(Removed in v19) \ No newline at end of file +(Replaced by new walkthrough in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/touch-keyboard-tutorial/index.md b/developer/docs/help/guides/develop/touch-keyboard-tutorial/index.md index 0b6ffea441..7505708ee1 100644 --- a/developer/docs/help/guides/develop/touch-keyboard-tutorial/index.md +++ b/developer/docs/help/guides/develop/touch-keyboard-tutorial/index.md @@ -2,4 +2,4 @@ redirect: .. --- -(Removed in v19) \ No newline at end of file +(Replaced by new walkthrough in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/touch-keyboard-tutorial/making-touch-keyboard.md b/developer/docs/help/guides/develop/touch-keyboard-tutorial/making-touch-keyboard.md index 0b6ffea441..7505708ee1 100644 --- a/developer/docs/help/guides/develop/touch-keyboard-tutorial/making-touch-keyboard.md +++ b/developer/docs/help/guides/develop/touch-keyboard-tutorial/making-touch-keyboard.md @@ -2,4 +2,4 @@ redirect: .. --- -(Removed in v19) \ No newline at end of file +(Replaced by new walkthrough in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/tutorial/step-1.md b/developer/docs/help/guides/develop/tutorial/step-1.md index 0b6ffea441..7505708ee1 100644 --- a/developer/docs/help/guides/develop/tutorial/step-1.md +++ b/developer/docs/help/guides/develop/tutorial/step-1.md @@ -2,4 +2,4 @@ redirect: .. --- -(Removed in v19) \ No newline at end of file +(Replaced by new walkthrough in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/tutorial/step-2.md b/developer/docs/help/guides/develop/tutorial/step-2.md index aed745dd57..5e2725a24e 100644 --- a/developer/docs/help/guides/develop/tutorial/step-2.md +++ b/developer/docs/help/guides/develop/tutorial/step-2.md @@ -2,4 +2,4 @@ redirect: . --- -(Removed in v19) \ No newline at end of file +(Replaced by new walkthrough in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/tutorial/step-3.md b/developer/docs/help/guides/develop/tutorial/step-3.md index aed745dd57..5e2725a24e 100644 --- a/developer/docs/help/guides/develop/tutorial/step-3.md +++ b/developer/docs/help/guides/develop/tutorial/step-3.md @@ -2,4 +2,4 @@ redirect: . --- -(Removed in v19) \ No newline at end of file +(Replaced by new walkthrough in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/tutorial/step-4.md b/developer/docs/help/guides/develop/tutorial/step-4.md index aed745dd57..5e2725a24e 100644 --- a/developer/docs/help/guides/develop/tutorial/step-4.md +++ b/developer/docs/help/guides/develop/tutorial/step-4.md @@ -2,4 +2,4 @@ redirect: . --- -(Removed in v19) \ No newline at end of file +(Replaced by new walkthrough in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/tutorial/step-5.md b/developer/docs/help/guides/develop/tutorial/step-5.md index aed745dd57..5e2725a24e 100644 --- a/developer/docs/help/guides/develop/tutorial/step-5.md +++ b/developer/docs/help/guides/develop/tutorial/step-5.md @@ -2,4 +2,4 @@ redirect: . --- -(Removed in v19) \ No newline at end of file +(Replaced by new walkthrough in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/tutorial/step-6.md b/developer/docs/help/guides/develop/tutorial/step-6.md index aed745dd57..5e2725a24e 100644 --- a/developer/docs/help/guides/develop/tutorial/step-6.md +++ b/developer/docs/help/guides/develop/tutorial/step-6.md @@ -2,4 +2,4 @@ redirect: . --- -(Removed in v19) \ No newline at end of file +(Replaced by new walkthrough in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/tutorial/step-7.md b/developer/docs/help/guides/develop/tutorial/step-7.md index aed745dd57..5e2725a24e 100644 --- a/developer/docs/help/guides/develop/tutorial/step-7.md +++ b/developer/docs/help/guides/develop/tutorial/step-7.md @@ -2,4 +2,4 @@ redirect: . --- -(Removed in v19) \ No newline at end of file +(Replaced by new walkthrough in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/tutorial/step-8.md b/developer/docs/help/guides/develop/tutorial/step-8.md index aed745dd57..5e2725a24e 100644 --- a/developer/docs/help/guides/develop/tutorial/step-8.md +++ b/developer/docs/help/guides/develop/tutorial/step-8.md @@ -2,4 +2,4 @@ redirect: . --- -(Removed in v19) \ No newline at end of file +(Replaced by new walkthrough in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/develop/tutorial/step-9.md b/developer/docs/help/guides/develop/tutorial/step-9.md index aed745dd57..5e2725a24e 100644 --- a/developer/docs/help/guides/develop/tutorial/step-9.md +++ b/developer/docs/help/guides/develop/tutorial/step-9.md @@ -2,4 +2,4 @@ redirect: . --- -(Removed in v19) \ No newline at end of file +(Replaced by new walkthrough in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/distribute/install-kmp-android.md b/developer/docs/help/guides/distribute/install-kmp-android.md index aed745dd57..5e2725a24e 100644 --- a/developer/docs/help/guides/distribute/install-kmp-android.md +++ b/developer/docs/help/guides/distribute/install-kmp-android.md @@ -2,4 +2,4 @@ redirect: . --- -(Removed in v19) \ No newline at end of file +(Replaced by new walkthrough in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/distribute/install-kmp-ios.md b/developer/docs/help/guides/distribute/install-kmp-ios.md index aed745dd57..5e2725a24e 100644 --- a/developer/docs/help/guides/distribute/install-kmp-ios.md +++ b/developer/docs/help/guides/distribute/install-kmp-ios.md @@ -2,4 +2,4 @@ redirect: . --- -(Removed in v19) \ No newline at end of file +(Replaced by new walkthrough in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/distribute/packages.md b/developer/docs/help/guides/distribute/packages.md index aed745dd57..5e2725a24e 100644 --- a/developer/docs/help/guides/distribute/packages.md +++ b/developer/docs/help/guides/distribute/packages.md @@ -2,4 +2,4 @@ redirect: . --- -(Removed in v19) \ No newline at end of file +(Replaced by new walkthrough in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/distribute/tutorial/index.md b/developer/docs/help/guides/distribute/tutorial/index.md index 0b6ffea441..7505708ee1 100644 --- a/developer/docs/help/guides/distribute/tutorial/index.md +++ b/developer/docs/help/guides/distribute/tutorial/index.md @@ -2,4 +2,4 @@ redirect: .. --- -(Removed in v19) \ No newline at end of file +(Replaced by new walkthrough in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/distribute/tutorial/step-1.md b/developer/docs/help/guides/distribute/tutorial/step-1.md index 0b6ffea441..7505708ee1 100644 --- a/developer/docs/help/guides/distribute/tutorial/step-1.md +++ b/developer/docs/help/guides/distribute/tutorial/step-1.md @@ -2,4 +2,4 @@ redirect: .. --- -(Removed in v19) \ No newline at end of file +(Replaced by new walkthrough in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/distribute/tutorial/step-2.md b/developer/docs/help/guides/distribute/tutorial/step-2.md index 0b6ffea441..7505708ee1 100644 --- a/developer/docs/help/guides/distribute/tutorial/step-2.md +++ b/developer/docs/help/guides/distribute/tutorial/step-2.md @@ -2,4 +2,4 @@ redirect: .. --- -(Removed in v19) \ No newline at end of file +(Replaced by new walkthrough in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/distribute/tutorial/step-3.md b/developer/docs/help/guides/distribute/tutorial/step-3.md index 0b6ffea441..7505708ee1 100644 --- a/developer/docs/help/guides/distribute/tutorial/step-3.md +++ b/developer/docs/help/guides/distribute/tutorial/step-3.md @@ -2,4 +2,4 @@ redirect: .. --- -(Removed in v19) \ No newline at end of file +(Replaced by new walkthrough in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/distribute/tutorial/step-4.md b/developer/docs/help/guides/distribute/tutorial/step-4.md index 0b6ffea441..7505708ee1 100644 --- a/developer/docs/help/guides/distribute/tutorial/step-4.md +++ b/developer/docs/help/guides/distribute/tutorial/step-4.md @@ -2,4 +2,4 @@ redirect: .. --- -(Removed in v19) \ No newline at end of file +(Replaced by new walkthrough in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/distribute/tutorial/step-5.md b/developer/docs/help/guides/distribute/tutorial/step-5.md index 0b6ffea441..7505708ee1 100644 --- a/developer/docs/help/guides/distribute/tutorial/step-5.md +++ b/developer/docs/help/guides/distribute/tutorial/step-5.md @@ -2,4 +2,4 @@ redirect: .. --- -(Removed in v19) \ No newline at end of file +(Replaced by new walkthrough in v19) \ No newline at end of file diff --git a/developer/docs/help/guides/distribute/tutorial/step-6.md b/developer/docs/help/guides/distribute/tutorial/step-6.md index 0b6ffea441..7505708ee1 100644 --- a/developer/docs/help/guides/distribute/tutorial/step-6.md +++ b/developer/docs/help/guides/distribute/tutorial/step-6.md @@ -2,4 +2,4 @@ redirect: .. --- -(Removed in v19) \ No newline at end of file +(Replaced by new walkthrough in v19) \ No newline at end of file diff --git a/developer/docs/help/reference/file-types/kps.md b/developer/docs/help/reference/file-types/kps.md index 11fa4b7f14..5f2415a40c 100644 --- a/developer/docs/help/reference/file-types/kps.md +++ b/developer/docs/help/reference/file-types/kps.md @@ -27,8 +27,8 @@ help into a simple, single file that is easy for an end-user to install. A lexical model package file contains a single lexical model, optionally also fonts and/or documentation. -Internally, as well as your own files, the package file will contain metadata -file "kmp.json", which lists the details Keyman needs to install the package. +In addition to your own files, the package will contain a metadata file named +"kmp.json", which lists the details Keyman requires for installation. The package file is a ZIP compatible archive. > [!Tip] You can distribute keyboards and lexical models in package files, but @@ -50,15 +50,15 @@ for uninstallation. On Windows, the context menu for a package file has one additional entry: "Install". -#### Keyman for mac +#### Keyman for macOS -Keyman for mac can install package files with fonts and keyboards, and shortcuts -in the package will be available through the keyboard's entry in Keyman -Configuration. +Keyman for macOS can install package files with fonts and keyboards, and +shortcuts in the package will be available through the keyboard's entry in +Keyman Configuration. #### Keyman for Linux -Keyman for mac can install package files with fonts and keyboards. +Keyman for Linux can install package files with fonts and keyboards. #### Keyman for Android and Keyman for iPhone and iPad @@ -83,7 +83,7 @@ following files and file types are recognized by the package installer: \*.js (mobile only) : Touch layout Keyboard files. When Keyman mobile applications install a keyboard package, all included keyboards will be installed as a - group. With Keyman Developer 10, the keyboard version information is + group. With Keyman Developer 10+, the keyboard version information is in kmp.json, and no longer within the JS file names. welcome.htm @@ -97,16 +97,15 @@ readme.htm metadata about the package, to allow the user to determine if they wish to continue installation of the package. -kmp.inf (Legacy versions of Keyman) +kmp.inf (required by Keyman 9 and earlier versions) : A Windows .ini format file that lists each of the files in the package, together with metadata. kmp.json -: A JSON format file contains metadata for the keyboard package such - as package version, keyboard versions, and lists each of the files +: A JSON format file containing metadata for the keyboard package such + as package version, keyboard versions, and listing each of the files in the package. For more explanation of the structure of the JSON - file, please read the - [metadata](metadata) documentation. + file, please read the [metadata](metadata) documentation. \*.ttf, \*.otf, \*.ttc : Truetype font files that will be installed with the package, and @@ -119,7 +118,9 @@ kmp.json > [!TIP] > Read [File Layout](../file-layout) to know which files to include or exclude in the project folder. -The best way to distribute packages is to distribute it through Keyman Cloud: +The best way to distribute a package is to distribute it through Keyman Cloud, +which makes it available on keyman.com and in the Keyboard Download interface +inside the Keyman apps: * [Share a keyboard package](/developer/keyboards) * [Share a lexical model package](/developer/lexical-models) From e8214b2ad6b80b50f5bef564a36142d0531ee9c5 Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Fri, 13 Mar 2026 09:53:52 +0100 Subject: [PATCH 24/45] docs(linux): add documentation how input methods work in GTK Build-bot: skip Test-bot: skip --- linux/docs/internal/gtk-input-methods.md | 132 +++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 linux/docs/internal/gtk-input-methods.md diff --git a/linux/docs/internal/gtk-input-methods.md b/linux/docs/internal/gtk-input-methods.md new file mode 100644 index 0000000000..f340d72268 --- /dev/null +++ b/linux/docs/internal/gtk-input-methods.md @@ -0,0 +1,132 @@ +# Input Methods in GTK + +This document describes how Keyman is connected to a client app, in other words +how a keypress in the app ends up being processed by the Keyman engine. + +For text input, GTK (or rather the app) will add input method support to a widget. +How the input method gets loaded depends on the GTK version. + +IBus provides input modules for GTK 2, GTK 3, GTK 4, X11, and Wayland. +However, the Wayland one is not used with Gnome because GTK provides +its own implementation. + +Which input modules are available depends on the GTK version. Apps that +don't use the Gnome/GTK framework use different ways for input method +support. + +## GTK 4 + +```mermaid +flowchart LR + subgraph GTK + app(application) + im-module["im-ibus + (IBusIMContext)"] + app --- im-module + end + + subgraph ibus[ibus-daemon] + direction LR + IBusInputContext <--> IBusEngine + end + + subgraph keyman + ibus-engine-keyman + end + + GTK <--> ibus <--> keyman + + style app color:#FFFFFF, stroke:#00C853, fill:#00C853 +``` + +The im-module implements a [GIOExtensionPoint](https://docs.gtk.org/gio/struct.IOExtensionPoint.html) +"gtk-im-module". The type extends `GtkIMContext`. +When loading the app, GTK dynamically loads and starts the extension +specified by the environment variable `GTK_IM_MODULE` (or the default which is +probably the one with the highest priority). + +External modules are located in `/usr/lib/x86_64-linux-gnu/gtk-4.0/4.0.0/immodules` +and named `lib*.so`. + +Each module has a priority, a name and the type that implements it. + +GTK4 has built-in support for Wayland (`GtkIMContextWayland`), Broadway +(`GtkIMContextBroadway`, irrelevant for Keyman) and gtk-im-context-simple +(`GtkIMContextSimple`, irrelevant for Keyman). `GtkIMContextWayland` is +implemented as part of GTK 4, the source code can be found in +. + +The input method for ibus is implemented as an external module +(type `IBusIMContext`). Source code is in +. + +The IBus communication between `IBusIMContext`, ibus-daemon and the ibus +engine (aka Keyman) happens with DBus messages on a separate IBus DBus +instance. + +## GTK 2/GTK 3 + +With older GTK versions basically the same components are involved, +although a different mechanism to discover and load the +im-modules is used. + +GTK caches the available modules in a module database located in +`/usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules.cache` or whereever +the `GTK_IM_MODULE_FILE` environment variable points. This database is +read on application startup. + +For each module the database contains an id, the name, the path, i18n domain(?) +and default locales. + +GTK then determines what input module to load based on the `GTK_IM_MODULE` +environment variable (which can contain more than one module separated by +colons) or the `XSETTINGS` `gtk-im-module` property. It then checks that +the currently running display type is compatible with the module, and that +the current locale matches the locales supported by the module. An exact match +(`en_US` vs `en_US`) gets 4 points, a match of the language (`en_US` vs `en`) +gets 3 points, a match with a different region (`en_US` vs `en_UK`) 2 points, +and a wildcard (`en_US` vs `*`) 1 point. + +Each input module implements a subclass of `GTKIMContext` plus the 4 required +entry points: + +- `im_module_init()` - Initialize module +- `im_module_list()` - Describe available contexts +- `im_module_create()` - Create context instance +- `im_module_exit()` - Cleanup on unload + +GTK uses `GModule` to dynamically load the module's `.so` file and then calls +`im_module_init()` on the module, followed by `im_module_create()` to instantiate +the actual `GtkIMContext` subclass. + +If no module matches or loading fails, GTK falls back to `GtkIMContextSimple`. + +GTK3 provides support for several input methods, more than with GTK4. Those +can be found in . +Among the built-in modules are `im-wayland` (for Wayland), `im-xim` (for X11), +`im-thai` (for Thai), and `im-ime` (for Windows). + +The input method for ibus is implemented as an external module +(type `IBusIMContext`). Source code is in +. + +All modules are located in `/usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules` +and named `*.so`, e.g. `im-ibus.so`. + +After installing a new module the database needs to be updated with +`sudo /usr/lib/x86_64-linux-gnu/libgtk-3-0t64/gtk-query-immodules-3.0 --update-cache`. + +## Tips + +- GTK has a built-in + [inspection/debugging tool](https://developer.gnome.org/documentation/tools/inspector.html) + which can be opened with Ctrl+Shift+I, or + Ctrl+Shift+D, or by setting the + environment variable `GTK_DEBUG=interactive`. +- Available GTK3 IM modules can be listed with + `/usr/lib/x86_64-linux-gnu/libgtk-3-0t64/gtk-query-immodules-3.0` or by + looking at `/usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules.cache`. + +## Links + +- [GTK4 Input Handling](https://docs.gtk.org/gtk4/input-handling.html) \ No newline at end of file From d378aa6bf03357ec223a1c18c800a5baeb630dca Mon Sep 17 00:00:00 2001 From: Keyman Build Agent Date: Fri, 13 Mar 2026 13:01:21 -0500 Subject: [PATCH 25/45] auto: increment master version to 19.0.216 Test-bot: skip Build-bot: skip --- HISTORY.md | 5 +++++ VERSION.md | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/HISTORY.md b/HISTORY.md index 45405b8d55..8a045c92e0 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,5 +1,10 @@ # Keyman Version History +## 19.0.215 alpha 2026-03-13 + +* chore(linux): fix dependency of Debian test suite (#15735) +* chore(linux): Update debian changelog (#15732) + ## 19.0.214 alpha 2026-03-12 * chore(linux): Update debian changelog (#15718) diff --git a/VERSION.md b/VERSION.md index 9daf8a196e..78ca871179 100644 --- a/VERSION.md +++ b/VERSION.md @@ -1 +1 @@ -19.0.215 \ No newline at end of file +19.0.216 \ No newline at end of file From 22ab6c40257756ae123abf7716291b9e9c519008 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Mon, 16 Mar 2026 20:32:56 +1100 Subject: [PATCH 26/45] maint(resources): try meson 1.10.1 Test-bot: skip --- .github/workflows/core-arm64-windows-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/core-arm64-windows-test.yml b/.github/workflows/core-arm64-windows-test.yml index 237e60d4ef..c8b7dd8a13 100644 --- a/.github/workflows/core-arm64-windows-test.yml +++ b/.github/workflows/core-arm64-windows-test.yml @@ -119,7 +119,7 @@ jobs: - name: Install meson shell: bash run: | - pip3 install --user meson + pip3 install --user meson==1.10.1 - name: Run test shell: bash From 50a0333ca3d497d1db170645bbfaae5512379b23 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Mon, 16 Mar 2026 15:13:28 +0100 Subject: [PATCH 27/45] maint(ios): clean carthage before builds This change is in response to inconsistent build behavior where we observed better outcomes after manually cleaning the Carthage cache. The cache folder had clearly also become very large over time so this has the side benefit of clearing up space on the build agents. It is unclear how much time this will cost in the build, but we don't suppose it will make them dramatically slower. Note: the same change has been applied in TC for stable-18.0 builds. Test-bot: skip --- resources/teamcity/includes/tc-mac.inc.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/resources/teamcity/includes/tc-mac.inc.sh b/resources/teamcity/includes/tc-mac.inc.sh index 0e9c18013c..a138789cf5 100644 --- a/resources/teamcity/includes/tc-mac.inc.sh +++ b/resources/teamcity/includes/tc-mac.inc.sh @@ -12,9 +12,13 @@ ba_mac_unlock_keychain() { } ba_mac_clean_xcode_derived_data() { - builder_echo start "clean" "Cleaning XCode DerivedData mess" + builder_echo start "clean" "Cleaning XCode DerivedData and Carthage cache mess" rm -rf "${HOME}/Library/Developer/Xcode/DerivedData" - builder_echo end "clean" success "Finished cleaning XCode DerivedData mess" + + # https://stackoverflow.com/a/45504898/1836776 + rm -rf "${HOME}/Library/Caches/org.carthage.CarthageKit" + + builder_echo end "clean" success "Finished cleaning XCode DerivedData and Carthage cache mess" } ba_mac_unmount_volumes_keyman() { From d98efe1ac9695c11205cc482bfa6f627aa9789ff Mon Sep 17 00:00:00 2001 From: Keyman Build Agent Date: Mon, 16 Mar 2026 13:02:02 -0500 Subject: [PATCH 28/45] auto: increment master version to 19.0.217 Test-bot: skip Build-bot: skip --- HISTORY.md | 9 +++++++++ VERSION.md | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/HISTORY.md b/HISTORY.md index 8a045c92e0..0973f37105 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,5 +1,14 @@ # Keyman Version History +## 19.0.216 alpha 2026-03-16 + +* docs: tweak walkthrough content (#15712) +* chore(deps): bump tar from 7.5.10 to 7.5.11 in /developer/src/server/src/win32/trayicon/addon-src (#15723) +* docs(linux): add documentation how input methods work in GTK (#15749) +* docs(core): improve keyhandling doc (#15736) +* maint(resources): try meson 1.10.1 (#15754) +* maint(ios): clean carthage before builds (#15757) + ## 19.0.215 alpha 2026-03-13 * chore(linux): fix dependency of Debian test suite (#15735) diff --git a/VERSION.md b/VERSION.md index 78ca871179..45ab25dda9 100644 --- a/VERSION.md +++ b/VERSION.md @@ -1 +1 @@ -19.0.216 \ No newline at end of file +19.0.217 \ No newline at end of file From 6395caa783b682eef956641c488c75f58e44f92c Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Mon, 16 Mar 2026 14:08:07 +0700 Subject: [PATCH 29/45] maint(common): Update GitHub actions/checkout to v5.0.1 --- .github/workflows/api-verification.yml | 2 +- .github/workflows/build-test-publish-docker.yml | 4 ++-- .github/workflows/core-arm64-windows-test.yml | 2 +- .github/workflows/crowdin.yml | 2 +- .github/workflows/deb-packaging.yml | 6 +++--- .github/workflows/npm-publish.yml | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/api-verification.yml b/.github/workflows/api-verification.yml index af6bc682dc..b51c6be2c8 100644 --- a/.github/workflows/api-verification.yml +++ b/.github/workflows/api-verification.yml @@ -55,7 +55,7 @@ jobs: - name: Checkout if: steps.environment_step.outputs.SKIP_API_CHECK != 'true' - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #v4.2.2 + uses: actions/checkout@v5.0.1 with: ref: '${{ steps.environment_step.outputs.GIT_SHA }}' fetch-depth: 0 diff --git a/.github/workflows/build-test-publish-docker.yml b/.github/workflows/build-test-publish-docker.yml index 3c85d4ff91..e0fa8f9a2c 100644 --- a/.github/workflows/build-test-publish-docker.yml +++ b/.github/workflows/build-test-publish-docker.yml @@ -41,7 +41,7 @@ jobs: steps: - name: Checkout repository id: checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5.0.1 - name: Build Docker images id: build run: | @@ -67,7 +67,7 @@ jobs: steps: - name: Checkout repository id: checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5.0.1 - name: Test Docker images id: test diff --git a/.github/workflows/core-arm64-windows-test.yml b/.github/workflows/core-arm64-windows-test.yml index c8b7dd8a13..54d6f3a99f 100644 --- a/.github/workflows/core-arm64-windows-test.yml +++ b/.github/workflows/core-arm64-windows-test.yml @@ -40,7 +40,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #v4.2.2 + uses: actions/checkout@v5.0.1 with: ref: '${{ github.event.client_payload.buildSha }}' diff --git a/.github/workflows/crowdin.yml b/.github/workflows/crowdin.yml index 7503d51d21..386f72d293 100644 --- a/.github/workflows/crowdin.yml +++ b/.github/workflows/crowdin.yml @@ -13,7 +13,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5.0.1 - name: crowdin action uses: crowdin/github-action@v2.7.0 diff --git a/.github/workflows/deb-packaging.yml b/.github/workflows/deb-packaging.yml index 36bfd0d0ce..25c91031c3 100644 --- a/.github/workflows/deb-packaging.yml +++ b/.github/workflows/deb-packaging.yml @@ -43,7 +43,7 @@ jobs: PRERELEASE_TAG: ${{ steps.prerelease_tag.outputs.PRERELEASE_TAG }} steps: - name: Checkout - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #v4.2.2 + uses: actions/checkout@v5.0.1 with: ref: '${{ github.event.client_payload.buildSha }}' @@ -140,7 +140,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #v4.2.2 + uses: actions/checkout@v5.0.1 with: ref: '${{ github.event.client_payload.buildSha }}' sparse-checkout: '.github/actions/' @@ -166,7 +166,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #v4.2.2 + uses: actions/checkout@v5.0.1 with: ref: '${{ github.event.client_payload.buildSha }}' sparse-checkout: '.github/actions/' diff --git a/.github/workflows/npm-publish.yml b/.github/workflows/npm-publish.yml index fc94cc688e..d78e2d8e59 100644 --- a/.github/workflows/npm-publish.yml +++ b/.github/workflows/npm-publish.yml @@ -50,7 +50,7 @@ jobs: fi - name: Checkout - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #v4.2.2 + uses: actions/checkout@v5.0.1 with: ref: '${{ github.event.client_payload.buildSha }}' From 9697e7d886f4feb08e8855b313beaf1573889ff2 Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Tue, 17 Mar 2026 09:27:24 +0700 Subject: [PATCH 30/45] maint(common): Update actions/(download|upload)-artifact * download-artifact@v8.0.1 * upload-artifact@v7.0.0 --- .github/actions/build-binary-packages/action.yml | 4 ++-- .github/workflows/api-verification.yml | 2 +- .github/workflows/deb-packaging.yml | 10 +++++----- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/actions/build-binary-packages/action.yml b/.github/actions/build-binary-packages/action.yml index e764a26ac7..23c01c545a 100644 --- a/.github/actions/build-binary-packages/action.yml +++ b/.github/actions/build-binary-packages/action.yml @@ -25,7 +25,7 @@ runs: using: 'composite' steps: - name: Download Artifacts - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 + uses: actions/download-artifact@v8.0.1 with: name: keyman-srcpkg path: artifacts/keyman-srcpkg @@ -49,7 +49,7 @@ runs: echo '```' >> $GITHUB_STEP_SUMMARY - name: Store binary packages - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + uses: actions/upload-artifact@v7.0.0 with: name: keyman-binarypkgs-${{ inputs.dist }}_${{ inputs.arch }} path: | diff --git a/.github/workflows/api-verification.yml b/.github/workflows/api-verification.yml index b51c6be2c8..5f85e8bbbc 100644 --- a/.github/workflows/api-verification.yml +++ b/.github/workflows/api-verification.yml @@ -84,7 +84,7 @@ jobs: - name: Archive .symbols file if: steps.environment_step.outputs.SKIP_API_CHECK != 'true' && always() - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + uses: actions/upload-artifact@v7.0.0 with: name: libkeymancore.symbols path: ${{ github.workspace }}/keyman/linux/debian/tmp/DEBIAN/symbols diff --git a/.github/workflows/deb-packaging.yml b/.github/workflows/deb-packaging.yml index 25c91031c3..013713bc44 100644 --- a/.github/workflows/deb-packaging.yml +++ b/.github/workflows/deb-packaging.yml @@ -121,7 +121,7 @@ jobs: echo "- $(find . -name keyman_\*.dsc)" >> $GITHUB_STEP_SUMMARY - name: Store source package - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + uses: actions/upload-artifact@v7.0.0 with: name: keyman-srcpkg path: | @@ -204,13 +204,13 @@ jobs: sudo rm -rf /usr/share/dotnet - name: Download Source Artifacts - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 + uses: actions/download-artifact@v8.0.1 with: name: keyman-srcpkg path: artifacts - name: Download Binary Artifacts - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 + uses: actions/download-artifact@v8.0.1 with: path: artifacts pattern: keyman-binarypkgs-* @@ -281,7 +281,7 @@ jobs: echo "::endgroup::" - name: Download Artifacts - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 + uses: actions/download-artifact@v8.0.1 with: name: keyman-signedpkgs @@ -343,7 +343,7 @@ jobs: steps: - name: Download Artifacts - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 + uses: actions/download-artifact@v8.0.1 with: path: artifacts pattern: keyman-* From b77be4187ad97c0ebb522fc7b88e4d36e7afb37c Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Tue, 17 Mar 2026 09:28:37 +0700 Subject: [PATCH 31/45] maint(common): Update actions/cache/(restore|save) * actions/cache/restore@v5.0.3 * actions/cache/save@v5.0.3 --- .github/workflows/api-verification.yml | 2 +- .github/workflows/deb-packaging.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/api-verification.yml b/.github/workflows/api-verification.yml index 5f85e8bbbc..d274d50090 100644 --- a/.github/workflows/api-verification.yml +++ b/.github/workflows/api-verification.yml @@ -27,7 +27,7 @@ jobs: steps: - name: Restore artifacts - uses: actions/cache/restore@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 + uses: actions/cache/restore@v5.0.3 with: path: | artifacts diff --git a/.github/workflows/deb-packaging.yml b/.github/workflows/deb-packaging.yml index 013713bc44..c70100d8c6 100644 --- a/.github/workflows/deb-packaging.yml +++ b/.github/workflows/deb-packaging.yml @@ -362,7 +362,7 @@ jobs: echo "SKIP_API_CHECK=${{ github.event.client_payload.skipApiCheck }}" >> artifacts/env - name: Cache artifacts - uses: actions/cache/save@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 + uses: actions/cache/save@v5.0.3 with: path: | artifacts From 6c6b620812df2cb502c29b99d283cb905c35cced Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Tue, 17 Mar 2026 09:29:37 +0700 Subject: [PATCH 32/45] maint(common): Update misc actions * actions/setup-python@v6.2.0 * actions/labeler@v6.0.1 * actions/github-script@v8.0.0 --- .github/workflows/core-arm64-windows-test.yml | 2 +- .github/workflows/labeler.yml | 2 +- .github/workflows/pr-build-status.yml | 72 +++++++++---------- 3 files changed, 38 insertions(+), 38 deletions(-) diff --git a/.github/workflows/core-arm64-windows-test.yml b/.github/workflows/core-arm64-windows-test.yml index 54d6f3a99f..742cce1864 100644 --- a/.github/workflows/core-arm64-windows-test.yml +++ b/.github/workflows/core-arm64-windows-test.yml @@ -64,7 +64,7 @@ jobs: npm -v node -v - - uses: actions/setup-python@v6 + - uses: actions/setup-python@v6.2.0 with: python-version: '3.13' diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml index 42d9f79363..9a60fc9ee9 100644 --- a/.github/workflows/labeler.yml +++ b/.github/workflows/labeler.yml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Update labels based on changed files - uses: actions/labeler@v4 + uses: actions/labeler@v6.0.1 with: repo-token: "${{ secrets.GITHUB_TOKEN }}" - name: Update labels based on PR title diff --git a/.github/workflows/pr-build-status.yml b/.github/workflows/pr-build-status.yml index 978a2b0995..487a58ae5f 100644 --- a/.github/workflows/pr-build-status.yml +++ b/.github/workflows/pr-build-status.yml @@ -1,40 +1,40 @@ # GENERATED FILE - DO NOT EDIT! -# -# Keyman is copyright (C) SIL Global. MIT License. -# -# Do not modify the script in .github/workflows/pr-build-status.yml directly; -# instead work on the sources in resources/build/pr-build-status and use the -# build.sh script to rebuild the .github/workflows/pr-build-status.yml file from -# them. -# -# build.sh will append the relevant portions of -# resources/build/pr-build-status/pr-build-status.mjs to the content in -# resources/build/pr-build-status/pr-build-status.prefix.yml to form the .github -# workflow file. -# -name: Keyman Build Summary -on: - status: - push: - branches-ignore: - - master - - beta - - stable-* - workflow_dispatch: - inputs: - commit: - description: 'Commit sha' - required: true - type: string -jobs: - run_pr_build_status: - name: Summarize build status checks - runs-on: ubuntu-latest - steps: - - name: Check PR build status - id: run_pr_build_status_script - uses: actions/github-script@v7 - with: +# +# Keyman is copyright (C) SIL Global. MIT License. +# +# Do not modify the script in .github/workflows/pr-build-status.yml directly; +# instead work on the sources in resources/build/pr-build-status and use the +# build.sh script to rebuild the .github/workflows/pr-build-status.yml file from +# them. +# +# build.sh will append the relevant portions of +# resources/build/pr-build-status/pr-build-status.mjs to the content in +# resources/build/pr-build-status/pr-build-status.prefix.yml to form the .github +# workflow file. +# +name: Keyman Build Summary +on: + status: + push: + branches-ignore: + - master + - beta + - stable-* + workflow_dispatch: + inputs: + commit: + description: 'Commit sha' + required: true + type: string +jobs: + run_pr_build_status: + name: Summarize build status checks + runs-on: ubuntu-latest + steps: + - name: Check PR build status + id: run_pr_build_status_script + uses: actions/github-script@v8.0.0 + with: script: | // This code is copied out of resources/build/pr-build-status/pr-build-status.mjs // where it is tested. It is copied inline here in order to avoid requiring the From 44a46f5d45bb71c12f168866c95fb4b075755a18 Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Tue, 17 Mar 2026 09:31:00 +0700 Subject: [PATCH 33/45] maint(common): Update actions/checkout * actions/checkout@v6.0.2 --- .github/workflows/api-verification.yml | 2 +- .github/workflows/build-test-publish-docker.yml | 4 ++-- .github/workflows/core-arm64-windows-test.yml | 2 +- .github/workflows/crowdin.yml | 2 +- .github/workflows/deb-packaging.yml | 6 +++--- .github/workflows/npm-publish.yml | 2 +- resources/build/pr-build-status/pr-build-status.prefix.yml | 2 +- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/api-verification.yml b/.github/workflows/api-verification.yml index d274d50090..79e4f8ea52 100644 --- a/.github/workflows/api-verification.yml +++ b/.github/workflows/api-verification.yml @@ -55,7 +55,7 @@ jobs: - name: Checkout if: steps.environment_step.outputs.SKIP_API_CHECK != 'true' - uses: actions/checkout@v5.0.1 + uses: actions/checkout@v6.0.2 with: ref: '${{ steps.environment_step.outputs.GIT_SHA }}' fetch-depth: 0 diff --git a/.github/workflows/build-test-publish-docker.yml b/.github/workflows/build-test-publish-docker.yml index e0fa8f9a2c..7ff6bb0495 100644 --- a/.github/workflows/build-test-publish-docker.yml +++ b/.github/workflows/build-test-publish-docker.yml @@ -41,7 +41,7 @@ jobs: steps: - name: Checkout repository id: checkout - uses: actions/checkout@v5.0.1 + uses: actions/checkout@v6.0.2 - name: Build Docker images id: build run: | @@ -67,7 +67,7 @@ jobs: steps: - name: Checkout repository id: checkout - uses: actions/checkout@v5.0.1 + uses: actions/checkout@v6.0.2 - name: Test Docker images id: test diff --git a/.github/workflows/core-arm64-windows-test.yml b/.github/workflows/core-arm64-windows-test.yml index 742cce1864..a818957a7a 100644 --- a/.github/workflows/core-arm64-windows-test.yml +++ b/.github/workflows/core-arm64-windows-test.yml @@ -40,7 +40,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v5.0.1 + uses: actions/checkout@v6.0.2 with: ref: '${{ github.event.client_payload.buildSha }}' diff --git a/.github/workflows/crowdin.yml b/.github/workflows/crowdin.yml index 386f72d293..7294d3e505 100644 --- a/.github/workflows/crowdin.yml +++ b/.github/workflows/crowdin.yml @@ -13,7 +13,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v5.0.1 + uses: actions/checkout@v6.0.2 - name: crowdin action uses: crowdin/github-action@v2.7.0 diff --git a/.github/workflows/deb-packaging.yml b/.github/workflows/deb-packaging.yml index c70100d8c6..169ff651c1 100644 --- a/.github/workflows/deb-packaging.yml +++ b/.github/workflows/deb-packaging.yml @@ -43,7 +43,7 @@ jobs: PRERELEASE_TAG: ${{ steps.prerelease_tag.outputs.PRERELEASE_TAG }} steps: - name: Checkout - uses: actions/checkout@v5.0.1 + uses: actions/checkout@v6.0.2 with: ref: '${{ github.event.client_payload.buildSha }}' @@ -140,7 +140,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v5.0.1 + uses: actions/checkout@v6.0.2 with: ref: '${{ github.event.client_payload.buildSha }}' sparse-checkout: '.github/actions/' @@ -166,7 +166,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v5.0.1 + uses: actions/checkout@v6.0.2 with: ref: '${{ github.event.client_payload.buildSha }}' sparse-checkout: '.github/actions/' diff --git a/.github/workflows/npm-publish.yml b/.github/workflows/npm-publish.yml index d78e2d8e59..8b49e0b7cd 100644 --- a/.github/workflows/npm-publish.yml +++ b/.github/workflows/npm-publish.yml @@ -50,7 +50,7 @@ jobs: fi - name: Checkout - uses: actions/checkout@v5.0.1 + uses: actions/checkout@v6.0.2 with: ref: '${{ github.event.client_payload.buildSha }}' diff --git a/resources/build/pr-build-status/pr-build-status.prefix.yml b/resources/build/pr-build-status/pr-build-status.prefix.yml index cbeba112a1..cb4c319c19 100644 --- a/resources/build/pr-build-status/pr-build-status.prefix.yml +++ b/resources/build/pr-build-status/pr-build-status.prefix.yml @@ -32,6 +32,6 @@ jobs: steps: - name: Check PR build status id: run_pr_build_status_script - uses: actions/github-script@v7 + uses: actions/github-script@v8.0.0 with: script: | From bb2659e8226ce78e7eb93b9d6361850d77b6e298 Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Tue, 17 Mar 2026 11:52:24 +0700 Subject: [PATCH 34/45] fix(common): Fix labeler.yml syntax --- .github/labeler.yml | 195 ++++++++++++++++++++++++++++++++------------ 1 file changed, 141 insertions(+), 54 deletions(-) diff --git a/.github/labeler.yml b/.github/labeler.yml index fc37bf64b7..2549340624 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -5,86 +5,173 @@ # common ones. The others are commented out. There is still some variance between # folder names and labels; consider this documentation of that ;-) -docs: docs/** +docs: +- changed-files: + - any-glob-to-any-file: 'docs/**' # # Add labels based on changed files using actions/labeler # android/: - - android/** - - resources/teamcity/includes/** - - resources/teamcity/android/** -android/app/: android/KMAPro/** -android/engine/: android/KMEA/** -android/samples/: android/Samples/** + - changed-files: + - any-glob-to-any-file: + - android/** + - resources/teamcity/includes/** + - resources/teamcity/android/** +android/app/: + - changed-files: + - any-glob-to-any-file: + - android/KMAPro/** +android/engine/: + - changed-files: + - any-glob-to-any-file: + - android/KMEA/** +android/samples/: + - changed-files: + - any-glob-to-any-file: + - android/Samples/** common/: - - common/** - - resources/teamcity/includes/** - - resources/teamcity/common/** -common/web/: common/web/** + - changed-files: + - any-glob-to-any-file: + - common/** + - resources/teamcity/includes/** + - resources/teamcity/common/** +common/web/: + - changed-files: + - any-glob-to-any-file: + - common/web/** core/: - - core/** - - resources/teamcity/includes/** - - resources/teamcity/core/** + - changed-files: + - any-glob-to-any-file: + - core/** + - resources/teamcity/includes/** + - resources/teamcity/core/** developer/: - - developer/** - - resources/teamcity/includes/** - - resources/teamcity/developer/** + - changed-files: + - any-glob-to-any-file: + - developer/** + - resources/teamcity/includes/** + - resources/teamcity/developer/** developer/compilers/: - - developer/src/kmc/** - - developer/src/kmcmplib/** - - developer/src/kmc-*/** + - changed-files: + - any-glob-to-any-file: + - developer/src/kmc/** + - developer/src/kmcmplib/** + - developer/src/kmc-*/** developer/ide/: - - developer/src/server/** - - developer/src/tike/** + - changed-files: + - any-glob-to-any-file: + - developer/src/server/** + - developer/src/tike/** ios/: - - ios/** - - resources/teamcity/includes/** - - resources/teamcity/ios/** -ios/app/: ios/keyman/** -ios/engine/: ios/engine/** -ios/samples/: ios/samples/** + - changed-files: + - any-glob-to-any-file: + - ios/** + - resources/teamcity/includes/** + - resources/teamcity/ios/** +ios/app/: + - changed-files: + - any-glob-to-any-file: + - ios/keyman/** +ios/engine/: + - changed-files: + - any-glob-to-any-file: + - ios/engine/** +ios/samples/: + - changed-files: + - any-glob-to-any-file: + - ios/samples/** linux/: - - linux/** - - resources/teamcity/includes/** - - resources/teamcity/linux/** -linux/config/: linux/keyman-config/** -linux/engine/: linux/ibus-keyman/** + - changed-files: + - any-glob-to-any-file: + - linux/** + - resources/teamcity/includes/** + - resources/teamcity/linux/** +linux/config/: + - changed-files: + - any-glob-to-any-file: + - linux/keyman-config/** +linux/engine/: + - changed-files: + - any-glob-to-any-file: + - linux/ibus-keyman/** mac/: - - mac/** - - resources/teamcity/includes/** - - resources/teamcity/mac/** + - changed-files: + - any-glob-to-any-file: + - mac/** + - resources/teamcity/includes/** + - resources/teamcity/mac/** # mac/config/: # mac/engine/: mac/** -oem/: oem/** -oem/fv/: oem/firstvoices/** -oem/fv/android/: oem/firstvoices/android/** -oem/fv/ios/: oem/firstvoices/ios/** -oem/fv/windows/: oem/firstvoices/windows/** +oem/: + - changed-files: + - any-glob-to-any-file: + - oem/** +oem/fv/: + - changed-files: + - any-glob-to-any-file: + - oem/firstvoices/** +oem/fv/android/: + - changed-files: + - any-glob-to-any-file: + - oem/firstvoices/android/** +oem/fv/ios/: + - changed-files: + - any-glob-to-any-file: + - oem/firstvoices/ios/** +oem/fv/windows/: + - changed-files: + - any-glob-to-any-file: + - oem/firstvoices/windows/** -resources/: resources/** +resources/: + - changed-files: + - any-glob-to-any-file: + - resources/** web/: - - web/** - - resources/teamcity/includes/** - - resources/teamcity/web/** + - changed-files: + - any-glob-to-any-file: + - web/** + - resources/teamcity/includes/** + - resources/teamcity/web/** # web/bookmarklet/ -web/engine/: web/source/** -web/ui/: web/source/kmwui* -web/samples/: web/samples/** -web/predictive-text/: web/src/engine/predictive-text/** +web/engine/: + - changed-files: + - any-glob-to-any-file: + - web/source/** +web/ui/: + - changed-files: + - any-glob-to-any-file: + - web/source/kmwui* +web/samples/: + - changed-files: + - any-glob-to-any-file: + - web/samples/** +web/predictive-text/: + - changed-files: + - any-glob-to-any-file: + - web/src/engine/predictive-text/** windows/: - - windows/** - - resources/teamcity/includes/** - - resources/teamcity/windows/** -windows/config/: windows/src/desktop/** -windows/engine/: windows/src/engine/** + - changed-files: + - any-glob-to-any-file: + - windows/** + - resources/teamcity/includes/** + - resources/teamcity/windows/** +windows/config/: + - changed-files: + - any-glob-to-any-file: + - windows/src/desktop/** +windows/engine/: + - changed-files: + - any-glob-to-any-file: + - windows/src/engine/** From 2a24db1819cb7862859cebeabb410b84e842e8d8 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Tue, 17 Mar 2026 09:36:30 +0100 Subject: [PATCH 35/45] maint(mac): search for brew-installed rsync Fixes: #15764 Test-bot: skip Build-bot: skip --- resources/teamcity/includes/tc-helpers.inc.sh | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/resources/teamcity/includes/tc-helpers.inc.sh b/resources/teamcity/includes/tc-helpers.inc.sh index b4c62826e1..6f704ef1f4 100644 --- a/resources/teamcity/includes/tc-helpers.inc.sh +++ b/resources/teamcity/includes/tc-helpers.inc.sh @@ -65,8 +65,26 @@ _tc_rsync() { else local RSYNC=rsync if builder_is_macos; then + # We need to look for a newer version of rsync because the version bundled + # with macos does not work correctly; we assume that this is installed + # with Homebrew. On Intel, this is found in /usr/local/bin, and on M1, it + # is found in /opt/homebrew/bin. + RSYNC=/usr/local/bin/rsync - [[ -f /opt/homebrew/bin/rsync ]] && RSYNC=/opt/homebrew/bin/rsync + [[ -x /opt/homebrew/bin/rsync ]] && RSYNC=/opt/homebrew/bin/rsync + + # On build agents, we unlink rsync from homebrew, because otherwise xcode + # builds which use rsync internally fail, so we need to specify the full + # path to rsync. Generally, rsync is not needed on developer machines as + # this is only used for release builds from the build agents. #15764 + if [[ ! -x "${RSYNC}" ]]; then + # Try and find the rsync binary with `brew list`. It should be something + # like `/opt/homebrew/Cellar/rsync/3.4.1/bin/rsync` + RSYNC="$(brew list rsync | grep /bin/rsync\$)" + if [[ ! -x "${RSYNC}" ]]; then + builder_die "Could not find Homebrew-installed rsync anywhere" + fi + fi fi ${RSYNC} "${rsync_args[@]}" From 6be3b2ad114c8c99daba8ec8ea11248c8ff01799 Mon Sep 17 00:00:00 2001 From: Keyman Build Agent Date: Tue, 17 Mar 2026 13:01:23 -0500 Subject: [PATCH 36/45] auto: increment master version to 19.0.218 Test-bot: skip Build-bot: skip --- HISTORY.md | 4 ++++ VERSION.md | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/HISTORY.md b/HISTORY.md index 0973f37105..d66bda7d5b 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,5 +1,9 @@ # Keyman Version History +## 19.0.217 alpha 2026-03-17 + +* maint(mac): search for brew-installed rsync (#15765) + ## 19.0.216 alpha 2026-03-16 * docs: tweak walkthrough content (#15712) diff --git a/VERSION.md b/VERSION.md index 45ab25dda9..1b58d923b5 100644 --- a/VERSION.md +++ b/VERSION.md @@ -1 +1 @@ -19.0.217 \ No newline at end of file +19.0.218 \ No newline at end of file From c097d5b7d0e0ec7ce449dd446f55affa24a0d88c Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Wed, 18 Mar 2026 07:32:48 +0700 Subject: [PATCH 37/45] fix(common): pin sha versions --- .../actions/build-binary-packages/action.yml | 4 ++-- .github/workflows/api-verification.yml | 6 +++--- .../workflows/build-test-publish-docker.yml | 4 ++-- .github/workflows/core-arm64-windows-test.yml | 4 ++-- .github/workflows/crowdin.yml | 2 +- .github/workflows/deb-packaging.yml | 18 +++++++++--------- .github/workflows/labeler.yml | 2 +- .github/workflows/npm-publish.yml | 2 +- .github/workflows/pr-build-status.yml | 2 +- 9 files changed, 22 insertions(+), 22 deletions(-) diff --git a/.github/actions/build-binary-packages/action.yml b/.github/actions/build-binary-packages/action.yml index 23c01c545a..1483f58e5c 100644 --- a/.github/actions/build-binary-packages/action.yml +++ b/.github/actions/build-binary-packages/action.yml @@ -25,7 +25,7 @@ runs: using: 'composite' steps: - name: Download Artifacts - uses: actions/download-artifact@v8.0.1 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: keyman-srcpkg path: artifacts/keyman-srcpkg @@ -49,7 +49,7 @@ runs: echo '```' >> $GITHUB_STEP_SUMMARY - name: Store binary packages - uses: actions/upload-artifact@v7.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: keyman-binarypkgs-${{ inputs.dist }}_${{ inputs.arch }} path: | diff --git a/.github/workflows/api-verification.yml b/.github/workflows/api-verification.yml index 79e4f8ea52..56726817dc 100644 --- a/.github/workflows/api-verification.yml +++ b/.github/workflows/api-verification.yml @@ -27,7 +27,7 @@ jobs: steps: - name: Restore artifacts - uses: actions/cache/restore@v5.0.3 + uses: actions/cache/restore@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 with: path: | artifacts @@ -55,7 +55,7 @@ jobs: - name: Checkout if: steps.environment_step.outputs.SKIP_API_CHECK != 'true' - uses: actions/checkout@v6.0.2 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: ref: '${{ steps.environment_step.outputs.GIT_SHA }}' fetch-depth: 0 @@ -84,7 +84,7 @@ jobs: - name: Archive .symbols file if: steps.environment_step.outputs.SKIP_API_CHECK != 'true' && always() - uses: actions/upload-artifact@v7.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: libkeymancore.symbols path: ${{ github.workspace }}/keyman/linux/debian/tmp/DEBIAN/symbols diff --git a/.github/workflows/build-test-publish-docker.yml b/.github/workflows/build-test-publish-docker.yml index 7ff6bb0495..edb9ebb98f 100644 --- a/.github/workflows/build-test-publish-docker.yml +++ b/.github/workflows/build-test-publish-docker.yml @@ -41,7 +41,7 @@ jobs: steps: - name: Checkout repository id: checkout - uses: actions/checkout@v6.0.2 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Build Docker images id: build run: | @@ -67,7 +67,7 @@ jobs: steps: - name: Checkout repository id: checkout - uses: actions/checkout@v6.0.2 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Test Docker images id: test diff --git a/.github/workflows/core-arm64-windows-test.yml b/.github/workflows/core-arm64-windows-test.yml index a818957a7a..0eb4e8f8f6 100644 --- a/.github/workflows/core-arm64-windows-test.yml +++ b/.github/workflows/core-arm64-windows-test.yml @@ -40,7 +40,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v6.0.2 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: ref: '${{ github.event.client_payload.buildSha }}' @@ -64,7 +64,7 @@ jobs: npm -v node -v - - uses: actions/setup-python@v6.2.0 + - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: python-version: '3.13' diff --git a/.github/workflows/crowdin.yml b/.github/workflows/crowdin.yml index 7294d3e505..d0c14de948 100644 --- a/.github/workflows/crowdin.yml +++ b/.github/workflows/crowdin.yml @@ -13,7 +13,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v6.0.2 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: crowdin action uses: crowdin/github-action@v2.7.0 diff --git a/.github/workflows/deb-packaging.yml b/.github/workflows/deb-packaging.yml index 169ff651c1..6e7fe54cb3 100644 --- a/.github/workflows/deb-packaging.yml +++ b/.github/workflows/deb-packaging.yml @@ -43,7 +43,7 @@ jobs: PRERELEASE_TAG: ${{ steps.prerelease_tag.outputs.PRERELEASE_TAG }} steps: - name: Checkout - uses: actions/checkout@v6.0.2 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: ref: '${{ github.event.client_payload.buildSha }}' @@ -121,7 +121,7 @@ jobs: echo "- $(find . -name keyman_\*.dsc)" >> $GITHUB_STEP_SUMMARY - name: Store source package - uses: actions/upload-artifact@v7.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: keyman-srcpkg path: | @@ -140,7 +140,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v6.0.2 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: ref: '${{ github.event.client_payload.buildSha }}' sparse-checkout: '.github/actions/' @@ -166,7 +166,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v6.0.2 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: ref: '${{ github.event.client_payload.buildSha }}' sparse-checkout: '.github/actions/' @@ -204,13 +204,13 @@ jobs: sudo rm -rf /usr/share/dotnet - name: Download Source Artifacts - uses: actions/download-artifact@v8.0.1 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: keyman-srcpkg path: artifacts - name: Download Binary Artifacts - uses: actions/download-artifact@v8.0.1 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: path: artifacts pattern: keyman-binarypkgs-* @@ -281,7 +281,7 @@ jobs: echo "::endgroup::" - name: Download Artifacts - uses: actions/download-artifact@v8.0.1 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: keyman-signedpkgs @@ -343,7 +343,7 @@ jobs: steps: - name: Download Artifacts - uses: actions/download-artifact@v8.0.1 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: path: artifacts pattern: keyman-* @@ -362,7 +362,7 @@ jobs: echo "SKIP_API_CHECK=${{ github.event.client_payload.skipApiCheck }}" >> artifacts/env - name: Cache artifacts - uses: actions/cache/save@v5.0.3 + uses: actions/cache/save@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 with: path: | artifacts diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml index 9a60fc9ee9..ee7fe7d03d 100644 --- a/.github/workflows/labeler.yml +++ b/.github/workflows/labeler.yml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Update labels based on changed files - uses: actions/labeler@v6.0.1 + uses: actions/labeler@634933edcd8ababfe52f92936142cc22ac488b1b # v6.0.1 with: repo-token: "${{ secrets.GITHUB_TOKEN }}" - name: Update labels based on PR title diff --git a/.github/workflows/npm-publish.yml b/.github/workflows/npm-publish.yml index 8b49e0b7cd..551045c056 100644 --- a/.github/workflows/npm-publish.yml +++ b/.github/workflows/npm-publish.yml @@ -50,7 +50,7 @@ jobs: fi - name: Checkout - uses: actions/checkout@v6.0.2 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: ref: '${{ github.event.client_payload.buildSha }}' diff --git a/.github/workflows/pr-build-status.yml b/.github/workflows/pr-build-status.yml index 487a58ae5f..bd5fe2f46a 100644 --- a/.github/workflows/pr-build-status.yml +++ b/.github/workflows/pr-build-status.yml @@ -33,7 +33,7 @@ jobs: steps: - name: Check PR build status id: run_pr_build_status_script - uses: actions/github-script@v8.0.0 + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 with: script: | // This code is copied out of resources/build/pr-build-status/pr-build-status.mjs From c60be3711f70ad63b497d22785b4b5ed5e0dff43 Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Wed, 18 Mar 2026 07:34:53 +0700 Subject: [PATCH 38/45] fix(resources): Pin sha to github-script --- resources/build/pr-build-status/pr-build-status.prefix.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/build/pr-build-status/pr-build-status.prefix.yml b/resources/build/pr-build-status/pr-build-status.prefix.yml index cb4c319c19..d82aa9cb77 100644 --- a/resources/build/pr-build-status/pr-build-status.prefix.yml +++ b/resources/build/pr-build-status/pr-build-status.prefix.yml @@ -32,6 +32,6 @@ jobs: steps: - name: Check PR build status id: run_pr_build_status_script - uses: actions/github-script@v8.0.0 + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 with: script: | From 1806c1baa6123b0ca40fcf13a4cdcca80f27c74d Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Tue, 24 Mar 2026 09:40:50 +0100 Subject: [PATCH 39/45] fix(developer): define globalThis for compiled custom lexical models The boilerplate code for custom lexical models has never really been tested. For use in a browser/worker context, we need to define `exports`. The added unit test verifies that the model will build. Test-bot: skip --- .../kmc-model/src/lexical-model-compiler.ts | 1 + .../src/kmc-model/test/compile-model.tests.ts | 7 +++++- .../example.qaa.custom/ExampleCustomModel.ts | 25 +++++++++++++++++++ .../example.qaa.custom.model.ts | 6 +++++ ...man.System.Test.LexicalModelParserTest.pas | 9 +++++-- .../model-ts-parser/assets/custom.model.ts | 2 +- 6 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 developer/src/kmc-model/test/fixtures/example.qaa.custom/ExampleCustomModel.ts create mode 100644 developer/src/kmc-model/test/fixtures/example.qaa.custom/example.qaa.custom.model.ts diff --git a/developer/src/kmc-model/src/lexical-model-compiler.ts b/developer/src/kmc-model/src/lexical-model-compiler.ts index 54b50ba503..9e0a03611a 100644 --- a/developer/src/kmc-model/src/lexical-model-compiler.ts +++ b/developer/src/kmc-model/src/lexical-model-compiler.ts @@ -182,6 +182,7 @@ export class LexicalModelCompiler implements KeymanCompiler { const sources: string[] = modelSource.sources.map(function(source) { return new TextDecoder().decode(callbacks.loadFile(callbacks.path.join(sourcePath, source))); }); + func += `globalThis.exports = globalThis.exports ?? {};\n`; func += this.transpileSources(sources).join('\n'); func += `LMLayerWorker.loadModel(new ${modelSource.rootClass}());\n`; break; diff --git a/developer/src/kmc-model/test/compile-model.tests.ts b/developer/src/kmc-model/test/compile-model.tests.ts index 5c6a8ab104..ac7baa373e 100644 --- a/developer/src/kmc-model/test/compile-model.tests.ts +++ b/developer/src/kmc-model/test/compile-model.tests.ts @@ -19,6 +19,7 @@ describe('LexicalModelCompiler', function () { 'example.qaa.wordbreaker', 'example.qaa.joinwordbreaker', 'example.qaa.scriptusesspaces', + 'example.qaa.custom', ]; for (const modelID of MODELS) { @@ -37,7 +38,11 @@ describe('LexicalModelCompiler', function () { assert.isFalse(compilation.hasSyntaxError, 'model code had syntax error'); assert.isNull(compilation.error, `compilation error: ${compilation.error}`); - assert.equal(compilation.modelConstructorName, 'TrieModel'); + if(modelID == 'example.qaa.custom') { + assert.isNull(compilation.modelConstructorName); + } else { + assert.equal(compilation.modelConstructorName, 'TrieModel'); + } }); } }); diff --git a/developer/src/kmc-model/test/fixtures/example.qaa.custom/ExampleCustomModel.ts b/developer/src/kmc-model/test/fixtures/example.qaa.custom/ExampleCustomModel.ts new file mode 100644 index 0000000000..6cd95e8a35 --- /dev/null +++ b/developer/src/kmc-model/test/fixtures/example.qaa.custom/ExampleCustomModel.ts @@ -0,0 +1,25 @@ +import { LexicalModelTypes } from '@keymanapp/common-types'; + +export class ExampleCustomModel implements LexicalModelTypes.LexicalModel { + configure(capabilities: LexicalModelTypes.Capabilities): LexicalModelTypes.Configuration { + return { + leftContextCodePoints: 16, + rightContextCodePoints: 0, + wordbreaksAfterSuggestions: false, + } + } + + languageUsesCasing: boolean = true; + + predict(transform: LexicalModelTypes.Transform, context: LexicalModelTypes.Context): LexicalModelTypes.Distribution { + if(transform.deleteLeft == 0 && context.left.endsWith('te') && transform.insert == 'h') { + return [ + { p: 0.3, sample: { displayAs: 'the', transform: { deleteLeft: 2, insert: 'the' }, tag: 'correction' } }, + { p: 0.2, sample: { displayAs: 'them', transform: { deleteLeft: 2, insert: 'them' }, tag: 'correction' } }, + { p: 0.1, sample: { displayAs: 'tee hee', transform: { deleteLeft: 2, insert: 'tee hee' }, tag: 'correction' } }, + ]; + } else { + return []; + } + } +} diff --git a/developer/src/kmc-model/test/fixtures/example.qaa.custom/example.qaa.custom.model.ts b/developer/src/kmc-model/test/fixtures/example.qaa.custom/example.qaa.custom.model.ts new file mode 100644 index 0000000000..8f1d188f9d --- /dev/null +++ b/developer/src/kmc-model/test/fixtures/example.qaa.custom/example.qaa.custom.model.ts @@ -0,0 +1,6 @@ +const source: LexicalModelSource = { + format: 'custom-1.0', + rootClass: 'ExampleCustomModel', + sources: ['ExampleCustomModel.ts'], +}; +export default source; \ No newline at end of file diff --git a/developer/src/test/auto/model-ts-parser/Keyman.System.Test.LexicalModelParserTest.pas b/developer/src/test/auto/model-ts-parser/Keyman.System.Test.LexicalModelParserTest.pas index 11dcd5a4a9..b26fb863f8 100644 --- a/developer/src/test/auto/model-ts-parser/Keyman.System.Test.LexicalModelParserTest.pas +++ b/developer/src/test/auto/model-ts-parser/Keyman.System.Test.LexicalModelParserTest.pas @@ -91,12 +91,17 @@ var begin lm := TLexicalModelParser.Create(m.Text); try + // TODO: LexicalModelParser does not support `rootClass` which is needed for + // custom lexical models, and the property `Wordlists` is inappropriate for + // the list of sources files. This is part of a bigger project for better + // custom model support in TIKE + // + // For now, this test excludes the `rootClass` property in order to pass lm.Comment := 'Testing'; lm.Format := lmfCustom10; lm.WordBreaker := lmwbAscii; lm.Wordlists.Clear; - lm.Wordlists.Add('foo.tsv'); - lm.Wordlists.Add('bar.tsv'); + lm.Wordlists.Add('CustomModel.ts'); Assert.AreEqual(mcustom.Text.Trim, lm.Text.Trim); // Ignoring whitespace before/after finally lm.Free; diff --git a/developer/src/test/auto/model-ts-parser/assets/custom.model.ts b/developer/src/test/auto/model-ts-parser/assets/custom.model.ts index 64e8f8e122..c22dfe0a1a 100644 --- a/developer/src/test/auto/model-ts-parser/assets/custom.model.ts +++ b/developer/src/test/auto/model-ts-parser/assets/custom.model.ts @@ -2,7 +2,7 @@ const source: LexicalModelSource = { format: 'custom-1.0', wordBreaker: 'ascii', - sources: ['foo.tsv', 'bar.tsv'] + sources: ['CustomModel.ts'] }; export default source; From aa36cfe9617b49779b59b5c2bb318da2f97fe271 Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Tue, 24 Mar 2026 12:43:11 +0100 Subject: [PATCH 40/45] fix(core): address code review comments --- core/src/ldml/ldml_processor.cpp | 19 ++++++------------- core/src/state.hpp | 2 +- 2 files changed, 7 insertions(+), 14 deletions(-) diff --git a/core/src/ldml/ldml_processor.cpp b/core/src/ldml/ldml_processor.cpp index 031669fbe5..e79a1f90be 100644 --- a/core/src/ldml/ldml_processor.cpp +++ b/core/src/ldml/ldml_processor.cpp @@ -179,20 +179,13 @@ ldml_processor::process_event( ldml_state.clear(); try { - switch (vk) { - // Currently, only one VK gets special treatment. - // Special handling for backspace VK - case KM_CORE_VKEY_BKSP: + if (vk == KM_CORE_VKEY_BKSP) { process_backspace(ldml_state); - break; - default: - // all other VKs - if (is_key_down) { - process_key_down(ldml_state); - } else { - process_key_up(ldml_state); - } - } // end of switch + } else if (is_key_down) { + process_key_down(ldml_state); + } else { + process_key_up(ldml_state); + } // all key-up and key-down events end up here. // commit the ldml state into the core state ldml_state.commit(); diff --git a/core/src/state.hpp b/core/src/state.hpp index 8e6584b05c..0cf58fb614 100644 --- a/core/src/state.hpp +++ b/core/src/state.hpp @@ -187,7 +187,7 @@ public: * whether or not the keydown handled it internally. Therefore this * flag exists. * - * Only used when processing KM_CORE_VKEY_BKSP. + * Only used when processing KM_CORE_VKEY_BKSP with LDML keyboards. */ void set_backspace_handled_internally(bool handled) { _backspace_handled_internally = handled; } bool backspace_handled_internally() const { return _backspace_handled_internally; } From fe84bab1d391f1be4d2930d6bbfcf12aa4743d18 Mon Sep 17 00:00:00 2001 From: Keyman Build Agent Date: Tue, 24 Mar 2026 13:01:46 -0500 Subject: [PATCH 41/45] auto: increment master version to 19.0.219 Test-bot: skip Build-bot: skip --- HISTORY.md | 4 ++++ VERSION.md | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/HISTORY.md b/HISTORY.md index d66bda7d5b..d4323e5999 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,5 +1,9 @@ # Keyman Version History +## 19.0.218 alpha 2026-03-24 + +* fix(developer): define globalThis for compiled custom lexical models (#15777) + ## 19.0.217 alpha 2026-03-17 * maint(mac): search for brew-installed rsync (#15765) diff --git a/VERSION.md b/VERSION.md index 1b58d923b5..8f605e49c0 100644 --- a/VERSION.md +++ b/VERSION.md @@ -1 +1 @@ -19.0.218 \ No newline at end of file +19.0.219 \ No newline at end of file From b5aa0a86dd3830a3744bfbce3ec547f4cf4ef546 Mon Sep 17 00:00:00 2001 From: Keyman Build Agent Date: Wed, 25 Mar 2026 13:01:51 -0500 Subject: [PATCH 42/45] auto: increment master version to 19.0.220 Test-bot: skip Build-bot: skip --- HISTORY.md | 5 +++++ VERSION.md | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/HISTORY.md b/HISTORY.md index d4323e5999..d067124d74 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,5 +1,10 @@ # Keyman Version History +## 19.0.219 alpha 2026-03-25 + +* maint(common): Update GitHub actions for Node 24 (#15762) +* fix(core): fix keydown/up handling for LDML keyboards (#15609) + ## 19.0.218 alpha 2026-03-24 * fix(developer): define globalThis for compiled custom lexical models (#15777) diff --git a/VERSION.md b/VERSION.md index 8f605e49c0..d3129b50b7 100644 --- a/VERSION.md +++ b/VERSION.md @@ -1 +1 @@ -19.0.219 \ No newline at end of file +19.0.220 \ No newline at end of file From b22b036f6b997daf8a30922bd3c627f86f7ea3e9 Mon Sep 17 00:00:00 2001 From: sgschantz Date: Thu, 22 Jan 2026 15:11:34 -0500 Subject: [PATCH 43/45] maint(mac): upgrade to Xcode 26 change cocoa-sentry version to one compatible with Xcode 26 --- mac/Keyman4MacIM/Podfile | 6 +++--- mac/Keyman4MacIM/Podfile.lock | 16 ++++++++-------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/mac/Keyman4MacIM/Podfile b/mac/Keyman4MacIM/Podfile index a5c62be447..9f797cfd79 100644 --- a/mac/Keyman4MacIM/Podfile +++ b/mac/Keyman4MacIM/Podfile @@ -1,5 +1,5 @@ # Uncomment the next line to define a global platform for your project -platform :osx, '10.13' +platform :osx, '11.0' use_frameworks! target 'Keyman' do @@ -7,11 +7,11 @@ target 'Keyman' do # use_frameworks! # Pods for Keyman - pod 'Sentry', :git => 'https://github.com/getsentry/sentry-cocoa.git', :tag => '8.38.0' + pod 'Sentry', :git => 'https://github.com/getsentry/sentry-cocoa.git', :tag => '8.57.3' target 'KeymanTests' do inherit! :search_paths - pod 'Sentry', :git => 'https://github.com/getsentry/sentry-cocoa.git', :tag => '8.38.0' + pod 'Sentry', :git => 'https://github.com/getsentry/sentry-cocoa.git', :tag => '8.57.3' use_frameworks! # Pods for testing end diff --git a/mac/Keyman4MacIM/Podfile.lock b/mac/Keyman4MacIM/Podfile.lock index 004e0acc65..5c349d43aa 100644 --- a/mac/Keyman4MacIM/Podfile.lock +++ b/mac/Keyman4MacIM/Podfile.lock @@ -1,24 +1,24 @@ PODS: - - Sentry (8.38.0-beta.1): - - Sentry/Core (= 8.38.0-beta.1) - - Sentry/Core (8.38.0-beta.1) + - Sentry (8.57.3): + - Sentry/Core (= 8.57.3) + - Sentry/Core (8.57.3) DEPENDENCIES: - - Sentry (from `https://github.com/getsentry/sentry-cocoa.git`, tag `8.38.0`) + - Sentry (from `https://github.com/getsentry/sentry-cocoa.git`, tag `8.57.3`) EXTERNAL SOURCES: Sentry: :git: https://github.com/getsentry/sentry-cocoa.git - :tag: 8.38.0 + :tag: 8.57.3 CHECKOUT OPTIONS: Sentry: :git: https://github.com/getsentry/sentry-cocoa.git - :tag: 8.38.0 + :tag: 8.57.3 SPEC CHECKSUMS: - Sentry: 4d6027fbfde9ddc35e5c368292843097d039db5f + Sentry: c643eb180df401dd8c734c5036ddd9dd9218daa6 -PODFILE CHECKSUM: 19b128c35d9c5e59f90d09522c053de65096696a +PODFILE CHECKSUM: d45d4bde6c75c2c91314777c88c421e5e604d84d COCOAPODS: 1.15.2 From 7f203cd6c7c9256e8ca5db255b5f67e2db302070 Mon Sep 17 00:00:00 2001 From: Shawn Schantz Date: Thu, 26 Mar 2026 06:27:04 -0400 Subject: [PATCH 44/45] fix(mac): removed unused code and extra logging --- .../Keyman4MacIM/KMInputMethodEventHandler.m | 66 ++----------------- 1 file changed, 5 insertions(+), 61 deletions(-) diff --git a/mac/Keyman4MacIM/Keyman4MacIM/KMInputMethodEventHandler.m b/mac/Keyman4MacIM/Keyman4MacIM/KMInputMethodEventHandler.m index 09276a3143..9cf29e5b89 100644 --- a/mac/Keyman4MacIM/Keyman4MacIM/KMInputMethodEventHandler.m +++ b/mac/Keyman4MacIM/Keyman4MacIM/KMInputMethodEventHandler.m @@ -616,28 +616,6 @@ CGEventSourceRef _sourceForGeneratedEvent = nil; return doesMatch; } -/** - * Check whether the string to be deleted is part of the same cluster as the character in the context that precedes it. - * This function made not be needed, using `precededBySurrogatePair` instead. - */ --(BOOL) deletionWillReplacePartOfCluster: (NSUInteger)deletionLocation precedingCharacterLocation: (NSUInteger)precedingLocation context:(NSString*) context { - // NSString objects hold UTF-16 characters, so a single unicode composed character - // or grapheme cluster may occupy a range of NSString indices instead of a single character. - // This includes base and combining characters potentially composed of surrogate pairs. - NSRange firstDeletionTargetClusterRange = [context rangeOfComposedCharacterSequenceAtIndex: deletionLocation]; - - // get range of the preceding cluster in the context - NSRange precedingClusterRange = [context rangeOfComposedCharacterSequenceAtIndex: precedingLocation]; - - NSString *firstFullCharacterToDelete = [context substringWithRange:firstDeletionTargetClusterRange]; - NSString *precedingFullCharacter = [context substringWithRange:precedingClusterRange]; - os_log_debug([KMLogs keyTraceLog], "firstDeletionTargetCharacterRange: %{public}@, deletionCharacter: %{public}@, precedingCharacterRange %{public}@, precedingCharacter: %{public}@", NSStringFromRange(firstDeletionTargetClusterRange), firstFullCharacterToDelete, NSStringFromRange(precedingClusterRange), precedingFullCharacter); - - // true when the first character to delete and the preceding character - // from the context are part of the same grapheme cluster - return NSEqualRanges(firstDeletionTargetClusterRange, precedingClusterRange); -} - /** * Check whether the preceding character, which is to be used for the replacement, * is part of a surrogate pair that is distinct from the character being deleted. @@ -647,16 +625,15 @@ CGEventSourceRef _sourceForGeneratedEvent = nil; unichar precedingCharacter = [context characterAtIndex:precedingLocation]; if (CFStringIsSurrogateHighCharacter(precedingCharacter)) { - // preceding character is high character - // this is not expected from Keyman Core; write to log but return false + // preceding character is high character -- unexpected from Keyman Core + // write to log and return false precedingCharacterIsLowSurrogate = false; - NSString *message = [NSString stringWithFormat:@"High surrogate found for preceding character at %ld", (long)precedingCharacter]; + NSString *message = [NSString stringWithFormat:@"Unexpected high surrogate found for preceding character at %ld", (long)precedingCharacter]; os_log_debug([KMLogs keyTraceLog], "%{public}@", message); + [KMSentryHelper addDebugBreadCrumb:@"event" message:message]; } else if (CFStringIsSurrogateLowCharacter(precedingCharacter)) { // preceding character is low surrogate precedingCharacterIsLowSurrogate = true; - NSString *message = [NSString stringWithFormat:@"Low surrogate found for preceding character at %ld", (long)precedingCharacter]; - os_log_debug([KMLogs keyTraceLog], "%{public}@", message); } return precedingCharacterIsLowSurrogate; @@ -714,9 +691,7 @@ CGEventSourceRef _sourceForGeneratedEvent = nil; // verify that preceding characters comprise a surrogate pair if ((CFStringIsSurrogateHighCharacter(highCharacter)) && (CFStringIsSurrogateLowCharacter(lowCharacter))) { - NSString *message = [NSString stringWithFormat:@"Replacement string containing surrogate %@", replacementString]; - os_log_debug([KMLogs keyTraceLog], "%{public}@", message); - [KMSentryHelper addDebugBreadCrumb:@"event" message:message]; + // found preceding surrogate as expected } else { NSString *message = [NSString stringWithFormat:@"Preceding characters of string do not comprise a surrogate pair: 0x%02x, 0x%02x", (unsigned int)highCharacter, (unsigned int)lowCharacter]; os_log_debug([KMLogs keyTraceLog], "%@", message); @@ -733,37 +708,6 @@ CGEventSourceRef _sourceForGeneratedEvent = nil; return YES; } -/** - * Replace both the text to delete and the cluster preceding it solely with the cluster that precedes it. - * The 'cluster' may be just one character, but if contains surrogate pairs, this ensures that they stay together. - * Returns YES if executing the replace/delete and NO otherwise. - * This function may not be needed, using `deleteByReplacingWithPrecedingSurrogate` instead. - */ - -(BOOL) deleteByReplacingWithPrecedingCluster:(NSUInteger)precedingCharacterLocation deleteLength:(NSUInteger)deleteLength context:(NSString*) context client:(id) client { - - os_log_debug([KMLogs keyTraceLog], "deleteByReplacingWithPrecedingCluster, deletion target is independent of the grapheme cluster that precedes it"); - - // get range of the preceding cluster and the substring from the context - NSRange precedingClusterRange = [context rangeOfComposedCharacterSequenceAtIndex: precedingCharacterLocation]; - NSString *replacementString = [context substringWithRange:precedingClusterRange]; - - // guard: if preceding cluster contains control characters, return NO - if ([self containsControlCharacter:replacementString]) { - NSString *message = @"replacementString contains control characters, cannot delete with replace"; - os_log_debug([KMLogs keyTraceLog], "%@", message); - [KMSentryHelper addDebugBreadCrumb:@"event" message:message]; - return NO; - } - - // perform the replacement - NSUInteger replacementLength = [replacementString length] + deleteLength; - NSRange replacementRange = NSMakeRange([context length] - replacementLength, replacementLength); - os_log_debug([KMLogs keyTraceLog], "replacementRange: %{public}@", NSStringFromRange(replacementRange)); - [client insertText:replacementString replacementRange:replacementRange]; - - return YES; -} - -(BOOL) containsControlCharacter:(NSString*)text { NSCharacterSet *controlSet = [NSCharacterSet controlCharacterSet]; NSRange range = [text rangeOfCharacterFromSet:controlSet]; From 7396de816e7db3155b9a95bda050efe8be7b9552 Mon Sep 17 00:00:00 2001 From: Keyman Build Agent Date: Thu, 26 Mar 2026 13:01:36 -0500 Subject: [PATCH 45/45] auto: increment master version to 19.0.221 Test-bot: skip Build-bot: skip --- HISTORY.md | 4 ++++ VERSION.md | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/HISTORY.md b/HISTORY.md index d067124d74..0f0f3078da 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,5 +1,9 @@ # Keyman Version History +## 19.0.220 alpha 2026-03-26 + +* fix(mac): improved adherence to backspace rules for compliant apps (#15561) + ## 19.0.219 alpha 2026-03-25 * maint(common): Update GitHub actions for Node 24 (#15762) diff --git a/VERSION.md b/VERSION.md index d3129b50b7..6659914f35 100644 --- a/VERSION.md +++ b/VERSION.md @@ -1 +1 @@ -19.0.220 \ No newline at end of file +19.0.221 \ No newline at end of file

G zu^<#-<_xVb0-ed6Wxy_v?8BkloLsM%cTT@{Q;)*#V=Q4y%=9>4^h}X>3=f|}hyHHf zU`wV1V(KUGE?th}^99=Q^Dc~3J|j4BsS2vL=~Q|bGjFoe@LCe&6H`*ulk&2%vR>2L zE1EV>nNgv8lYiH(_-)CnQ>C&#m|Cs6jfBp~Sl%n9;as0o`0%ysN7S?}CQG8YtMI{B zWL`d>v4CKo4ewYQpPb|z{fuX&MF#)Vm8&%9%}yyY@1i^My-k2w==S!#0XoW>YnAVJc)#*@I@T#f5k6U=! z1~gjj%7GJAOwSzbMv@9IqRV!h;^{~(Nk~Hm-%!8Vsiu6H*&<%VJt$P`&A^yF|1&5Y z;T29>Js}Z|9=wS)brIJXo7qzp_$spAf|oS^p&Q|$1@iso^oyLqLE-xp>+>Rb2YGLM z>{6;W(>N)s;N!td+#tnbdpAWpZ^odVSJqo~zyf?;pN)PeT|o&z<$$;!E{Zc8Gl-tY z90fRchbV~>zuLXqcJmR@YnALUfI`r%sIzR-4$cDPi3xq?-%^1*A6J<&t6QtZ`|18y zz}?-@D7jB_hQWTv_yuAxul_oHXx7~Cr$mFcuW=oO>k@DdhZEuBqujqABNZ-f@>u8-(8_IXZ38X6t2RLEYnGn@ zwY0>C#9KZI01$Z^at?^_)?m@mK&3yhB@4ntq5)+(_z>uNr=ax`+&d>n5U9(@>h4vW zYSrE8P_gn!HM)4hj|OiMnvv}P(~JvZ=*}Q}j)95!nt_3pBy2YVK+{2(*~i;kwK;DM z5av})_4f76@Pr3v6@UbH^1!bxbjLdbWUT$~Is*gkDSq*d+e^ow*tSzP% z-^3%W78{q=L^psES^a{ZgX2Q>h*pIYuUGz9!N$hsuriBk!Ne&V`;Zzqt$^wT+%q_M zx(UCaO&h=lm`K9FESS{@xc4(9N<5E>jg1AdmRFyp>%c4)PHceyM3CU}qKFk32lf_b zrR5s$R3{a6Zyy`d(|W~Z{6aXld9qWx_X9Ya<;;bv#>i&VRd!i4>ZIP7ZZa(Vp~{I()cb494GeqGv=aAJwU4HRv0mp z0A01n_awYew*s)v&Y_7{dm{9G!$Y}|%}()_*zgo)K{3%)K0g@2DQRCh_PLGxh)$w-+DV<`O4XWTnx*~5B>C75^P#N~`_isH1I1_hZ{bqy%3NiM)*K2JXZB|V>R>T8p5?w<><%1n8MK=N58dNm7KQSHsCDqJR zyo$Gk7vAVlLetq@lv~$vuh?uwlG=8SSOX%Z*-MCp>AKZKNVX;Wd z0F>LIV_;b8Q19Fot0hG_ZfsP%tGO8xHdCt=;5OqfJ|33doXl^zO!*=EZMl(t-EOV$ z%tys_^Q>P^TJrHj=$lYXjiK$2-^R<8S$z{6Z>{w#Q;I{y|FJbMHDfJmY2l`(9@c)N zUT?z!{xPdTK}7}DVWqOZq-3e`j@}z$klIo#Mg;}wD$2^*tjPlW4eM)Zg~i3&BP(nB z&ZUZK>grkYuR}j(i{-wirH$!Zoh;KhLztBWrq!yTT^c^V{HIS#=gXLqpgkw32J8I! z5Y2O?OZs?wvX+Zh(0sP8V!*(1eVQ{BiSe$S(2*hxTkd`Y{)fNX%%1i$QB}5i3%9EY zw^#|9$?Plid$86*hC#r->HMSn%Sc7^K3gn)8aKPmPqoI{l4JTZ%;XcPND-|?|M$Q> z2mPHOcE`P|48D8jtZItCHa(%+Gv1BSRm6=)b&k%AN`&|<%MN^7IH@Q=A0GL3liXb)qmjOdy z=_q|(vtkE?Po25|rN$O)dvQqM3X791?Cop(14I{VGC0lD!G;wgu4K590-WW?I4Ez; zl#xY&weavs{IH58EkaNEVw<4xRW>09+-wgBV?+yi3XY^oUE4L&-2|~ezV0M?Vo?C1 zuaxNI7`UF~qRS(7Ex(E`NqoG-qaohOwNll~{65pw-CYeixqA?Q<{M5KHeg0lK7HvC?$ED}_! z^;NH;dt(C$OL}+moc$?lKnE$4zDUPu!+Tq2XB9g;+84i`jRfJ*aQ=(6bQN`~3kj&T zWlsT>s?2kPE6$xie$<^RrxN_^QwR_8=&#O`AoN-QK9HOu{x<_O+_*QnMpr+4P|+3(A1B z)TZNZW1_JBanCoxVBj8sEo86Gs^+T1u>YPvAlz`QVFh;mQr`bjpzDtW0n6X##YvcUHfTRU?f6tISkT2j zy~9TAKyv!{tA&>SPX&hcl;H)jG^w=r2g9CS{IOYwrqxoYJsb|mfto|oLA5+_{#@MV zy5&O_-()d?@dnakE6Y~D!}9nyP{3l%;{4KPX8lm3Tndq6qa&q==Z8*E$@o!Uz$`K3 z{CG__@ugOR?&iRvf#D}}?QyL&$E<(Xb1!V@SRrl@4JQ~?#;Ljc_$K7)qm^y-Y4ZA zCxyN?5c3lS9MLx`dn*^_AywKFIQ4EGhrwjG(3d8wli#!D+@__l|DOJFfP-0o%g*&U zUhwTqw5X?DZ}Cu1U1$1|abwSqEM6uMUoCSg&h9P>gahPdZ&3eMv8V(Do!L=H0Z<->uSPfU`HuBV&ek z77op~^2NVVxL?=jn$D}W*)w|B=z$;E3FVL77DYC{%X38-M&In9?m@0OX6WCV zx&h*w{+^lag)UGZiU$q$w&S(5HP}Y;UPH zseevWdFVLzS54WBvz~&!T{Z+PT!h$mRdcdy4~%*NcSs-(BMhldgQm5a zZP;i3zA@0$wC<1-=FiQiS4(Mf+Kxho(JY9Q>&V5*m%aHS;d-{l{pR&+W{c6tVZ*%4 ze`gbY&c|fpDiY_#HM-BG)4Vg@qz4j?z__a zBw{3GQ*hBkQE{W=*|!lr=%P0pnO88kreRB7H_y${CQGsP7S5Y)0zmr-@kS5W3H`hN z6#gvD29;CE)cdnWAHJk{m~y5xYLi2wj=Q@?AR@^(JRXVYgZu97W+9KHl9% zyS!N`&OH@o#)=4iCUKAM`brKSUjf>U4D}36g-E1cweK1jC*>KF{C9i-oT>Hb5o~>! zT_HF)*e2(92xH4ebjS9|WqUh+f-fi$VW6Y?ad#580B&IG^5hAk#O>V8V+IqD8aC!2 z-<2@_Cs2fZ2zr1`ySTjvQe)rNUzP8hZBifjt1QA>W$jZqv9kFzUlh({jRB4~Z$KLJ^lrX$^(7s~PzP|fMG%#c zARJ8zl4n+$_FlXo?89{TQ=%BcORil+Wr4^Ff<5rz7U{sb)e_aS_ps1Ms(>_{013bs+fb(+z(n>T9CFw5D6k6gDVnEj-a1v zJ9@|OjP~y?wnaz&4$m~2u=hq(_$%lXqIJxl6#t~xaC4gyTS&usq6E`v{e551U^*!_ zjBA%kX< zyqenf?(W>zw{PBb8&&~qQgRp=ct6$K)6lK?f!w0dQmu?1DkFeuC(}^kd_5Ur4s~~* zQieQhi6V@h3KxhTAZcIdLK#Tf?L4!y|T%9$=|`GK#t9bag6LZv15 zJHovEA=E(2`hV^wBr*g?{Q__Y?By*kEiHxb&(>O!fr5X%IKwk`;3ihX`d8nR^#%OUr`_ZwxsUeEZ{ z2ce653VfoU#_Jli=Se)LX)^7^)?}^~2;f&VEj2?7UC}V-Xynp(5 zI3Tw?DTS_csXJ@k{ylFMCG&G@NfY@Y88^`3=<__MZQ+X7j@ex6lXQ;{#f?IyR-L7? z!Yyi=iPf7?LnlO54v2-|cl;-NWC;zb%^utU_>i|(CmBc?a6O-+dM(j;?!0Fv%w_7e zFZZXg<^f9e4DzfPTr5t^nlTyN<|#COv0d|L?j^qYU|*lJ%*!TmgX?}x=Vk22;g6tU zO^rTxotZTiDObvby?^3j zxrcwM)jYkws&O5S(@Su6#l$EoYlB-;A{TqJ>I8f6E<*xi(`eID2QAiSxzZ$cIe~KY zXXH@}g4`)|vd`wj?ZvU%(TUeXTQaO-_b3b<6+(#oIgQ%+fuil7Y&OkN^8|e}^_R9y zDzaFPjB4=Tr;TzK1g|tYaMozEY4XQ7Huw9^fzOmBM7h)|8z)D@&ja~mDS%; z(6f!gHxjff8XF(iubNUU0TjuL4o&s9+6!hE?~^D-8E$>+Irw$QKjP4el_JERQ98QzR>G5Mk6v`x4dS zyP#K8;!3bBZa!EgtWFPq=*k#ib>wXH#Bg*w;hf=>ut| z3_Fbv9~j{9xl^+yfbK}XXR&vgzc^ZGfuJwdONsfER}~D`eElZ4@dg-6R`oBWW+{9_ ztuY@_{8+e$cruv`+|}9Bcr34EDV+97I;7xbn~#MFWSn@HJaeTpr}BbAn6R{?5;5HV zN>Jwnc^Z5v;_|cgII>Yi>BA*HQ9v9oe0Fq-52X7Jc%C%)b(`axJlu{ZyH58 z5Q(+>$c;a@>9!mcaB4oLwY0j=5bq~-A^98}lZ_f2en6U>=Zc?=K5K`mefo2~mND$x z?yQ5%$@vwR<#>qPo?54A>6`nlbuW(OSL@F=e)2TAj7&IR^wc^gl(^H-#Ib!nzi2<9 zd66|dxtXcZc*=MgzjHOl#n>w2uBq>m^Y!oaHYd{bt$mU0(skjtC(zw7pL285k(ShZW;B(lXg_jHkHn~a*amyuz9Qa?eg1FN$hu1BhwXrpDO(l(fVQVNZt zoY46vK6#lm4M$AYa9z{wjcBTrV}0qI?&i1OuG`fOJ#``Hl^Re1j_khXi!(+w2rCH$(@x2KQ z({fGSlTy>4n8uqc%r?UmFI$*k3l9)CrFx*F5^oUHWxQ$Q#XD@U|Hh4E5MI=Gk2Ffc z;iC0f2s4i+@e8yFx$?31sq?OQsLz`4zizCs(6(Q{QzHOdVe8q;;(*&ouG2HJ3)KTl zeM2PPB~4Uw)5t!vJnib&vQZUEOWP^&nTTaI>g|p#Of)`fvlp5%Kw1pSJrwlYNS7oG zVotfQ8N}cG<|CjeeVW;${_ASwu}seJw2P+|&#El8%;xyn+!u2BJO*l+2y3K-zSM3f zK%q@_xDOrx`!HaslR6kVgWP+)(0n%$56w4{TyvOh=;3?Qp|ofC!DGDS{+c4==hh-# zRbly4X7PQic(bl}2yy%lqpxycV4%hPgGxL>&`-IYl1bySc!SGwIxbHeqI&g*3)Z}k z{#_bl@HUGFlzWFV;MdDGP8uRR`kt_f4GK)WHc9W@U8PJ&rwl>(LIAeyuaoBrFyS)0 fckz+o)D74(jcd^rn$b8=(F%zQNePzmYkU6>d5CS> literal 0 HcmV?d00001 diff --git a/developer/docs/help/guides/develop/walkthrough/images/characters-in-comments.png b/developer/docs/help/guides/develop/walkthrough/images/characters-in-comments.png new file mode 100644 index 0000000000000000000000000000000000000000..2e5386319286a822812390ce0d874d3e9010e78d GIT binary patch literal 20570 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 z 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 literal 0 HcmV?d00001 diff --git a/developer/docs/help/guides/develop/walkthrough/images/charmap-to-text.png b/developer/docs/help/guides/develop/walkthrough/images/charmap-to-text.png new file mode 100644 index 0000000000000000000000000000000000000000..7bab7d60548ede00519b367cc8ca2346812d1682 GIT binary patch literal 12100 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 V<9*bR_F&I$788;ZEO@Ks@jn&mXQTiC literal 0 HcmV?d00001 diff --git a/developer/docs/help/guides/develop/walkthrough/images/code-tab.png b/developer/docs/help/guides/develop/walkthrough/images/code-tab.png new file mode 100644 index 0000000000000000000000000000000000000000..9e55f71e17c577b2e543566f414dd3745f238bc4 GIT binary patch literal 47177 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