--- a/html/DOM3-Events.html Sat Aug 17 06:58:15 2013 -0700
+++ b/html/DOM3-Events.html Sat Aug 17 08:54:49 2013 -0700
@@ -232,7 +232,7 @@
<dt>Key and character values</dt>
<dd>
This is a key name: <code class="key">'Spacebar'</code> (e.g., the value of <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a>); this is the equivalent character
- value: <code class="char">'\u0020'</code> (e.g., the value of <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a>). This is a glyph that represents that same
+ value: <code class="char">'\u0020'</code>. This is a glyph that represents that same
character value: <code class="glyph">' '</code>.
</dd>
@@ -4336,23 +4336,12 @@
</div>
</dd>
- <dt>readonly attribute DOMString char</dt>
- <dd>
- <p><code>char</code> holds the character value of the key pressed. If the key press has a printed representation, then the value MUST be a non-empty Unicode character
- string, conforming to the <a href="#key-algorithm">algorithm for determining the key value</a> defined in this specification. For a key associated with a macro
- to insert multiple characters, the value of the <code>char</code> attribute will hold the entire sequence of characters. For a key which does not have a character
- representation, the value MUST be the <a class="def" href="#glossary-empty-string">empty string</a>.</p>
-
- <p class="note"><strong>Note:</strong> The <code>char</code> attribute is not related to the legacy <code>charCode</code> attribute and does
- not have the same set of values.</p>
-
- <p>The <a class="def" href="#glossary-un-initialized-value">un-initialized value</a> of this attribute MUST be <code>""</code> (the empty string).</p>
- </dd>
-
<dt>readonly attribute DOMString key</dt>
<dd>
- <p><code>key</code> holds the key value of the key pressed. If the value is has a printed representation, it MUST match the value of the <a href="#events-KeyboardEvent-char">
- <code>KeyboardEvent.char</code></a> attribute; if the value is a control key which has no printed representation, it MUST be one of the key values defined in the
+ <p><code>key</code> holds the key value of the key pressed.
+ If the value is has a printed representation, it MUST be a non-empty Unicode character
+ string, conforming to the <a href="#key-algorithm">algorithm for determining the key value</a> defined in this specification.
+ If the value is a control key which has no printed representation, it MUST be one of the key values defined in the
<a href="#keys-keyvalues">key values set</a>, as determined by the <a href="#key-algorithm">algorithm for determining the key value</a>. Implementations that are
unable to identify a key MUST use the key value <a href="#key-Unidentified"><code class="key">'Unidentified'</code></a>.</p>
@@ -4467,7 +4456,7 @@
<a class="def" href="#glossary-character-value">character value</a>. In practice, <code>keyCode</code> and <code>charCode</code> are inconsistent across platforms
and even the same implementation on different operating systems or using different localizations. DOM Level 3 Events does not define values for either
<code>keyCode</code> or <code>charCode</code>, or behavior for <code>charCode</code>; content authors can use <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a>
- or <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a> instead, in conforming DOM Level 3 Events implementations. <em>For more information, see
+ instead, in conforming DOM Level 3 Events implementations. <em>For more information, see
the informative appendix on <a href="#legacy-key-attributes">Legacy key attributes: keyCode, charCode, and which</a>.</em></p>
<p class="note"><strong>Note:</strong> For compatibility with existing content, virtual keyboards, such as software keyboards on screen-based
@@ -4560,7 +4549,6 @@
input element focused</li>
<li><a href="#events-UIEvent-view"><code class="attribute-name">UIEvent.view</code></a>: <a class="def" href="#glossary-defaultView"><code>defaultView</code></a></li>
<li><a href="#events-UIEvent-detail"><code class="attribute-name">UIEvent.detail</code></a>: <code>0</code></li>
- <li><a href="#events-KeyboardEvent-char"><code class="attribute-name">KeyboardEvent.char</code></a>: the character value of the key pressed.</li>
<li><a href="#events-KeyboardEvent-key"><code class="attribute-name">KeyboardEvent.key</code></a>: the key value of the key pressed.</li>
<li><a href="#events-KeyboardEvent-location"><code class="attribute-name">KeyboardEvent.location</code></a>: the location of the key on the device.</li>
<li><a href="#events-KeyboardEvent-altKey"><code class="attribute-name">KeyboardEvent.altKey</code></a>: <code>true</code> if <a href="#key-Alt"><code class="key">
@@ -4658,7 +4646,6 @@
input element focused</li>
<li><a href="#events-UIEvent-view"><code class="attribute-name">UIEvent.view</code></a>: <a class="def" href="#glossary-defaultView"><code>defaultView</code></a></li>
<li><a href="#events-UIEvent-detail"><code class="attribute-name">UIEvent.detail</code></a>: <code>0</code></li>
- <li><a href="#events-KeyboardEvent-char"><code class="attribute-name">KeyboardEvent.char</code></a>: the character value of the key pressed.</li>
<li><a href="#events-KeyboardEvent-key"><code class="attribute-name">KeyboardEvent.key</code></a>: the key value of the key pressed.</li>
<li><a href="#events-KeyboardEvent-location"><code class="attribute-name">KeyboardEvent.location</code></a>: the location of the key on the device.</li>
<li><a href="#events-KeyboardEvent-altKey"><code class="attribute-name">KeyboardEvent.altKey</code></a>: <code>true</code> if <a href="#key-Alt"><code class="key">
@@ -4737,7 +4724,6 @@
input element focused</li>
<li><a href="#events-UIEvent-view"><code class="attribute-name">UIEvent.view</code></a>: <a class="def" href="#glossary-defaultView"><code>defaultView</code></a></li>
<li><a href="#events-UIEvent-detail"><code class="attribute-name">UIEvent.detail</code></a>: <code>0</code></li>
- <li><a href="#events-KeyboardEvent-char"><code class="attribute-name">KeyboardEvent.char</code></a>: the character value of the key pressed.</li>
<li><a href="#events-KeyboardEvent-key"><code class="attribute-name">KeyboardEvent.key</code></a>: the key value of the key pressed.</li>
<li><a href="#events-KeyboardEvent-location"><code class="attribute-name">KeyboardEvent.location</code></a>: the location of the key on the device.</li>
<li><a href="#events-KeyboardEvent-altKey"><code class="attribute-name">KeyboardEvent.altKey</code></a>: <code>true</code> if <a href="#key-Alt"><code class="key">
@@ -5843,8 +5829,8 @@
as for keyboard shortcuts). This specification defines a set of common key values (called the <a href="#key-values">Key Values Set</a>), and rules for production
of new key values.</p>
- <p>Key values can be used to detect the value of a key which has been pressed, using the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> or
- <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a> attributes. Content authors can retrieve the <a class="def" href="#glossary-character-value">
+ <p>Key values can be used to detect the value of a key which has been pressed, using the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a>
+ attribute. Content 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-value">key
value</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
@@ -5868,7 +5854,7 @@
in a shifted state during a dead-key operation to add an umlaut diacritic. Because a user can map their keyboard to an arbitrary custom configuration, the content
author is encouraged not to 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 is encouraged instead to use the value of the <a href="#events-KeyboardEvent-key">
- <code>KeyboardEvent.key</code></a> or <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a> attributes. The keyboard depicted in <a href="#figure-keyboard">
+ <code>KeyboardEvent.key</code></a> attribute. The keyboard depicted in <a href="#figure-keyboard">
Figure 4</a> illustrates one possible set of <a class="def" href="#glossary-key-mapping">key mappings</a> on one possible keyboard layout; many others exist,
both standard and idiosyncratic.</p>
@@ -5881,15 +5867,6 @@
custom keyboard layouts MAY duplicate any key value in multiple key-state scenarios (note that <a href="#events-KeyboardEvent-location"><code>KeyboardEvent.location</code></a>
is intended for standard keyboard layouts, and cannot always indicate a meaningful distinction).</p>
- <p>Similarly, a given key event state MAY have different key values. For most keys which represent characters, such as the letter <code class="glyph">'m'</code> or the question
- mark (<code class="glyph">'?'</code>), the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> and <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a>
- attributes will be the same. However, for <em>printing control characters</em>, such as the backspace/back key, the <em>character value</em> is distinct from the
- <em>key value</em>, with different values for the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> and <a href="#events-KeyboardEvent-char"><code>
- KeyboardEvent.char</code></a> attributes; see the <a href="#key-values">Key Values Set</a> for more details. Certain keys in some states, called <em>modifier keys</em>
- or <em>control keys</em>, have only a <a class="def" href="#glossary-key-value">key value</a> and no <a class="def" href="#glossary-character-value">character value</a>,
- such as the volume mute key, which has the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> attribute value <code class="key">'VolumeMute'</code>
- and the <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a> attribute value the <a class="def" href="#glossary-empty-string">empty string</a>.</p>
-
<p>Finally, the meaning of any given character representation is context-dependent and complex. For example, in some contexts, the asterisk (star) glyph (<code
class="glyph">'*'</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="glyph">'×'</code>,
@@ -6783,29 +6760,20 @@
<ol class="algo" id="key-algorithm">
<li>If the primary current function of the key is to generate a character, then:
<ol class="algo">
- <li>If there exists an appropriate character in the <a href="#keys-keyvalues">key values set</a>, then:
- <ol class="algo">
- <li>the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> attribute MUST be a string consisting of the <em>key value</em> of that character; and</li>
- <li>the <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a> attribute MUST be a string consisting of the <em>char value</em> of that character.</li>
- </ol>
- </li>
+ <li>If there exists an appropriate character in the <a href="#keys-keyvalues">key values set</a>, then
+ the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> attribute MUST be a string consisting
+ of the <em>key value</em> of that character.</li>
<li>If there is no appropriate key value in the <a href="#keys-keyvalues">key values set</a>, and there exists an appropriate <a class="def" href="#glossary-unicode-code-point">
- Unicode code point</a>, then:
- <ol class="algo">
- <li>the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> attribute MUST be a string consisting of the <em>char value</em> of that character; and</li>
- <li>the <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a> attribute MUST be a string consisting of the <em>char value</em> of that character.</li>
- </ol>
- </li>
+ Unicode code point</a>, then
+ the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> attribute MUST be a string consisting
+ of the <em>char value</em> of that character.</li>
</ol>
</li>
<li>If the primary current function of the key is to serve as a function key, then:
<ol class="algo">
<li>If there exists an appropriate key value in the <a href="#keys-keyvalues">key values set</a>, then:
- <ol class="algo">
- <li>the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> attribute MUST be a string consisting of the <em>key value</em> of that character; and</li>
- <li>the <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a> attribute MUST be the <a class="def" href="#glossary-empty-string">empty string</a>.</li>
- </ol>
- </li>
+ the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> attribute MUST be a string consisting
+ of the <em>key value</em> of that character.</li>
</ol>
</li>
</ol>
@@ -6816,11 +6784,11 @@
<li>On a PC/AT US keyboard with a right-handed single-hand Dvorak <a class="def" href="#glossary-key-mapping">key mapping</a>, the key labeled <code class="key">
'Q'</code> maps to the key values <code class="key">'5'</code> (unmodified) and <code class="key">'%'</code> (shifted). The primary function of this key
is to generate the character <code class="key">'5'</code> (<code class="char">'\u0035'</code>). Since this character is a character (in Unicode general category
- <abbr title="Number, Decimal Digit">Nd</abbr>), the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> and <a href="#events-KeyboardEvent-char">
- <code>KeyboardEvent.char</code></a> attribute values for the unmodified key will be <code class="key">'5'</code>.</li>
+ <abbr title="Number, Decimal Digit">Nd</abbr>), the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a>
+ attribute value for the unmodified key will be <code class="key">'5'</code>.</li>
<li>On a French PC keyboard with a standard French mapping, the primary function of the <code class="key">'^'</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="char">'\u0302'</code>. Since this character
- is in general category
+ dead key</a> for the circumflex diacritical mark. While the Unicode value <code class="char">'\u0302'</code> exists for this character, there is
+ also the value <code class="key">'DeadCircumflex'</code> defined in the <a href="#keys-keyvalues">key values set</a> that takes precedence.
<abbr title="Mark, Nonspacing">Mn</abbr>, the key value will be <code class="char">'\u0302'</code>.</li>
<li>On a Korean PC keyboard with a standard Korean mapping, the primary function of the <code class="key">'Ha/En'</code> key is to switch between Hangul and English
input. The predefined key value list has an appropriate entry for this key, <code class="key">'HangulMode'</code>, so this will be the key value.</li>
@@ -6836,26 +6804,26 @@
<p>This section defines a list of key values which implementations MUST support, at a minimum, in addition to support for the full range of Unicode [<a href="#references-Unicode">Unicode</a>]
codepoints. Implementations MAY support additional key values, in a manner conforming to the <a href="#keys-Guide">guidelines for selecting and defining key values</a>.
- Each key value defines one or both of the following: a <a class="def" href="#glossary-character-value">character value</a> and a <a class="def" href="#glossary-key-value">
- key value</a>. The <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> attribute of an event MUST always contain one of these control key
- or character values (even if the value is <a href="#key-Unidentified"><code class="key">'Unidentified'</code></a>), and the <a href="#events-KeyboardEvent-char">
- <code>KeyboardEvent.char</code></a> attribute MUST have a value if the key represents a printable character. If the key represents one of the set of printable
+ The <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> attribute of an event MUST always contain one of these control key
+ or character values (even if the value is <a href="#key-Unidentified"><code class="key">'Unidentified'</code></a>). If the key represents one of the set of printable
control characters which has a Unicode character entry, such as the tab key, the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> attribute
- MUST have the key value (e.g., <a href="#key-Tab"><code class="key">'Tab'</code></a>), while the <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a>
- attribute MUST have the Unicode character value equivalent (e.g., <a href="#key-U-0009"><code class="char">'\u0009'</code></a>). This affords content authors
- the opportunity to deal with the key as a control key or as direct input into the text stream.</p>
+ MUST have the key value (e.g., <a href="#key-Tab"><code class="key">'Tab'</code></a>).</p>
<p>Implementations that are unable to identify a key MUST use the key value <a href="#key-Unidentified"><code class="key">'Unidentified'</code></a>.</p>
<p class="warning"><strong>Warning!</strong> Conforming implementations MUST only use this key value when there is no way for the implementation to detect the key value;
exposing only this value MUST NOT indicate a conforming implementation.</p>
- <p>The <a class="def" href="#glossary-key-value">key values</a> defined in this specification are based in part 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="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="informative" href="#references-Keys">Keys
- enumeration for .Net</a></cite>]; the key values for media controllers (e.g. remote controls for television, audio systems, and set-top boxes) are derived in part from the consumer electronics technical
- specifications DTV Application Software Environment [<cite><a href="#references-DASE">DASE</a></cite>], Open Cable Application Platform 1.1.3 [<cite><a href="#references-OCAP">OCAP</a></cite>],
- and ANSI/CEA-2014-B, Web-based Protocol and Framework for Remote User Interface on UPnPTM Networks and the Internet [<cite><a href="#references-WEB4CE">WEB4CE</a></cite>].
+ <p>The <a class="def" href="#glossary-key-value">key values</a> defined in this specification are based in part 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="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="informative" href="#references-Keys">Keys enumeration for .Net</a></cite>].
+ The key values for media controllers (e.g. remote controls for television, audio systems, and set-top boxes) are derived in part from the consumer
+ electronics technical specifications:
+ DTV Application Software Environment [<cite><a href="#references-DASE">DASE</a></cite>],
+ Open Cable Application Platform 1.1.3 [<cite><a href="#references-OCAP">OCAP</a></cite>],
+ and ANSI/CEA-2014-B, Web-based Protocol and Framework for Remote User Interface on UPnPTM Networks and the Internet [<cite><a href="#references-WEB4CE">WEB4CE</a></cite>].
</p>
<p class="note"><strong>Note:</strong> The key names <code class="key">'NumPad0'</code>, <code class="key">'NumPad1'</code>, <code class="key">
@@ -6866,12 +6834,9 @@
<p>Future versions of this specification MAY include key values not included here, which have become common since the publication of this specification.</p>
- <p>In the following list, character values for printing control characters are described as a character escape, for convenience, using the JavaScript notation for
- escapes.</p>
-
<div class="note">
<p><strong>Note:</strong> There are special internationalization considerations for ECMAScript escaped characters. CharMod conformance [<cite><a class="normative"
- href="#references-charmod">CharMod</a></cite>] <a href="http://www.w3.org/TR/charmod/#C045">expects</a> the use of code points rather than surrogate pairs in escapes;
+ href="#references-charmod">CharMod</a></cite>] <a href="http://www.w3.org/TR/charmod/#C045">expects</a> the use of code points rather than surrogate pairs in escapes.
ECMAScript escaped characters use surrogate pairs for characters outside the Basic Multilingual Plane (<code class="char">"\uD84E\uDDC2"</code> for <code class="glyph">'𣧂'</code>,
a Chinese character meaning <q>untidy</q>), rather than C-style fixed-length characters (<code class="char">"\U000239c2"</code> for <code class="glyph">'𣧂'</code>) or delimited escapes
such as Numeric Character References (<code>"&#x239C2;"</code>). Characters escaped in this manner:</p>
@@ -6889,7 +6854,7 @@
<h4>Key Values List</h4>
<p>The following list contains the normative list of case-sensitive key values, their character values (where applicable), an informative description of typical usage,
and an informative categorization. A conforming implementation of the <a href="#events-KeyboardEvent">KeyboardEvent</a> interface MUST support at least this set
- of values for use in the <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a> and <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a>
+ of values for use in the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a>
attributes, though not all values MAY be available on all platforms or devices.</p>
<!-- Key tables. Note that all keys must be defined within a <div class="key-table"> -->
@@ -7478,7 +7443,6 @@
<dt>AbstractView? view = null</dt><dd></dd>
<dt>long detail = 0</dt><dd></dd>
<!-- Attributes from KeyboardEvent -->
- <dt>DOMString char = ""</dt><dd></dd>
<dt>DOMString key = ""</dt><dd></dd>
<dt>unsigned long location = 0</dt><dd></dd>
<dt>boolean ctrlKey = false</dt><dd></dd>
@@ -7519,9 +7483,6 @@
<dt>long detailArg</dt>
<dd><p>Refer to the <a href="#events-event-type-initUIEvent"><code>UIEvent.initUIEvent()</code></a> method for a description of this parameter.</p></dd>
- <dt>DOMString charArg</dt>
- <dd><p>Specifies <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a>.</p></dd>
-
<dt>DOMString keyArg</dt>
<dd><p>Specifies <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a>.</p></dd>
@@ -7612,8 +7573,8 @@
<p>Therefore, this specification does not normatively define the <code class="attribute-name">charCode</code>, <code class="attribute-name">keyCode</code>, or <code
class="attribute-name">which</code> attributes on the <a href="#events-KeyboardEvent">KeyboardEvent</a> interface, though they MAY be present in <a class="def" href="#glossary-user-agent">
- user agents</a> for compatibility with legacy content. Authors SHOULD use the <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a> and <a href="#events-KeyboardEvent-key">
- <code>KeyboardEvent.key</code></a> attributes instead of the <code class="attribute-name">charCode</code> and <code class="attribute-name">keyCode</code>
+ user agents</a> for compatibility with legacy content. Authors SHOULD use the <a href="#events-KeyboardEvent-key">
+ <code>KeyboardEvent.key</code></a> attribute instead of the <code class="attribute-name">charCode</code> and <code class="attribute-name">keyCode</code>
attributes, respectively.</p>
<p>However, for the purpose of documenting the current state of these attributes and their relation to equivalent key values, this section describes an informative
@@ -7651,8 +7612,8 @@
<dt>readonly attribute unsigned long keyCode</dt>
<dd>
<p><code class="attribute-name">keyCode</code> holds a system- and implementation-dependent numerical code signifying the unmodified identifier associated with the
- key pressed. Unlike the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a> or <a href="#events-KeyboardEvent-char"><code>KeyboardEvent.char</code></a>
- attributes, the set of possible values are not normatively defined in this specification; typically, these value of the <code class="attribute-name">keyCode</code>
+ key pressed. Unlike the <a href="#events-KeyboardEvent-key"><code>KeyboardEvent.key</code></a>
+ attribute, the set of possible values are not normatively defined in this specification; typically, these value of the <code class="attribute-name">keyCode</code>
SHOULD represent the decimal codepoint in ASCII [<a href="#ref-rfc20">RFC20</a>][<a href="#ref-US-ASCII">US-ASCII</a>] or Windows 1252 [<a href="#ref-WIN1252">WIN1252</a>],
but MAY be drawn from a different appropriate character set. Implementations that are unable to identify a key use the key value <code class="key">'0'</code>.</p>