html5/spec Overview.html,1.5247,1.5248

Update of /sources/public/html5/spec
In directory hutz:/tmp/cvs-serv15798

Modified Files:
	Overview.html 
Log Message:
Revert r6543 and instead move onreadystatechange to be only on Document. (whatwg r6550)

Index: Overview.html
===================================================================
RCS file: /sources/public/html5/spec/Overview.html,v
retrieving revision 1.5247
retrieving revision 1.5248
diff -u -d -r1.5247 -r1.5248
--- Overview.html	9 Sep 2011 19:58:31 -0000	1.5247
+++ Overview.html	9 Sep 2011 22:46:03 -0000	1.5248
@@ -7761,7 +7761,6 @@
            attribute <a href="#function">Function</a>? <a href="#handler-onplaying" title="handler-onplaying">onplaying</a>;
            attribute <a href="#function">Function</a>? <a href="#handler-onprogress" title="handler-onprogress">onprogress</a>;
            attribute <a href="#function">Function</a>? <a href="#handler-onratechange" title="handler-onratechange">onratechange</a>;
-           attribute <a href="#function">Function</a>? <a href="#handler-onreadystatechange" title="handler-onreadystatechange">onreadystatechange</a>;
            attribute <a href="#function">Function</a>? <a href="#handler-onreset" title="handler-onreset">onreset</a>;
            attribute <a href="#function">Function</a>? <a href="#handler-onscroll" title="handler-onscroll">onscroll</a>;
            attribute <a href="#function">Function</a>? <a href="#handler-onseeked" title="handler-onseeked">onseeked</a>;
@@ -7774,6 +7773,9 @@
            attribute <a href="#function">Function</a>? <a href="#handler-ontimeupdate" title="handler-ontimeupdate">ontimeupdate</a>;
            attribute <a href="#function">Function</a>? <a href="#handler-onvolumechange" title="handler-onvolumechange">onvolumechange</a>;
            attribute <a href="#function">Function</a>? <a href="#handler-onwaiting" title="handler-onwaiting">onwaiting</a>;
+
+  // special <a href="#event-handler-idl-attributes">event handler IDL attributes</a> that only apply to Document objects
+           attribute <a href="#function">Function</a>? <a href="#handler-onreadystatechange" title="handler-onreadystatechange">onreadystatechange</a>;
 };
 <a href="#document">Document</a> implements <a href="#htmldocument">HTMLDocument</a>;</pre><p>Since the <code><a href="#htmldocument">HTMLDocument</a></code> interface holds methods and
   attributes related to a number of disparate features, the members of
@@ -8550,7 +8552,6 @@
            attribute <a href="#function">Function</a>? <a href="#handler-onplaying" title="handler-onplaying">onplaying</a>;
            attribute <a href="#function">Function</a>? <a href="#handler-onprogress" title="handler-onprogress">onprogress</a>;
            attribute <a href="#function">Function</a>? <a href="#handler-onratechange" title="handler-onratechange">onratechange</a>;
-           attribute <a href="#function">Function</a>? <a href="#handler-onreadystatechange" title="handler-onreadystatechange">onreadystatechange</a>;
            attribute <a href="#function">Function</a>? <a href="#handler-onreset" title="handler-onreset">onreset</a>;
            attribute <a href="#function">Function</a>? <a href="#handler-onscroll" title="handler-onscroll">onscroll</a>;
            attribute <a href="#function">Function</a>? <a href="#handler-onseeked" title="handler-onseeked">onseeked</a>;
@@ -8633,7 +8634,6 @@
    <li><code title="handler-onplaying"><a href="#handler-onplaying">onplaying</a></code></li>
    <li><code title="handler-onprogress"><a href="#handler-onprogress">onprogress</a></code></li>
    <li><code title="handler-onratechange"><a href="#handler-onratechange">onratechange</a></code></li>
-   <li><code title="handler-onreadystatechange"><a href="#handler-onreadystatechange">onreadystatechange</a></code></li>
    <li><code title="handler-onreset"><a href="#handler-onreset">onreset</a></code></li>
    <li><code title="handler-onscroll"><a href="#handler-onscroll">onscroll</a></code>*</li>
    <li><code title="handler-onseeked"><a href="#handler-onseeked">onseeked</a></code></li>
