izKeys layouts: visual diagrams

## Shortcuts for an impatient reader (you know who I mean!)

Goals (and current progress report), reading layout diagrams, “extra” keys. Do characters in layouts show all right?
Latin: Base layout, most frequent accented letters, using prefix keys, mogrifiers.
Cyrillic: Base (Russian) layout, second tier: Slavic, XIX century Russian, and (some) Kazakh, third tier: (8859-5; base Church Slavonic; X11-supported: Kazakh/Tatar/Ossetian/Chuvash/Udmurt/Komi/Yakut/Kalmyk/Bashkirian/Mari), “exotics”: titlo-forms, 10ⁿ-combiners, etc, rest: `ԡꙣꙥꚁ`.
Greek: Base layout, monotonic and symbols, polytonic, numeric, longs and shorts, Zodiak, Coptic and paleo-Greek.
Hebrew: Base layout, consonants, digraphs, vowels, layout of the rest of characters, cantillation, dial-a-niqqud. Difference with math Hebrew-symbols..
Accessing “other” scripts without changing personality.
Symbols: most frequent, Currencies and Business symbols, fractions, sub/superscripts, math symbols with a lot of variants vs. the rest, arithmetic operations, arrows, box-drawing characters, dial-a-dash and dial-a-whitespace, nice dashes, dashes again, IPA/Zhuang tone marks, DOS cp437.
Math flavors of Latin: common, all double-struck/script/fraktur, and more.
`Compose` key: basics, 3 implemented flavors.
Examples.

# izKeys layouts: visual diagrams

The diagrams below illustrate the most basic ways to use the izKeys (ee-zee-keys) keyboard layout. How to access the other keys? The info may be extracted from the table summaries of layout of the Latin and Cyrillic personalities (but these tables do not explicitly list the heuristics…). For more information, see this (you may also want to inspect the documentation of the toolset used to generate this layout: here, and here, but they are currently in a complete disarray).

Here, we almost completely ignore the questions how to enter math/IPA/UPA symbols (about a thousand is possible!), and exotic Latin letters (more than a thousand of them) — let us just mention that the concepts/mneumonics helping one remember many of them are “mogrification rules”, “GreenKeys/RipeKeys” and “BlueKeys”. (The reasons for a character to appear on a particular key are listed in the mouse-popups when hovering on characters; these terms appear there. See also the popups for the column headers in this table.) With the exception of the last section, what we discuss here is restricted to the most frequent Latin letters, as well as input of Cyrillic/Greek, and of Business symbols.

When a certain key or key combination is undefined, the keyboard produces the visible bell symbol `♪`. So one should not be surprised that this is the most frequent character in the diagrams below! Remember that our keyboard layout are optimized for ease-of-remembering, not for ease-of-finger-movements. (We completely ignore the “base row” and other terms of mechanics of finger movement. Anyway, it looks like “advantages” of keyboards optimized for kinesthetic might be exagerrated anyway: at least, more or less objective research is inconclusive.)

The diagrams are color-coded using outlines, character color, and character background. Outlines relate to mnumonic rules; green and blue outlines indicate that either mneumonics are based on the position of this character, or the characters are otherwise important, thus made easily guessable. On the opposite end, characters with brown outlines are hopeless to guess using heuristics, one must memorize them. The key assignment of characters with yellow outlines cannot be guessed immediately, but there is an approximate heuristic: it assignes a few possible positions to the character, so one can quickly find the needed key using 3–4 experiments; these heuristics are either explicitly mentioned, or related to sound/shape of character w.r.t. the Latin key it is put in.

We use white outline to indicate symbols „ ‚“ ‘ ” ’« ‹ » ›‐ – — ― ‒ ‑〃 ‵ ‶ ‷ ′ ″ ‴ ⁗ ´ which were replaced by “surrogate” symbols in the typewriter age (more about this below). In all diagrams, yellow characters denote prefix keys; other colors indicate visual bells, and characters assigned to `AltGr`-keys (when many characters are displayed on the same key). The meaning of background colors is the same as in here and here. This frame denotes letters which have 3 case forms (lc/uc/titlecase); and this frame indicates that the uppercase is encoded as two (or more) Unicode characters. Sometimes the whole key also has a special background color; this indicates that the positioning heuristic is “based on diagonals” — more details below.

Some prefix characters come in pairs; the secondary one acts as the primary combined with `AltGr`-inversion of the following keypress — so `PREFIX2 CHAR` acts as `PREFIX1 AltGr-CHAR`. This is indicated by the extra red outline on a with-`Shift`-pair (or on the secondary prefix). (See base Greek layouts for the examples.)

Trivia: to show this page correctly, one may need to install extra fonts (Deja vu, junicode, Symbola; unifont has a very good coverage, but it also [as of 2011] has a special glyph inserted (explicitly — instead of using `.notdef`!) for missing codepoints — and this severely interacts with a choice of better fonts). Some fonts have some glyphs wrong (I have seen wrong directions of arrows, wrong choice of OXIA vs VARIA, or DASIA vs PSILI — especially on ρ). Sometimes one should better zoom in (`Control-MouseWheel`, `Control-+`, or from menu; `Control-0` to return back) in browser to see details/differences of diacritic marks.

Note that some characters which may be entered with this layout are not included in any of mentioned fonts, so have a chance to be shown as boxes (empty, or with hex code inside). But if you cannot show them, they are probably not very usable to you anyway, right? If you do have fonts on your system which support these characters (put mouse on top of a character, and an explanation will pop up), read instructions how to fix this— at least in Firefox.

# The most basic Layout

/* To be auto-generated */
Hover mouse over left/right Shift to switch to “Un-shifted”/“Shifted” view; press key to flip.

Note that each colored letter-diagonal contains exactly one vowel (outlined in blue); the diagonals guide the quick-access to the ¨,´,`-accented vowels (discussed in the next section).

Are the etched symbols on your keys very different? Tough luck… — you will need to mentally rearrange the diagrams to suit your keyboard. (Keyboard drivers access keyboards basing on key scancodes, which mostly depend on the position of the key, not on what is drawn on it.) The mneumonics used here depend a lot on the etchings being as above. Trivia: ASCII encoding has SPACE and 94 other characters defined; this leads to 47 keys on the standard US keyboard (2 characters per key). The main variation in layout is the position of the `\|` key; sometimes `Enter⏎`/`←Backspace` keys have a different shape, and this key is moved about to compensate. Trivia: the position of this key differed on the initial XT/AT/Enhanced keyboards; apparently, keyboard manufacturers think that this gives them a license to freely move it around…

ISO keyboards have one “extra” key. Above, it is the other key `\|` (shown here to the left of `SPACE`). Its position varies a lot between keyboards; sometimes it is marked as `< >`; sometimes it is positioned to the left of `Z`; on many US keyboards it is omitted altogether. These variations in position and markup do not matter — if the key is present, it behaves as indicated; we do not put “important” characters at this position. Likewise, Brazilian ABNT and Japanese JIS keyboards have yet another key on alphanumeric rows: on ABNT it is next to the right `Shift`, on JIS next to `Backspace`. (Our diagrams do not show this key at all; for this layout, we do not plan to use it other than as a `Compose` key.)

# Base Latin layout when `AltGr` is pressed

All accented letters in this diagram are also available on easier-to-remember multi-key sequences (starting with prefix keys); so remembering positions of the most of characters in this diagram is not required: they are needed only to speed up the typing.

Pay attention to the difference between letters and symbols — we call them characters when we do not care about the distinction. “Letters” are parts of words; all the other characters are “symbols”. Symbols with white outlines denote “no-nonsense variants” of surrogate typewriter symbols `"`, `'`, ```, `-` etc. (Trivia: With invention of typewriters, many [tens?] of different symbols where jammed into one “surrogate” symbol to economize on the number of keyboard's keys; essentially, surrogates make no sense standalone. For decades. we were forced to use surrogates and deduce what was actually meant basing on context; nowadays, we can do better; see -This-, “this”, this′, this ″, `that´, ‘that’ and T H A T.)

/* To be auto-generated */

