## Keycode Generator

This directory contains a keycode generator that can generate Dart code for
the `LogicalKeyboardKey` and `PhysicalKeyboardKey` classes. It draws information
from both the Chromium and Android source bases, and incorporates the
information it finds in those sources into a single key database in JSON form.

It then generates `keyboard_key.dart` (containing the `LogicalKeyboardKey` and
`PhysicalKeyboardKey` classes), and `keyboard_maps.dart`, containing
platform-specific immutable maps for translating platform keycodes and
information into the pre-defined key values in the `LogicalKeyboardKey` and
`PhysicalKeyboardKey` classes.

The `data` subdirectory contains both some local data files, and the templates
used to generate the source files.

 - `data/key_data.json`: contains the merged data from all the other sources.
    This file will be regenerated if "--collect" is specified for the
    gen_keycodes script.
 - `data/key_name_to_android_name.json`: contains a mapping from Flutter key
   names to Android keycode names (with the "KEY_" prefix stripped off).
 - `data/keyboard_key.tmpl`: contains the template for the `keyboard_key.dart`
   file. Markers that begin and end with "@@@" denote the locations where
   generated data will be inserted.
 - `data/keyboard_maps.tmpl`: contains the template for the `keyboard_maps.dart`
   file. Markers that begin and end with "@@@" denote the locations where
   generated data will be inserted.
 - `data/printable.json`: contains a mapping between Flutter key name and its
   printable character. This character is used as the key label.
 - `data/synonyms.json`: contains a mapping between pseudo-keys that represent
   other keys, and the sets of keys they represent. For example, this contains
   the "shift" key that represents either a "shiftLeft" or "shiftRight" key.

 ## Running the tool

To run the `gen_keycodes` tool using the checked in `key_data.json` file, run
it like so:

```bash
$FLUTTER_ROOT/bin/cache/dart-sdk/bin/dart bin/gen_keycodes.dart
```

This will rengerate the `keyboard_key.dart` and `keyboard_maps.dart` files in
place.

If you wish to incorporate and parse changes from the Chromium and Android
source trees, add `--collect` to the command line. The script will download and
incorporate the changed data automatically. Note that the parsing is specific to
the format of the source code that it is reading, so if the format of those
files changes appreciably, you will need to update the parser.

There are other options for manually specifying the file to read in place of the
downloaded files, use `--help` to see what is available.

If the data in those files changes in the future to be unhelpful, then we can
switch to another data source, or abandon the parsing and maintain
`key_data.json` manually. All output files and local input files should be
checked in.

## Key Code ID Scheme

In order to provide logical keys with unique ID codes, Flutter uses a scheme
to assign logical key codes which keeps us out of the business of minting new
codes ourselves. This only applies to logical key codes: Flutter's
physical key codes are just defined as USB HID codes.

The logical codes are meant to be opaque to the user, and should never be
unpacked for meaning, since the code scheme could change at any time, and the
meaning is likely to be retrievable in a more reliable and correct manner from
the API.

However, if you are porting Flutter to a new platform, you should follow the
following guidelines for specifying logical key codes.

