============ Design goals for izKeys keyboard group (the main drive for the development of this module):

  0) No gotchas for people who cannot remember anything.
  1) 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 "position allocation" [*].
  2) Gradual degradation: the fewer rules one can keep in mind, the narrower repertoir of characters is
     *easily* accessible; but "more cumbersome" ways to access characters should be available if they
     are easier to keep in mind.  So people who can remember have access to easier typing experience,
     but the covered repertoir should not change much.
  3) Have most (70%-80% achievable?) of covered characters available in easy-to-remember positions.
  4) Have whole 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.

Currently achieved (ranges as of Unicode v6.2):
*) Two gotcha (with Shift-SPACE and ApplicationMenu keys) comparing to US and Russian Phonetic keyboards;
*) Support of all keys (ISO/ABNT/ABNT2/JIS) on all contemporary hardware layouts;
*) Full coverage of Latin-based scripts (according to Wikipedia), Latin-n repertoirs of ISO 8859, and MES-1 (except for arrows);
*) Full coverage of Greek Unicode ranges and Greekish stuff of MES-3B (polytonic and esoteric characters need double prefix keys);
*) 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 prefix keys);
*) Full coverage of Hebrew/Yiddish/Ladino characters, points, cantillation, punctuation
     (except alternative/wide forms and precomposed chars)
*) Full coverage of currency symbols;
*) Full coverage of vulgar fractions;
*) Full coverage of Coptic alphabet (via double prefix keys — except from Greek personality);
*) Full coverage of characters covered by EurKey/Bépo keyboards (except arrows and combining 0302, 030a);
*) 50% coverage of math symbols in BMP (the most useful implemented first);
*) 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;
*) Latin and Cyrillic personalities (pre-release of Greek and Hebrew personality);
*) Visual bell to report unrecognized/unsupported combinations;
*) Documentation of the allocation rules scattered over different files/sections.

Not yet implemented, or lost by upgrades to other goals:
*) Clear documentation of the allocation rules (needed for "goal 1" above).
*) Finish implementing usable Greek and Hebrew personality;
*) The "compose" prefix key + access by human-guessable sequence of Latin chars;
*) Full coverage of Cyrillic;
*) 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;
*) Full coverage of Math Fractur, uc Math Double-Strike and Math Script Latin letters (would need to abandon kbdutool...);
*) reasonable coverage of arrows;
*) reasonable coverage of ASCII/Unicode drawing characters;
*) Full coverage of non-Eastern characters covered by Neo keyboard, and X11+Neo composition tables;
*) Full coverage of MES-2 (currently 7 arrows + ⌠⌡ + 48 box drawing symbols missing);
*) Easy-to-describe quick access to Vietnamese characters (seems to be present - needs documentation).

Possible roadmaps:
*) What about other scripts with "small repertoir" of characters (such as arabic with 62 access points on the M$ keyboard;
   indic)?

=========== Revision history for Perl module UI::KeyboardLayout.

0.01  Mon Jan  9 23:45:23 2012
	- original version; created by h2xs 1.23 with options
		-AX -b 5.8.0 -n UI::KeyboardLayout

