by Michael S. Kaplan, published on 2007/02/11 23:44 -05:00, original URI: http://blogs.msdn.com/b/michkap/archive/2007/02/11/1657463.aspx
(this post might remind you a bit of this other one)
Balabek asks:
Hi,
I am trying to create a phonetical transliteration from English to Kyrgyz. The Kyrgyz language support exists in Windows XP, but I find the layout quite inconvenient.
I have used the MS Layout Creator 1.4 to create a layout.
I have defined some printable characters as dead keys.
The problems are:
(1) the deadkey is not immediately displayed.
For example, sh combination gives cyrillic letter ш, but s is also mapped to с.
(2) the deadkey character is not always working. For example, sui should be mapped to сү, but su is getting transliterated first to су (because s is defined as deadkey), then i is getting processed. The result is суи.
I have read some of your blogs, and I considered you might be the person who can provide a little guidance.
I understand that using printable characters as deadkeys is strongly advised against, and (1) is not really a problem, rather a platform limitation.
The problem (2) annoys me more.
Is there a way to flush the current deadkey character out, then treat the next incoming character as start of the new character (and possible deadkey for the new character)?
I understand that MS KLC does not support some features, that WDK might have.
Would you recommend me going through WDM keyboard samples to understand its internals?
Also, I read about ligatures. WDK seems to support it.
Though I haven't analyzed how it works, I am assuming it simply replaces several characters with single one that represents them.
Could it be used/manipulated to imitate transliteration? I mean, replacе sh combination to give ш as ligature or so on?
Regards,
Balabek.
Well, there is bad news and worse news here, unfortunately.
The bad news is that there is no way to accomplish a transliteration keyboard using dead keys that will not hit the problems that Balabek ran into. Dead keys cannot act as regular keys; the only way around this is the convention of putting the character it where one would put a space, and even then there is no way to ever produce more than one UTF-16 code value.
The worse news is thst these limitations also exist in the WDK, it is intrinsic to the way that dead keys work on Windows (as I pointed out previously).
Oh, one other problem. As I explained last year in Definitions are context sensitive, when it comes to keyboards, a ligature is multiple UTF-16 code value that come out of a single keystroke, not the other way around. Once again, there really is no mechanism here for a transliteration keyboard to hook into....
This post brought to you by ш (U+0448, a.k.a. CYRILLIC SMALL LETTER SHA)
garymc on 13 Feb 2007 8:26 PM:
Hello there,
Have you looked at a tool called Keyman Developer from Tavultesoft (www.tavultesoft.com)? I think you will find it can do what you require.
Gary
referenced by
2007/03/16 Creating keyboards in C#?