2015-04-12 5:06 GMT+02:00 Andrew Cunningham <lang.supp...@gmail.com>: > > Hi Ilya, > > The problem with approach documented below is two fold: > > 1) the characters required do not all exist as precomposed characters thus microsoft's dead key sequences will not work for yoruba.
It's effectively a good catch that MSKLC (version 1.4) cannot produce sequences of characters (just one code point) with dead key sequences or anywhere it its keymap (independantly of the current keyboard state). This is effectively a strong limitation. Dropping that limitation would require updating the parsing format of the *.klc files to accept strings or sequences of codepoints, and also update the internal code of its generated driver so that it can map to a string (that the driver at run time will send with multiple WM_CHAR events) For now, all you can do is to generate a keymap that generates single code points, and map additional keys for the combining characters needed. May be Michael S. Kaplan (author of MSKLC at Microsoft) could review that limitation and propose an upgrade so that MSKLC would really be compliant with the Unicode character encoding policy without forcing users to enter every code point separately and map them separately on their keymaps. Also drivers generated by MSKLC 1.4 do not fully comply with Windows 8 and Windows Server 2012: notably they have serious issues when used with a touche interface (pressing AltGr + one character for example with the onscreen maintains the Altgr state active if we don't type another character WITHOUT the AltGr character; other keyboard states are also mixed, including SHIFT, CAPSLOCK, where they do not match the state for the physical keyboard). The problem being that if you use the onscreen keyboard to locate a character and then type with the physical keyboard, the physical keyboard will continue to use that state (in my opinion it is a bug of Windows 8 and Windows Server 2012, this bug does not exist in Windows 7 when we use the its onscreen keyboard!) Windows 8 nad Windows server 2012 also have TWO separate onscreen keyboards that do not work the same way. Note also that drivers generated by MSKLC 1.4 lack some data need to map correctly with an onscreen geometry (these drivers are only based on "VK_*" virtual key numeric identifiers there's no data in the MSKL drivers to map the virtual keys on a geometric layout, Windows 8 and Windows Server just provide a default mapping of vkeys using some default geometries (but it fact it cannot correctly infer the effective geometry to use, such as the form and placement of the return key, and keys around it). MSKLC does not provide a way to build another geometry and map geometric keys to vkeys (or the revers). --- Note also that (since always), MSKLC generated drivers have never allowed us to change the mapping of scancodes (from hardware keyboards) to virtual keys, aka "vkeys", or to "WM_SYSKEY" (this is hardwired in a lower internal level). These drivers only map sequences of one or more "vkeys" (and a few supported states, it's not possible to add keyboard states other than CTRL, SHIFT, CAPSLOCK, ALTGR2, and custom states for dead keys) to only one WM_CHAR. And it's not possible to change the mapping of vkeys to WM_SYSCHAR (this is also hardwired at a lower level).