@@ -12509,8 +12509,6 @@
            attribute DOMString <a href="#dom-script-type" title="dom-script-type">type</a>;
            attribute DOMString <a href="#dom-script-charset" title="dom-script-charset">charset</a>;
            attribute DOMString <a href="#dom-script-text" title="dom-script-text">text</a>;
-
-  readonly attribute DOMString <a href="#dom-script-readystate" title="dom-script-readyState">readyState</a>;
 };</pre>
    </dd>
   </dl><p>The <code><a href="#the-script-element">script</a></code> element allows authors to include dynamic
@@ -12609,38 +12607,6 @@
   <a href="#parser-inserted">"parser-inserted"</a>, to let the parser know when to
   execute the script.</p>
 
-  <p>The fifth is the <dfn id="concept-script-state" title="concept-script-state">current
-  status</dfn> of the script. This is a string. When the element is
-  created, if the user agent does not intend to prefetch the script
-  (i.e. the script, if any, will only be obtained once the
-  <a href="#prepare-a-script">prepare a script</a> algorithm requires it to be fetched),
-  then the <a href="#concept-script-state" title="concept-script-state">current status</a>
-  must be set to "<code title="">loaded</code>". If the user agent
-  <em>does</em> intend to prefetch the script (if any), <a href="#scriptPrefetch">as allowed</a> in the <a href="#prepare-a-script">prepare a
-  script</a> algorithm below, the <a href="#concept-script-state" title="concept-script-state">current status</a> must be set to
-  "<code title="">uninitialized</code>" when the element is created.
-  When the user agent begins to prefetch the script, it must set the
-  <a href="#concept-script-state" title="concept-script-state">current status</a> to "<code title="">loading</code>". Once the script is fetched, the user agent
-  must <a href="#queue-a-task">queue a task</a> that, if the <a href="#prepare-a-script">prepare a
-  script</a> algorithm has still not started and the fetched script
-  is still the appropriate script, sets the <a href="#concept-script-state" title="concept-script-state">current status</a> to "<code title="">loaded</code>" and <a href="#fire-a-simple-event" title="fire a simple event">fires
-  a simple event</a> named <code title="event-readystatechange"><a href="#event-readystatechange">readystatechange</a></code> at the
-  element. If the script to be loaded changes while the script is
-  being prefetched, then the user agent must prefetch the new script
-  (if any), without changing the <a href="#concept-script-state" title="concept-script-state">current status</a>. If no script is
-  ever successfully fetched (e.g. because the element is an inline
-  script) then the transition to "<code title="">loaded</code>" is
-  skipped, and so the <code title="event-readystatechange"><a href="#event-readystatechange">readystatechange</a></code> event does
-  not fire for this transition (it still fires when the <a href="#concept-script-state" title="concept-script-state">current status</a> is set to "<code title="">complete</code>" later, however). If the script to be
-  loaded changes after a script has been successfully prefetched, the
-  user agent may prefetch the new script but must not change the <a href="#concept-script-state" title="concept-script-state">current status</a> or fire any
-  events as a result. If the user agent changes its mind and decides
-  to not bother prefetching the script after all, the user agent must
-  <a href="#queue-a-task">queue a task</a> that, if the <a href="#prepare-a-script">prepare a
-  script</a> algorithm has still not started, sets the <a href="#concept-script-state" title="concept-script-state">current status</a> to "<code title="">loaded</code>" and <a href="#fire-a-simple-event" title="fire a simple event">fires
-  a simple event</a> named <code title="event-readystatechange"><a href="#event-readystatechange">readystatechange</a></code> at the
-  element.</p>
-
   <p>The last few pieces of state are <dfn id="the-script-block-s-type"><var>the script block's
   type</var></dfn>, <dfn id="the-script-block-s-character-encoding"><var>the script block's character
   encoding</var></dfn>, and <dfn id="the-script-block-s-fallback-character-encoding"><var>the script block's fallback
@@ -12868,20 +12834,10 @@
     user agent must act as if it had received an empty HTTP 400
     response.</p>
 
