added 'locale' attribute to KeyboardEvent, CompositionEvent, and TextEvent. Added normative ref to BCP-47. Added key and char to initKeyboardEvent. Removed normative keyCode, will add as informative appendix. Changed null to 0 or empty string as appropriate to data type. More formatting and annotation on key values table
authorschepers
Fri, 24 Dec 2010 06:19:13 +0900
changeset 276 a996b0432ab1
parent 275 3fc236186fef
child 277 298f457a656c
added 'locale' attribute to KeyboardEvent, CompositionEvent, and TextEvent. Added normative ref to BCP-47. Added key and char to initKeyboardEvent. Removed normative keyCode, will add as informative appendix. Changed null to 0 or empty string as appropriate to data type. More formatting and annotation on key values table
html/DOM3-Events.html
--- a/html/DOM3-Events.html	Thu Dec 09 01:55:53 2010 +0900
+++ b/html/DOM3-Events.html	Fri Dec 24 06:19:13 2010 +0900
@@ -25,16 +25,16 @@
       </p>
       <h1 id="Overview-title">Document Object Model (DOM) Level 3 Events Specification</h1>
 <!-- @@@ -->
-      <h2 id="Overview-W3C-doctype">W3C Editor's Draft <time datetime="2010-10-06">8 December 2010</time></h2>
+      <h2 id="Overview-W3C-doctype">W3C Editor's Draft <time datetime="2010-12-23">23 December 2010</time></h2>
       <dl>
         <dt>This version:</dt>
-        <dd><a href="http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html?rev=1.149">http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html?rev=1.149</a></dd>
+        <dd><a href="http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html?rev=1.150">http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html?rev=1.150</a></dd>
 
         <dt>Latest stable version:</dt>
         <dd><a href="http://www.w3.org/TR/DOM-Level-3-Events">http://www.w3.org/TR/DOM-Level-3-Events</a></dd>
 
         <dt>Previous version:</dt>
-        <dd><a href="http://dev.w3.org/cvsweb/~checkout~/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html?rev=1.148">http://dev.w3.org/cvsweb/~checkout~/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html?rev=1.148</a></dd>
+        <dd><a href="http://dev.w3.org/cvsweb/~checkout~/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html?rev=1.149">http://dev.w3.org/cvsweb/~checkout~/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html?rev=1.149</a></dd>
 
         <dt>Editor's Draft:</dt>
         <dd><a href="http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html">http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html</a></dd>
@@ -2978,7 +2978,7 @@
                     <li><a href="#events-MouseEvent-ctrlKey"><code class="attribute-name">MouseEvent.ctrlKey</code></a>:  <code>true</code> if <a href="#key-Control"><code class="value keyname">'Control'</code></a> key is depressed, otherwise <code>false</code></li>
                     <li><a href="#events-MouseEvent-shiftKey"><code class="attribute-name">MouseEvent.shiftKey</code></a>:  <code>true</code> if <a href="#key-Shift"><code class="value keyname">'Shift'</code></a> key is depressed, otherwise <code>false</code></li>
                     <li><a href="#events-MouseEvent-metaKey"><code class="attribute-name">MouseEvent.metaKey</code></a>:  <code>true</code> if <a href="#key-Meta"><code class="value keyname">'Meta'</code></a> key is depressed, otherwise <code>false</code></li>
-                    <li><a href="#events-MouseEvent-button"><code class="attribute-name">MouseEvent.button</code></a>: <code>null</code></li>
+                    <li><a href="#events-MouseEvent-button"><code class="attribute-name">MouseEvent.button</code></a>: <code>0</code></li>
                     <li><a href="#events-MouseEvent-buttons"><code class="attribute-name">MouseEvent.buttons</code></a>: value based on all buttons current depressed, <code>0</code> if no buttons pressed</li>
                     <li><a href="#events-MouseEvent-relatedTarget"><code class="attribute-name">MouseEvent.relatedTarget</code></a>: indicates the <a class="def" href="#glossary-event-target">event target</a> a pointing device is exiting, if any.</li>
                   </ul>
@@ -3020,7 +3020,7 @@
                     <li><a href="#events-MouseEvent-ctrlKey"><code class="attribute-name">MouseEvent.ctrlKey</code></a>:  <code>true</code> if <a href="#key-Control"><code class="value keyname">'Control'</code></a> key is depressed, otherwise <code>false</code></li>
                     <li><a href="#events-MouseEvent-shiftKey"><code class="attribute-name">MouseEvent.shiftKey</code></a>:  <code>true</code> if <a href="#key-Shift"><code class="value keyname">'Shift'</code></a> key is depressed, otherwise <code>false</code></li>
                     <li><a href="#events-MouseEvent-metaKey"><code class="attribute-name">MouseEvent.metaKey</code></a>:  <code>true</code> if <a href="#key-Meta"><code class="value keyname">'Meta'</code></a> key is depressed, otherwise <code>false</code></li>
-                    <li><a href="#events-MouseEvent-button"><code class="attribute-name">MouseEvent.button</code></a>: <code>null</code></li>
+                    <li><a href="#events-MouseEvent-button"><code class="attribute-name">MouseEvent.button</code></a>: <code>0</code></li>
                     <li><a href="#events-MouseEvent-buttons"><code class="attribute-name">MouseEvent.buttons</code></a>: value based on all buttons current depressed, <code>0</code> if no buttons pressed</li>
                     <li><a href="#events-MouseEvent-relatedTarget"><code class="attribute-name">MouseEvent.relatedTarget</code></a>: indicates the <a class="def" href="#glossary-event-target">event target</a> a pointing device is entering, if any.</li>
                   </ul>
@@ -3062,7 +3062,7 @@
                     <li><a href="#events-MouseEvent-ctrlKey"><code class="attribute-name">MouseEvent.ctrlKey</code></a>:  <code>true</code> if <a href="#key-Control"><code class="value keyname">'Control'</code></a> key is depressed, otherwise <code>false</code></li>
                     <li><a href="#events-MouseEvent-shiftKey"><code class="attribute-name">MouseEvent.shiftKey</code></a>:  <code>true</code> if <a href="#key-Shift"><code class="value keyname">'Shift'</code></a> key is depressed, otherwise <code>false</code></li>
                     <li><a href="#events-MouseEvent-metaKey"><code class="attribute-name">MouseEvent.metaKey</code></a>:  <code>true</code> if <a href="#key-Meta"><code class="value keyname">'Meta'</code></a> key is depressed, otherwise <code>false</code></li>
-                    <li><a href="#events-MouseEvent-button"><code class="attribute-name">MouseEvent.button</code></a>: <code>null</code></li>
+                    <li><a href="#events-MouseEvent-button"><code class="attribute-name">MouseEvent.button</code></a>: <code>0</code></li>
                     <li><a href="#events-MouseEvent-buttons"><code class="attribute-name">MouseEvent.buttons</code></a>: value based on all buttons current depressed, <code>0</code> if no buttons pressed</li>
                     <li><a href="#events-MouseEvent-relatedTarget"><code class="attribute-name">MouseEvent.relatedTarget</code></a>: <code>null</code></li>
                   </ul>
@@ -3103,7 +3103,7 @@
                     <li><a href="#events-MouseEvent-ctrlKey"><code class="attribute-name">MouseEvent.ctrlKey</code></a>:  <code>true</code> if <a href="#key-Control"><code class="value keyname">'Control'</code></a> key is depressed, otherwise <code>false</code></li>
                     <li><a href="#events-MouseEvent-shiftKey"><code class="attribute-name">MouseEvent.shiftKey</code></a>:  <code>true</code> if <a href="#key-Shift"><code class="value keyname">'Shift'</code></a> key is depressed, otherwise <code>false</code></li>
                     <li><a href="#events-MouseEvent-metaKey"><code class="attribute-name">MouseEvent.metaKey</code></a>:  <code>true</code> if <a href="#key-Meta"><code class="value keyname">'Meta'</code></a> key is depressed, otherwise <code>false</code></li>
-                    <li><a href="#events-MouseEvent-button"><code class="attribute-name">MouseEvent.button</code></a>: <code>null</code></li>
+                    <li><a href="#events-MouseEvent-button"><code class="attribute-name">MouseEvent.button</code></a>: <code>0</code></li>
                     <li><a href="#events-MouseEvent-buttons"><code class="attribute-name">MouseEvent.buttons</code></a>: value based on all buttons current depressed, <code>0</code> if no buttons pressed</li>
                     <li><a href="#events-MouseEvent-relatedTarget"><code class="attribute-name">MouseEvent.relatedTarget</code></a>:  indicates the <a class="def" href="#glossary-event-target">event target</a> a pointing device is entering, if any.</li>
                   </ul>
@@ -3146,7 +3146,7 @@
                       <li><a href="#events-MouseEvent-ctrlKey"><code class="attribute-name">MouseEvent.ctrlKey</code></a>:  <code>true</code> if <a href="#key-Control"><code class="value keyname">'Control'</code></a> key is depressed, otherwise <code>false</code></li>
                       <li><a href="#events-MouseEvent-shiftKey"><code class="attribute-name">MouseEvent.shiftKey</code></a>:  <code>true</code> if <a href="#key-Shift"><code class="value keyname">'Shift'</code></a> key is depressed, otherwise <code>false</code></li>
                       <li><a href="#events-MouseEvent-metaKey"><code class="attribute-name">MouseEvent.metaKey</code></a>:  <code>true</code> if <a href="#key-Meta"><code class="value keyname">'Meta'</code></a> key is depressed, otherwise <code>false</code></li>
-                      <li><a href="#events-MouseEvent-button"><code class="attribute-name">MouseEvent.button</code></a>: <code>null</code></li>
+                      <li><a href="#events-MouseEvent-button"><code class="attribute-name">MouseEvent.button</code></a>: <code>0</code></li>
                       <li><a href="#events-MouseEvent-buttons"><code class="attribute-name">MouseEvent.buttons</code></a>: value based on all buttons current depressed, <code>0</code> if no buttons pressed</li>
                       <li><a href="#events-MouseEvent-relatedTarget"><code class="attribute-name">MouseEvent.relatedTarget</code></a>:  indicates the <a class="def" href="#glossary-event-target">event target</a> a pointing device is exiting, if any.</li>
                     </ul>
@@ -3390,10 +3390,10 @@
                     <li><a href="#events-event-type-target"><code class="attribute-name">Event.target</code></a>: <a class="def" href="#glossary-topmost-event-target">topmost event target</a></li>
                     <li><a href="#events-UIEvent-view"><code class="attribute-name">UIEvent.view</code></a>: <a class="def" href="#glossary-defaultView"><code class="attribute-value">defaultView</code></a></li>
                     <li><a href="#events-UIEvent-detail"><code class="attribute-name">UIEvent.detail</code></a>: <code>0</code></li>