The logical key code is a 37-bit integer in a namespace that we control and
define. It has values in the following ranges.

  - **0x00 0000 0000 - 0x0 0010 FFFF**: For keys that generate Unicode
    characters when pressed (this includes dead keys, but not e.g. function keys
    or shift keys), the logical key code is the Unicode code point corresponding
    to the representation of the key in the current keyboard mapping. The
    Unicode code point might not actually match the string that is generated for
    an unshifted key press of that key, for example we would use U+0034 for the
    “4 $” key in the US layout, and also the “4 ;” key in the Russian layout,
    and also, maybe less intuitively, for the “' 4 {“ in French layout (where in
    the latter case, an unshifted press gets you a ', not a 4). Similarly, the Q
    key in the US layout outputs a q in normal usage, but its code would be 0x0
    0000 0051 (U+00051 being the code for the uppercase Q).

  - **0x01 0000 0000 - 0x01 FFFF FFFF**: For keys that are defined by the [USB HID
    standard](https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf),
    the key code consists of the 32 bit USB extended usage code. For
    example, the Enter key would have code 0x01 0007 0028. Only keys that fall
    into collections "Keyboard", "Keypad", and "Tablet PC System Controls" are
    considered for this API; for example, a mixing desk with multiple
    collections of volume controls would not be exposed via DOWN and UP events,
    nor would a mouse, joystick, or golf simulator control.

  - **0x02 0000 0000 - 0xFF FFFF FFFF**: For keys that aren't defined in USB at the
    time of implementation, but that we need to support. For example, if Flutter
    were ever ported to the Symbolics LM-2, the "thumb up" key might be given
    the code 0x14 0000 0001, where 0x14 is defined as the “Symbolics” platform
    range. Where possible, we will use specific subranges of this space to reuse
    keys from other platforms. When this is not possible, the prefix 0xFF is
    reserved for “Custom” codes. Each platform from which we take codes will get
    a unique prefix in the range 0x2-0xFE. If multiple systems define keys with
    the same usage (not the same number), then the value with the lowest prefix
    is used as the defining code.

    Prefixes will be:

    |Code|Platform|
    |----|--------|
    |0x02| Android|
    |0x03|Fuchsia |
    |0x04|iOS     |
    |0x05|macOS   |
    |0x06|Linux   |
    |0x07|Windows |
    |0x08|Web     |
    |0xFF|Custom  |

    Further ranges will be added as platforms are added. The platform prefix
    does not define the platform it is used on, it is just the platform that
    decides what the value is: the codes are mapped to the same value on all
    platforms.

  - **0x100 0000 0000 - 0x1FF FFFF FFFF**: For keys that have no definition yet in
    Flutter, but that are encountered in the field, this range is used to embed
    the platform-specific keycode in an ID that must be tested for in a platform
    specific way. For instance, if a platform generates a new USB HID code 0x07
    00E8 that a Flutter app wasn’t compiled with, then it would appear in the
    app as 0x100 0007 00E8, and the app could test against that code. Yes, this
    also means that once they recompile with a version of Flutter that supports
    this new HID code, apps looking for this code will break. This situation is
    only meant to provide a fallback ability for apps to handle esoteric codes
    that their version of Flutter doesn’t support yet. The prefix for this code
    is the platform prefix from the previous sections, plus 0x100.

  - **0x200 0000 0000 - 0x2FF FFFF FFFF**: For pseudo-keys which represent
    combinations of other keys, and conceptual keys which don't have a physical
    representation. This is where things like key synonyms are defined (e.g.
    "shiftLeft" is a synonym for "shift": the "shift" key is a pseudo-key
    representing either the left or right shift key).


**This is intended to get us out of the business of defining key codes where
possible.** We still have to have mapping tables, but at least the actual minting
of codes is deferred to other organizations to a large extent. Coming up with a
code is a mechanical process consisting of just picking the lowest number code
possible that matches the semantic meaning of the key according to the
definitions above.

Here are some examples:

For example, on a French keyboard layout, pressing CAPS LOCK then pressing
SHIFT + Y would generate the following sequence:

DOWN, code 0x0100070039. (CAPS LOCK DOWN)<br>
UP, code 0x0100070039. (CAPS LOCK UP)<br>
DOWN, code 0x01000700E1 (LEFT SHIFT DOWN)<br>
DOWN, code 0x0000000059, string U+00059 (Y DOWN)<br>
UP, code 0x0000000059 (Y UP)<br>
UP, code 0x01000700E1 (LEFT SHIFT UP)<br>

Here's another example. On a German keyboard layout, you press ^e (the ^ key is
at the top left of the keyboard and is a dead key) to produce a “ê”:

DOWN, code 0x0000000302 (CIRCUMFLEX DOWN) It produces no string, because it's a dead
key. The key code is for "Combining circumflex accent U+0302" in Unicode.<br>
UP, code 0x0000000302 (CIRCUMFLEX UP)<br>
DOWN, code 0x0000000065, string U+000EA (Unicode for ê‬) (E DOWN).<br>
UP, code 0x0000000065. (E UP).<br>

It is an important point that even though we’re representing many keys with USB
HID codes, these are not necessarily the same HID codes produced by the hardware
and presented to the driver, since on most platforms we have to map the platform
representation back to a HID code because we don’t have access to the original
HID code. USB HID is simply a conveniently well-defined standard that includes
many of the keys we would want.