-    <p>If the <a href="#concept-script-state" title="concept-script-state">current status</a>
-    of the element at this stage is still "<code title="">uninitialized</code>" (meaning that the user agent
-    intended to prefetch the script as described in the next
-    paragraph, but the <a href="#prepare-a-script">prepare a script</a> algorithm was
-    started before it had a chance to do so), then, if a
-    <a href="#fetch">fetch</a> attempt was started in this step, the user
-    agent must set the <a href="#concept-script-state" title="concept-script-state">current
-    status</a> to "<code title="">loading</code>" . </p> 
-    <p id="scriptPrefetch">For performance reasons, user agents may
-    start fetching the script as soon as the attribute is set,
-    instead, in the hope that the element will be inserted into the
-    document (user agents that do this have <a href="#concept-script-state" title="concept-script-state">requirements</a> relating to what
-    events are to be fired during the process). Either way, once the
-    element is <a href="#insert-an-element-into-a-document" title="insert an element into a
+    <p>For performance reasons, user agents may start fetching the
+    script as soon as the attribute is set, instead, in the hope that
+    the element will be inserted into the document. Either way, once
+    the element is <a href="#insert-an-element-into-a-document" title="insert an element into a
     document">inserted into the document</a>, the load must have
     started. If the UA performs such prefetching, but the element is
     never inserted in the document, or the <code title="attr-script-src"><a href="#attr-script-src">src</a></code> attribute is dynamically
@@ -13056,18 +13012,6 @@
 
   <ol><li>
 
-    <p>If the <a href="#concept-script-state" title="concept-script-state">current status</a>
-    of the element at this stage is "<code title="">loading</code>"
-    (meaning that the user agent intended to <a href="#scriptPrefetch">prefetch the script</a> as allowed by the
-    <a href="#prepare-a-script">prepare a script</a> algorithm, but the fetch was not
-    completed before that algorithm was started), then the user agent
-    must set the <a href="#concept-script-state" title="concept-script-state">current
-    status</a> to "<code title="">loaded</code>".</p>
-
-   </li>
-
-   <li>
-
     <p>If the element is flagged as <a href="#parser-inserted">"parser-inserted"</a>,
     but the element's <code><a href="#document">Document</a></code> is not the
     <code><a href="#document">Document</a></code> of the parser that created the element, then
@@ -13082,20 +13026,8 @@
     <dl class="switch"><dt>If the load resulted in an error (for example a DNS error, or
      an HTTP 404 error)</dt>
 
-     <dd>
-
-      <p>Executing the script block must consist of running the following steps:</p>
-
-      <ol><li><p>Set the <a href="#concept-script-state" title="concept-script-state">current
-       status</a> to "<code title="">complete</code>".</li>
-
-       <li><p><a href="#fire-a-simple-event">Fire a simple event</a> named <code title="event-readystatechange"><a href="#event-readystatechange">readystatechange</a></code> at the
-       element.</li>
-
-       <li><p><a href="#fire-a-simple-event">Fire a simple event</a> named <code title="event-error">error</code> at the element.</li>
-
-      </ol></dd>
-
+     <dd><p>Executing the script block must just consist of <a href="#fire-a-simple-event" title="fire a simple event">firing a simple event</a> named
+     <code title="event-error">error</code> at the element.</dd>
 
      <dt>If the load was successful</dt>
 
@@ -13214,9 +13146,6 @@
 
        </li>
 
-       <li><p>Set the <a href="#concept-script-state" title="concept-script-state">current
-       status</a> to "<code title="">interactive</code>".</li>
-
        <li>
 
         <p><a href="#create-a-script-from-a-node" title="create a script from a node">Create a
@@ -13237,12 +13166,6 @@
 
        </li>
 
-       <li><p>Set the <a href="#concept-script-state" title="concept-script-state">current
-       status</a> to "<code title="">complete</code>".</li>
-
-       <li><p><a href="#fire-a-simple-event">Fire a simple event</a> named <code title="event-readystatechange"><a href="#event-readystatechange">readystatechange</a></code> at the
-       element.</li>
-
        <li>
 
         <p>If the script is from an external file, <a href="#fire-a-simple-event">fire a simple
@@ -13287,51 +13210,6 @@
 
    </dd>
 
