W3C home > Mailing lists > Public > public-webapi@w3.org > September 2007

RE: Key Events internationalization

From: Richard Ishida <ishida@w3.org>
Date: Mon, 17 Sep 2007 17:56:55 +0100
To: "'Bjoern Hoehrmann'" <derhoermi@gmx.net>
Cc: <public-webapi@w3.org>, <public-i18n-core@w3.org>
Message-ID: <00b501c7f94b$c13b9780$6401a8c0@rishida>

Please check my understanding below, and the question that follows:

So, as I understand it, the implementation can interrogate keyboard mapping
tables to find out what functions/characters are associated with a given
physical key at any given time (since keyboard mappings can be changed at
any time).

For keys that are functionally oriented, such as arrow keys, page down, F5,
etc, the implementation can choose an identifier to represent a key from the
list of suggested identifiers such as "Right", "PageDown", "F5", etc.  

Other keys are typically used to input characters, and these are the ones
that typically vary in effect when different keyboard mappings are used for
typing text (eg. Serbian or Dvorak kbds produce different textInput results
for the same physical key).  

For these keys, the implementation, by using the keyboard mapping table, can
detect the characters potentially produced by a given key, and from that set
of characters the implementation can choose one Unicode code point to
represent the key. For example, the key with Q on it on a US keyboard may be
called "U+0051". 

Furthermore, this key is referred to with the same key identifier whether
pressing it produces a textInput result or not - eg. Ctrl+Q won't produce a
textInput result, but the same identifier would be returned by keypress when
the Q key is pressed. 
The same identifier, ie. "U+0051", would also be used to identify that
physical key even if it is pressed in conjunction with, say, the shift key
(which would produce a textInput result that is a totally different

Content authors would then be able to fire actions based on events
associated with the press of a particular key, as long as that key was
associated with a given character in the keyboard mapping tables.  

For example, in the Bloglines beta, pressing the 's' key will advance you to
the next feed. Let's assume that Bloglines looks for a keydown event to
trigger this.

On my US-manufactured physical keyboard, and with a standard US keyboard
mapping in place, that would mean me pressing the key engraved with S. 
However, if I change my mapping to a Dvorak keyboard (but don't change my
web page), I'd need to press the physical key engraved with ;/: to achieve
the same result (that's the key that now produces s/S in typing).  
If I change my keyboard mapping to a Serbian keyboard, I wouldn't be able to
match the keydown to an action at all, because none of the keys on the
keyboard, and therefore none of the key identifiers produced by key presses,
are now associated with the letter S.  (Presumably, I'd need a Serbian
localized version of Bloglines that was expecting Serbian keystrokes to fire

Please let me know whether I'm on the right track above - especially wrt a
single keyIdentifier being produced per physical key.

If the above is all correct, I guess that I have the following initial

I assume that one goal of using key identifiers is to have a standard way of
referring to the press/release of a given key across user agents.  I don't
however see any suggestions for how to choose one among the set of
characters potentially produced by a key.  The guidelines for defining key
identifiers seems to indicate that "U+0051" (LATIN CAPITAL LETTER Q) is a
good choice for the physical key engraved with Q on a US PC/AT keyboard.
U+0051 is the character generated by that key with the shift key pressed on
such a keyboard. But for a key engraved with 1/! the document suggests
"U+0031" (DIGIT ONE) - this being the unshifted result of that key.  

Is there an implicit convention that where no-shift and shift produce
respectively lower and upper case characters in typing from the same key, an
implementation should produce a key identifier associated with the upper
case letter, whereas if there is no upper vs lower case correspondance the
implementation should produce a key identifier that is associated with the
unshifted result when typing text for a given keyboard mapping? (And does
this convention related to uppercase extend to Cyrillic, Armenian and Greek


Richard Ishida
Internationalization Lead
W3C (World Wide Web Consortium)

> -----Original Message-----
> From: Bjoern Hoehrmann [mailto:derhoermi@gmx.net] 
> Sent: 30 August 2007 12:20
> To: Richard Ishida
> Cc: public-webapi@w3.org; public-i18n-core@w3.org
> Subject: Re: Key Events internationalization
> * Richard Ishida wrote:
> >Oh.  So there is a plan to specify those? If so, how would 
> they differ 
> >from the .keyIdentifier, and what is .keyIdentifier for?
> The Working Group resolved to specify them, yes. But so far 
> nobody has been able to come up with a specification, largely 
> because they are not particularily interoperably or 
> meaningfully implemented.
> The .keyIdentifier attribute on KeyboardEvent objects 
> identifies the key associated with the event object. Without 
> a specification for .charCode and .keyCode, I can't really 
> say what the difference is.
> >> Instead the appendix discusses the .keyIdentifier attribute.
> >
> >So were/how does the .keyIdentifier attribute get its information?
> The DOM implementation is responsible for setting the attribute.
> The implementation would get the necessary information from 
> its runtime environment. For a low-level description you 
> might try 
> http://en.wikipedia.org/wiki/Computer_keyboard#How_it_works 
> and 
> http://en.wikipedia.org/wiki/X_Window_core_protocol#Mappings 
> for a higher-level description. I am not sure what you really 
> want to know here.
> --
> Björn Höhrmann · mailto:bjoern@hoehrmann.de · 
> http://bjoern.hoehrmann.de Weinh. Str. 22 · Telefon: 
> +49(0)621/4309674 · http://www.bjoernsworld.de
> 68309 Mannheim · PGP Pub. KeyID: 0xA4357E78 · 
> http://www.websitedev.de/ 
Received on Monday, 17 September 2007 16:54:40 UTC

This archive was generated by hypermail 2.3.1 : Tuesday, 6 January 2015 21:16:24 UTC