MSKLC can't do everything, even in the 1.4 version

by Michael S. Kaplan, published on 2007/02/11 23:44 -05:00, original URI:

(this post might remind you a bit of this other one

Balabek asks:


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?



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 (  I think you will find it can do what you require.


Please consider a donation to keep this archive running, maintained and free of advertising.
Donate €20 or more to receive an offline copy of the whole archive including all images.

referenced by

2007/03/16 Creating keyboards in C#?

go to newer or older post, or back to index or month or day