substantially reworked key identifiers section, added new definitions, examples, and section on regex and unicode, updated references, fixed styles
authorschepers
Sun, 20 Sep 2009 17:24:22 +0900
changeset 203 a542b7bd3a54
parent 202 7a29a6b953f8
child 204 a0f1ff02e58c
substantially reworked key identifiers section, added new definitions, examples, and section on regex and unicode, updated references, fixed styles
html/DOM3-Events.html
--- a/html/DOM3-Events.html	Thu Sep 17 15:58:24 2009 +0900
+++ b/html/DOM3-Events.html	Sun Sep 20 17:24:22 2009 +0900
@@ -40,6 +40,13 @@
         padding: 1em;
       }
 
+      .inline {
+        display: inline;
+        border-left: none;
+        border-right: none;
+        padding: 0em;
+      }
+
       .value {
         color: #191970;
       }
@@ -160,11 +167,11 @@
       </p>
       <h1 id="Overview-title">Document Object Model (DOM) Level 3 Events Specification</h1>
 <!-- @@@ -->
-      <h2 id="Overview-W3C-doctype">W3C Editor's Draft <span class="date">17 September 2009</span></h2>
+      <h2 id="Overview-W3C-doctype">W3C Editor's Draft <span class="date">20 September 2009</span></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.88">http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html?rev=1.88</a>
+          <a href="http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html?rev=1.89">http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html?rev=1.89</a>
         </dd>
         <dt>Latest stable version:</dt>
         <dd>
@@ -172,7 +179,7 @@
         </dd>
         <dt>Previous version:</dt>
         <dd>
-          <a href="http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html?rev=1.87">http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html?rev=1.87</a>
+          <a href="http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html?rev=1.88">http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html?rev=1.88</a>
         </dd>
         <dt>Editor's Draft:</dt>
         <dd>
@@ -210,7 +217,7 @@
         knowledge of a patent which the individual believes contains <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#def-essential">Essential
         Claim(s)</a> must disclose the information in accordance with <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#sec-Disclosure">section
         6 of the W3C Patent Policy</a>.</p>
-      <p id="working-draft">This is the <span class="date">17 September 2009</span> Editor's Draft version of the "Document Object Model (DOM) Level 3 Events" specification.  This document was previously published as a W3C Note, pending further feedback from implementers, and is now being revised to reflect the current state of implementation.  It is expected that this specification will progress to Recommendation status.</p>
+      <p id="working-draft">This is the <span class="date">20 September 2009</span> Editor's Draft version of the "Document Object Model (DOM) Level 3 Events" specification.  This document was previously published as a W3C Note, pending further feedback from implementers, and is now being revised to reflect the current state of implementation.  It is expected that this specification will progress to Recommendation status.</p>
       <p id="this-document-is-produced-by-the-web-app">This document is produced
         by the <a href="http://www.w3.org/2008/webapps/">Web Applications WG</a>,
         part of the <a href="http://www.w3.org/2006/rwc/Activity">Rich Web
@@ -436,38 +443,36 @@
             </ul>
           </li>
           <li>
-            <a href="#keyset-comp-input">6.2 Compositional Keyboard Input</a>
+            <a href="#keyset-keyidentifiers">6.2 Key Identifiers</a>
             <ul class="toc">
               <li>
-                <a href="#keyset-Modifiers">6.2.1 Modifier keys</a>
+                <a href="#keyset-unicode">6.2.1 Key Identifiers and Unicode</a>
               </li>
               <li>
-                <a href="#keyset-DeadKeys">6.2.2 Dead keys</a>
+                <a href="#keyset-Modifiers">6.2.2 Modifier keys</a>
               </li>
               <li>
-                <a href="#keyset-IME">6.2.3 Input Method Editors</a>
+                <a href="#keyset-DeadKeys">6.2.3 Dead keys</a>
+              </li>
+              <li>
+                <a href="#keyset-IME">6.2.4 Input Method Editors</a>
                 <ul class="toc">
                   <li>
-                    <a href="#keyset-IME_keys">6.2.3.1 Input Method Editor mode keys</a>
+                    <a href="#keyset-IME_keys">6.2.4.1 Input Method Editor mode keys</a>
                   </li>
                 </ul>
               </li>
               <li>
-                <a href="#keyset-cancelable_keys">6.2.4 Default actions and cancelable keyboard events</a>
-              </li>
-            </ul>
-          </li>
-          <li>
-            <a href="#keyset-keyidentifiers">6.3 Key Identifiers</a>
-            <ul class="toc">
-              <li>
-                <a href="#keyset-Guide">6.2.5 Guidelines for defining key identifiers</a>
+                <a href="#keyset-cancelable_keys">6.2.5 Default actions and cancelable keyboard events</a>
               </li>
               <li>
-                <a href="#keyset-key-identifiers">6.3.1 Key Identifiers Set</a>
+                <a href="#keyset-Guide">6.2.6 Guidelines for defining key identifiers</a>
               </li>
               <li>
-                <a href="#keyset-keyCode-charCode">6.3.1 Key identifiers, keyCode, and charCode</a>
+                <a href="#keyset-key-identifiers">6.2.7 Key Identifiers Set</a>
+              </li>
+              <li>
+                <a href="#keyset-keyCode-charCode">6.2.8 Key identifiers, keyCode, and charCode</a>
               </li>
             </ul>
           </li>
@@ -570,6 +575,8 @@
             <p class="issue">@@ This is an open issue.</p>
           </div>
           <p>Feedback on features at risk, new features, and open issues is especially appreciated.</p>
+          
+          <p>In addition, certain terms are used in this specification with particular meanings.  The term "implementation" applies to a browser, authoring tool, or other user agent that implements this specification, while an author is a person who writes script or code that takes advantage of the interfaces, methods, attributes, events, and other features described in this specification in order to make Web applications, and a user is the person who uses those Web applications in an implementation.</p>
         </div>
 <!-- div3 Conformance -->
       </div>
@@ -578,9 +585,10 @@
       <div class="div1" id="glossary-glossary">
         <h1 class="glossary"><a id="glossary" href="#glossary">2. Glossary</a></h1>
         <p class="1st">Some of the following term definitions have been borrowed or modified from similar definitions in other W3C or standards documents. See the links within the definitions for more information.</p>
+        
         <dl id="glossary-list">
           <dt id="glossary-activation-behavior">activation behavior</dt>
-          <dd>The action taken when an <a class="def" href="#glossary-event">event</a>, typically initiated by users through an input device, causes an element to fulfill a defined role.  The role may be defined for that element by the host language, or by author-defined variables, or both.  The role for any given element may be a generic action, or may be unique to that element.  For example, the activation behavior of an HTML or SVG <code>&lt;a&gt;</code> element shall be to cause the user agent to traverse the link specified in the <code>href</code> attribute, with the further optional parameter of specifying the browsing context for the traversal (such as the current window or tab, a named window, or a new window); the activation behavior of an HTML <code>&lt;input&gt;</code> element with the <code>type</code> attribute value <code>submit</code> shall be to send the values of the form elements to an author-defined IRI by the author-defined HTTP method.</dd>
+          <dd>The action taken when an <a class="def" href="#glossary-event">event</a>, typically initiated by users through an input device, causes an element to fulfill a defined role.  The role may be defined for that element by the <a class="def" href="#glossary-host-language">host language</a>, or by author-defined variables, or both.  The role for any given element may be a generic action, or may be unique to that element.  For example, the activation behavior of an HTML or SVG <code>&lt;a&gt;</code> element shall be to cause the user agent to traverse the link specified in the <code>href</code> attribute, with the further optional parameter of specifying the browsing context for the traversal (such as the current window or tab, a named window, or a new window); the activation behavior of an HTML <code>&lt;input&gt;</code> element with the <code>type</code> attribute value <code>submit</code> shall be to send the values of the form elements to an author-defined IRI by the author-defined HTTP method.</dd>
 
           <dt id="glossary-bubbling-phase">bubbling phase</dt>
           <dd>The process by which an <a class="def" href="#glossary-event">event</a> can be handled by one of the target ancestors after being handled by the <a class="def" href="#glossary-target-node">target node</a>.</dd>
@@ -588,6 +596,9 @@
           <dt id="glossary-capture-phase">capture phase</dt>
           <dd>The process by which an <a class="def" href="#glossary-event">event</a> can be handled by one of the target ancestors before being handled by the <a class="def" href="#glossary-target-node">target node</a>.</dd>
 
+          <dt id="glossary-character-value">character value</dt>
+          <dd>In the context of key identifiers, a character value is a string representing a single character, such as a letter or symbol.</dd>
+
           <dt id="glossary-dead-key">dead key</dt>
           <dd>A dead key is a key or combination of key that produces no character by itself, but which in combination or sequence with another key produces a modified character, such as a character with diacritical marks (e.g. <code>&#xF6;</code>, <code>&#xE9;</code>, <code>&#xE2;</code>).</dd>
 
@@ -623,47 +634,69 @@
 
           <dt id="glossary-event-type">event type</dt>
           <dd>An <a class="def" href="#glossary-event">event</a> object which defines particular trigger conditions, properties, interfaces, and other characteristics which distinguish it from other event types.  For example, the <a class="eventtype" href="#event-type-click"><code>click</code></a> event type has different characteristics than the <a class="eventtype" href="#event-type-mouseover"><code>mouseover</code></a> or <a class="eventtype" href="#event-type-load"><code>load</code></a> event types. The event type is exposed as the <a href="#events-event-type-type"><code class="interface-attribute">type</code></a> attribute on the event object.  See <a href="#event-types">event types</a> for more details.  Also loosely referred to as 'event', such as the <em><a class="eventtype" href="#event-type-click"><code>click</code></a> event</em>.</dd>
+          
           <dt id="glossary-event-focus">focus</dt>
           <dd>Focus is a special state of receptivity and concentration on an particular element or other <a class="def" href="#glossary-event-target">event target</a> within a document.  Each element has different behavior when focused, depending on its functionality, such as priming the element for activation (as for a button or hyperlink) or toggling state (as for a checkbox), receiving text input (as for a text form field), or copying selected text.  For more details, see <a href="#events-uievent-doc-focus">Document Focus and Focus Context</a>.</dd>
+          
           <dt id="glossary-event-focus-ring">focus ring</dt>
-          <dd>A focus ring is a an ordered set of <a class="def" href="#glossary-event-focus">focus</a> targets within a document.  A host language may define one or more ways to determine the order of targets, such as document order, a numerical index defined per focus target, explicit pointers between focus targets, or a hybrid of different models.  Each document may contain multiple focus rings, or conditional focus rings.  Typically, for document-order or indexed focus rings, focus "wraps around" from the last focus target to the first.</dd>
+          <dd>A focus ring is a an ordered set of <a class="def" href="#glossary-event-focus">focus</a> targets within a document.  A <a class="def" href="#glossary-host-language">host language</a> may define one or more ways to determine the order of targets, such as document order, a numerical index defined per focus target, explicit pointers between focus targets, or a hybrid of different models.  Each document may contain multiple focus rings, or conditional focus rings.  Typically, for document-order or indexed focus rings, focus "wraps around" from the last focus target to the first.</dd>
+          
           <dt id="glossary-host-language">host language</dt>
-          <dd>Any language which integrates the features of another language, while normatively referencing the origin language rather than redefining those features, and extending those features only in ways defined by the origin language.  An origin language typically is only intended to be implemented in the context of one or more host languages, not as a standalone language.  For example, XHTML, HTML, and SVG are host languages for DOM 3 Events, and they integrate and extend the objects and models defined in this specification.</dd>
+          <dd>Any language which integrates the features of another language, while normatively referencing the origin language rather than redefining those features, and extending those features only in ways defined by the origin language.  An origin language typically is only intended to be implemented in the context of one or more <a class="def" href="#glossary-host-language">host languages</a>, not as a standalone language.  For example, XHTML, HTML, and SVG are <a class="def" href="#glossary-host-language">host languages</a> for DOM 3 Events, and they integrate and extend the objects and models defined in this specification.</dd>
+          
           <dt id="glossary-ime">IME</dt>
           <dt id="glossary-input-method-editor">input method editor</dt>
-          <dd>An <em>input method editor</em> (IME), also known as a <em>front end processor</em>, is an application that performs the conversion between keystrokes and ideographs or other characters, usually by user-guided dictionary lookup, often used in East Asian languages (e.g. Chinese, Japanese, Korean).  An IME may also be used for dictionary-based word completion, such as on mobile devices.  See <a href="#keyset-IME">Input Method Editors</a> for treatment of IMEs in this specification.  See also <a class="def" href="#glossary-text-composition-system">text composition system</a>.</dd>
+          <dd>An <em>input method editor</em> (IME), also known as a <em>front end processor</em>, is an application that performs the conversion between keystrokes and ideographs or other characters, usually by user-guided dictionary lookup, often used in East Asian languages (e.g. Chinese, Japanese, Korean).  An <a class="def" href="#glossary-ime">IME</a> may also be used for dictionary-based word completion, such as on mobile devices.  See <a href="#keyset-IME">Input Method Editors</a> for treatment of IMEs in this specification.  See also <a class="def" href="#glossary-text-composition-system">text composition system</a>.</dd>
+
+          <dt id="glossary-key-name">key name</dt>
+          <dd>In the context of key identifiers, a key name is a multi-character string (such as <code class="value">'Enter'</code>, <code class="value">'Tab'</code>, or <code class="value">'MediaNextTrack'</code>) which indicates a key.  Control keys, function keys, modifier keys, <a class="def" href="#glossary-dead-key">dead keys</a>, and others may only have a key name, without an equivalent <a class="def" href="#glossary-character-value">character value</a> or <a class="def" href="#glossary-unicode-code-point">Unicode code point</a>.
+            
+            such as <code class="value">'Enter'</code> or <code>tab</code>, for control or <a class="def" href="#glossary-character-value">character value</a>, or certain symbols).</dd>
+          
           <dt id="glossary-localname">local name</dt>
           <dd>See local name in [<cite><a class="noxref informative" href="#references-Namespaces11">XML Namespaces 1.1</a></cite>].</dd>
+          
           <dt id="glossary-namespaceURI">namespace URI</dt>
           <dd>A <em>namespace URI</em> is a URI that identifies an XML namespace. This is called the namespace name in [<cite><a class="noxref informative" href="#references-Namespaces11">XML Namespaces 1.1</a></cite>]. See also sections 1.3.2 "<a class="normative" href="http://www.w3.org/TR/DOM-Level-3-Core/core.html#baseURIs-Considerations"><em>DOM URIs</em></a>" and 1.3.3 "<a class="normative" href="http://www.w3.org/TR/DOM-Level-3-Core/core.html#Namespaces-Considerations"><em>XML Namespaces</em></a>" regarding URIs and namespace URIs handling and comparison in the DOM APIs.</dd>
+          
           <dt id="glossary-phase">phase</dt>
           <dd>In the context of <a class="def" href="#glossary-event">events</a>, a phase is set of logical traversals from node to node along the DOM tree, from the <a class="def" href="#glossary-root-element">root element</a> down to the <a class="def" href="#glossary-event-target">event target</a> (<a class="def" href="#glossary-capture-phase">capture phase</a>), at the <a class="def" href="#glossary-event-target">event target</a> itself (<a class="def" href="#glossary-target-phase">target phase</a>), and back up to the <a class="def" href="#glossary-root-element">root element</a> (<a class="def" href="#glossary-bubbling-phase">bubbling phase</a>).</dd>
+          
           <dt id="glossary-propagation-path">propagation path</dt>
           <dd>The ordered set of <a class="def" href="#glossary-event-target">event targets</a> though which an <a class="def" href="#glossary-event">event</a> object will pass sequentially on the way to and back from the ultimate <a class="def" href="#glossary-event-target">event target</a>.  The propagation path is initially comprised of one or more <a class="def" href="#glossary-event-phase">event phases</a> as defined by the <a class="def" href="#glossary-event-type">event type</a>, but may be interrupted.  Also known as an <em>event target chain</em>.</dd>
 
           <dt id="glossary-qwerty">QWERTY</dt>
-          <dd>QWERTY (pronounced "ˈkwɜrti") is a common keyboard layout, so named because the first five character keys on the top row of letter keys are Q, W, E, R, T, and Y.  There are many other popular keyboard layouts, most designed for localization or ergonomics.</dd>
+          <dd>QWERTY (pronounced "ˈkwɜrti") is a common keyboard layout, so named because the first five character keys on the top row of letter keys are Q, W, E, R, T, and Y.  There are many other popular keyboard layouts (including the popular Dvorak layout), most designed for localization or ergonomics.</dd>
 
           <dt id="glossary-roll">roll</dt>
           <dd>A unit of <a class="def" href="#events-Events-WheelEvent-rotation">rotation</a> for an input device using the <a href="#events-wheelevents">WheelEvent</a> interface. On some devices this may be a finite physical step. On devices with smooth <a class="def" href="#events-Events-WheelEvent-rotation">rotation</a>, a <a class="def" href="#glossary-roll">roll</a> becomes the smallest reported amount of <a class="def" href="#events-Events-WheelEvent-rotation">rotation</a>.</dd>
+          
+          <dt id="glossary-root-element">root element</dt>
+          <dd>The first element node of a document, of which all other elements are children; the document element.</dd>
 
           <dt id="events-Events-WheelEvent-rotation">rotation</dt>
           <dd>An indication of incremental change on an input device using the <a href="#events-wheelevents">WheelEvent</a> interface. On some devices this may be a literal rotation of a wheel, while on others, it may be movement along a flat surface, or pressure on a particular button.</dd>
 
           <dt id="glossary-target-node">target node</dt>
           <dd>The target node is the node representing the <a class="def" href="#glossary-event-target">event target</a> to which an <a class="def" href="#glossary-event">event</a> is targeted using the DOM event flow.</dd>
+          
           <dt id="glossary-text-composition-system">text composition system</dt>
           <dd>A software component which interprets some form of alternate input, such as a <a class="def" href="#glossary-ime">input method editor</a>, a speech processor, or a handwriting recognition system, and converts it to text.</dd>
-          <dt id="glossary-root-element">root element</dt>
-          <dd>The first element node of a document, of which all other elements are children; the document element.</dd>
+          
           <dt id="glossary-target-phase">target phase</dt>
           <dd>The process by which an <a class="def" href="#glossary-event">event</a> can be handled by the <a class="def" href="#glossary-event-target">event target</a>.</dd>
+          
           <dt id="glossary-topmost-event-target">topmost event target</dt>
-          <dd>The <a class="def" href="#glossary-topmost-event-target">topmost event target</a> shall be the element highest in the rendering order which is capable of being an <a class="def" href="#glossary-event-target">event target</a>.  In this case, 'top' shall refer not to the position on the screen, but the logical order of the element in relation to other elements in drawing or stacking order on the z-axis (where the x-axis is the screen width and the y-axis is the screen height).  In HTML and CSS, or in SVG, this is controlled by the document order, as modified in HTML and CSS by the 'z-index' property.  In some cases, such as when using some values of the SVG 'pointer-events' property, the topmost element may not receive pointer events, in which case, the next element in z-index order which can receive pointer-events is the <a class="def" href="#glossary-topmost-event-target">topmost event target</a>.  Note that visibility of the element does not necessarily affect its ability to be the <a class="def" href="#glossary-topmost-event-target">topmost event target</a>, since an element which is hidden by use of the CSS 'visibility' property can still receive pointer events (though not one with a 'display' property of 'none'), and the <a class="def" href="#glossary-topmost-event-target">topmost event target</a> may be completely obscured by another element which cannot receive pointer events.  Unless otherwise noted, there is only one <a class="def" href="#glossary-topmost-event-target">topmost event target</a> in any event.</dd>
+          <dd>The <a class="def" href="#glossary-topmost-event-target">topmost event target</a> shall be the element highest in the rendering order which is capable of being an <a class="def" href="#glossary-event-target">event target</a>.  In this case, 'top' shall refer not to the position on the screen, but the logical order of the element in relation to other elements in drawing or stacking order on the z-axis (where the x-axis is the screen width and the y-axis is the screen height).  In HTML and CSS, or in SVG, this is controlled by the document order, as modified in HTML and CSS by the <code>'z-index'</code> property.  In some cases, such as when using some values of the SVG <code>'pointer-events'</code> property, the topmost element may not receive pointer events, in which case, the next element in z-index order which can receive pointer-events is the <a class="def" href="#glossary-topmost-event-target">topmost event target</a>.  Note that visibility of the element does not necessarily affect its ability to be the <a class="def" href="#glossary-topmost-event-target">topmost event target</a>, since an element which is hidden by use of the CSS <code>'visibility'</code> property can still receive pointer events (though not one with a <code>'display'</code> property of <code>none</code>), and the <a class="def" href="#glossary-topmost-event-target">topmost event target</a> may be completely obscured by another element which cannot receive pointer events.  Unless otherwise noted, there is only one <a class="def" href="#glossary-topmost-event-target">topmost event target</a> in any event.</dd>
+          
           <dt id="glossary-tree">tree</dt>
           <dd>A data structure that represents a document as a hierarchical set of nodes with child-parent-sibling relationships, i.e. each node having one or more possible ancestors (nodes higher in the hierarchy in a direct lineage), one or more possible descendants (nodes lower in the hierarchy in a direct lineage), and one or more possible peers (nodes of the same level in the hierarchy, with the same immediate ancestor).</dd>
+          
           <dt id="glossary-Unicode-character-categories">Unicode character categories</dt>
           <dd>The Unicode character categories, a subset of the complete Unicode general categories, comprise the categories <abbr title="Letter, Lowercase">Ll</abbr>, <abbr title="Letter, Modifier">Lm</abbr>, <abbr title="Letter, Other">Lo</abbr>, <abbr title="Letter, Titlecase">Lt</abbr>, <abbr title="Letter, Uppercase">Lu</abbr>, <abbr title="Number, Decimal Digit">Nd</abbr>, <abbr title="Number, Letter">Nl</abbr>, <abbr title="Number, Other">No</abbr>, <abbr title="Punctuation, Connector">Pc</abbr>, <abbr title="Punctuation, Dash">Pd</abbr>, <abbr title="Punctuation, Close">Pe</abbr>, <abbr title="Punctuation, Final quote">Pf</abbr>, <abbr title="Punctuation, Initial quote">Pi</abbr>, <abbr title="Punctuation, Other">Po</abbr>, <abbr title="Punctuation, Open">Ps</abbr>, <abbr title="Symbol, Currency">Sc</abbr>, <abbr title="Symbol, Modifier">Sk</abbr>, <abbr title="Symbol, Math">Sm</abbr>, and <abbr title="Symbol, Other">So</abbr>.</dd>
+          
+          <dt id="glossary-unicode-code-point">Unicode code point</dt>
+          <dd>A Unicode code point is a unique hexadecimal number signifying a character by its index in the Unicode codespace (or library of characters).  In the context of key identifiers, a Unicode code point is expressed as a string in the format "U+" followed by a hexadecimal character index in the range <code>0000</code> to <code>10FFFF</code>, using at least four digits.</dd>
         </dl>
       </div>
 <!-- div1 glossary -->
@@ -740,6 +773,45 @@
         <p>When implementations dispatch a synthesized <a class="eventtype" href="#event-type-click"><code>click</code></a> event, the expectation shall be that they do so as <a class="def" href="#glossary-default-action">default action</a> of another event type. For example, when a user activates a hyperlink using a keyboard, the <code>click</code> event would be dispatched as <a class="def" href="#glossary-default-action">default action</a> of the respective keyboard event.</p>
         <p>Implementations are required to dispatch the synthesized <a class="eventtype" href="#event-type-click"><code>click</code></a> event as described above even if they do not dispatch such an event (e.g., when activation is requested by a voice command, since this specification does not address event types for voice input).</p>
         <p class="note"><strong>Note:</strong> The activation of an event target is device dependent but is also application dependent, e.g. a link in a document can be activated using a mouse click or a mouse double click.</p>
+        
+        
+       <!--
+       <h4 id="s-1.7.7.1-h4" class="div4">1.7.7.1 
+       Activation and default actions</h4><p>
+       	  The concept of activation (<code>{"http://www.w3.org/2001/xml-events",
+       	  "DOMActivate"}</code>) was introduced in [<a class="noxref normative" href="references.html#DOM2Events">DOM Level 2 Events</a>] to separate generic actions from the
+       	  devices used to activate them. For example, an hyperlink can
+       	  be activated using a mouse or a keyboard, and the activation
+       	  will force the user agent to follow the link. It is expected
+       	  that the action of following the link is done using a default
+       	  action attached to the hyperlink element. In such case, the
+       	  default action of the device event type is to trigger the
+       	  event type <code>{"http://www.w3.org/2001/xml-events",
+       	  "DOMActivate"}</code>. Preventing the default action of a
+       	  mouse click when the target node is an hyperlink will prevent
+       	  the activation. The same approach is made for control
+       	  elements.
+       	</p><p>
+       	  Implementations could react to an event before dispatching it
+       	  and do changes on the display and the DOM tree. In such case,
+       	  if a DOM attribute is changed before the event is fired,
+       	  cancelling the device event type will also reverse the
+       	  change. A good example is the attribute
+       	  <code>HTMLInputElement.checked</code>: As described in [<a class="noxref normative" href="references.html#DOM2HTML">DOM Level 2 HTML</a>], the value of this property may be changed
+       	  before the dispatch of the event; the user clicks on the radio
+       	  button, the radio button is being checked (or unchecked) on
+       	  the display, the attribute
+       	  <code>HTMLInputElement.checked</code> is changed as well, and
+       	  then the device event type <code>{"http://www.w3.org/2001/xml-events",
+       	  "click"}</code> is being dispatched. If the default action of
+       	  the device event type is prevented, or if the default action
+       	  attached to the <code>{"http://www.w3.org/2001/xml-events", "DOMActivate"}</code>
+
+       	  event type is prevented, the property
+       	  <code>HTMLInputElement.checked</code> will need to be changed
+       	  back to its original value.
+       	</p>
+       -->
       </div>
 <!-- div2 Events-flow-activation -->
 <!-- div2 Event-interfaces -->
@@ -1280,6 +1352,13 @@
                     <pre>
 // Introduced in DOM Level 2:
 interface <a class="noxref" href="#events-Events-DocumentEvent">DocumentEvent</a> {
+
+  // Introduced in DOM Level 3:
+  // KeyIdentifierFormatCode
+  const unsigned long       <a class="noxref" href="#events-DOM_KEY_FORMAT_CHARACTER">DOM_KEY_FORMAT_CHARACTER</a>      = 0x00;
+  const unsigned long       <a class="noxref" href="#events-DOM_KEY_FORMAT_NAME">DOM_KEY_FORMAT_NAME</a>          = 0x01;
+  const unsigned long       <a class="noxref" href="#events-DOM_KEY_FORMAT_UNICODE">DOM_KEY_FORMAT_UNICODE</a>         = 0x02;
+
   <a class="noxref" href="#events-Events-Event">Event</a>              <a class="noxref" href="#events-Events-DocumentEvent-createEvent">createEvent</a>(in DOMString eventType)
                                         raises(DOMException);
 <div class="atrisk">
@@ -1287,11 +1366,51 @@
   boolean            <a class="noxref" href="#events-Events-DocumentEvent-canDispatch">canDispatch</a>(in DOMString namespaceURI, 
                                  in DOMString type);
 </div>
+<div class="proposal">
+  // Introduced in DOM Level 3:
+  DOMString            <a class="noxref" href="#events-Events-DocumentEvent-convertKeyIdentifier">convertKeyIdentifier</a>(in DOMString keyIdentifierArg,
+                                 in unsigned long KeyIdentifierFormatArg);
+</div>
 };
 </pre>
                   </div>
                   <br />
                 </dd>
+                
+                <dt>
+                  <strong>Definition group <em><a id="events-Events-DocumentEvent-KeyIdentifierFormatCode">KeyIdentifierFormatCode</a></em></strong>
+                </dt>
+                <dd>
+                  <p>This set of constants shall be used to indicate the format to which the key identifier must be converted.</p>
+                  <dl>
+                    <dt>
+                      <strong>Defined Constants</strong>
+                    </dt>
+                    <dd>
+                      <dl>
+                        <dt>
+                          <a id="events-DOM_KEY_FORMAT_CHARACTER">
+                            <code class="constant-name">DOM_KEY_FORMAT_CHARACTER</code>
+                          </a>
+                        </dt>
+                        <dd>The format to which the key identifier must be converted is a character.</dd>
+                        <dt>
+                          <a id="events-DOM_KEY_FORMAT_NAME">
+                            <code class="constant-name">DOM_KEY_FORMAT_NAME</code>
+                          </a>
+                        </dt>
+                        <dd>The format to which the key identifier must be converted is a key name (as from the <a href="#keyset-key-identifiers">Key Identifiers Set</a>).</dd>
+                        <dt>
+                          <a id="events-DOM_KEY_FORMAT_UNICODE">
+                            <code class="constant-name">DOM_KEY_FORMAT_UNICODE</code>
+                          </a>
+                        </dt>
+                        <dd>The format to which the key identifier must be converted is a <a class="def" href="#glossary-unicode-code-point">Unicode code point</a>.</dd>
+                      </dl>
+                    </dd>
+                  </dl>
+                </dd>
+
                 <dt>
                   <strong>Methods</strong>
                 </dt>
@@ -1311,6 +1430,7 @@
                       </div>
 <!-- method -->
                     </dd>
+                    
                     <dt>
                       <code class="method-name">
                         <a id="events-Events-DocumentEvent-createEvent">createEvent</a>
@@ -1326,6 +1446,63 @@
                         <!-- exceptions --></div>
 <!-- method -->
                     </dd>
+                    
+
+                    <dt class="proposal">
+                      <code class="method-name">
+                        <a id="events-Events-DocumentEvent-convertKeyIdentifier">convertKeyIdentifier</a>
+                      </code>
+                    </dt>
+                    <dd class="proposal">
+                      <div class="method">
+                        Given a key identifier and the desired format, this method returns the equivalent key identifier in the specified format, if the key identifier exists in that format.
+                        <div class="parameters"><strong>Parameters</strong>
+                          <div class="paramtable">
+                            <dl>
+                              <dt><code class="parameter-name">keyIdentifier</code> of type <code>DOMString</code></dt>
+                              <dd>
+                                <p>The <code>keyIdentifier</code> parameter specifies the string to be converted, as a key identifier.   This parameter must be one of the following formats: a single character, a key name (as from the <a href="#keyset-key-identifiers">Key Identifiers Set</a>), or a <a class="def" href="#glossary-unicode-code-point">Unicode code point</a>.</p>
+                                <p>The key identifier need not be represent a value capable of being produced by the system keyboard  in order to be converted.  For example, this method may be used to find the <a class="def" href="#glossary-unicode-code-point">Unicode code point</a> of a Chinese ideographic glyph on a computer with only a <a class="def" href="#glossary-qwerty">QWERTY</a> keyboard and no <a class="def" href="#glossary-ime">IME</a> software.
+                                  <br />
+                                </p>
+                              </dd>
+                              <dt><code class="parameter-name">KeyIdentifierFormat</code> of type <code>unsigned long</code></dt>
+                              <dd>
+                                <p>The <code>KeyIdentifierFormat</code> parameter specifies the format to which the key identifier must be converted.
+                                  <br />
+                                </p>
+                              </dd>
+                            </dl>
+                          </div>
+                        </div>
+
+                        <!-- parameters -->
+                        <div class="return"><strong>Return Value</strong>
+                          <div class="returntable">
+                            <table summary="Layout table: the first cell contains the type of the return value, the second contains a short description" border="0">
+                              <tr>
+                                <td><p><a href="#events-Events-Event"><code>DOMString</code></a></p></td>
+                                <td><p>The key identifier in the converted format, or the empty string if no equivalent of the key identifier exists in the format indicated.</p></td>
+                              </tr>
+                            </table>
+                          </div>
+                        </div>
+                        <!-- return -->
+                        <div class="exceptions"><strong>Exceptions</strong>
+                          <div class="exceptiontable">None
+                            <!-- <table summary="Layout table: the first cell contains the type of the exception, the second contains the specific error code and a short description" border="0">
+                              <tr>
+                                <td><p><code>DOMException</code></p></td>
+                                <td><p>NOT_SUPPORTED_ERR: Raised if the implementation does not support the <a href="#events-Events-Event"><code>Event</code></a> interface requested.</p></td>
+                              </tr>
+                            </table> -->
+                          </div>
+                        </div>
+                        <!-- exceptions -->
+                      </div>
+      <!-- method -->
+                    </dd>
+                    
                   </dl>
                 </dd>
               </dl>
@@ -2167,7 +2344,7 @@
         
         <h4 class="div3 needswork"><a id="events-uievent-doc-focus" href="#events-uievent-doc-focus">5.2.1.2 Document Focus and Focus Context</a></h4>
         <p>This event module includes event types for notification of changes in document <a class="def" href="#glossary-event-focus">focus</a>.  Depending on the environment, document focus may be distinct from user agent focus and operating system focus; this is referred to as focus context.  For example, in a typical desktop browser environment, the operating system context focus may be on one of many different applications, one of which is the browser; when the browser has focus, the user may shift  the application context focus (such as with the tab key) among different browser user interface fields (e.g. the Web site location bar, a search field, etc.) before or after achieving document focus; once the document itself has focus, sequential shifting of focus will step through the focusable elements in the document.  The event types defined in this specification deal exclusively with document focus, and the <a class="def" href="#glossary-event-target">event target</a> identified in the event details must only be part of the document or documents in the window, never a part of the browser or operating system, even when switching from one focus context to another.</p>