0.02
	Minor additions to "principles" section of the docs.
	Document how Windows keyboard layout DLL work.
	PODify section on Latin-characters keyboard.
	Parse DerivedAge.
	Verbose mode of UName with script/block/age appended.
	Print out coverage.
	When multiple diacritics assigned to the same key, allow 
	  intelligent priorities by sorting by Unicode-age inside a group.
	When a sequence of diacritics is assigned to two keys in
	  opposite directions, allow intelligent sharing.
	Allow chained (de)diacritics inside Diacritics() rule, 
	  as in 02dc+031b--0300: remove `, add horn, add ~.
	Allow a custom translation list, as in <subst-Vietnamese>.
	Recognize many new heuristics for pseudo-decompositions.
	Make the access to modifier letters take into account mapping of SPACE,
	  and use Enter,Tab,C-Enter as well.  Exchange roles of - and _.
	Repeated deadkeys.
	Separate visual bell for 32-bit chars in diacritic maps...

	Eurkey++:	[tentative webpage: k.ilyaz.org/v0 ]
	  To enter ONE character from THE OTHER face, preceed by Shift-SPACE.

	  Latin face: identical to EurKey (but with enhanced diacritic prefixes,
	    and full [monotonic] Greek).

	  Cyrillic face: *) identical to Russian phonetic (of X11) on the base layer;
              *)  has all other letters of modern Slavic Cyrillic-based languages, 
                   XIX century russian, Kazakh letters on the AltGr-layer;
              *)  has all the other characters of ISO 8859-5, Old Slavonic (except
                   letters-titlo-form and powers-of-10), and those in 
                   flavors of ru on X11 (Tatar, Ossetian, Chuvash, 
                   Udmurt, Komi, Yakut, Kalmyk, Bashkirian, Mari) 
                   on AltGr-' prefix (the "bizarre variants key").
              *)  Has all titlo-forms (up to v6.1) accessible via AltGr-^ 
                   prefix key (for "bizarre ones" use a key with Shift,
                   for the rest type the lowercase form [after AltGr-^]);
                   double-AltGr-^ enters the titlo itself.  Powers of 10
                   are on the AltGr-^ + digit.  (ST as S, DJERV as D, vzmet as -.)
		Most keys are in the "expected" positions; but note the following:

    '"/́´/ӹ/ӳ	я/ѣ/ѧ/ѩ	б/ѓ/ѹ/ѽ	д/ђ/ӟ/ԁ  й/ї/ҋ/ӑ  ь/ъ/ӛ/ӕ   ф/ѳ/ғ/Ӻ   м/Ω±/ӎ/ꙟ   ш//ԧ/ѐ	щ//ꚇ/ѝ   з/є/ѯ/ҙ  ц/џ/ҵ/ќ

		AltGr-' is the "get bizarre variants" key; so for д/ђ/ӟ/ԁ, ђ is on
		AltGr-д, ӟ is on AltGr-' д, and ԁ=U+0501 is on AltGr-' AltGr-д.
		Shift-AltGr-' gives ´.
		The keys ъЪёЁ are duplicated: they are placed above 3456 (as in
		the standard phonetic keyboard) AND they are placed as 
		AltGr-variants of ь and е.  The Latin punctuation keys "hidden"
		by ючшщэ (and over-digits ъЪёЁ) are accessible on AltGr-keys.

	  Extended prefix keys for Latin diacritics:
		Each can perform multiple functions; if several functions are
		applicable to a given key (the normal situation!) the best match
		is assigned to PREFIX + Key, the second best to PREFIX + AltGr-Key.

		Pressing twice give the corresponding combining character; if
		followed by Space, Shift-Space, AltGr-Space, Shift-AltGr-Space,
		produces various related spacing modifier letters; if followed
		by | or AltGr-|, gives a vertical form etc (see below).

		What is "the best match"?  It is the position in the list below 
		(left is prefered) combined with bizarreness of the symbol (less
		bizarre is prefered).  Also, PREFIXed AltGr-Key may just add
		a second accent to what AltGr-Key generates (if this is "the best
		choice" as described above - it competes with "the second choice"
		for the base key); the [Vietnamese ACCENT] actions
		below operate only for adding SECOND accent on AltGr-keys, and 
		only on "green ones": AltGr- WZFH,L (see below).

	    Alt-^    breve + caron + other breves + other carons + loop + belt + flourish
	    		Heuristic: Alt-Shift-6 inverts Alt-6 (which is, basically, hat-accent)
	    Alt-;    diaeresis + [Vietnamese hook above] + ogonek + cedilla + comma below
	    		Heuristic: ; is an offspring of double-dot and comma
	    Alt-&    macron + stroke + various other additions of straight line(s)
	    		On numbers 0,1,2,3,4: soft-hyphen, hyphen, en-dash, em-dash, horizontal bar
	    		On numbers 5-9: IPA tone modifiers ˥˦˧˨˩.
	    Alt-7    
    ring above + [Vietnamese dot below] + dot above + dot below + various rings/dots + circle about

	  	The other prefix keys work in pairs: the first one operates
	  	as described above, prefering accents on the left of the list; 
	  	and the second one prefers accents on the right
	  	
	    Alt-' and Alt-`
	acute + [Vietnamese acute] + hooks + tails + curls + horn + ticks + [Vietnamese grave] + grave
	    Alt-~ and Alt-6
	       tilde + [Vietnamese tilde] + belt + descender + mutiliated + smallcaps + hat
			("Mutiliated" means rotated/reflected/open/closed etc.
			 Case is preserved, so characters without uppercase equivalents
			 are on lower register keys, and smallcaps are on Shift-register.)

	  Vietnamese input: One must remember positions of quick-access 
	    AltGr-vowels with ` or ´, of additional "green keys" for ĂÂÊÔƠƯ,
	    how to enter diacritics `, ´, ˜, ... via AltGr-prefix keys
	    (`, ´, ˜ are where expected, dot below on AltGr-7 [possibly with
	    AltGr on the vowel key], ˘ on AltGr-^, ˆ on AltGr-6; hook above on 
	    "English vowels" is on AltGr-´ with AltGr-vowel, and on "green keys"
	    it is on AltGr-;).  Also: đ/Đ is AltGr-& before d/D.

	    THE RULES:

	    All characters with at most one "accent" (except "horny" ƠƯ) can be 
	    entered "normally" (following the rules for AltGr-diacritics 
	    on "English letters", or via quick-access AltGr-vowels with ` or ´).
	    
	    For characters with ` or ´ tone mark and another ornament 
	    (except "horn"), use the AltGr-prefix key for this 
	    "other ornament" with the quick-access AltGr-vowel for `/´-vowel.
	    
	    To put tilde, dot below, or hook as the "second" diacritic, one
	    should know additional positions on AltGr-layer: ĂÂÊÔƠƯ take 
	    places of ÅÀÈÒØÙ (which are on AltGr- WZF,LH; call these places 
	    "green AltGr-keys").  Preceed the green AltGr-key by the 
	    AltGr-prefix for the diacritic (given above).  For example, ỡ is AltGr-~ AltGr-l.
	    
	    This leaves `, ´ on horns ƠƯ and horns themselves.  For the former,
	    use AltGr-` and AltGr-´ on O and U with "the opposite ` or ´ accent".
	    For ƠƯ, use AltGr-` on AltGr-O and AltGr-U (which are ÖÜ).
	  
	    =====

	    Desired heuristic for semantic: under the weight of additional 
	    accent, `-accent on letters collapses to a different accent:
	      under ´ it collapses to a horn on O and U (Ơ and Ư) so
	      one gets Ớ and Ứ (likewise for ´-accent under `).
	      Over ¨-accent ` again collapses to horn (but ¨ evaporates, so
	      one gets a pure horn).
	      
	  Modifier letters: entered via the Latin AltGr-diacritic with a similar
            shape of "the principal diacritic".  Following by space gives the
            standalone form of the diacritic; by Shift-Space the modifier 
            form (if different; otherwise the other most similar modifier form).
            Two most visually similar "lower modifier" letters are entered by
            - and _; same for Vertical/Comma-like/Doubled/Dotlike - on \ and |;
            the Prime-like/Centered are on / and ?.  As the last resort, follow
            by AltGr-Space, AltGr-Shift-Space, Enter, Tab, Ctrl-Enter, C-[,
            C-], C-\, Backspace and Control-Backspace to get other visually
            similar forms (in order).  (The last resort method helps also
            when, for example, AltGr-& \ enters stroked-\ (which overrides
            the possible modifier semantic).  All pre-v4.0 modifiers (and all
            non-letter 4.0-modifiers, and all
            IPA modifiers) can be entered.  (See tables in .kbdd file.)
	  
	  Combining diacritics: only the principal one is currently supported.
	    Enter by double-AltGr-diacritic.
	    
	  Accessibility features: prefix a key by AltGr-Shift-Space to
	    access the AltGr-meaning of the key (useful if AltGr-key is stolen 
	    by the system).  Works after linked-faces-prefixes too (but 
	    currently not before or after Latin diacritic-prefix). Example: 
	    AltGr-Shift-Space + | acts as AltGr-|.  Repeat twice/3-times/4-times 
	    to access the AltGr-inverted linked face (and other flavors of
	    the linked face).

	    Similarly, from Cyrillic personality, the linked faces are Latin,
	    AltGr-inverted Latin, bizarre Cyrillic, and titlo-Cyrillic.  So
	    Shift-Space accesses Latin, AltGr-Space accesses AltGr-inverted Latin,
	    double AltGr-Space accesses bizarre Cyrillic.  And repetition
	    of AltGr-Shift-Space access AltGr-inverted versions of Cyrillic,
	    bizarre Cyrillic, titlo-Cyrillic, and Latin.

	  Linked faces for Latin: Cyrillic, bizarre-Cyrillic, and
	    titlo-Cyrillic.  The principal one is accessed by Shift-Space,
	    the second by AltGr-Space, the third one by double-AltGr-Space.
	    Alternatively, one can access the second/third one by using Cyrillic
	    prefix keys AltGr-' and AltGr-^ after Shift-Space prefix.
            
          Shift-Space followed by various Modifiers-Space enters "visible
            representations" of space: ␢, ␣ and ␠ on Space, Shift-Space, and
            AltGr-Space.  Follow AltGr-Space by Space or Shift-Space to get 
            wide no-break space (space-wide and digit-wide); follow
            Shift-AltGr-Space by Shift-Space to get narrow no-break space. 
            The third linked face maps all spaces to narrow breakable space.
            
          Vulgar fraction access: on bizarre-Cyrillic face, either enter a
            digit in denominator, or a digit in numerator with Shift-modifier.
            To increase numerator/denominator, add AltGr-modifier.  (All
            fractions of v6.1 are accessible.)  (From Latin: on AltGr-Space;
            from Cyrillic: on AltGr-'.)
            
          Visual bell: non-existent prefix-key combinations generate the visual
            bell bell ♪.  Combination which make sense but can't be entered
            on the give OS generate ♫ (currently 32-bit codepoints on Windows).
          
==========================================
	  Add ќ on Russian-II-AltGr on c[ц] (this completes ISO 8819-5.)
	  Add characters missing from ru X11 old slavic keyboard (except
	  powers-of-10 and combining letters).
	  
	  Add ―, soft hyphen, no-break hyphen and figure dash to Overbar map (on 4, ¦, ! and 0). 
	  Add ¤, kra ĸ and cedilla to CopyRight layer on $, q and comma.  
	    (This completes ISO 8859-N maps - except for Hebrew/Arabic/Thai letters.)  
	    (But not WGL4; or Adobe GL - about 760 missing [!!!] outside of combined characters, and
	      "ARABIC|HALFWIDTH|FULLWIDTH|HEBREW|<control>|ARMENIAN|DEVANAGARI|BENGALI|GURMUKHI|GUJARATI|THAI|CJK.Symbols|CJK.Letters|CJK.Compatibility|Private.Use.Area|HIRAGANA|KATAKANA|BOPOMOFO|HANGUL|Small.Form"
	    .)
	    
	  Add ẗ to CopyRight layer as AltGr-t, and Ȩȩ cedilla as eE.
	  How to do ḩ, ḥ, ɬ, ŀ, ẇ, ẉ, Ẏ, ẓ, Ǜ, ǚ, Ǘ (1.1 penalized by Vietnamese)
	  and newer Ȧ, Ⱥ???

	  ḩ - romanization of Arabic
	  ḥ - in dialects of Asturian
	  ɬ - IPA
	  ŀ - not recommended usage of l·l in Catalan
	  ẇ ẉ - unknown
	  Ẏ - Avestan, and ISO transliteration of Izhitsa Ѵ
	  ẓ - transcription of Afro-Asiatic
	  Ǜ, ǚ, Ǘ - unknown (transliteration of chinese?)
	  Ȧ - Livonian, and ISO transliteration of Yus Ѫ
	  Ⱥ - Saanich and precursor to Å in Norsk.
	  
	  Fix shortcoming of the Greek section: dialytika-versions of ι and υ
	    on ,. , drahma ₯ and question mark ; on /?, micro sign on AltGr-M, 
	    and tonos, ypogegrammeni on `_.  
	    Add tonos-versions of vowels, symbol variants, and final sigma 
	    on AltGr-letters.
	    	(?!!! But no tonos-dialytika with Diacritics[+...]???? - it may work only on the given face, not elsewhere...)

	  Diacritic tables: all the non-char modifiers up to v4.0 are accessible, so are all IPA letter-modifiers.

	Vulgar fractions: 1/7 1/9 and 0/3 were missing.
	Scancodes for unusual keys were completely wrong (now taken from keyboard type 4 of kbd.h).

0.03	Remove accumulated crud from EurKey++.kbdd.
	Remove manyHEX() wrongly used.
	Make Substitutions case-aware: only one case should be used.
	New face configuration AltGrCharSubstitutions.
	Better sorting of variants of diacritics: take into account the block (the later in the list, the more bizarre).
	Auto-generate linked-in AltGr-inverted maps; handles prefix keys; we did cycle elimination (but not now,
	  when we do not expect this to coexist with manual AltGr-inversion - cycle elimination is too much
	  work in presence of InvMap).
	Support for repeated altgr_flip_key --> inversion of other linked faces.
	Generation of modifier keys - skip the AltGr-inversion key.
	When emitting coverage, do not count deadkeys "by themselves".  (Not implemented for repeated dead keys.)
	Include the files with repertoirs of certain "access Unicode chars" tools/standards; in examples/charlists.
	Extra sorting order for results of <any-FOO> - take into account the number of words.
	+ARRAY_NAME=val was not allowed in a visual section.
	Overrides are possible for AltGr-inverted prefix keymaps (including chained deadkeys when inverted key is not auto).
	Start documenting format of .kbdd file; all but the (most important) personality-sections are documented.

	EurKey++:
	  Enable pinyin input of tonal variants of ü by accents on a green key AltGr-k (normally enters ij).
	  New sorting required some massage of binding for ` and ´ to preserve the Vietnamese semantic.
	  New sorting: we lost N with long leg, and exchanged I-dot-below with I-dot-above.
	    (Now, of Vietnamese, only o gets dot below without AltGr.)
	  Shift-AltGr-SPACE after a prefix diacritics key does not generate a 4th modifier letter.
	  Shift-AltGr-SPACE after a prefix diacritics key gives AltGr-inverted map.	
	  Allow ring/dot prefix to remove dots from i and j; remove ı from "mutiliated" lists, so that ᴉ is available.
	  AltGr-inverted maps are aware of diacritics (so can be used before and/or after diacritics).
	  Massive simplification of .kbdd file - remove manual AltGr-inversion crud.

0.04	Block output of control chars in prefix keymaps; fix output of \x03.
	Make all Face-related base-operators in the satellite face processor return the initial layers
	  (and not massaged layers).  Makes LinkFace useful again in DeadKey descriptor.
	Rename layerDeadKeys2 to faceDeadKeys2.
	Replace layerDeadKeys by faceDeadKeys.
	Start of redoing the internal representation of a face: layers may contain [$deadkey, $face, $noexport] instead of $deadkey.
	  (do not redo prelink_layers, since it operates on non-instrumented layers).  Deadkeys inherited
	  from LinkFace are recognized now.  One would need coverage2 section soon...
	Add a compact summary of characters available on principal prefix keys (of repeated deadkeys, only inherited are marked).
	Recognized ESH EZH ENG and SCHWA as phonetized variants of s z n 0 (no majuscule SCHWA, as in Azeri).
	Add curses to LIMITATIONS section docs.
	Table of chars of bépo was missing many base characters.

	EurKey++:
	  Clean up .kbdd file a bit.
	  Add phonetized variants on macron prefix key (add ESH EZH and SCHWA, but removes ‒ so add schwa manually on AltGr).
	    (To support this, add rules introducing ɟ and v with right hook).
	  Add hookish+mutiliated rules to the `―´ pair.  (Adds only ʮ - not enough to add ʄ - is it 3 modifiers???)
	  Now eng's are on macron+etc+phonetized (and n with long right leg appear on `).
	  Add solidus (overlays) to macron.
	  Exchange diacritic signs for combining ´ ` in Cyrillic (on double AltGr-' and on AltGr-' with '; 
	    now Vietnamese versions (which got into Wikipedia ?!) are
	    on Shift-ed keys, and "normal" acute and grave are on unshifted.
	  Add Azeri Əə to Ë=AltGr-e, and ditto mark 〃 to " on Copyright face (AltGr-minus).
	  Add promille ‰ on % on ring/dots face, primes ′,″ on '," on Math (AltGr-M) and ‡ on †=AltGr-" on macron/bar face.
	  Latin's diacritics prefix keys are available from Cyrillic after Shift-Space. 

0.05	Infrastructure to allow multiple decompositions extracted from the Unicode database.
	  (Currently only changes the order of (dotless) j with stroke.)
	Add SLANTED, APPROXIMATELY, ASYMPTOTICALLY, ALMOST to mutiliated.
	Equate EQUAL TO to EQUALS in unicode names.
	Treatment of match-(),[] in satellite face processor was completely busted.
	Significant rework of satellite face processor to change the order of loops: 
	  now the loop in layers and shift-state are internal.  (So components can operate on a "key as a whole").
	Via Diacritic2Self(), AltGr-variants of /?, -_, \| access 3 groups of combining characters; AltGr of digits (with or
	  without Shift) access "missed" combining characters (digits are extended on the left by ` and on the right by +[],.).
	Add +-like and arrow combining characters to the last category.
	New mutators latinize and greekize for greek letters put into "LATIN" script (greekize: F |--> PHI etc).
	New category "Combining for symbols" for diacritics (accessible after diacritic key on AltGr-;: and on [{]}'" ).
	Allow AltGrCharSubstitutions to be a multimap.
	Allow adding "OPERATOR" when constructing compositions (TILDE, ASTERISK).
	Allow stripping OPERATOR when considering explicit decompositions (NOT TILDE).4
	RAMS HORN is a phonetization of uc V (we ignore that it is "SMALL").
	phonetize is now done via a hash map as 0 ə  s ʃ  z ʒ  j ɟ  v ⱱ  n ŋ  V ɤ  ! ǃ  ? ʔ  ¿ ʕ .
	New mogrify (manual):     addline	0 ∅  ( ∈  ) ∋	
				     sharpen	< ≺  > ≻  { ⊰  } ⊱  ( ⟨  ) ⟩		???	〈〉
				   unsharpen	< ⊏  > ⊐  ( ⟮  ) ⟯
				     amplify	< ≪  > ≫  ≪ ⋘  ≫ ⋙  ˆ ∧
				       round 	< ⊂  > ⊃
				      whiten	[ ⟦  ] ⟧  ( ⟬ ) ⟭		- now many many more...
	Document gotchas with ABOVE SINGLE-LINE NOT EQUAL TO etc.
	Recognize SQUARED as mutiliation (does not make sense for CURLY).
	Sorting combined keys by Age we were not splitting key/shift-key pairs which were not uc/lc.
	Use information from loaded UCD to output combining chars in a readable form.
	Avoid infinite recursion on cutting away SIGN; allows for new calculated-sign decomposition (MINUS SIGN --> HYPHEN-MINUS).
	Decompositions to MINUS SIGN are duplicated to HYPHEN-MINUS.

	EurKey++:
	  All combining characters (except for invisible CGJ, musical [BALINESE and high plane], half-diacretics,
	    combining raised letters, NKO, PHAISTOS, ETHIOPIC, TAI, COPTIC, BAMUM, DEVANAGARI) are available
	    on AltGr- /?\|-_ `~ (shift-)digits =+ [{ ]} ,< .> after
	    the corresponding prefix key (one with the visually most similar "principal action").
	  Lunation was missing on Greek-in-Cyrillic.
	  Add latinize as one of the functions of AltGr on Greek (active only on γΓδ).
	  Add latinized-Greek to diaeresis satellite face (all present, with alpha/Alpha sliding to zZ).
  Misplaced - after adding math, MANY!
	  Start to acquire some math symbols via ` = unsharpen, ´ = sharpen, ¯ = addline, ° = round, ˆ = amplify/whiten
	    ¨ - reveals greenkey/converts to an operator/neg-addline/amplify+round/round+round,  ˘ - quasisynon, 
                         (omit ~ = turnaround - breaks more than it adds...)
	  (The intent is to cover as large part of 22** and 27[CDE]* and 2980–2aff ranges as possible.)
	  underbar and stem were missing as action of ¯.
	  
0.06	New mutator adddot.
	⋌ was put on addright-\, not addright-/.
	Add neo2base, neo2ext1 to example character repertoirs (the primary face of Neo2).
	  perl -C31 -wne "print $1 if /\x{2502}(.*?)\x{2502}/" <neo20.txt >oox
	  perl -C31 -wne "$s{$_}++ for split //; END{print for sort keys %s}" oox >neo2base
	  grep DEADTRANS kbdneo2.c | perl -wlne "warn $_ unless /DEADTRANS\s*\(\s*([\w]+|L'[^'\s]+')\s*,\s*([\w]+|L'[^'\s]+')\s*,\s*([\w]+|L'[^'\s]+')\s*,\s*0x000([01])\s*\)/; next if $4; print $3" | sort -u >o
	  perl -C31 -wne "next unless /^0x([\da-f]+)$/i; print chr hex $1" o >neo2ext1
	    (The file o contains 81 other [symbolic] names which should be pretty common [in Latin-N?].)
	    I did not check that all bindings in kbdneo2 are reachable under Windows...
	OPERATORs were not always recognized.
	Give "round" precedence over dots - gives ⊃ precedence over ⋗.
	More math greenkeys: on 1,2,3,4.
	Logic to get greekize mutator was busted.
	New charlist neo2ext2:
	  egrep -v "^0x|^L'" o > oo
	  wget "http://wiki.neo-layout.org/browser/windows/kbdneo2/Quelldateien/keysym4utf16.h?format=txt"
	  perl -C31 -wane "BEGIN{local @ARGV = my $f= shift; for (<>) {m[^#define\s+(\w+)\s+0x([\da-f]+)\b]i and $map->{$1}=$2}} print chr hex $map->{$F[0]}" keysym4utf16.h@format=txt oo > neo2ext2
	Switch the "new" Diacritic* subsystem to operate on all layers of the key at once.
	Add variant "KeepDups" to Diacritic* subsystem; now can (and do) scrap the "old" diacritic subsystem.
	Sane logic to specify mutually-reverse lists of diacritic recipies.
	Can define named portions of diacritic recipies.
	<any-FOO> may be qualified as <any-FOO-!BAR-!BAZ>.
	Support layer_recipes section.
	New key PartialFace in face descriptor to denote a purely-parent face.
	Start allowing migration of keys from a face section to parent sections (Diacritics_* and VK done).
	New mutators: calculated-small, calculated-mathematical, fake-white, fake-black.
	Diacritic2Self and sort_compositions: were not handling prefixing prefix keys as expected (did not affect EurKey++).
	New charlist currency.
	FlipShift was busted; fix by making it operate in all_layers mode.

	EurKey++:	Use new syntax for Diacritic recipies.
			No reversion in binding for grave.
			Add -!operator-!squared-!cirlced to any-calculated.
			Avoid duplication of companion faces in personalities via layer_recipes.
			Move up to the parents the shared keys (if possible).
			Minor cleanup.
			Add leftwards/rightwards to grave/acute.
			Add green keys to 3 and (part of) 4.
			Add digamma, stigma, kai (lc only), koppa, archaic koppa, sampi on Greek AltGr with w,t,K,c,z,x.
			Ring operator - added as a green key on AltGr-.
			Add currency map on AltGr-$ (based on bepo, wikipedia articles, and v6.1 currency section of UCD):
			  all except for ARABIC THAANA DEVANAGARI SINHALA letters and Squared Katakana are included.
			  Logic of assigning to letters: use the first letter of currency name, or (for versions of rupees) the first
			    letter of language/region, or (for rial/riel and yuan and cruzeiro) the second letter of the name.  If no
			    conflict appears, the symbol is duplicated with and without Shift; otherwise 7-bit $ sign,
			    regional versions of rupees and obsolete currencies are penalized (moved to AltGr-keys,
			    or Shift keys); if at least one of symbols on the same key is very similar to low-case/upper-case letter, 
			    then they are assigned due to this similarity, not penalty.  Yuan-1/yen/yen-CJK-1/yen-CJK-2
			    are put on Y, while yuan-1,yuan-2 are put on U (the order of variants is as in wikipedia).
			  All symbols are on letter keys; the symbol keys are all assigned the default ¤.
			  The only keys with two different symbols on AltGr are C,L,Y:  ¢₡₵₢, ლ£₤₶, 元¥円圓.
			  For completeness, we include all currency symbols, even if BENGALI MARKS make no sense without
			    a way to enter BENGALI digits/numerators/denominators (see http://std.dkuug.dk/jtc1/sc2/wg2/docs/n3311.pdf).
			Add business symbols to uc-AltGr of currency face (needed to massage it a little bit).
			Prohibit 〚〛	LEFT/RIGHT WHITE SQUARE BRACKET [Common; CJK Symbols and Punctuation; 1.1]  301a/301b.
			Adding underbar to ˆ˜ adds a little bit...
			Now that dashes are obscured by green keys, add them to AltGr on Greek; remove overrides from macron map.

0.07	Add recognition of APL symbols.
	Report coverage of math symbols in 22**, 27**, 29**, 2A** ranges.
	Leading whitespace in a layer recipe was not stripped.
	face_recipes section added (forced to 2 layers???) (do not put on `faces' since such "virtual" faces confuse the engine).
	Recognize INSULAR, VISIGOTHIC, MIDDLE-WELSH, ROTUNDA, BROKEN, and double-letter names as mutiliation.
	Add paleo as a mutator (now all pre-v5.1 paleo-latin letters compete).
	Add oldenglish (not OE!) to the charlists.
	Rename Diacritic* operators to use Mutate in the name.
	Start implementing NotId and NotSameKey.
	Allow auto-creation via `layers' entry of the face (either a recipe, or a key for layer_recipes).
	Allow auto-creation of layers in a personality via `face_recipes' (in presence of numLayers).
	   We do not deal with complicated dependencies of faces on each other - we do it linearly???
	Implement AltGrCharSubstitutionLayers, AltGrCharSubstitutionFaces (later unused).
	New mutator InheritPrefixKeys (complements NotId and NotSameKey to a useful form).
	Output html table (use background colors to distinguish "operator-like" and "ipa-like" homographs).
	New character list: double-accents
	  perl -I D:\ilya\ru-pho-keyboard\UI-KeyboardLayout\lib  -wC31 D:\ilya\ru-pho-keyboard\UI-KeyboardLayout\examples\grep_nameslist.pl "\bSMALL\b.*\b(AND\s+)?(\w+\s+)?(DIAERESIS|TILDE|GRAVE|BREVE|CARON|ACUTE|MACRON|CEDILLA|OGONEK|CIRCUMFLEX|RING|DOT|COMMA|HORN|HOOK|STROKE)(\s+\w+)?(?(1)| AND)\b" C:\Users\ilya\Downloads\NamesList.txt >double-accents1
	  perl -C31 -wne "print chr hex $1 if /^([\da-f]{4,}\b)/i" double-accents1 >double-accents

	EurKey++:	Move ®™℗℠© on AltGr-$ face to lc on the base layout (ls is as on all prior art: X11 US Intl/M$ US Intl/Bepo/UK Enchanced/EurKey/Birman's)
			Filter COLON SIGN ₡ out of AltGr-~/^.
			Green keys for 2 were significantly mixed up.
			Ano teleia put on Greek AltGr-; (since ; is occupied by ₋); Likewise for ∐∧⋀∅ on RlLF.
			Capital ß, ẞ, added as AltGr-~ AltGr-S; þÞ with stroke added to AltGr-^ prefix.
			Add paleo to hat/tilde pair, rotunda/doubleletter to ¨ (visigothic z conflicts with latinized alpha ɑⱭ).
			(Insular-g's, and doubleletters do not win the competition...).
			Add small and large ∨∧∅ to νλΦ (and capitalized variants).
			Temporarily (???) add insular to circled-face (and deprioritize circled characters).
				(This finishes access to pre-v5.1 paleolatin.)
			Add bullet on 6, ∈∋ on () as green keys.
			Add double-vline and double-addleft/right to AltGr-$.
			Add more tone bars (all except ꜎).
			Move most of green keys to AltGrCharSubstitutionLayers.
			Remove "cyrillic question mark from Russian-II (it had the same codepoint as semicolon!).
			Add extra chars from Copyright to Business; add KEYBOARD ⌨ to Q on both (finishes bepo coverage).
			ɚ to AltGr-0 on macron (where phonetize is).

	izKeys:		Split from EurKey++.
			Non-accented greek from http://help.keymandesktop.com/keyboards/keyboard_galaxiebiblescriptmnemonic/welcome-greek.htm
			  (Less bizzare correspondence to Latin, AND vowels are on different diagonals.)
			  (Without other changes, breaks latinized greek on AltGr-; .
			Dialytica i/u put on "empty" slots j/v.
			Define Russian, Russian_AltGr via layer_recipe.
			Unify Russian AltGr map	with Latin one as much as possible.
			Switch to logical layout of accented letters on AltGr-layer.
			Split AltGr-; into AltGr-; AltGr-, AltGr-"; swap ˆ˘.
			Remove © and ± faces.
			Implement BlueKeys.
			Pinyin without green keys (¨ on ü to insert ǚ).  (Any diaeresis+accent except ṻ ¯ü can be entered.)
			Make AltGr-; insert hook above (as the last resort).  Finishes Vietnamese input (but is it "logical"? ê is black and green...).
			Add double-grave and dot-above to AltGr-;.
				Currently ȽɾᴁᴙᶏᶒḄḚṂṚ‖′″ⁿ⊠⊦⌐⌙⧇⫴ꟽꟿ missing w.r.t. EurKey++.
			
0.08	New charlist latin-derived (from http://en.wikipedia.org/wiki/Latin-derived_alphabet).
	Work on manual-mutators lists.
	Decrease font size in HTML tables to 10pt (to compensate for slash-column).
	Add mutators for paleo-latin contractions and UM-ified contractions.
	Rename toHEX() to fromHEX().
	Allow omitting argument to print_decompositions; new subroutine print_compositions_ch().
	Remove duplicates and trivial id entries from (de)composition mappings.
	Two bugs in (un)chaining mutators: shallow copy + modify, and case of hex.
	Penalize out-of-order modifiers.
	Allow for multiple results of a mutator (to preserve backward compatibility, we need to calculate penalties 
	  in a very convoluted way...) - STILL NOT WORKING SATISFACTORY...
	Highlight vietnamese and doubleaccent entries in an HTML table; write line explaining highlights.
	Store geometry information extracted from the visual representation of layers (with keyline_offsets set in a visual section
	  or an ancestor); propagate to faces via the first layer, or geometry_via_layer.
	New mutators uc/lc/Empty.
	New Mutate[] atoms uc/lc/ucfirst/lcfirst (which act only when they change letter, and the result is of length 1 - see U+1fa6, or rho with aspirations)
	Fix caching of ancillary layers in for 'all_layers' mode.
	Add manual-* maps for coptic script.
	Start documenting the engine of layer recipes.
	Add more fix-uc/lc pairs for v>5.1.
	In HTML tables: highlight zero-width chars, soft-hyphen and whitespace; allow manual addition of paragraphs;
	  auto-generate the table header.
	New root key of .kbdd: VERSION.
	New charlists mes1, mes2, mes3b.
		perl -C2 -wane "next unless /^[\da-f]{2}\s/i; my $p = (hex shift @F)<<8; for (@F) {print(chr($p + hex)), next unless /\W/; my @r = split /\W+/; for my $c (hex $r[0] .. hex $r[1]) {print chr($p+$c)}}" ! >o3b
		http://web.archive.org/web/20000815100817/http://www.egt.ie/standards/iso10646/pdf/cwa13873.pdf

	izKeys:	Remove duplicates from comma/cedilla/ogonek map, and fuse with dot/ring.
		Simplify greekize on comma/cedilla/ogonek.
		Rename layers and faces to better reflect the semantic.
		Micro-optimize layout (now compatible with all http://en.wikipedia.org/wiki/Latin-derived_alphabet).
		Add retroflex hook on acute-on-top-of-acute, fishhook to hat, reversed to acute/grave, tilde-below 
		  on breve-on-grave, Æ-smallcaps on AltGr-$ Æ.
		Split macron into macron and slash maps (miss therefore and midline ellipsis).	  (All *letters* from EurKey++ accessible now.)
		Add inverted breve to macron (to reach a/u, allow removing acute; manually slide Ȏȏ to AltGr-less positions Kk).
		Make AltGr-/ insert macron under diaeresis (so Ṻṻ appear).
		Remove binding for TONOS and YPOGEGRAMMENI from `_ in the Greek face.
		Fully implement polytonic Greek vowels; full Coptic alphabet support: the prefix keys working AFTER greek prefix:
		  [ and ] prefix keys for the corresponding aspiration; each vowels is entered via 4 keys on the
		    vowel's key's principal diagonal as: digit row: circumflex; QWERTY row: acute, ASDF row: plain,
		    ZXCV row: grave; add AltGr for diaresis or iotation.  ρ is entered on `.
		  \ prefix key: the same without aspiration (but "plain without iotation" is replaced by vrachy=breve, and the
		    next neighbour ASDF-row letter gives macron); all letters are "upgraded", so acute is actually oxia (not tonos),
		    υ-diaeresis-acute gives ϓ (on AltGr-u), and epsilon/rho are replaced by the corresponding symbols ϵ ϼ (on d 
		    and `; rho is stroked).
		       ("Standalone diacritics" are put on the place of non-existing omicron with dialytika: 9ol.-column with AltGr 
		        [ heuristic: on AltGr-. ];
		        add Shift to get variants with dialytika.  As exceptions, coronis is entered as psili with shift (on
		        ] AltGr-L), and the "no-accents position" \ AltGr-l gives YPOGEGRAMMENI/PROSGEGRAMMENI (without/with Shift),
		        while \ 3 and \ # give lower/upper number signs.  Standalone tonos is on \ AltGr-3; shift to add dialytika.)
		  ` prefix key: Coptic analogues of greek letters, and j/J --> ḏanḏia, v/V --> fei, hyphen --> double-hyphen;
		    the letters without Greek analogue are on AltGr-letter where the "letter" is the first letter of the
		    name on Wikipedia page (or the first letter of Unicode name for DEI and KHEI [ti and xai]).
		    Additional "random" AltGr-letters: Bactrian sho on b/B; ½-H heta Ͱ/ͱ on i; yot ϳ on j; Pamphylian digamma Ͷ/ͷ 
		      on g; san Ϻ/ϻ on m, ϒ on Y, lunate sigmas ϲ/Ϲ on l, reversed lunate sigmas ͻ/Ͻ on o, reversed epsilon ϶
		      on e, kai's Ϗ/ϗ on q, (reversed) dotted lunate sigmas ͽ/Ͽ ͼ/Ͼ on r and u,  and archaic sampi Ͳ/ͳ on n.
		On Greek face: add ϔ as an AltGr-variant of Ϋ (this completes the coverage of greek ranges).
		On 0483 Cyrillic: add Modifier-ᵸ and smallcaps ᴫ on Shifted positions;
				  on AltGr-positions: enter more obscure letters...  
		Have all letters used in current languages (including Enets with 70 speakers ;-), according to Wikipedia tables;
		  (old Komi scripts are on comma, and some zee's on zero ;-). But tables in ru.wikipedia mention also
0514	<Ԕ>	CYRILLIC CAPITAL LETTER LHA [Cyrillic; Cyrillic Supplement; 5.1]
0520	<Ԡ>	CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK [Cyrillic; Cyrillic Supplement; 5.1]
0522	<Ԣ>	CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK [Cyrillic; Cyrillic Supplement; 5.1]
		  - anyway, what is missing is only 6 lc/uc-pairs (all with: from v5.1, for obsolete scripts, for non-Slavic lang):
		    ԕԡԣꙣꙥꚁ	(3л, 1н and 2д; one binding slot - on ш - still unused).
		Repeat greek number signs Shift-inverted on []-prefixes, and add digit subscripts to Coptic 
		  (to enable access from CyrillicPhonetic - obscured by ъЪёЁ).
		Set version to 0.01.
		To access Ȧȧ, add on / (undoing `: on à); for z-hook, put on ¨ z; etc - many small changes.
		Add obsolete Zhuang tone marks to Coptic (!) AltGr-numbers.
		Restore compatibility with Bépo, and micro-optimize comparing with M#S-1/2/3b.
		  
			-VEND -UM
		
	print_nameslist.pl:	Update to use non-beta Unicode files.
				New option -hex.

0.09	Cache results of Unicode::UCD::charinfo --> 2.3x speedup of processing.
	Cache results of <any-foo> - speeds up things another 2x, but behaves bad w.r.t. pairing of uc/lc letters.
	Report resolution of mutator recipes if UI_KEYBOARDLAYOUT_REPORT_MUTATORS is set in environment;
	  bit 0x1 for concise report, bit 0x2 for verbose (to STDOUT!), bit 0x4 for details of sorting compositions,
	  bit 0x8 for composing, bit 0x10 for caching <any-*> compose, bit 0x20 for inhibiting cache-merging <any-*>.
	Explicit penalization was applied to a Shift-pair of characters even if it is not an lc/uc-pair.
	Allow partial penalization (via \ú).
	Extra arguments $omit (not used yet) and $do_lc, $do_uc for shift_pop_composition().
	Allow for fallbacks in prefix keys sharing a recipe in opposite direction (after the second ||||).
	Penalize lists start anew in every ||||- (or top |||-) section.
	New semantic of repetition on these sections: we do not extract a char already extracted in previous section,
	  but may extract a char mentioned there, but not extracted.
	New variant of Mutate*(): Mutate32OK[].
	+ starting Mutate[]'s directives means "primary recipe"; ||| etc are the same as |.  
	  (Now can share the whole primary directives.)
	Allow -recipe1+recipe2 in a mutator (including <any-foo> in recipe1 - need to switch off caching!).
	Fix the UP/DOWN TACK mixup in Unicode names.
	Add version numbers to the coverage report.
	New coverage lists: IPA-obsolete-and-capital-small and UPA (Uralic PA).
	Penalization via \ọ was not working on double-occupation slots.
	Add Cʗ to phonetize.
	Add uc/lc fixes for Ɋ and ß.
	Fix IPA-obsolete/etc coverage set (had 2 PUA from WikiPedia page; fix one of them both here and there).

	izKeys.kbdd:	Add `turned' to AltGr-'.
			Tortoise parens supported (again!), 3 variants of 4, and bold braces.
			Micro-optimize to the level of 0.01 - only much better.
			Swap ␠/␢; add symbols for special keys to Shift-Space; add images for special keys to Business;
			  with ↹ on Tab, ⇤ on C-[, ⇥ on C-];
			  NL and NUL considered as images (on C-Enter and C-\), and CR LF as symbols.
			Bump the version to 0.02.
			Optimize IPA coverage "by visual resemblance" (now all symbols except for modifiers/combiners are present);
			  [but broke case-preservation: ɞ/ɝ/ɺ are on upper-case E,È,AltGr-I with AltGr-/].
			Swap AltGr-Y/U on Coptic (have exotic Greek letter forms); move Ohm from Business to Coptic, add inverted.
			Put fi/fl ligatures on AltGr-w/W, and HOUSE ⌂ on AltGr-h on Business.
			[Only graphics + arrows + 9 5-bit C0 dingbats of cp437 not supported from MES-2 now.]
			Add ⌈⌉⌊⌋ to {}[] on AltGr-/ (heuristic: cut off a piece).
			Try adding double-struck on AltGr-/ (CHN fit, PQRZ not).
			Penalize ọ to have all of dots below accessible the same way (on AltGr; having them all without
			  AltGr makes Scandinavian å, Turkish ı and Lithuanian ė harder to enter; I presume that Vietnamese
			  input with this layout will not be the prime-time usage).
  			Switch ủ and ǚ and other clean ups.
  			Pinyin ǚ now entered the natural way; Latin-Belorussian/Esperanto ŭ moved to AltGr-/.
  			Business map: move (CJK) Yuans to AltGr-u/U; move schwa case pairs to z/Z (African to AltGr);
  			  put hooks on u/o; move c/o to / and AltGr-o, ℮ to AltGr-e; 
  			  add Double-Female/Male and "Female and Male" signs on AltGr: F/M/a.
  			Add case pair for ʔ on AltGr-?/ on Greek (this finishes "obsolete+case-pairs of IPA").
  			Add smallcaps Greek and OU on breve + AltGr-Shift (this finishes non-modifiers/combiners of UPA).
  			  (This did not cover smallcaps-Γ [not in UPA according to WikiPedia!], so duplicate on grave.)
  			Penalize ⊠ to allow for ???.

  Vietnamese vowels; input:
    The vowels with 1 diacritic (except horn and hook above): only ê can be 
      entered via AltGr (as AltGr-e); all may be entered by the corresponding 
      dead key (as AltGr-6/^/`/'/~ for ˘/ˆ/`/´/˜ followed by the base vowel;
      and AltGr-. AltGr-vowel for the dot-below diacritic).
    Ư/Ơ: put ` on AltGr-vowel (as AltGr-` AltGr-vowel); or on AltGr-$ map;
    Ư/Ơ with ` or ´: put ` or ´ on U/O with the opposite tick (´ or `);
      as AltGr-` (or AltGr-') AltGr-key; here key is one (or two, for ´) keys
      below the u/o key.
    Hook above: put ¨ on AltGr-vowel (as AltGr-; AltGr-vowel).     (!!! Except ủ: do AltGr-' AltGr-u)
    Double diacritics involving ê, or `, or ´ (except ê?=ể/ệ and those 
      involving hook above or horn): put the OTHER diacritic on the
      AltGr-key accessing ê or the vowel with ` or ´.  
        Example: ầ via AltGr-^ AltGr-z (since AltGr-z gives à).
    Tilde or dot-below on â/ê/ô or ă/ơ/ư:
      Tap AltGr-~ or AltGr-. and press the corresponding GREEN KEY (replace the
      ˆ-vowel by `-vowel, and ă/ơ/ư by å/ø/b and use the key accessing
      the replacement (AltGr-z/AltGr-f/AltGr-m/AltGr-r/AltGr-p/b).
        Example: AltGr-~ AltGr-z gives ẫ since AltGr-z gives à which
		is a GREEN KEY for â.
    Likewise, hook-above on â/ê/ô or ă/ơ/ư: tap AltGr-; then the GREEN key.

    Symbolic representation of these rules (with diaeresis=AltGr-; )
           (the GREEN one is a generalization of grave one above it):
      grave + diaeresis		==>	horn
        or (same)
      grave + AltGr		==>	horn		(or use AltGr-$ prefix)
      grave + acute		==>	grave + horn 
      acute + grave		==>	acute + horn
      diaeresis + AltGr		==>	hook above
      tilde/dot-below + grave	==>	tilde/dot-below + hat
      tilde/dot-below + GREEN	==>	tilde/dot-below + horn/hat/breve
      diaeresis + grave		==>	hook-above + hat
      diaeresis + GREEN		==>	hook-above + horn/hat/breve

    In the shortest form:
      diaeresis 	+ AltGr	==>	hook above
      diaeresis		+ GREEN	==>	hook-above	+ horn/hat/breve

      tilde/dot-below	+ GREEN	==>	tilde/dot-below	+ horn/hat/breve

      grave		+ AltGr	==>	horn		(or use AltGr-$ prefix)
      grave		+ acute	==>	grave + horn 
      acute		+ grave	==>	acute + horn

      GREEN-for-hat	= grave	= AltGr-z/AltGr-f/AltGr-m for à/è/ò.
      GREEN-for-ă/ơ/ư	= å/ø/b	= AltGr-r/AltGr-p/b

    One must remember positions of quick-access 
    AltGr-vowels with ` or ´, of additional "green keys" for ĂÂÊÔƠƯ,
    how to enter diacritics `, ´, ˜, ... via AltGr-prefix keys
    (`, ´, ˜ are where expected, dot below on AltGr-7 [possibly with
    AltGr on the vowel key], ˘ on AltGr-^, ˆ on AltGr-6; hook above on 
    "English vowels" is on AltGr-´ with AltGr-vowel, and on "green keys"
    it is on AltGr-;).  Also: đ/Đ is AltGr-& before d/D.
    

    THE RULES:

    All characters with at most one "accent" (except "horny" ƠƯ) can be 
    entered "normally" (following the rules for AltGr-diacritics 
    on "English letters", or via quick-access AltGr-vowels with ` or ´).
	    
    For characters with ` or ´ tone mark and another ornament 
    (except "horn"), use the AltGr-prefix key for this 
    "other ornament" with the quick-access AltGr-vowel for `/´-vowel.
	    
    To put tilde, dot below, or hook as the "second" diacritic, one
    should know additional positions on AltGr-layer: ĂÂÊÔƠƯ take 
    places of ÅÀÈÒØÙ (which are on AltGr- WZF,LH; call these places 
    "green AltGr-keys").  Preceed the green AltGr-key by the 
    AltGr-prefix for the diacritic (given above).  For example, ỡ is AltGr-~ AltGr-l.
	    
    This leaves `, ´ on horns ƠƯ and horns themselves.  For the former,
    use AltGr-` and AltGr-´ on O and U with "the opposite ` or ´ accent".
    For ƠƯ, use AltGr-` on AltGr-O and AltGr-U (which are ÖÜ).
	  
    =====

    Desired heuristic for semantic: under the weight of additional 
    accent, `-accent on letters collapses to a different accent:
      under ´ it collapses to a horn on O and U (Ơ and Ư) so
      one gets Ớ and Ứ (likewise for ´-accent under `).
      Over ¨-accent ` again collapses to horn (but ¨ evaporates, so
      one gets a pure horn).
	      
0.10	Update uc/lc maps.
	When determining case pairs for merge of diacritics (during caching), be most conservative:
	   ($c,uc $c) form a pair only if $c eq lc uc $c (only applicable to ſ/S).
	Add UGL character repertoir (from http://www.borgendale.com/codepage/os2ugl.htm) and all-greekish
	   from perl -wC31 UI-KeyboardLayout\examples\grep_nameslist.pl "\b(ALPHA|BETA|GAMMA|DELTA|EPSILON|ZETA|ETA|THETA|IOTA|KAPPA|LAMDA|MU|NU|XI|OMICRON|PI|RHO|SIGMA|TAU|UPSILON|PHI|CHI|PSI|OMEGA)\b" ~/Downloads/NamesList.txt >out-greek.
	Add DESCRIPTION POD section.
	New pseudo-fake-mutator but-not.
	Add popup on control-chars in HTML output.
	The duplicated overflow from the first key on a second key in a pair has lower precedence than $map3.
	
	izKeys.kbdd:	Update VERSION to 0.03
		Put playing cards suits of cp437 to p/P on AltGr-" ("reds" on AltGr) (but ℙ obscures one).
		Add a few dingbats at start of cp437 to Shift-Numbers (and _, AltGr- -/_) of Coptic
		  (3 of 4 card suits not accessible from CyrillicPhonetic).
		Add "lean CR" and Undo images to Greek Enter/Backspace.
		Add ƺʓ to j on Business; ɿ to AltGr-"; stroked paleo-contraction.
		Move Greek ϲ/Ϲ from l to v, and Heta ͱ/Ͱ from i/I to 1/! (on Coptic).
		Add stroke+latinize (including manual ƛ) to Coptic.
		  (Of embellished Latin letters of MES-3b, only digraphs and ^¯°¨-below and half-ring are not present now.)
		AltGr-j to ℩ on cedilla.
		Micro-optimize so that all non-modifier Paleo-latins now at least compete...
		Micro-optimize more Greek stuff not from Greek ranges 
		  (this finishes all Greek except modifier/combining/subscript/double-struck)
		Micro-optimize ⧔, and make back ∘ (removed by removal of ó∘ greek key).
		Micro-optimize math; now more than 60% of math ranges is covered...
		Exchange ҽҼҿҾ.
		Rename deadkey ˮ to ˵.
		Add Zodiak to Shifted digit-row on ~-Greek.
		Greek numerals: move left and right keraya to [ 3 and ] 3 (with # having the opposite binding).

0.11	The header row for HTML tables contained the most obscure access code, not the most convenient.
	Do not complain when de-obscured fails with a symbold which was already de-obscured earlier.
	reveal-substkey replaces (deprecated) reveal-greenkey.
	Make Auto_Diacritic_Start, Flip_AltGr_Key, Diacritic_if_undef, DeadChar_DefaultTranslation/32bitTranslation inheritable.
	Add a couple of new links to Mike Kaplan's stuff.
	New cmd script doing .C --> DLLs build using only the standard compilers from MSKLC (no utils!).
	Scancode for VK_KANA, VK_(NON)CONVERT, VK_OEM_8 (put on YEN,|-key), OEM_AX
	   (kbdutool produces 1 wrong line for each .H and .C - with #ERROR# - for OEM_AX, KANA, (NON)CONVERT)
	Start supporting UI_KEYBOARDLAYOUT_DEBUG (0x1..0x4 for face/layer_recipes, guess name-normalization, OPERATOR in names).
	Support scancode/VK difference between JIS and ISO,ABNT keyboards (102 vs C1, C2 vs 8; throw in NONCONVERT --> CONVERT too);
		only one of the pair may be described, the other one (if not defined) will be a duplicate.
	Allow "extra" deadkeys to be reported via extra_report_DeadChar.
	Shut up warnings about new discovered duplicates for composition (after manual inspection).
	Shut up warning for `no [deadkeyFace]'.
	Allow for a deadkey recipe to be an array reference (split on space, or after comma or |).
	Quiet warnings for double prefix keys, make those for triple (and more) less verbose; "attempt to separate... with comma".
	Queit wide-char warning during debugging on $DB::OUT, $DB::LINEINFO.
	Hack with $m1 to work about a bug (???) in Perl 5.10.  The result without 0x1000000 is different:
	  env UI_KEYBOARDLAYOUT_DEBUG=0x1000000 perl -wC31 -Ilib examples/build-iz.pl examples/izKeys.kbdd
	Make things work (not necessarily correct) without downloaded Unicode
		tables.
	Add (unsorted) list of references to Unicode mailing list.
	Add pre-docs for .XCompose and summary of behaviour of different .XCompose's.
	Propagate new %fix from HTML visual formatter.

	izKeys.kbdd:	Update VERSION to 0.04.
			ъЪёЁ were interchanged w.r.t. X11. ( Search for "phonetic" in [/usr/share/]X11/xkb/symbols/ru )
			Add ⁻⁼⁺⁽⁾ to BlueKeys; (natural places, except: ⁽⁾ on AltGr, and only accessible from Latin)
			Exchange ⁻ and ∓, so they are now in more natural positions.
			Exchange · and √  --- now miss:
-27de	<⟞>	LONG LEFT TACK [Common; Miscellaneous Mathematical Symbols-A; 3.2]
-2aa6	<⪦>	LESS-THAN CLOSED BY CURVE [Common; Supplemental Mathematical Operators; 3.2]
			Add ъЪ to the OTHER \| key (leads to a certain rehashing of ъЪёЁ-mirroring).
			Start splitting into TILDE/CEDILLA groups of modifiers/combiners (now cedilla may be entered as expected).
			Swap "Green" and "Blue" in the names.
			Make RipeKey introduce Greek; replace μ by appropriate symbols (ԣ en with middle hook on Cyr, ≈ on Latin).  
			  Now miss:
-2422   <␢>     BLANK SYMBOL [Common; Control Pictures; 1.1]
-2a73   <⩳>     EQUALS SIGN ABOVE TILDE OPERATOR [Common; Supplemental Mathematical Operators; 3.2]
			Cyrillic: Move palatization to AltGr-' AltGr-^ (slide things back on AltGr-рР; add ԕ at freed space).
			Exchange RipeKey and GreenKey w.r.t. Cyrillic/Greek (now greek on Green, cyrillic on ripe).
			Cleanup LatinGreenMax.  (But DITTO is missing on Cyrillic personality...)
			26ce ⛎ OPHIUCHUS added to the left of ARIES (for "extended completeness"), obscuring useless CAPITAL RHO.
			Remove ₯ DRACHMA SIGN from the Greek map (remains on Business).
			Swap Green and Ripe (not on Cyrillic yet).
				Currently some tone marks missing.
				Also: ByPairs[Vϔ](FlipLayers(Latin)) omitted (leads to bugs).
			Swap ¦†.
			Replace Junk, Junk-AltGr with Ripe/-AltGr in the visual table.
			In Cyrillic, move psili/pokrytie to AltGr-2/@ (from 7); dup palatization to AltGr-!
				[instead of ºª¡ of Latin!].
			Bind ABNT_C2 to (future) Compose, and easier access to some other stuff (Flip-AltGr, Business, Cyr-II).
			Add primes ′″ to the Ripe face.
	#######	Keyboard name is now out of sync...  #####################

			Now compiled with (currently, patching is not needed; for an example, see examples/fix-MSKLC.patch):
%Keyboard_Layout_Creator%\bin\i386\kbdutool.exe -v -w -s ooo-us
%Keyboard_Layout_Creator%\bin\i386\kbdutool.exe -v -w -s ooo-ru
	####  Do patching if needed...
..\..\UI-KeyboardLayout\examples\compile_link_kbd.cmd iz-la-ru 2>&1 | tee 00c
..\..\UI-KeyboardLayout\examples\compile_link_kbd.cmd iz-ru-la 2>&1 | tee 00c3
				- see examples/build_here.cmd

	New file: examples/enable-hex-unicode-entry.reg
		On Windows:
			reg import enable-hex-unicode-entry.reg
		(active after a reboot).	Alt(keep it pressed)	+ NumPad+	+ any hex digits (release Alt)
		(Not with a numlock... ???)
	New files: *.cmd - DLL build environment.

		time env PERLDB_OPTS="frame=7 LineInfo=oo-dd NonStop=1 AutoTrace=1" perl -d -wC31 -I UI-KeyboardLayout/lib UI-KeyboardLayout/examples/build-iz.pl UI-KeyboardLayout/examples/izKeys.kbdd |& tee ooxx-us-ru 

0.12	Change internal representation of exportable prefixes from [*, *] to [*, *, 2] (so now all prefixes have $k->[2] TRUE).
	Enhance doc section on Windows problems.
	Clearer popups in output .html.
	Change internal structure of representation of a character-in-a-key-slot: $c or [$c, $face_from, $is_prefix, ...].
	New in-prefix-map directive PrefixDocs[DESCR]; DESCR is put into html popups for prefix keys.
	Start adding docstrings on the generation pathway of the slot (up to FromTo, which has problems now???;
			Does not work on DEADKEYS and InheritPrefixKeys???).
		Format of char-to-emit now is [char, from_face, dead/inheritable, generation_pathway, old_prefix] 
		with all but 0th optional.
	Improve the order of control-chars in the output tables.
	Allow arbitrary number of “+”s in the Layers(*) directive (untested).
	Allow arbitrary number of layers in output_unit00() (untested).
	Trace provenance up to a visual layer.
	Add DOCTYPE to the generated HTML.
	Update year in the .kbdd's copyright.
	Trace provenance of AltGrSubstitutions.
	Mark EIGHTH NOTE meaning vbell as such in HTML.
	Mark positions involving/being AltGrSubst in blue in HTML.
	Restore addhline () --> ∈∋.
	Report separately "via single prefix key" and "via repeated prefix key" in the output tables.
		BUG: ignores DeadKeys2...
	Implement mutator ByPairs(Inv)Prefix.  (These BUGS are now fixed:)
		BUGS: in print_deadkey_win() (sp?) we need to <<3 - apparently, only the inverted map is shifted by 3...
			in massage_imported2(), one can't make a deep copy 
				(related??? makes 03a6@ into 0301@, but only in the not-inverted face???
					- old value is cached during link_layers()!)
	Recognize YEN, BROKEN BAR and "the second SLASH" in BaseLayer as ABNT_C2 (so as JIS ¥¦ via duplication).
	Make default_char() to be used as late as possible.
	Remove repeated-dead-key magic from print_deadkey_win() (except for AltGr-inverted base face).
	Merge all the debugging flags into UI_KEYBOARDLAYOUT_DEBUG.
	Link layers AFTER the imported keys are (re)assigned (fixes BUGS mentioned above).
	New configuration key for a face: PrefixChains.
	layer_recipes entries could not be arrays.
	Allow variation of the column where Ctrl-keys go in the output .klc; omit missing CTRL if at end 
		(does not fix the Control-Shift-Letter bug).
	Allow generation of Ctrl-letter and Ctrl-Shift-letter (works about a bug in File Commander with C-S-letter).
		(XXXX currently hidden in the output tables - need to put a fifth char in a “prefixed” cell)
	Add new translation filters: ucfirst_not_lc (etc for uc/lc; behave as uc/lc/ucfirst pseudo-compositing rules), dectrl.
	Add new pseudo-compositing: dectrl.
	ShiftFromTo was not allowing chars-by-hex.
	Document the problem with Control-Shift-letter in MSKLC-generated keyboards.
		Why only the last of these works??? ByPairs[0020␢](FlipLayers(Latin))	ByPairs[0192␢](Face(Latin))	ByPairs[0192␢]
	Control-\ and Control-] were mixed up in several cases.
	Output of visual keyboard layouts (non-surrogates hardwired).
	Use to_ne class instead of from_sw in visual layouts (is not obscured due to z-order).
	New toplevel .kbdd key face_shortcuts (used in [re]generation of visual diagrams).
	New in-prefix-map directive HTML_classes[(WHERE,CLASS,chars,)*].  (Can be put also in DeadKey_InvMap0000.)
	Add what-is-prefix info to the base layers.
		(In RU, it now thinks that 0301 needs double-prefix???)
	Consider KORONIS, PROSGEGRAMMENI, ANO TELEIA, GREEK QUESTION MARK as homographs.
	When process visual map, use ucfirst() instead of uc() (does not matter with izKeys.kbdd).
	Mark lc/ucfirst pairs with 3 case forms by yellow dotted outline in visual keymaps (relevant for polytonic).
		(Before, we were pairing on the base of lc/uc, not lc/ucfirst.)
	The visual table was based on “pure” layers, not layers marred by prefix mapping.
	We did not mark prefix-keys-from-VK as $c->[2] = 1.
	Optimize depth of span inclusion in generated HTML tables.
	Use the classes/docs generated on TABLE HTML when doing visual HTML (some cause visual clutter, so
		should be explicitly enabled on the enclosing DIV). 
			VIET has background which is not visible???
	Add info on the used unicode tables version to the outputs.
	When looking a prefix in the diacritics table, prefer the row with the earliest occurence.
	Move "next combining" from AltGr-/,? to '/",AltGr-'/"
		We had prime-like stuff there - which was nice too???

	izKeys.kbdd:	Update VERSION to 0.05.
			Add PrefixDocs.
			Fix prefer_(first|last).
			Fix AltGr-- with () --> ∈∋.
			Use ByPairsPrefix for greek double prefix keys.
			Use PrefixChains for 00b5, 0192; first char moves to 4th press, the other is killed:
-2423   <␣>     OPEN BOX [Common; Control Pictures; 1.1]
-2007   < >     FIGURE SPACE [Common; General Punctuation; 1.1]
				Having ¨ inside the chain kills modifier-colon...
                            Latin				Cyr
    AltGr	Greek -> Cyr -> Cyr-II -> Cyr-III	Latin -> Cyr-II -> Greek -> Cyr-III
    Green				Greek -> Busns -> Coptic
    Ripe	Cyr -> Cyr-II -> Cyr-III		Latin -> Negate -> Blue
			Improve £ on the £-map (now £ is obtained by doubling the prefix), ¤ is still on # and @ (hi, Tom!).
			Add ␣⍽/␢ to Green/Ripe keys (well, it would be nicer to have honest whitespace on Ripe keys, but this
				conflicts with having text-Control-key symbols there...)
			Add textual-symbols for remaining control keys (XXXX 0x1e and 0x1f still missing).
			Add circled letter to Round-Ctrl (uppercased to the sibling map Cedilla+Ctrl).
			Same for letter super- (on ^/~) and sub-scripts (on / - there is no uppercase subscripts in 6.2!).
				Note that the alternative (case-switched) letters are also available on AltGr-flipped face ???
			Reorder dead keys in the report closer to accordance with Green/Ripe.
			Control-\ and Control-] were mixed up in several cases.
			Exchange Control-key-symbols and Control-key-other-images (hides £ on AltGr-$ SPACE...).
			Add non-break spaces (usual and narrow) on spaces in Ripe face.
			Add 9=thin, a=Hair, 7=figure(noBreak), 8=Punctuation spaces to 2nd/3rd Ripe maps (only on Latin now)
			Add @ -> ƻ to macron (on 2 it would hide useful bluekeys+macron).	[case/shift twisting!]
			Assign classes to chars for use in visual HTML output.
			We were missing ῭ in Greek-polytonic (\) AltGr-L-column.
			Put ԡꙣꙥꚁ [temporarily?] onto the free slots in Business map (this finishes the Cyrillic coverage);
				SOFT are on X=Ь; DWE on V...
			Move … from Green to Ripe, and put · to Green (on fullstop=.).
			Add €/£ to Green $/^.
			Add ⌧,⎚ as other-iconic on Control-Backspace, Control-C; ␥/substitute-2=U+2426 as iconic on Control-C/SUB=^Z.
			Downgrade LAS from l to AltGr-L on Business (Wikipedia article on Lari does not include ლ).
			Downgrade LIVRE TOURNOIS SIGN from AltGr-L to AltGr-i/I on business (by the second letter now!).
			Add TURKISH LIRA SIGN on l on Business.
			Fix CEDILLA modifier/combiners list; lost:
	-1dfd   < <U+1DFD>>     COMBINING ALMOST EQUAL TO BELOW [5.2]
			Fix double-presses-with-AltGr of , . " ~ / ^ ˘.
			Add faky-diacritics-type for DBL_GRAVE.
			Add diacritics type for SLASH.

	Add examples/console-fonts00-added.reg
	Add examples/build_here.cmd (run in subdirectory of a directory with the distribution subdirectory, after creation of oo-*)
	New file examples/izkeys-visual-base.html

Perl bug with 2Self auto-docs (not debugged yet).  Already "my $c =" leads to a bug...

0.13	Add ∩/∪ as round-∧/∨.
	Add names of extra keys we (may) use with the keyboards to the .klc template.
	Flip MUTATORS uc/uc_not_lc etc with uc_maybe/uc (does not change the output for izKeys).
	Add documentation for mutators (except for Mutate(2Self)).
	*Really* case-fold when checking for double-occupancy in sort_compositions.
	Our code to find extra combining characters was off by 1.
	Add prefix2 highlight for inverted prefixes in visual HTML.
	Merge Shift-doubled-prefixes in visual HTML.
	Better warning for mismatched length of lines in a visual map.
	Allow space before NonspacingMark in HTML_classes.
	Put BDO into generated HTML tables.
		BUG: Can't put Meteq | to secondary AltGr-|.
	Explicitly recognize [\xAD\x{200b}-\x{200f}\x{2060}-\x{2064}\x{fe00}-\x{fe0f}\x{034f}] as ZERO WIDTH.
	Quiet warnings when non-AltGr positions are copied from LinkFace.
	Add Shift if needed when copying form LinkFace to AltGr layer.
	Allow visualization of LTR/RTL mirroring in HTML visual output by class rtl-hover and options rtl-hover/rtl-hover-Trivia.
	Allow visualization of zero-width and whitespace characters. 
		(Whitespaces lost the representation of the width.)
	Allow in_key_separator2 as a separator of keys in visual keymaps (but only if one of the chunks is ≥2 chars long).
	Output ligatures.
		Not good in HTML output, or in coverage, or in deadkey tables???
		Not for out-of-BMP
	Add more documentation of mutators.
	Simplify output_unit00() a lot.
	Make ctrl_after_modcol create_alpha_ctrl keep_missing_ctrl into configuration variables (inheritable).
	Support LRO/RLO at start (and then PDF at ends) of visual layout lines.
	Implement extra layers per face.  (Via extra_layers, layers_modifiers configuration variables)

			(Visual bell is not working for the added keys...)
		Needs a patch to the generated .C and .H files.
		kbdutool overfulls with too long lines unless one manually removes comments.
		kbdutool ignores all the added layers but one (looks like it is limited by: up to 8 chars per key).
		

	izKeys.kbdd:	Update version to 0.06.
			Change µ to ĸ (00b5 to 0138) as the GreenKey prefix (so it is not directly in any personality).
				In RU personality, ɣ/Ɣ moved from double-prefix to triple prefix in the report???
			Remove vestigal 03a6 from Cyrillic personality.
			Regularize whitespace in Cyrillic.
				(Still: 2009/200a are not on the 2nd Ripe...).
			Beginning of Greek personality 
				(did not remove they-are-prefix-in-Latin characters)
				Green keys are missing,	AltGr-decimal becomes « ; GLOTTAL STOP is obscuring "?"...
				Greek Number signs added to AltGr-6/^ and «» are as in Cyrillic.
			Beginning of Hebrew map ( perl -C31 cvt_apple.pl Hebrew-ZC.keylayout >hebrew-ZC-visual )
				(Start with http://bc.tech.coop/Hebrew-ZC.html; make SWUIO produce PRESENTATION (?!) forms, 
				have <> not inverted, remove "lo" לֹ and typographic marks, add punctuation gershon/gershoim
				longest vowels and YOD-YOD-PATAH, exchange v and u, add HET on H.  Then regularize niqqud 
				— deoptimize for finger movement, optimize for memorization.)
			Add accessor Į 012E for Hebrew (and corresponding extra columns in HTML tables).
				(◌ 25cc moves to the double-prefix section in the report???)
			Double-Green face MathBlue.
			Exchange ѹ/ꙋ (per http://www.synaxis.info/azbuka/ponomar/charset/charset_1.htm).
			Add extra layers (in Latin personality: Greek; in Cyrillic personality: Latin).  (Currently on AppMenu)
			Regularize order of personalities on S-␣ AGr-␣ 2×AGr-␣: Latin/Greek/Cyrillic/Hebrew (Cyrillic₂/Cyrillic₃???)
			Make Control-keys generate super/SUPER/txt-Ctrl on 1×,2×,3× S-␣, sub/icon-Ctrl/icon₂-Ctrl on 1×,2×,3× AGr-␣
				(at least on Latin).
			Make AltGr-/ generate SmallCaps on Control-keys (on Latin).

	examples/cvt_apple.pl:	new script to convert Apple layout to a visual layout
					(does not process correctly strings of length > 1)
	examples/hebrew-ZC-visual:	example output of cvt_apple.pl
	build_here.cmd			Cut longer lines in the generated .klc; preserve more related files.
					Add patching to workflow.
	examples/izKeys.patch		Switch ApplicationMenu key and KANA (as OEM_AX which works as KBDKANA modifier).
					Apparently, with KBDKANA present (???), KLLF_ALTGR is not processed;
						so manually process RMENU as Control+Alt.
					Support (NON)CONVERT keys.
	build-iz.pl			Prepair a copy of visual-base.html unless it exists.
	examples/izkeys-visual-maps-base.html	Rename from examples/izkeys-visual-base.html
					Major improvements.