For this particular diagram: characters with green or blue outline are those for which people can immediately guess their position on keyboard. Since easily-guessable, these positions are a very valuable property, and are “set in stone” — they win in conflicts with other positioning heuristics. (Possible exceptions on guessability are ºª§; but if you saw the diagram above once, you have a good chance to guess them anyway. Euro € is at the position which is etched on many keyboards nowaday (compare with this discussion).

Trivia: in earlier versions of this keyboard, `·` and `§` were on 7/& key; then I discovered Blickensderfer No. 5 (1896)…. This was convergence in action! (But now I think that √ is much too similar to 7 to miss an opportunity….)

On the opposite end of the guessability scale are letters with brown outlines: they take ad hoc positions which must be memorized. In between on the guessability scale are letters on the colored diagonals (two ⤡-diagonal on the left-hand side, and four ⤢-diagonals on the right-hand side) — they may be calculated using a simple rule. Each colored diagonal has one vowel on the “base” layer, and three ¨,´,`-accented variants of this vowel are put on 3 keys on the diagonal — from top to bottom.

Example: observe the red diagonal on the right with ü/ú/ù.

Unfortunately, this diagonal is the only “clean” example: the other diagonals contain letters which are “set in stone”, so the by-diagonal rule loses. When a very important letter loses in playing chicken, it yellows (look for yellow outlines) and is “bumped away” one position across the diagonal (preferably down, if possible). (Observe the red arrows!) The extremely rare letters `ë`, `ỳ` and `ï` are just discarded; the more frequent `ì` withers and becomes brown-outlined.

Summary: How to type Blue/Green outlined characters may be guessed immediately. For no-outline characters on colored diagonals there is a very simple rule to locate them. If one also remembers the “bumped away” rule, one can locate 4 letters with yellow outlines. If one wants to quick-type the remaining 3 brown-outline letters (and no-outline symbols), one must memorize them.

Trivia: Did you notice `ẞ` = upper-cased `ß`? (These are different letters!) Unicode has many wonders... (this link leads to an extremely long thread!). Why `ê` is blue? It is the only set-in-stone accented vowel...

A remark on prefix key. The color on the diagram indicates that pressing `AltGr-$` produces a prefix key. It also shows that this prefix key is denoted as `£`; but keep in mind that using the symbol £ here is just a notational convention!

By itself, a prefix key does not make any sense. What is important to know is how to describe succintly the semantic of “what it does with the following letter/symbol/etc”; one may ask what happens when it is followed by space; and one may ask what happens when it is pressed twice. The answers are: it finds business-symbol/currency-symbol which matches best the given letter, or modifies the symbol by adding a vertical line; it produces `␠`; it produces `£`. Hence the notation above is quite appropriate.

In general, the prefix keys of this layout try to do likewise: when we denote a prefix key by a certain diacritic mark, we want: prefix + a letter (or `AltGr-letter`) produces the letter+diacritic with the diacritic as close to “this notation” as possible; prefix + a symbol mogrifies the symbol in a way similar to the name of the diacritic (say, `acute` may make “with sharper corners” version of the symbol, and `ring-above` may produce a “rounded” version); following it by `SPACE` produces the standalone diacritic character; and typing it twice produces the corresponding combining character. (Moreover, one can produce more standalone variants by modifying `SPACE` by `Shift` or `AltGr`; one can get more combining variants by prefix + `'` — and one can use `Shift`/`AltGr` on `Shift` or `'`.) (See this summary.)

# Base Cyrillic layout

The base layout of Cyrillic personality follows the only phonetic layout which has a remote chance to be called “standard” — one from X11. Letters with brown outline must be memorized. Positions of letters with green outline can be guessed with two tries (but if forgotten, they may lead to a [quickly going away] confusion):

/* To be auto-generated */

The most important other thing to remember is that if a letter (say, `Ю`) replaces ASCII symbols (such as ``` and `~`), the symbols are available via combination with `AltGr`. And `Ъ`/`Ё` are available also by combining `AltGr` with `Ь`/`Е`. (Compare with `AltGr`-combined diagram below, after the next diagram.)

Base Cyrillic layout as visible from Latin personality after `AltGr-Space` (so “RipeKeys” replace shared symbols; colors as in the previous diagram).

/* To be auto-generated */

# `AltGr` Cyrillic layout

In `izKeys` layout, the cyrillic letters are prioritized into classes; the higher the priority, the easier is the letter to key in. In the top priority class are modern Russian letters; one can enter them using only the `Shift` modifier. The second-class citizens may be keyed in using an extra `AltGr`-modifier. For third-class citizens, one uses the `AltGr-'` prefix; for the fourth-class citizens, the key after this prefix requires `AltGr`-modifier. Finally, there are certain “exotics”; they are entered with `AltGr-^` prefix (possibly with `AltGr`-modifier on the next keypress).

One of the ideas of the `izKeys` layout is that when the “priority class” of a letter is known, one should be able to immediate guess on which key this letter is present. (There are exceptions, but they are in a very narrow minority.) What remains is knowing how the priority is assigned to letters; this is explained near the diagram of every class.

Here is the base Cyrillic face (essentially, consisting of Russian letters) with `AltGr`-bindings added in red. These second-class citizens are from the modern Slavic Cyrillic-based languages, XIX century Russian, and Kazakh:

/* To be auto-generated */
Hover mouse over left/right Shift to switch to “Un-shifted”/“Shifted” view; press key to flip.