-
-   <dt><var title="">script</var> . <code title="dom-script-readyState"><a href="#dom-script-readystate">readyState</a></code></dt>
-
-   <dd>
-
-    <p>Returns the current state of the element. The value is one of
-    the following:</p>
-
-    <dl><dt>"<code title="">uninitialized</code>"</dt>
-
-     <dd><p>The script file, if any, has not yet been loaded, but the
-     user agent will try to prefetch it as soon as possible (e.g. as
-     soon as the <code title="attr-script-src"><a href="#attr-script-src">src</a></code> attribute is
-     set).</dd>
-
-
-     <dt>"<code title="">loading</code>"</dt>
-
-     <dd><p>A script file is being downloaded in a user agent that
-     supports prefetching scripts.</dd>
-
-
-     <dt>"<code title="">loaded</code>"</dt>
-
-     <dd><p>Either a script file is loaded and ready to be executed,
-     or the script file is not loaded but the user agent does not
-     intend to prefetch the script file anyway, and will merely fetch
-     it when it is to be executed. If the element started in the <code title="">uninitialized</code>" state and the script has not yet
-     begun to be executed, then a <code title="event-readystatechange"><a href="#event-readystatechange">readystatechange</a></code> event is
-     fired when the state changes to this value.</dd>
-
-
-     <dt>"<code title="">interactive</code>"</dt>
-
-     <dd><p>The script is running.</dd>
-
-
-     <dt>"<code title="">complete</code>"</dt>
-
-     <dd><p>The script has been executed (or it failed). A <code title="event-readystatechange"><a href="#event-readystatechange">readystatechange</a></code> event is
-     fired when the state changes to this value, just before the
-     corresponding <code title="event-load">load</code> or <code title="event-error">error</code> event.</dd>
-
-    </dl></dd>
-
   </dl><div class="impl">
 
   <p>The IDL attribute <dfn id="dom-script-text" title="dom-script-text"><code>text</code></dfn> must return a
@@ -13341,10 +13219,6 @@
   tree order. On setting, it must act the same way as the
   <code><a href="#textcontent">textContent</a></code> IDL attribute.</p>
 
-  <p>The IDL attribute <dfn id="dom-script-readystate" title="dom-script-readyState"><code>readyState</code></dfn> must
-  return the element's <a href="#concept-script-state" title="concept-script-state">current
-  status</a>.</p>
-
   </div><p class="note">When inserted using the <code title="dom-document-write"><a href="#dom-document-write">document.write()</a></code> method,
   <code><a href="#the-script-element">script</a></code> elements execute (typically synchronously), but
   when inserted using <code title="dom-innerHTML">innerHTML</code> and <code title="dom-outerHTML">outerHTML</code> attributes, they do not
@@ -43990,7 +43864,6 @@
            attribute <a href="#function">Function</a>? <a href="#handler-window-onpopstate" title="handler-window-onpopstate">onpopstate</a>;
            attribute <a href="#function">Function</a>? <a href="#handler-onprogress" title="handler-onprogress">onprogress</a>;
            attribute <a href="#function">Function</a>? <a href="#handler-onratechange" title="handler-onratechange">onratechange</a>;
-           attribute <a href="#function">Function</a>? <a href="#handler-onreadystatechange" title="handler-onreadystatechange">onreadystatechange</a>;
            attribute <a href="#function">Function</a>? <a href="#handler-onreset" title="handler-onreset">onreset</a>;
            attribute <a href="#function">Function</a>? <a href="#handler-window-onresize" title="handler-window-onresize">onresize</a>;
            attribute <a href="#function">Function</a>? <a href="#handler-onscroll" title="handler-onscroll">onscroll</a>;