-        <p>Normally, a document always has a focused element, even if it is the document element itself, and a persistent <a class="def" href="#glossary-event-focus-ring">focus ring</a>; when switching between focus contexts, the document's currently focused element and focus ring normally remain the their current state; for example, if a document has three focusable elements, with the second element focused, when a user changes operating system focus to another application and then back to the browser, the second element will still be focused within the document, and tabbing will change the focus to the third element.  A host language may define specific elements which may or may not receive focus, the conditions user which an element may receive focus, the means by which focus may be changed, and the order in which the focus changes.  For example, in some cases an element may be given focus by moving a pointer over it, while other circumstances may require a mouse click; some elements may not be focusable at all, and some may be focusable only by special means (clicking on the element), but not by tabbing to it.  Documents may contain multiple focus rings.  Other specifications may define a more complex focus model than is described in this specification, including allowing multiple elements to have the current focus.</p>
+        <p>Normally, a document always has a focused element, even if it is the document element itself, and a persistent <a class="def" href="#glossary-event-focus-ring">focus ring</a>; when switching between focus contexts, the document's currently focused element and focus ring normally remain the their current state; for example, if a document has three focusable elements, with the second element focused, when a user changes operating system focus to another application and then back to the browser, the second element will still be focused within the document, and tabbing will change the focus to the third element.  A <a class="def" href="#glossary-host-language">host language</a> may define specific elements which may or may not receive focus, the conditions user which an element may receive focus, the means by which focus may be changed, and the order in which the focus changes.  For example, in some cases an element may be given focus by moving a pointer over it, while other circumstances may require a mouse click; some elements may not be focusable at all, and some may be focusable only by special means (clicking on the element), but not by tabbing to it.  Documents may contain multiple focus rings.  Other specifications may define a more complex focus model than is described in this specification, including allowing multiple elements to have the current focus.</p>
 
 <!-- blur -->
         <div class="event-definition assert must">
@@ -2236,9 +2413,9 @@
             <dt id="event-type-focusin">
               <a class="eventtype noxref" href="#event-type-focusIn"><code>focusin</code></a>
             </dt>
-            <dd><table border="0" summary="This table contains information about the semantics of the given event type" cellpadding="2" cellspacing="0"><tr class="assert must"><th>Type</th><td class="eventname"><strong><code>DOMFocusIn</code></strong></td></tr><tr class="assert must"><th>Interface</th><td><a href="#events-Events-UIEvent"><code>UIEvent</code></a></td></tr><tr class="assert must"><th>Bubbles</th><td>Yes</td></tr><tr class="assert must"><th>Target</th><td><code>Element</code></td></tr><tr class="assert must"><th>Cancelable</th><td>No</td></tr><tr class="assert must"><th>Default action</th><td>none</td></tr><tr class="assert must"><th>Context info</th><td><a href="#events-Events-UIEvent-view"><code>UIEvent.view</code></a> is in use.  The value of the <code class="attribute-name"><a id="events-event-type-target">Event.target</a></code> property is is the <a class="def" href="#glossary-event-target">event target</a> receiving focus, and the value of the <code class="attribute-name"><a id="events-event-type-currentTarget">Event.currentTarget</a></code> property is the <a class="def" href="#glossary-event-target">event target</a> losing focus (if any).</td></tr></table>
+            <dd><table border="0" summary="This table contains information about the semantics of the given event type" cellpadding="2" cellspacing="0"><tr class="assert must"><th>Type</th><td class="eventname"><strong><code>DOMFocusIn</code></strong></td></tr><tr class="assert must"><th>Interface</th><td><a href="#events-Events-UIEvent"><code>UIEvent</code></a></td></tr><tr class="assert must"><th>Bubbles</th><td>Yes</td></tr><tr class="assert must"><th>Target</th><td><code>Element</code></td></tr><tr class="assert must"><th>Cancelable</th><td>No</td></tr><tr class="assert must"><th>Default action</th><td>none</td></tr><tr class="assert must"><th>Context info</th><td><a href="#events-Events-UIEvent-view"><code>UIEvent.view</code></a> is in use.  The value of the <code class="attribute-name"><a id="events-event-type-target">Event.target</a></code> attribute is is the <a class="def" href="#glossary-event-target">event target</a> receiving focus, and the value of the <code class="attribute-name"><a id="events-event-type-currentTarget">Event.currentTarget</a></code> attribute is the <a class="def" href="#glossary-event-target">event target</a> losing focus (if any).</td></tr></table>
               A user agent must dispatch this event when an <a class="def" href="#glossary-event-target">event target</a> is about to receive focus. This event type must be dispatched before the element is given focus.  The <a class="def" href="#glossary-event-target">event target</a> must be the element which is about to receive focus.  This event type is similar to <a class="eventtype" href="#event-type-focus"><code>focus</code></a>, but is dispatched before focus is shifted, and does bubble..
-              <p class="note"><strong>Note:</strong> When using this event type, the author may use the event's <code class="attribute-name"><a id="events-event-type-currentTarget">Event.currentTarget</a></code> property (or a host-language-specific method or means) to get the currently focused element before the focus shifts to the next focus <a class="def" href="#glossary-event-target">event target</a>, thus having optional access to both the element losing focus and the element gaining focus without the use of the <a class="eventtype" href="#event-type-blur"><code>blur</code></a> or <a class="eventtype" href="#event-type-focusout">focusout</a> event types.</p>
+              <p class="note"><strong>Note:</strong> When using this event type, the author may use the event's <code class="attribute-name"><a id="events-event-type-currentTarget">Event.currentTarget</a></code> attribute (or a host-language-specific method or means) to get the currently focused element before the focus shifts to the next focus <a class="def" href="#glossary-event-target">event target</a>, thus having optional access to both the element losing focus and the element gaining focus without the use of the <a class="eventtype" href="#event-type-blur"><code>blur</code></a> or <a class="eventtype" href="#event-type-focusout">focusout</a> event types.</p>
             </dd>
           </dl>
         </div>
@@ -2249,7 +2426,7 @@
             <dt id="event-type-focusout">
               <a class="eventtype noxref" href="#event-type-focusOut"><code>focusout</code></a>
             </dt>
-            <dd><table border="0" summary="This table contains information about the semantics of the given event type" cellpadding="2" cellspacing="0"><tr class="assert must"><th>Type</th><td class="eventname"><strong><code>DOMFocusOut</code></strong></td></tr><tr class="assert must"><th>Interface</th><td><a href="#events-Events-UIEvent"><code>UIEvent</code></a></td></tr><tr class="assert must"><th>Bubbles</th><td>Yes</td></tr><tr class="assert must"><th>Target</th><td><code>Element</code></td></tr><tr class="assert must"><th>Cancelable</th><td>No</td></tr><tr class="assert must"><th>Default action</th><td>none</td></tr><tr class="assert must"><th>Context info</th><td><a href="#events-Events-UIEvent-view"><code>UIEvent.view</code></a> is in use.  The value of the <code class="attribute-name"><a id="events-event-type-target">Event.target</a></code> property is is the <a class="def" href="#glossary-event-target">event target</a> losing focus, and the value of the <code class="attribute-name"><a id="events-event-type-currentTarget">Event.currentTarget</a></code> property is the <a class="def" href="#glossary-event-target">event target</a> receiving focus.</td></tr></table>
+            <dd><table border="0" summary="This table contains information about the semantics of the given event type" cellpadding="2" cellspacing="0"><tr class="assert must"><th>Type</th><td class="eventname"><strong><code>DOMFocusOut</code></strong></td></tr><tr class="assert must"><th>Interface</th><td><a href="#events-Events-UIEvent"><code>UIEvent</code></a></td></tr><tr class="assert must"><th>Bubbles</th><td>Yes</td></tr><tr class="assert must"><th>Target</th><td><code>Element</code></td></tr><tr class="assert must"><th>Cancelable</th><td>No</td></tr><tr class="assert must"><th>Default action</th><td>none</td></tr><tr class="assert must"><th>Context info</th><td><a href="#events-Events-UIEvent-view"><code>UIEvent.view</code></a> is in use.  The value of the <code class="attribute-name"><a id="events-event-type-target">Event.target</a></code> attribute is is the <a class="def" href="#glossary-event-target">event target</a> losing focus, and the value of the <code class="attribute-name"><a id="events-event-type-currentTarget">Event.currentTarget</a></code> attribute is the <a class="def" href="#glossary-event-target">event target</a> receiving focus.</td></tr></table>
               A user agent must dispatch this event when an <a class="def" href="#glossary-event-target">event target</a> is about to lose focus. This event type must be dispatched before the element loses focus.  The <a class="def" href="#glossary-event-target">event target</a> must be the element which is about to lose focus.  This event type is similar to <a class="eventtype" href="#event-type-blur"><code>blur</code></a>, but is dispatched before focus is shifted, and does bubble..
             </dd>
           </dl>
@@ -2428,7 +2605,7 @@
   readonly attribute boolean         <a class="noxref" href="#events-Events-MouseEvent-shiftKey">shiftKey</a>;
   readonly attribute boolean         <a class="noxref" href="#events-Events-MouseEvent-altKey">altKey</a>;
   readonly attribute boolean         <a class="noxref" href="#events-Events-MouseEvent-metaKey">metaKey</a>;