Color codes are as above; positions of the letters Ѣ,Є,Ә are artificial, but still may be guessed on the third try, while positions of Ѓ and Ј must be memorized (heuristics: Ѓ overflows down from Г=G; the position of Ј “is questionable”. For the rest of the letters, if one knows that they are indeed prioritized to be on `AltGr`-bindings, one can immediately guess on which key. (And to know this is simple: all of the characters described above are present, except for Kazakh Ғ Ң Ө Ү Ұ [available on “extras” Cyrillic layout — with Ғ overflowing left to F, and Ұ requiring `AltGr`]; the only other characters present are Ԗ Ѡ Ѱ and PALOCHKA Ӏ.)

Prefix keys are in yellow. In addition to £ (which is Business-prefix=`AltGr-$` — same as on Latin face), two Cyrillic-specific prefix keys are: `AltGr-'` introduces “extra” Cyrillic letters (and fractions), and `AltGr-^` introduces titlo-forms and “exotic” Cyrillic characters. As usual, pressing the prefix twice produces the corresponding combining character: the stress mark and titlo.

# The “prefixed” Cyrillic layouts

The “extras” Cyrillic layout (the prefix is `AltGr-'` in Cyrillic personality; double-`AltGr-SPACE` in Latin):
/* To be auto-generated */

Letters with yellow overline are not in the most obvious positions, but at least there is some hope to remember some heuristics. This includes ҼҾ (Abkhazian CHEs) and ҒӺ (stroked GHE's) which “slided to the left” from Ч and Г, and Komi Ԋ on comma [;-].

This face contains the “leftover” characters of ISO 8859-5, Church Slavonic (except letters-titlo-form and powers-of-10), and the characters in flavors of ru on X11 (Kazakh, Tatar, Ossetian, Chuvash, Udmurt, Komi, Yakut, Kalmyk, Bashkirian, Mari). The iotized letters are of decreased priority; yet more penalized are latinized, with-diaresis, hooked, and stroked variants. (Of two letters competing for the same position, the more penalized one becomes red.)

The rules to enter fractions are very simple: `AltGr-' DIGIT` enters a fraction with the digit in denominator; `AltGr-' Shift-DIGIT` does the same for numerator. If another precomposed fraction with the same denominator/numerator is available in Unicode, add `AltGr` modifier to access the other fraction. Example: there are four fractions with denominator 8: ⅛, ⅜, ⅝, ⅞ (in order of numerators). Now `AltGr-' 8` accesses the first one, ⅛; pressing `AltGr-' AltGr-8` accesses the second one, ⅜. All precomposed fractions can be entered this way (Example: ⅝, ⅞ may be entered via digit-in-numerator `AltGr-' AltGr-%` and `AltGr-' &`).

The rule above is for Cyrillic personality. From Latin personality, either prepend switch-to-Cyrillic prefix `AltGr-SPACE`, or replace `AltGr-'` with `lCtrl-lAlt-:` or `Menu-;` or `rCtrl-AltGr-:` or `lCtrl-Mnu-/`. (Likewise, for “exotic Cyrillic” from Latin, one may use `Menu-:` prefix.) Trivia: there is another way to enter Unicode fractions: use superscript digits for the numerator, subscript digits for the denominator, and separate them by FRACTION SLASH available via GreenKey `Shift-SPACE /` (as well as on `AltGr-/ SPACE`) to get something like ¹²⁄₃₅ (the very narrow “bounding box” of FRACTION SLASH ensures the nice look); superscript/subscript digits are on `Green/Ripe`, hence may be also entered with `lCtrl-lAlt/ApplicationMenu`.

Titlo-forms, power-of-10 multipliers, and “exotics” (the prefix is `AltGr-^` in Cyrillic personality; triple-`AltGr-SPACE` in Latin):

/* To be auto-generated */

Note the `Shift`-trick: since titlo-forms are not available in upper-case, we hijack the `Shift`-position and put the titlo-form of an “extra” letter (one on `AltGr-' LTR`) to `AltGr-^ Shift-LTR`; see keys `Ю` and `Я` above. Also, note exceptions: ◌ⷵ on S, titlo-Ꙉ (djerv) ◌ⷸ on D, ᴫ (small capital л) on L, and ᵸ on N (which is a “modifier letter”, not a “combining letter”). Power-of-10 multipliers are available on the corresponding digit keys 3...8. (Trivia: all multipliers but “thousands” ҂ are combining.) Ocular О's ꙨꙪꙬꙮ are on digits 1...3 according to their multiplicity (with or without `AltGr`; note that here 3 means “many” ;-). In addition to these exceptions, yellow outlines are on heuristically good ZEMLYA/DZELO Ꙁ/Ꙃ on 0, Ҹ which “slided left”, and Komi letters NJE/ZJE/DZJE on comma ;-) (here — and on the “extra” layer).

Trivia: Many paleo-Slavonic “exotics” were championed into Unicode by Balkan scholars; it is not surprising that the approach of these scholars was different from what was traditional for East and North Slavic studies. Nowadays there is a hope to get a consensus on how to transcribe North Slavic manuscripts into Unicode; see this proposal, its part II, and this page. (There is widespread misunderstanding of how to use еЕ/єЄ for paleo-Slavonic: these are for ”есть узкий/широкий”.)

# Base Greek layout + monotonic + polytonic + Coptic

Base Greek layout as visible from Latin Personality (on GREEN=`Shift-SPACE` prefix, so GreenKeys replace symbols):

/* To be auto-generated */

Positions of Greek letters with brown outline must be memorized (heuristics: θ and Q are both O with an extra stroke; y is one half of ψ). The rest of base letters is guessable: either phonetically, or, if conflicts appear, visually (the base letters coincide with the Galaxy layout; the mixup of `χ/Χ` (chi; on `x`) and `ξ/Ξ` (xi; on `c`) is unfortunate, but it is shared by many other layouts). Two green-outline letters pre-combined with diaeresis must also be memorized if one wants to enter monotonic Greek; `;` and `?` give the Greek flavors (Trivia: the latter is deprecated — use the Latin `;` instead).

Polytonic Greek is produced with 3 prefix keys `\`, `[` and `]`. Pay attention to vowels (blue outline) above, one on every color-tinted diagonal; compare with this `GREEK [` layout (with `AltGr`-bindings added in red):

/* To be auto-generated */

(For a moment, ignore the key `3#`.) Observe that all characters have aspiration ῾ (visually similar to `[`), that the other accents depend on the row and color (black or red), and the base letter depends on the (colored) diagonal.

The rule: Prefix `\` with a key on a diagonal of a vowel produces the accented vowel: the row determines the accent: the top letter row gives the polytonic variant ´ of acute accent (OXIA), the low letter row gives the grave accent ` (VARIA), and the number row gives the circumflex accent ῀ (PERISPOMENI). The middle letter row gives none (of these 3 accents). Combine the letter with `AltGr` to obtain the combinations with diaeresis (DIALYTIKA; applicable only to ι/Ι and υ/Υ) or iotization (YPOGEGRAMMENI=ͺ or PROSGEGRAMMENI=ι — on lower/upper case). To combine with aspiration, replace `\` by one of `[` and `]` — depending on the shape of aspiration accent: ῾ (DASIA) and ᾿ (PSILI). Rho ρ/Ρ takes aspiration signs as if it were a vowel; the corresponding “diagonal” contains the only key ```.

Example: `GREEK [ AltGr-@` produces ᾯ (here `GREEK` is GREEN=`Shift-SPACE`). And here is why: `@` is `Shift-2`; due to `Shift`, the result is in uppercase; the key with `2` and `@` is on the green diagonal which contains the vowel ω/Ω; hence one gets an accented Ω. It is iotized (note ι-like diacritic below) since `@` was combined with `AltGr`; the key with `2` and `@` is on the number row, which adds the circumflex (and in Greek it looks like `~`); finally, since we used `[` “instead of” `\`, this adds the aspiration ῾ (DASIA) looking like `[`.

Observe the red symbols on the rightmost red diagonal: they are standalone polytonic diacritics! (The diagram above is as seen from Latin personality; from Cyrillic one there are usual complications related to many ways to produce ёЁъЪ — for example, the key `#` does not access number-symbol ͵ as it does from the Latin personality.)

Summary for standalone: to enter a standalone polytonic diacritic, pretend that you put it on (non-existent) OMICRON-DIALYTIKA (in other words, the last key in the sequence should be `AltGr-` on a key in the rightmost red diagonal — the diagonal of `.` DOT). What to do with DIALYTIKA/YPOGEGRAMMENI/PROSGEGRAMMENI which would require a “second” `AltGr` modifier? Replace it by `Shift`! (Exceptions: removing this `Shift` converts the standalone PROSGEGRAMMENI to (surprise!) YPOGEGRAMMENI; and `Shift` converts PSILI to CORONIS. There are other ways to get combinations like DIALYTIKA AND VARIA: for example, by adding GRAVE to DIAERESIS via `AltGr-` AltGr-;`. Trivia: Note also that there is no standalone DIALYTIKA symbol; use the standalone ¨ DIAERESIS via `AltGr-; SPACE` instead.)

Numeral signs are accessible on keys `3` and `#`. On the prefix `/` they are “as expected”: `3` gives the lower one, and `#` the “normal” one (duplicated on the prefix `]`). (On the prefix `[` this pair is inverted, to fight with ъЪёЁ-confusion in access from the Cyrillic personality.) To join them, standalone monotonic diacritics ΄,΅ are available on `AltGr-3` and `AltGr-#`.

Macron and breve: Observe that by the rules above, `GREEK \ LTR` with `LTR` from the middle letter row would produce an unaccented vowel. To avoid waste, they instead produce either a vowel with breve (VRACHY) or with macron (vowels α/υ/ι may take them — the other vowels already have separate forms for shorter/longer variants), or LUNATE variant symbol ϵ for ε (on `d`). To get breve, proceed as if you want to get unaccented vowel; to get macron, do the same on the next key to the right or left (so a/j/k produce ᾰ/ῠ/ῐ, s/h/l produce ᾱ/ῡ/ῑ, and d makes ϵ). To clarify, here is the diagram of `GREEK \` (observe also Zodiak symbols on `Shift-NUMBERS` row):

/* To be auto-generated */

Trivia: Numeration of Zodiak constellations starts on the spring equinox; so the first 20 days of `N`th month is in the Zodiak sign number `N-3` or `N+9`. We put 10th,11th,12th signs on keys `0 )`, `- _` and `= +`; to get 13 for the price of 12, the sign ⛎ (for the not-Zodiacal but ecliptical constallation Ophiuchus) is put on `~`.

Monotonic and “special” Greek letters can be accessed on the base face by combining with `AltGr`. On vowels, this adds tonos ΄ (acute accent). On consonants, it produces special forms (final, scientific etc) and archaic letters. Here is the Greek face with `AltGr`-bindings added in red:

/* To be auto-generated */

Observe kai ϗ — this is one of exceptional cases when a lower-case letter is put in a `Shift`ed position. (As a case pair, kai is available via the “Coptic prefix” ```.) Note also that red letters with yellow outline are guessable by simple heuristics (“one of the sounds” for stigma Ϛ, visual for the rest). (Moreover, digamma Ϝ is “on top of” Ψ which “is a di-Y”, and we use ϔ as “the shifted variant” of ΰ.)

The prefix key ``` allows one to enter Coptic (and multitude of others Greek-related symbols).

1. Entering full analogues of Greek letters does not require additional explanations (including SOU/so/su Ⲋ, SHIMA/tsheema/qima Ϭ, and SAMPI/none/psis nše Ⳁ which are analogues of stigma Ϛ on `AltGr-t`, koppa Ϟ/Ϙ on `AltGr-Z/C` and sampi Ϡ on `AltGr-x`);
2. two “empty” slots at J/V (were Ϊ/Ϋ) are taken by genga/ḏanḏia/GANGIA Ϫ on `j`, fay/fai/FEI Ϥ on `v` (or `AltGr-f`);
3. the other letters without Greek analogue are on `AltGr-LTR` where the `LTR` is the initial letter of the name on the Wikipedia page of 2012
4. with exceptions for: `LTR` is the first letter of the Unicode name for DEI/tee/ti Ⲇ and KHEI/khay/xai Ⲕ.

Here is the `AltGr-GREEK `` layout with `AltGr`-bindings added in red:

/* To be auto-generated */

Note the Coptic dash (plus more dashes), DOS' dingbats for Control-range characters (on `Shift-DIGIT`s, and `AltGr--`, `AltGr-_`), and (obsolete) Zhuang tone marks on `AltGr-DIGITS` (from 2 to 6), and stroked + latinized ι/υ/λ as ᵼ/ᵿ/ƛ. Additional “semi-randomly assigned” AltGr-letters: Bactrian sho Ϸ on b; ½-H heta Ͱ/ͱ on 1; yot ϳ on j; Pamphylian digamma Ͷ/ͷ on g; san Ϻ/ϻ on m, ϒ on U, lunate sigmas ϲ/Ϲ on v, reversed lunate sigmas ͻ/Ͻ on o, reversed epsilon ϶ on e, kai's Ϗ/ϗ on q, (reversed) dotted lunate sigmas ͽ/Ͽ ͼ/Ͼ on r and y, and archaic sampi Ͳ/ͳ on n. (inverted) Ohm Ω/℧ on W/w.

Trivia: Latin variants of names of Coptic letters are not standartized; so we use 3 names: Unicode name in capital, and two lowercase names from Wikipedia pages: of 2012/08 and of 2012/01. Since important for finding the positions, the remaining ones are: SHEI/shy/šai ϣ, HORI/hoori/hori ϩ. (To simplify memorization, SAMPI/none/psis nše Ⳁ is also made available on `AltGr-p`.)

# “Business/Currencies/Hooks/Added Vertical Line/Not+mogrify” layout

“Business/Currencies/Hooks/Added Vertical Line/Not+mogrify” layout (as visible from Latin personality after `AltGr-$`):

/* To be auto-generated */

Observe that all of `©®℠™℗` “Business” signs are in the obvious locations; so are Vietnamese ơ and ư (heuristic: the $ sign has a hook on top right). All the currency signs of Unicode 6.2 can be entered by the first letter of their name or the country name (but one may need to combine with `Shift` or `AltGr`). Exceptions are YUAN[s],RIEL,RIAL,LIVRE TOURNOIS which are entered by the second letter. (Trivia: there are 3 signs for YEN (one latin, and 2 ideographic), and 2 (ideographic) signs for YUAN.) The “principal” sign for both of them is available on `y/Y`; the remaining 2 signs for YEN are on `AltGr-y/Y`, and both signs for YUAN are on `AltGr-u/U`. The remaining exceptions are the common currency symbols recognized by the shape, such as `$` and `£`.

Here is the same layout with `AltGr`-bindings added in red (with letters outlined in green, and business symbols in blue):

/* To be auto-generated */

Note that zero-vowel Latin letters (schwa) are positioned on `Z`. This convention (considering `Z` and `0` as siblings) also influences other decisions made in design of this keyboard. Trivia: Do not confuse these Latin letters between themselves (Azeri əƏ vs. African ǝƎ), or with similarly-shaped Cyrillic letter әӘ, or with IPA symbol ə for schwa, or with `THERE EXISTS` math symbol ∃. As a minimum, they sort differently, have different capitalization rules, and their surrounding may be typeset differently by a smart enough typesetter. Similarity (or even identity) of glyphs has very little relationship to “sameness” of Unicode characters.

# The standalone version of the Greek for-Polytonic personality

/* To be auto-generated */

# The standalone version of the Hebrew personality

/* To be auto-generated */

(As usual, yellow outline means guessable-with-a-few-tries characters, brown outline means that the position must be learned.)

CONSONANTS are at the corresponding phonetic `QWERTY` lower-case positions, except for HET ח on `H` (or slided right to `j`) and visually placed SHIN ש on `w` and TET ט on `u/T`. (Trivia: two other “QWERTY” layouts, ZC and Script, place consonants the same as our — with exceptions of TET and VAV (one on `v`) — and they mismatch at these positions.) If a final form exists, it is put on `Shift`-position; likewise for SIN/SHIN variants (with the corresponding combining dot put in `AltGr`-position). DAGESH/MAPIQ/SHURUQ must be memorized on `Y`. (Additionally, HOLAM FOR VAV is on `AltGr-v`.)

The Yiddish digraphs are on `AltGr-Shift` of the suitable key. Trivia: Only one of them, ײַ, cannot be entered using Hebrew letters; it is put on more accessible `AltGr-y`. The only other non-Hebrew sign, JUDEO-SPANISH VARIKA is on `AltGr-j`. Dotted versions of BET בּ, KAF כּ/ךּ, PE פּ/ףּ may be entered with `AltGr` (on the left-hand key, if the base letter is on two keys).

VOWELS (niqqud) are positioned phonetically (and according to their — vestigal — duration) on keys with the blue outlines. Trivia: there are up to 5 durations per sound, ordered in decreasing order: one may consider SHEVA ◌ְ as the 4th form of `e`, and `o` has 4 or 5 forms, וֹ, ◌ֹ, ◌ָ/◌ׇ, ◌ֳ.

The first 3 niqqud are put on `Shift/AltGr/Shift-AltGr`-vowel. The remaining (up to 2) are put on `AltGr/Shift-AltGr` of the key below the vowel. So in the diagram above, it is the longest form which is visible on the `Shift-vowel` (except for `i` for which we cover one duration ◌ִ only; it is יִ which is put on `AltGr-i`).

SLIDED VOWELS: In addition to its `AltGr`-position, the secondary vowel point is also put on `Shifted` key below the vowel (observe the colored groups of keys above). The shva-form of the vowel is (in addition to its `Shift-AltGr`-position) on the key above (or, if not possible, right). Trivia: For `o`, one can go neither above nor right. One tertiary form is already on `A` (the ambiguous one); the disambiguation form can be entered without `AltGr` only on keyboards with an ISO key.

Likewise, we slide SHEVA yet more down of `e` — to `V`. Except for RAFE, SHIN/SIN DOTS, QAMATS QATAN and HATAF QAMATS, all niqqud may be entered on `Shift-letters`. (Since RAFE may be quite frequent in certain contexts, RAFE and QAMATS QATAN are made available on the “102th” ISO key. Trivia: according to the stats here, HATAF QAMATS is the rarest of all niqqud.)

The diagram below illustrates the `AltGr`-layout. The recipe above positions dotted/niqqud/Yiddish on the letter keys (outlined in yellow). Additionally, on symbol keys the yellow outline is for characters positioned according to their role: `-, +, comma, dot`.

/* To be auto-generated */

CANTILLATION MARKS are positioned visually (green outline on symbol keys), or according to the first letter of Unicode name (blue outline) or the 1st-letter-of-the-2nd-word (green outline on letter keys; also on SHALSHELET — which is put based on the 1st Hebrew letter, SHIN). If there is no more space for the mark, the mark migrates along an arrow to the neighbor key (and gets a brown outline; only for GERESH and variants of `<,~`). Trivia: the Unicode names are mis-transliterated.

DIAL-NIQQUD-BY-NUMBER: On `AltGr`-digits, the niqqud is put “visually”, according to its “number of dots”. Here we count in binary: `T` of ◌ָ is counted as if it were ˙ ⁚ ˙; we count — of ◌ַ as merged 8 dots. (And ⋱ is counted as a diagonal in a 3×3 square, giving 9. ;-) Now note that 10 points of —: land it on 0, and that shva of SHEVA is counted both as a `Shift`-variant of 2 dots, and — visually — as `=`. (And `T` of ◌ׇ counted as 7 is just an exception.)

Annotation marks ◌ׅ, ◌֯, ◌ׄ also have brown outlines (on `?cC`). Punctuation is not specially highlighted (since the rest is drawn with ◌). All Hebrew cantillation marks, punctuation and annotation marks are present; those without outlines are duplicates — at more or less random positions. The reorder-control invisible characters are on `AltGr-Shift-6,7,8,9,0` (heuristics: ‸ separates, `&` joins, * of CGI, “(” and “)” group and introduce order; I know no standard way to visualize them.) Trivia: Handling of multiple accents on a consonant is not a responsibility of an input method (with exception of providing CGJ); however, mention this thread of 2003, this summary of 2003, and these experiments of 2012.

Below is a combined diagram of this layout with `AltGr`-bindings added in red.

/* To be auto-generated */

Trivia: note that Unicode names for characters `([{}])` start with `LEFT/RIGHT`, but the Unicode defines their semantic (in BiDi context) to be `OPEN/CLOSE` instead. In particular, when in Right-to-Left context, the `CLOSE` characters mutates their shape to `([{`, likewise for `OPEN` to `}])`. This is called BiDi mirroring. A similar effect happens with `< >`, but at least this reflect the names `LESS/GREATER THAN` of these characters.

This layout follows the “logical” approach, not the “visual” approach: pressing `Shift-9` enters the `OPENING PARENTHESIS`, not the “character which looks like `(` in Hebrew text”; likewise for other mirroring characters. So to type “(WORD)” one types `Shift-9 W O R D Shift-0` no matter whether `WORD` is in left-to-right or right-to-left script. Similarly, `Shift-,` produces `LESS THAN`, and not the character which looks like `<` in right-to-left context.

# `Green/Ripe` access and `BlueKeys`

In additition to its satellite faces (such as diacritic faces of Latin personality, or “extras” and “bizzare” Cyrillic faces, or polytonic/Coptic for Greek), each personality has bridges to the other 3 scripts. These bridges are intended for a quick entering of individual characters from another script; to enter a stretch of text in another script, it makes much more sense to switch to the personality of this script (how such switching happens is OS-specific). (For very short stretches, one may also consider the convenience access via keeping down appropriate modifier keys [`Application-Menu` etc]; see below.)

The prefix keys enabling the bridging are codenamed `Green` and `Ripe`: they are `Shift-SPACE` and `AltGr-SPACE` (also mneumonic as Left/Right). Pressing these prefixes repeatedly accesses also the “convenience faces” (MathBlue, Business, negation etc). The personalities are ordered as Latin, Greek, Cyrillic, Hebrew, and the prefixes `Green`, `Ripe` and `Ripe×2` accesses 3 “other” personalities in this order.

Repeated `Green` accesses: (×2) MathBlue, (×3) Business, (×4) Coptic. ×3-Repeated `Ripe` accesses the “extras” `Cyrillic'`-face. As an added convenience, the base layer of the `Green/Ripe` face is also accessible via combining keyspresses with `lCtrl-lAlt/Application-Menu` modifier key(s) (recall that `Green` is base Greek/Latin from Latin/Cyrillic, and `Ripe` is Cyrillic/Greek from Latin/Cyrillic). These accessors `lCtrl-lAlt` and `Application-Menu` match the mneumonic of Left/Right. (Unfortunately, only the Base-layer and layers entered with `AltGr` or `Control-Alt` are controlled by the `CapsLock`; this excludes `Ripe`.)

On symbol positions, the `Green` and `Ripe` faces differ from the scripts personality's faces: the keys identical to the current script's keys (automatically non-alphabetical!) are replaced by special `GreenKeys` and `RipeKeys`. This provides a quick way to enter special symbols.

Another way to access special symbols is via `BlueKeys` (available on `2×Green`). The principal difference between `BlueKeys` and the `Green/RipeKeys` is that `BlueKeys` are also sources for mogrification: for example, when macron mogrifier prefix is followed by `&` key, it cannot produce any reasonable result; so in addition to trying to mogrify `&`, it also tries to mogrify the corresponding `BlueKey`, which is `∩`, producing `⩃` (the alternative way `⩍` to combine horizontal line with ∩ is available on macron + `AltGr-&`).

So the symbols which may be subject to extensive mogrification are put on `BlueKeys`; the “unique” symbols which won't be useful as sources for mogrification are put on `GreenKeys` and `RipeKeys`. The heuristic for distinction between `GreenKeys` and `RipeKeys` is that `GreenKeys` are more “mathematical” when `RipeKeys` are more “typographical”; for an example, consider `·` and `…` competing for the “`.`” position.

See example of `GreenKeys`, of `RipeKeys`. Below is the `MathBlue` face (which combines `BlueKeys` [with blue frames], “operators”, math letters, and a few “extra” characters) as visible from Latin personality:

/* To be auto-generated */

Trivia: Note the difference between Hebrew-letter mathematical symbols (ℵ], (ℶ], (ℷ], (ℸ] and the Hebrew letters (א], (ב], (ג], (ד]. As a minimum, they are typeset in different directions (in this file, they are entered in the order (aleph]/(beth]/(gimel]/(dalet] and are surrounded by open-round/close-square parentheses); then this change of direction affects the symbols surrounding them (the parentheses in between Hebrew letters are mirrored, commas in between are typeset in the right-to-left order); and then most probably the application will take them from different fonts — and even if taken from the same font, they may have very different shapes/sizes since symbols are made look good when surrounded by Latin characters. Another comparison: ℵ₀, ℵ₁ vs. א₀, א₁. (Both examples are entered as: ALEPH₀, ALEPH₁.)

# Extras: use `Application-Menu` (and other) modifiers

First of all, the base layer of the `Green/Ripe` faces is also accessible via combining keyspresses with `lCtrl-lAlt` or `Application-Menu` modifier key (this enters base Greek/Cyrillic in Latin mode, or Latin/Greek in Cyrillic). (Unfortunately, `CapsLock` is ignored with `Application-Menu`.)

Second, arrows may be entered by combining this modifier with 8 “direction keys” (arrows etc) on the numeric keypad. `Shift` makes double-arrows; the wide key and the high key (`0 Ins` and `Enter`) make double-sided arrows; the key in between (`. Del`) makes a long right arrow. One can use also “islands” synonims of these keys.

Third, the arithmetic operation keys on the numeric keypad are modified to become “elementary school” variants (÷×), or with `Shift`, “operator” variants (`+` has no operator variant, so it becomes ∑). Since `−` and `+` have no “elementary school” variants, these keys produce digit-wide dash, and Hebrew “elementary school” plus ﬩.

Fourth, the numeric keypad with `NumLock` enabled and `AltGr` modifier produces box-drawing symbols on digits 1–9, with horizontal line on the “wide” key `0 Ins`, and vertical line on its neighbor `. Del`. Combine with `Application-Menu` to get double-lines, or/and with `rCtrl` to flip doubling of vertical lines (heuristic: the right Control-key controls doubling-of-the-symbol to-the-right). Example: with `AltGr-rCtrl` the top row 789 produces ╓ ╥ ╖. (Easter eggish: removing `AltGr` replaces double lines by bold lines: ┎ ┰ ┒! Currently. single `rCtrl` requires addition of `lAlt-rCtrl`. Also: removing `NumLock` produces wide-frame drawings, white/black frame without/with `Shift`: ▗ ▄ ▖/▛ ▀ ▜ on 789.

Fifth, the `F`-keys with `AltGr` modifier produce dashes (or whitespace when `Shift` is added). The dashes are ordered according to length, so 01234 produce soft hyphen, hyphen, n-dash, m-dash, long-dash ― (HORIZONTAL BAR U+2015); the sequence is continued by paragraphos, which goes into other obelism marks ⸏⸓⸎ (here `F0` is another name for `F10`). Near the right end are also NON-BREAKING HYPHEN, HYPHEN-BULLET, FIGURE DASH and OVERLINE. The whitespace comes in decreasing width: the `F`-key `Fk` produces the whitespace of width about `em/k`; the exception is `F9`, which produces the “mathematical” ²⁄₉-em space (Trivia: it is usually described as ⁴⁄₁₈-em), and `F0=F10`, which produces the 0-width space (Trivia: this is typically has a meaning of “word separator” used to make the line breakable at this place). The “unused” positions `F7`, `F11`, `F12` keep EM-QUAD, FIGURE SPACE (heuristic: it is near digits), and PUNCTUATION SPACE. (Trivia: MathML to Unicode mapping sends ¹⁄₁₈-em space to `HAIR SPACE`, but watch what they do with negative spaces! Unicode tables say only that HAIR SPACE is narrower than ⅙-em. Anyway, we put it on 8.)

Moreover, one can enter Hebrew with modifiers `ApplicationMenu-rCtrl`.

Lastly, several multi-character strings may be inserted (the current key assignment is random, and selected to simplify debugging of keyboard input in applications). Two variants of m-dash surrounded by tiny whitespace are provided: one with narrowest whitespace is on `lCtrl-lAlt-comma`, one with slightly wider whitespace was on `rCtrl-AltGr-slash`). One-character long Plane1 string is on `lCtrl-lAlt-<`, and two-character long Plane1 string is on `lCtrl-lAlt->`; they enter 𝄞 and 𝄡𝄡. One can also replace any of these `lCtrl-lAlt-` by `AltGr-rCtrl-` or by `lCtrl-Mnu-` (except for `lCtrl-Mnu-/` which conflicts with fractions prefix!).

# Extras: mathematical letters

Trivia: On windows, one cannot enter mathematical letters (with very few exceptions — all available on `Green×2`— they are not in BMP) using prefix keys. To compensate, we provide alternative ways to enter them using multiple modifier keys: `AltGr-rCtrl-` enters Double-Struck (𝕢𝕨𝕖𝕣𝕥𝕪/ℚ𝕎𝔼ℝ𝕋𝕐/𝟙𝟚𝟛𝟜), `AltGr-ApplicationMenu-` enters Script (𝓆𝓌ℯ𝓇𝓉𝓎/𝒬𝒲ℰℛ𝒯𝒴), and combining all these modifiers enters Bold-Fraktur (𝖖𝖜𝖊𝖗𝖙𝖞/𝕼𝖂𝕰𝕽𝕿𝖄). (Heuristic: Bold-Fractur is the more bizarre than either of Double-Struck or Script.)

Another heuristic for these assignment (and assignments below) is that `rCtrl` adds (or removes) boldness, and `ApplicationMenu` adds (or removes) italic-ness; call them “B/I modifiers”. Go along these lines: in combination with these keys, `AltGr` is MathBizarre, and Bold/Italic/BoldItalic flavors of MathBizarre are Double-Struck/Script/Bold-Fraktur.

Trivia: Actually, Script and Fracture come in 2 flavors of boldness. Moreover, letter-symbols used for “ISO-80000-2 tensors” (SansSerif-Bold-Italic) may be considered as “yet bolder” flavor of Double-Struck. To get these extra flavors, replace `AltGr` by `lCtrl`. Heuristic: `lCtrl` behaves similar to `rCtrl`

Unicode defines also multiple ranges of Latin mathematical letters, with just minor typographical variations. The utility of users entering them directly is questionable (except maybe for letters A,a,I which may appear both in plain English, and as math symbols; so they may win from explicit disambiguation; or — following the sensible practice mandated by ISO-80000-2 —  use different symbols for letters d,e,i when they mean variables, and when they mean constants or operators; monospace math?). However, to debug the problems with different applications (not) working with the keyboard, it makes sense to assign distinct characters to as many combinations of modifiers as possible. Moreover, defining extra combinations should have no negative impact on applications and users, and should not have measurable impact on the system memory footprint.

To follow on these lines we define the following mappings; they are made as orthogonal as possible:

- `AltGr-` + B/I modifiers: MathBizarre (𝔸/ℬ/𝕮);
- `lCtrl-` + B/I modifiers: Bold-flipped flavor of MathBizarre (𝘼/𝓑/𝔔);
- `lAlt+AltGr-`: Math Latin monospace (𝚀𝚆𝙴𝚁𝚃𝚈);
- `lAlt+AltGr-` + B/I modifiers: Bold/Italic variants of Math Latin (𝑞𝑤𝑒𝑟𝑡𝑦𝑄𝑊𝐸𝑅𝑇𝑌|𝐪𝐰𝐞𝐫𝐭𝐲𝐐𝐖𝐄𝐑𝐓𝐘|𝒒𝒘𝒆𝒓𝒕𝒚𝑸𝑾𝑬𝑹𝑻𝒀);
- `lCtrl+lAlt-`: Greek (θωερτψ);
- `lCtrl+lAlt-` + B/I modifiers: Bold/Italic variants of Greek (𝜃𝜔𝜀𝜌𝜏𝜓/𝛉𝛚𝛆𝛒𝛕𝛙/𝜽𝝎𝜺𝝆𝝉𝝍);
- `lAlt-` + B/I modifiers: unBold/unItalic variants of tensor = SansSerif-Bold-Italic (𝗾𝘄𝗲𝗿𝘁𝘆/𝘲𝘸𝘦𝘳𝘵𝘺/𝗊𝗐𝖾𝗋𝗍𝗒).

Note: Out of 18 additional Latin/Greek mathematical alphabets defined by Unicode, this supports all but 2 Greek Sans Serif alphabets. However, `lCtrl+rCtrl-`combinations cause several problems.

Trivia: The International standard layout rules are

- The overall rule is that symbols representing physical quantities (or variables) are italic, but symbols representing units, or labels, are roman.
- Symbols for vectors and matrices are bold italic, symbols for tensors are sans- serif bold italic.
- The above rules apply equally to letter symbols from the Greek and the Latin alphabet.

# Extras: using `Compose` key

The idea of `Compose` key is that to get a character, you punch this key, then enter a sequence of characters which is “a natural representation” of the character (or another “natural identifier” of it). In other words, you “decompose” the character into components, and the keyboard “composes” these components back. For example, one could decompose `á` into `' a`, and `ŋ` into `e n g`.

Currently, the `Compose` key may be entering either using the “second extra key” in the base region, or (temporarily) as `Mnu-F12`. There are 3 modes depending on how may times you punch `Compose` before typing the decomposition: X11's standard `.Compose` rules, MathML entities, and RFC 1345 character mneumonics.

Of standard `.Compose` rules, we support only those starting with `Compose` (denoted as `Multi_key` in the reference above), having no dead-keys, and being expanded to one BMP character. Inspect also the explanation of the “regular” part of `.Compose` rules (look at end for entries with `s`). For entity names: if one is a beginning of another entity name, one must follow the shorter one by `SPACE`. (BTW, it may be more useful to inspect entity names via the full list.) The full list of RFC mneumonics is supported, as well as £ on `E u`. (Trivia: this list supports only a repertoir of the very old version of Unicode.)

(With version 0.60, one must use Latin characters in the decomposition; hence using `Compose` from, e.g., Cyrillic personality is tricky.)

# General goals and progress report

1. No gotchas for people who cannot remember anything.
2. Doing 3–4 experiments, one must be able to find most (80–90% achievable?) of covered characters knowing only a handful of general rules for how position are allocated to characters [*].
3. Gradual degradation: if one memorizes many allocation rules, one should be able to type exotic characters quickly and conveniently. But if one remembers fewer rules, it should be the convenience which goes away, not the bulk repertoir of available characters. This means that a significant number of characters should be available via very easy to remember access rules (no matter whether the access is ergonomic). Then the more one is ready to memorize, the more ergonomic the layout becomes.
   This means that many characters should be accessible in a whole scale of different heuristics. The scale goes from easy to remember but not ergonomic to the opposite.
4. Have most (70%–80% achievable?) of covered characters available in easy-to-remember positions.
5. Have full coverage of certain ranges of Unicode.

[*] Currently it is unclear if the general rules may be shared by all the “application domains”. For example, to access our layout this way, one needs to know different “handfuls” of allocation rules for Ancient Greek than for Math Symbols.

This were the goals. Currently achieved (ranges as of Unicode v6.2; we do not count characters accessible via `Compose` key):

- Two gotcha (with `Shift-SPACE` and `ApplicationMenu` keys) comparing to US and Russian Phonetic keyboards;
- Support of all keys (ISO/ABNT/JIS) on all contemporary hardware layouts;
- Full coverage of Latin-based scripts (according to Wikipedia), Latin-n repertoirs of ISO 8859, WGL, MES-1, MES-2, and non-CJK part of UGL;
- Full coverage of Greek Unicode ranges and Greekish stuff of MES-3B (polytonic and esoteric characters need double prefix keys; Greek sub/superscript, `MATHEMATICAL`, `APL`, `DOUBLE-STRUCK` letters and digraphs not supported);
- Full coverage of Cyrillic ranges (with `ԡꙣꙥꚁ` [temporarily?] put on free slots in Business map); from the Latin personality: titlo-chars, 10ⁿ-combiners and most esoteric chars need double-or-"special" prefix keys;
- Full coverage of Hebrew/Yiddish/Ladino characters, points, cantillation, punctuation (except alternative/wide forms and precomposed chars);
- The `Compose` prefix key based on std X11 Compose tables, MathML entity names, and rfc1345 codes;
- Full coverage of currency symbols;
- Full coverage of vulgar fractions;
- Full coverage of Coptic alphabet (if not accessed from Greek personality, requires double-or-"special" prefix keys);
- Full coverage of characters covered by EurKey/Bépo keyboards (except `0323`);
- 50% coverage of math symbols in BMP (the most useful implemented first);
- Full coverage of Math Fraktur, Math Double-Strike and Math Script Latin letters;
- Full coverage of double-accented letters of MES-3b;
- Full coverage of non-modifiers/combiners of IPA and UPA;
- Full coverage of obsolete-IPA and case-extended IPA;
- Simple/double arrows and most of box-drawing characters (via numeric keypad);
- Latin and Cyrillic personalities (pre-release of Greek and Hebrew personality);
- Visual bell to report unrecognized/unsupported combinations (except for those using `Application-Menu` modifier and `Compose`);
- Many pathways to access “advanced” characters to make it possible to work around bugs in applications;
- Documentation of the allocation rules scattered over different files/sections.
- MOREOVER: To assist debugging applications, ALL POSSIBLE combinations of modifiers produce (non necessarily generally useful) results.

Not yet implemented, or lost by upgrades to other goals:

- Clear documentation of the allocation rules (needed for "goal 2" above).
- Finish implementing usable Greek and Hebrew personality;
- Full coverage of IPA (both visually, and by structure properties of the described sounds) and UPA;
- Full coverage of spacing modifiers and combining characters for Latin scripts, and for symbols (had it before `Green` keys were implemented);
- Full coverage of Unicode's paleo-Latin characters;
- Full (is it compatible with other goals???) coverage of math symbol ranges in BMP;
- reasonable coverage of arrows;
- reasonable coverage of ASCII/Unicode box drawing characters (almost finished);
- Full coverage of non-Eastern characters covered by Neo keyboard, and X11+Neo composition tables;
- Easy-to-describe quick access to Vietnamese characters (seems to be present - needs documentation).

# Prefix keys: accessors and mogrifiers

(The explanations below complement the character tables for the Latin and Cyrillic personalities.) The following three are “bridge” prefixes allowing access to other personalities (this list is for Latin personality; “Green/Ripe/Blue” explanations are here):

    	Shift-Space	Greek (AltGr=tonos/final/symbol etc), Superscript digits/symbols, “Green Keys”
    	AltGr-Space	Cyrillic, “Ripe Keys”, Subscript digits/symbols, dashes
    	AltGr-Space ×2	Hebrew {AND: iconic control-key symbols}

(for sub/superscript letters, follow by `Ctrl-(Shift-)letter`— if your app allows this). Multiple presses access some other useful stuff; we mention only:

    	Shift-Space ×2	MathBlue (“Blue keys” and common math flavors of letter)

This is for convenience access (if an OS/application does not allow entering `AltGr` directly):

    	Shift-AltGr-Space	AltGr-inverted base face

These keys when used with `AltGr` provide mogrifications with the following semantic (from Latin personality):

    	;	Diaeresis, hook above [+subs-Vietnamese], “Blue Keys”, operators {AND: doubly-mogrified symbols, rotunda/squirrel/hook/curl, dot above+below, etc}
    	"	Diaeresis, double-grave, double-struck capitals {AND: doubly-mogrified symbols, dot above symbols, dot+macron, stroke/swash, paleocontractions, etc}
    	'	Acute [+ on horn], sharpen, add on right {AND: hooks, tail/leg/curl, turned} — overflows to/from the column on right
    	`	Grave, unsharpen, squared, add on left {AND: reversed} — overflows to/from the column on left
    	.	Ring above, dot above/below/dotless, rounded {AND: circled, amplified, insular} — overflows to/from the column on right
    	,	Cedilla, ogonek, comma below {AND: visigothic/greekize/doubled-letters, whited mogrified} — overflows to/from the column on left
    	^	Hat, Amplify, Whiten, Paleo, “other” mogrify {AND: smallcaps, loop/upturn/descender/bar/fishhook/turnaround/inverted-phonetic/dot-reversed} — overflows to/from the column on right
    	6	Caron, breve, quasi-synonyms, n-Ary/Big {AND: arc/loop/check/belt/flourish/tilde-below/left-palatal-hook, insular/epigraphic, etc}
    	~	Tilde [+ subst-Vietnamese] — overflows to/from the column on left
    	̸	Stroke, cut-off, “other” phonetic {AND: Um, doubled letters, ŭ, dot above, double-overbar, but-not, fences}
    	-	Macron, add horizontal line (or double line), phonetic, dashes (on digits etc) {AND: quill, right-hook, inv-breve, paleocontraction}

    	$	Currencies, horn, add-vertical-line(s) {AND: double addleft/addright, “text” control-key symbols, etc}
    	↑	Superscript (and MODIFIER LETTERS), Phonetic
    	↓	Subscript (and MODIFIER LETTERS LOW), Small Caps, Legs
    	→	Turnaround, inverted, reversed, turned, hooks (to the right)
    	←	Hooks to the left (and palatal)

(The last group is also available from other personalities.)

The following four are available after Greek (pre-)prefix (`Green`) or with Green-modifiers (`Ctrl-Alt-`); combining them with `Shift` is equivalent to combining the following keypress with `AltGr`:

    	\	Polytonic greek Vowels by vowel-key-column, Rows=Circumflex/Acute/None-or-Vrachi-Macron/Grave, AltGr=iotization {AND: Zodiak, etc}
    	[	As \, with smooth aspiration
    	]	As \, with rough aspiration
    	`	Coptic, Archaic Greek, Stroked/Latinized Greek {AND: dashes, cp437 “control-graphic”, Zuang tones}

The following two are available after Cyrillic (pre-)prefix (`Ripe`):

    	'	“Bizarre” Cyrillic, fractions {AND: “other” iconic Control-Key symbols}
    	^	Cyrillic titlo-forms, power-of-10 multipliers {AND: “exotic” Cyrillic}

From non-Latin personalities, use appropriate modifications: for Latin-specific prefixes, use Green prefix (or Green modifiers); prefixes which become “native” drop Green/Ripe pre-prefix; prefixes which remain foreign may use a different pre-prefix.

In the character tables for the Latin and Cyrillic personalities, one can hover a mouse over a character, and a popup will explain which of the mogrification rules above was applied to produce this character.

# Examples of possible input

Below, `AltGr` is the right `Alt`, `Menu` is the application menu key (somewhere to the right of `AltGr`), `lCtrl/lAlt/rCtrl` are left and right variants of the keys. Whitespace separates prefix keys from other keys (prefix key should be released before the next key is pressed); dash `-` connects modifier keys with the base key (modifier keys should be pressed down when the base key is pressed).

Everywhere, the modifier `AltGr-` may be replaced by prefix `Shift-AltGr-Space`. On right, parentheses () are used only to indicate the baseline and whitespace.

One possible usage of these example is to get an overview what kind of stuff is accessible from the keyboard, and how (without regards to what is important and what is not). Another usage is to use this as a base to check how well your application supports keyboard input on Windows (e.g., Firefox v22 supports about 38% of these examples). The examples cover the Latin personality of the keyboard only.

      AltGr-a                                --->  æ
      Shift-AltGr-Space a                    --->  æ        (Shift-AltGr-Space is a prefix equivalent to using AltGr-)
      AltGr-(                                --->  ‘
      AltGr-)                                --->  ’
      AltGr-9                                --->  “
      AltGr-0                                --->  ”

      lAlt-lCtrl-a                           --->  α	(Green)
      Shift-Space a                          --->  α	(Green)
      Shift-Space AltGr-a                    --->  ά	(Green AltGr)
      Shift-Space Shift-Space c              --->  ℂ	(Green × 2 == Blue)
      Shift-Space Shift-Space Shift-Space L  --->  £	(Green × 3 == Business)
      AltGr-$ L                              --->  £	(Business)

      Menu-q                                 --->  я	(Ripe)
      AltGr-Space q                          --->  я        (Ripe; Or use Shift-AltGr-Space Space q)
      AltGr-Space AltGr-Space a              --->  א        (Ripe × 2; Likewise, one can replace AltGr- as above)
      Menu-rCtrl-a			         --->  א        (Ripe²; not in Notepad)
      AltGr-Space AltGr-Space AltGr-Space g  --->  ӷ	(Ripe × 3 == Extra cyrillic)

      AltGr-/ =                              --->  ≠
      AltGr-^ =                              --->  ≝	(Amplified)
      AltGr-` *                              --->  ⋉	(AddLeft)
      AltGr-" a                              --->  ä	(Or      Shift-AltGr-Space " a)

      Shift-Space Shift-Space 2              --->  ∫	(Blue)
      AltGr-; 2                              --->  ∫	(Blue)
      AltGr-^ 2                              --->  ∬	(Amplified Blue)
      Shift-Space Shift-Space AltGr-2        --->  ∭	(Blue AltGr; same with AltGr-;)
      AltGr-^ AltGr-2                        --->  ⨌	(Amplified Blue AltGr; pre-0.63 had ⨜)

      Menu-Right				 --->  →	(Moves position in Notepad)
      Menu-Shift-Right			 --->  ⇒
      Menu-Insert				 --->  ↔
      Menu-Delete				 --->  ⟷
      Menu-Enter				 --->  ↕

      AltGr-KeyPad6				 --->  ┤	(With NumLock)
      AltGr-Menu-KeyPad6			 --->  ╣	(With NumLock; Menu=Double)
      AltGr-rCtrl-KeyPad6			 --->  ╢	(With NumLock; rCtrl=[flip]DoubleToRight)
      AltGr-Menu-rCtrl-KeyPad6		 --->  ╡	(With NumLock; Double and flip DoubleToRight)
      Menu-KeyPad6				 --->  ┫	(With NumLock; no-AltGr means Bold)
      Menu-rCtrl-KeyPad6			 --->  ┥	(With NumLock; [this and the next line were exchanged before 0.63])
      lAlt-rCtrl-KeyPad6			 --->  ┨	(With NumLock; lAlt must be added to loner rCtrl)

      lAlt-rCtrl-Right			 --->  (▌)	(Draw a frame by whitespace on black background)
      lAlt-rCtrl-Right			 --->  (▐)	(Draw a frame by black on white background)

      Menu-F3				 --->  —	(3rd dash == em; not in Notepad)
      Menu-Shift-F3				 --->  ( )	(⅓em whitespace)

      AltGr-Right n				 --->  ɳ	(Hook; moves position in Notepad)
      AltGr-Left n				 --->  ɲ	(Hook; moves position in Notepad)
      AltGr-Up i				 --->  ⁱ
      AltGr-Down i				 --->  ᵢ
      AltGr-Down I				 --->  ɪ	(SmallCaps)
      AltGr-Up AltGr-e			 --->  ə	(Upgrade to phonetic)
      AltGr-Right u				 --->  ᴝ	(rotate; moves position in Notepad)
      AltGr-Right AltGr-u			 --->  ᴞ	(rotate; moves position in Notepad)

      Shift-Space 1				 --->  (¹)	(Green)
      Shift-Space Ctrl-(Shift-)i		 --->  (ⁱ)   	(Green Ctrl)
      Shift-Space Shift-Space Ctrl-(Shift-)i --->  (ᴵ)	(Blue Ctrl)
      AltGr-Space 1				 --->  (₁)   	(Ripe)
      AltGr-Space Ctrl-(Shift-)i		 --->  (ᵢ)	(Ripe Ctrl)

      Shift-Space Shift-Space Shift-Space Ctrl-@ --->  ␀
      AltGr-Space AltGr-Space Enter		 --->  ⏎
      AltGr-Space AltGr-Space AltGr-Space Enter --->  ↲

      Shift-Space Space			 ---> ␣
      Shift-Space AltGr-Space		 ---> ⍽
      Shift-Space Shift-Space Space		 ---> ␠
      Shift-Space Shift-Space AltGr-Space	 ---> ␢
      AltGr-Space Space			 ---> ( )	(NBSP)
      AltGr-Space Shift-Space		 ---> ( )	(U+202f NNBSP ⅙em thin)
      AltGr-Space AltGr-Space Space		 ---> ( )	(U+2009 ⅙em thin)
      AltGr-Space AltGr-Space Shift-Space	 ---> ( )	(U+200A ⅛em hair)

      AltGr-' Space				 ---> ´		(Spacing diacritic)
      e AltGr-' AltGr-'			 ---> (é)	(Combining-´)
      AltGr-' Shift-Space			 ---> ʼ		(2nd Spacing diacritic)
      AltGr-' AltGr-Space			 ---> ʾ		(3rd Spacing diacritic)
      = AltGr-^ '				 ---> (=̑)	(2nd Combining-^)
      = AltGr-^ "				 ---> (=͒)	(3rd Combining-^)
      = AltGr-^ AltGr-'			 ---> (=͡)	(4th Combining-^)
      = AltGr-^ AltGr-"			 ---> (=̽)	(5th Combining-^)

      AltGr-_				 ---> —		(m-dash)
      Shift-Space _				 ---> –		(n-dash)
      Shift-Space Shift-Space _		 ---> ―		(horizontal dash; after 0.62)

      Menu-F12 ' a				 ---> á		(Compose = as X11's .Compose)
      Menu-F12 Menu-F12 I n t		 ---> ∬		(Compose × 2 = as HTML entities [MathML])
      Menu-F12 Menu-F12 Menu-F12 D I	 ---> ∬		(Compose × 3 = as rfc1345 codes)
      Menu-Space ' a			 ---> á		(Compose = as X11's .Compose)
      Menu-Space Menu-Space I n t		 ---> ∬		(Compose × 2 = as HTML entities [MathML])
      Menu-Space Menu-Space Menu-Space D I	 ---> ∬		(Compose × 3 = as rfc1345 codes)

      AltGr-rCtrl-C				 ---> ℂ		(Double-struck)
      AltGr-Menu-C				 ---> 𝒞		(Script)
      AltGr-Menu-rCtrl-C			 ---> 𝕮		(Bold-Fraktur)
      Shift-Space Shift-Space C		 ---> ℭ		(Fraktur; happens to be on Green × 2)

    			[Using lCtrl instead of AltGr flips “boldness”; lCtrl-rCtrl does not work with some keys]
      lCtrl-rCtrl-Q				 ---> 𝙌		(Tensor=Math Sans Serif Bold Italic)
      lCtrl-Menu-Q				 ---> 𝓠		(Bold Script)
      lCtrl-Menu-rCtrl-Q			 ---> 𝔔		(Fraktur)

      lAlt-rAlt-q				 ---> 𝚚		(Math Monospace)
      lAlt-rAlt-Menu-q			 ---> 𝑞		(Math Italic)
      lAlt-rAlt-Menu-rCtrl-q		 ---> 𝒒		(Math Bold Italic)
      lAlt-rAlt-rCtrl-q			 ---> 𝐪		(Math Bold)
      lCtrl-lAlt-q				 ---> θ		(Green=Greek)
      lCtrl-lAlt-Menu-q			 ---> 𝜃		(Math Greek Italic)
      lCtrl-lAlt-Menu-rCtrl-q		 ---> 𝜽		(Math Greek Bold Italic)
      lCtrl-lAlt-rCtrl-q			 ---> 𝛉		(Math Greek Bold)
      lAlt-rCtrl-q				 ---> 𝘲		(Math Sans Serif Italic)
      lAlt-Menu-rCtrl-q			 ---> 𝗊		(Math Sans Serif)
      lAlt-Menu-q				 ---> 𝗾		(Math Sans Serif Bold; not in Notepad)

      lCtrl-lAlt-: 3			 ---> ⅓		(By denominator via extra cyrillic)
      Menu-; 3				 ---> ⅓		(Same)
      AltGr-Space AltGr-' 3			 ---> ⅓		(Same via Ripe=cyrillic)
      AltGr-Space AltGr-Space AltGr-Space 3	 ---> ⅓		(Same via Ripe × 3)
      lCtrl-lAlt-: Shift-3			 ---> ¾		(By numerator)
      lCtrl-lAlt-: AltGr-3			 ---> ⅔		(By denominator, with larger numerator)
      lCtrl-lAlt-: AltGr-Shift-3		 ---> ⅗		(By numerator,   with larger denominator)
      Menu-F12 2 5				 ---> ⅖		(Compose = as X11's .Compose)
      Menu-Space 2 5			 ---> ⅖		(Compose = as X11's .Compose)
      lCtrl-Menu-/ 3			 ---> ⅓		(By denominator; lCtrl-Menu-/ acts the same as lCtrl-lAlt-:)

      Shift-Space w				 ---> ω
      Shift-Space \ x			 ---> ὼ		(no aspiration, diagonal of ω, bottom row=`)
      Shift-Space \ AltGr-x			 ---> ῲ		(same with iotization)
      Shift-Space | x			 ---> ῲ		(same with Shift-\)
      Shift-Space [ x			 ---> ὣ		(same as ὼ with aspiration)
      Shift-Space [ AltGr-x			 ---> ᾣ		(same with iotization)
      Shift-Space { x			 ---> ᾣ		(same with Shift-[)

      Shift-Space ` g			 ---> ⲅ		(Coptic γ)
      Shift-Space ` AlgGr-g			 ---> ͷ		(Coptic Pamphylian digamma ϝ)
      Shift-Space ~ g			 ---> ͷ		(same with Shift-`)

      Shift-Space \ Shift-5			 ---> ♌		(5th Zodiak)
      Shift-Space ` Shift-5			 ---> ♣		(0x05 in cp437)

      AltGr-Space g AltGr-Space AltGr-^ a	 ---> гⷶ  	(Titlo-form of га)
      Menu-g Menu-: a			 ---> гⷶ  	(Same)
      AltGr-Space AltGr-^ 3			 ---> ҂		(Cyrillic 10³ prefix — others 10ⁿ are combining marks)

      lCtrl-lAlt-,				 ---> ( — )	(Typographically sound m-dash — surrounded by hair space)
      lCtrl-Menu-,				 ---> ( — )	(Same)
      AltGr-rCtrl-,				 ---> ( — )	(Same)
      AltGr-rCtrl-/				 ---> ( — )	(Typographically sound m-dash — surrounded by thin space)

      lCtrl-lAlt-<				 ---> (𝄞)	(Example string with 1 SMP char)
      lCtrl-lAlt->				 ---> (𝄡𝄡)	(Example string with 2 SMP char)