Hi, Cameron-

CCing i18n folks; for reference, please see:
  http://www.w3.org/2008/webapps/track/issues/23

Cameron McCormack wrote (on 6/29/08 3:47 AM):
Web Applications Working Group Issue Tracker:
In the current draft of Key Identifiers, including the new algorithm
wording, there is a bias toward uppercase characters. Essentially, if
a key is pressed that gives a character codepoint which is lowercase,
for which there is an uppercase equivalent, the uppercase codepoint
(or character) is returned instead. What is the use case here?

The intention of that algorithm (if I remember my intention correctly
when writing it) is to provide guidance for implementors in choosing a
key identifier for a given key.  For example the 'A' key on many
keyboards (like QWERTY) has a primary function (i.e. without modifiers
pressed or locks enabled) of generating an 'a' character.  Given that
keyboards usually have the uppercase character printed on the keys,
using 'A' seemed to be nicer than 'a' as a key identifier.
...
I’ve yet to see a keyboard that has a key for lowercase 'q' and
uppercase 'Q', so I don’t know that it makes sense to have two different
key identifiers for them.  Given the fact that the 'U+0051'-style of key
identifier is awkward, we should choose either 'Q' or 'q' here.

Converting to uppercase strikes me as needless legacy from
keyCode/charCode. Is there some pragmatic reason to force this
casting?

These strings are meant to represent keys, rather than characters of
input.

A reasonable argument, but I would counter that the keys are simply mislabeled, because of long-ago imprecision on typewriters that we need not perpetuate. The identity of the key is not what is printed on the keycap, but what the operating system thinks the key is, at the time that the key is pressed.

When I hit the key labeled "1" on my keyboard with no modifiers, it generated the character "1" (intuitive enough); with the "shift" modifier, it generates the character "!". Both of those characters are printed on the key, as it happens: "1|!"; the key identifiers set naturally includes both characters. By contrast, when I hit the key labeled "Q" on my keyboard with no modifiers, it generates the character "q", and only generates the character "Q" when it is modified with "shift" or "capslock". So, really, the label should read "q|Q", and we should provide key identifiers for both upper- and lower-case characters.

Further, when a QWERTY keyboard is remapped to a Dvorak layout, but the labels on the keys remain unchanged, a typist would expect that hitting the key labeled "Q" would result in an apostrophe... they would expect the same behavior if they had bothered switching the keycaps, as well as remapping. If they were asked to type "Q" or "q", they would naturally hit the key that, on my keyboard, is labeled "X". The same goes for any remapping, such as when an US keyboard is repurposed to some other alphabet.

We've already determined that we can not and should not identify a key by keyboard layout, i.e. the physical position of the keys; the same applies to what is printed on the keycap, even more so.

If the Director deems it necessary, in the course of Rec-track transition, for DOM3 Events to represent only the values that are printed on the keycap, I will take an action to go door-to-door and manually correct each keyboard (by force if necessary). I am aware that this may take some time (even weeks, perhaps), but I believe that that would be a more logical and pragmatic approach than for DOM3 Events to munge all Latinate characters into the uppercase. We all know that typing in all caps is rude, and forcing all keyboard events to SHOUT would degrade the bounds of polite society.

Regards-
-Doug Schepers
W3C Team Contact, WebApps, SVG, and CDF

Reply via email to