-                    <li><a href="#events-MouseEvent-screenX"><code class="attribute-name">MouseEvent.screenX</code></a>: if the wheel is associated with a pointing device, the value based on the pointer position on the screen, otherwise <code>null</code></li>
-                    <li><a href="#events-MouseEvent-screenY"><code class="attribute-name">MouseEvent.screenY</code></a>: if the wheel is associated with a pointing device, the value based on the pointer position on the screen, otherwise <code>null</code></li>
-                    <li><a href="#events-MouseEvent-clientX"><code class="attribute-name">MouseEvent.clientX</code></a>: if the wheel is associated with a pointing device, the value based on the pointer position within the viewport, otherwise <code>null</code></li>
-                    <li><a href="#events-MouseEvent-clientY"><code class="attribute-name">MouseEvent.clientY </code></a>: if the wheel is associated with a pointing device, the value based on the pointer position within the viewport, otherwise <code>null</code></li>
+                    <li><a href="#events-MouseEvent-screenX"><code class="attribute-name">MouseEvent.screenX</code></a>: if the wheel is associated with a pointing device, the value based on the pointer position on the screen, otherwise <code>0</code></li>
+                    <li><a href="#events-MouseEvent-screenY"><code class="attribute-name">MouseEvent.screenY</code></a>: if the wheel is associated with a pointing device, the value based on the pointer position on the screen, otherwise <code>0</code></li>
+                    <li><a href="#events-MouseEvent-clientX"><code class="attribute-name">MouseEvent.clientX</code></a>: if the wheel is associated with a pointing device, the value based on the pointer position within the viewport, otherwise <code>0</code></li>
+                    <li><a href="#events-MouseEvent-clientY"><code class="attribute-name">MouseEvent.clientY </code></a>: if the wheel is associated with a pointing device, the value based on the pointer position within the viewport, otherwise <code>0</code></li>
                     <li><a href="#events-MouseEvent-altKey"><code class="attribute-name">MouseEvent.altKey</code></a>: <code>true</code> if <a href="#key-Alt"><code class="value keyname">'Alt'</code></a> key is depressed, otherwise <code>false</code></li>
                     <li><a href="#events-MouseEvent-ctrlKey"><code class="attribute-name">MouseEvent.ctrlKey</code></a>:  <code>true</code> if <a href="#key-Control"><code class="value keyname">'Control'</code></a> key is depressed, otherwise <code>false</code></li>
                     <li><a href="#events-MouseEvent-shiftKey"><code class="attribute-name">MouseEvent.shiftKey</code></a>:  <code>true</code> if <a href="#key-Shift"><code class="value keyname">'Shift'</code></a> key is depressed, otherwise <code>false</code></li>
@@ -3483,12 +3483,14 @@
 
   readonly attribute DOMString       <a href="#events-TextEvent-data">data</a>;
   readonly attribute unsigned long   <a href="#events-TextEvent-inputMethod">inputMethod</a>;  
+  readonly attribute DOMString       <a href="#events-TextEvent-locale">locale</a>;
   void                               <a href="#events-event-type-initTextEvent">initTextEvent</a>(in DOMString typeArg, 
                                                    in boolean canBubbleArg, 
                                                    in boolean cancelableArg, 
                                                    in views::AbstractView viewArg, 
                                                    in DOMString dataArg, 
-                                                   in unsigned long inputMethod);
+                                                   in unsigned long inputMethod, 
+                                                   in DOMString localeArg);
 };
                 </code></pre>
               </dd>
@@ -3546,6 +3548,12 @@
                   <dt><code class="attribute-name"><a id="events-TextEvent-inputMethod">inputMethod</a></code> of type <code>unsigned long</code>, readonly</dt>
                   <dd><p>The <code>inputMethod</code> attribute contains an indication of the origin of the text input, as described in <a href="#events-ID-TextEvent-InputMethodCode">InputMethodCode</a>.</p></dd>
 
+                  <dt><code class="attribute-name"><a id="events-TextEvent-locale">locale</a></code> of type <code>DOMString</code>, readonly</dt>
+                  <dd>
+                    <p>The <code>locale</code> attribute contains a BCP-47 tag [<a href="#ref-BCP-47">BCP-47</a>] indicating the locale for which the origin of the event (whether keyboard, IME, handwriting recognition software, or other input mode) is configured, e.g. "en-US". May be the <a class="def" href="#glossary-empty-string">empty string</a> when inapplicable or unknown, e.g. for pasted text, or when this information is not exposed by the underlying platform.</p>
+                    <p class="note" id="note_TextEvent-locale"><strong>Note:</strong> <code>locale</code> does not necessarily indicate the locale of the data or the context in which it is being entered.  For example, a French user often may not switch to an English keyboard setting when typing English, in which case the <code>locale</code> will still indicate French, even though the data is actually English.</p>
+                  </dd>
+
                 </dl>
               </dd>
 
@@ -3662,25 +3670,28 @@
 
   readonly attribute DOMString       <a href="#events-KeyboardEvent-char">char</a>;
   readonly attribute DOMString       <a href="#events-KeyboardEvent-key">key</a>;
-  readonly attribute unsigned long   <a href="#events-KeyboardEvent-keyCode">keyCode</a>;
   readonly attribute unsigned long   <a href="#events-KeyboardEvent-location">location</a>;
   readonly attribute boolean         <a href="#events-KeyboardEvent-ctrlKey">ctrlKey</a>;
   readonly attribute boolean         <a href="#events-KeyboardEvent-shiftKey">shiftKey</a>;
   readonly attribute boolean         <a href="#events-KeyboardEvent-altKey">altKey</a>;
   readonly attribute boolean         <a href="#events-KeyboardEvent-metaKey">metaKey</a>;
   readonly attribute boolean         <a href="#events-KeyboardEvent-repeat">repeat</a>;
+  readonly attribute DOMString       <a href="#events-KeyboardEvent-locale">locale</a>;
   boolean                            <a href="#events-KeyboardEvent-getModifierState">getModifierState</a>(in DOMString keyArg);
   void                               <a href="#events-KeyboardEvent-initKeyboardEvent">initKeyboardEvent</a>(in DOMString typeArg, 
                                                        in boolean canBubbleArg, 
                                                        in boolean cancelableArg, 
                                                        in views::AbstractView viewArg, 
+                                                       in DOMString charArg, 
                                                        in DOMString keyArg, 
                                                        in unsigned long locationArg, 
                                                        in DOMString modifiersListArg,
-                                                       in boolean repeat);
+                                                       in boolean repeat,
+                                                       in DOMString localeArg); 
 };
                 </code></pre>
               </dd>
+              <!-- readonly attribute unsigned long   <a href="#events-KeyboardEvent-keyCode">keyCode</a>; -->
 
               <dt>
                 <strong>Definition group <em><a id="events-ID-KeyboardEvent-KeyLocationCode">KeyLocationCode</a></em></strong>
@@ -3725,17 +3736,18 @@
                   <dd><p><code>true</code> if the control (Ctrl) key modifier is activated.</p></dd>
 
                   <dt><code class="attribute-name"><a id="events-KeyboardEvent-char">char</a></code> of type <code>DOMString</code>, readonly</dt>
-                  <dd><p><code>char</code> holds the character value of the key pressed.  The value must be a Unicode character string, conforming to the <a href="#key-algorithm">algorithm for determining the key value</a> defined in this specification.  For a key associated with a macro to insert multiple characters, the value of the <code>char</code> attribute will hold the entire sequence of characters.  For a key which does not have a character representation, the value must be <code>null</code>.</p>
+                  <dd><p><code>char</code> holds the character value of the key pressed.  The value must be a Unicode character string, conforming to the <a href="#key-algorithm">algorithm for determining the key value</a> defined in this specification.  For a key associated with a macro to insert multiple characters, the value of the <code>char</code> attribute will hold the entire sequence of characters.  For a key which does not have a character representation, the value must be the <a class="def" href="#glossary-empty-string">empty string</a>.</p>
                     <p class="note" id="note-char-charCode"><strong>Note:</strong> the <code>char</code> attribute is not related to the legacy <code>charCode</code> attribute and does not have the same set of values.</p>
                   </dd>
 
                   <dt><code class="attribute-name"><a id="events-KeyboardEvent-key">key</a></code> of type <code>DOMString</code>, readonly</dt>
                   <dd><p><code>key</code> holds the key value of the key pressed.  If the value is a character, it must match the value of the <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a> attribute; if the value is a control key which has no printed representation, it must be one of the key values defined in the <a href="#keys-keyvalues">key values set</a>, as determined by the <a href="#key-algorithm">algorithm for determining the key value</a>. Implementations that are unable to identify a key must use the key value <code class="value">'Unidentified'</code>.</p>
-                    <p class="note" id="note-key-keyCode"><strong>Note:</strong> the <code>key</code> attribute is not related to the legacy <a href="#events-KeyboardEvent-keyCode"><code>KeyboardEvent.keyCode</code></a> attribute and does not have the same set of values.</p>
+                    <p class="note" id="note-key-keyCode"><strong>Note:</strong> the <code>key</code> attribute is not related to the legacy <code>charCode</code> attribute and does not have the same set of values.</p>
+                    <!-- <p class="note" id="note-key-keyCode"><strong>Note:</strong> the <code>key</code> attribute is not related to the legacy <a href="#events-KeyboardEvent-keyCode"><code>KeyboardEvent.keyCode</code></a> attribute and does not have the same set of values.</p> -->
                    </dd>
 
-                  <dt><code class="attribute-name"><a id="events-KeyboardEvent-keyCode">keyCode</a></code> of type <code>unsigned long</code>, readonly</dt>
-                  <dd><p><code>keyCode</code> holds a system- and implementation-dependent numerical code signifying the unmodified identifier associated with the key pressed.  Unlike the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> or <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a> attributes, the set of possible values are not defined in this specification; typically, these value of the <em>keyCode</em> should represent the decimal codepoint in ASCII [<a href="#ref-rfc20">RFC20</a>][<a href="#ref-US-ASCII">US-ASCII</a>] or Windows 1252 [<a href="#ref-WIN1252">WIN1252</a>], but may be drawn from a different appropriate character set.  Implementations that are unable to identify a key must use the key value <code class="value">0</code>.</p></dd>
+                  <!-- <dt><code class="attribute-name"><a id="events-KeyboardEvent-keyCode">keyCode</a></code> of type <code>unsigned long</code>, readonly</dt>
+                  <dd><p><code>keyCode</code> holds a system- and implementation-dependent numerical code signifying the unmodified identifier associated with the key pressed.  Unlike the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> or <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a> attributes, the set of possible values are not defined in this specification; typically, these value of the <em>keyCode</em> should represent the decimal codepoint in ASCII [<a href="#ref-rfc20">RFC20</a>][<a href="#ref-US-ASCII">US-ASCII</a>] or Windows 1252 [<a href="#ref-WIN1252">WIN1252</a>], but may be drawn from a different appropriate character set.  Implementations that are unable to identify a key must use the key value <code class="value">0</code>.</p></dd> -->
 
                   <dt><code class="attribute-name"><a id="events-KeyboardEvent-location">location</a></code> of type <code>unsigned long</code>, readonly</dt>
                   <dd><p>The <code>location</code> attribute contains an indication of the location of the key on the device, as described in <a href="#events-ID-KeyboardEvent-KeyLocationCode">Keyboard event types</a>.</p></dd>
@@ -3751,6 +3763,12 @@
                   <dt><code class="attribute-name"><a id="events-KeyboardEvent-repeat">repeat</a></code> of type <code>boolean</code>, readonly</dt>
                   <dd><code>true</code> if the key has been pressed in a sustained manner.  Depending on the system configuration, holding down a key results may result in multiple consecutive <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> events, <a class="eventtype" href="#event-type-keypress"><code>keypress</code></a> events, and <a class="eventtype" href="#event-type-textinput"><code>textinput</code></a> events, for appropriate keys.   For mobile devices which have <em>long-key-press</em> behavior, the first key event with a <a href="#events-KeyboardEvent-repeat">repeat</a> attribute value of <code>'true'</code> shall serve as an indication of a <em>long-key-press</em>.  The length of time that the key must be pressed in order to begin repeating is configuration-dependent.</dd>
 
+                  <dt><code class="attribute-name"><a id="events-KeyboardEvent-locale">locale</a></code> of type <code>DOMString</code>, readonly</dt>
+                  <dd>
+                    <p>The <code>locale</code> attribute contains a BCP-47 tag [<a href="#ref-BCP-47">BCP-47</a>] indicating the locale for which the origin of the event (whether keyboard, IME, handwriting recognition software, or other input mode) is configured, e.g. "en-US". May be the <a class="def" href="#glossary-empty-string">empty string</a> when inapplicable or unknown, e.g. for pasted text, or when this information is not exposed by the underlying platform.</p>
+                    <p class="note" id="note_KeyboardEvent-locale"><strong>Note:</strong> <code>locale</code> does not necessarily indicate the locale of the data or the context in which it is being entered.  For example, a French user often may not switch to an English keyboard setting when typing English, in which case the <code>locale</code> will still indicate French.  Nor can it be used to definitively calculate the "physical" or "virtual" key associated with the event, or the character printed on that key.</p>
+                  </dd>
+
                 </dl>
               </dd>
 