-  readonly attribute unsigned short  <a class="noxref" href="#events-Events-MouseEvent-button">button</a>;
+  readonly attribute unsigned short  <a class="noxref" href="#events-Events-MouseEvent-button">button</a>;  <!-- readonly attribute unsigned short  <a class="noxref" href="#events-Events-MouseEvent-buttons">buttons</a>; -->
   readonly attribute <a class="noxref" href="#events-Events-EventTarget">EventTarget</a>     <a class="noxref" href="#events-Events-MouseEvent-relatedTarget">relatedTarget</a>;
   void               <a class="noxref" href="#events-event-type-initMouseEvent">initMouseEvent</a>(in DOMString typeArg, 
                                 in boolean canBubbleArg, 
@@ -2476,7 +2653,18 @@
                 <dt><code class="attribute-name"><a id="events-Events-MouseEvent-altKey">altKey</a></code> of type <code>boolean</code>, readonly</dt>
                 <dd>Refer to the <a href="#events-Events-KeyboardEvent-altKey"><code>KeyboardEvent.altKey</code></a> attribute.<br /></dd>
                 <dt><code class="attribute-name"><a id="events-Events-MouseEvent-button">button</a></code> of type <code>unsigned short</code>, readonly</dt>
-                <dd>During mouse events caused by the depression or release of a mouse button, <code>button</code> shall be used to indicate which mouse button changed state. <code>0</code> indicates the normal button of the mouse (in general on the left or the one button on Macintosh mice, used to activate a button or select text). <code>2</code> indicates the contextual property (in general on the right, used to display a context menu) button of the mouse if present. <code>1</code> indicates the extra (in general in the middle and often combined with the mouse wheel) button. Some mice may provide or simulate more buttons, and values higher than <code>2</code> can be used to represent such buttons.<br /></dd>
+                <dd>During mouse events caused by the depression or release of a mouse button, <code>button</code> shall be used to indicate which pointer device button changed state. <code>0</code> must indicate the primary button of the device (in general, the left button  or the only button on single-button devices, used to activate a user interface control or select text). <code>2</code> must indicate the secondary button (in general, the right button, often used to display a context menu). <code>1</code> must indicate the auxiliary button (in general, the middle button, often combined with a mouse wheel).  Some mice may provide or simulate more buttons, and values higher than <code>2</code> may be used to represent such buttons.<br /></dd>
+                
+                <!-- 
+                <dt><code class="attribute-name"><a id="events-Events-MouseEvent-buttons">buttons</a></code> of type <code>unsigned short</code>, readonly</dt>
+                <dd>During mouse events caused by the depression or release of a mouse button, <code>buttons</code> shall be used to indicate which combination of mouse buttons are currently being pressed, expressed as a bitmask.  <span class="note"><strong>Note:</strong> This should not be confused with the <a class="noxref" href="#events-Events-MouseEvent-button">button</a> attribute.</span>
+                <code>0</code> must indicates no button is currently active.
+                <code>1</code> must indicate the primary button of the device (in general, the left button  or the only button on single-button devices, used to activate a user interface control or select text).
+                <code>2</code> must indicate the secondary button (in general, the right button, often used to display a context menu), if present.
+                <code>4</code> must indicate the auxiliary button (in general, the middle button, often combined with a mouse wheel).
+                Some pointer devices may provide or simulate more buttons.  To represent such buttons, the value must be doubled for each successive button (in the binary series <code>8</code>, <code>16</code>, <code>32</code>, ... ), and the buttons should alternate sides of the device, from left to right.  For example, with a 5-button mouse, the primary button (on the left) would have the value <code>1</code>, the secondary button (on the right) would have the value <code>2</code>, the auxiliary button (in the middle) would have the value <code>4</code>, the fourth button (on the left) would have the value <code>8</code>, and the fifth button (on the right) would have the value <code>16</code>.  Because no the sum of any set of button values is a unique number, an author can use a bitwise operation to determine how many buttons are currently being pressed and which buttons they are, for an arbitrary number of mouse buttons on a device, e.g. the value <code>3</code> indicates that the left and right button are currently both pressed, while the value <code>5</code> indicates that the left and middle button are currently both pressed.                  
+                -->
+                
                 <dt><code class="attribute-name"><a id="events-Events-MouseEvent-clientX">clientX</a></code> of type <code>long</code>, readonly</dt>
                 <dd>The horizontal coordinate at which the event occurred relative to the viewport associated with the event.<br /></dd>
                 <dt><code class="attribute-name"><a id="events-Events-MouseEvent-clientY">clientY</a></code> of type <code>long</code>, readonly</dt>
@@ -3388,12 +3576,31 @@
           <li>If the key is depressed for a sustained period, the following events may repeat at an environment-dependent rate:
             <!-- and the key should seek counseling -->
             <ul>
-              <li><a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> (with <a href="#events-Events-KeyboardEvent-repeat">repeat</a> property set to <code class="value">true</code>)</li>
-              <li><a class="eventtype" href="#event-type-keypress"><code>keypress</code></a> (with <a href="#events-Events-KeyboardEvent-repeat">repeat</a> property set to <code class="value">true</code>)</li>
+              <li><a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> (with <a href="#events-Events-KeyboardEvent-repeat">repeat</a> attribute set to <code class="value">true</code>)</li>
+              <li><a class="eventtype" href="#event-type-keypress"><code>keypress</code></a> (with <a href="#events-Events-KeyboardEvent-repeat">repeat</a> attribute set to <code class="value">true</code>)</li>
             </ul>
           </li>
           <li><a class="eventtype" href="#event-type-keyup"><code>keyup</code></a></li>
-        </ol>        
+        </ol>
+        
+        <p>Keys associated with a <a class="def" href="#glossary-character-value">character value</a> must, under normal circumstances, produce a <a class="eventtype" href="#event-type-textInput"><code>textInput</code></a> event as well.  The order of text events relative to keyboard events is as follows:</p>
+        <ol>
+          <li><a class="eventtype" href="#event-type-keydown"><code>keydown</code></a></li>
+          <li><a class="eventtype" href="#event-type-keypress"><code>keypress</code></a></li>
+          <li>If a <a class="def" href="#glossary-character-value">character value</a> is produced, <a class="eventtype" href="#event-type-textInput"><code>textInput</code></a></li>
+          <li>If the key is depressed for a sustained period, the following events may repeat at an environment-dependent rate:
+            <!-- and the key should seek counseling -->
+            <ul>
+              <li><a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> (with <a href="#events-Events-KeyboardEvent-repeat">repeat</a> attribute set to <code class="value">true</code>)</li>
+              <li><a class="eventtype" href="#event-type-keypress"><code>keypress</code></a> (with <a href="#events-Events-KeyboardEvent-repeat">repeat</a> attribute set to <code class="value">true</code>)</li>
+              <li>If a <a class="def" href="#glossary-character-value">character value</a> is produced, <a class="eventtype" href="#event-type-textInput"><code>textInput</code></a></li>
+            </ul>
+          </li>
+          <li><a class="eventtype" href="#event-type-keyup"><code>keyup</code></a></li>
+        </ol>
+        
+        <p class="warning"><strong>Warning:</strong> Because of hardware limitations, on some keyboard devices, the order between the text event and keyboard events may differ.  For example, some mobile devices may dispatch the <a class="eventtype" href="#event-type-textInput"><code>textInput</code></a> event after the <a class="eventtype" href="#event-type-keyup"><code>keyup</code></a> event.</p>
+                
 <text id="text_1" x="10" y="25" font-size="18" fill="crimson" text-anchor="middle"></text>
 
 <!-- keydown -->
@@ -3405,9 +3612,9 @@
             <dd><table border="0" summary="This table contains information about the semantics of the given event type" cellpadding="2" cellspacing="0"><tr class="assert must"><th>Type</th><td class="eventname"><strong><code>keydown</code></strong></td></tr><tr class="assert must"><th>Interface</th><td><a href="#events-Events-KeyboardEvent"><code>KeyboardEvent</code></a></td></tr><tr class="assert must"><th>Bubbles</th><td>Yes</td></tr><tr class="assert must"><th>Target</th><td><code>Element</code></td></tr><tr class="assert must"><th>Cancelable</th><td>Yes</td></tr><tr class="assert must"><th>Default action</th><td>Varies: <a class="eventtype" href="#event-type-textInput"><code>textInput</code></a> event; launch <a class="def" href="#glossary-text-composition-system">text composition system</a>; <a class="eventtype" href="#event-type-blur"><code>blur</code></a> and <a class="eventtype" href="#event-type-focus"><code>focus</code></a> events; <a class="eventtype" href="#event-type-DOMActivate"><code>DOMActivate</code></a> event; other event</td></tr><tr class="assert must"><th>Context info</th><td><a href="#events-Events-UIEvent-view"><code>UIEvent.view</code></a>, <a href="#events-Events-KeyboardEvent-keyIdentifier"><code>KeyboardEvent.keyIdentifier</code></a>, <a href="#events-Events-KeyboardEvent-keylocation"><code>KeyboardEvent.keyLocation</code></a>, <a href="#events-Events-KeyboardEvent-altKey"><code>KeyboardEvent.altKey</code></a>, <a href="#events-Events-KeyboardEvent-shiftKey"><code>KeyboardEvent.shiftKey</code></a>, <a href="#events-Events-KeyboardEvent-ctrlKey"><code>KeyboardEvent.ctrlKey</code></a>, <a href="#events-Events-KeyboardEvent-metaKey"><code>KeyboardEvent.metaKey</code></a>, and <a href="#events-Events-KeyboardEvent-repeat"><code>KeyboardEvent.repeat</code></a> are in use.</td></tr></table>
                A user agent must dispatch this event when a key is pressed down. The <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> event type is device dependent and relies on the capabilities of the input devices and how they are mapped in the operating system. This event type shall be generated after the keyboard mapping but before the processing of an <a class="def" href="#glossary-ime">input method editor</a>, normally associated with the dispatching of a <a class="eventtype" href="#event-type-compositionstart"><code>compositionstart</code></a>, <a class="eventtype" href="#event-type-compositionupdate"><code>compositionupdate</code></a>, or <a class="eventtype" href="#event-type-compositionend"><code>compositionend</code></a> event. This event type must be dispatched before the <a class="eventtype" href="#event-type-compositionstart"><code>keypress</code></a> and <a class="eventtype" href="#event-type-keyup"><code>keyup</code></a> events event associated with the same key.  Whether or not a <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> contributes to the generation of a text event is implementation dependent.
                
-               <p>The default action of the <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> event depends upon the key: if the key is associated with a character, the default action is to dispatch a <a class="eventtype" href="#event-type-textInput"><code>textInput</code></a> event with the character as the value of the <a href="#events-Events-TextEvent-data"><code>TextEvent.data</code></a> attribute; if the key is associated with a <a class="def" href="#glossary-text-composition-system">text composition system</a>, the default action is to launch that system; if the key is the <code>tab</code> key, the default action is to dispatch a <a class="eventtype" href="#event-type-blur"><code>blur</code></a> event with the currently focused element (if any) as the value of the <a href="#events-event-type-target">Event.target</a> attribute, followed by a <a class="eventtype" href="#event-type-focus"><code>focus</code></a> event with the new focused element as the value of the <a href="#events-event-type-target">Event.target</a> attribute; if the key is the <code>enter</code> key and the current focus is on a state-changing element, the default action is to dispatch a <a class="eventtype" href="#event-type-DOMActivate"><code>DOMActivate</code></a> event; if the key is associated with any other event type, such as the <a class="eventtype" href="#event-type-scroll"><code>scroll</code></a> event, the default action is to dispatch an event of that type.  If this event is canceled, the associated events types must not be dispatched, and the associated actions must not be performed.</p>
-
-              <p class="note"><strong>Note:</strong> the <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> and <a class="eventtype" href="#event-type-keyup"><code>keyup</code></a> events are traditionally associated with detecting a physical key rather than a character value.</p></dd>
+               <p>The default action of the <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> event depends upon the key: if the key is associated with a character, the default action is to dispatch a <a class="eventtype" href="#event-type-textInput"><code>textInput</code></a> event with the character as the value of the <a href="#events-Events-TextEvent-data"><code>TextEvent.data</code></a> attribute; if the key is associated with a <a class="def" href="#glossary-text-composition-system">text composition system</a>, the default action is to launch that system; if the key is the <code>tab</code> key, the default action is to dispatch a <a class="eventtype" href="#event-type-blur"><code>blur</code></a> event with the currently focused element (if any) as the value of the <a href="#events-event-type-target">Event.target</a> attribute, followed by a <a class="eventtype" href="#event-type-focus"><code>focus</code></a> event with the new focused element as the value of the <a href="#events-event-type-target">Event.target</a> attribute; if the key is the <code class="value">'Enter'</code> key and the current focus is on a state-changing element, the default action is to dispatch a <a class="eventtype" href="#event-type-DOMActivate"><code>DOMActivate</code></a> event; if the key is associated with any other event type, such as the <a class="eventtype" href="#event-type-scroll"><code>scroll</code></a> event, the default action is to dispatch an event of that type.  If this event is canceled, the associated events types must not be dispatched, and the associated actions must not be performed.</p>
+
+              <p class="note"><strong>Note:</strong> the <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> and <a class="eventtype" href="#event-type-keyup"><code>keyup</code></a> events are traditionally associated with detecting a physical key rather than a <a class="def" href="#glossary-character-value">character value</a>.</p></dd>
           </dl>
         </div>
 
@@ -3420,9 +3627,9 @@
             <dd><table border="0" summary="This table contains information about the semantics of the given event type" cellpadding="2" cellspacing="0"><tr class="assert must"><th>Type</th><td class="eventname"><strong><code>keypress</code></strong></td></tr><tr class="assert must"><th>Interface</th><td><a href="#events-Events-KeyboardEvent"><code>KeyboardEvent</code></a></td></tr><tr class="assert must"><th>Bubbles</th><td>Yes</td></tr><tr class="assert must"><th>Target</th><td><code>Element</code></td></tr><tr class="assert must"><th>Cancelable</th><td>Yes</td></tr><tr class="assert must"><th>Default action</th><td>Varies: <a class="eventtype" href="#event-type-textInput"><code>textInput</code></a> event; launch <a class="def" href="#glossary-text-composition-system">text composition system</a>; <a class="eventtype" href="#event-type-blur"><code>blur</code></a> and <a class="eventtype" href="#event-type-focus"><code>focus</code></a> events; <a class="eventtype" href="#event-type-DOMActivate"><code>DOMActivate</code></a> event; other event</td></tr><tr class="assert must"><th>Context info</th><td><a href="#events-Events-UIEvent-view"><code>UIEvent.view</code></a>, <a href="#events-Events-KeyboardEvent-keyIdentifier"><code>KeyboardEvent.keyIdentifier</code></a>, <a href="#events-Events-KeyboardEvent-keylocation"><code>KeyboardEvent.keyLocation</code></a>, <a href="#events-Events-KeyboardEvent-altKey"><code>KeyboardEvent.altKey</code></a>, <a href="#events-Events-KeyboardEvent-shiftKey"><code>KeyboardEvent.shiftKey</code></a>, <a href="#events-Events-KeyboardEvent-ctrlKey"><code>KeyboardEvent.ctrlKey</code></a>, <a href="#events-Events-KeyboardEvent-metaKey"><code>KeyboardEvent.metaKey</code></a>, and <a href="#events-Events-KeyboardEvent-repeat"><code>KeyboardEvent.repeat</code></a> are in use.</td></tr></table>
                A user agent must dispatch this event when a key is pressed down. The <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> event type is device dependent and relies on the capabilities of the input devices and how they are mapped in the operating system. This event type shall be generated after the keyboard mapping but before the processing of an <a class="def" href="#glossary-ime">input method editor</a>, normally associated with the dispatching of a <a class="eventtype" href="#event-type-compositionstart"><code>compositionstart</code></a>, <a class="eventtype" href="#event-type-compositionupdate"><code>compositionupdate</code></a>, or <a class="eventtype" href="#event-type-compositionend"><code>compositionend</code></a> event. This event type must be dispatched after the <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> event and before the <a class="eventtype" href="#event-type-keyup"><code>keyup</code></a> event associated with the same key.
 
-               <p>The default action of the <a class="eventtype" href="#event-type-keypress"><code>keypress</code></a> event depends upon the key and the context: if the key is associated with a character, and if there currently focused element in the document can receive text (such as a form input or an editable text block), the default action is to dispatch a <a class="eventtype" href="#event-type-textInput"><code>textInput</code></a> event with the character as the value of the <a href="#events-Events-TextEvent-data"><code>TextEvent.data</code></a> attribute; if the key is associated with a <a class="def" href="#glossary-text-composition-system">text composition system</a>, the default action is to launch that system; if the key is the <code>tab</code> key, the default action is to dispatch a <a class="eventtype" href="#event-type-focusout"><code>focusout</code></a>, <a class="eventtype" href="#event-type-blur"><code>blur</code></a>, and <a class="eventtype" href="#event-type-DOMFocusOut"><code>DOMFocusOut</code></a> events with the currently focused element (if any) as the value of the <a href="#events-event-type-target">Event.target</a> attribute, followed by a <a class="eventtype" href="#event-type-focusin"><code>focusin</code></a>, <a class="eventtype" href="#event-type-focus"><code>focus</code></a>, and <a class="eventtype" href="#event-type-DOMFocusIn"><code>DOMFocusIn</code></a> events with the new focused element as the value of the <a href="#events-event-type-target">Event.target</a> attribute; if the key is the <code>enter</code> key and the current focus is on a state-changing element, the default action is to dispatch a <a class="eventtype" href="#event-type-DOMActivate"><code>DOMActivate</code></a> event; if the key is associated with any other event type, such as the <a class="eventtype" href="#event-type-scroll"><code>scroll</code></a> event, the default action is to dispatch an event of that type.  If this event is canceled, the associated events types must not be dispatched, and the associated actions must not be performed.</p>
-
-              <p class="note"><strong>Note:</strong> the <a class="eventtype" href="#event-type-keypress"><code>keypress</code></a> event is traditionally associated with detecting a character value rather than a physical key, and may not be available on all keys in some configurations.</p>
+               <p>The default action of the <a class="eventtype" href="#event-type-keypress"><code>keypress</code></a> event depends upon the key and the context: if the key is associated with a character, and if there currently focused element in the document can receive text (such as a form input or an editable text block), the default action is to dispatch a <a class="eventtype" href="#event-type-textInput"><code>textInput</code></a> event with the character as the value of the <a href="#events-Events-TextEvent-data"><code>TextEvent.data</code></a> attribute; if the key is associated with a <a class="def" href="#glossary-text-composition-system">text composition system</a>, the default action is to launch that system; if the key is the <code>tab</code> key, the default action is to dispatch a <a class="eventtype" href="#event-type-focusout"><code>focusout</code></a>, <a class="eventtype" href="#event-type-blur"><code>blur</code></a>, and <a class="eventtype" href="#event-type-DOMFocusOut"><code>DOMFocusOut</code></a> events with the currently focused element (if any) as the value of the <a href="#events-event-type-target">Event.target</a> attribute, followed by a <a class="eventtype" href="#event-type-focusin"><code>focusin</code></a>, <a class="eventtype" href="#event-type-focus"><code>focus</code></a>, and <a class="eventtype" href="#event-type-DOMFocusIn"><code>DOMFocusIn</code></a> events with the new focused element as the value of the <a href="#events-event-type-target">Event.target</a> attribute; if the key is the <code class="value">'Enter'</code> key and the current focus is on a state-changing element, the default action is to dispatch a <a class="eventtype" href="#event-type-DOMActivate"><code>DOMActivate</code></a> event; if the key is associated with any other event type, such as the <a class="eventtype" href="#event-type-scroll"><code>scroll</code></a> event, the default action is to dispatch an event of that type.  If this event is canceled, the associated events types must not be dispatched, and the associated actions must not be performed.</p>
+
+              <p class="note"><strong>Note:</strong> the <a class="eventtype" href="#event-type-keypress"><code>keypress</code></a> event is traditionally associated with detecting a <a class="def" href="#glossary-character-value">character value</a> rather than a physical key, and may not be available on all keys in some configurations.</p>
               <p class="warning"><strong>Warning:</strong> the <a class="eventtype" href="#event-type-keypress"><code>keypress</code></a> event type is defined in this specification for reference and completeness, but this specification <a class="def" href="#glossary-deprecated">deprecates</a> the use of this event type.</p>
             </dd>
           </dl>
@@ -3437,7 +3644,7 @@
             <dd><table border="0" summary="This table contains information about the semantics of the given event type" cellpadding="2" cellspacing="0"><tr class="assert must"><th>Type</th><td class="eventname"><strong><code>keyup</code></strong></td></tr><tr class="assert must"><th>Interface</th><td><a href="#events-Events-KeyboardEvent"><code>KeyboardEvent</code></a></td></tr><tr class="assert must"><th>Bubbles</th><td>Yes</td></tr><tr class="assert must"><th>Target</th><td><code>Element</code></td></tr><tr class="assert must"><th>Cancelable</th><td>Yes</td></tr><tr class="assert must"><th>Default action</th><td>none</td></tr><tr class="assert must"><th>Context info</th><td><a href="#events-Events-UIEvent-view"><code>UIEvent.view</code></a>, <a href="#events-Events-KeyboardEvent-keyIdentifier"><code>KeyboardEvent.keyIdentifier</code></a>, and <a href="#events-Events-KeyboardEvent-keylocation"><code>KeyboardEvent.keyLocation</code></a> are in use. <a href="#events-Events-KeyboardEvent-altKey"><code>KeyboardEvent.altKey</code></a>, <a href="#events-Events-KeyboardEvent-shiftKey"><code>KeyboardEvent.shiftKey</code></a>, <a href="#events-Events-KeyboardEvent-ctrlKey"><code>KeyboardEvent.ctrlKey</code></a>, and <a href="#events-Events-KeyboardEvent-metaKey"><code>KeyboardEvent.metaKey</code></a> are in use unless the <a class="noxref" href="#events-Events-KeyboardEvent-keyIdentifier"><code>KeyboardEvent.keyIdentifier</code></a> corresponds to the key modifier itself.</td></tr></table>
                A user agent must dispatch this event when a key is released.  The <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> event type is device dependent and relies on the capabilities of the input devices and how they are mapped in the operating system.  This event type shall be generated after the keyboard mapping. This event type must be dispatched after the <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> and <a class="eventtype" href="#event-type-keypress"><code>keypress</code></a> events event associated with the same key.  Whether or not a <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> contributes to the generation of a text event is implementation dependent.
 
-              <p class="note"><strong>Note:</strong> the <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> and <a class="eventtype" href="#event-type-keyup"><code>keyup</code></a> events are traditionally associated with detecting a physical key rather than a character value.</p></dd>
+              <p class="note"><strong>Note:</strong> the <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> and <a class="eventtype" href="#event-type-keyup"><code>keyup</code></a> events are traditionally associated with detecting a physical key rather than a <a class="def" href="#glossary-character-value">character value</a>.</p></dd>
           </dl>
         </div>
       </div>
@@ -3449,7 +3656,7 @@
         <p>This module defines the feature CompositionEvents 3.0 and depends on the feature UIEvents 3.0.</p>
         <p>Composition Events provide a means for inputing text in a supplementary or alternate manner than by Keyboard Events, in order to allow the use of characters that may not be commonly available on keyboard. For examples, Composition events may be used to add accents to characters despite their absence from standard US keyboards, to build up logograms of many Asian languages from their base components or categories, to select word choices from a combination of key presses on a mobile device keyboard, or to convert voice commands into text using a speech recognition processor.  Refer to <a href="#keyset">Keyboard events and key identifiers</a> for examples on how Composition Events are used in combination with keyboard events.</p>
         <p>Conceptually, a composition session consists of one <a class="eventtype" href="#event-type-compositionstart"><code>compositionstart</code></a> event, one or more <a class="eventtype" href="#event-type-compositionupdate"><code>compositionupdate</code></a> events, and one <a class="eventtype" href="#event-type-compositionend"><code>compositionend</code></a> event, with the value of the <a href="#events-Events-CompositionEvent-data">data</a> attribute persisting between each "stage" of this event chain during each session.  While a composition session is active, keyboard events should not be dispatched to the DOM (i.e., the <a class="def" href="#glossary-text-composition-system">text composition system</a> "swallows" the keyboard events), and only <a class="eventtype" href="#event-type-compositionupdate"><code>compositionupdate</code></a> events may be dispatched to indicate the composition process.</p>
-        <p>Not all IME systems or devices expose the necessary data to the DOM, so the active composition string (the "Reading Window" or "candidate selection menu option") may not be available through this interface, in which case the selection may be represented by the empty string.</p>
+        <p>Not all <a class="def" href="#glossary-ime">IME</a> systems or devices expose the necessary data to the DOM, so the active composition string (the "Reading Window" or "candidate selection menu option") may not be available through this interface, in which case the selection may be represented by the empty string.</p>
         <dl>
           <dt><strong>Interface <em><a id="events-Events-CompositionEvent">CompositionEvent</a></em></strong> (introduced in <strong class="since">DOM Level 3</strong>)</dt>
           <dd>
@@ -3543,6 +3750,13 @@
           <li><a class="eventtype" href="#event-type-compositionend"><code>compositionend</code></a></li>
         </ol>        
 
+        <p>Composition events which are not canceled and which do not have the empty string as a value produce a <a class="eventtype" href="#event-type-textInput"><code>textInput</code></a> event as well.  The order of text events relative to composition events is as follows:</p>
+        <ol>
+          <li><a class="eventtype" href="#event-type-compositionstart"><code>compositionstart</code></a></li>
+          <li><a class="eventtype" href="#event-type-compositionupdate"><code>compositionupdate</code></a> (multiple events)</li>
+          <li><a class="eventtype" href="#event-type-compositionend"><code>compositionend</code></a></li>
+          <li>If a <a class="def" href="#glossary-character-value">character value</a> is produced, <a class="eventtype" href="#event-type-textInput"><code>textInput</code></a></li>
+        </ol>        
 
 <!-- compositionstart -->
         <div class="event-definition assert must">
@@ -3588,13 +3802,14 @@
           <p>The following example describes a possible sequence of events when composing a text passage "text" with a handwriting recognition system, such as on a pen tablet, as modeled using Composition Events.</p>
           <p class="issue">@@ needs more investigation, particularly with regard to pen-tablet events.</p>
           <ol>
-            <li><code>"compositionstart"</code>: <code class="value">''</code></li>
-            <li><code>"compositionupdate"</code>: <code class="value">'test'</code><span class="issue">@@ what's going on here? is there a "reject" option that's being exemplified?</span></li>
-            <li><code>"compositionupdate"</code>: <code class="value">'text'</code></li>
-            <li><code>"compositionend"</code>: <code class="value">'text'</code></li>
-            <li><code>"textInput"</code>: <code class="value">'text'</code> (<code>"inputMode"</code>: <code class="value">'DOM_INPUT_METHOD_HANDWRITING'</code>)</li>
+            <li><a class="eventtype" href="#event-type-compositionstart"><code>compositionstart</code></a>: <code class="value">''</code></li>
+            <li><a class="eventtype" href="#event-type-compositionupdate"><code>compositionupdate</code></a>: <code class="value">'test'</code><span class="issue">@@ what's going on here? is there a "reject" option that's being exemplified?</span></li>
+            <li><a class="eventtype" href="#event-type-compositionupdate"><code>compositionupdate</code></a>: <code class="value">'text'</code></li>
+            <li><a class="eventtype" href="#event-type-compositionend"><code>compositionend</code></a>: <code class="value">'text'</code></li>
+            <li><a class="eventtype" href="#event-type-textInput"><code>textInput</code></a>: <code class="value">'text'</code> (<code>"inputMode"</code>: <code class="value">'DOM_INPUT_METHOD_HANDWRITING'</code>)</li>
           </ol>
         </div>
+                
       </div>
       <div class="div3">
         <h3 class="div3"><a id="events-mutationevents" href="#events-mutationevents">5.2.9 Mutation Events</a></h3>
@@ -3944,1246 +4159,1197 @@
       <h2 class="adiv1"><a id="keyset" href="#keyset">6. Keyboard events and key identifiers</a></h2>
       <p>This section contains necessary information regarding keyboard events:</p>
       <ul>
-      <li>Relations between keys, such as <a class="def" href="#glossary-dead-key">dead keys</a> or modifiers keys.</li>
-      <li>Relations between keyboard events, their default actions, and text events.</li>
-      <li>The set of key identifiers, and guidelines on how to extend this set.</li>
-    </ul>
-    <p class="note"><strong>Note:</strong> This section uses serbian and kanji characters which are not always available (or are misrepresented) in the alternative versions or printed versions of this specification.</p>
-
-
-    <div class="div2">
-      <h3 class="adiv2"><a id="keyboard-input" href="#keyboard-input">6.1 Keyboard Input</a></h3>
-      
-      <p><em>This section is informative</em></p>
-      
-      <p>The relationship of each key to the complete keyboard has three separate aspects, each of which vary among different models and configurations of keyboards, particularly for locale-specific reasons:</p>
-      <ul>
-        <li><strong>Mechanical layout:</strong> the dimensions, size, and placement of the physical keys on the keyboard</li>
-        <li><strong>Visual markings:</strong> the labels (or <em>legends</em>) that mark each key</li>
-        <li><strong>Functional mapping:</strong> the abstract key-identifier association of each key.</li>
-      </ul>
-
-      <p>This specification only defines the functional mapping, in terms of key identifiers.  The visual marking has no bearing on the digital representation of the keys, and in many configurations may be completely inaccurate.</p>
-
-      <h4 class="adiv2"><a id="keyboard-layout" href="#keyboard-layout">6.1.1 Keyboard Layout</a></h4>
-      <p>As with the key labels, the physical layout of the keys on the keyboard does not not affect the digital identifier for any given key.  It is outside the scope of this specification to provide key identifiers based on keyboard layout, particularly since there are so many possible layouts for a keyboard, and since users can change the mapping of keys in their operating system, e.g. selecting a Dvorak key mapping.</p>
-      <p>However, the physical layout of the keys may be of interest to authors developing games or other applications wherein the location of the keys has an ergonomic relationship as the desired user interface controls, with little or no attention paid to the representational value of the key itself.  For example, many games may use the keys <code class="value">'A'</code>, <code class="value">'S'</code>, <code class="value">'D'</code>, and <code class="value">'W'</code> for <code class="value">'left'</code>, <code class="value">'down'</code>, <code class="value">'right'</code>, and <code class="value">'up'</code> respectively.  Authors should provide a means for the user to assign the controller keys to a custom setting appropriate to their keyboard configurations.</p>
-
-      <p class="note"><strong>Note:</strong> Key identifiers should not be confused with <em>scan codes</em>, which are the low-level hexadecimal signals produced for each key by the keyboard driver software, and which are mapped at the operating system to a <acronym title="Virtual Key">VK</acronym> ("virtual key"), which in turn may be mapped to the user-defined key configuration.  Key identifiers are a high-level abstraction of that final mapping.</p>
-
-      <h5 class="adiv2"><a id="keyboard-desktop" href="#keyboard-desktop">6.1.1.1 Desktop and Laptop Keyboards</a></h5>
-      <p>In the case where an author wishes to rely on the mechanical layout of a desktop or laptop keyboard, this specification suggests the keyboard configuration specified in ISO/IEC 9995-3-FCD:2009A [<cite><a class="noxref informative" href="#references-ISO-9995-3">ISO-9995-3</a></cite>] as a common layout appropriate to some international uses.</p>
-
-      <p class="note"><strong>Note:</strong> This keyboard layout is still, in essence, a <a class="def" href="#glossary-qwerty">QWERTY</a> keyboard, and will not match the keyboards or configurations of many users.  Authors cannot rely upon any particular configuration, and should create content in an internationalized and localizable manner.</p>
-
-      <div class="figure" style="text-align: center">
-        <object type="image/svg+xml" data="images/ISOIEC-9995-3-FCD-2009A.svg" width="900" height="300">
-          <img src="images/ISOIEC-9995-3-FCD-2009A.png" alt="A graphical depiction of an ISO standard defining layouts of computer keyboards, ISO/IEC 9995-3:2009A"/>
-        </object>
-        <p style="text-align:left"><em>Figure 3: A graphical depiction of an ISO standard defining layouts of computer keyboards, ISO/IEC 9995-3:2009A</em></p>
-      </div>
-
-      <h5 class="adiv2"><a id="keyboard-mobile" href="#keyboard-mobile">6.1.1.2 Mobile Keypads</a></h5>
-      <p>In the case where an author wishes to rely on the mechanical layout of a mobile keypad, this specification suggests the keyboard configuration specified in ISO/IEC 9995-8:2006 [<cite><a class="noxref informative" href="#references-ISO-9995-8">ISO-9995-8</a></cite>] as a common layout appropriate to some international uses.</p>
-
-      <p class="note"><strong>Note:</strong> This keypad layout, and in particular the distribution of letters is for Western devices, and will not match the keypads or configurations of many users.  Authors cannot rely upon any particular configuration, and should create content in an internationalized and localizable manner.</p>
-
-      <div class="figure" style="text-align: center">
-        <object type="image/svg+xml" data="images/ISOIEC-9995-8-2006.svg" width="180" height="240">
-          <img src="images/ISOIEC-9995-8-2006.png" alt="A graphical depiction of an ISO standard defining layouts of numeric keypads, with distribution of letters on the keys, ISO/IEC 9995-8:2006"/>
-        </object>
-        <p style="text-align:left"><em>Figure 4: A graphical depiction of an ISO standard defining layouts of numeric keypads, with distribution of letters on the keys, ISO/IEC 9995-8:2006</em></p>
-      </div>
-
-
-
-      <h3 class="adiv2"><a id="keyset-comp-input" href="#keyset-comp-input">6.2 Compositional Keyboard Input</a></h3>
-
-      <p class="1st">Each keyboard event references a key using a <code>DOMString</code> key identifier. The set contained in this appendix is based on the sets of keycodes from:</p>
-      <ul>
-        <li>the interface <code>java.awt.event.KeyEvent</code> of the Java 2 Platform v1.4 [<cite><a class="noxref informative" href="#references-KeyEvent">KeyEvent for Java</a></cite>];</li>
-        <li>the enumeration <code>System.Windows.Forms.Keys</code> of the Microsoft .NET Framework 1.0 [<cite><a class="noxref informative" href="#references-Keys">Keys enumeration for .Net</a></cite>].</li>
+        <li>Explanation of keyboard layout, mapping, and key identifiers.</li>
+        <li>Relations between keys, such as <a class="def" href="#glossary-dead-key">dead keys</a> or modifiers keys.</li>
+        <li>Relations between keyboard events, their default actions, and text events.</li>
+        <li>The set of key identifiers, and guidelines on how to extend this set.</li>
       </ul>
-
-	    <p>Key identifiers are strings used for uniquely addressing keyboard buttons, and intended for use in two primary scenarios:  as attributes for a keyboard event; or as string values for markup attributes, such as so-called "hotkeys" (or keyboard shortcuts).  As attributes on an event, the key identifier shall be a single canonical value.  As author-generated content, the key identifier may be one of three equivalent string values, which all evaluate to the same key identifier; the string may be a character string (a single character, such as a letter or symbol), a key name (a multi-character string, such as <code>enter</code> or <code>tab</code>, for control or <a class="def" href="#glossary-dead-key">dead keys</a>, or certain symbols), or a Unicode codepoint ("U+" followed by a hexadecimal character index).  The event attribute must always be the most author-friendly of these, in the following order: character string, key name, or Unicode codepoint.</p>
-
-    <p>There are several use cases for keyboard events.  The first use case is to retrieve the value of the key itself, in whichever mode that key currently represents (i.e. the value of a key as an upper- or lower-case letter, or a symbol or number, depending upon the current modifier keys, or as a key name); this may be used for monitoring particular input strings, or for modifier key input, or for author-generated virtual keyboards, and does not not depend upon the location of the key in the physical layout of the device, which may be mapped to different configurations based on user or system preference.  The second use case is for keyboard shortcuts, where the string itself may be of secondary importance, and where they key used should default to the most appropriate key for the function, language, operating system, device, and other environmental factors (such as <code>ctrl+c</code> for copy operations).  The final use case is completely independent of the value of the key identifier, and relies solely on the physical layout of the input device itself (such as for game controls); this is highly variable device-dependent functionality, and is not within the scope of this specification.  Implementations should provide an option for users to establish their own preferential mapping for keyboard layout, and may rely upon ISO 9995-3, which defines a common layout for primary and secondary key mappings on a typical alphanumeric keyboard, or on ISO 9995-8, which defines a numeric keypad layout and secondary assignment of Unicode characters in the range <abbr title="a-z">U+0061..U+007A</abbr> to the number keys <code>2</code> through <code>9</code>.</p>
-
-    <!--
-    <p>There are several primary use cases for Key Identifiers, roughly divided into cases for output and input.  For output,
-
-    		   <Travis> Use case: simulate a keyboard on a webpage.
-
-    	   DS: May be useful to have use cases
-
-    	   AvK: Games
-
-    	   DS: We will be unable to define location on a keyboard
-    	   ... Anyone making a game, wise to have user define key mapping
-
-
-    	   <Travis> access keys.
-
-    	   AvK: Scripts care about actual value - keyboard shortcuts
-
-    	   <Travis> (Accessibility uses)
-
-    	   DS: Hotkeys
-    	   ... A little broken, commands used with browser not accessable to
-    	   script authors. Will be overrideen
-    	   ... There was an interesting proposal for allowing script authors to
-    	   have hotkeys
-    	   ... control-shift-?? is a way to access hotkeys
-
-    	   :)
-
-    	   <smaug> :)
-
-    	   DS: Web app, want to hit control-S, same as they are used to with
-    	   desktop app
-
-    	   TL: Browser as application vs web page as an application
-
-    	   <smaug> Does anyone have a link to that proposal?
-
-    	   DS: May be useful to specify how browsers should deal with hotkeys
-    	   ... Part of a dedicated specification - rather a different topic
-
-    	   <chaals> [/me notes that the use cases boil down to something like
-    	   "make the interface match what people expect", "make the keys used
-    	   be a comfortable layout (especially important in games)" and "ensure
-    	   that the keys are actually available and not overriding some
-    	   important functionality the user had" ...]
-
-    	   <Travis> Also, the drag/drop spec overlaps with this stuff.
-
-    	   DS: Another use case is grab actual text values
-    	   ... Does not care about location, just the end value
-    </p>
-    	-->
-
-            <p>While implementations are recommended to use the most relevant identifier for a key independently of the platform or keyboard layout mappings, DOM applications should not make assumption on the ability of keyboard devices to generate them. When using keyboard events, <cite>"consider using numbers and function keys (F4, F5, and so on) instead of letters in shortcut-key combinations"</cite> ([<cite><a class="noxref informative" href="#references-DWW95">DWW95</a></cite>]) given that most keyboard layouts will provide keys for those.</p>
-            <p><code class="value">'U+0000'</code>, <code class="value">'U+0001'</code>, ..., <code class="value">'U+10FFFF'</code> are Unicode based key identifiers ([<cite><a class="noxref normative" href="#references-Unicode">Unicode</a></cite>]). When a key cannot be mapped to Unicode, a specific identifier shall be used (see also <a href="#keyset-Guide">Guidelines for defining key identifiers</a>). In any case, no assumption should be made between the sequence of keyboard events and the text events. The following three examples illustrate the concept of keyboard layout mappings and its relation with keyboard events (following the <a href="#keyset-Guide">Guidelines for defining key identifiers</a>, the 'Q' key shall be mapped to the Latin Capital Letter Q key).</p>
-            <p>The keystroke <code class="value">'U+0051'</code> (Latin Capital Letter Q key) must produce (on a PC/AT US keyboard using a US keyboard layout mapping and without any modifier activated) the Unicode character <code>q</code> (Latin Small Letter Q):</p>
-            <ol>
-              <li><code>"keydown"</code>: <code class="value">'U+0051'</code> (Latin Capital Letter Q key)</li>
-              <li><code>"textInput"</code>: <code class="value">'q'</code></li>
-              <li><code>"keyup"</code>: <code class="value">'U+0051'</code></li>
-            </ol>
-            <p>If the keyboard layout mapping is switched to a french mapping, pressing the same key must produce:</p>
-            <ol>
-              <li><code>"keydown"</code>: <code class="value">'U+0041'</code> (Latin Capital Letter A key)</li>
-              <li><code>"textInput"</code>: <code class="value">'a'</code></li>
-              <li><code>"keyup"</code>: <code class="value">'U+0041'</code></li>
-            </ol>
-            <p>If the keyboard layout mapping is switched to a serbian (cyrillic) mapping, pressing the same key must produce:</p>
-            <ol>
-              <li><code>"keydown"</code>: <code class="value">'U+0409'</code> (Cyrillic Capital Letter LJE)</li>
-              <li><code>"textInput"</code>: <code class="value">'&#1113;'</code></li>
-              <li><code>"keyup"</code>: <code class="value">'U+0409'</code></li>
-            </ol>
-            <p class="note"><strong>Note:</strong> The order between the text event and keyboard events may differ depending on the keyboard devices.</p>
-            <div class="div3">
-              <h4 class="adiv3"><a id="keyset-Modifiers" href="#keyset-Modifiers">6.2.1 Modifier keys</a></h4>
-              <p>Keyboard input uses modifier keys to change the normal behavior of a key. Keys associated with modifiers generate, like other keys, <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> and <a class="eventtype" href="#event-type-keyup"><code>keyup</code></a> events as shown in the example below. Some modifiers are activated while the key is being pressed down or maintained pressed such as <code class="value">'Alt'</code>, <code class="value">'Control'</code>, <code class="value">'Shift'</code>, <code class="value">'AltGraph'</code>, or <code class="value">'Meta'</code>. Others modifiers are activated depending on their state such as <code class="value">'CapsLock'</code>, <code class="value">'NumLock'</code>, or <code class="value">'Scroll'</code>. Change in the state happens when the modifier key is being pressed down. The <a href="#events-Events-KeyboardEvent"><code>KeyboardEvent</code></a> interface provides convenient attributes for some common modifiers keys: <a href="#events-Events-KeyboardEvent-ctrlKey"><code>KeyboardEvent.ctrlKey</code></a>, <a href="#events-Events-KeyboardEvent-shiftKey"><code>KeyboardEvent.shiftKey</code></a>, <a href="#events-Events-KeyboardEvent-altKey"><code>KeyboardEvent.altKey</code></a>, <a href="#events-Events-KeyboardEvent-metaKey"><code>KeyboardEvent.metaKey</code></a>. Some operating systems simulate the <code class="value">'AltGraph'</code> modifier key with the combination of the <code>"Alt</code> and <code class="value">'Control'</code> modifier keys. Implementations are encouraged to use the <code class="value">'AltGraph'</code> modifier key.</p>
-              <p>The following example describes a possible sequence of keys to generate the Unicode character Q (Latin Capital Letter Q) on a PC/AT US keyboard using a US mapping:</p>
-              <ol>
-                <li><code>"keydown"</code>: <code class="value">'Shift'</code>, shiftKey</li>
-                <li><code>"keydown"</code>: <code class="value">'U+0051'</code> (Latin Capital Letter Q key), shiftKey</li>
-                <li><code>"textInput"</code>: <code class="value">'Q'</code></li>
-                <li><code>"keyup"</code>: <code class="value">'U+0051'</code>, shiftKey</li>
-                <li><code>"keyup"</code>: <code class="value">'Shift'</code></li>
-              </ol>
-              <p>The following example describes a possible sequence of keys that does not generate a Unicode character (using the same configuration):</p>
-              <ol>
-                <li><code>"keydown"</code>: <code class="value">'Control'</code>, ctrlKey</li>
-                <li><code>"keydown"</code>: <code class="value">'U+0056'</code> (Latin Capital Letter V key), ctrlKey</li>
-                <li><code>"keyup"</code>: <code class="value">'U+0056'</code>, ctrlKey</li>
-                <li><code>"keyup"</code>: <code class="value">'Control'</code></li>
-              </ol>
-
-              <p>In some cases, modifier keys change the key identifier value for a key event.  For example, on some MacOS keyboards, the  key labeled <code class="value">'delete'</code> functions the same as the <code class="value">'Backspace'</code> key on the Windows OS when unmodified, but when modified by the <code class="value">'Fn'</code> key, acts as the <code class="value">'Del'</code> key, and the value of the key identifier must match the most appropriate function of the key in its current modified state.</p>
-            </div>
-
-            <!-- div3 Modifiers -->
-            <div class="div3">
-              <h4 class="adiv3"><a id="keyset-DeadKeys" href="#keyset-DeadKeys">6.2.2 Dead keys</a></h4>
-              <p>Some keyboard input uses <a class="def" href="#glossary-dead-key">dead keys</a> for the input of composed character sequences. Unlike the handwriting sequence, in which users enter the base character first, keyboard input requires to enter a special state when a <a class="def" href="#glossary-dead-key">dead key</a> is pressed and emit the character(s) only when one of a limited number of "legal" base character is entered.  (NOTE: the MacOS and Linux operating systems use input methods to process <a class="def" href="#glossary-dead-key">dead keys</a>.)
-              </p>
-              <p>The <a class="def" href="#glossary-dead-key">dead keys</a> are represented in the key identifiers set using combining diacritical marks. The sequence of keystrokes "U+0302" (Combining Circumflex Accent key) and "U+0045" (Latin Capital Letter E key) will likely produce (on a PC/AT french keyboard using a french mapping and without any modifier activated) the Unicode character &#234; (Latin Small Letter E With Circumflex), as preferred by the Unicode Normalization Form <em>NFC</em>:</p>
-              <ol>
-                <li><code>"keydown"</code>: <code class="value">'U+0302'</code> (Combining Circumflex Accent key)</li>
-                <li><code>"compositionstart"</code>: <code class="value">''</code></li>
-                <li><code>"compositionupdate"</code>: <code class="value">''</code> <span class="issue">@@ (value undefined - to be discussed)</span></li>
-                <li><code>"keyup"</code>: <code class="value">'U+0302'</code></li>
-                <li><code>"keydown"</code>: <code class="value">'U+0045'</code> (Latin Capital Letter E key)</li>
-                <li><code>"compositionend"</code>: <code class="value">'&#233;'</code> <span class="issue">@@ should compositionend come before or after textInput</span></li>
-                <li><code>"textInput"</code>: <code class="value">'&#233;'</code> (<code>"inputMode"</code>: <code class="value">'DOM_INPUT_METHOD_IME'</code>)</li>
-                <li><code>"keyup"</code>: <code class="value">'U+0045'</code></li>
-              </ol>
-
-              <p>This process may be aborted when a user types an unsupported base character (that is, a base character for which the which the active diacritical mark is not available) after pressing a <a class="def" href="#glossary-dead-key">dead key</a>:</p>
-              <ol>
-                <li><code>"keydown"</code>: <code class="value">'U+0302'</code> (Combining Circumflex Accent key)</li>
-                <li><code>"compositionstart"</code>: <code class="value">''</code></li>
-                <li><code>"compositionupdate"</code>: <code class="value">''</code> <span class="issue">@@ (undefined - to be discussed)</span></li>
-                <li><code>"keyup"</code>: <code class="value">'U+0302'</code></li>
-                <li><code>"keydown"</code>: <code class="value">'U+0051'</code> (Latin Capital Letter Q key)</li>
-                <li><code>"compositionend"</code>: <code class="value">''</code></li>
-                <li><code>"textInput"</code>: <code class="value">'q'</code> (<code>"inputMode"</code>: <code class="value">'DOM_INPUT_METHOD_KEYBOARD'</code>)</li>
-                <li><code>"keyup"</code>: <code class="value">'U+0051'</code></li>
-              </ol>
-
-            </div>
-
-
-            <!-- div3 DeadKeys -->
-            <div class="div3">
-              <h4 class="adiv3"><a id="keyset-IME" href="#keyset-IME">6.2.3 Input Method Editors</a></h4>
-
-              <p>This specification includes a model for <a class="def" href="#glossary-ime">input method editors (IMEs)</a>, through the <a href="#events-compositionevents">CompositionEvent</a> interface and events.  However, composition events and keyboard events do not necessarily map as a one-to-one relationship.  As an example, receiving a <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> for the "Accept" key identifier does not necessarily imply that the text currently selected in the IME is being accepted, but indicates only that a keystroke happened, disconnected from the IME Accept functionality (which would normally result in a <code>"compositionend"</code> event in most IME systems).  Keyboard events cannot be used to determine the current state of the input method editor, which should be obtained through the <a href="#events-Events-CompositionEvent-data"><code>data</code></a> attribute of the <a href="#events-compositionevents">CompositionEvent</a> interface.  Additionally, IME systems and devices vary in their functionality, and in which keys are used for activating that functionality, such that the <code class="value">'Convert'</code> and <code class="value">'Accept'</code> keys may be represented by other available keys.</p>  
-              <p>Keyboard events correspond to the events generated by the input device after the keyboard layout mapping but before the processing of the input method editor.</p>
-              <p>The following example describes a possible sequence of keys to generate the Unicode character &#24066; (Kanji character, part of CJK Unified Ideographs) using Japanese input methods. This example assumes that the input method editor is activated and in the Japanese-Romaji input mode. The keys <code class="value">'Convert'</code> and <code class="value">'Accept'</code> may be replaced by others depending on the input device in use and the configuration of the IME, e.g. it could be respectively <code class="value">'U+0020'</code> (Space key) and <code class="value">'Enter'</code>.</p>
-              <ol>
-                <li><code>"keydown"</code>: <code class="value">'U+0053'</code> (Latin Capital Letter S key)</li>
-                <li><code>"compositionstart"</code>: <code class="value">''</code></li>
-                <li><code>"keyup"</code>: <code class="value">'U+0053'</code> (Latin Capital Letter S key)</li>
-                <li><code>"keydown"</code>: <code class="value">'U+0049'</code> (Latin Capital Letter I key)</li>
-                <li><code>"keyup"</code>: <code class="value">'U+0049'</code> (Latin Capital Letter I key)</li>
-                <li><code>"keydown"</code>: <code class="value">'Convert'</code></li>
-                <li><code>"compositionupdate"</code>: <code class="value">'&#x8a69;'</code></li>            
-                <li><code>"keyup"</code>: <code class="value">'Convert'</code></li>
-                <li><code>"keydown"</code>: <code class="value">'Convert'</code></li>
-                <li><code>"compositionupdate"</code>: <code class="value">'&#24066;'</code></li>            
-                <li><code>"keyup"</code>: <code class="value">'Convert'</code></li>
-                <li><code>"keydown"</code>: <code class="value">'Accept'</code></li>
-                <li><code>"compositionend"</code>: <code class="value">'&#24066;'</code></li>
-                <li><code>"textInput"</code>: <code class="value">'&#24066;'</code> (<code>"inputMode"</code>: <code class="value">'DOM_INPUT_METHOD_IME'</code>)</li>
-                <li><code>"keyup"</code>: <code class="value">'Accept'</code></li>
-              </ol>
-
-              <p>IME composition may also be canceled as in the following example, with conditions identical to the previous example.  The key "Cancel" may also be replaced by others depending on the input device in use and the configuration of the IME, e.g. it could be "U+001B" (Escape key).</p>
-              <ol>
-                <li><code>"keydown"</code>: <code class="value">'U+0053'</code> (Latin Capital Letter S key)</li>
-                <li><code>"compositionstart"</code>: <code class="value">''</code></li>
-                <li><code>"keyup"</code>: <code class="value">'U+0053'</code> (Latin Capital Letter S key)</li>
-                <li><code>"keydown"</code>: <code class="value">'U+0049'</code> (Latin Capital Letter I key)</li>
-                <li><code>"keyup"</code>: <code class="value">'U+0049'</code> (Latin Capital Letter I key)</li>
-                <li><code>"keydown"</code>: <code class="value">'Convert'</code></li>
-                <li><code>"compositionupdate"</code>: <code class="value">'&#x8a69;'</code></li>            
-                <li><code>"keyup"</code>: <code class="value">'Convert'</code></li>
-                <li><code>"keydown"</code>: <code class="value">'Convert'</code></li>
-                <li><code>"compositionupdate"</code>: <code class="value">'&#24066;'</code></li>            
-                <li><code>"keyup"</code>: <code class="value">'Convert'</code></li>
-                <li><code>"keydown"</code>: <code class="value">'Cancel'</code></li>
-                <li><code>"compositionupdate"</code>: <code class="value">''</code></li>            
-                <li><code>"compositionend"</code>: <code class="value">''</code></li>
-                <li><code>"keyup"</code>: <code class="value">'Cancel'</code></li>
-              </ol>
-
-              <p>NOTE: Some <a class="def" href="#glossary-ime">input method editors</a> (such as on the MacOS operating system) may set an empty string to the composition data attribute before canceling a composition.</p>
-
-              <h5 class="adiv4"><a id="keyset-IME_keys" href="#keyset-IME_keys">6.2.3.1 Input Method Editor mode keys</a></h5>
-              <p>Some keys on certain devices are intended to activate <a class="def" href="#glossary-ime">input method editor</a> functionality, or to change the mode of an active <a class="def" href="#glossary-ime">input method editor</a>.  Custom keys for this purpose may be defined for different devices or language modes; the keys defined in this specification for this purpose are: <code>Alphanumeric</code>, <code>CodeInput</code>, <code>FinalMode</code>, <code>HangulMode</code>, <code>HanjaMode</code>, <code>Hiragana</code>, <code>JapaneseHiragana</code>, <code>JapaneseKatakana</code>, <code>JapaneseRomaji</code>, <code>JunjaMode</code>, <code>KanaMode</code>, <code>KanjiMode</code>, <code>Katakana</code>, and <code>RomanCharacters</code>.  When one of these keys is pressed, and no <a class="def" href="#glossary-ime">IME</a> is currently active, the appropriate <a class="def" href="#glossary-ime">IME</a>, shall be activated in the mode indicated by the key (if available); if an <a class="def" href="#glossary-ime">IME</a> is already active when the key is pressed, the active <a class="def" href="#glossary-ime">IME</a> may change to the indicated mode, or a different <a class="def" href="#glossary-ime">IME</a> may be launched, or the key may be ignored, on a device- and application-specific basis.</p>
-
-              <p>This specification also defines other keys which are intended for operation specifically with <a class="def" href="#glossary-ime">input method editors</a>: <code>Accept</code>, <code>AllCandidates</code>, <code>Cancel</code>, <code>Convert</code>, <code>Compose</code>, <code>FullWidth</code>, <code>HalfWidth</code>, <code>NextCandidate</code>, <code>Nonconvert</code>, and <code>PreviousCandidate</code>.  The functions of these keys are not defined in this specification; refer to other resources for details on <a class="def" href="#glossary-ime">input method editor</a> functionality.</p>
-
-              <p>Note that keys with <a class="def" href="#glossary-ime">input method editor</a> functions are note restricted to that purpose, and may have other device- or implementation-specific purposes, as well.</p>
-
-            </div>
-
-
-            <!-- div3 IME -->
-            <div class="div3">
-              <h4 class="adiv3"><a id="keyset-cancelable_keys" href="#keyset-cancelable_keys">6.2.4 Default actions and cancelable keyboard events</a></h4>
-              <p>Canceling the <a class="def" href="#glossary-default-action">default action</a> of a <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> event must not affect its respective <a class="eventtype" href="#event-type-keyup"><code>keyup</code></a> event, but it must prevent the respective <a class="eventtype" href="#event-type-textInput"><code>textInput</code></a> event from being generated. The following example describes a possible sequence of keys to generate the Unicode character Q (Latin Capital Letter Q) on a PC/AT US keyboard using a US mapping:</p>
-              <ol>
-                <li><code>"keydown"</code>: <code class="value">'U+0051'</code> (Latin Capital Letter Q key), shiftKey<br/>
-    the <a class="def" href="#glossary-default-action">default action</a> of the <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> event is prevented, e.g. by invoking <a href="#events-event-type-preventDefault"><code>Event.preventDefault()</code></a> during the dispatch of the keydown event object.</li>
-                <li>No <code>"textInput"</code> shall be generated.</li>
-                <li><code>"keyup"</code>: <code class="value">'U+0051'</code>, shiftKey</li>
-              </ol>
-              <p>If the key is a modifier key, the keystroke shall be taken into account for the modifiers states. The following example describes a possible sequence of keys to generate the Unicode character Q (Latin Capital Letter Q) on a PC/AT US keyboard using a US mapping:</p>
-              <ol>
-                <li><code>"keydown"</code>: <code class="value">'Shift'</code>, shiftKey<br/>
-    the <a class="def" href="#glossary-default-action">default action</a> of the keydown event shall be prevented.</li>
-                <li><code>"keydown"</code>: <code class="value">'U+0051'</code> (Latin Capital Letter Q key), shiftKey</li>
-                <li><code>"textInput"</code>: <code class="value">'Q'</code></li>
-                <li><code>"keyup"</code>: <code class="value">'U+0051'</code>, shiftKey</li>
-                <li><code>"keyup"</code>: <code class="value">'Shift'</code></li>
-              </ol>
-              <p>If the key is part of a sequence of several keystrokes, whether it is a <a class="def" href="#glossary-dead-key">dead key</a> or it is contributing to an Input Method Editor sequence, the keystroke shall be ignored (not taken into account) only if the <a class="def" href="#glossary-default-action">default action</a> is canceled on the <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> event. Canceling a <a class="def" href="#glossary-dead-key">dead key</a> on a <a class="eventtype" href="#event-type-keyup"><code>keyup</code></a> event has not effect on <a class="eventtype" href="#event-type-textInput"><code>textInput</code></a> events. The following example uses the keystrokes <code class="value">'U+0302'</code> (Combining Circumflex Accent key) and <code class="value">'U+0045'</code> (Latin Capital Letter E key) (on a PC/AT french keyboard using a french mapping and without any modifier activated):</p>
-              <ol>
-                <li><code>"keydown"</code>: <code class="value">'U+0302'</code> (Combining Circumflex Accent key)<br/>
-    the <a class="def" href="#glossary-default-action">default action</a> of the keydown event shall be prevented</li>
-                <li><code>"keyup"</code>: <code class="value">'U+0302'</code></li>
-                <li><code>"keydown"</code>: <code class="value">'U+0045'</code> (Latin Capital Letter E key)</li>
-                <li><code>"textInput"</code>: <code class="value">'a'</code></li>
-                <li><code>"keyup"</code>: <code class="value">'U+0045'</code></li>
-              </ol>
-            </div>
-            <!-- div3 cancelable_keys -->
-
-
-     </div>
-
-
-            <!-- div3 Guide -->
-          </div>
-          <!-- div2 KeySet-intro -->
-          <div class="div2">
-            <h3 class="adiv2"><a id="keyset-keyidentifiers" href="#keyset-keyidentifiers">6.3 Key Identifiers</a></h3>
-            
-            <p>A key identifier is a string that can be used to indicate any given key on a keyboard, regardless of position or state, by the value it produces.  These key identifiers may be used as return values for keyboard events generated by the implementation, or as input values by the author to specify desired input (such as for keyboard shortcuts).  This specification defines a set of common key identifiers (called the <a href="#keyset-key-identifiers">Key Identifiers Set</a>), and rules for production of new key identifiers.</p>
-            
-            <p>It is important to note that a key identifier does not indicate a specific key on the physical keyboard, nor does it reflect the character printed on the key; a key identifier 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 identifier for the key marked <code>'O'</code> on a <a class="def" href="#glossary-qwerty">QWERTY</a> keyboard has the key identifier <code>'o'</code> in an unshifted state, <code>'O'</code> in a shifted state, <code>'ö'</code> in an unshifted state during a dead-key operation to add an umlaut diacritic, and <code>'Ö'</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 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-Events-KeyboardEvent-keyIdentifier"><code>KeyboardEvent.keyIdentifier</code></a> property.  The keyboard depicted in Figure 3 illustrates one possible set of key mappings 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 identifiers.  A particular key identifier may be associated with multiple keys; for example, many standard keyboards contain more than one key with the <code class="value">'Shift'</code> key identifier (normally distinguished by the <a href="#events-Events-KeyboardEvent-keylocation"><code>KeyboardEvent.keyLocation</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 identifier (normally distinguished by the <a href="#events-Events-KeyboardEvent-keylocation"><code>KeyboardEvent.keyLocation</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 identifier in multiple key-state scenarios (note that <a href="#events-Events-KeyboardEvent-keylocation"><code>KeyboardEvent.keyLocation</code></a> is intended for standard keyboard layouts, and cannot always indicate a meaningful distinction).  Similarly, a given key event state may have multiple key identifiers: the key identifier name; the Unicode value; and the character representation itself.  For example, the question mark key has the following key identifiers: <code>'?'</code> (the character); <code>'QuestionMark'</code> (the name); and <code>'U+003F'</code> (the Unicode value).  Note that not all keys will have all these identifiers; for example, the horizontal tabulation (tab) key has a name (<code class="value">'Tab'</code>) and a Unicode value (<code class="value">'U+0009'</code>) but no character representation, the <code>A</code> key has a character representation (<code class="value">'A'</code>) and a Unicode value (<code class="value">'U+0041'</code>) but no name, and the volume mute key has only a name, <code class="value">'VolumeMute'</code>. <span class="issue">@@ Should there always be a name for a key?  The Unicode name for <code class="value">'A'</code> is "LATIN CAPITAL LETTER A"... should the name be the case-insensitive (or camelcased) Unicode name with no spaces (<code class="value">'LatinCapitalLetterA'</code>) or just the character (<code class="value">'A'</code>)?</span></p>
-
-              <p>The value of the <a href="#events-Events-KeyboardEvent-keyIdentifier"><code>KeyboardEvent.keyIdentifier</code></a> property of the <a href="#events-Events-KeyboardEvent">KeyboardEvent</a> interface event types (e.g. <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a>, <a class="eventtype" href="#event-type-keypress"><code>keypress</code></a>, and <a class="eventtype" href="#event-type-keyup"><code>keyup</code></a>) must default to the character itself; if the key identifier does not have a character representation, the value of the <a href="#events-Events-KeyboardEvent-keyIdentifier"><code>KeyboardEvent.keyIdentifier</code></a> property must be the Unicode value; if no Unicode value for the key identifier exists, the value of the <a href="#events-Events-KeyboardEvent-keyIdentifier"><code>KeyboardEvent.keyIdentifier</code></a> property must be the key identifier name.  <span class="issue">@@ Should there always be a name for a key?  The Unicode name for <code class="value">'A'</code> is "LATIN CAPITAL LETTER A"... should there be a <code>convertKeyIdentifier</code> method of to allow the author to find either the name, character representation, or Unicode value of any given key identifier?</span></p>
-
-              <p>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">'×'</code>, Unicode value <code class="value">'U+00D7'</code>) or the miniscule letter <code class="value">'x'</code> (because of that lack of a multiplication key on many keyboard and the superficial resemblance of the glyphs <code class="value">'×'</code> and <code class="value">'x'</code>).  Thus, the semantic meaning or function of character representations is outside the scope of this specification.</p>
-
-
-            <div class="div3">
-              <h4 class="adiv3"><a id="keyset-Guide" href="#keyset-Guide">6.3.1 Guidelines for defining key identifiers</a></h4>
-              <!-- <div class="atrisk">
-          <p class="issue">This section is the original guideline.  We are considering making a more detailed, normative guideline, below.</p>
-          <p class="note"><strong>Note:</strong> This section is non-normative.</p>
-              <p>The list of key identifiers contained in this appendix is not exhaustive and input devices may have to define their own key identifiers. Here is a algorithm to determine which key identifier to use:</p>
-              <ol>
-                <li>Determine a representation for the key by looking at the keyboard layout mapping in use (and not the keyboard device in use). This representation should be unique, as human friendly as possible, platform independent, and consistent. For example, on PC/AT US keyboards with a US mapping, the 'Q' key shall be mapped to the key identifier "U+0051" (Latin Capital Letter Q key), the '1/!' key shall be mapped to the key identifier "U+0031" (Digit One key), the key '`/~' shall be mapped to the key identifier "U+0060" (Grave Accent key), and the 'Enter' key shall be mapped to the key identifier "Enter".</li>
-                <li>Find an appropriate mapping in the Unicode character set. There might not always be an appropriate and obvious mapping: the Unicode set contains characters and symbols, the key might generate different characters depending on the operating system, ... In general, unless the representation of the key can be mapped to a unique Unicode character, it is better to create a new one.</li>
-                <li>If no appropriate mapping was found, create a key identifier as human friendly as possible. The key identifier must not contain white spaces. As an example, the Enter key shall be mapped to the key identifier "Enter" and not to "U+000A" (Line Feed), given that this key generates the character "U+000A" on Unix operating systems and the characters "U+000D" and "U+000A" on Windows operating systems.</li>
-              </ol>
-            </div> -->
-
-
-    		    <p class="note"><strong>Note:</strong> This section is normative.</p>
-            <p>The list of key identifiers contained in this appendix is not exhaustive and input devices may have to define their own key identifiers. Here is a algorithm to determine which key identifier to use:</p>  
-
-          	<ol>
-          		<li> Consider the primary function of the key (i.e., without modifiers), taking into consideration the keyboard layout mapping in use, to determine if a corresponding Unicode character exists from which a key identifier may be derived.  If multiple Unicode characters exist which correspond to the primary function of the key, the Unicode character with the lowest codepoint must be used. 
-          			<ol>
-          				<li> If the primary function of the key is to generate a character, and that character is in one of the <a class="def" href="#glossary-Unicode-character-categories">Unicode character categories</a>, then the key identifier shall be a string consisting of just that character.  <!-- If the primary function of the key is to generate a character in class <abbr title="Letter, Lowercase">Ll</abbr> for which there exists an equivalent, single character in class <abbr title="Letter, Uppercase">Lu</abbr>, the uppercase character should be used instead. <br/><span class="issue">Is this necessary?  Why can't we simply allow lowercase letters as well?  If a script author wishes to do a comparison, they can cast the output to upper or lower case as needed.  See <a href="http://www.w3.org/2008/webapps/track/issues/23" title="ISSUE-23 - Web Applications Working Group Tracker">ISSUE-23</a>.</span> --></li>
-          				<li> If the primary function of the key is to generate a character that is not in one of the above general categories, or if the primary function of the key is a function for which there exists a corresponding Unicode character that is not in one of the above general categories, then: 
-          					<ol>
-          						<li>If there exists an appropriate key identifier in the <a href="#keyset-keyidentifiers">key identifiers set</a>, and that key identifier does not have a Unicode codepoint, that key identifier must be used.</li>
-          						<li>If there exists an appropriate key identifier in the <a href="#keyset-keyidentifiers">key identifiers set</a>, and that key identifier has a Unicode codepoint, and that key identifier is in one of the <a class="def" href="#glossary-Unicode-character-categories">Unicode character categories</a>, then the character value itself for that key identifier must be used.</li>
-          						<!--
-          						<li>If there exists an appropriate key identifier in the <a href="#keyset-keyidentifiers">key identifiers set</a>, and that key identifier has a Unicode codepoint, and that key identifier is not in one of the <a class="def" href="#glossary-Unicode-character-categories">Unicode character categories</a>, then the Unicode codepoint string for that key identifier must be used.</li>
-          						<li>If there exists an appropriate key identifier in the <a href="#keyset-keyidentifiers">key identifiers set</a>, that key identifier must be used for the value of the <a href="#events-Events-TextEvent-data"><code class="attr-value">data</code></a> attribute of a <a class="noxref" href="#events-Events-TextEvent"><code class="interface">TextEvent</code></a>.  The value of a markup attribute must use one of the canonical values from the <a href="#keyset-keyidentifiers">key identifiers set</a>, but may use the named key identifier, the Unicode codepoint value, or the literal character, as appropriate.</li>
-          					    -->
-          						<li>If there is no appropriate key identifier in the <a href="#keyset-keyidentifiers">key identifiers set</a>, then the key identifier is a string beginning with "U+" and followed by the Unicode codepoint of the character in hexadecimal, using at least four digits. Leading zeroes must be omitted unless they are required to make the codepoint use at least four digits.</li>
-          					</ol>
-          				</li>
-          			</ol>
-          		</li>
-          		<li> For keys with no corresponding Unicode character, a key identifier can be devised.  The key identifier should be as human friendly as possible and must not contain whitespace.  The identifier must be composed only of characters in the ranges <abbr title="0-9">U+0030..U+0039</abbr>, <abbr title="A-Z">U+0041..U+005A</abbr>, or <abbr title="a-z">U+0061..U+007A</abbr>, and must begin with a character in the range <abbr title="A-Z">U+0041..U+005A</abbr>.  <br/><span class="issue">Why should we not allow names in other ranges (Chinese, for example)?</span></li>
-          	</ol>
-          	<p>Examples:</p>
-          	<ul>
-          		<!-- <li> On a PC/AT US keyboard with a US keyboard mapping, the primary function (unmodified) of the 'Q' key is to generate the character U+0071.  Since this character is in general category Ll, and there is a single corresponding character in Lu, U+0051, this character is used instead.  Thus, the key identifier is "Q". <br/><span class="issue">What is the use case here?  Why are uppercase letters being given priority?  See <a href="http://www.w3.org/2008/webapps/track/issues/23" title="ISSUE-23 - Web Applications Working Group Tracker">ISSUE-23</a>.</span></li> -->
-          		<li> On a PC/AT US keyboard with a two-handed Dvorak keyboard mapping, the 'Q' key maps to the '5/%' key.  The primary function of this key is to generate the character U+0035.  Since this character is in general category Nd, the key identifier shall be "5". </li>
-          		<li> On a French PC keyboard with a standard French mapping, the primary function of the '^' key is as a <a class="def" href="#glossary-dead-key">dead key</a> for the circumflex diacritical mark.  This corresponds to the combining Unicode character U+0302.  Since this character is in general category Mn, the key identifier shall be "U+0302". </li>
-          		<li> On a Korean PC keyboard with a standard Korean mapping, the primary function of the 'Ha/En' key is to switch between Hangul and English input.  The predefined key identifier list has an appropriate entry for this key, "HangulMode", so this shall be the key identifier. </li>
-          		<li> On some models of PDAs, the primary function of the key with a picture of a calendar on it is to launch the calendaring program. Since there is no Unicode character that corresponds to this function, and there is no appropriate entry in the predefined key identifier list, a new identifier may be devised, such as "Calendar".
-          		</li>
-          	</ul>
-
-          	  <p>Future versions of this specification may include key identifiers not included here, which have become common since the publication of this specification.</p>
-
-          		<p class="issue">@@ Add a <code class="value">'power'</code> key?</p>
-
-          		<p class="issue">@@ In the case of markup and attribute values, should the Key Identifiers for character keys be case-insensitive?</p>
-          		
-        	  </div>
+      <p class="note"><strong>Note:</strong> This section uses Serbian and Kanji characters which are not always available (or are misrepresented) in the alternative versions or printed versions of this specification.</p>
+
+
+      <div class="div2">
+        <h3 class="adiv2"><a id="keyboard-input" href="#keyboard-input">6.1 Keyboard Input</a></h3>
+      
+        <p><em>This section is informative</em></p>
+      
+        <p>The relationship of each key to the complete keyboard has three separate aspects, each of which vary among different models and configurations of keyboards, particularly for locale-specific reasons:</p>
+        <ul>
+          <li><strong>Mechanical layout:</strong> the dimensions, size, and placement of the physical keys on the keyboard</li>
+          <li><strong>Visual markings:</strong> the labels (or <em>legends</em>) that mark each key</li>
+          <li><strong>Functional mapping:</strong> the abstract key-identifier association of each key.</li>
+        </ul>
+
+        <p>This specification only defines the functional mapping, in terms of key identifiers.  The visual marking has no bearing on the digital representation of the keys, and in many configurations may be completely inaccurate.</p>
+
+        <h4 class="adiv2"><a id="keyboard-layout" href="#keyboard-layout">6.1.1 Keyboard Layout</a></h4>
+        <p><em>This section is informative</em></p>
+
+        <p>As with the key labels, the physical layout of the keys on the keyboard does not not affect the digital identifier for any given key.  It is outside the scope of this specification to provide key identifiers based on keyboard layout, particularly since there are so many possible layouts for a keyboard, and since users can change the mapping of keys in their operating system, e.g. by selecting a Dvorak key mapping.</p>
+        
+        <p>For example, to illustrate the concept of keyboard layout mappings and its relation with keyboard events and key identifiers, the same keyboard (a PC/AT US keyboard), pressing the key labeled <code>Q</code> (with no modifier key activated) will produce different key identifiers based on the mapping.  With a typical US <a class="def" href="#glossary-qwerty">QWERTY</a> keyboard layout mapping, it will produce <code class="value">'q'</code> (<code class="value">'U+0071'</code>, Latin Small Letter Q).  If the keyboard layout mapping is switched to a French mapping, pressing the same key will produce <code class="value">'a'</code> (<code class="value">'U+0041'</code>, Latin Capital Letter A).  If the keyboard layout mapping is switched to a Serbian (Cyrillic) mapping, pressing the same key will produce <code class="value">'&#1113;'</code> (<code class="value">'U+0459'</code>, Cyrillic Small Letter LJE).</p>        
+        
+        <p>However, the physical layout of the keys may be of interest to authors developing games or other applications wherein the location of the keys has an ergonomic relationship as the desired user interface controls, with little or no attention paid to the representational value of the key itself.  For example, many games may use the keys <code class="value">'A'</code>, <code class="value">'S'</code>, <code class="value">'D'</code>, and <code class="value">'W'</code> for <code class="value">'left'</code>, <code class="value">'down'</code>, <code class="value">'right'</code>, and <code class="value">'up'</code> respectively.  Authors should provide a means for the user to assign such controller keys to a custom setting appropriate to their keyboard configurations.  Implementations may provide a means for the user to more comprehensively map the keyboard to their customized keyboard layout, but this is beyond the scope of this specification.</p>
+        
+        <p class="note"><strong>Note:</strong> Key identifiers should not be confused with <em>scan codes</em>, which are the low-level hexadecimal signals produced for each key by the keyboard driver software, and which are mapped at the operating system to a <acronym title="Virtual Key">VK</acronym> ("virtual key"), which in turn may be mapped to the user-defined key configuration.  Key identifiers are a high-level abstraction of that final mapping.</p>
+
+        <h5 class="adiv2"><a id="keyboard-desktop" href="#keyboard-desktop">6.1.1.1 Desktop and Laptop Keyboards</a></h5>
+        <p>In the case where an author wishes to rely on the mechanical layout of a desktop or laptop keyboard, this specification suggests the keyboard configuration specified in ISO/IEC 9995-3-FCD:2009A [<cite><a class="noxref informative" href="#references-ISO-9995-3">ISO-9995-3</a></cite>], which defines a common layout for primary, secondary, and auxiliary key mappings on a typical alphanumeric keyboard, as a common layout appropriate to some international uses.</p>
+
+        <p class="note"><strong>Note:</strong> This keyboard layout is still, in essence, a <a class="def" href="#glossary-qwerty">QWERTY</a> keyboard, and will not match the keyboards or configurations of many users.  Authors cannot rely upon any particular configuration, and should create content in an internationalized and localizable manner.</p>
+
+        <div class="figure" style="text-align: center">
+          <object type="image/svg+xml" data="images/ISOIEC-9995-3-FCD-2009A.svg" width="900" height="300">
+            <img src="images/ISOIEC-9995-3-FCD-2009A.png" alt="A graphical depiction of an ISO standard defining layouts of computer keyboards, ISO/IEC 9995-3:2009A"/>
+          </object>
+          <p style="text-align:left"><em>Figure 3: A graphical depiction of an ISO standard defining layouts of computer keyboards, ISO/IEC 9995-3:2009A</em></p>
+        </div>
+
+        <h5 class="adiv2"><a id="keyboard-mobile" href="#keyboard-mobile">6.1.1.2 Mobile Keypads</a></h5>
+        <p>In the case where an author wishes to rely on the mechanical layout of a mobile keypad, this specification suggests the keyboard configuration specified in ISO/IEC 9995-8:2006 [<cite><a class="noxref informative" href="#references-ISO-9995-8">ISO-9995-8</a></cite>], which defines a numeric keypad layout and secondary assignment of Unicode characters in the range <abbr title="a-z">U+0061..U+007A</abbr> to the number keys <code>2</code> through <code>9</code>, as a common layout appropriate to some international uses.</p>
+
+        <p class="note"><strong>Note:</strong> This keypad layout, and in particular the distribution of letters is for Western devices, and will not match the keypads or configurations of many users.  Authors cannot rely upon any particular configuration, and should create content in an internationalized and localizable manner.</p>
+
+        <div class="figure" style="text-align: center">
+          <object type="image/svg+xml" data="images/ISOIEC-9995-8-2006.svg" width="180" height="240">
+            <img src="images/ISOIEC-9995-8-2006.png" alt="A graphical depiction of an ISO standard defining layouts of numeric keypads, with distribution of letters on the keys, ISO/IEC 9995-8:2006"/>
+          </object>
+          <p style="text-align:left"><em>Figure 4: A graphical depiction of an ISO standard defining layouts of numeric keypads, with distribution of letters on the keys, ISO/IEC 9995-8:2006</em></p>
+        </div>
+      </div>
+
+
+      <div class="div2">
+        <h3 class="adiv2"><a id="keyset-keyidentifiers" href="#keyset-keyidentifiers">6.2 Key Identifiers</a></h3>
+        
+        <p>A key identifier is a <code>DOMString</code> that can be used to indicate any given key on a keyboard, regardless of position or state, by the value it produces.  These key identifiers may be used as return values for keyboard events generated by the implementation, or as input values by the author to specify desired input (such as for keyboard shortcuts).  This specification defines a set of common key identifiers (called the <a href="#keyset-key-identifiers">Key Identifiers Set</a>), and rules for production of new key identifiers.</p>
+        
+        <p>Key identifiers can be used to detect the value of a key which has been pressed, using the <a href="#events-Events-KeyboardEvent-keyIdentifier"><code>KeyboardEvent.keyIdentifier</code></a> attribute.  Authors can retrieve the <a class="def" href="#glossary-character-value">character value</a> of upper- or lower-case letters, number, symbols, or other character-producing keys, and also the <a class="def" href="#glossary-key-name">key name</a> of control keys, modifier keys, function keys, or other keys that do not generate characters; these values can be used for monitoring particular input strings, for detecting and acting on modifier key input in combination with other inputs (such as a mouse), for creating virtual keyboards, or for any number of other purposes.</p>  
+        
+        <p>Key identifiers can also be used by authors in string comparisons, as values for markup attributes (such as the HTML <code>accesskey</code>) in conforming <a class="def" href="#glossary-host-language">host languages</a>, or for other related purposes.   A conforming <a class="def" href="#glossary-host-language">host language</a> should allow authors to use any of the three equivalent string values for a key identifier: the <a class="def" href="#glossary-character-value">character value</a>, the <a class="def" href="#glossary-key-name">key name</a>, or the <a class="def" href="#glossary-unicode-code-point">Unicode code point</a>.</p>
+        
+        <p class="note"><strong>Note:</strong> While implementations are recommended to use the most relevant identifier for a key independently of the platform or keyboard layout mappings, authors should not make assumption on the ability of keyboard devices to generate them.  When using keyboard events and key idetifiers for shortcut-key combinations, authors should <q>consider using numbers and function keys (F4, F5, and so on) instead of letters</q> ([<cite><a class="noxref informative" href="#references-DWW95">DWW95</a></cite>]) given that most keyboard layouts will provide keys for those.</p>
+        <!-- , and where the key used should default to the most appropriate key for the function, language, operating system, device, and other environmental factors (such as <code>ctrl+c</code> for copy operations) -->
+        
+        
+        <p>It is important to note that a key identifier does not indicate a specific key on the physical keyboard, nor does it reflect the character printed on the key; a key identifier 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 identifier for the key marked <code>'O'</code> on a <a class="def" href="#glossary-qwerty">QWERTY</a> keyboard has the key identifier <code>'o'</code> in an unshifted state, <code>'O'</code> in a shifted state, <code>'ö'</code> in an unshifted state during a dead-key operation to add an umlaut diacritic, and <code>'Ö'</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 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-Events-KeyboardEvent-keyIdentifier"><code>KeyboardEvent.keyIdentifier</code></a> attribute.  The keyboard depicted in Figure 3 illustrates one possible set of key mappings 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 identifiers.  A particular key identifier may be associated with multiple keys; for example, many standard keyboards contain more than one key with the <code class="value">'Shift'</code> key identifier (normally distinguished by the <a href="#events-Events-KeyboardEvent-keylocation"><code>KeyboardEvent.keyLocation</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 identifier (normally distinguished by the <a href="#events-Events-KeyboardEvent-keylocation"><code>KeyboardEvent.keyLocation</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 identifier in multiple key-state scenarios (note that <a href="#events-Events-KeyboardEvent-keylocation"><code>KeyboardEvent.keyLocation</code></a> is intended for standard keyboard layouts, and cannot always indicate a meaningful distinction).  Similarly, a given key event state may have multiple key identifiers: the key identifier name; the Unicode value; and the character representation itself.  For example, the question mark key has the following key identifiers: <code>'?'</code> (the character); <code>'QuestionMark'</code> (the name); and <code>'U+003F'</code> (the Unicode value).  Note that not all keys will have all these identifiers; for example, the horizontal tabulation (tab) key has a name (<code class="value">'Tab'</code>) and a Unicode value (<code class="value">'U+0009'</code>) but no character representation, the <code>A</code> key has a character representation (<code class="value">'A'</code>) and a Unicode value (<code class="value">'U+0041'</code>) but no name, and the volume mute key has only a name, <code class="value">'VolumeMute'</code>. <span class="issue">@@ Should there always be a name for a key?  The Unicode name for <code class="value">'A'</code> is "LATIN CAPITAL LETTER A"... should the name be the case-insensitive (or camelcased) Unicode name with no spaces (<code class="value">'LatinCapitalLetterA'</code>) or just the character (<code class="value">'A'</code>)?</span></p>
+
+        <p>The value of the <a href="#events-Events-KeyboardEvent-keyIdentifier"><code>KeyboardEvent.keyIdentifier</code></a> attribute of the <a href="#events-Events-KeyboardEvent">KeyboardEvent</a> interface event types (e.g. <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a>, <a class="eventtype" href="#event-type-keypress"><code>keypress</code></a>, and <a class="eventtype" href="#event-type-keyup"><code>keyup</code></a>) must default to the character itself; if the key identifier does not have a character representation, the value of the <a href="#events-Events-KeyboardEvent-keyIdentifier"><code>KeyboardEvent.keyIdentifier</code></a> attribute must be the Unicode value; if no Unicode value for the key identifier exists, the value of the <a href="#events-Events-KeyboardEvent-keyIdentifier"><code>KeyboardEvent.keyIdentifier</code></a> attribute must be the key identifier name.  The author may use the <a href="#events-Events-DocumentEvent-convertKeyIdentifier"><code>DocumentEvent.convertKeyIdentifier</code></a> method to find either the <a class="def" href="#glossary-character-value">character value</a>, the <a class="def" href="#glossary-key-name">key name</a>, or <a class="def" href="#glossary-unicode-code-point">Unicode code point</a> of any given key identifier.</p>
+
+        <p>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">'×'</code>, Unicode value <code class="value">'U+00D7'</code>) or the miniscule letter <code class="value">'x'</code> (because of that lack of a multiplication key on many keyboard and the superficial resemblance of the glyphs <code class="value">'×'</code> and <code class="value">'x'</code>).  Thus, the semantic meaning or function of character representations is outside the scope of this specification.</p>
+
+
+        <div class="div3">
+          <h4 class="adiv3"><a id="keyset-unicode" href="#keyset-unicode">6.2.1 Key Identifiers and Unicode</a></h4>
+        
+          <p>The <a class="def" href="#glossary-character-value">character values</a> and <a class="def" href="#glossary-unicode-code-point">Unicode code points</a> in the <a href="#keyset-keyidentifiers">key identifiers set</a> are derived from the popular Unicode standard [<a href="#references-Unicode">Unicode</a>], and as such, have certain advantages.</p>
+          
+          <p>The most obvious advantage is that it allows the author to use the full range of internationalized language functionality available in the implementation, regardless of the limitations of the text input devices on the system.  This opens up possibilities for virtual keyboards and Web-application-based <a class="def" href="#glossary-ime">input method editors</a>.</p>
+          
+          <p>Another benefit is that it allows the author to utilize the Unicode general category properties <!-- <a class="def" href="#glossary-Unicode-character-categories">Unicode character categories</a> --> programmatically.</p>
+          
+          <p>With legacy keyboard event attributes such as <code>keyCode</code> and <code>charCode</code>, authors are forced to filter key input using cryptic, platform- and implementation-specific numeric codes, with poor internationalization, such as the following pseudocode:</p>
+
+<pre class="example"><code>
+  if ( ( event.charCode == 45 || event.charCode == 36 ) ||
+       ( event.charCode >= 48 && event.charCode <= 57 ) || 
+       ( event.charCode >= 96 && event.charCode <= 105 ) ) {
+    <em>// minus sign, dollar sign, and numeric characters from keyboard and numpad</em>
+    <em>...</em> 
+  }
+  else if ( ( event.charCode >= 65 && event.charCode <= 90 ) || 
+       ( event.charCode >= 97 && event.charCode <= 122 ) ) {
+    <em>// alphabetic characters from Latin character set, A-Z, a-z</em>
+    <em>...</em> 
+  }
+  else {
+    <em>...</em> 
+  } 
+</code></pre>
+
+          <p>With key identifiers and regular expressions, however, authors can support selective and intuitive ranges for key-based input, in a cross-platform manner with advanced internationalization support, such as the following pseudocode:</p>
+
+<pre class="example"><code>
+  if ( event.keyIdentifier == "-" || 
+       event.keyIdentifier.match("\p{Sc}") || 
+       event.keyIdentifier.match("\p{N}") ) {
+    <em>// minus sign, any currency symbol, and numeric characters (regardless of key location)</em>
+    <em>...</em> 
+  }
+  else if ( event.keyIdentifier.match("\p{L}") ) {
+    <em>// alphabetic characters from any language, upper and lower case</em>
+    <em>...</em> 
+  }
+  else {
+    <em>...</em> 
+  } 
+</code></pre>
+
+          <p>In addition, because Unicode categorizes each assigned <a class="def" href="#glossary-unicode-code-point">code point</a> into a group of code points used by a particular human writing system, even more advanced capabilities are possible.  For example, an author can match characters from a particular human script, say Tibetan, using the regular expression <code class="example inline">\p{Tibetan}</code>, to filter out other characters, or discover if a <a class="def" href="#glossary-unicode-code-point">code point</a> is in a certain code block (range of code points), using a regular expression like <code class="example inline">\p{InCyrillic}</code>.</p>
+
+          <p>To facilitate this, implementations should support Unicode range detection using regular expressions, in a manner such as the Perl Compatible Regular Expressions (PCRE) [<a href="#references-pcre">PCRE</a>].</p>
+    	  </div>
+
+        <div class="div3">
+          <h4 class="adiv3"><a id="keyset-Modifiers" href="#keyset-Modifiers">6.2.2 Modifier keys</a></h4>
+          <p>Keyboard input uses modifier keys to change the normal behavior of a key.  Like other keys, modifier keys generate <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> and <a class="eventtype" href="#event-type-keyup"><code>keyup</code></a> events, as shown in the example below. Some modifiers are activated while the key is being pressed down or maintained pressed such as <code class="value">'Alt'</code>, <code class="value">'Control'</code>, <code class="value">'Shift'</code>, <code class="value">'AltGraph'</code>, or <code class="value">'Meta'</code>. Others modifiers are activated depending on their state such as <code class="value">'CapsLock'</code>, <code class="value">'NumLock'</code>, or <code class="value">'Scroll'</code>. Change in the state happens when the modifier key is being pressed down. The <a href="#events-Events-KeyboardEvent"><code>KeyboardEvent</code></a> interface provides convenient attributes for some common modifiers keys: <a href="#events-Events-KeyboardEvent-ctrlKey"><code>KeyboardEvent.ctrlKey</code></a>, <a href="#events-Events-KeyboardEvent-shiftKey"><code>KeyboardEvent.shiftKey</code></a>, <a href="#events-Events-KeyboardEvent-altKey"><code>KeyboardEvent.altKey</code></a>, <a href="#events-Events-KeyboardEvent-metaKey"><code>KeyboardEvent.metaKey</code></a>. Some operating systems simulate the <code class="value">'AltGraph'</code> modifier key with the combination of the <code>"Alt</code> and <code class="value">'Control'</code> modifier keys. Implementations are encouraged to use the <code class="value">'AltGraph'</code> modifier key.</p>
+          <p>The following example describes a possible sequence of keys to generate the Unicode character Q (Latin Capital Letter Q) on a PC/AT US keyboard using a US mapping:</p>
+          <ol>
+            <li><a class="eventtype" href="#event-type-keydown"><code>keydown</code></a>: <code class="value">'Shift'</code>, shiftKey</li>
+            <li><a class="eventtype" href="#event-type-keydown"><code>keydown</code></a>: <code class="value">'U+0051'</code> (Latin Capital Letter Q key), shiftKey</li>
+            <li><a class="eventtype" href="#event-type-textInput"><code>textInput</code></a>: <code class="value">'Q'</code></li>
+            <li><a class="eventtype" href="#event-type-keyup"><code>keyup</code></a>: <code class="value">'U+0051'</code>, shiftKey</li>
+            <li><a class="eventtype" href="#event-type-keyup"><code>keyup</code></a>: <code class="value">'Shift'</code></li>
+          </ol>
+          <p>The following example describes a possible sequence of keys that does not generate a Unicode character (using the same configuration):</p>
+          <ol>
+            <li><a class="eventtype" href="#event-type-keydown"><code>keydown</code></a>: <code class="value">'Control'</code>, ctrlKey</li>
+            <li><a class="eventtype" href="#event-type-keydown"><code>keydown</code></a>: <code class="value">'U+0056'</code> (Latin Capital Letter V key), ctrlKey</li>
+            <li><a class="eventtype" href="#event-type-keyup"><code>keyup</code></a>: <code class="value">'U+0056'</code>, ctrlKey</li>
+            <li><a class="eventtype" href="#event-type-keyup"><code>keyup</code></a>: <code class="value">'Control'</code></li>
+          </ol>
+          <p>In some cases, modifier keys change the key identifier value for a key event.  For example, on some MacOS keyboards, the  key labeled <code class="value">'delete'</code> functions the same as the <code class="value">'Backspace'</code> key on the Windows OS when unmodified, but when modified by the <code class="value">'Fn'</code> key, acts as the <code class="value">'Del'</code> key, and the value of the key identifier must match the most appropriate function of the key in its current modified state.</p>
+        </div>
+    <!-- div3 Modifiers -->
+    
+        <div class="div3">
+          <h4 class="adiv3"><a id="keyset-DeadKeys" href="#keyset-DeadKeys">6.2.3 Dead keys</a></h4>
+          
+          <p>Some keyboard input uses <a class="def" href="#glossary-dead-key">dead keys</a> for the input of composed character sequences. Unlike the handwriting sequence, in which users enter the base character first, keyboard input requires to enter a special state when a <a class="def" href="#glossary-dead-key">dead key</a> is pressed and emit the character(s) only when one of a limited number of "legal" base character is entered.  (NOTE: the MacOS and Linux operating systems use input methods to process <a class="def" href="#glossary-dead-key">dead keys</a>.)
+                          </p>
+          <p>The <a class="def" href="#glossary-dead-key">dead keys</a> are represented in the key identifiers set using combining diacritical marks. The sequence of keystrokes "U+0302" (Combining Circumflex Accent key) and "U+0045" (Latin Capital Letter E key) will likely produce (on a PC/AT french keyboard using a french mapping and without any modifier activated) the Unicode character &#xEA; (Latin Small Letter E With Circumflex), as preferred by the Unicode Normalization Form <em>NFC</em>:</p>
+          <ol>
+            <li><a class="eventtype" href="#event-type-keydown"><code>keydown</code></a>: <code class="value">'U+0302'</code> (Combining Circumflex Accent key)</li>
+            <li><a class="eventtype" href="#event-type-compositionstart"><code>compositionstart</code></a>: <code class="value">''</code></li>
+            <li><a class="eventtype" href="#event-type-compositionupdate"><code>compositionupdate</code></a>: <code class="value">''</code><span class="issue">@@ (value undefined - to be discussed)</span></li>
+            <li><a class="eventtype" href="#event-type-keyup"><code>keyup</code></a>: <code class="value">'U+0302'</code></li>
+            <li><a class="eventtype" href="#event-type-keydown"><code>keydown</code></a>: <code class="value">'U+0045'</code> (Latin Capital Letter E key)</li>
+            <li><a class="eventtype" href="#event-type-compositionend"><code>compositionend</code></a>: <code class="value">'&#xE9;'</code><span class="issue">@@ should compositionend come before or after textInput</span></li>
+            <li><a class="eventtype" href="#event-type-textInput"><code>textInput</code></a>: <code class="value">'&#xE9;'</code> (<code>"inputMode"</code>: <code class="value">'DOM_INPUT_METHOD_IME'</code>)</li>
+            <li><a class="eventtype" href="#event-type-keyup"><code>keyup</code></a>: <code class="value">'U+0045'</code></li>
+          </ol>
+          <p>This process may be aborted when a user types an unsupported base character (that is, a base character for which the which the active diacritical mark is not available) after pressing a <a class="def" href="#glossary-dead-key">dead key</a>:</p>
+          <ol>
+            <li><a class="eventtype" href="#event-type-keydown"><code>keydown</code></a>: <code class="value">'U+0302'</code> (Combining Circumflex Accent key)</li>
+            <li><a class="eventtype" href="#event-type-compositionstart"><code>compositionstart</code></a>: <code class="value">''</code></li>
+            <li><a class="eventtype" href="#event-type-compositionupdate"><code>compositionupdate</code></a>: <code class="value">''</code><span class="issue">@@ (undefined - to be discussed)</span></li>
+            <li><a class="eventtype" href="#event-type-keyup"><code>keyup</code></a>: <code class="value">'U+0302'</code></li>
+            <li><a class="eventtype" href="#event-type-keydown"><code>keydown</code></a>: <code class="value">'U+0051'</code> (Latin Capital Letter Q key)</li>
+            <li><a class="eventtype" href="#event-type-compositionend"><code>compositionend</code></a>: <code class="value">''</code></li>
+            <li><a class="eventtype" href="#event-type-textInput"><code>textInput</code></a>: <code class="value">'q'</code> (<code>"inputMode"</code>: <code class="value">'DOM_INPUT_METHOD_KEYBOARD'</code>)</li>
+            <li><a class="eventtype" href="#event-type-keyup"><code>keyup</code></a>: <code class="value">'U+0051'</code></li>
+          </ol>
+        </div>
+    <!-- div3 DeadKeys -->
+    
+        <div class="div3">
+          <h4 class="adiv3"><a id="keyset-IME" href="#keyset-IME">6.2.4 Input Method Editors</a></h4>
+          
+          <p>This specification includes a model for <a class="def" href="#glossary-ime">input method editors (IMEs)</a>, through the <a href="#events-compositionevents">CompositionEvent</a> interface and events.  However, composition events and keyboard events do not necessarily map as a one-to-one relationship.  As an example, receiving a <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> for the "Accept" key identifier does not necessarily imply that the text currently selected in the <a class="def" href="#glossary-ime">IME</a> is being accepted, but indicates only that a keystroke happened, disconnected from the <a class="def" href="#glossary-ime">IME</a> Accept functionality (which would normally result in a <a class="eventtype" href="#event-type-compositionend"><code>compositionend</code></a> event in most <a class="def" href="#glossary-ime">IME</a> systems).  Keyboard events cannot be used to determine the current state of the input method editor, which should be obtained through the <a href="#events-Events-CompositionEvent-data"><code>data</code></a> attribute of the <a href="#events-compositionevents">CompositionEvent</a> interface.  Additionally, <a class="def" href="#glossary-ime">IME</a> systems and devices vary in their functionality, and in which keys are used for activating that functionality, such that the <code class="value">'Convert'</code> and <code class="value">'Accept'</code> keys may be represented by other available keys.</p>
+          <p>Keyboard events correspond to the events generated by the input device after the keyboard layout mapping but before the processing of the input method editor.</p>
+          <p>The following example describes a possible sequence of keys to generate the Unicode character &#x5E02; (Kanji character, part of CJK Unified Ideographs) using Japanese input methods. This example assumes that the input method editor is activated and in the Japanese-Romaji input mode. The keys <code class="value">'Convert'</code> and <code class="value">'Accept'</code> may be replaced by others depending on the input device in use and the configuration of the IME, e.g. it could be respectively <code class="value">'U+0020'</code> (Space key) and <code class="value">'Enter'</code>.</p>
+          <ol>
+            <li><a class="eventtype" href="#event-type-keydown"><code>keydown</code></a>: <code class="value">'U+0053'</code> (Latin Capital Letter S key)</li>
+            <li><a class="eventtype" href="#event-type-compositionstart"><code>compositionstart</code></a>: <code class="value">''</code></li>
+            <li><a class="eventtype" href="#event-type-keyup"><code>keyup</code></a>: <code class="value">'U+0053'</code> (Latin Capital Letter S key)</li>
+            <li><a class="eventtype" href="#event-type-keydown"><code>keydown</code></a>: <code class="value">'U+0049'</code> (Latin Capital Letter I key)</li>
+            <li><a class="eventtype" href="#event-type-keyup"><code>keyup</code></a>: <code class="value">'U+0049'</code> (Latin Capital Letter I key)</li>
+            <li><a class="eventtype" href="#event-type-keydown"><code>keydown</code></a>: <code class="value">'Convert'</code></li>
+            <li><a class="eventtype" href="#event-type-compositionupdate"><code>compositionupdate</code></a>: <code class="value">'&#x8A69;'</code></li>
+            <li><a class="eventtype" href="#event-type-keyup"><code>keyup</code></a>: <code class="value">'Convert'</code></li>
+            <li><a class="eventtype" href="#event-type-keydown"><code>keydown</code></a>: <code class="value">'Convert'</code></li>
+            <li><a class="eventtype" href="#event-type-compositionupdate"><code>compositionupdate</code></a>: <code class="value">'&#x5E02;'</code></li>
+            <li><a class="eventtype" href="#event-type-keyup"><code>keyup</code></a>: <code class="value">'Convert'</code></li>
+            <li><a class="eventtype" href="#event-type-keydown"><code>keydown</code></a>: <code class="value">'Accept'</code></li>
+            <li><a class="eventtype" href="#event-type-compositionend"><code>compositionend</code></a>: <code class="value">'&#x5E02;'</code></li>
+            <li><a class="eventtype" href="#event-type-textInput"><code>textInput</code></a>: <code class="value">'&#x5E02;'</code> (<code>"inputMode"</code>: <code class="value">'DOM_INPUT_METHOD_IME'</code>)</li>
+            <li><a class="eventtype" href="#event-type-keyup"><code>keyup</code></a>: <code class="value">'Accept'</code></li>
+          </ol>
+          <p>IME composition may also be canceled as in the following example, with conditions identical to the previous example.  The key "Cancel" may also be replaced by others depending on the input device in use and the configuration of the IME, e.g. it could be "U+001B" (Escape key).</p>
+          <ol>
+            <li><a class="eventtype" href="#event-type-keydown"><code>keydown</code></a>: <code class="value">'U+0053'</code> (Latin Capital Letter S key)</li>
+            <li><a class="eventtype" href="#event-type-compositionstart"><code>compositionstart</code></a>: <code class="value">''</code></li>
+            <li><a class="eventtype" href="#event-type-keyup"><code>keyup</code></a>: <code class="value">'U+0053'</code> (Latin Capital Letter S key)</li>
+            <li><a class="eventtype" href="#event-type-keydown"><code>keydown</code></a>: <code class="value">'U+0049'</code> (Latin Capital Letter I key)</li>
+            <li><a class="eventtype" href="#event-type-keyup"><code>keyup</code></a>: <code class="value">'U+0049'</code> (Latin Capital Letter I key)</li>
+            <li><a class="eventtype" href="#event-type-keydown"><code>keydown</code></a>: <code class="value">'Convert'</code></li>
+            <li><a class="eventtype" href="#event-type-compositionupdate"><code>compositionupdate</code></a>: <code class="value">'&#x8A69;'</code></li>
+            <li><a class="eventtype" href="#event-type-keyup"><code>keyup</code></a>: <code class="value">'Convert'</code></li>
+            <li><a class="eventtype" href="#event-type-keydown"><code>keydown</code></a>: <code class="value">'Convert'</code></li>
+            <li><a class="eventtype" href="#event-type-compositionupdate"><code>compositionupdate</code></a>: <code class="value">'&#x5E02;'</code></li>
+            <li><a class="eventtype" href="#event-type-keyup"><code>keyup</code></a>: <code class="value">'Convert'</code></li>
+            <li><a class="eventtype" href="#event-type-keydown"><code>keydown</code></a>: <code class="value">'Cancel'</code></li>
+            <li><a class="eventtype" href="#event-type-compositionupdate"><code>compositionupdate</code></a>: <code class="value">''</code></li>
+            <li><a class="eventtype" href="#event-type-compositionend"><code>compositionend</code></a>: <code class="value">''</code></li>
+            <li><a class="eventtype" href="#event-type-keyup"><code>keyup</code></a>: <code class="value">'Cancel'</code></li>
+          </ol>
+          <p>NOTE: Some <a class="def" href="#glossary-ime">input method editors</a> (such as on the MacOS operating system) may set an empty string to the composition data attribute before canceling a composition.</p>
+          <h5 class="adiv4">
+            <a id="keyset-IME_keys" href="#keyset-IME_keys">6.2.4.1 Input Method Editor mode keys</a>
+          </h5>
+          <p>Some keys on certain devices are intended to activate <a class="def" href="#glossary-ime">input method editor</a> functionality, or to change the mode of an active <a class="def" href="#glossary-ime">input method editor</a>.  Custom keys for this purpose may be defined for different devices or language modes; the keys defined in this specification for this purpose are: <code>Alphanumeric</code>, <code>CodeInput</code>, <code>FinalMode</code>, <code>HangulMode</code>, <code>HanjaMode</code>, <code>Hiragana</code>, <code>JapaneseHiragana</code>, <code>JapaneseKatakana</code>, <code>JapaneseRomaji</code>, <code>JunjaMode</code>, <code>KanaMode</code>, <code>KanjiMode</code>, <code>Katakana</code>, and <code>RomanCharacters</code>.  When one of these keys is pressed, and no <a class="def" href="#glossary-ime">IME</a> is currently active, the appropriate <a class="def" href="#glossary-ime">IME</a>, shall be activated in the mode indicated by the key (if available); if an <a class="def" href="#glossary-ime">IME</a> is already active when the key is pressed, the active <a class="def" href="#glossary-ime">IME</a> may change to the indicated mode, or a different <a class="def" href="#glossary-ime">IME</a> may be launched, or the key may be ignored, on a device- and application-specific basis.</p>
+          <p>This specification also defines other keys which are intended for operation specifically with <a class="def" href="#glossary-ime">input method editors</a>: <code>Accept</code>, <code>AllCandidates</code>, <code>Cancel</code>, <code>Convert</code>, <code>Compose</code>, <code>FullWidth</code>, <code>HalfWidth</code>, <code>NextCandidate</code>, <code>Nonconvert</code>, and <code>PreviousCandidate</code>.  The functions of these keys are not defined in this specification; refer to other resources for details on <a class="def" href="#glossary-ime">input method editor</a> functionality.</p>
+          <p>Note that keys with <a class="def" href="#glossary-ime">input method editor</a> functions are note restricted to that purpose, and may have other device- or implementation-specific purposes, as well.</p>
+        </div>
+    <!-- div3 IME -->
+    
+        <div class="div3">
+          <h4 class="adiv3"><a id="keyset-cancelable_keys" href="#keyset-cancelable_keys">6.2.5 Default actions and cancelable keyboard events</a></h4>
+          
+          <p>Canceling the <a class="def" href="#glossary-default-action">default action</a> of a <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> event must not affect its respective <a class="eventtype" href="#event-type-keyup"><code>keyup</code></a> event, but it must prevent the respective <a class="eventtype" href="#event-type-textInput"><code>textInput</code></a> event from being generated. The following example describes a possible sequence of keys to generate the Unicode character Q (Latin Capital Letter Q) on a PC/AT US keyboard using a US mapping:</p>
+          <ol>
+            <li><a class="eventtype" href="#event-type-keydown"><code>keydown</code></a>: <code class="value">'U+0051'</code> (Latin Capital Letter Q key), shiftKey<br />
+                the <a class="def" href="#glossary-default-action">default action</a> of the <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> event is prevented, e.g. by invoking <a href="#events-event-type-preventDefault"><code>Event.preventDefault()</code></a> during the dispatch of the keydown event object.</li>
+            <li>No <a class="eventtype" href="#event-type-textInput"><code>textInput</code></a> shall be generated.</li>
+            <li><a class="eventtype" href="#event-type-keyup"><code>keyup</code></a>: <code class="value">'U+0051'</code>, shiftKey</li>
+          </ol>
+          <p>If the key is a modifier key, the keystroke shall be taken into account for the modifiers states. The following example describes a possible sequence of keys to generate the Unicode character Q (Latin Capital Letter Q) on a PC/AT US keyboard using a US mapping:</p>
+          <ol>
+            <li><a class="eventtype" href="#event-type-keydown"><code>keydown</code></a>: <code class="value">'Shift'</code>, shiftKey<br />
+                the <a class="def" href="#glossary-default-action">default action</a> of the keydown event shall be prevented.</li>
+            <li><a class="eventtype" href="#event-type-keydown"><code>keydown</code></a>: <code class="value">'U+0051'</code> (Latin Capital Letter Q key), shiftKey</li>
+            <li><a class="eventtype" href="#event-type-textInput"><code>textInput</code></a>: <code class="value">'Q'</code></li>
+            <li><a class="eventtype" href="#event-type-keyup"><code>keyup</code></a>: <code class="value">'U+0051'</code>, shiftKey</li>
+            <li><a class="eventtype" href="#event-type-keyup"><code>keyup</code></a>: <code class="value">'Shift'</code></li>
+          </ol>
+          <p>If the key is part of a sequence of several keystrokes, whether it is a <a class="def" href="#glossary-dead-key">dead key</a> or it is contributing to an Input Method Editor sequence, the keystroke shall be ignored (not taken into account) only if the <a class="def" href="#glossary-default-action">default action</a> is canceled on the <a class="eventtype" href="#event-type-keydown"><code>keydown</code></a> event. Canceling a <a class="def" href="#glossary-dead-key">dead key</a> on a <a class="eventtype" href="#event-type-keyup"><code>keyup</code></a> event has not effect on <a class="eventtype" href="#event-type-textInput"><code>textInput</code></a> events. The following example uses the keystrokes <code class="value">'U+0302'</code> (Combining Circumflex Accent key) and <code class="value">'U+0045'</code> (Latin Capital Letter E key) (on a PC/AT french keyboard using a french mapping and without any modifier activated):</p>
+          <ol>
+            <li><a class="eventtype" href="#event-type-keydown"><code>keydown</code></a>: <code class="value">'U+0302'</code> (Combining Circumflex Accent key)<br />
+                the <a class="def" href="#glossary-default-action">default action</a> of the keydown event shall be prevented</li>
+            <li><a class="eventtype" href="#event-type-keyup"><code>keyup</code></a>: <code class="value">'U+0302'</code></li>
+            <li><a class="eventtype" href="#event-type-keydown"><code>keydown</code></a>: <code class="value">'U+0045'</code> (Latin Capital Letter E key)</li>
+            <li><a class="eventtype" href="#event-type-textInput"><code>textInput</code></a>: <code class="value">'a'</code></li>
+            <li><a class="eventtype" href="#event-type-keyup"><code>keyup</code></a>: <code class="value">'U+0045'</code></li>
+          </ol>
+        </div>
+    <!-- div3 cancelable_keys -->
+
+        <div class="div3">
+          <h4 class="adiv3"><a id="keyset-Guide" href="#keyset-Guide">6.2.6 Guidelines for defining key identifiers</a></h4>
+
+  		    <p class="note"><strong>Note:</strong> This section is normative.</p>
+          <p>The list of key identifiers contained in this specification is not exhaustive and input devices may have to define their own key identifiers. Here is a algorithm to determine which key identifier to use:</p>  
+
+        	<ol>
+        		<li>Consider the primary function of the key (i.e., without modifiers), taking into consideration the keyboard layout mapping in use, to determine if a corresponding Unicode character exists from which a key identifier may be derived.  If multiple Unicode characters exist which correspond to the primary function of the key, the Unicode character with the lowest codepoint must be used. 
+        			<ol>
+        				<li>If the primary function of the key is to generate a character, and that character is in one of the <a class="def" href="#glossary-Unicode-character-categories">Unicode character categories</a>, then the key identifier shall be a string consisting of just that character.  <!-- If the primary function of the key is to generate a character in class <abbr title="Letter, Lowercase">Ll</abbr> for which there exists an equivalent, single character in class <abbr title="Letter, Uppercase">Lu</abbr>, the uppercase character should be used instead. <br/><span class="issue">Is this necessary?  Why can't we simply allow lowercase letters as well?  If a script author wishes to do a comparison, they can cast the output to upper or lower case as needed.  See <a href="http://www.w3.org/2008/webapps/track/issues/23" title="ISSUE-23 - Web Applications Working Group Tracker">ISSUE-23</a>.</span> --></li>
+        				<li> If the primary function of the key is to generate a character that is not in one of the above general categories, or if the primary function of the key is a function for which there exists a corresponding Unicode character that is not in one of the above general categories, then: 
+        					<ol>
+        						<li>If there exists an appropriate key identifier in the <a href="#keyset-keyidentifiers">key identifiers set</a>, and that key identifier does not have a <a class="def" href="#glossary-unicode-code-point">Unicode code point</a>, that key identifier must be used.</li>
+        						<li>If there exists an appropriate key identifier in the <a href="#keyset-keyidentifiers">key identifiers set</a>, and that key identifier has a <a class="def" href="#glossary-unicode-code-point">Unicode code point</a>, and that key identifier is in one of the <a class="def" href="#glossary-Unicode-character-categories">Unicode character categories</a>, then the <a class="def" href="#glossary-character-value">character value</a> itself for that key identifier must be used.</li>
+
+        						<li>If there is no appropriate key identifier in the <a href="#keyset-keyidentifiers">key identifiers set</a>, then the key identifier is a string beginning with "U+" and followed by the <a class="def" href="#glossary-unicode-code-point">Unicode code point</a> of the character in hexadecimal, using at least four digits. Leading zeroes must be omitted unless they are required to make the codepoint use at least four digits.</li>
+        					</ol>
+        				</li>
+        			</ol>
+        		</li>
+        		<li> For keys with no corresponding Unicode character, a key identifier can be devised.  The key identifier should be as human friendly as possible and must not contain whitespace.  The identifier must be composed only of characters in the ranges <abbr title="0-9">U+0030..U+0039</abbr>, <abbr title="A-Z">U+0041..U+005A</abbr>, or <abbr title="a-z">U+0061..U+007A</abbr>, and must begin with a character in the range <abbr title="A-Z">U+0041..U+005A</abbr>.  <br/><span class="issue">Why should we not allow names in other ranges (Chinese, for example)?</span></li>
+        	</ol>
+        	<p>Examples:</p>
+        	<ul>
+        		<li>On a PC/AT US keyboard with a two-handed Dvorak keyboard mapping, the key labeled <code class="value">'Q'</code> maps to the key identifiers <code class="value">'5'</code> (unmodified) and <code class="value">'%'</code> (shifted).  The primary function of this key is to generate the character <code class="value">'U+0035'</code>.  Since this character is in general category <abbr title="Number, Decimal Digit">Nd</abbr>, the key identifier for the unmodified key shall be <code class="value">'5'</code>.</li>
+        		<li>On a French PC keyboard with a standard French mapping, the primary function of the <code class="value">'^'</code> key is as a <a class="def" href="#glossary-dead-key">dead key</a> for the circumflex diacritical mark.  This corresponds to the combining Unicode character <code class="value">'U+0302'</code>.  Since this character is in general category <abbr title="Mark, Nonspacing">Mn</abbr>, the key identifier shall be <code class="value">'U+0302'</code>.</li>
+        		<li>On a Korean PC keyboard with a standard Korean mapping, the primary function of the <code class="value">'Ha/En'</code> key is to switch between Hangul and English input.  The predefined key identifier list has an appropriate entry for this key, <code class="value">'HangulMode'</code>, so this shall be the key identifier.</li>
+        		<li>On some models of mobile devices, the primary function of the key with a picture of a calendar on it is to launch the calendaring program. Since there is no Unicode character that corresponds to this function, and there is no appropriate entry in the predefined key identifier list, a new identifier may be devised, such as <code class="value">'Calendar'</code>.</li>
+        	</ul>
+    	  </div>
         	  
-            <div>
-            <h4 class="adiv3"><a id="keyset-key-identifiers" href="#keyset-key-identifiers">6.3.2 Key Identifiers Set</a></h4>
-            <p class="note"><strong>Note:</strong> The keycodes <code class="value">'NumPad0'</code>, <code class="value">'NumPad1'</code>, <code class="value">'NumPad2'</code>, <code class="value">'NumPad3'</code>, <code class="value">'NumPad4'</code>, <code class="value">'NumPad5'</code>, <code class="value">'NumPad6'</code>, <code class="value">'NumPad7'</code>, <code class="value">'NumPad8'</code>, and <code class="value">'NumPad9'</code> are not part of this set. Use <a href="#events-Events-KeyboardEvent-keylocation"><code>KeyboardEvent.keyLocation</code></a> to know if a key originated from the numeric keypad.</p>
-
-            <dl>
-              <dt><a id="keyset-key-Accept"><code class="value">'Accept'</code></a></dt>
-              <dd>The Accept (Commit, OK) key.</dd>
-
-              <dt><a id="keyset-key-Add"><code class="value">'Add'</code></a></dt>
-              <dd>The Add key.</dd>
-
-              <dt><a id="keyset-key-Again"><code class="value">'Again'</code></a></dt>
-              <dd>The Again key.</dd>
-
-              <dt><a id="keyset-key-AllCandidates"><code class="value">'AllCandidates'</code></a></dt>
-              <dd>The All Candidates key.</dd>
-
-              <dt><a id="keyset-key-Alphanumeric"><code class="value">'Alphanumeric'</code></a></dt>
-              <dd>The Alphanumeric key.</dd>
-
-              <dt><a id="keyset-key-Alt"><code class="value">'Alt'</code></a></dt>
-              <dd>The Alt (Menu) key.</dd>
-
-              <dt><a id="keyset-key-AltGraph"><code class="value">'AltGraph'</code></a></dt>
-              <dd>The Alt-Graph key.</dd>
-
-              <dt><a id="keyset-key-Apps"><code class="value">'Apps'</code></a></dt>
-              <dd>The Application key.</dd>
-
-              <dt><a id="keyset-key-Attn"><code class="value">'Attn'</code></a></dt>
-              <dd>The ATTN key.</dd>
-
-              <dt><a id="keyset-key-BrowserBack"><code class="value">'BrowserBack'</code></a></dt>
-              <dd>The Browser Back key.</dd>
-
-              <dt><a id="keyset-key-BrowserFavorites"><code class="value">'BrowserFavorites'</code></a></dt>
-              <dd>The Browser Favorites key.</dd>
-
-              <dt><a id="keyset-key-BrowserForward"><code class="value">'BrowserForward'</code></a></dt>
-              <dd>The Browser Forward key.</dd>
-
-              <dt><a id="keyset-key-BrowserHome"><code class="value">'BrowserHome'</code></a></dt>
-              <dd>The Browser Home key.</dd>
-
-              <dt><a id="keyset-key-BrowserRefresh"><code class="value">'BrowserRefresh'</code></a></dt>
-              <dd>The Browser Refresh key.</dd>
-
-              <dt><a id="keyset-key-BrowserSearch"><code class="value">'BrowserSearch'</code></a></dt>
-              <dd>The Browser Search key.</dd>
-
-              <dt><a id="keyset-key-BrowserStop"><code class="value">'BrowserStop'</code></a></dt>
-              <dd>The Browser Stop key.</dd>
-
-              <dt><a id="keyset-key-CapsLock"><code class="value">'CapsLock'</code></a></dt>
-              <dd>The Caps Lock (Capital) key.</dd>
-
-              <dt><a id="keyset-key-Clear"><code class="value">'Clear'</code></a></dt>
-              <dd>The Clear key.</dd>
-
-              <dt><a id="keyset-key-CodeInput"><code class="value">'CodeInput'</code></a></dt>
-              <dd>The Code Input key.</dd>
-
-              <dt><a id="keyset-key-Compose"><code class="value">'Compose'</code></a></dt>
-              <dd>The Compose key.</dd>
-
-              <dt><a id="keyset-key-Control"><code class="value">'Control'</code></a></dt>
-              <dd>The Control (Ctrl) key.</dd>
-
-              <dt><a id="keyset-key-Crsel"><code class="value">'Crsel'</code></a></dt>
-              <dd>The Crsel key.</dd>
-
-              <dt><a id="keyset-key-Convert"><code class="value">'Convert'</code></a></dt>
-              <dd>The Convert key.</dd>
-
-              <dt><a id="keyset-key-Copy"><code class="value">'Copy'</code></a></dt>
-              <dd>The Copy key.</dd>
-
-              <dt><a id="keyset-key-Cut"><code class="value">'Cut'</code></a></dt>
-              <dd>The Cut key.</dd>
-
-              <dt><a id="keyset-key-Decimal"><code class="value">'Decimal'</code></a></dt>
-              <dd>The Decimal key.</dd>
-
-              <dt><a id="keyset-key-Divide"><code class="value">'Divide'</code></a></dt>
-              <dd>The Divide key.</dd>
-
-              <dt><a id="keyset-key-Down"><code class="value">'Down'</code></a></dt>
-              <dd>The Down Arrow key.</dd>
-
-              <dt><a id="keyset-key-DownLeft"><code class="value">'DownLeft'</code></a></dt>
-              <dd>The diagonal Down-Left Arrow key.</dd>
-
-              <dt><a id="keyset-key-DownRight"><code class="value">'DownRight'</code></a></dt>
-              <dd>The diagonal Down-Right Arrow key.</dd>
-
-              <dt><a id="keyset-key-End"><code class="value">'End'</code></a></dt>
-              <dd>The End key.</dd>
-
-              <dt><a id="keyset-key-Enter"><code class="value">'Enter'</code></a></dt>
-              <dd>The Enter key.
-               <span class="note"><strong>Note:</strong> This key identifier shall be also used for the Return (Macintosh numpad) key.</span>
-              </dd>
-
-              <dt><a id="keyset-key-EraseEof"><code class="value">'EraseEof'</code></a></dt>
-              <dd>The Erase EOF key.</dd>
-
-              <dt><a id="keyset-key-Execute"><code class="value">'Execute'</code></a></dt>
-              <dd>The Execute key.</dd>
-
-              <dt><a id="keyset-key-Exsel"><code class="value">'Exsel'</code></a></dt>
-              <dd>The Exsel key.</dd>
-
-              <dt><a id="keyset-key-Fn"><code class="value">'Fn'</code></a></dt>
-              <dd>The Function switch key.</dd>
-
-              <dt><a id="keyset-key-F1"><code class="value">'F1'</code></a></dt>
-              <dd>The F1 key.</dd>
-
-              <dt><a id="keyset-key-F2"><code class="value">'F2'</code></a></dt>
-              <dd>The F2 key.</dd>
-
-              <dt><a id="keyset-key-F3"><code class="value">'F3'</code></a></dt>
-              <dd>The F3 key.</dd>
-
-              <dt><a id="keyset-key-F4"><code class="value">'F4'</code></a></dt>
-              <dd>The F4 key.</dd>
-
-              <dt><a id="keyset-key-F5"><code class="value">'F5'</code></a></dt>
-              <dd>The F5 key.</dd>
-
-              <dt><a id="keyset-key-F6"><code class="value">'F6'</code></a></dt>
-              <dd>The F6 key.</dd>
-
-              <dt><a id="keyset-key-F7"><code class="value">'F7'</code></a></dt>
-              <dd>The F7 key.</dd>
-
-              <dt><a id="keyset-key-F8"><code class="value">'F8'</code></a></dt>
-              <dd>The F8 key.</dd>
-
-              <dt><a id="keyset-key-F9"><code class="value">'F9'</code></a></dt>
-              <dd>The F9 key.</dd>
-
-              <dt><a id="keyset-key-F10"><code class="value">'F10'</code></a></dt>
-              <dd>The F10 key.</dd>
-
-              <dt><a id="keyset-key-F11"><code class="value">'F11'</code></a></dt>
-              <dd>The F11 key.</dd>
-
-              <dt><a id="keyset-key-F12"><code class="value">'F12'</code></a></dt>
-              <dd>The F12 key.</dd>
-
-              <dt><a id="keyset-key-F13"><code class="value">'F13'</code></a></dt>
-              <dd>The F13 key.</dd>
-
-              <dt><a id="keyset-key-F14"><code class="value">'F14'</code></a></dt>
-              <dd>The F14 key.</dd>
-
-              <dt><a id="keyset-key-F15"><code class="value">'F15'</code></a></dt>
-              <dd>The F15 key.</dd>
-
-              <dt><a id="keyset-key-F16"><code class="value">'F16'</code></a></dt>
-              <dd>The F16 key.</dd>
-
-              <dt><a id="keyset-key-F17"><code class="value">'F17'</code></a></dt>
-              <dd>The F17 key.</dd>
-
-              <dt><a id="keyset-key-F18"><code class="value">'F18'</code></a></dt>
-              <dd>The F18 key.</dd>
-
-              <dt><a id="keyset-key-F19"><code class="value">'F19'</code></a></dt>
-              <dd>The F19 key.</dd>
-
-              <dt><a id="keyset-key-F20"><code class="value">'F20'</code></a></dt>
-              <dd>The F20 key.</dd>
-
-              <dt><a id="keyset-key-F21"><code class="value">'F21'</code></a></dt>
-              <dd>The F21 key.</dd>
-
-              <dt><a id="keyset-key-F22"><code class="value">'F22'</code></a></dt>
-              <dd>The F22 key.</dd>
-
-              <dt><a id="keyset-key-F23"><code class="value">'F23'</code></a></dt>
-              <dd>The F23 key.</dd>
-
-              <dt><a id="keyset-key-F24"><code class="value">'F24'</code></a></dt>
-              <dd>The F24 key.</dd>
-
-              <dt><a id="keyset-key-FinalMode"><code class="value">'FinalMode'</code></a></dt>
-              <dd>The Final Mode (Final) key used on some asian keyboards.</dd>
-
-              <dt><a id="keyset-key-Find"><code class="value">'Find'</code></a></dt>
-              <dd>The Find key.</dd>
-
-              <dt><a id="keyset-key-FullWidth"><code class="value">'FullWidth'</code></a></dt>
-              <dd>The Full-Width Characters key.</dd>
-
-              <dt><a id="keyset-key-HalfWidth"><code class="value">'HalfWidth'</code></a></dt>
-              <dd>The Half-Width Characters key.</dd>
-
-              <dt><a id="keyset-key-HangulMode"><code class="value">'HangulMode'</code></a></dt>
-              <dd>The Hangul (Korean characters) Mode key.</dd>
-
-              <dt><a id="keyset-key-HanjaMode"><code class="value">'HanjaMode'</code></a></dt>
-              <dd>The Hanja (Korean characters) Mode key.</dd>
-
-              <dt><a id="keyset-key-Help"><code class="value">'Help'</code></a></dt>
-              <dd>The Help key.</dd>
-
-              <dt><a id="keyset-key-Hiragana"><code class="value">'Hiragana'</code></a></dt>
-              <dd>The Hiragana (Japanese Kana characters) key.</dd>
-
-              <dt><a id="keyset-key-Home"><code class="value">'Home'</code></a></dt>
-              <dd>The Home key.</dd>
-
-              <dt><a id="keyset-key-Insert"><code class="value">'Insert'</code></a></dt>
-              <dd>The Insert (Ins) key.</dd>
-
-              <dt><a id="keyset-key-JapaneseHiragana"><code class="value">'JapaneseHiragana'</code></a></dt>
-              <dd>The Japanese-Hiragana key.</dd>
-
-              <dt><a id="keyset-key-JapaneseKatakana"><code class="value">'JapaneseKatakana'</code></a></dt>
-              <dd>The Japanese-Katakana key.</dd>
-
-              <dt><a id="keyset-key-JapaneseRomaji"><code class="value">'JapaneseRomaji'</code></a></dt>
-              <dd>The Japanese-Romaji key.</dd>
-
-              <dt><a id="keyset-key-JunjaMode"><code class="value">'JunjaMode'</code></a></dt>
-              <dd>The Junja Mode key.</dd>
-
-              <dt><a id="keyset-key-KanaMode"><code class="value">'KanaMode'</code></a></dt>
-              <dd>The Kana Mode (Kana Lock) key.</dd>
-
-              <dt><a id="keyset-key-KanjiMode"><code class="value">'KanjiMode'</code></a></dt>
-              <dd>The Kanji (Japanese name for ideographic characters of Chinese origin) Mode key.</dd>
-
-              <dt><a id="keyset-key-Katakana"><code class="value">'Katakana'</code></a></dt>
-              <dd>The Katakana (Japanese Kana characters) key.</dd>
-
-              <dt><a id="keyset-key-LaunchApplication1"><code class="value">'LaunchApplication1'</code></a></dt>
-              <dd>The Start Application One key.</dd>
-
-              <dt><a id="keyset-key-LaunchApplication2"><code class="value">'LaunchApplication2'</code></a></dt>
-              <dd>The Start Application Two key.</dd>
-
-              <dt><a id="keyset-key-LaunchMail"><code class="value">'LaunchMail'</code></a></dt>
-              <dd>The Start Mail key.</dd>
-
-              <dt><a id="keyset-key-Left"><code class="value">'Left'</code></a></dt>
-              <dd>The Left Arrow key.</dd>
-
-              <dt><a id="keyset-key-Menu"><code class="value">'Menu'</code></a></dt>
-              <dd>The Menu key.</dd>
-
-              <dt><a id="keyset-key-Meta"><code class="value">'Meta'</code></a></dt>
-              <dd>The Meta key.</dd>
-
-              <dt><a id="keyset-key-MediaNextTrack"><code class="value">'MediaNextTrack'</code></a></dt>
-              <dd>The Media Next Track key.</dd>
-
-              <dt><a id="keyset-key-MediaPlayPause"><code class="value">'MediaPlayPause'</code></a></dt>
-              <dd>The Media Play Pause key.</dd>
-
-              <dt><a id="keyset-key-MediaPreviousTrack"><code class="value">'MediaPreviousTrack'</code></a></dt>
-              <dd>The Media Previous Track key.</dd>
-
-              <dt><a id="keyset-key-MediaStop"><code class="value">'MediaStop'</code></a></dt>
-              <dd>The Media Stop key.</dd>
-
-              <dt><a id="keyset-key-ModeChange"><code class="value">'ModeChange'</code></a></dt>
-              <dd>The Mode Change key.</dd>
-
-              <dt><a id="keyset-key-MultiplyChar"><code class="value">'×'</code></a></dt>
-              <dt><a id="keyset-key-Multiply"><code class="value">'Multiply'</code></a></dt>
-              <dt><a id="keyset-key-U-00D7"><code class="value">'U+00D7'</code></a></dt>
-              <dd>The Multiply key.</dd>
-
-              <dt><a id="keyset-key-NextCandidate"><code class="value">'NextCandidate'</code></a></dt>
-              <dd>The Next Candidate function key.</dd>
-
-              <dt><a id="keyset-key-Nonconvert"><code class="value">'Nonconvert'</code></a></dt>
-              <dd>The Nonconvert (Don't Convert) key.</dd>
-
-              <dt><a id="keyset-key-NumLock"><code class="value">'NumLock'</code></a></dt>
-              <dd>The Number Lock key.</dd>
-
-              <dt><a id="keyset-key-PageDown"><code class="value">'PageDown'</code></a></dt>
-              <dd>The Page Down (Next) key.</dd>
-
-              <dt><a id="keyset-key-PageUp"><code class="value">'PageUp'</code></a></dt>
-              <dd>The Page Up key.</dd>
-
-              <dt><a id="keyset-key-Paste"><code class="value">'Paste'</code></a></dt>
-              <dd>The Paste key.</dd>
-
-              <dt><a id="keyset-key-Pause"><code class="value">'Pause'</code></a></dt>
-              <dd>The Pause key.</dd>
-
-              <dt><a id="keyset-key-Play"><code class="value">'Play'</code></a></dt>
-              <dd>The Play key.</dd>
-
-              <dt><a id="keyset-key-PreviousCandidate"><code class="value">'PreviousCandidate'</code></a></dt>
-              <dd>The Previous Candidate function key.</dd>
-
-              <dt><a id="keyset-key-PrintScreen"><code class="value">'PrintScreen'</code></a></dt>
-              <dd>The Print Screen (PrintScrn, SnapShot) key.</dd>
-
-              <dt><a id="keyset-key-Process"><code class="value">'Process'</code></a></dt>
-              <dd>The Process key.</dd>
-
-              <dt><a id="keyset-key-Props"><code class="value">'Props'</code></a></dt>
-              <dd>The Props key.</dd>
-
-              <dt><a id="keyset-key-Right"><code class="value">'Right'</code></a></dt>
-              <dd>The Right Arrow key.</dd>
-
-              <dt><a id="keyset-key-RomanCharacters"><code class="value">'RomanCharacters'</code></a></dt>
-              <dd>The Roman Characters function key.</dd>
-
-              <dt><a id="keyset-key-Scroll"><code class="value">'Scroll'</code></a></dt>
-              <dd>The Scroll Lock key.</dd>
-
-              <dt><a id="keyset-key-Select"><code class="value">'Select'</code></a></dt>
-              <dd>The Select key.</dd>
-
-              <dt><a id="keyset-key-SelectMedia"><code class="value">'SelectMedia'</code></a></dt>
-              <dd>The Select Media key.</dd>
-
-              <dt><a id="keyset-key-Separator"><code class="value">'Separator'</code></a></dt>
-              <dd>The Separator key.</dd>
-
-              <dt><a id="keyset-key-Shift"><code class="value">'Shift'</code></a></dt>
-              <dd>The Shift key.</dd>
-
-              <dt><a id="keyset-key-Soft1"><code class="value">'Soft1'</code></a></dt>
-              <dd>The Soft1 key.</dd>
-
-              <dt><a id="keyset-key-Soft2"><code class="value">'Soft2'</code></a></dt>
-              <dd>The Soft2 key.</dd>
-
-              <dt><a id="keyset-key-Soft3"><code class="value">'Soft3'</code></a></dt>
-              <dd>The Soft3 key.</dd>
-
-              <dt><a id="keyset-key-Soft4"><code class="value">'Soft4'</code></a></dt>
-              <dd>The Soft4 key.</dd>
-
-              <dt><a id="keyset-key-Stop"><code class="value">'Stop'</code></a></dt>
-              <dd>The Stop key.</dd>
-
-              <dt><a id="keyset-key-Subtract"><code class="value">'Subtract'</code></a></dt>
-              <dd>The Subtract key.</dd>
-
-              <dt><a id="keyset-key-Up"><code class="value">'Up'</code></a></dt>
-              <dd>The Up Arrow key.</dd>
-
-              <dt><a id="keyset-key-UpLeft"><code class="value">'UpLeft'</code></a></dt>
-              <dd>The diagonal Up-Left Arrow key.</dd>
-
-              <dt><a id="keyset-key-UpRight"><code class="value">'UpRight'</code></a></dt>
-              <dd>The diagonal Up-Right Arrow key.</dd>
-
-              <dt><a id="keyset-key-Undo"><code class="value">'Undo'</code></a></dt>
-              <dd>The Undo key.</dd>
-
-              <dt><a id="keyset-key-VolumeDown"><code class="value">'VolumeDown'</code></a></dt>
-              <dd>The Volume Down key.</dd>
-
-              <dt><a id="keyset-key-VolumeMute"><code class="value">'VolumeMute'</code></a></dt>
-              <dd>The Volume Mute key.</dd>
-
-              <dt><a id="keyset-key-VolumeUp"><code class="value">'VolumeUp'</code></a></dt>
-              <dd>The Volume Up key.</dd>
-
-              <dt><a id="keyset-key-Win"><code class="value">'Win'</code></a></dt>
-              <dd>The Windows Logo key.</dd>
-
-              <dt><a id="keyset-key-Zoom"><code class="value">'Zoom'</code></a></dt>
-              <dd>The Zoom key.</dd>
-
-              <dt><a id="keyset-key-Backspace"><code class="value">'Backspace'</code></a></dt>
-              <dt><a id="keyset-key-U-0008"><code class="value">'U+0008'</code></a></dt>
-              <dd>The Backspace (Back) key.
-               <span class="note"><strong>Note:</strong> This key identifier 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>
-              </dd>
-
-              <dt><a id="keyset-key-Tab"><code class="value">'Tab'</code></a></dt>
-              <dt><a id="keyset-key-U-0009"><code class="value">'U+0009'</code></a></dt>
-              <dd>The Horizontal Tabulation (Tab) key.</dd>
-
-              <dt><a id="keyset-key-Cancel"><code class="value">'Cancel'</code></a></dt>
-              <dt><a id="keyset-key-U-0018"><code class="value">'U+0018'</code></a></dt>
-              <dd>The Cancel key.</dd>
-
-              <dt><a id="keyset-key-Esc"><code class="value">'Esc'</code></a></dt>
-              <dt><a id="keyset-key-U-001B"><code class="value">'U+001B'</code></a></dt>
-              <dd>The Escape (Esc) key.</dd>
-
-              <dt><a id="keyset-key-Spacebar"><code class="value">'Spacebar'</code></a></dt>
-              <dt><a id="keyset-key-U-0020"><code class="value">'U+0020'</code></a></dt>
-              <dd>The Space (Spacebar) key.</dd>
-
-              <dt><a id="keyset-key-ExclamationChar"><code class="value">'!'</code></a></dt>
-              <dt><a id="keyset-key-Exclamation"><code class="value">'Exclamation'</code></a></dt>
-              <dt><a id="keyset-key-U-0021"><code class="value">'U+0021'</code></a></dt>
-              <dd>The Exclamation Mark (Factorial, Bang) key (!).</dd>
-
-              <dt><a id="keyset-key-DoubleQuote"><code class="value">'DoubleQuote'</code></a></dt>
-              <dt><a id="keyset-key-U-0022"><code class="value">'U+0022'</code></a></dt>
-              <dd>The Quotation Mark (Quote Double) key (").</dd>
-
-              <dt><a id="keyset-key-HashChar"><code class="value">'#'</code></a></dt>
-              <dt><a id="keyset-key-Hash"><code class="value">'Hash'</code></a></dt>
-              <dt><a id="keyset-key-U-0023"><code class="value">'U+0023'</code></a></dt>
-              <dd>The Number Sign (Pound Sign, Hash, Crosshatch, Octothorpe) key (#).</dd>
-
-              <dt><a id="keyset-key-DollarChar"><code class="value">'$'</code></a></dt>
-              <dt><a id="keyset-key-Dollar"><code class="value">'Dollar'</code></a></dt>
-              <dt><a id="keyset-key-U-0024"><code class="value">'U+0024'</code></a></dt>
-              <dd>The Dollar Sign (milreis, escudo) key ($).</dd>
-
-              <dt><a id="keyset-key-AmpersandChar"><code class="value">'&amp;'</code></a></dt>
-              <dt><a id="keyset-key-Ampersand"><code class="value">'Ampersand'</code></a></dt>
-              <dt><a id="keyset-key-U-0026"><code class="value">'U+0026'</code></a></dt>
-              <dd>The Ampersand key (&amp;).</dd>
-
-              <dt><a id="keyset-key-Apostrophe"><code class="value">'Apostrophe'</code></a></dt>
-              <dt><a id="keyset-key-U-0027"><code class="value">'U+0027'</code></a></dt>
-              <dd>The Apostrophe (Apostrophe-Quote, APL Quote) key (').</dd>
-
-              <dt><a id="keyset-key-LeftParenChar"><code class="value">'('</code></a></dt>
-              <dt><a id="keyset-key-LeftParen"><code class="value">'LeftParen'</code></a></dt>
-              <dt><a id="keyset-key-U-0028"><code class="value">'U+0028'</code></a></dt>
-              <dd>The Left Parenthesis (Opening Parenthesis) key (().</dd>
-
-              <dt><a id="keyset-key-RightParenChar"><code class="value">')'</code></a></dt>
-              <dt><a id="keyset-key-RightParen"><code class="value">'RightParen'</code></a></dt>
-              <dt><a id="keyset-key-U-0029"><code class="value">'U+0029'</code></a></dt>
-              <dd>The Right Parenthesis (Closing Parenthesis) key ()).</dd>
-
-              <dt><a id="keyset-key-AsteriskChar"><code class="value">'*'</code></a></dt>
-              <dt><a id="keyset-key-Asterisk"><code class="value">'Asterisk'</code></a></dt>
-              <dt><a id="keyset-key-U-002A"><code class="value">'U+002A'</code></a></dt>
-              <dd>The Asterisk (Star) key (*).</dd>
-
-              <dt><a id="keyset-key-PlusChar"><code class="value">'+'</code></a></dt>
-              <dt><a id="keyset-key-Plus"><code class="value">'Plus'</code></a></dt>
-              <dt><a id="keyset-key-U-002B"><code class="value">'U+002B'</code></a></dt>
-              <dd>The Plus Sign (Plus) key (+).</dd>
-
-              <dt><a id="keyset-key-PercentChar"><code class="value">'%'</code></a></dt>
-              <dt><a id="keyset-key-Percent"><code class="value">'Percent'</code></a></dt>
-              <dt><a id="keyset-key-U-0025"><code class="value">'U+0025'</code></a></dt>
-              <dd>The Percent Sign (Percent) key (+).</dd>
-
-              <dt><a id="keyset-key-CommaChar"><code class="value">','</code></a></dt>
-              <dt><a id="keyset-key-Comma"><code class="value">'Comma'</code></a></dt>
-              <dt><a id="keyset-key-U-002C"><code class="value">'U+002C'</code></a></dt>
-              <dd>The Comma (decimal separator) sign key (,).</dd>
-
-              <dt><a id="keyset-key-HyphenMinusChar"><code class="value">'-'</code></a></dt>
-              <dt><a id="keyset-key-HyphenMinus"><code class="value">'HyphenMinus'</code></a></dt>
-              <dt><a id="keyset-key-U-002D"><code class="value">'U+002D'</code></a></dt>
-              <dd>The Hyphen-minus (hyphen or minus sign) key (-).</dd>
-
-              <dt><a id="keyset-key-PeriodChar"><code class="value">'.'</code></a></dt>
-              <dt><a id="keyset-key-Period"><code class="value">'Period'</code></a></dt>
-              <dt><a id="keyset-key-U-002E"><code class="value">'U+002E'</code></a></dt>
-              <dd>The Full Stop (period, dot, decimal point) key (.).</dd>
-
-              <dt><a id="keyset-key-SolidusChar"><code class="value">'/'</code></a></dt>
-              <dt><a id="keyset-key-Solidus"><code class="value">'Solidus'</code></a></dt>
-              <dt><a id="keyset-key-U-002F"><code class="value">'U+002F'</code></a></dt>
-              <dd>The Solidus (slash, virgule, shilling) key (/).</dd>
-
-              <dt><a id="keyset-key-0"><code class="value">'0'</code></a></dt>
-              <dt><a id="keyset-key-U-0030"><code class="value">'U+0030'</code></a></dt>
-              <dd>The Digit Zero key (0).</dd>
-
-              <dt><a id="keyset-key-1"><code class="value">'1'</code></a></dt>
-              <dt><a id="keyset-key-U-0031"><code class="value">'U+0031'</code></a></dt>
-              <dd>The Digit One key (1).</dd>
-
-              <dt><a id="keyset-key-2"><code class="value">'2'</code></a></dt>
-              <dt><a id="keyset-key-U-0032"><code class="value">'U+0032'</code></a></dt>
-              <dd>The Digit Two key (2).</dd>
-
-              <dt><a id="keyset-key-3"><code class="value">'3'</code></a></dt>
-              <dt><a id="keyset-key-U-0033"><code class="value">'U+0033'</code></a></dt>
-              <dd>The Digit Three key (3).</dd>
-
-              <dt><a id="keyset-key-4"><code class="value">'4'</code></a></dt>
-              <dt><a id="keyset-key-U-0034"><code class="value">'U+0034'</code></a></dt>
-              <dd>The Digit Four key (4).</dd>
-
-              <dt><a id="keyset-key-5"><code class="value">'5'</code></a></dt>
-              <dt><a id="keyset-key-U-0035"><code class="value">'U+0035'</code></a></dt>
-              <dd>The Digit Five key (5).</dd>
-
-              <dt><a id="keyset-key-6"><code class="value">'6'</code></a></dt>
-              <dt><a id="keyset-key-U-0036"><code class="value">'U+0036'</code></a></dt>
-              <dd>The Digit Six key (6).</dd>
-
-              <dt><a id="keyset-key-7"><code class="value">'7'</code></a></dt>
-              <dt><a id="keyset-key-U-0037"><code class="value">'U+0037'</code></a></dt>
-              <dd>The Digit Seven key (7).</dd>
-
-              <dt><a id="keyset-key-8"><code class="value">'8'</code></a></dt>
-              <dt><a id="keyset-key-U-0038"><code class="value">'U+0038'</code></a></dt>
-              <dd>The Digit Eight key (8).</dd>
-
-              <dt><a id="keyset-key-9"><code class="value">'9'</code></a></dt>
-              <dt><a id="keyset-key-U-0039"><code class="value">'U+0039'</code></a></dt>
-              <dd>The Digit Nine key (9).</dd>
-
-              <dt><a id="keyset-key-ColonChar"><code class="value">':'</code></a></dt>
-              <dt><a id="keyset-key-Colon"><code class="value">'Colon'</code></a></dt>
-              <dt><a id="keyset-key-U-003A"><code class="value">'U+003A'</code></a></dt>
-              <dd>The Colon key (:).</dd>
-
-              <dt><a id="keyset-key-SemicolonChar"><code class="value">';'</code></a></dt>
-              <dt><a id="keyset-key-Semicolon"><code class="value">'Semicolon'</code></a></dt>
-              <dt><a id="keyset-key-U-003B"><code class="value">'U+003B'</code></a></dt>
-              <dd>The Semicolon key (;).</dd>
-
-              <dt><a id="keyset-key-LessThan"><code class="value">'LessThan'</code></a></dt>
-              <dt><a id="keyset-key-U-003C"><code class="value">'U+003C'</code></a></dt>
-              <dd>The Less-Than Sign key (&lt;).</dd>
-
-              <dt><a id="keyset-key-EqualsChar"><code class="value">'='</code></a></dt>
-              <dt><a id="keyset-key-Equals"><code class="value">'Equals'</code></a></dt>
-              <dt><a id="keyset-key-U-003D"><code class="value">'U+003D'</code></a></dt>
-              <dd>The Equals Sign key (=).</dd>
-
-              <dt><a id="keyset-key-"><code class="value">'GreaterThan'</code></a></dt>
-              <dt><a id="keyset-key-U-003E"><code class="value">'U+003E'</code></a></dt>
-              <dd>The Greater-Than Sign key (&gt;).</dd>
-
-              <dt><a id="keyset-key-QuestionMarkChar"><code class="value">'?'</code></a></dt>
-              <dt><a id="keyset-key-QuestionMark"><code class="value">'QuestionMark'</code></a></dt>
-              <dt><a id="keyset-key-U-003F"><code class="value">'U+003F'</code></a></dt>
-              <dd>The Question Mark key (?).</dd>
-
-              <dt><a id="keyset-key-AtChar"><code class="value">'@'</code></a></dt>
-              <dt><a id="keyset-key-At"><code class="value">'At'</code></a></dt>
-              <dt><a id="keyset-key-U-0040"><code class="value">'U+0040'</code></a></dt>
-              <dd>The Commercial At (@) key.</dd>
-
-              <dt><a id="keyset-key-A"><code class="value">'A'</code></a></dt>
-              <dt><a id="keyset-key-U-0041"><code class="value">'U+0041'</code></a></dt>
-              <dd>The Latin Capital Letter A key (A).</dd>
-
-              <dt><a id="keyset-key-B"><code class="value">'B'</code></a></dt>
-              <dt><a id="keyset-key-U-0042"><code class="value">'U+0042'</code></a></dt>
-              <dd>The Latin Capital Letter B key (B).</dd>
-
-              <dt><a id="keyset-key-C"><code class="value">'C'</code></a></dt>
-              <dt><a id="keyset-key-U-0043"><code class="value">'U+0043'</code></a></dt>
-              <dd>The Latin Capital Letter C key (C).</dd>
-
-              <dt><a id="keyset-key-D"><code class="value">'D'</code></a></dt>
-              <dt><a id="keyset-key-U-0044"><code class="value">'U+0044'</code></a></dt>
-              <dd>The Latin Capital Letter D key (D).</dd>
-
-              <dt><a id="keyset-key-E"><code class="value">'E'</code></a></dt>
-              <dt><a id="keyset-key-U-0045"><code class="value">'U+0045'</code></a></dt>
-              <dd>The Latin Capital Letter E key (E).</dd>
-
-              <dt><a id="keyset-key-F"><code class="value">'F'</code></a></dt>
-              <dt><a id="keyset-key-U-0046"><code class="value">'U+0046'</code></a></dt>
-              <dd>The Latin Capital Letter F key (F).</dd>
-
-              <dt><a id="keyset-key-G"><code class="value">'G'</code></a></dt>
-              <dt><a id="keyset-key-U-0047"><code class="value">'U+0047'</code></a></dt>
-              <dd>The Latin Capital Letter G key (G).</dd>
-
-              <dt><a id="keyset-key-H"><code class="value">'H'</code></a></dt>
-              <dt><a id="keyset-key-U-0048"><code class="value">'U+0048'</code></a></dt>
-              <dd>The Latin Capital Letter H key (H).</dd>
-
-              <dt><a id="keyset-key-I"><code class="value">'I'</code></a></dt>
-              <dt><a id="keyset-key-U-0049"><code class="value">'U+0049'</code></a></dt>
-              <dd>The Latin Capital Letter I key (I).</dd>
-
-              <dt><a id="keyset-key-J"><code class="value">'J'</code></a></dt>
-              <dt><a id="keyset-key-U-004A"><code class="value">'U+004A'</code></a></dt>
-              <dd>The Latin Capital Letter J key (J).</dd>
-
-              <dt><a id="keyset-key-K"><code class="value">'K'</code></a></dt>
-              <dt><a id="keyset-key-U-004B"><code class="value">'U+004B'</code></a></dt>
-              <dd>The Latin Capital Letter K key (K).</dd>
-
-              <dt><a id="keyset-key-L"><code class="value">'L'</code></a></dt>
-              <dt><a id="keyset-key-U-004C"><code class="value">'U+004C'</code></a></dt>
-              <dd>The Latin Capital Letter L key (L).</dd>
-
-              <dt><a id="keyset-key-M"><code class="value">'M'</code></a></dt>
-              <dt><a id="keyset-key-U-004D"><code class="value">'U+004D'</code></a></dt>
-              <dd>The Latin Capital Letter M key (M).</dd>
-
-              <dt><a id="keyset-key-N"><code class="value">'N'</code></a></dt>
-              <dt><a id="keyset-key-U-004E"><code class="value">'U+004E'</code></a></dt>
-              <dd>The Latin Capital Letter N key (N).</dd>
-
-              <dt><a id="keyset-key-O"><code class="value">'O'</code></a></dt>
-              <dt><a id="keyset-key-U-004F"><code class="value">'U+004F'</code></a></dt>
-              <dd>The Latin Capital Letter O key (O).</dd>
-
-              <dt><a id="keyset-key-P"><code class="value">'P'</code></a></dt>
-              <dt><a id="keyset-key-U-0050"><code class="value">'U+0050'</code></a></dt>
-              <dd>The Latin Capital Letter P key (P).</dd>
-
-              <dt><a id="keyset-key-Q"><code class="value">'Q'</code></a></dt>
-              <dt><a id="keyset-key-U-0051"><code class="value">'U+0051'</code></a></dt>
-              <dd>The Latin Capital Letter Q key (Q).</dd>
-
-              <dt><a id="keyset-key-R"><code class="value">'R'</code></a></dt>
-              <dt><a id="keyset-key-U-0052"><code class="value">'U+0052'</code></a></dt>
-              <dd>The Latin Capital Letter R key (R).</dd>
-
-              <dt><a id="keyset-key-S"><code class="value">'S'</code></a></dt>
-              <dt><a id="keyset-key-U-0053"><code class="value">'U+0053'</code></a></dt>
-              <dd>The Latin Capital Letter S key (S).</dd>
-
-              <dt><a id="keyset-key-T"><code class="value">'T'</code></a></dt>
-              <dt><a id="keyset-key-U-0054"><code class="value">'U+0054'</code></a></dt>
-              <dd>The Latin Capital Letter T key (T).</dd>
-
-              <dt><a id="keyset-key-U"><code class="value">'U'</code></a></dt>
-              <dt><a id="keyset-key-U-0055"><code class="value">'U+0055'</code></a></dt>
-              <dd>The Latin Capital Letter U key (U).</dd>
-
-              <dt><a id="keyset-key-V"><code class="value">'V'</code></a></dt>
-              <dt><a id="keyset-key-U-0056"><code class="value">'U+0056'</code></a></dt>
-              <dd>The Latin Capital Letter V key (V).</dd>
-
-              <dt><a id="keyset-key-W"><code class="value">'W'</code></a></dt>
-              <dt><a id="keyset-key-U-0057"><code class="value">'U+0057'</code></a></dt>
-              <dd>The Latin Capital Letter W key (W).</dd>
-
-              <dt><a id="keyset-key-X"><code class="value">'X'</code></a></dt>
-              <dt><a id="keyset-key-U-0058"><code class="value">'U+0058'</code></a></dt>
-              <dd>The Latin Capital Letter X key (X).</dd>
-
-              <dt><a id="keyset-key-Y"><code class="value">'Y'</code></a></dt>
-              <dt><a id="keyset-key-U-0059"><code class="value">'U+0059'</code></a></dt>
-              <dd>The Latin Capital Letter Y key (Y).</dd>
-
-              <dt><a id="keyset-key-Z"><code class="value">'Z'</code></a></dt>
-              <dt><a id="keyset-key-U-005A"><code class="value">'U+005A'</code></a></dt>
-              <dd>The Latin Capital Letter Z key (Z).</dd>
-
-              <dt><a id="keyset-key-a"><code class="value">'a'</code></a></dt>
-              <dt><a id="keyset-key-U-0061"><code class="value">'U+0061'</code></a></dt>
-              <dd>The Latin Miniscule Letter a key.</dd>
-
-              <dt><a id="keyset-key-b"><code class="value">'b'</code></a></dt>
-              <dt><a id="keyset-key-U-0062"><code class="value">'U+0062'</code></a></dt>
-              <dd>The Latin Miniscule Letter b key.</dd>
-
-              <dt><a id="keyset-key-c"><code class="value">'c'</code></a></dt>
-              <dt><a id="keyset-key-U-0063"><code class="value">'U+0063'</code></a></dt>
-              <dd>The Latin Miniscule Letter c key.</dd>
-
-              <dt><a id="keyset-key-d"><code class="value">'d'</code></a></dt>
-              <dt><a id="keyset-key-U-0064"><code class="value">'U+0064'</code></a></dt>
-              <dd>The Latin Miniscule Letter d key.</dd>
-
-              <dt><a id="keyset-key-e"><code class="value">'e'</code></a></dt>
-              <dt><a id="keyset-key-U-0065"><code class="value">'U+0065'</code></a></dt>
-              <dd>The Latin Miniscule Letter e key.</dd>
-
-              <dt><a id="keyset-key-f"><code class="value">'f'</code></a></dt>
-              <dt><a id="keyset-key-U-0066"><code class="value">'U+0066'</code></a></dt>
-              <dd>The Latin Miniscule Letter f key.</dd>
-
-              <dt><a id="keyset-key-g"><code class="value">'g'</code></a></dt>
-              <dt><a id="keyset-key-U-0067"><code class="value">'U+0067'</code></a></dt>
-              <dd>The Latin Miniscule Letter g key.</dd>
-
-              <dt><a id="keyset-key-h"><code class="value">'h'</code></a></dt>
-              <dt><a id="keyset-key-U-0068"><code class="value">'U+0068'</code></a></dt>
-              <dd>The Latin Miniscule Letter h key.</dd>
-
-              <dt><a id="keyset-key-i"><code class="value">'i'</code></a></dt>
-              <dt><a id="keyset-key-U-0069"><code class="value">'U+0069'</code></a></dt>
-              <dd>The Latin Miniscule Letter i key.</dd>
-
-              <dt><a id="keyset-key-j"><code class="value">'j'</code></a></dt>
-              <dt><a id="keyset-key-U-006A"><code class="value">'U+006A'</code></a></dt>
-              <dd>The Latin Miniscule Letter j key.</dd>
-
-              <dt><a id="keyset-key-k"><code class="value">'k'</code></a></dt>
-              <dt><a id="keyset-key-U-006B"><code class="value">'U+006B'</code></a></dt>
-              <dd>The Latin Miniscule Letter k key.</dd>
-
-              <dt><a id="keyset-key-l"><code class="value">'l'</code></a></dt>
-              <dt><a id="keyset-key-U-006C"><code class="value">'U+006C'</code></a></dt>
-              <dd>The Latin Miniscule Letter l key.</dd>
-
-              <dt><a id="keyset-key-m"><code class="value">'m'</code></a></dt>
-              <dt><a id="keyset-key-U-006D"><code class="value">'U+006D'</code></a></dt>
-              <dd>The Latin Miniscule Letter m key.</dd>
-
-              <dt><a id="keyset-key-n"><code class="value">'n'</code></a></dt>
-              <dt><a id="keyset-key-U-006E"><code class="value">'U+006E'</code></a></dt>
-              <dd>The Latin Miniscule Letter n key.</dd>
-
-              <dt><a id="keyset-key-o"><code class="value">'o'</code></a></dt>
-              <dt><a id="keyset-key-U-006F"><code class="value">'U+006F'</code></a></dt>
-              <dd>The Latin Miniscule Letter o key.</dd>
-
-              <dt><a id="keyset-key-p"><code class="value">'p'</code></a></dt>
-              <dt><a id="keyset-key-U-0070"><code class="value">'U+0070'</code></a></dt>
-              <dd>The Latin Miniscule Letter p key.</dd>
-
-              <dt><a id="keyset-key-q"><code class="value">'q'</code></a></dt>
-              <dt><a id="keyset-key-U-0071"><code class="value">'U+0071'</code></a></dt>
-              <dd>The Latin Miniscule Letter q key.</dd>
-
-              <dt><a id="keyset-key-r"><code class="value">'r'</code></a></dt>
-              <dt><a id="keyset-key-U-0072"><code class="value">'U+0072'</code></a></dt>
-              <dd>The Latin Miniscule Letter r key.</dd>
-
-              <dt><a id="keyset-key-s"><code class="value">'s'</code></a></dt>
-              <dt><a id="keyset-key-U-0073"><code class="value">'U+0073'</code></a></dt>
-              <dd>The Latin Miniscule Letter s key.</dd>
-
-              <dt><a id="keyset-key-t"><code class="value">'t'</code></a></dt>
-              <dt><a id="keyset-key-U-0074"><code class="value">'U+0074'</code></a></dt>
-              <dd>The Latin Miniscule Letter t key.</dd>
-
-              <dt><a id="keyset-key-u"><code class="value">'u'</code></a></dt>
-              <dt><a id="keyset-key-U-0075"><code class="value">'U+0075'</code></a></dt>
-              <dd>The Latin Miniscule Letter u key.</dd>
-
-              <dt><a id="keyset-key-v"><code class="value">'v'</code></a></dt>
-              <dt><a id="keyset-key-U-0076"><code class="value">'U+0076'</code></a></dt>
-              <dd>The Latin Miniscule Letter v key.</dd>
-
-              <dt><a id="keyset-key-w"><code class="value">'w'</code></a></dt>
-              <dt><a id="keyset-key-U-0077"><code class="value">'U+0077'</code></a></dt>
-              <dd>The Latin Miniscule Letter w key.</dd>
-
-              <dt><a id="keyset-key-x"><code class="value">'x'</code></a></dt>
-              <dt><a id="keyset-key-U-0078"><code class="value">'U+0078'</code></a></dt>
-              <dd>The Latin Miniscule Letter x key.</dd>
-
-              <dt><a id="keyset-key-y"><code class="value">'y'</code></a></dt>
-              <dt><a id="keyset-key-U-0079"><code class="value">'U+0079'</code></a></dt>
-              <dd>The Latin Miniscule Letter y key.</dd>
-
-              <dt><a id="keyset-key-z"><code class="value">'z'</code></a></dt>
-              <dt><a id="keyset-key-U-007A"><code class="value">'U+007A'</code></a></dt>
-              <dd>The Latin Miniscule Letter z key.</dd>
-
-
-              <dt><a id="keyset-key-LeftSquareBracketChar"><code class="value">'['</code></a></dt>
-              <dt><a id="keyset-key-LeftSquareBracket"><code class="value">'LeftSquareBracket'</code></a></dt>
-              <dt><a id="keyset-key-U-005B"><code class="value">'U+005B'</code></a></dt>
-              <dd>The Left Square Bracket (Opening Square Bracket) key ([).</dd>
-
-              <dt><a id="keyset-key-BackslashChar"><code class="value">'\'</code></a></dt>
-              <dt><a id="keyset-key-Backslash"><code class="value">'Backslash'</code></a></dt>
-              <dt><a id="keyset-key-U-005C"><code class="value">'U+005C'</code></a></dt>
-              <dd>The Reverse Solidus (Backslash) key (\).</dd>
-
-              <dt><a id="keyset-key-RightSquareBracketChar"><code class="value">']'</code></a></dt>
-              <dt><a id="keyset-key-RightSquareBracket"><code class="value">'RightSquareBracket'</code></a></dt>
-              <dt><a id="keyset-key-U-005D"><code class="value">'U+005D'</code></a></dt>
-              <dd>The Right Square Bracket (Closing Square Bracket) key (]).</dd>
-
-              <dt><a id="keyset-key-CircumflexChar"><code class="value">'^'</code></a></dt>
-              <dt><a id="keyset-key-Circumflex"><code class="value">'Circumflex'</code></a></dt>
-              <dt><a id="keyset-key-U-005E"><code class="value">'U+005E'</code></a></dt>
-              <dd>The Circumflex Accent key (^).</dd>
-
-              <dt><a id="keyset-key-UnderscoreChar"><code class="value">'_'</code></a></dt>
-              <dt><a id="keyset-key-Underscore"><code class="value">'Underscore'</code></a></dt>
-              <dt><a id="keyset-key-U-005F"><code class="value">'U+005F'</code></a></dt>
-              <dd>The Low Sign (Spacing Underscore, Underscore) key (_).</dd>
-
-              <dt><a id="keyset-key-GraveChar"><code class="value">'`'</code></a></dt>
-              <dt><a id="keyset-key-Grave"><code class="value">'Grave'</code></a></dt>
-              <dt><a id="keyset-key-U-0060"><code class="value">'U+0060'</code></a></dt>
-              <dd>The Grave Accent (Back Quote) key (`).</dd>
-
-              <dt><a id="keyset-key-LeftCurlyBracketChar"><code class="value">'{'</code></a></dt>
-              <dt><a id="keyset-key-LeftCurlyBracket"><code class="value">'LeftCurlyBracket'</code></a></dt>
-              <dt><a id="keyset-key-U-007B"><code class="value">'U+007B'</code></a></dt>
-              <dd>The Left Curly Bracket (Opening Curly Bracket, Opening Brace, Brace Left) key ({).</dd>
-
-              <dt><a id="keyset-key-PipeChar"><code class="value">'|'</code></a></dt>
-              <dt><a id="keyset-key-Pipe"><code class="value">'Pipe'</code></a></dt>
-              <dt><a id="keyset-key-U-007C"><code class="value">'U+007C'</code></a></dt>
-              <dd>The Vertical Line (Vertical Bar, Pipe) key (|).</dd>
-
-              <dt><a id="keyset-key-RightCurlyBracketChar"><code class="value">'}'</code></a></dt>
-              <dt><a id="keyset-key-RightCurlyBracket"><code class="value">'RightCurlyBracket'</code></a></dt>
-              <dt><a id="keyset-key-U-007D"><code class="value">'U+007D'</code></a></dt>
-              <dd>The Right Curly Bracket (Closing Curly Bracket, Closing Brace, Brace Right) key (}).</dd>
-
-              <dt><a id="keyset-key-Del"><code class="value">'Del'</code></a></dt>
-              <dt><a id="keyset-key-U-007F"><code class="value">'U+007F'</code></a></dt>
-              <dd>The Delete (Del) Key.
-               <span class="note"><strong>Note:</strong> This key identifier 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.</span>
-              </dd>
-
-              <dt><a id="keyset-key-InvertedExclamationChar"><code class="value">'¡'</code></a></dt>
-              <dt><a id="keyset-key-InvertedExclamation"><code class="value">'InvertedExclamation'</code></a></dt>
-              <dt><a id="keyset-key-U-00A1"><code class="value">'U+00A1'</code></a></dt>
-              <dd>The Inverted Exclamation Mark key (&#161;).</dd>
-
-              <dt><a id="keyset-key-DeadGrave"><code class="value">'DeadGrave'</code></a></dt>
-              <dt><a id="keyset-key-U-0300"><code class="value">'U+0300'</code></a></dt>
-              <dd>The Combining Grave Accent (Greek Varia, Dead Grave) key.</dd>
-
-              <dt><a id="keyset-key-DeadEacute"><code class="value">'DeadEacute'</code></a></dt>
-              <dt><a id="keyset-key-U-0301"><code class="value">'U+0301'</code></a></dt>
-              <dd>The Combining Acute Accent (Stress Mark, Greek Oxia, Tonos, Dead Eacute) key.</dd>
-
-              <dt><a id="keyset-key-DeadCircumflex"><code class="value">'DeadCircumflex'</code></a></dt>
-              <dt><a id="keyset-key-U-0302"><code class="value">'U+0302'</code></a></dt>
-              <dd>The Combining Circumflex Accent (Hat, Dead Circumflex) key.</dd>
-
-              <dt><a id="keyset-key-DeadTilde"><code class="value">'DeadTilde'</code></a></dt>
-              <dt><a id="keyset-key-U-0303"><code class="value">'U+0303'</code></a></dt>
-              <dd>The Combining Tilde (Dead Tilde) key.</dd>
-
-              <dt><a id="keyset-key-DeadMacron"><code class="value">'DeadMacron'</code></a></dt>
-              <dt><a id="keyset-key-U-0304"><code class="value">'U+0304'</code></a></dt>
-              <dd>The Combining Macron (Long, Dead Macron) key.</dd>
-
-              <dt><a id="keyset-key-DeadBreve"><code class="value">'DeadBreve'</code></a></dt>
-              <dt><a id="keyset-key-U-0306"><code class="value">'U+0306'</code></a></dt>
-              <dd>The Combining Breve (Short, Dead Breve) key.</dd>
-
-              <dt><a id="keyset-key-DeadAboveDot"><code class="value">'DeadAboveDot'</code></a></dt>
-              <dt><a id="keyset-key-U-0307"><code class="value">'U+0307'</code></a></dt>
-              <dd>The Combining Dot Above (Derivative, Dead Above Dot) key.</dd>
-
-              <dt><a id="keyset-key-DeadUmlaut"><code class="value">'DeadUmlaut'</code></a></dt>
-              <dt><a id="keyset-key-U-0308"><code class="value">'U+0308'</code></a></dt>
-              <dd>The Combining Diaeresis (Double Dot Abode, Umlaut, Greek Dialytika, Double Derivative, Dead Diaeresis) key.</dd>
-
-              <dt><a id="keyset-key-DeadAboveRing"><code class="value">'DeadAboveRing'</code></a></dt>
-              <dt><a id="keyset-key-U-030A"><code class="value">'U+030A'</code></a></dt>
-              <dd>The Combining Ring Above (Dead Above Ring) key.</dd>
-
-              <dt><a id="keyset-key-DeadDoubleacute"><code class="value">'DeadDoubleacute'</code></a></dt>
-              <dt><a id="keyset-key-U-030B"><code class="value">'U+030B'</code></a></dt>
-              <dd>The Combining Double Acute Accent (Dead Doubleacute) key.</dd>
-
-              <dt><a id="keyset-key-DeadCaron"><code class="value">'DeadCaron'</code></a></dt>
-              <dt><a id="keyset-key-U-030C"><code class="value">'U+030C'</code></a></dt>
-              <dd>The Combining Caron (Hacek, V Above, Dead Caron) key.</dd>
-
-              <dt><a id="keyset-key-DeadCedilla"><code class="value">'DeadCedilla'</code></a></dt>
-              <dt><a id="keyset-key-U-0327"><code class="value">'U+0327'</code></a></dt>
-              <dd>The Combining Cedilla (Dead Cedilla) key.</dd>
-
-              <dt><a id="keyset-key-DeadOgonek"><code class="value">'DeadOgonek'</code></a></dt>
-              <dt><a id="keyset-key-U-0328"><code class="value">'U+0328'</code></a></dt>
-              <dd>The Combining Ogonek (Nasal Hook, Dead Ogonek) key.</dd>
-
-              <dt><a id="keyset-key-DeadIota"><code class="value">'DeadIota'</code></a></dt>
-              <dt><a id="keyset-key-U-0345"><code class="value">'U+0345'</code></a></dt>
-              <dd>The Combining Greek Ypogegrammeni (Greek Non-Spacing Iota Below, Iota Subscript, Dead Iota) key.</dd>
-
-              <dt><a id="keyset-key-EuroChar"><code class="value">'€'</code></a></dt>
-              <dt><a id="keyset-key-Euro"><code class="value">'Euro'</code></a></dt>
-              <dt><a id="keyset-key-U-20AC"><code class="value">'U+20AC'</code></a></dt>
-              <dd>The Euro Currency Sign key (&#8364;).</dd>
-
-              <dt><a id="keyset-key-DeadVoicedSound"><code class="value">'DeadVoicedSound'</code></a></dt>
-              <dt><a id="keyset-key-U-3099"><code class="value">'U+3099'</code></a></dt>
-              <dd>The Combining Katakana-Hiragana Voiced Sound Mark (Dead Voiced Sound) key.</dd>
-
-              <dt><a id="keyset-key-DeadSemivoicedSound"><code class="value">'DeadSemivoicedSound'</code></a></dt>
-              <dt><a id="keyset-key-U-309A"><code class="value">'U+309A'</code></a></dt>
-              <dd>The Combining Katakana-Hiragana Semi-Voiced Sound Mark (Dead Semivoiced Sound) key.</dd>
-            </dl>
-          </div>
-          <!-- div2 KeySet-Set -->
+        <div>
+          <h4 class="adiv3"><a id="keyset-key-identifiers" href="#keyset-key-identifiers">6.2.7 Key Identifiers Set</a></h4>
+          
+          <p>This section defines a list of key identifiers which implementations must support, at a minimum; implementations may support additional key identifiers, in a manner conforming to the <a href="#keyset-Guide">guidelines for defining key identifiers</a>.  Each key identifier defines one or more of the following: a <a class="def" href="#glossary-character-value">character value</a>, a <a class="def" href="#glossary-key-name">key name</a>, and a <a class="def" href="#glossary-unicode-code-point">Unicode code point</a>.  Future versions of this specification may include key identifiers not included here, which have become common since the publication of this specification.</p>
+          
+          <p>The <a class="def" href="#glossary-key-name">key names</a> defined in this specification are based on the sets of keycodes from the <code>java.awt.event.KeyEvent</code> interface of the Java Platform, Standard Edition 6 API Specification [<cite><a class="noxref informative" href="#references-KeyEvent">KeyEvent for Java</a></cite>], and the <code>System.Windows.Forms.Keys</code> key enumeration of the Microsoft .NET Framework 4.0 Class Library [<cite><a class="noxref informative" href="#references-Keys">Keys enumeration for .Net</a></cite>].  The <a class="def" href="#glossary-character-value">character values</a> and a <a class="def" href="#glossary-unicode-code-point">Unicode code points</a> defined in this specification are derived from the Unicode standard [<a id="references-Unicode">Unicode</a>].</p>
+      	  
+          <p class="note"><strong>Note:</strong> The key names <code class="value">'NumPad0'</code>, <code class="value">'NumPad1'</code>, <code class="value">'NumPad2'</code>, <code class="value">'NumPad3'</code>, <code class="value">'NumPad4'</code>, <code class="value">'NumPad5'</code>, <code class="value">'NumPad6'</code>, <code class="value">'NumPad7'</code>, <code class="value">'NumPad8'</code>, and <code class="value">'NumPad9'</code>, found in some keyboard enumeration sets, are not distinguished from other numerical key identifiers in this set; an author may use the <a href="#events-Events-KeyboardEvent-keylocation"><code>KeyboardEvent.keyLocation</code></a> attribute to discover if a key originated from the numeric keypad.</p>
+
+      		<p class="issue">@@ Add a <code class="value">'power'</code> key?</p>
+
+      		<p class="issue">@@ In the case of markup and attribute values, should the Key Identifiers for character keys be case-insensitive?</p>
+
+          <dl>
+            <dt><a id="keyset-key-Accept"><code class="value">'Accept'</code></a></dt>
+            <dd>The Accept (Commit, OK) key.</dd>
+
+            <dt><a id="keyset-key-Add"><code class="value">'Add'</code></a></dt>
+            <dd>The Add key.</dd>
+
+            <dt><a id="keyset-key-Again"><code class="value">'Again'</code></a></dt>
+            <dd>The Again key.</dd>
+
+            <dt><a id="keyset-key-AllCandidates"><code class="value">'AllCandidates'</code></a></dt>
+            <dd>The All Candidates key.</dd>
+
+            <dt><a id="keyset-key-Alphanumeric"><code class="value">'Alphanumeric'</code></a></dt>
+            <dd>The Alphanumeric key.</dd>
+
+            <dt><a id="keyset-key-Alt"><code class="value">'Alt'</code></a></dt>
+            <dd>The Alt (Menu) key.</dd>
+
+            <dt><a id="keyset-key-AltGraph"><code class="value">'AltGraph'</code></a></dt>
+            <dd>The Alt-Graph key.</dd>
+
+            <dt><a id="keyset-key-Apps"><code class="value">'Apps'</code></a></dt>
+            <dd>The Application key.</dd>
+
+            <dt><a id="keyset-key-Attn"><code class="value">'Attn'</code></a></dt>
+            <dd>The ATTN key.</dd>
+
+            <dt><a id="keyset-key-BrowserBack"><code class="value">'BrowserBack'</code></a></dt>
+            <dd>The Browser Back key.</dd>
+
+            <dt><a id="keyset-key-BrowserFavorites"><code class="value">'BrowserFavorites'</code></a></dt>
+            <dd>The Browser Favorites key.</dd>
+
+            <dt><a id="keyset-key-BrowserForward"><code class="value">'BrowserForward'</code></a></dt>
+            <dd>The Browser Forward key.</dd>
+
+            <dt><a id="keyset-key-BrowserHome"><code class="value">'BrowserHome'</code></a></dt>
+            <dd>The Browser Home key.</dd>
+
+            <dt><a id="keyset-key-BrowserRefresh"><code class="value">'BrowserRefresh'</code></a></dt>
+            <dd>The Browser Refresh key.</dd>
+
+            <dt><a id="keyset-key-BrowserSearch"><code class="value">'BrowserSearch'</code></a></dt>
+            <dd>The Browser Search key.</dd>
+
+            <dt><a id="keyset-key-BrowserStop"><code class="value">'BrowserStop'</code></a></dt>
+            <dd>The Browser Stop key.</dd>
+
+            <dt><a id="keyset-key-CapsLock"><code class="value">'CapsLock'</code></a></dt>
+            <dd>The Caps Lock (Capital) key.</dd>
+
+            <dt><a id="keyset-key-Clear"><code class="value">'Clear'</code></a></dt>
+            <dd>The Clear key.</dd>
+
+            <dt><a id="keyset-key-CodeInput"><code class="value">'CodeInput'</code></a></dt>
+            <dd>The Code Input key.</dd>
+
+            <dt><a id="keyset-key-Compose"><code class="value">'Compose'</code></a></dt>
+            <dd>The Compose key.</dd>
+
+            <dt><a id="keyset-key-Control"><code class="value">'Control'</code></a></dt>
+            <dd>The Control (Ctrl) key.</dd>
+
+            <dt><a id="keyset-key-Crsel"><code class="value">'Crsel'</code></a></dt>
+            <dd>The Crsel key.</dd>
+
+            <dt><a id="keyset-key-Convert"><code class="value">'Convert'</code></a></dt>
+            <dd>The Convert key.</dd>
+
+            <dt><a id="keyset-key-Copy"><code class="value">'Copy'</code></a></dt>
+            <dd>The Copy key.</dd>
+
+            <dt><a id="keyset-key-Cut"><code class="value">'Cut'</code></a></dt>
+            <dd>The Cut key.</dd>
+
+            <dt><a id="keyset-key-Decimal"><code class="value">'Decimal'</code></a></dt>
+            <dd>The Decimal key.</dd>
+
+            <dt><a id="keyset-key-Divide"><code class="value">'Divide'</code></a></dt>
+            <dd>The Divide key.</dd>
+
+            <dt><a id="keyset-key-Down"><code class="value">'Down'</code></a></dt>
+            <dd>The Down Arrow key.</dd>
+
+            <dt><a id="keyset-key-DownLeft"><code class="value">'DownLeft'</code></a></dt>
+            <dd>The diagonal Down-Left Arrow key.</dd>
+
+            <dt><a id="keyset-key-DownRight"><code class="value">'DownRight'</code></a></dt>
+            <dd>The diagonal Down-Right Arrow key.</dd>
+
+            <dt><a id="keyset-key-End"><code class="value">'End'</code></a></dt>
+            <dd>The End key.</dd>
+
+            <dt><a id="keyset-key-Enter"><code class="value">'Enter'</code></a></dt>
+            <dd>The Enter key.
+             <span class="note"><strong>Note:</strong> This key identifier shall be also used for the Return (Macintosh numpad) key.</span>
+            </dd>
+
+            <dt><a id="keyset-key-EraseEof"><code class="value">'EraseEof'</code></a></dt>
+            <dd>The Erase EOF key.</dd>
+
+            <dt><a id="keyset-key-Execute"><code class="value">'Execute'</code></a></dt>
+            <dd>The Execute key.</dd>
+
+            <dt><a id="keyset-key-Exsel"><code class="value">'Exsel'</code></a></dt>
+            <dd>The Exsel key.</dd>
+
+            <dt><a id="keyset-key-Fn"><code class="value">'Fn'</code></a></dt>
+            <dd>The Function switch key.</dd>
+
+            <dt><a id="keyset-key-F1"><code class="value">'F1'</code></a></dt>
+            <dd>The F1 key.</dd>
+
+            <dt><a id="keyset-key-F2"><code class="value">'F2'</code></a></dt>
+            <dd>The F2 key.</dd>
+
+            <dt><a id="keyset-key-F3"><code class="value">'F3'</code></a></dt>
+            <dd>The F3 key.</dd>
+
+            <dt><a id="keyset-key-F4"><code class="value">'F4'</code></a></dt>
+            <dd>The F4 key.</dd>
+
+            <dt><a id="keyset-key-F5"><code class="value">'F5'</code></a></dt>
+            <dd>The F5 key.</dd>
+
+            <dt><a id="keyset-key-F6"><code class="value">'F6'</code></a></dt>
+            <dd>The F6 key.</dd>
+
+            <dt><a id="keyset-key-F7"><code class="value">'F7'</code></a></dt>
+            <dd>The F7 key.</dd>
+
+            <dt><a id="keyset-key-F8"><code class="value">'F8'</code></a></dt>
+            <dd>The F8 key.</dd>
+
+            <dt><a id="keyset-key-F9"><code class="value">'F9'</code></a></dt>
+            <dd>The F9 key.</dd>
+
+            <dt><a id="keyset-key-F10"><code class="value">'F10'</code></a></dt>
+            <dd>The F10 key.</dd>
+
+            <dt><a id="keyset-key-F11"><code class="value">'F11'</code></a></dt>
+            <dd>The F11 key.</dd>
+
+            <dt><a id="keyset-key-F12"><code class="value">'F12'</code></a></dt>
+            <dd>The F12 key.</dd>
+
+            <dt><a id="keyset-key-F13"><code class="value">'F13'</code></a></dt>
+            <dd>The F13 key.</dd>
+
+            <dt><a id="keyset-key-F14"><code class="value">'F14'</code></a></dt>
+            <dd>The F14 key.</dd>
+
+            <dt><a id="keyset-key-F15"><code class="value">'F15'</code></a></dt>
+            <dd>The F15 key.</dd>
+
+            <dt><a id="keyset-key-F16"><code class="value">'F16'</code></a></dt>
+            <dd>The F16 key.</dd>
+
+            <dt><a id="keyset-key-F17"><code class="value">'F17'</code></a></dt>
+            <dd>The F17 key.</dd>
+
+            <dt><a id="keyset-key-F18"><code class="value">'F18'</code></a></dt>
+            <dd>The F18 key.</dd>
+
+            <dt><a id="keyset-key-F19"><code class="value">'F19'</code></a></dt>
+            <dd>The F19 key.</dd>
+
+            <dt><a id="keyset-key-F20"><code class="value">'F20'</code></a></dt>
+            <dd>The F20 key.</dd>
+
+            <dt><a id="keyset-key-F21"><code class="value">'F21'</code></a></dt>
+            <dd>The F21 key.</dd>
+
+            <dt><a id="keyset-key-F22"><code class="value">'F22'</code></a></dt>
+            <dd>The F22 key.</dd>
+
+            <dt><a id="keyset-key-F23"><code class="value">'F23'</code></a></dt>
+            <dd>The F23 key.</dd>
+
+            <dt><a id="keyset-key-F24"><code class="value">'F24'</code></a></dt>
+            <dd>The F24 key.</dd>
+
+            <dt><a id="keyset-key-FinalMode"><code class="value">'FinalMode'</code></a></dt>
+            <dd>The Final Mode (Final) key used on some asian keyboards.</dd>
+
+            <dt><a id="keyset-key-Find"><code class="value">'Find'</code></a></dt>
+            <dd>The Find key.</dd>
+
+            <dt><a id="keyset-key-FullWidth"><code class="value">'FullWidth'</code></a></dt>
+            <dd>The Full-Width Characters key.</dd>
+
+            <dt><a id="keyset-key-HalfWidth"><code class="value">'HalfWidth'</code></a></dt>
+            <dd>The Half-Width Characters key.</dd>
+
+            <dt><a id="keyset-key-HangulMode"><code class="value">'HangulMode'</code></a></dt>
+            <dd>The Hangul (Korean characters) Mode key.</dd>
+
+            <dt><a id="keyset-key-HanjaMode"><code class="value">'HanjaMode'</code></a></dt>
+            <dd>The Hanja (Korean characters) Mode key.</dd>
+
+            <dt><a id="keyset-key-Help"><code class="value">'Help'</code></a></dt>
+            <dd>The Help key.</dd>
+
+            <dt><a id="keyset-key-Hiragana"><code class="value">'Hiragana'</code></a></dt>
+            <dd>The Hiragana (Japanese Kana characters) key.</dd>
+
+            <dt><a id="keyset-key-Home"><code class="value">'Home'</code></a></dt>
+            <dd>The Home key.</dd>
+
+            <dt><a id="keyset-key-Insert"><code class="value">'Insert'</code></a></dt>
+            <dd>The Insert (Ins) key.</dd>
+
+            <dt><a id="keyset-key-JapaneseHiragana"><code class="value">'JapaneseHiragana'</code></a></dt>
+            <dd>The Japanese-Hiragana key.</dd>
+
+            <dt><a id="keyset-key-JapaneseKatakana"><code class="value">'JapaneseKatakana'</code></a></dt>
+            <dd>The Japanese-Katakana key.</dd>
+
+            <dt><a id="keyset-key-JapaneseRomaji"><code class="value">'JapaneseRomaji'</code></a></dt>
+            <dd>The Japanese-Romaji key.</dd>
+
+            <dt><a id="keyset-key-JunjaMode"><code class="value">'JunjaMode'</code></a></dt>
+            <dd>The Junja Mode key.</dd>
+
+            <dt><a id="keyset-key-KanaMode"><code class="value">'KanaMode'</code></a></dt>
+            <dd>The Kana Mode (Kana Lock) key.</dd>
+
+            <dt><a id="keyset-key-KanjiMode"><code class="value">'KanjiMode'</code></a></dt>
+            <dd>The Kanji (Japanese name for ideographic characters of Chinese origin) Mode key.</dd>
+
+            <dt><a id="keyset-key-Katakana"><code class="value">'Katakana'</code></a></dt>
+            <dd>The Katakana (Japanese Kana characters) key.</dd>
+
+            <dt><a id="keyset-key-LaunchApplication1"><code class="value">'LaunchApplication1'</code></a></dt>
+            <dd>The Start Application One key.</dd>
+
+            <dt><a id="keyset-key-LaunchApplication2"><code class="value">'LaunchApplication2'</code></a></dt>
+            <dd>The Start Application Two key.</dd>
+
+            <dt><a id="keyset-key-LaunchMail"><code class="value">'LaunchMail'</code></a></dt>
+            <dd>The Start Mail key.</dd>
+
+            <dt><a id="keyset-key-Left"><code class="value">'Left'</code></a></dt>
+            <dd>The Left Arrow key.</dd>
+
+            <dt><a id="keyset-key-Menu"><code class="value">'Menu'</code></a></dt>
+            <dd>The Menu key.</dd>
+
+            <dt><a id="keyset-key-Meta"><code class="value">'Meta'</code></a></dt>
+            <dd>The Meta key.</dd>
+
+            <dt><a id="keyset-key-MediaNextTrack"><code class="value">'MediaNextTrack'</code></a></dt>
+            <dd>The Media Next Track key.</dd>
+
+            <dt><a id="keyset-key-MediaPlayPause"><code class="value">'MediaPlayPause'</code></a></dt>
+            <dd>The Media Play Pause key.</dd>
+
+            <dt><a id="keyset-key-MediaPreviousTrack"><code class="value">'MediaPreviousTrack'</code></a></dt>
+            <dd>The Media Previous Track key.</dd>
+
+            <dt><a id="keyset-key-MediaStop"><code class="value">'MediaStop'</code></a></dt>
+            <dd>The Media Stop key.</dd>
+
+            <dt><a id="keyset-key-ModeChange"><code class="value">'ModeChange'</code></a></dt>
+            <dd>The Mode Change key.</dd>
+
+            <dt><a id="keyset-key-MultiplyChar"><code class="value">'×'</code></a></dt>
+            <dt><a id="keyset-key-Multiply"><code class="value">'Multiply'</code></a></dt>
+            <dt><a id="keyset-key-U-00D7"><code class="value">'U+00D7'</code></a></dt>
+            <dd>The Multiply key.</dd>
+
+            <dt><a id="keyset-key-NextCandidate"><code class="value">'NextCandidate'</code></a></dt>
+            <dd>The Next Candidate function key.</dd>
+
+            <dt><a id="keyset-key-Nonconvert"><code class="value">'Nonconvert'</code></a></dt>
+            <dd>The Nonconvert (Don't Convert) key.</dd>
+
+            <dt><a id="keyset-key-NumLock"><code class="value">'NumLock'</code></a></dt>
+            <dd>The Number Lock key.</dd>
+
+            <dt><a id="keyset-key-PageDown"><code class="value">'PageDown'</code></a></dt>
+            <dd>The Page Down (Next) key.</dd>
+
+            <dt><a id="keyset-key-PageUp"><code class="value">'PageUp'</code></a></dt>
+            <dd>The Page Up key.</dd>
+
+            <dt><a id="keyset-key-Paste"><code class="value">'Paste'</code></a></dt>
+            <dd>The Paste key.</dd>
+
+            <dt><a id="keyset-key-Pause"><code class="value">'Pause'</code></a></dt>
+            <dd>The Pause key.</dd>
+
+            <dt><a id="keyset-key-Play"><code class="value">'Play'</code></a></dt>
+            <dd>The Play key.</dd>
+
+            <dt><a id="keyset-key-PreviousCandidate"><code class="value">'PreviousCandidate'</code></a></dt>
+            <dd>The Previous Candidate function key.</dd>
+
+            <dt><a id="keyset-key-PrintScreen"><code class="value">'PrintScreen'</code></a></dt>
+            <dd>The Print Screen (PrintScrn, SnapShot) key.</dd>
+
+            <dt><a id="keyset-key-Process"><code class="value">'Process'</code></a></dt>
+            <dd>The Process key.</dd>
+
+            <dt><a id="keyset-key-Props"><code class="value">'Props'</code></a></dt>
+            <dd>The Props key.</dd>
+
+            <dt><a id="keyset-key-Right"><code class="value">'Right'</code></a></dt>
+            <dd>The Right Arrow key.</dd>
+
+            <dt><a id="keyset-key-RomanCharacters"><code class="value">'RomanCharacters'</code></a></dt>
+            <dd>The Roman Characters function key.</dd>
+
+            <dt><a id="keyset-key-Scroll"><code class="value">'Scroll'</code></a></dt>
+            <dd>The Scroll Lock key.</dd>
+
+            <dt><a id="keyset-key-Select"><code class="value">'Select'</code></a></dt>
+            <dd>The Select key.</dd>
+
+            <dt><a id="keyset-key-SelectMedia"><code class="value">'SelectMedia'</code></a></dt>
+            <dd>The Select Media key.</dd>
+
+            <dt><a id="keyset-key-Separator"><code class="value">'Separator'</code></a></dt>
+            <dd>The Separator key.</dd>
+
+            <dt><a id="keyset-key-Shift"><code class="value">'Shift'</code></a></dt>
+            <dd>The Shift key.</dd>
+
+            <dt><a id="keyset-key-Soft1"><code class="value">'Soft1'</code></a></dt>
+            <dd>The Soft1 key.</dd>
+
+            <dt><a id="keyset-key-Soft2"><code class="value">'Soft2'</code></a></dt>
+            <dd>The Soft2 key.</dd>
+
+            <dt><a id="keyset-key-Soft3"><code class="value">'Soft3'</code></a></dt>
+            <dd>The Soft3 key.</dd>
+
+            <dt><a id="keyset-key-Soft4"><code class="value">'Soft4'</code></a></dt>
+            <dd>The Soft4 key.</dd>
+
+            <dt><a id="keyset-key-Stop"><code class="value">'Stop'</code></a></dt>
+            <dd>The Stop key.</dd>
+
+            <dt><a id="keyset-key-Subtract"><code class="value">'Subtract'</code></a></dt>
+            <dd>The Subtract key.</dd>
+
+            <dt><a id="keyset-key-Up"><code class="value">'Up'</code></a></dt>
+            <dd>The Up Arrow key.</dd>
+
+            <dt><a id="keyset-key-UpLeft"><code class="value">'UpLeft'</code></a></dt>
+            <dd>The diagonal Up-Left Arrow key.</dd>
+
+            <dt><a id="keyset-key-UpRight"><code class="value">'UpRight'</code></a></dt>
+            <dd>The diagonal Up-Right Arrow key.</dd>
+
+            <dt><a id="keyset-key-Undo"><code class="value">'Undo'</code></a></dt>
+            <dd>The Undo key.</dd>
+
+            <dt><a id="keyset-key-VolumeDown"><code class="value">'VolumeDown'</code></a></dt>
+            <dd>The Volume Down key.</dd>
+
+            <dt><a id="keyset-key-VolumeMute"><code class="value">'VolumeMute'</code></a></dt>
+            <dd>The Volume Mute key.</dd>
+
+            <dt><a id="keyset-key-VolumeUp"><code class="value">'VolumeUp'</code></a></dt>
+            <dd>The Volume Up key.</dd>
+
+            <dt><a id="keyset-key-Win"><code class="value">'Win'</code></a></dt>
+            <dd>The Windows Logo key.</dd>
+
+            <dt><a id="keyset-key-Zoom"><code class="value">'Zoom'</code></a></dt>
+            <dd>The Zoom key.</dd>
+
+            <dt><a id="keyset-key-Backspace"><code class="value">'Backspace'</code></a></dt>
+            <dt><a id="keyset-key-U-0008"><code class="value">'U+0008'</code></a></dt>
+            <dd>The Backspace (Back) key.
+             <span class="note"><strong>Note:</strong> This key identifier 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>
+            </dd>
+
+            <dt><a id="keyset-key-Tab"><code class="value">'Tab'</code></a></dt>
+            <dt><a id="keyset-key-U-0009"><code class="value">'U+0009'</code></a></dt>
+            <dd>The Horizontal Tabulation (Tab) key.</dd>
+
+            <dt><a id="keyset-key-Cancel"><code class="value">'Cancel'</code></a></dt>
+            <dt><a id="keyset-key-U-0018"><code class="value">'U+0018'</code></a></dt>
+            <dd>The Cancel key.</dd>
+
+            <dt><a id="keyset-key-Esc"><code class="value">'Esc'</code></a></dt>
+            <dt><a id="keyset-key-U-001B"><code class="value">'U+001B'</code></a></dt>
+            <dd>The Escape (Esc) key.</dd>
+
+            <dt><a id="keyset-key-Spacebar"><code class="value">'Spacebar'</code></a></dt>
+            <dt><a id="keyset-key-U-0020"><code class="value">'U+0020'</code></a></dt>
+            <dd>The Space (Spacebar) key.</dd>
+
+            <dt><a id="keyset-key-ExclamationChar"><code class="value">'!'</code></a></dt>
+            <dt><a id="keyset-key-Exclamation"><code class="value">'Exclamation'</code></a></dt>
+            <dt><a id="keyset-key-U-0021"><code class="value">'U+0021'</code></a></dt>
+            <dd>The Exclamation Mark (Factorial, Bang) key (!).</dd>
+
+            <dt><a id="keyset-key-DoubleQuote"><code class="value">'DoubleQuote'</code></a></dt>
+            <dt><a id="keyset-key-U-0022"><code class="value">'U+0022'</code></a></dt>
+            <dd>The Quotation Mark (Quote Double) key (").</dd>
+
+            <dt><a id="keyset-key-HashChar"><code class="value">'#'</code></a></dt>
+            <dt><a id="keyset-key-Hash"><code class="value">'Hash'</code></a></dt>
+            <dt><a id="keyset-key-U-0023"><code class="value">'U+0023'</code></a></dt>
+            <dd>The Number Sign (Pound Sign, Hash, Crosshatch, Octothorpe) key (#).</dd>
+
+            <dt><a id="keyset-key-DollarChar"><code class="value">'$'</code></a></dt>
+            <dt><a id="keyset-key-Dollar"><code class="value">'Dollar'</code></a></dt>
+            <dt><a id="keyset-key-U-0024"><code class="value">'U+0024'</code></a></dt>
+            <dd>The Dollar Sign (milreis, escudo) key ($).</dd>
+
+            <dt><a id="keyset-key-AmpersandChar"><code class="value">'&amp;'</code></a></dt>
+            <dt><a id="keyset-key-Ampersand"><code class="value">'Ampersand'</code></a></dt>
+            <dt><a id="keyset-key-U-0026"><code class="value">'U+0026'</code></a></dt>
+            <dd>The Ampersand key (&amp;).</dd>
+
+            <dt><a id="keyset-key-Apostrophe"><code class="value">'Apostrophe'</code></a></dt>
+            <dt><a id="keyset-key-U-0027"><code class="value">'U+0027'</code></a></dt>
+            <dd>The Apostrophe (Apostrophe-Quote, APL Quote) key (').</dd>
+
+            <dt><a id="keyset-key-LeftParenChar"><code class="value">'('</code></a></dt>
+            <dt><a id="keyset-key-LeftParen"><code class="value">'LeftParen'</code></a></dt>
+            <dt><a id="keyset-key-U-0028"><code class="value">'U+0028'</code></a></dt>
+            <dd>The Left Parenthesis (Opening Parenthesis) key (().</dd>
+
+            <dt><a id="keyset-key-RightParenChar"><code class="value">')'</code></a></dt>
+            <dt><a id="keyset-key-RightParen"><code class="value">'RightParen'</code></a></dt>
+            <dt><a id="keyset-key-U-0029"><code class="value">'U+0029'</code></a></dt>
+            <dd>The Right Parenthesis (Closing Parenthesis) key ()).</dd>
+
+            <dt><a id="keyset-key-AsteriskChar"><code class="value">'*'</code></a></dt>
+            <dt><a id="keyset-key-Asterisk"><code class="value">'Asterisk'</code></a></dt>
+            <dt><a id="keyset-key-U-002A"><code class="value">'U+002A'</code></a></dt>
+            <dd>The Asterisk (Star) key (*).</dd>
+
+            <dt><a id="keyset-key-PlusChar"><code class="value">'+'</code></a></dt>
+            <dt><a id="keyset-key-Plus"><code class="value">'Plus'</code></a></dt>
+            <dt><a id="keyset-key-U-002B"><code class="value">'U+002B'</code></a></dt>
+            <dd>The Plus Sign (Plus) key (+).</dd>
+
+            <dt><a id="keyset-key-PercentChar"><code class="value">'%'</code></a></dt>
+            <dt><a id="keyset-key-Percent"><code class="value">'Percent'</code></a></dt>
+            <dt><a id="keyset-key-U-0025"><code class="value">'U+0025'</code></a></dt>
+            <dd>The Percent Sign (Percent) key (+).</dd>
+
+            <dt><a id="keyset-key-CommaChar"><code class="value">','</code></a></dt>
+            <dt><a id="keyset-key-Comma"><code class="value">'Comma'</code></a></dt>
+            <dt><a id="keyset-key-U-002C"><code class="value">'U+002C'</code></a></dt>
+            <dd>The Comma (decimal separator) sign key (,).</dd>
+
+            <dt><a id="keyset-key-HyphenMinusChar"><code class="value">'-'</code></a></dt>
+            <dt><a id="keyset-key-HyphenMinus"><code class="value">'HyphenMinus'</code></a></dt>
+            <dt><a id="keyset-key-U-002D"><code class="value">'U+002D'</code></a></dt>
+            <dd>The Hyphen-minus (hyphen or minus sign) key (-).</dd>
+
+            <dt><a id="keyset-key-PeriodChar"><code class="value">'.'</code></a></dt>
+            <dt><a id="keyset-key-Period"><code class="value">'Period'</code></a></dt>
+            <dt><a id="keyset-key-U-002E"><code class="value">'U+002E'</code></a></dt>
+            <dd>The Full Stop (period, dot, decimal point) key (.).</dd>
+
+            <dt><a id="keyset-key-SolidusChar"><code class="value">'/'</code></a></dt>
+            <dt><a id="keyset-key-Solidus"><code class="value">'Solidus'</code></a></dt>
+            <dt><a id="keyset-key-U-002F"><code class="value">'U+002F'</code></a></dt>
+            <dd>The Solidus (slash, virgule, shilling) key (/).</dd>
+
+            <dt><a id="keyset-key-0"><code class="value">'0'</code></a></dt>
+            <dt><a id="keyset-key-U-0030"><code class="value">'U+0030'</code></a></dt>
+            <dd>The Digit Zero key (0).</dd>
+
+            <dt><a id="keyset-key-1"><code class="value">'1'</code></a></dt>
+            <dt><a id="keyset-key-U-0031"><code class="value">'U+0031'</code></a></dt>
+            <dd>The Digit One key (1).</dd>
+
+            <dt><a id="keyset-key-2"><code class="value">'2'</code></a></dt>
+            <dt><a id="keyset-key-U-0032"><code class="value">'U+0032'</code></a></dt>
+            <dd>The Digit Two key (2).</dd>
+
+            <dt><a id="keyset-key-3"><code class="value">'3'</code></a></dt>
+            <dt><a id="keyset-key-U-0033"><code class="value">'U+0033'</code></a></dt>
+            <dd>The Digit Three key (3).</dd>
+
+            <dt><a id="keyset-key-4"><code class="value">'4'</code></a></dt>
+            <dt><a id="keyset-key-U-0034"><code class="value">'U+0034'</code></a></dt>
+            <dd>The Digit Four key (4).</dd>
+
+            <dt><a id="keyset-key-5"><code class="value">'5'</code></a></dt>
+            <dt><a id="keyset-key-U-0035"><code class="value">'U+0035'</code></a></dt>
+            <dd>The Digit Five key (5).</dd>
+
+            <dt><a id="keyset-key-6"><code class="value">'6'</code></a></dt>
+            <dt><a id="keyset-key-U-0036"><code class="value">'U+0036'</code></a></dt>
+            <dd>The Digit Six key (6).</dd>
+
+            <dt><a id="keyset-key-7"><code class="value">'7'</code></a></dt>
+            <dt><a id="keyset-key-U-0037"><code class="value">'U+0037'</code></a></dt>
+            <dd>The Digit Seven key (7).</dd>
+
+            <dt><a id="keyset-key-8"><code class="value">'8'</code></a></dt>
+            <dt><a id="keyset-key-U-0038"><code class="value">'U+0038'</code></a></dt>
+            <dd>The Digit Eight key (8).</dd>
+
+            <dt><a id="keyset-key-9"><code class="value">'9'</code></a></dt>
+            <dt><a id="keyset-key-U-0039"><code class="value">'U+0039'</code></a></dt>
+            <dd>The Digit Nine key (9).</dd>
+
+            <dt><a id="keyset-key-ColonChar"><code class="value">':'</code></a></dt>
+            <dt><a id="keyset-key-Colon"><code class="value">'Colon'</code></a></dt>
+            <dt><a id="keyset-key-U-003A"><code class="value">'U+003A'</code></a></dt>
+            <dd>The Colon key (:).</dd>
+
+            <dt><a id="keyset-key-SemicolonChar"><code class="value">';'</code></a></dt>
+            <dt><a id="keyset-key-Semicolon"><code class="value">'Semicolon'</code></a></dt>
+            <dt><a id="keyset-key-U-003B"><code class="value">'U+003B'</code></a></dt>
+            <dd>The Semicolon key (;).</dd>
+
+            <dt><a id="keyset-key-LessThan"><code class="value">'LessThan'</code></a></dt>
+            <dt><a id="keyset-key-U-003C"><code class="value">'U+003C'</code></a></dt>
+            <dd>The Less-Than Sign key (&lt;).</dd>
+
+            <dt><a id="keyset-key-EqualsChar"><code class="value">'='</code></a></dt>
+            <dt><a id="keyset-key-Equals"><code class="value">'Equals'</code></a></dt>
+            <dt><a id="keyset-key-U-003D"><code class="value">'U+003D'</code></a></dt>
+            <dd>The Equals Sign key (=).</dd>
+
+            <dt><a id="keyset-key-"><code class="value">'GreaterThan'</code></a></dt>
+            <dt><a id="keyset-key-U-003E"><code class="value">'U+003E'</code></a></dt>
+            <dd>The Greater-Than Sign key (&gt;).</dd>
+
+            <dt><a id="keyset-key-QuestionMarkChar"><code class="value">'?'</code></a></dt>
+            <dt><a id="keyset-key-QuestionMark"><code class="value">'QuestionMark'</code></a></dt>
+            <dt><a id="keyset-key-U-003F"><code class="value">'U+003F'</code></a></dt>
+            <dd>The Question Mark key (?).</dd>
+
+            <dt><a id="keyset-key-AtChar"><code class="value">'@'</code></a></dt>
+            <dt><a id="keyset-key-At"><code class="value">'At'</code></a></dt>
+            <dt><a id="keyset-key-U-0040"><code class="value">'U+0040'</code></a></dt>
+            <dd>The Commercial At (@) key.</dd>
+
+            <dt><a id="keyset-key-A"><code class="value">'A'</code></a></dt>
+            <dt><a id="keyset-key-U-0041"><code class="value">'U+0041'</code></a></dt>
+            <dd>The Latin Capital Letter A key (A).</dd>
+
+            <dt><a id="keyset-key-B"><code class="value">'B'</code></a></dt>
+            <dt><a id="keyset-key-U-0042"><code class="value">'U+0042'</code></a></dt>
+            <dd>The Latin Capital Letter B key (B).</dd>
+
+            <dt><a id="keyset-key-C"><code class="value">'C'</code></a></dt>
+            <dt><a id="keyset-key-U-0043"><code class="value">'U+0043'</code></a></dt>
+            <dd>The Latin Capital Letter C key (C).</dd>
+
+            <dt><a id="keyset-key-D"><code class="value">'D'</code></a></dt>
+            <dt><a id="keyset-key-U-0044"><code class="value">'U+0044'</code></a></dt>
+            <dd>The Latin Capital Letter D key (D).</dd>
+
+            <dt><a id="keyset-key-E"><code class="value">'E'</code></a></dt>
+            <dt><a id="keyset-key-U-0045"><code class="value">'U+0045'</code></a></dt>
+            <dd>The Latin Capital Letter E key (E).</dd>
+
+            <dt><a id="keyset-key-F"><code class="value">'F'</code></a></dt>
+            <dt><a id="keyset-key-U-0046"><code class="value">'U+0046'</code></a></dt>
+            <dd>The Latin Capital Letter F key (F).</dd>
+
+            <dt><a id="keyset-key-G"><code class="value">'G'</code></a></dt>
+            <dt><a id="keyset-key-U-0047"><code class="value">'U+0047'</code></a></dt>
+            <dd>The Latin Capital Letter G key (G).</dd>
+
+            <dt><a id="keyset-key-H"><code class="value">'H'</code></a></dt>
+            <dt><a id="keyset-key-U-0048"><code class="value">'U+0048'</code></a></dt>
+            <dd>The Latin Capital Letter H key (H).</dd>
+
+            <dt><a id="keyset-key-I"><code class="value">'I'</code></a></dt>
+            <dt><a id="keyset-key-U-0049"><code class="value">'U+0049'</code></a></dt>
+            <dd>The Latin Capital Letter I key (I).</dd>
+
+            <dt><a id="keyset-key-J"><code class="value">'J'</code></a></dt>
+            <dt><a id="keyset-key-U-004A"><code class="value">'U+004A'</code></a></dt>
+            <dd>The Latin Capital Letter J key (J).</dd>
+
+            <dt><a id="keyset-key-K"><code class="value">'K'</code></a></dt>
+            <dt><a id="keyset-key-U-004B"><code class="value">'U+004B'</code></a></dt>
+            <dd>The Latin Capital Letter K key (K).</dd>
+
+            <dt><a id="keyset-key-L"><code class="value">'L'</code></a></dt>
+            <dt><a id="keyset-key-U-004C"><code class="value">'U+004C'</code></a></dt>
+            <dd>The Latin Capital Letter L key (L).</dd>
+
+            <dt><a id="keyset-key-M"><code class="value">'M'</code></a></dt>
+            <dt><a id="keyset-key-U-004D"><code class="value">'U+004D'</code></a></dt>
+            <dd>The Latin Capital Letter M key (M).</dd>
+
+            <dt><a id="keyset-key-N"><code class="value">'N'</code></a></dt>
+            <dt><a id="keyset-key-U-004E"><code class="value">'U+004E'</code></a></dt>
+            <dd>The Latin Capital Letter N key (N).</dd>
+
+            <dt><a id="keyset-key-O"><code class="value">'O'</code></a></dt>
+            <dt><a id="keyset-key-U-004F"><code class="value">'U+004F'</code></a></dt>
+            <dd>The Latin Capital Letter O key (O).</dd>
+
+            <dt><a id="keyset-key-P"><code class="value">'P'</code></a></dt>
+            <dt><a id="keyset-key-U-0050"><code class="value">'U+0050'</code></a></dt>
+            <dd>The Latin Capital Letter P key (P).</dd>
+
+            <dt><a id="keyset-key-Q"><code class="value">'Q'</code></a></dt>
+            <dt><a id="keyset-key-U-0051"><code class="value">'U+0051'</code></a></dt>
+            <dd>The Latin Capital Letter Q key (Q).</dd>
+
+            <dt><a id="keyset-key-R"><code class="value">'R'</code></a></dt>
+            <dt><a id="keyset-key-U-0052"><code class="value">'U+0052'</code></a></dt>
+            <dd>The Latin Capital Letter R key (R).</dd>
+
+            <dt><a id="keyset-key-S"><code class="value">'S'</code></a></dt>
+            <dt><a id="keyset-key-U-0053"><code class="value">'U+0053'</code></a></dt>
+            <dd>The Latin Capital Letter S key (S).</dd>
+
+            <dt><a id="keyset-key-T"><code class="value">'T'</code></a></dt>
+            <dt><a id="keyset-key-U-0054"><code class="value">'U+0054'</code></a></dt>
+            <dd>The Latin Capital Letter T key (T).</dd>
+
+            <dt><a id="keyset-key-U"><code class="value">'U'</code></a></dt>
+            <dt><a id="keyset-key-U-0055"><code class="value">'U+0055'</code></a></dt>
+            <dd>The Latin Capital Letter U key (U).</dd>
+
+            <dt><a id="keyset-key-V"><code class="value">'V'</code></a></dt>
+            <dt><a id="keyset-key-U-0056"><code class="value">'U+0056'</code></a></dt>
+            <dd>The Latin Capital Letter V key (V).</dd>
+
+            <dt><a id="keyset-key-W"><code class="value">'W'</code></a></dt>
+            <dt><a id="keyset-key-U-0057"><code class="value">'U+0057'</code></a></dt>
+            <dd>The Latin Capital Letter W key (W).</dd>
+
+            <dt><a id="keyset-key-X"><code class="value">'X'</code></a></dt>
+            <dt><a id="keyset-key-U-0058"><code class="value">'U+0058'</code></a></dt>
+            <dd>The Latin Capital Letter X key (X).</dd>
+
+            <dt><a id="keyset-key-Y"><code class="value">'Y'</code></a></dt>
+            <dt><a id="keyset-key-U-0059"><code class="value">'U+0059'</code></a></dt>
+            <dd>The Latin Capital Letter Y key (Y).</dd>
+
+            <dt><a id="keyset-key-Z"><code class="value">'Z'</code></a></dt>
+            <dt><a id="keyset-key-U-005A"><code class="value">'U+005A'</code></a></dt>
+            <dd>The Latin Capital Letter Z key (Z).</dd>
+
+            <dt><a id="keyset-key-a"><code class="value">'a'</code></a></dt>
+            <dt><a id="keyset-key-U-0061"><code class="value">'U+0061'</code></a></dt>
+            <dd>The Latin Miniscule Letter a key.</dd>
+
+            <dt><a id="keyset-key-b"><code class="value">'b'</code></a></dt>
+            <dt><a id="keyset-key-U-0062"><code class="value">'U+0062'</code></a></dt>
+            <dd>The Latin Miniscule Letter b key.</dd>
+
+            <dt><a id="keyset-key-c"><code class="value">'c'</code></a></dt>
+            <dt><a id="keyset-key-U-0063"><code class="value">'U+0063'</code></a></dt>
+            <dd>The Latin Miniscule Letter c key.</dd>
+
+            <dt><a id="keyset-key-d"><code class="value">'d'</code></a></dt>
+            <dt><a id="keyset-key-U-0064"><code class="value">'U+0064'</code></a></dt>
+            <dd>The Latin Miniscule Letter d key.</dd>
+
+            <dt><a id="keyset-key-e"><code class="value">'e'</code></a></dt>
+            <dt><a id="keyset-key-U-0065"><code class="value">'U+0065'</code></a></dt>
+            <dd>The Latin Miniscule Letter e key.</dd>
+
+            <dt><a id="keyset-key-f"><code class="value">'f'</code></a></dt>
+            <dt><a id="keyset-key-U-0066"><code class="value">'U+0066'</code></a></dt>
+            <dd>The Latin Miniscule Letter f key.</dd>
+
+            <dt><a id="keyset-key-g"><code class="value">'g'</code></a></dt>
+            <dt><a id="keyset-key-U-0067"><code class="value">'U+0067'</code></a></dt>
+            <dd>The Latin Miniscule Letter g key.</dd>
+
+            <dt><a id="keyset-key-h"><code class="value">'h'</code></a></dt>
+            <dt><a id="keyset-key-U-0068"><code class="value">'U+0068'</code></a></dt>
+            <dd>The Latin Miniscule Letter h key.</dd>
+
+            <dt><a id="keyset-key-i"><code class="value">'i'</code></a></dt>
+            <dt><a id="keyset-key-U-0069"><code class="value">'U+0069'</code></a></dt>
+            <dd>The Latin Miniscule Letter i key.</dd>
+
+            <dt><a id="keyset-key-j"><code class="value">'j'</code></a></dt>
+            <dt><a id="keyset-key-U-006A"><code class="value">'U+006A'</code></a></dt>
+            <dd>The Latin Miniscule Letter j key.</dd>
+
+            <dt><a id="keyset-key-k"><code class="value">'k'</code></a></dt>
+            <dt><a id="keyset-key-U-006B"><code class="value">'U+006B'</code></a></dt>
+            <dd>The Latin Miniscule Letter k key.</dd>
+
+            <dt><a id="keyset-key-l"><code class="value">'l'</code></a></dt>
+            <dt><a id="keyset-key-U-006C"><code class="value">'U+006C'</code></a></dt>
+            <dd>The Latin Miniscule Letter l key.</dd>
+
+            <dt><a id="keyset-key-m"><code class="value">'m'</code></a></dt>
+            <dt><a id="keyset-key-U-006D"><code class="value">'U+006D'</code></a></dt>
+            <dd>The Latin Miniscule Letter m key.</dd>
+
+            <dt><a id="keyset-key-n"><code class="value">'n'</code></a></dt>
+            <dt><a id="keyset-key-U-006E"><code class="value">'U+006E'</code></a></dt>
+            <dd>The Latin Miniscule Letter n key.</dd>
+
+            <dt><a id="keyset-key-o"><code class="value">'o'</code></a></dt>
+            <dt><a id="keyset-key-U-006F"><code class="value">'U+006F'</code></a></dt>
+            <dd>The Latin Miniscule Letter o key.</dd>
+
+            <dt><a id="keyset-key-p"><code class="value">'p'</code></a></dt>
+            <dt><a id="keyset-key-U-0070"><code class="value">'U+0070'</code></a></dt>
+            <dd>The Latin Miniscule Letter p key.</dd>
+
+            <dt><a id="keyset-key-q"><code class="value">'q'</code></a></dt>
+            <dt><a id="keyset-key-U-0071"><code class="value">'U+0071'</code></a></dt>
+            <dd>The Latin Miniscule Letter q key.</dd>
+
+            <dt><a id="keyset-key-r"><code class="value">'r'</code></a></dt>
+            <dt><a id="keyset-key-U-0072"><code class="value">'U+0072'</code></a></dt>
+            <dd>The Latin Miniscule Letter r key.</dd>
+
+            <dt><a id="keyset-key-s"><code class="value">'s'</code></a></dt>
+            <dt><a id="keyset-key-U-0073"><code class="value">'U+0073'</code></a></dt>
+            <dd>The Latin Miniscule Letter s key.</dd>
+
+            <dt><a id="keyset-key-t"><code class="value">'t'</code></a></dt>
+            <dt><a id="keyset-key-U-0074"><code class="value">'U+0074'</code></a></dt>
+            <dd>The Latin Miniscule Letter t key.</dd>
+
+            <dt><a id="keyset-key-u"><code class="value">'u'</code></a></dt>
+            <dt><a id="keyset-key-U-0075"><code class="value">'U+0075'</code></a></dt>
+            <dd>The Latin Miniscule Letter u key.</dd>
+
+            <dt><a id="keyset-key-v"><code class="value">'v'</code></a></dt>
+            <dt><a id="keyset-key-U-0076"><code class="value">'U+0076'</code></a></dt>
+            <dd>The Latin Miniscule Letter v key.</dd>
+
+            <dt><a id="keyset-key-w"><code class="value">'w'</code></a></dt>
+            <dt><a id="keyset-key-U-0077"><code class="value">'U+0077'</code></a></dt>
+            <dd>The Latin Miniscule Letter w key.</dd>
+
+            <dt><a id="keyset-key-x"><code class="value">'x'</code></a></dt>
+            <dt><a id="keyset-key-U-0078"><code class="value">'U+0078'</code></a></dt>
+            <dd>The Latin Miniscule Letter x key.</dd>
+
+            <dt><a id="keyset-key-y"><code class="value">'y'</code></a></dt>
+            <dt><a id="keyset-key-U-0079"><code class="value">'U+0079'</code></a></dt>
+            <dd>The Latin Miniscule Letter y key.</dd>
+
+            <dt><a id="keyset-key-z"><code class="value">'z'</code></a></dt>
+            <dt><a id="keyset-key-U-007A"><code class="value">'U+007A'</code></a></dt>
+            <dd>The Latin Miniscule Letter z key.</dd>
+
+
+            <dt><a id="keyset-key-LeftSquareBracketChar"><code class="value">'['</code></a></dt>
+            <dt><a id="keyset-key-LeftSquareBracket"><code class="value">'LeftSquareBracket'</code></a></dt>
+            <dt><a id="keyset-key-U-005B"><code class="value">'U+005B'</code></a></dt>
+            <dd>The Left Square Bracket (Opening Square Bracket) key ([).</dd>
+
+            <dt><a id="keyset-key-BackslashChar"><code class="value">'\'</code></a></dt>
+            <dt><a id="keyset-key-Backslash"><code class="value">'Backslash'</code></a></dt>
+            <dt><a id="keyset-key-U-005C"><code class="value">'U+005C'</code></a></dt>
+            <dd>The Reverse Solidus (Backslash) key (\).</dd>
+
+            <dt><a id="keyset-key-RightSquareBracketChar"><code class="value">']'</code></a></dt>
+            <dt><a id="keyset-key-RightSquareBracket"><code class="value">'RightSquareBracket'</code></a></dt>
+            <dt><a id="keyset-key-U-005D"><code class="value">'U+005D'</code></a></dt>
+            <dd>The Right Square Bracket (Closing Square Bracket) key (]).</dd>
+
+            <dt><a id="keyset-key-CircumflexChar"><code class="value">'^'</code></a></dt>
+            <dt><a id="keyset-key-Circumflex"><code class="value">'Circumflex'</code></a></dt>
+            <dt><a id="keyset-key-U-005E"><code class="value">'U+005E'</code></a></dt>
+            <dd>The Circumflex Accent key (^).</dd>
+
+            <dt><a id="keyset-key-UnderscoreChar"><code class="value">'_'</code></a></dt>
+            <dt><a id="keyset-key-Underscore"><code class="value">'Underscore'</code></a></dt>
+            <dt><a id="keyset-key-U-005F"><code class="value">'U+005F'</code></a></dt>
+            <dd>The Low Sign (Spacing Underscore, Underscore) key (_).</dd>
+
+            <dt><a id="keyset-key-GraveChar"><code class="value">'`'</code></a></dt>
+            <dt><a id="keyset-key-Grave"><code class="value">'Grave'</code></a></dt>
+            <dt><a id="keyset-key-U-0060"><code class="value">'U+0060'</code></a></dt>
+            <dd>The Grave Accent (Back Quote) key (`).</dd>
+
+            <dt><a id="keyset-key-LeftCurlyBracketChar"><code class="value">'{'</code></a></dt>
+            <dt><a id="keyset-key-LeftCurlyBracket"><code class="value">'LeftCurlyBracket'</code></a></dt>
+            <dt><a id="keyset-key-U-007B"><code class="value">'U+007B'</code></a></dt>
+            <dd>The Left Curly Bracket (Opening Curly Bracket, Opening Brace, Brace Left) key ({).</dd>
+
+            <dt><a id="keyset-key-PipeChar"><code class="value">'|'</code></a></dt>
+            <dt><a id="keyset-key-Pipe"><code class="value">'Pipe'</code></a></dt>
+            <dt><a id="keyset-key-U-007C"><code class="value">'U+007C'</code></a></dt>
+            <dd>The Vertical Line (Vertical Bar, Pipe) key (|).</dd>
+
+            <dt><a id="keyset-key-RightCurlyBracketChar"><code class="value">'}'</code></a></dt>
+            <dt><a id="keyset-key-RightCurlyBracket"><code class="value">'RightCurlyBracket'</code></a></dt>
+            <dt><a id="keyset-key-U-007D"><code class="value">'U+007D'</code></a></dt>
+            <dd>The Right Curly Bracket (Closing Curly Bracket, Closing Brace, Brace Right) key (}).</dd>
+
+            <dt><a id="keyset-key-Del"><code class="value">'Del'</code></a></dt>
+            <dt><a id="keyset-key-U-007F"><code class="value">'U+007F'</code></a></dt>
+            <dd>The Delete (Del) Key.
+             <span class="note"><strong>Note:</strong> This key identifier 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.</span>
+            </dd>
+
+            <dt><a id="keyset-key-InvertedExclamationChar"><code class="value">'¡'</code></a></dt>
+            <dt><a id="keyset-key-InvertedExclamation"><code class="value">'InvertedExclamation'</code></a></dt>
+            <dt><a id="keyset-key-U-00A1"><code class="value">'U+00A1'</code></a></dt>
+            <dd>The Inverted Exclamation Mark key (&#161;).</dd>
+
+            <dt><a id="keyset-key-DeadGrave"><code class="value">'DeadGrave'</code></a></dt>
+            <dt><a id="keyset-key-U-0300"><code class="value">'U+0300'</code></a></dt>
+            <dd>The Combining Grave Accent (Greek Varia, Dead Grave) key.</dd>
+
+            <dt><a id="keyset-key-DeadEacute"><code class="value">'DeadEacute'</code></a></dt>
+            <dt><a id="keyset-key-U-0301"><code class="value">'U+0301'</code></a></dt>
+            <dd>The Combining Acute Accent (Stress Mark, Greek Oxia, Tonos, Dead Eacute) key.</dd>
+
+            <dt><a id="keyset-key-DeadCircumflex"><code class="value">'DeadCircumflex'</code></a></dt>
+            <dt><a id="keyset-key-U-0302"><code class="value">'U+0302'</code></a></dt>
+            <dd>The Combining Circumflex Accent (Hat, Dead Circumflex) key.</dd>
+
+            <dt><a id="keyset-key-DeadTilde"><code class="value">'DeadTilde'</code></a></dt>
+            <dt><a id="keyset-key-U-0303"><code class="value">'U+0303'</code></a></dt>
+            <dd>The Combining Tilde (Dead Tilde) key.</dd>
+
+            <dt><a id="keyset-key-DeadMacron"><code class="value">'DeadMacron'</code></a></dt>
+            <dt><a id="keyset-key-U-0304"><code class="value">'U+0304'</code></a></dt>
+            <dd>The Combining Macron (Long, Dead Macron) key.</dd>
+
+            <dt><a id="keyset-key-DeadBreve"><code class="value">'DeadBreve'</code></a></dt>
+            <dt><a id="keyset-key-U-0306"><code class="value">'U+0306'</code></a></dt>
+            <dd>The Combining Breve (Short, Dead Breve) key.</dd>
+
+            <dt><a id="keyset-key-DeadAboveDot"><code class="value">'DeadAboveDot'</code></a></dt>
+            <dt><a id="keyset-key-U-0307"><code class="value">'U+0307'</code></a></dt>
+            <dd>The Combining Dot Above (Derivative, Dead Above Dot) key.</dd>
+
+            <dt><a id="keyset-key-DeadUmlaut"><code class="value">'DeadUmlaut'</code></a></dt>
+            <dt><a id="keyset-key-U-0308"><code class="value">'U+0308'</code></a></dt>
+            <dd>The Combining Diaeresis (Double Dot Abode, Umlaut, Greek Dialytika, Double Derivative, Dead Diaeresis) key.</dd>
+
+            <dt><a id="keyset-key-DeadAboveRing"><code class="value">'DeadAboveRing'</code></a></dt>
+            <dt><a id="keyset-key-U-030A"><code class="value">'U+030A'</code></a></dt>
+            <dd>The Combining Ring Above (Dead Above Ring) key.</dd>
+
+            <dt><a id="keyset-key-DeadDoubleacute"><code class="value">'DeadDoubleacute'</code></a></dt>
+            <dt><a id="keyset-key-U-030B"><code class="value">'U+030B'</code></a></dt>
+            <dd>The Combining Double Acute Accent (Dead Doubleacute) key.</dd>
+
+            <dt><a id="keyset-key-DeadCaron"><code class="value">'DeadCaron'</code></a></dt>
+            <dt><a id="keyset-key-U-030C"><code class="value">'U+030C'</code></a></dt>
+            <dd>The Combining Caron (Hacek, V Above, Dead Caron) key.</dd>
+
+            <dt><a id="keyset-key-DeadCedilla"><code class="value">'DeadCedilla'</code></a></dt>
+            <dt><a id="keyset-key-U-0327"><code class="value">'U+0327'</code></a></dt>
+            <dd>The Combining Cedilla (Dead Cedilla) key.</dd>
+
+            <dt><a id="keyset-key-DeadOgonek"><code class="value">'DeadOgonek'</code></a></dt>
+            <dt><a id="keyset-key-U-0328"><code class="value">'U+0328'</code></a></dt>
+            <dd>The Combining Ogonek (Nasal Hook, Dead Ogonek) key.</dd>
+
+            <dt><a id="keyset-key-DeadIota"><code class="value">'DeadIota'</code></a></dt>
+            <dt><a id="keyset-key-U-0345"><code class="value">'U+0345'</code></a></dt>
+            <dd>The Combining Greek Ypogegrammeni (Greek Non-Spacing Iota Below, Iota Subscript, Dead Iota) key.</dd>
+
+            <dt><a id="keyset-key-EuroChar"><code class="value">'€'</code></a></dt>
+            <dt><a id="keyset-key-Euro"><code class="value">'Euro'</code></a></dt>
+            <dt><a id="keyset-key-U-20AC"><code class="value">'U+20AC'</code></a></dt>
+            <dd>The Euro Currency Sign key (&#8364;).</dd>
+
+            <dt><a id="keyset-key-DeadVoicedSound"><code class="value">'DeadVoicedSound'</code></a></dt>
+            <dt><a id="keyset-key-U-3099"><code class="value">'U+3099'</code></a></dt>
+            <dd>The Combining Katakana-Hiragana Voiced Sound Mark (Dead Voiced Sound) key.</dd>
+
+            <dt><a id="keyset-key-DeadSemivoicedSound"><code class="value">'DeadSemivoicedSound'</code></a></dt>
+            <dt><a id="keyset-key-U-309A"><code class="value">'U+309A'</code></a></dt>
+            <dd>The Combining Katakana-Hiragana Semi-Voiced Sound Mark (Dead Semivoiced Sound) key.</dd>
+          </dl>
+        </div>
+        <!-- div2 KeySet-Set -->
 
 <div>
-  <h4 class="adiv3"><a id="keyset-keyCode-charCode" href="#keyset-keyCode-charCode">6.3.3 Key identifiers, keyCode, and charCode</a></h4>
+  <h4 class="adiv3"><a id="keyset-keyCode-charCode" href="#keyset-keyCode-charCode">6.2.8 Key identifiers, keyCode, and charCode</a></h4>
   <p class="note"><strong>Note:</strong> This section is non-normative.</p>
   <p>Browser support for keyboards has traditionally relied on two ad-hoc attributes, <code class="attr-name">keyCode</code>, and <code class="attr-name">charCode</code>.  The values for these attributes, and the availability of the attribute, is inconsistent across platforms, keyboard languages and layouts, User Agents, versions, and even event types.  A significant amount of legacy content, including script libraries, relies upon detecting the User Agent and acting accordingly, and any changes to <code class="attr-name">keyCode</code>, or <code class="attr-name">charCode</code> risk breaking as much content as they fix or enable.  Additionally, these attributes are not suitable for international usage, or accessibility concerns.  Therefore, this specification does not normatively define the <code class="attr-name">keyCode</code>, and <code class="attr-name">charCode</code> attributes, relying instead only on the more robust key identifiers, which can be used safely and consistently in any User Agent which conforms to this specification.  However, for the purpose of documenting the current state of these attributes and their relation to equivalent key identifiers, this specification contains the following table, which is to be used as an informative reference only, and does not document the full range of values for <code class="attr-name">keyCode</code>, and <code class="attr-name">charCode</code>.</p>
   <table id="tbl-keyIdentifiers-keyCode-charCode">
@@ -6230,6 +6396,7 @@
   </table>
 </div>
         </div>
+      </div>
         <!-- div1 KeySet -->
 
 
@@ -6349,7 +6516,8 @@
 
       <p>In the WebApps Working Group, the following people made substantial material contributions in the process of refining and revising this specification:  Hironori Bono (Google), Daniel Danilatos (Google), Travis Leithead (Microsoft), Cameron McCormack (Invited Expert), Olli Pettay (Mozilla), Jacob Rossi (Microsoft), Hallvord R. M. Steen (Opera)</p>
 
-      <p>Thanks to all those who have helped to improve this specification by sending suggestions and corrections (Please, keep bugging us with your issues!):  Brad Pettit, Dylan Schiemann, David Flanagan, Steven Pemberton, Curt Arnold, Al Gilman, Misha Wolf, Sigurd Lerstad, Michael B. Allen, Alexander J. Vincent, Martin D&#xFC;rst, Ken Rehor, NAKANO Masayuki, Garrett Smith, Martijn Wargers, Sean Hogan, Magnus Kristiansen, Alex Russell, and Cameron McCormack.</p>
+      <p>Thanks to all those who have helped to improve this specification by sending suggestions and corrections (Please, keep bugging us with your issues!), or writing informative books or Web sites:  Brad Pettit, Dylan Schiemann, David Flanagan, Steven Pemberton, Curt Arnold, Al Gilman, Misha Wolf, Sigurd Lerstad, Michael B. Allen, Alexander J. Vincent, Martin D&#xFC;rst, Ken Rehor, NAKANO Masayuki, Garrett Smith, Martijn Wargers, Sean Hogan, Magnus Kristiansen, Alex Russell, Cameron McCormack, and Jan Goyvaerts (regular-expressions.info).</p>
+      
       <div class="div2">
         <h2 class="adiv2"><a id="acknowledgements-Productions" href="#acknowledgements-Productions">D.1 Production Systems</a></h2>
         <p>The current drafts of this specification are lovingly hand-crafted in HTML and SVG.</p>
@@ -6396,7 +6564,10 @@
           <dt>
             <strong>[<a id="references-Unicode">Unicode</a>]</strong>
           </dt>
-          <dd><cite>The Unicode Standard, Version 5.0</cite>, ISBN 0-321-48091-0, as updated from time to time by the publication of new versions. See also <a class="normative" href="http://www.unicode.org/unicode/standard/versions">Versions of the Unicode Standard</a>, available at http://www.unicode.org/unicode/standard/versions, for latest version and additional information on versions of the standard and of the Unicode Character Database.</dd>
+          <dd><cite>The Unicode Standard, Version 5.0</cite>, ISBN 0-321-48091-0, as updated periodically by the publication of new versions. See also <a class="normative" href="http://www.unicode.org/unicode/standard/versions">Versions of the Unicode Standard</a>, available at http://www.unicode.org/unicode/standard/versions, for latest version and additional information on versions of the standard and of the Unicode Character Database.</dd>
+          
+          Unicode 5.1.0
+          
           <dt>
             <strong>[<a id="references-UnicodeNormalization">UAX #15</a>]</strong>
           </dt>
@@ -6445,13 +6616,20 @@
           <dd><cite><a href="http://www.iso.org/iso/search.htm?qt=9995&amp;published=on">ISO/IEC 9995-8:2006, Information technology -- Keyboard layouts for text and office systems -- Part 8: Allocation of letters to the keys of a numeric keypad.</a></cite></dd>
 
           <dt><strong>[<a id="references-KeyEvent">KeyEvent for Java</a>]</strong></dt>
-          <dd><cite><a href="http://java.sun.com/j2se/1.4.2/docs/api/java/awt/event/KeyEvent.html">Java 2 SDK, Standard Edition Documentation, Version 1.4.2, Class java.awt.events.KeyEvent</a></cite>. Sun Microsystems. Available at http://java.sun.com/j2se/1.4.2/docs/api/java/awt/event/KeyEvent.html.</dd>
+          <dd><cite><a href="http://java.sun.com/javase/6/docs/api/java/awt/event/KeyEvent.html">Java™ Platform, Standard Edition 6
+          API Specification, Class java.awt.events.KeyEvent</a></cite>. Sun Microsystems. Available at http://java.sun.com/javase/6/docs/api/java/awt/event/KeyEvent.html.</dd>
 
 
           <dt>
             <strong>[<a id="references-Keys">Keys enumeration for .Net</a>]</strong>
           </dt>
-          <dd><cite><a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemWindowsFormsKeysClassTopic.asp">.NET Framework Class Library, Keys Enumeration</a></cite>. Microsoft. Available at http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemWindowsFormsKeysClassTopic.asp.</dd>
+          <dd><cite><a href="http://msdn.microsoft.com/en-us/library/system.windows.forms.keys%28VS.100,loband%29.aspx">.NET Framework 4.0 Class Library, Keys Enumeration</a></cite>. Microsoft. Available at http://msdn.microsoft.com/en-us/library/system.windows.forms.keys(VS.100,loband).aspx.</dd>
+          
+          <dt>
+            <strong>[<a id="references-pcre">PCRE</a>]</strong>
+          </dt>
+          <dd><cite><a href="http://www.pcre.org/">Perl Compatible Regular Expressions library</a></cite>.  Available at http://www.pcre.org/.</dd>
+
           <dt>
             <strong>[<a id="references-XHTML10">XHTML 1.0</a>]</strong>
           </dt>