@@ -50220,10 +50093,10 @@
   value has to be true to cancel the event). With <code title="event-beforeunload">beforeunload</code> events, the value is
   instead used to determine the message to show the user.<h5 id="event-handlers-on-elements-document-objects-and-window-objects"><span class="secno">6.1.6.2 </span>Event handlers on elements, <code><a href="#document">Document</a></code> objects, and <code><a href="#window">Window</a></code> objects</h5><p>The following are the <a href="#event-handlers">event handlers</a> (and their
   corresponding <a href="#event-handler-event-type" title="event handler event type">event handler
-  event types</a>) <span class="impl">that must be</span> supported by all <a href="#html-elements">HTML
-  elements</a>, as both content attributes and IDL attributes, and
-  on <code><a href="#document">Document</a></code> and <code><a href="#window">Window</a></code> objects, as IDL
-  attributes.<table><thead><tr><th><a href="#event-handlers" title="event handlers">Event handler</a> <th><a href="#event-handler-event-type">Event handler event type</a>
+  event types</a>) <span class="impl">that must be</span> supported
+  by all <a href="#html-elements">HTML elements</a>, as both content attributes and
+  IDL attributes, and on <code><a href="#document">Document</a></code> and <code><a href="#window">Window</a></code>
+  objects, as IDL attributes.<table><thead><tr><th><a href="#event-handlers" title="event handlers">Event handler</a> <th><a href="#event-handler-event-type">Event handler event type</a>
    <tbody><tr><td><dfn id="handler-onabort" title="handler-onabort"><code>onabort</code></dfn> <td> <code title="event-abort">abort</code>
     <tr><td><dfn id="handler-oncanplay" title="handler-oncanplay"><code>oncanplay</code></dfn> <td> <code title="event-media-canplay"><a href="#event-media-canplay">canplay</a></code>
     <tr><td><dfn id="handler-oncanplaythrough" title="handler-oncanplaythrough"><code>oncanplaythrough</code></dfn> <td> <code title="event-media-canplaythrough"><a href="#event-media-canplaythrough">canplaythrough</a></code>
@@ -50261,7 +50134,6 @@
     <tr><td><dfn id="handler-onplaying" title="handler-onplaying"><code>onplaying</code></dfn> <td> <code title="event-media-playing"><a href="#event-media-playing">playing</a></code>
     <tr><td><dfn id="handler-onprogress" title="handler-onprogress"><code>onprogress</code></dfn> <td> <code title="event-media-progress"><a href="#event-media-progress">progress</a></code>
     <tr><td><dfn id="handler-onratechange" title="handler-onratechange"><code>onratechange</code></dfn> <td> <code title="event-media-ratechange"><a href="#event-media-ratechange">ratechange</a></code>
-    <tr><td><dfn id="handler-onreadystatechange" title="handler-onreadystatechange"><code>onreadystatechange</code></dfn> <td> <code title="event-readystatechange"><a href="#event-readystatechange">readystatechange</a></code>
     <tr><td><dfn id="handler-onreset" title="handler-onreset"><code>onreset</code></dfn> <td> <code title="event-reset">reset</code>
     <tr><td><dfn id="handler-onseeked" title="handler-onseeked"><code>onseeked</code></dfn> <td> <code title="event-media-seeked"><a href="#event-media-seeked">seeked</a></code>
     <tr><td><dfn id="handler-onseeking" title="handler-onseeking"><code>onseeking</code></dfn> <td> <code title="event-media-seeking"><a href="#event-media-seeking">seeking</a></code>
@@ -50280,10 +50152,10 @@
  
   </table><hr><p>The following are the <a href="#event-handlers">event handlers</a> (and their
   corresponding <a href="#event-handler-event-type" title="event handler event type">event handler
-  event types</a>) <span class="impl">that must be</span> supported by all <a href="#html-elements">HTML
-  elements</a> other than <code><a href="#the-body-element">body</a></code>, as both content
-  attributes and IDL attributes, and on <code><a href="#document">Document</a></code> objects,
-  as IDL attributes:<table><thead><tr><th><a href="#event-handlers" title="event handlers">Event handler</a> <th><a href="#event-handler-event-type">Event handler event type</a>
+  event types</a>) <span class="impl">that must be</span> supported
+  by all <a href="#html-elements">HTML elements</a> other than <code><a href="#the-body-element">body</a></code>, as
+  both content attributes and IDL attributes, and on
+  <code><a href="#document">Document</a></code> objects, as IDL attributes:<table><thead><tr><th><a href="#event-handlers" title="event handlers">Event handler</a> <th><a href="#event-handler-event-type">Event handler event type</a>
    <tbody><tr><td><dfn id="handler-onblur" title="handler-onblur"><code>onblur</code></dfn> <td> <code title="event-blur">blur</code> 
     <tr><td><dfn id="handler-onerror" title="handler-onerror"><code>onerror</code></dfn> <td> <code title="event-error">error</code>
     <tr><td><dfn id="handler-onfocus" title="handler-onfocus"><code>onfocus</code></dfn> <td> <code title="event-focus">focus</code> 