@@ -4051,11 +4069,13 @@
 // Introduced in DOM Level 3:
 interface <a href="#events-CompositionEvent">CompositionEvent</a> : <a href="#events-UIEvent">UIEvent</a> {
   readonly attribute DOMString       <a href="#events-CompositionEvent-data">data</a>;
+  readonly attribute DOMString       <a href="#events-CompositionEvent-locale">locale</a>;
   void                               <a href="#events-event-type-initCompositionEvent">initCompositionEvent</a>(in DOMString typeArg, 
                                                           in boolean canBubbleArg, 
                                                           in boolean cancelableArg, 
                                                           in views::AbstractView viewArg, 
-                                                          in DOMString dataArg);
+                                                          in DOMString dataArg,
+                                                          in DOMString localeArg);
 };
                 </code></pre>
               </dd>
@@ -4066,6 +4086,12 @@
                   <dt><code class="attribute-name"><a id="events-CompositionEvent-data">data</a></code> of type <code>DOMString</code>, readonly</dt>
                   <dd><p><code>data</code> holds the value of the characters generated by an input method. This may be a single Unicode character or a non-empty sequence of Unicode characters [<cite><a class="normative" href="#references-Unicode">Unicode</a></cite>]. Characters should be normalized as defined by the Unicode normalization form <em>NFC</em>, defined in [<cite><a class="normative" href="#references-UnicodeNormalization">UAX #15</a></cite>]. This attribute may be null or contain the <a class="def" href="#glossary-empty-string">empty string</a>.</p></dd>
 
+                  <dt><code class="attribute-name"><a id="events-CompositionEvent-locale">locale</a></code> of type <code>DOMString</code>, readonly</dt>
+                  <dd>
+                    <p>The <code>locale</code> attribute contains a BCP-47 tag [<a href="#ref-BCP-47">BCP-47</a>] indicating the locale for which the origin of the event (whether keyboard, IME, handwriting recognition software, or other input mode) is configured, e.g. "en-US". May be the <a class="def" href="#glossary-empty-string">empty string</a> when inapplicable or unknown, e.g. for pasted text, or when this information is not exposed by the underlying platform or application.</p>
+                    <p class="note" id="note_CompositionEvent-locale"><strong>Note:</strong> <code>locale</code> does not necessarily indicate the locale of the data or the context in which it is being entered.  For example, a French user often may not switch to an English keyboard setting when typing English, in which case the <code>locale</code> will still indicate French, even though the data is actually English.  Similarly, an IME application may not distinguish between the locale of Chinese and Kanji characters.</p>
+                  </dd>
+
                 </dl>
               </dd>
 
@@ -4192,7 +4218,7 @@
                   </td>
                 </tr>
               </table>
-              <p>A <a class="def" href="#glossary-user-agent">user agent</a> should dispatch this event when a <a class="def" href="#glossary-text-composition-system">text composition system</a> updates its active text passage with a new character, which is added to the string in <a href="#events-CompositionEvent-data"><code>CompositionEvent.data</code></a>.  Note that some <a class="def" href="#glossary-text-composition-system">text composition systems</a> may not expose this information to the DOM, in which case this event will not fire during the composition process.  If the composition session is canceled, this event will be fired immediately before the <a class="eventtype" href="#event-type-compositionend"><code>compositionend</code></a> event, and the <a href="#events-CompositionEvent-data"><code>CompositionEvent.data</code></a> attribute will be set to <code>null</code>.</p>
+              <p>A <a class="def" href="#glossary-user-agent">user agent</a> should dispatch this event when a <a class="def" href="#glossary-text-composition-system">text composition system</a> updates its active text passage with a new character, which is added to the string in <a href="#events-CompositionEvent-data"><code>CompositionEvent.data</code></a>.  Note that some <a class="def" href="#glossary-text-composition-system">text composition systems</a> may not expose this information to the DOM, in which case this event will not fire during the composition process.  If the composition session is canceled, this event will be fired immediately before the <a class="eventtype" href="#event-type-compositionend"><code>compositionend</code></a> event, and the <a href="#events-CompositionEvent-data"><code>CompositionEvent.data</code></a> attribute will be set to the <a class="def" href="#glossary-empty-string">empty string</a>.</p>
             </dd>
           </dl>
         </div>
@@ -4720,7 +4746,7 @@
                             <dd><p>Refer to the <a href="#events-event-type-initMutationEvent"><code>MutationEvent.initMutationEvent()</code></a> method for a description of this parameter.</p></dd>
                             
                             <dt><code class="parameter-name">prevNamespaceURIArg</code> of type <code>DOMString</code></dt>
-                            <dd><p>Specifies <a href="#events-MutationNameEvent-prevNamespaceURI"><code>MutationNameEvent.prevNamespaceURI</code></a>. This value may be <code>null</code>.</p></dd>
+                            <dd><p>Specifies <a href="#events-MutationNameEvent-prevNamespaceURI"><code>MutationNameEvent.prevNamespaceURI</code></a>. This value may be the <a class="def" href="#glossary-empty-string">empty string</a>.</p></dd>
                             
                             <dt><code class="parameter-name">prevNodeNameArg</code> of type <code>DOMString</code></dt>
                             <dd><p>Specifies <a href="#events-MutationNameEvent-prevNodeName"><code>MutationNameEvent.prevNodeName</code></a>.</p></dd>
@@ -4937,7 +4963,7 @@
         <p>It is important to note that a key value does not indicate a specific key on the physical keyboard, nor does it reflect the character printed on the key; a key value indicates the current value of the event with consideration to the current state of all active keys and key input modes (including shift modes and <a class="def" href="#glossary-dead-key">dead keys</a>), as reflected in the operating-system mapping of the keyboard and reported to the implementation.  In other words, the key value for the key marked <code>'O'</code> on a <a class="def" href="#glossary-qwerty">QWERTY</a> keyboard has the key value <code>'o'</code> in an unshifted state, <code>'O'</code> in a shifted state, <code>'&#xF6;'</code> in an unshifted state during a dead-key operation to add an umlaut diacritic, and <code>'&#xD6;'</code> in a shifted state during a dead-key operation to add an umlaut diacritic.  Because a user may map their keyboard to an arbitrary custom configuration, the content author should not assume that a relationship exists between the shifted and unshifted states of a key and the majuscule form (uppercase or capital letters) and minuscule form (lowercase or small letters) of a character representation, but should instead use the value of the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> or <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a> attributes.  The keyboard depicted in <a href="#figure-keyboard">Figure 3</a> illustrates one possible set of <a class="def" href="#glossary-key-mapping">key mappings</a> on one possible keyboard layout; many others exist, both standard and idiosyncratic.</p>
         <p>It is also important to note that there is not a one-to-one relationship between key event states and key values.  A particular key value may be associated with multiple keys; for example, many standard keyboards contain more than one key with the <code class="value">'Shift'</code> key value (normally distinguished by the <a href="#events-KeyboardEvent-location"><code>KeyboardEvent.location</code></a> values <a href="#events-DOM_KEY_LOCATION_LEFT"><code class="constant-name">DOM_KEY_LOCATION_LEFT</code></a> and <a href="#events-DOM_KEY_LOCATION_RIGHT"><code class="constant-name">DOM_KEY_LOCATION_RIGHT</code></a>) or <code class="value">'8'</code> key value (normally distinguished by the <a href="#events-KeyboardEvent-location"><code>KeyboardEvent.location</code></a> values <a href="#events-DOM_KEY_LOCATION_STANDARD"><code class="constant-name">DOM_KEY_LOCATION_STANDARD</code></a> and <a href="#events-DOM_KEY_LOCATION_NUMPAD"><code class="constant-name">DOM_KEY_LOCATION_NUMPAD</code></a>), and user-configured custom keyboard layouts may duplicate any key value in multiple key-state scenarios (note that <a href="#events-KeyboardEvent-location"><code>KeyboardEvent.location</code></a> is intended for standard keyboard layouts, and cannot always indicate a meaningful distinction).</p>
 
-        <p>Similarly, a given key event state may have different key values.  For most keys which represent characters, such as the letter <code>'m'</code> or the question mark (<code>'?'</code>), the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> and <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a> attributes will be the same.  However, for <em>printing control characters</em>, such as the backspace/back key, the <em>character value</em> is distinct from the <em>key value</em>, with different values for the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> and <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a> attributes; see the <a href="#key-values">Key Values Set</a> for more details.  Certain keys in some states, called <em>modifier keys</em> or <em>control keys</em>, have only a <a class="def" href="#glossary-key-value">key value</a> and no <a class="def" href="#glossary-character-value">character value</a>, such as the volume mute key, which has the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> attribute value <code class="value">'VolumeMute'</code> and the <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a> attribute value <code>null</code>.</p>
+        <p>Similarly, a given key event state may have different key values.  For most keys which represent characters, such as the letter <code>'m'</code> or the question mark (<code>'?'</code>), the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> and <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a> attributes will be the same.  However, for <em>printing control characters</em>, such as the backspace/back key, the <em>character value</em> is distinct from the <em>key value</em>, with different values for the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> and <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a> attributes; see the <a href="#key-values">Key Values Set</a> for more details.  Certain keys in some states, called <em>modifier keys</em> or <em>control keys</em>, have only a <a class="def" href="#glossary-key-value">key value</a> and no <a class="def" href="#glossary-character-value">character value</a>, such as the volume mute key, which has the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> attribute value <code class="value">'VolumeMute'</code> and the <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a> attribute value the <a class="def" href="#glossary-empty-string">empty string</a>.</p>
         
         <p>Finally, the meaning of any given character representation is context-dependent and complex.  For example, in some contexts, the asterisk (star) glyph (<code class="value">'*'</code>) represents a footnote or emphasis (when bracketing a passage of text); however, in some documents or executable programs it is equivalent to the mathematical multiplication operation, while in other documents or executable programs, that function is reserved for the multiplication symbol (<code class="value">'&#xD7;'</code>, Unicode value <code class="value">U+00D7</code>) or the Latin small letter <code class="value">'x'</code> (due to the lack of a multiplication key on many keyboards and the superficial resemblance of the glyphs <code class="value">'&#xD7;'</code> and <code class="value">'x'</code>).  Thus, the semantic meaning or function of character representations is outside the scope of this specification.</p>
         
@@ -5216,7 +5242,7 @@
     					  <li>If there exists an appropriate key value in the <a href="#keys-keyvalues">key values set</a>, then:
                   <ol class="algo">
     					      <li>the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> attribute must be a string consisting of the <em>key value</em> of that character; and</li>
-    					      <li>the <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a> attribute must be <code>null</code>.</li>
+    					      <li>the <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a> attribute must be the <a class="def" href="#glossary-empty-string">empty string</a>.</li>
     					    </ol>
                 </li>
 
@@ -5287,921 +5313,937 @@
                 <th>Key</th>
                 <th>Char</th>
                 <th>Typical Usage</th>
+                <th>Category</th>
               </tr>
 
               <tr>
                 <td><a id="key-Accept"><code class="value keyname">'Accept'</code></a></td>
                 <td> - </td>
-                <td>The Accept (Commit, OK) key.</td>
-              </tr>
-
+                <td>The Accept (Commit, OK) key.</th>
+                <td class="category"> </td>
+              </tr>
               <tr>
                 <td><a id="key-Add"><code class="value keyname">'Add'</code></a></td>
                 <td> - </td>
-                <td>The Add key.</td>
-              </tr>
-
+                <td>The Add key.</th>
+                <td class="category"> </td>
+              </tr>
               <tr>
                 <td><a id="key-Again"><code class="value keyname">'Again'</code></a></td>
                 <td> - </td>
-                <td>The Again key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-AllCandidates"><code class="value keyname">'AllCandidates'</code></a></td>
-                <td> - </td>
-                <td>The All Candidates key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Alphanumeric"><code class="value keyname">'Alphanumeric'</code></a></td>
-                <td> - </td>
-                <td>The Alphanumeric key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Alt"><code class="value keyname">'Alt'</code></a></td>
-                <td> - </td>
-                <td>The Alt (Menu) key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-AltGraph"><code class="value keyname">'AltGraph'</code></a></td>
-                <td> - </td>
-                <td>The Alt-Graph key.</td>
-              </tr>
-
+                <td>The Again key.</th>
+                <td class="category"> </td>
+              </tr>
               <tr>
                 <td><a id="key-Apps"><code class="value keyname">'Apps'</code></a></td>
                 <td> - </td>
-                <td>The Application key.</td>
-              </tr>
-
+                <td>The Application key.</th>
+                <td class="category"> </td>
+              </tr>
               <tr>
                 <td><a id="key-Attn"><code class="value keyname">'Attn'</code></a></td>
                 <td> - </td>
-                <td>The ATTN key.</td>
+                <td>The ATTN key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-CodeInput"><code class="value keyname">'CodeInput'</code></a></td>
+                <td> - </td>
+                <td>The Code Input key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-Crsel"><code class="value keyname">'Crsel'</code></a></td>
+                <td> - </td>
+                <td>The Crsel key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-Decimal"><code class="value keyname">'Decimal'</code></a></td>
+                <td> - </td>
+                <td>The Decimal key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-Divide"><code class="value keyname">'Divide'</code></a></td>
+                <td> - </td>
+                <td>The Divide key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-Enter"><code class="value keyname">'Enter'</code></a></td>
+                <td> - </td>
+                <td>The Enter key.
+                 <span class="note" id="_58"><strong>Note:</strong> This key value must also be used for the <code>Return</code> (Macintosh numpad) key.</span></th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-EraseEof"><code class="value keyname">'EraseEof'</code></a></td>
+                <td> - </td>
+                <td>The Erase EOF key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-Execute"><code class="value keyname">'Execute'</code></a></td>
+                <td> - </td>
+                <td>The Execute key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-Exsel"><code class="value keyname">'Exsel'</code></a></td>
+                <td> - </td>
+                <td>The Exsel key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-F1"><code class="value keyname">'F1'</code></a></td>
+                <td> - </td>
+                <td>The F1 key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-F2"><code class="value keyname">'F2'</code></a></td>
+                <td> - </td>
+                <td>The F2 key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-F3"><code class="value keyname">'F3'</code></a></td>
+                <td> - </td>
+                <td>The F3 key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-F4"><code class="value keyname">'F4'</code></a></td>
+                <td> - </td>
+                <td>The F4 key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-F5"><code class="value keyname">'F5'</code></a></td>
+                <td> - </td>
+                <td>The F5 key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-F6"><code class="value keyname">'F6'</code></a></td>
+                <td> - </td>
+                <td>The F6 key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-F7"><code class="value keyname">'F7'</code></a></td>
+                <td> - </td>
+                <td>The F7 key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-F8"><code class="value keyname">'F8'</code></a></td>
+                <td> - </td>
+                <td>The F8 key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-F9"><code class="value keyname">'F9'</code></a></td>
+                <td> - </td>
+                <td>The F9 key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-F10"><code class="value keyname">'F10'</code></a></td>
+                <td> - </td>
+                <td>The F10 key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-F11"><code class="value keyname">'F11'</code></a></td>
+                <td> - </td>
+                <td>The F11 key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-F12"><code class="value keyname">'F12'</code></a></td>
+                <td> - </td>
+                <td>The F12 key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-F13"><code class="value keyname">'F13'</code></a></td>
+                <td> - </td>
+                <td>The F13 key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-F14"><code class="value keyname">'F14'</code></a></td>
+                <td> - </td>
+                <td>The F14 key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-F15"><code class="value keyname">'F15'</code></a></td>
+                <td> - </td>
+                <td>The F15 key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-F16"><code class="value keyname">'F16'</code></a></td>
+                <td> - </td>
+                <td>The F16 key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-F17"><code class="value keyname">'F17'</code></a></td>
+                <td> - </td>
+                <td>The F17 key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-F18"><code class="value keyname">'F18'</code></a></td>
+                <td> - </td>
+                <td>The F18 key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-F19"><code class="value keyname">'F19'</code></a></td>
+                <td> - </td>
+                <td>The F19 key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-F20"><code class="value keyname">'F20'</code></a></td>
+                <td> - </td>
+                <td>The F20 key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-F21"><code class="value keyname">'F21'</code></a></td>
+                <td> - </td>
+                <td>The F21 key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-F22"><code class="value keyname">'F22'</code></a></td>
+                <td> - </td>
+                <td>The F22 key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-F23"><code class="value keyname">'F23'</code></a></td>
+                <td> - </td>
+                <td>The F23 key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-F24"><code class="value keyname">'F24'</code></a></td>
+                <td> - </td>
+                <td>The F24 key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-Find"><code class="value keyname">'Find'</code></a></td>
+                <td> - </td>
+                <td>The Find key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-Help"><code class="value keyname">'Help'</code></a></td>
+                <td> - </td>
+                <td>The Help key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-LaunchApplication1"><code class="value keyname">'LaunchApplication1'</code></a></td>
+                <td> - </td>
+                <td>The Start Application One key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-LaunchApplication2"><code class="value keyname">'LaunchApplication2'</code></a></td>
+                <td> - </td>
+                <td>The Start Application Two key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-LaunchMail"><code class="value keyname">'LaunchMail'</code></a></td>
+                <td> - </td>
+                <td>The Start Mail key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-Menu"><code class="value keyname">'Menu'</code></a></td>
+                <td> - </td>
+                <td>The Menu key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-Power"><code class="value keyname">'Power'</code></a></td>
+                <td> - </td>
+                <td>The Power key.
+                 <span class="note" id="_61"><strong>Note:</strong> Some devices may not expose this key to the operating environment.</span></th>
+                <td class="category">Device</td>
+              </tr>
+              <tr>
+                <td><a id="key-PrintScreen"><code class="value keyname">'PrintScreen'</code></a></td>
+                <td> - </td>
+                <td>The Print Screen (PrintScrn, SnapShot) key.</th>
+                <td class="category">Device</td>
+              </tr>
+              <tr>
+                <td><a id="key-Props"><code class="value keyname">'Props'</code></a></td>
+                <td> - </td>
+                <td>The Props key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-Scroll"><code class="value keyname">'Scroll'</code></a></td>
+                <td> - </td>
+                <td>The Scroll Lock key.</th>
+                <td class="category">UI</td>
+              </tr>
+              <tr>
+                <td><a id="key-Separator"><code class="value keyname">'Separator'</code></a></td>
+                <td> - </td>
+                <td>The Separator key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-Soft1"><code class="value keyname">'Soft1'</code></a></td>
+                <td> - </td>
+                <td>The Soft1 key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-Soft2"><code class="value keyname">'Soft2'</code></a></td>
+                <td> - </td>
+                <td>The Soft2 key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-Soft3"><code class="value keyname">'Soft3'</code></a></td>
+                <td> - </td>
+                <td>The Soft3 key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-Soft4"><code class="value keyname">'Soft4'</code></a></td>
+                <td> - </td>
+                <td>The Soft4 key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-Zoom"><code class="value keyname">'Zoom'</code></a></td>
+                <td> - </td>
+                <td>The Zoom key.</th>
+                <td class="category">UI</td>
+              </tr>
+              <tr>
+                <td><a id="key-Cancel"><code class="value keyname">'Cancel'</code></a></td>
+                <td><a id="key-U-0018"><code class="value charval">'\u0018'</code></a></td>
+                <td>The Cancel key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-Esc"><code class="value keyname">'Esc'</code></a></td>
+                <td><a id="key-U-001B"><code class="value charval">'\u001B'</code></a></td>
+                <td>The Escape (Esc) key.</th>
+                <td class="category"> </td>
+              </tr>
+              <tr>
+                <td><a id="key-Spacebar"><code class="value keyname">'Spacebar'</code></a></td>
+                <td><a id="key-U-0020"><code class="value charval">'\u0020'</code></a></td>
+                <td>The Space (Spacebar) key: <code class="value charrep">&nbsp;</code>.</th>
+                <td class="category">Character</td>
               </tr>
 
               <tr>
                 <td><a id="key-BrightnessDown"><code class="value keyname">'BrightnessDown'</code></a></td>
                 <td> - </td>
-                <td>The Brightness Down key.  Typically controls the display brightness.</td>
-              </tr>
-
+                <td>The Brightness Down key.  Typically controls the display brightness.</th>
+                <td class="category">Device</td>
+              </tr>
               <tr>
                 <td><a id="key-BrightnessUp"><code class="value keyname">'BrightnessUp'</code></a></td>
                 <td> - </td>
-                <td>The Brightness Up key.  Typically controls the display brightness.</td>
+                <td>The Brightness Up key.  Typically controls the display brightness.</th>
+                <td class="category">Device</td>
+              </tr>
+              <tr>
+                <td><a id="key-Camera"><code class="value keyname">'Camera'</code></a></td>
+                <td> - </td>
+                <td>The Camera key.</th>
+                <td class="category">Device</td>
+              </tr>
+              <tr>
+                <td><a id="key-Eject"><code class="value keyname">'Eject'</code></a></td>
+                <td> - </td>
+                <td>The Eject key.</th>
+                <td class="category">Device</td>
               </tr>
 
               <tr>
                 <td><a id="key-BrowserBack"><code class="value keyname">'BrowserBack'</code></a></td>
                 <td> - </td>
-                <td>The Browser Back key.</td>
-              </tr>
-
+                <td>The Browser Back key.</th>
+                <td class="category">Browser</td>
+              </tr>
               <tr>
                 <td><a id="key-BrowserFavorites"><code class="value keyname">'BrowserFavorites'</code></a></td>
                 <td> - </td>
-                <td>The Browser Favorites key.</td>
-              </tr>
-
+                <td>The Browser Favorites key.</th>
+                <td class="category">Browser</td>
+              </tr>
               <tr>
                 <td><a id="key-BrowserForward"><code class="value keyname">'BrowserForward'</code></a></td>
                 <td> - </td>
-                <td>The Browser Forward key.</td>
-              </tr>
-
+                <td>The Browser Forward key.</th>
+                <td class="category">Browser</td>
+              </tr>
               <tr>
                 <td><a id="key-BrowserHome"><code class="value keyname">'BrowserHome'</code></a></td>
                 <td> - </td>
-                <td>The Browser Home key.</td>
-              </tr>
-
+                <td>The Browser Home key.</th>
+                <td class="category">Browser</td>
+              </tr>
               <tr>
                 <td><a id="key-BrowserRefresh"><code class="value keyname">'BrowserRefresh'</code></a></td>
                 <td> - </td>
-                <td>The Browser Refresh key.</td>
-              </tr>
-
+                <td>The Browser Refresh key.</th>
+                <td class="category">Browser</td>
+              </tr>
               <tr>
                 <td><a id="key-BrowserSearch"><code class="value keyname">'BrowserSearch'</code></a></td>
                 <td> - </td>
-                <td>The Browser Search key.</td>
-              </tr>
-
+                <td>The Browser Search key.</th>
+                <td class="category">Browser</td>
+              </tr>
               <tr>
                 <td><a id="key-BrowserStop"><code class="value keyname">'BrowserStop'</code></a></td>
                 <td> - </td>
-                <td>The Browser Stop key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Camera"><code class="value keyname">'Camera'</code></a></td>
-                <td> - </td>
-                <td>The Camera key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-CapsLock"><code class="value keyname">'CapsLock'</code></a></td>
-                <td> - </td>
-                <td>The Caps Lock (Capital) key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Clear"><code class="value keyname">'Clear'</code></a></td>
-                <td> - </td>
-                <td>The Clear key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-CodeInput"><code class="value keyname">'CodeInput'</code></a></td>
-                <td> - </td>
-                <td>The Code Input key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Compose"><code class="value keyname">'Compose'</code></a></td>
-                <td> - </td>
-                <td>The Compose key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Control"><code class="value keyname">'Control'</code></a></td>
+                <td>The Browser Stop key.</th>
+                <td class="category">Browser</td>
+              </tr>
+
+
+              <tr>
+                <td><a id="key-Home"><code class="value keyname">'Home'</code></a></td>
                 <td> - </td>
-                <td>The Control (Ctrl) key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Crsel"><code class="value keyname">'Crsel'</code></a></td>
-                <td> - </td>
-                <td>The Crsel key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Convert"><code class="value keyname">'Convert'</code></a></td>
-                <td> - </td>
-                <td>The Convert key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Copy"><code class="value keyname">'Copy'</code></a></td>
+                <td>The Home key.</th>
+                <td class="category">Edit / Navigation</td>
+              </tr>
+              <tr>
+                <td><a id="key-Left"><code class="value keyname">'Left'</code></a></td>
                 <td> - </td>
-                <td>The Copy key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Cut"><code class="value keyname">'Cut'</code></a></td>
+                <td>The Left Arrow key.</th>
+                <td class="category">Navigation</td>
+              </tr>
+              <tr>
+                <td><a id="key-PageDown"><code class="value keyname">'PageDown'</code></a></td>
                 <td> - </td>
-                <td>The Cut key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Decimal"><code class="value keyname">'Decimal'</code></a></td>
+                <td>The Page Down (Next) key.</th>
+                <td class="category">Navigation</td>
+              </tr>
+              <tr>
+                <td><a id="key-PageUp"><code class="value keyname">'PageUp'</code></a></td>
                 <td> - </td>
-                <td>The Decimal key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Divide"><code class="value keyname">'Divide'</code></a></td>
+                <td>The Page Up key.</th>
+                <td class="category">Navigation</td>
+              </tr>
+              <tr>
+                <td><a id="key-Right"><code class="value keyname">'Right'</code></a></td>
                 <td> - </td>
-                <td>The Divide key.</td>
-              </tr>
-
+                <td>The Right Arrow key.</th>
+                <td class="category">Navigation</td>
+              </tr>
+              <tr>
+                <td><a id="key-Up"><code class="value keyname">'Up'</code></a></td>
+                <td> - </td>
+                <td>The Up Arrow key.</th>
+                <td class="category">Navigation</td>
+              </tr>
+              <tr>
+                <td><a id="key-UpLeft"><code class="value keyname">'UpLeft'</code></a></td>
+                <td> - </td>
+                <td>The diagonal Up-Left Arrow key.</th>
+                <td class="category">Navigation</td>
+              </tr>
+              <tr>
+                <td><a id="key-UpRight"><code class="value keyname">'UpRight'</code></a></td>
+                <td> - </td>
+                <td>The diagonal Up-Right Arrow key.</th>
+                <td class="category">Navigation</td>
+              </tr>
               <tr>
                 <td><a id="key-Down"><code class="value keyname">'Down'</code></a></td>
                 <td> - </td>
-                <td>The Down Arrow key.</td>
-              </tr>
-
+                <td>The Down Arrow key.</th>
+                <td class="category">Navigation</td>
+              </tr>
               <tr>
                 <td><a id="key-DownLeft"><code class="value keyname">'DownLeft'</code></a></td>
                 <td> - </td>
-                <td>The diagonal Down-Left Arrow key.</td>
-              </tr>
-
+                <td>The diagonal Down-Left Arrow key.</th>
+                <td class="category">Navigation</td>
+              </tr>
               <tr>
                 <td><a id="key-DownRight"><code class="value keyname">'DownRight'</code></a></td>
                 <td> - </td>
-                <td>The diagonal Down-Right Arrow key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Eject"><code class="value keyname">'Eject'</code></a></td>
-                <td> - </td>
-                <td>The Eject key.</td>
-              </tr>
+                <td>The diagonal Down-Right Arrow key.</th>
+                <td class="category">Navigation</td>
+              </tr>
+
 
               <tr>
                 <td><a id="key-End"><code class="value keyname">'End'</code></a></td>
                 <td> - </td>
-                <td>The End key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Enter"><code class="value keyname">'Enter'</code></a></td>
-                <td> - </td>
-                <td>The Enter key.
-                 <span class="note" id="_58"><strong>Note:</strong> This key value must also be used for the <code>Return</code> (Macintosh numpad) key.</span></td>
-              </tr>
-
-              <tr>
-                <td><a id="key-EraseEof"><code class="value keyname">'EraseEof'</code></a></td>
+                <td>The End key.</th>
+                <td class="category">Edit / Navigation</td>
+              </tr>
+              <tr>
+                <td><a id="key-Select"><code class="value keyname">'Select'</code></a></td>
                 <td> - </td>
-                <td>The Erase EOF key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Execute"><code class="value keyname">'Execute'</code></a></td>
+                <td>The Select key.</th>
+                <td class="category">Edit / Navigation</td>
+              </tr>
+              <tr>
+                <td><a id="key-Clear"><code class="value keyname">'Clear'</code></a></td>
                 <td> - </td>
-                <td>The Execute key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Exsel"><code class="value keyname">'Exsel'</code></a></td>
+                <td>The Clear key.</th>
+                <td class="category">Edit</td>
+              </tr>
+              <tr>
+                <td><a id="key-Copy"><code class="value keyname">'Copy'</code></a></td>
                 <td> - </td>
-                <td>The Exsel key.</td>
-              </tr>
-
+                <td>The Copy key.</th>
+                <td class="category">Edit</td>
+              </tr>
+              <tr>
+                <td><a id="key-Cut"><code class="value keyname">'Cut'</code></a></td>
+                <td> - </td>
+                <td>The Cut key.</th>
+                <td class="category">Edit</td>
+              </tr>
+              <tr>
+                <td><a id="key-Insert"><code class="value keyname">'Insert'</code></a></td>
+                <td> - </td>
+                <td>The Insert (Ins) key.</th>
+                <td class="category">Edit</td>
+              </tr>
+              <tr>
+                <td><a id="key-Paste"><code class="value keyname">'Paste'</code></a></td>
+                <td> - </td>
+                <td>The Paste key.</th>
+                <td class="category">Edit</td>
+              </tr>
+              <tr>
+                <td><a id="key-Del"><code class="value keyname">'Del'</code></a></td>
+                <td><a id="key-U-007F"><code class="value charval">'\u007F'</code></a></td>
+                <td>The Delete (Del) Key. <span class="note" id="_63"><strong>Note:</strong> This key value must also be used for the key labeled <code class="value">'delete'</code> MacOS keyboards when modified by the <code class="value">'Fn'</code> key.</th>
+                <td class="category">Edit</td>
+              </tr>
+              <tr>
+                <td><a id="key-Backspace"><code class="value keyname">'Backspace'</code></a></td>
+                <td><a id="key-U-0008"><code class="value charval">'\u0008'</code></a></td>
+                <td>The Backspace (Back) key.
+                 <span class="note" id="_62"><strong>Note:</strong> This key value shall be also used for the key labeled <code class="value">'delete'</code> MacOS keyboards when not modified by the <code class="value">'Fn'</code> key.</span></th>
+                <td class="category">Edit</td>
+              </tr>
+              <tr>
+                <td><a id="key-Tab"><code class="value keyname">'Tab'</code></a></td>
+                <td><a id="key-U-0009"><code class="value charval">'\u0009'</code></a></td>
+                <td>The Horizontal Tabulation (Tab) key.</th>
+                <td class="category">Edit / Navigation</td>
+              </tr>
+              <tr>
+                <td><a id="key-Undo"><code class="value keyname">'Undo'</code></a></td>
+                <td> - </td>
+                <td>The Undo key.</th>
+                <td class="category">Edit</td>
+              </tr>
+
+
+              <tr>
+                <td><a id="key-DeadGrave"><code class="value keyname">'DeadGrave'</code></a></td>
+                <td><a id="key-U-0300"><code class="value charval">'\u0300'</code></a></td>
+                <td>The Combining Grave Accent (Greek Varia, Dead Grave) key.</th>
+                <td class="category">Composition</td>
+              </tr>
+              <tr>
+                <td><a id="key-DeadEacute"><code class="value keyname">'DeadEacute'</code></a></td>
+                <td><a id="key-U-0301"><code class="value charval">'\u0301'</code></a></td>
+                <td>The Combining Acute Accent (Stress Mark, Greek Oxia, Tonos, Dead Eacute) key.</th>
+                <td class="category">Composition</td>
+              </tr>
+              <tr>
+                <td><a id="key-DeadCircumflex"><code class="value keyname">'DeadCircumflex'</code></a></td>
+                <td><a id="key-U-0302"><code class="value charval">'\u0302'</code></a></td>
+                <td>The Combining Circumflex Accent (Hat, Dead Circumflex) key.</th>
+                <td class="category">Composition</td>
+              </tr>
+              <tr>
+                <td><a id="key-DeadTilde"><code class="value keyname">'DeadTilde'</code></a></td>
+                <td><a id="key-U-0303"><code class="value charval">'\u0303'</code></a></td>
+                <td>The Combining Tilde (Dead Tilde) key.</th>
+                <td class="category">Composition</td>
+              </tr>
+              <tr>
+                <td><a id="key-DeadMacron"><code class="value keyname">'DeadMacron'</code></a></td>
+                <td><a id="key-U-0304"><code class="value charval">'\u0304'</code></a></td>
+                <td>The Combining Macron (Long, Dead Macron) key.</th>
+                <td class="category">Composition</td>
+              </tr>
+              <tr>
+                <td><a id="key-DeadBreve"><code class="value keyname">'DeadBreve'</code></a></td>
+                <td><a id="key-U-0306"><code class="value charval">'\u0306'</code></a></td>
+                <td>The Combining Breve (Short, Dead Breve) key.</th>
+                <td class="category">Composition</td>
+              </tr>
+              <tr>
+                <td><a id="key-DeadAboveDot"><code class="value keyname">'DeadAboveDot'</code></a></td>
+                <td><a id="key-U-0307"><code class="value charval">'\u0307'</code></a></td>
+                <td>The Combining Dot Above (Derivative, Dead Above Dot) key.</th>
+                <td class="category">Composition</td>
+              </tr>
+              <tr>
+                <td><a id="key-DeadUmlaut"><code class="value keyname">'DeadUmlaut'</code></a></td>
+                <td><a id="key-U-0308"><code class="value charval">'\u0308'</code></a></td>
+                <td>The Combining Diaeresis (Double Dot Abode, Umlaut, Greek Dialytika, Double Derivative, Dead Diaeresis) key.</th>
+                <td class="category">Composition</td>
+              </tr>
+              <tr>
+                <td><a id="key-DeadAboveRing"><code class="value keyname">'DeadAboveRing'</code></a></td>
+                <td><a id="key-U-030A"><code class="value charval">'\u030A'</code></a></td>
+                <td>The Combining Ring Above (Dead Above Ring) key.</th>
+                <td class="category">Composition</td>
+              </tr>
+              <tr>
+                <td><a id="key-DeadDoubleacute"><code class="value keyname">'DeadDoubleacute'</code></a></td>
+                <td><a id="key-U-030B"><code class="value charval">'\u030B'</code></a></td>
+                <td>The Combining Double Acute Accent (Dead Doubleacute) key.</th>
+                <td class="category">Composition</td>
+              </tr>
+              <tr>
+                <td><a id="key-DeadCaron"><code class="value keyname">'DeadCaron'</code></a></td>
+                <td><a id="key-U-030C"><code class="value charval">'\u030C'</code></a></td>
+                <td>The Combining Caron (Hacek, V Above, Dead Caron) key.</th>
+                <td class="category">Composition</td>
+              </tr>
+              <tr>
+                <td><a id="key-DeadCedilla"><code class="value keyname">'DeadCedilla'</code></a></td>
+                <td><a id="key-U-0327"><code class="value charval">'\u0327'</code></a></td>
+                <td>The Combining Cedilla (Dead Cedilla) key.</th>
+                <td class="category">Composition</td>
+              </tr>
+              <tr>
+                <td><a id="key-DeadOgonek"><code class="value keyname">'DeadOgonek'</code></a></td>
+                <td><a id="key-U-0328"><code class="value charval">'\u0328'</code></a></td>
+                <td>The Combining Ogonek (Nasal Hook, Dead Ogonek) key.</th>
+                <td class="category">Composition</td>
+              </tr>
+              <tr>
+                <td><a id="key-DeadIota"><code class="value keyname">'DeadIota'</code></a></td>
+                <td><a id="key-U-0345"><code class="value charval">'\u0345'</code></a></td>
+                <td>The Combining Greek Ypogegrammeni (Greek Non-Spacing Iota Below, Iota Subscript, Dead Iota) key.</th>
+                <td class="category">Composition</td>
+              </tr>
+              <tr>
+                <td><a id="key-DeadVoicedSound"><code class="value keyname">'DeadVoicedSound'</code></a></td>
+                <td><a id="key-U-3099"><code class="value charval">'\u3099'</code></a></td>
+                <td>The Combining Katakana-Hiragana Voiced Sound Mark (Dead Voiced Sound) key.</th>
+                <td class="category">Composition</td>
+              </tr>
+              <tr>
+                <td><a id="key-DeadSemivoicedSound"><code class="value keyname">'DeadSemivoicedSound'</code></a></td>
+                <td><a id="key-U-309A"><code class="value charval">'\u309A'</code></a></td>
+                <td>The Combining Katakana-Hiragana Semi-Voiced Sound Mark (Dead Semivoiced Sound) key.</th>
+                <td class="category">Composition</td>
+              </tr>
+
+              <tr>
+                <td><a id="key-Alphanumeric"><code class="value keyname">'Alphanumeric'</code></a></td>
+                <td> - </td>
+                <td>The Alphanumeric key.</th>
+                <td class="category">Modifier</td>
+              </tr>
+              <tr>
+                <td><a id="key-Alt"><code class="value keyname">'Alt'</code></a></td>
+                <td> - </td>
+                <td>The Alt (Menu) key.</th>
+                <td class="category">Modifier</td>
+              </tr>
+              <tr>
+                <td><a id="key-AltGraph"><code class="value keyname">'AltGraph'</code></a></td>
+                <td> - </td>
+                <td>The Alt-Graph key.</th>
+                <td class="category">Modifier</td>
+              </tr>
+              <tr>
+                <td><a id="key-CapsLock"><code class="value keyname">'CapsLock'</code></a></td>
+                <td> - </td>
+                <td>The Caps Lock (Capital) key.</th>
+                <td class="category">Modifier</td>
+              </tr>
+              <tr>
+                <td><a id="key-Control"><code class="value keyname">'Control'</code></a></td>
+                <td> - </td>
+                <td>The Control (Ctrl) key.</th>
+                <td class="category">Modifier</td>
+              </tr>
+              <tr>
+                <td><a id="key-Subtract"><code class="value keyname">'Subtract'</code></a></td>
+                <td> - </td>
+                <td>The Subtract key.</th>
+                <td class="category"> </td>
+              </tr>
               <tr>
                 <td><a id="key-Fn"><code class="value keyname">'Fn'</code></a></td>
                 <td> - </td>
-                <td>The Function switch key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-F1"><code class="value keyname">'F1'</code></a></td>
-                <td> - </td>
-                <td>The F1 key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-F2"><code class="value keyname">'F2'</code></a></td>
-                <td> - </td>
-                <td>The F2 key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-F3"><code class="value keyname">'F3'</code></a></td>
-                <td> - </td>
-                <td>The F3 key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-F4"><code class="value keyname">'F4'</code></a></td>
-                <td> - </td>
-                <td>The F4 key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-F5"><code class="value keyname">'F5'</code></a></td>
-                <td> - </td>
-                <td>The F5 key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-F6"><code class="value keyname">'F6'</code></a></td>
-                <td> - </td>
-                <td>The F6 key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-F7"><code class="value keyname">'F7'</code></a></td>
-                <td> - </td>
-                <td>The F7 key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-F8"><code class="value keyname">'F8'</code></a></td>
-                <td> - </td>
-                <td>The F8 key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-F9"><code class="value keyname">'F9'</code></a></td>
-                <td> - </td>
-                <td>The F9 key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-F10"><code class="value keyname">'F10'</code></a></td>
-                <td> - </td>
-                <td>The F10 key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-F11"><code class="value keyname">'F11'</code></a></td>
-                <td> - </td>
-                <td>The F11 key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-F12"><code class="value keyname">'F12'</code></a></td>
-                <td> - </td>
-                <td>The F12 key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-F13"><code class="value keyname">'F13'</code></a></td>
-                <td> - </td>
-                <td>The F13 key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-F14"><code class="value keyname">'F14'</code></a></td>
-                <td> - </td>
-                <td>The F14 key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-F15"><code class="value keyname">'F15'</code></a></td>
-                <td> - </td>
-                <td>The F15 key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-F16"><code class="value keyname">'F16'</code></a></td>
-                <td> - </td>
-                <td>The F16 key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-F17"><code class="value keyname">'F17'</code></a></td>
-                <td> - </td>
-                <td>The F17 key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-F18"><code class="value keyname">'F18'</code></a></td>
-                <td> - </td>
-                <td>The F18 key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-F19"><code class="value keyname">'F19'</code></a></td>
-                <td> - </td>
-                <td>The F19 key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-F20"><code class="value keyname">'F20'</code></a></td>
-                <td> - </td>
-                <td>The F20 key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-F21"><code class="value keyname">'F21'</code></a></td>
-                <td> - </td>
-                <td>The F21 key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-F22"><code class="value keyname">'F22'</code></a></td>
-                <td> - </td>
-                <td>The F22 key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-F23"><code class="value keyname">'F23'</code></a></td>
-                <td> - </td>
-                <td>The F23 key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-F24"><code class="value keyname">'F24'</code></a></td>
-                <td> - </td>
-                <td>The F24 key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-FinalMode"><code class="value keyname">'FinalMode'</code></a></td>
-                <td> - </td>
-                <td>The Final Mode (Final) key used on some asian keyboards.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Find"><code class="value keyname">'Find'</code></a></td>
-                <td> - </td>
-                <td>The Find key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-FullWidth"><code class="value keyname">'FullWidth'</code></a></td>
-                <td> - </td>
-                <td>The Full-Width Characters key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-HalfWidth"><code class="value keyname">'HalfWidth'</code></a></td>
-                <td> - </td>
-                <td>The Half-Width Characters key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-HangulMode"><code class="value keyname">'HangulMode'</code></a></td>
-                <td> - </td>
-                <td>The Hangul (Korean characters) Mode key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-HanjaMode"><code class="value keyname">'HanjaMode'</code></a></td>
-                <td> - </td>
-                <td>The Hanja (Korean characters) Mode key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Help"><code class="value keyname">'Help'</code></a></td>
-                <td> - </td>
-                <td>The Help key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Hiragana"><code class="value keyname">'Hiragana'</code></a></td>
-                <td> - </td>
-                <td>The Hiragana (Japanese Kana characters) key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Home"><code class="value keyname">'Home'</code></a></td>
-                <td> - </td>
-                <td>The Home key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Insert"><code class="value keyname">'Insert'</code></a></td>
-                <td> - </td>
-                <td>The Insert (Ins) key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-JapaneseHiragana"><code class="value keyname">'JapaneseHiragana'</code></a></td>
-                <td> - </td>
-                <td>The Japanese-Hiragana key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-JapaneseKatakana"><code class="value keyname">'JapaneseKatakana'</code></a></td>
-                <td> - </td>
-                <td>The Japanese-Katakana key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-JapaneseRomaji"><code class="value keyname">'JapaneseRomaji'</code></a></td>
-                <td> - </td>
-                <td>The Japanese-Romaji key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-JunjaMode"><code class="value keyname">'JunjaMode'</code></a></td>
-                <td> - </td>
-                <td>The Junja Mode key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-KanaMode"><code class="value keyname">'KanaMode'</code></a></td>
-                <td> - </td>
-                <td>The Kana Mode (Kana Lock) key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-KanjiMode"><code class="value keyname">'KanjiMode'</code></a></td>
-                <td> - </td>
-                <td>The Kanji (Japanese name for ideographic characters of Chinese origin) Mode key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Katakana"><code class="value keyname">'Katakana'</code></a></td>
-                <td> - </td>
-                <td>The Katakana (Japanese Kana characters) key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-LaunchApplication1"><code class="value keyname">'LaunchApplication1'</code></a></td>
-                <td> - </td>
-                <td>The Start Application One key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-LaunchApplication2"><code class="value keyname">'LaunchApplication2'</code></a></td>
-                <td> - </td>
-                <td>The Start Application Two key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-LaunchMail"><code class="value keyname">'LaunchMail'</code></a></td>
-                <td> - </td>
-                <td>The Start Mail key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Left"><code class="value keyname">'Left'</code></a></td>
-                <td> - </td>
-                <td>The Left Arrow key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Menu"><code class="value keyname">'Menu'</code></a></td>
-                <td> - </td>
-                <td>The Menu key.</td>
-              </tr>
-
+                <td>The Function switch key.</th>
+                <td class="category">Modifier</td>
+              </tr>
               <tr>
                 <td><a id="key-Meta"><code class="value keyname">'Meta'</code></a></td>
                 <td> - </td>
                 <td>The Meta key.
                   <span class="note" id="_59">
                     <strong>Note:</strong> This key value must also be used for the Apple <code>'Command'</code> key.
-                  </span></td>
-              </tr>
-
-              <tr>
-                <td><a id="key-MediaNextTrack"><code class="value keyname">'MediaNextTrack'</code></a></td>
-                <td> - </td>
-                <td>The Media Next Track key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-MediaPlayPause"><code class="value keyname">'MediaPlayPause'</code></a></td>
-                <td> - </td>
-                <td>The Media Play Pause key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-MediaPreviousTrack"><code class="value keyname">'MediaPreviousTrack'</code></a></td>
-                <td> - </td>
-                <td>The Media Previous Track key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-MediaStop"><code class="value keyname">'MediaStop'</code></a></td>
-                <td> - </td>
-                <td>The Media Stop key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-ModeChange"><code class="value keyname">'ModeChange'</code></a></td>
-                <td> - </td>
-                <td>The Mode Change key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-NextCandidate"><code class="value keyname">'NextCandidate'</code></a></td>
-                <td> - </td>
-                <td>The Next Candidate function key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Nonconvert"><code class="value keyname">'Nonconvert'</code></a></td>
-                <td> - </td>
-                <td>The Nonconvert (Don't Convert) key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-NumLock"><code class="value keyname">'NumLock'</code></a></td>
-                <td> - </td>
-                <td>The Number Lock key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-PageDown"><code class="value keyname">'PageDown'</code></a></td>
-                <td> - </td>
-                <td>The Page Down (Next) key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-PageUp"><code class="value keyname">'PageUp'</code></a></td>
-                <td> - </td>
-                <td>The Page Up key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Paste"><code class="value keyname">'Paste'</code></a></td>
-                <td> - </td>
-                <td>The Paste key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Pause"><code class="value keyname">'Pause'</code></a></td>
-                <td> - </td>
-                <td>The Pause key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Play"><code class="value keyname">'Play'</code></a></td>
-                <td> - </td>
-                <td>The Play key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Power"><code class="value keyname">'Power'</code></a></td>
-                <td> - </td>
-                <td>The Power key.
-                 <span class="note" id="_61"><strong>Note:</strong> Some devices may not expose this key to the operating environment.</span></td>
-              </tr>
-
-              <tr>
-                <td><a id="key-PreviousCandidate"><code class="value keyname">'PreviousCandidate'</code></a></td>
-                <td> - </td>
-                <td>The Previous Candidate function key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-PrintScreen"><code class="value keyname">'PrintScreen'</code></a></td>
-                <td> - </td>
-                <td>The Print Screen (PrintScrn, SnapShot) key.</td>
-              </tr>
-
+                  </span></th>
+                <td class="category">Modifier</td>
+              </tr>
               <tr>
                 <td><a id="key-Process"><code class="value keyname">'Process'</code></a></td>
                 <td> - </td>
-                <td>The Process key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Props"><code class="value keyname">'Props'</code></a></td>
-                <td> - </td>
-                <td>The Props key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Right"><code class="value keyname">'Right'</code></a></td>
-                <td> - </td>
-                <td>The Right Arrow key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-RomanCharacters"><code class="value keyname">'RomanCharacters'</code></a></td>
+                <td>The Process key.</th>
+                <td class="category">Modifier</td>
+              </tr>
+              <tr>
+                <td><a id="key-NumLock"><code class="value keyname">'NumLock'</code></a></td>
                 <td> - </td>
-                <td>The Roman Characters function key, also known as the <code>'Youngja'</code> or <code>'Young'</code> key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Scroll"><code class="value keyname">'Scroll'</code></a></td>
-                <td> - </td>
-                <td>The Scroll Lock key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Select"><code class="value keyname">'Select'</code></a></td>
-                <td> - </td>
-                <td>The Select key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-SelectMedia"><code class="value keyname">'SelectMedia'</code></a></td>
-                <td> - </td>
-                <td>The Select Media key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Separator"><code class="value keyname">'Separator'</code></a></td>
-                <td> - </td>
-                <td>The Separator key.</td>
-              </tr>
-
+                <td>The Number Lock key.</th>
+                <td class="category">Modifier</td>
+              </tr>
               <tr>
                 <td><a id="key-Shift"><code class="value keyname">'Shift'</code></a></td>
                 <td> - </td>
-                <td>The Shift key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Soft1"><code class="value keyname">'Soft1'</code></a></td>
-                <td> - </td>
-                <td>The Soft1 key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Soft2"><code class="value keyname">'Soft2'</code></a></td>
-                <td> - </td>
-                <td>The Soft2 key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Soft3"><code class="value keyname">'Soft3'</code></a></td>
-                <td> - </td>
-                <td>The Soft3 key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Soft4"><code class="value keyname">'Soft4'</code></a></td>
-                <td> - </td>
-                <td>The Soft4 key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Stop"><code class="value keyname">'Stop'</code></a></td>
-                <td> - </td>
-                <td>The Stop key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Subtract"><code class="value keyname">'Subtract'</code></a></td>
-                <td> - </td>
-                <td>The Subtract key.</td>
-              </tr>
-
+                <td>The Shift key.</th>
+                <td class="category">Modifier</td>
+              </tr>
               <tr>
                 <td><a id="key-SymbolLock"><code class="value keyname">'SymbolLock'</code></a></td>
                 <td> - </td>
-                <td>The Symbol Lock key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Up"><code class="value keyname">'Up'</code></a></td>
-                <td> - </td>
-                <td>The Up Arrow key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-UpLeft"><code class="value keyname">'UpLeft'</code></a></td>
+                <td>The Symbol Lock key.</th>
+                <td class="category">Modifier</td>
+              </tr>
+              <tr>
+                <td><a id="key-Win"><code class="value keyname">'Win'</code></a></td>
                 <td> - </td>
-                <td>The diagonal Up-Left Arrow key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-UpRight"><code class="value keyname">'UpRight'</code></a></td>
+                <td>The Windows Logo key.</th>
+                <td class="category">Modifier</td>
+              </tr>
+              <tr>
+                <td><a id="key-Compose"><code class="value keyname">'Compose'</code></a></td>
                 <td> - </td>
-                <td>The diagonal Up-Right Arrow key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Undo"><code class="value keyname">'Undo'</code></a></td>
+                <td>The Compose key.</th>
+                <td class="category">Modifier</td>
+              </tr>
+
+              <tr>
+                <td><a id="key-AllCandidates"><code class="value keyname">'AllCandidates'</code></a></td>
                 <td> - </td>
-                <td>The Undo key.</td>
-              </tr>
+                <td>The All Candidates key.</th>
+                <td class="category">IME</td>
+              </tr>
+              <tr>
+                <td><a id="key-NextCandidate"><code class="value keyname">'NextCandidate'</code></a></td>
+                <td> - </td>
+                <td>The Next Candidate function key.</th>
+                <td class="category">IME</td>
+              </tr>
+              <tr>
+                <td><a id="key-PreviousCandidate"><code class="value keyname">'PreviousCandidate'</code></a></td>
+                <td> - </td>
+                <td>The Previous Candidate function key.</th>
+                <td class="category">IME</td>
+              </tr>
+              <tr>
+                <td><a id="key-Convert"><code class="value keyname">'Convert'</code></a></td>
+                <td> - </td>
+                <td>The Convert key.</th>
+                <td class="category">IME</td>
+              </tr>
+              <tr>
+                <td><a id="key-Nonconvert"><code class="value keyname">'Nonconvert'</code></a></td>
+                <td> - </td>
+                <td>The Nonconvert (Don't Convert) key.</th>
+                <td class="category">IME</td>
+              </tr>
+              <tr>
+                <td><a id="key-FinalMode"><code class="value keyname">'FinalMode'</code></a></td>
+                <td> - </td>
+                <td>The Final Mode (Final) key used on some asian keyboards.</th>
+                <td class="category">IME</td>
+              </tr>
+              <tr>
+                <td><a id="key-FullWidth"><code class="value keyname">'FullWidth'</code></a></td>
+                <td> - </td>
+                <td>The Full-Width Characters key.</th>
+                <td class="category">IME</td>
+              </tr>
+              <tr>
+                <td><a id="key-HalfWidth"><code class="value keyname">'HalfWidth'</code></a></td>
+                <td> - </td>
+                <td>The Half-Width Characters key.</th>
+                <td class="category">IME</td>
+              </tr>
+              <tr>
+                <td><a id="key-ModeChange"><code class="value keyname">'ModeChange'</code></a></td>
+                <td> - </td>
+                <td>The Mode Change key.</th>
+                <td class="category">IME</td>
+              </tr>
+              <tr>
+                <td><a id="key-RomanCharacters"><code class="value keyname">'RomanCharacters'</code></a></td>
+                <td> - </td>
+                <td>The Roman Characters function key, also known as the <code>'Youngja'</code> or <code>'Young'</code> key.</th>
+                <td class="category">IME</td>
+              </tr>
+              <tr>
+                <td><a id="key-HangulMode"><code class="value keyname">'HangulMode'</code></a></td>
+                <td> - </td>
+                <td>The Hangul (Korean characters) Mode key.</th>
+                <td class="category">IME</td>
+              </tr>
+              <tr>
+                <td><a id="key-HanjaMode"><code class="value keyname">'HanjaMode'</code></a></td>
+                <td> - </td>
+                <td>The Hanja (Korean characters) Mode key.</th>
+                <td class="category">IME</td>
+              </tr>
+              <tr>
+                <td><a id="key-JunjaMode"><code class="value keyname">'JunjaMode'</code></a></td>
+                <td> - </td>
+                <td>The Junja (Korean characters) Mode key.</th>
+                <td class="category">IME</td>
+              </tr>
+              <tr>
+                <td><a id="key-Hiragana"><code class="value keyname">'Hiragana'</code></a></td>
+                <td> - </td>
+                <td>The Hiragana (Japanese Kana characters) key.</th>
+                <td class="category">IME</td>
+              </tr>
+              <tr>
+                <td><a id="key-JapaneseHiragana"><code class="value keyname">'JapaneseHiragana'</code></a></td>
+                <td> - </td>
+                <td>The Japanese-Hiragana key.</th>
+                <td class="category">IME</td>
+              </tr>
+              <tr>
+                <td><a id="key-JapaneseKatakana"><code class="value keyname">'JapaneseKatakana'</code></a></td>
+                <td> - </td>
+                <td>The Japanese-Katakana key.</th>
+                <td class="category">IME</td>
+              </tr>
+              <tr>
+                <td><a id="key-JapaneseRomaji"><code class="value keyname">'JapaneseRomaji'</code></a></td>
+                <td> - </td>
+                <td>The Japanese-Romaji key.</th>
+                <td class="category">IME</td>
+              </tr>
+              <tr>
+                <td><a id="key-KanaMode"><code class="value keyname">'KanaMode'</code></a></td>
+                <td> - </td>
+                <td>The Kana Mode (Kana Lock) key.</th>
+                <td class="category">IME</td>
+              </tr>
+              <tr>
+                <td><a id="key-KanjiMode"><code class="value keyname">'KanjiMode'</code></a></td>
+                <td> - </td>
+                <td>The Kanji (Japanese name for ideographic characters of Chinese origin) Mode key.</th>
+                <td class="category">IME</td>
+              </tr>
+              <tr>
+                <td><a id="key-Katakana"><code class="value keyname">'Katakana'</code></a></td>
+                <td> - </td>
+                <td>The Katakana (Japanese Kana characters) key.</th>
+                <td class="category">IME</td>
+              </tr>
+
 
               <tr>
                 <td><a id="key-VolumeDown"><code class="value keyname">'VolumeDown'</code></a></td>
                 <td> - </td>
-                <td>The Volume Down key.</td>
-              </tr>
-
+                <td>The Volume Down key.</th>
+                <td class="category">Media</td>
+              </tr>
               <tr>
                 <td><a id="key-VolumeMute"><code class="value keyname">'VolumeMute'</code></a></td>
                 <td> - </td>
-                <td>The Volume Mute key.</td>
-              </tr>
-
+                <td>The Volume Mute key.</th>
+                <td class="category">Media</td>
+              </tr>
               <tr>
                 <td><a id="key-VolumeUp"><code class="value keyname">'VolumeUp'</code></a></td>
                 <td> - </td>
-                <td>The Volume Up key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Win"><code class="value keyname">'Win'</code></a></td>
-                <td> - </td>
-                <td>The Windows Logo key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Zoom"><code class="value keyname">'Zoom'</code></a></td>
+                <td>The Volume Up key.</th>
+                <td class="category">Media</td>
+              </tr>
+              <tr>
+                <td><a id="key-MediaNextTrack"><code class="value keyname">'MediaNextTrack'</code></a></td>
                 <td> - </td>
-                <td>The Zoom key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Backspace"><code class="value keyname">'Backspace'</code></a></td>
-                <td><a id="key-U-0008"><code class="value charval">'\u0008'</code></a></td>
-                <td>The Backspace (Back) key.
-                 <span class="note" id="_62"><strong>Note:</strong> This key value shall be also used for the key labeled <code class="value">'delete'</code> MacOS keyboards when not modified by the <code class="value">'Fn'</code> key.</span></td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Tab"><code class="value keyname">'Tab'</code></a></td>
-                <td><a id="key-U-0009"><code class="value charval">'\u0009'</code></a></td>
-                <td>The Horizontal Tabulation (Tab) key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Cancel"><code class="value keyname">'Cancel'</code></a></td>
-                <td><a id="key-U-0018"><code class="value charval">'\u0018'</code></a></td>
-                <td>The Cancel key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Esc"><code class="value keyname">'Esc'</code></a></td>
-                <td><a id="key-U-001B"><code class="value charval">'\u001B'</code></a></td>
-                <td>The Escape (Esc) key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Spacebar"><code class="value keyname">'Spacebar'</code></a></td>
-                <td><a id="key-U-0020"><code class="value charval">'\u0020'</code></a></td>
-                <td>The Space (Spacebar) key: <code class="value charrep">&nbsp;</code>.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-Del"><code class="value keyname">'Del'</code></a></td>
-                <td><a id="key-U-007F"><code class="value charval">'\u007F'</code></a></td>
-                <td>The Delete (Del) Key. <span class="note" id="_63"><strong>Note:</strong> This key value shall be also used for the key labeled <code class="value">'delete'</code> MacOS keyboards when modified by the <code class="value">'Fn'</code> key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-DeadGrave"><code class="value keyname">'DeadGrave'</code></a></td>
-                <td><a id="key-U-0300"><code class="value charval">'\u0300'</code></a></td>
-                <td>The Combining Grave Accent (Greek Varia, Dead Grave) key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-DeadEacute"><code class="value keyname">'DeadEacute'</code></a></td>
-                <td><a id="key-U-0301"><code class="value charval">'\u0301'</code></a></td>
-                <td>The Combining Acute Accent (Stress Mark, Greek Oxia, Tonos, Dead Eacute) key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-DeadCircumflex"><code class="value keyname">'DeadCircumflex'</code></a></td>
-                <td><a id="key-U-0302"><code class="value charval">'\u0302'</code></a></td>
-                <td>The Combining Circumflex Accent (Hat, Dead Circumflex) key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-DeadTilde"><code class="value keyname">'DeadTilde'</code></a></td>
-                <td><a id="key-U-0303"><code class="value charval">'\u0303'</code></a></td>
-                <td>The Combining Tilde (Dead Tilde) key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-DeadMacron"><code class="value keyname">'DeadMacron'</code></a></td>
-                <td><a id="key-U-0304"><code class="value charval">'\u0304'</code></a></td>
-                <td>The Combining Macron (Long, Dead Macron) key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-DeadBreve"><code class="value keyname">'DeadBreve'</code></a></td>
-                <td><a id="key-U-0306"><code class="value charval">'\u0306'</code></a></td>
-                <td>The Combining Breve (Short, Dead Breve) key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-DeadAboveDot"><code class="value keyname">'DeadAboveDot'</code></a></td>
-                <td><a id="key-U-0307"><code class="value charval">'\u0307'</code></a></td>
-                <td>The Combining Dot Above (Derivative, Dead Above Dot) key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-DeadUmlaut"><code class="value keyname">'DeadUmlaut'</code></a></td>
-                <td><a id="key-U-0308"><code class="value charval">'\u0308'</code></a></td>
-                <td>The Combining Diaeresis (Double Dot Abode, Umlaut, Greek Dialytika, Double Derivative, Dead Diaeresis) key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-DeadAboveRing"><code class="value keyname">'DeadAboveRing'</code></a></td>
-                <td><a id="key-U-030A"><code class="value charval">'\u030A'</code></a></td>
-                <td>The Combining Ring Above (Dead Above Ring) key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-DeadDoubleacute"><code class="value keyname">'DeadDoubleacute'</code></a></td>
-                <td><a id="key-U-030B"><code class="value charval">'\u030B'</code></a></td>
-                <td>The Combining Double Acute Accent (Dead Doubleacute) key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-DeadCaron"><code class="value keyname">'DeadCaron'</code></a></td>
-                <td><a id="key-U-030C"><code class="value charval">'\u030C'</code></a></td>
-                <td>The Combining Caron (Hacek, V Above, Dead Caron) key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-DeadCedilla"><code class="value keyname">'DeadCedilla'</code></a></td>
-                <td><a id="key-U-0327"><code class="value charval">'\u0327'</code></a></td>
-                <td>The Combining Cedilla (Dead Cedilla) key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-DeadOgonek"><code class="value keyname">'DeadOgonek'</code></a></td>
-                <td><a id="key-U-0328"><code class="value charval">'\u0328'</code></a></td>
-                <td>The Combining Ogonek (Nasal Hook, Dead Ogonek) key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-DeadIota"><code class="value keyname">'DeadIota'</code></a></td>
-                <td><a id="key-U-0345"><code class="value charval">'\u0345'</code></a></td>
-                <td>The Combining Greek Ypogegrammeni (Greek Non-Spacing Iota Below, Iota Subscript, Dead Iota) key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-DeadVoicedSound"><code class="value keyname">'DeadVoicedSound'</code></a></td>
-                <td><a id="key-U-3099"><code class="value charval">'\u3099'</code></a></td>
-                <td>The Combining Katakana-Hiragana Voiced Sound Mark (Dead Voiced Sound) key.</td>
-              </tr>
-
-              <tr>
-                <td><a id="key-DeadSemivoicedSound"><code class="value keyname">'DeadSemivoicedSound'</code></a></td>
-                <td><a id="key-U-309A"><code class="value charval">'\u309A'</code></a></td>
-                <td>The Combining Katakana-Hiragana Semi-Voiced Sound Mark (Dead Semivoiced Sound) key.</td>
+                <td>The Media Next Track key.</th>
+                <td class="category">Media</td>
+              </tr>
+              <tr>
+                <td><a id="key-MediaPlayPause"><code class="value keyname">'MediaPlayPause'</code></a></td>
+                <td> - </td>
+                <td>The Media Play Pause key.</th>
+                <td class="category">Media</td>
+              </tr>
+              <tr>
+                <td><a id="key-MediaPreviousTrack"><code class="value keyname">'MediaPreviousTrack'</code></a></td>
+                <td> - </td>
+                <td>The Media Previous Track key.</th>
+                <td class="category">Media</td>
+              </tr>
+              <tr>
+                <td><a id="key-MediaStop"><code class="value keyname">'MediaStop'</code></a></td>
+                <td> - </td>
+                <td>The Media Stop key.</th>
+                <td class="category">Media</td>
+              </tr>
+              <tr>
+                <td><a id="key-Pause"><code class="value keyname">'Pause'</code></a></td>
+                <td> - </td>
+                <td>The Pause key.</th>
+                <td class="category">Media</td>
+              </tr>
+              <tr>
+                <td><a id="key-Play"><code class="value keyname">'Play'</code></a></td>
+                <td> - </td>
+                <td>The Play key.</th>
+                <td class="category">Media</td>
+              </tr>
+              <tr>
+                <td><a id="key-SelectMedia"><code class="value keyname">'SelectMedia'</code></a></td>
+                <td> - </td>
+                <td>The Select Media key.</th>
+                <td class="category">Media</td>
+              </tr>
+              <tr>
+                <td><a id="key-Stop"><code class="value keyname">'Stop'</code></a></td>
+                <td> - </td>
+                <td>The Stop key.</th>
+                <td class="category">Media</td>
+              </tr>
+
+
+              <tr>
+                <td><a id="key-Unidentified"><code class="value keyname">'Unidentified'</code></a></td>
+                <td> - </td>
+                <td>This key value is used when an implementations is unable to identify another key value, due to either hardware, platform, or software constraints.  <span class="warning" id="_64"><strong>Warning!</strong> Conforming implementation must only use this key value when there is no way for the implementation to detect the key value, and does not indicate a conforming implementation by itself.</span></th>
+                <td class="category">?</td>
               </tr>
             </table>
 
-            <dt><a id="key-Unidentified"><code class="value keyname">'Unidentified'</code></a></dt>
-            <dd>This key value is used when an implementations is unable to identify another key value, due to either hardware, platform, or software constraints.  <span class="warning" id="_64"><strong>Warning!</strong> Conforming implementation must only use this key value when there is no way for the implementation to detect the key value, and does not indicate a conforming implementation by itself.</span></dd>
-
-          </dl>
-
-
           </div>
 
         </div>
@@ -6217,9 +6259,9 @@
           
           <p>However, for the purpose of documenting the current state of these attributes and their relation to equivalent key values, this specification refers to the Legacy Keyboard Event Properties [<cite><a class="informative" href="#references-KeyProps">KeyProps</a></cite>] WG Note, which contains an informative reference table that documents some common values for the <code class="attr-name">keyCode</code> and <code class="attr-name">charCode</code> properties in different implementations.</p>
 
-          <p>Additionally, in order to provide raw access to any available environment-specific keys, absent the effect of modifier keys, the <a href="#events-KeyboardEvent">KeyboardEvent</a> interface does define the legacy <a href="#events-KeyboardEvent-keyCode">KeyboardEvent.keyCode</a> attribute, but the value of the attribute may vary between implementations and even between the same implementation on different operating systems.  Normally, for modified values, the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> attribute should be used instead of the <a href="#events-KeyboardEvent-keyCode">KeyboardEvent.keyCode</a> attribute.</p>
+          <!-- <p>Additionally, in order to provide raw access to any available environment-specific keys, absent the effect of modifier keys, the <a href="#events-KeyboardEvent">KeyboardEvent</a> interface does define the legacy <a href="#events-KeyboardEvent-keyCode">KeyboardEvent.keyCode</a> attribute, but the value of the attribute may vary between implementations and even between the same implementation on different operating systems.  Normally, for modified values, the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> attribute should be used instead of the <a href="#events-KeyboardEvent-keyCode">KeyboardEvent.keyCode</a> attribute.</p> -->
           
-          <p>This specification does not define the <code class="attr-name">charCode</code> or <code class="attr-name">which</code> attributes on the <a href="#events-KeyboardEvent">KeyboardEvent</a> interface, though they may be present in <a class="def" href="#glossary-user-agent">user agents</a> for compatibility with legacy content.  The <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a> attribute should be used instead of the <code class="attr-name">charCode</code> attribute.</p>
+          <p>This specification does not define the <code class="attr-name">charCode</code>, <code class="attr-name">keyCode</code>, or <code class="attr-name">which</code> attributes on the <a href="#events-KeyboardEvent">KeyboardEvent</a> interface, though they may be present in <a class="def" href="#glossary-user-agent">user agents</a> for compatibility with legacy content.  Authors should use the <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a> and <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> attributes instead of the <code class="attr-name">charCode</code> and <code class="attr-name">keyCode</code> attributes, respectively.</p>
 
 
         </div>
@@ -6400,6 +6442,10 @@
         <h2><a id="references-References-Normative" href="#references-References-Normative">E.1 Normative References</a></h2>
 
         <dl>
+          <dt id="ref-BCP-47"><strong>[<a id="BCP-47">BCP-47</a>]</strong> Best Current Practice 47: Tags for Identifying Languages
+          </dt>
+          <dd>A. Phillips, M. Davis, Editors, September 2009. The specification for describing the structure, content, construction, and semantics of language tags to indicate the human language used. Available at <a href="http://www.rfc-editor.org/rfc/bcp/bcp47.txt">http://www.rfc-editor.org/rfc/bcp/bcp47.txt</a></dd>
+
           <dt>
             <strong>[<a id="references-charmod">CharMod</a>]</strong>
           </dt>
@@ -6430,7 +6476,7 @@
           </dt>
           <dd><cite>"OMG IDL Syntax and Semantics"</cite> defined in <cite><a href="http://www.omg.org/technology/documents/formal/corba_2.htm">The Common Object Request Broker: Architecture and Specification, version 2</a></cite>, Object Management Group. The latest version of CORBA version 2.0 is available at http://www.omg.org/technology/documents/formal/corba_2.htm.</dd>
 
-          <dt id="ref-rfc2119"><strong>[<a id="RFC2119">RFC2119</a>]</strong>Key words for use in RFCs to indicate Requirement Levels</dt>
+          <dt id="ref-rfc2119"><strong>[<a id="RFC2119">RFC2119</a>]</strong> Key words for use in RFCs to indicate Requirement Levels</dt>
           <dd>S Bradner, 1997. The specification for how to use English to specify normativity, as if it were a technical language. Available at <a href="http://rfc.net/rfc2119.html">http://rfc.net/rfc2119.html</a></dd>
 
           <dt><strong>[<a id="references-Unicode">Unicode</a>]</strong></dt>