@@ -50291,10 +50163,11 @@
     <tr><td><dfn id="handler-onscroll" title="handler-onscroll"><code>onscroll</code></dfn> <td> <code title="event-scroll">scroll</code>
   </table><hr><p>The following are the <a href="#event-handlers">event handlers</a> (and their
   corresponding <a href="#event-handler-event-type" title="event handler event type">event handler
-  event types</a>) <span class="impl">that must be</span> supported by <code><a href="#window">Window</a></code>
-  objects, as IDL attributes on the <code><a href="#window">Window</a></code> object, and
-  with corresponding content attributes and IDL attributes exposed on
-  the <code><a href="#the-body-element">body</a></code> and <code><a href="#frameset">frameset</a></code> elements:<table><thead><tr><th><a href="#event-handlers" title="event handlers">Event handler</a> <th><a href="#event-handler-event-type">Event handler event type</a>
+  event types</a>) <span class="impl">that must be</span> supported
+  by <code><a href="#window">Window</a></code> objects, as IDL attributes on the
+  <code><a href="#window">Window</a></code> object, and with corresponding content
+  attributes and IDL attributes exposed on the <code><a href="#the-body-element">body</a></code> and
+  <code><a href="#frameset">frameset</a></code> elements:<table><thead><tr><th><a href="#event-handlers" title="event handlers">Event handler</a> <th><a href="#event-handler-event-type">Event handler event type</a>
    <tbody><tr><td><dfn id="handler-window-onafterprint" title="handler-window-onafterprint"><code>onafterprint</code></dfn> <td> <code title="event-afterprint">afterprint</code>
     <tr><td><dfn id="handler-window-onbeforeprint" title="handler-window-onbeforeprint"><code>onbeforeprint</code></dfn> <td> <code title="event-beforeprint">beforeprint</code>
     <tr><td><dfn id="handler-window-onbeforeunload" title="handler-window-onbeforeunload"><code>onbeforeunload</code></dfn> <td> <code title="event-beforeunload">beforeunload</code>
@@ -50314,7 +50187,12 @@
     <tr><td><dfn id="handler-window-onstorage" title="handler-window-onstorage"><code>onstorage</code></dfn> <td> <code title="event-storage">storage</code> 
     <tr><td><dfn id="handler-window-onunload" title="handler-window-onunload"><code>onunload</code></dfn> <td> <code title="event-unload">unload</code> 
   </table><p class="note">The <code title="handler-window-onerror"><a href="#handler-window-onerror">onerror</a></code>
-  handler is also used for <a href="#runtime-script-errors">reporting script errors</a>.<div class="impl">
+  handler is also used for <a href="#runtime-script-errors">reporting script errors</a>.<hr><p>The following are the <a href="#event-handlers">event handlers</a> (and their
+  corresponding <a href="#event-handler-event-type" title="event handler event type">event handler
+  event types</a>) <span class="impl">that must be</span> supported
+  on <code><a href="#document">Document</a></code> objects as IDL attributes:<table><thead><tr><th><a href="#event-handlers" title="event handlers">Event handler</a> <th><a href="#event-handler-event-type">Event handler event type</a>
+   <tbody><tr><td><dfn id="handler-onreadystatechange" title="handler-onreadystatechange"><code>onreadystatechange</code></dfn> <td> <code title="event-readystatechange"><a href="#event-readystatechange">readystatechange</a></code>
+  </table><div class="impl">
 
   <h5 id="event-firing"><span class="secno">6.1.6.3 </span>Event firing</h5>
 
@@ -71434,11 +71312,6 @@
      <td> <code title="event-media-ratechange"><a href="#event-media-ratechange">ratechange</a></code> event handler
      <td> <a href="#event-handler-content-attributes" title="event handler content attributes">Event handler content attribute</a>
 
-    <tr><th id="ix-handler-onreadystatechange"> <code title="">onreadystatechange</code>
-     <td> <a href="#handler-onreadystatechange" title="handler-onreadystatechange">HTML elements</a>
-     <td> <code title="event-readystatechange"><a href="#event-readystatechange">readystatechange</a></code> event handler
-     <td> <a href="#event-handler-content-attributes" title="event handler content attributes">Event handler content attribute</a>
-
     <tr><th id="ix-handler-onreset"> <code title="">onreset</code>
      <td> <a href="#handler-onreset" title="handler-onreset">HTML elements</a>
      <td> <code title="event-reset">reset</code> event handler

Received on Friday, 9 September 2011 22:46:11 UTC