[html5] r5721 - [acgiowt] (0) WebSRT fixes: added <track default> to make it possible to enable [...]

whatwg at whatwg.org whatwg at whatwg.org
Fri Dec 24 22:28:39 PST 2010


Author: ianh
Date: 2010-12-24 22:28:38 -0800 (Fri, 24 Dec 2010)
New Revision: 5721

Modified:
   complete.html
   index
   source
Log:
[acgiowt] (0) WebSRT fixes: added <track default> to make it possible to enable a text track by default; dropped <track charset>; dropped the voice identifier in favour of inline <v> annotations in WebSRT; dropped compatibility with legacy SRT; added a magic signature to WebSRT; added some forward-compatibility features to WebSRT for future expansion; simplified WebSRT timestamp syntax; added WebSRT <c.foo.bar> syntax and support for classes in WebSRT; added '>' escape support; tightened up WebSRT timestamp parsing; added ::cue() which takes a selector; dropped ::cue-part; added :past/:future; added some explanatory material and fixed some typos.

Modified: complete.html
===================================================================
--- complete.html	2010-12-15 20:49:26 UTC (rev 5720)
+++ complete.html	2010-12-25 06:28:38 UTC (rev 5721)
@@ -221,7 +221,7 @@
 
   <header class=head id=head><p><a class=logo href=http://www.whatwg.org/ rel=home><img alt=WHATWG height=101 src=/images/logo width=101></a></p>
    <hgroup><h1>Web Applications 1.0</h1>
-    <h2 class="no-num no-toc">Draft Standard — 15 December 2010</h2>
+    <h2 class="no-num no-toc">Draft Standard — 25 December 2010</h2>
    </hgroup><p>You can take part in this work. <a href=http://www.whatwg.org/mailing-list>Join the working group's discussion list.</a></p>
    <p><strong>Web designers!</strong> We have a <a href=http://blog.whatwg.org/faq/>FAQ</a>, a <a href=http://forums.whatwg.org/>forum</a>, and a <a href=http://www.whatwg.org/mailing-list#help>help mailing list</a> for you!</p>
    <!--<p class="impl"><strong>Implementors!</strong> We have a <a href="http://www.whatwg.org/mailing-list#implementors">mailing list</a> for you too!</p>-->
@@ -568,7 +568,7 @@
        <li><a href=#the-ready-states><span class=secno>4.8.10.7 </span>The ready states</a></li>
        <li><a href=#playing-the-media-resource><span class=secno>4.8.10.8 </span>Playing the media resource</a></li>
        <li><a href=#seeking><span class=secno>4.8.10.9 </span>Seeking</a></li>
-       <li><a href=#timed-tracks><span class=secno>4.8.10.10 </span>Timed tracks</a>
+       <li><a href=#text-timed-tracks><span class=secno>4.8.10.10 </span>Text timed tracks</a>
         <ol>
          <li><a href=#timed-track-model><span class=secno>4.8.10.10.1 </span>Timed track model</a></li>
          <li><a href=#sourcing-in-band-timed-tracks><span class=secno>4.8.10.10.2 </span>Sourcing in-band timed tracks</a></li>
@@ -1259,14 +1259,14 @@
    <li><a href=#replaced-elements><span class=secno>14.3 </span>Replaced elements</a>
     <ol>
      <li><a href=#embedded-content-2><span class=secno>14.3.1 </span>Embedded content</a></li>
-     <li><a href=#timed-tracks-0><span class=secno>14.3.2 </span>Timed tracks</a>
+     <li><a href=#timed-tracks><span class=secno>14.3.2 </span>Timed tracks</a>
       <ol>
        <li><a href=#websrt-cue-text-rendering-rules><span class=secno>14.3.2.1 </span>WebSRT cue text rendering rules</a></li>
        <li><a href=#applying-css-properties-to-websrt-node-objects><span class=secno>14.3.2.2 </span>Applying CSS properties to WebSRT Node Objects</a></li>
        <li><a href=#css-extensions><span class=secno>14.3.2.3 </span>CSS extensions</a>
         <ol>
          <li><a href="#the-'::cue'-pseudo-element"><span class=secno>14.3.2.3.1 </span>The '::cue' pseudo-element</a></li>
-         <li><a href="#the-'::cue-part'-pseudo-element"><span class=secno>14.3.2.3.2 </span>The '::cue-part' pseudo-element</a></ol></ol></li>
+         <li><a href="#the-':past'-and-':future'-pseudo-classes"><span class=secno>14.3.2.3.2 </span>The ':past' and ':future' pseudo-classes</a></ol></ol></li>
      <li><a href=#images-0><span class=secno>14.3.3 </span>Images</a></li>
      <li><a href=#attributes-for-embedded-content-and-images><span class=secno>14.3.4 </span>Attributes for embedded content and images</a></li>
      <li><a href=#image-maps-0><span class=secno>14.3.5 </span>Image maps</a></li>
@@ -24417,7 +24417,8 @@
   <a href=#timed-track-cue title="timed track cue">timed track cues</a> whose
   <a href=#timed-track-cue-active-flag>timed track cue active flag</a> is set and whose
   <a href=#timed-track>timed track</a> is in the <a href=#timed-track-showing title="timed track
-  showing">showing</a> mode.</p>
+  showing">showing</a> or <a href=#timed-track-showing-by-default title="timed track showing by
+  default">showing by default</a> modes.</p>
 <!--KEEP-START w3c-html--><!--TT-->
 
   <p>In addition to the above, the user agent may provide messages to
@@ -24930,23 +24931,25 @@
    <dd><a href=#global-attributes>Global attributes</a></dd>
    <dd><code title=attr-track-kind><a href=#attr-track-kind>kind</a></code></dd>
    <dd><code title=attr-track-src><a href=#attr-track-src>src</a></code></dd>
-   <dd><code title=attr-track-charset><a href=#attr-track-charset>charset</a></code></dd>
    <dd><code title=attr-track-srclang><a href=#attr-track-srclang>srclang</a></code></dd>
    <dd><code title=attr-track-label><a href=#attr-track-label>label</a></code></dd>
+   <dd><code title=attr-track-default><a href=#attr-track-default>default</a></code></dd>
    <dt>DOM interface:</dt>
    <dd>
 <pre class=idl>interface <dfn id=htmltrackelement>HTMLTrackElement</dfn> : <a href=#htmlelement>HTMLElement</a> {
            attribute DOMString <a href=#dom-track-kind title=dom-track-kind>kind</a>;
            attribute DOMString <a href=#dom-track-src title=dom-track-src>src</a>;
-           attribute DOMString <a href=#dom-track-charset title=dom-track-charset>charset</a>;
            attribute DOMString <a href=#dom-track-srclang title=dom-track-srclang>srclang</a>;
            attribute DOMString <a href=#dom-track-label title=dom-track-label>label</a>;
+           attribute boolean <a href=#dom-track-default title=dom-track-default>default</a>;
 
   readonly attribute <a href=#timedtrack>TimedTrack</a> <a href=#dom-track-track title=dom-track-track>track</a>;
 };</pre>
    </dd>
   </dl><p>The <code><a href=#the-track-element>track</a></code> element allows authors to specify explicit
-  external <a href=#timed-track title="timed track">timed tracks</a> for <a href=#media-element title="media element">media elements</a>. It does not <a href=#represents title=represents>represent</a> anything on its own.</p>
+  external text-based <a href=#timed-track title="timed track">timed tracks</a>
+  for <a href=#media-element title="media element">media elements</a>. It does not
+  <a href=#represents title=represents>represent</a> anything on its own.</p>
 
   <p>The <dfn id=attr-track-kind title=attr-track-kind><code>kind</code></dfn>
   attribute is an <a href=#enumerated-attribute>enumerated attribute</a>. The following
@@ -24959,19 +24962,29 @@
      <th>Brief description
    <tbody><tr><td><dfn id=attr-track-kind-keyword-subtitles title=attr-track-kind-keyword-subtitles><code>subtitles</code></dfn>
      <td><dfn id=attr-track-kind-subtitles title=attr-track-kind-subtitles>Subtitles</dfn>
-     <td>Transcription or translation of the dialogue, suitable for when the sound is available but not understood (e.g. because the user does not understand the language of the <a href=#media-resource>media resource</a>'s soundtrack).
+     <td>
+      Transcription or translation of the dialogue, suitable for when the sound is available but not understood (e.g. because the user does not understand the language of the <a href=#media-resource>media resource</a>'s soundtrack).
+      Displayed over the video.
     <tr><td><dfn id=attr-track-kind-keyword-captions title=attr-track-kind-keyword-captions><code>captions</code></dfn>
      <td><dfn id=attr-track-kind-captions title=attr-track-kind-captions>Captions</dfn>
-     <td>Transcription or translation of the dialogue, sound effects, relevant musical cues, and other relevant audio information, suitable for when the soundtrack is unavailable (e.g. because it is muted or because the user is deaf).
+     <td>
+      Transcription or translation of the dialogue, sound effects, relevant musical cues, and other relevant audio information, suitable for when the soundtrack is unavailable (e.g. because it is muted or because the user is deaf).
+      Displayed over the video; labeled as appropriate for the hard-of-hearing.
     <tr><td><dfn id=attr-track-kind-keyword-descriptions title=attr-track-kind-keyword-descriptions><code>descriptions</code></dfn>
      <td><dfn id=attr-track-kind-descriptions title=attr-track-kind-descriptions>Descriptions</dfn>
-     <td>Textual descriptions of the video component of the <a href=#media-resource>media resource</a>, intended for audio synthesis when the visual component is unavailable (e.g. because the user is interacting with the application without a screen while driving, or because the user is blind).
+     <td>
+      Textual descriptions of the video component of the <a href=#media-resource>media resource</a>, intended for audio synthesis when the visual component is unavailable (e.g. because the user is interacting with the application without a screen while driving, or because the user is blind).
+      Synthesized as separate audio track.
     <tr><td><dfn id=attr-track-kind-keyword-chapters title=attr-track-kind-keyword-chapters><code>chapters</code></dfn>
      <td><dfn id=attr-track-kind-chapters title=attr-track-kind-chapters>Chapters</dfn>
-     <td>Chapter titles, intended to be used for navigating the <a href=#media-resource>media resource</a>.
+     <td>
+      Chapter titles, intended to be used for navigating the <a href=#media-resource>media resource</a>.
+      Displayed as an interactive list in the user agent's interface.
     <tr><td><dfn id=attr-track-kind-keyword-metadata title=attr-track-kind-keyword-metadata><code>metadata</code></dfn>
      <td><dfn id=attr-track-kind-metadata title=attr-track-kind-metadata>Metadata</dfn>
-     <td>Tracks intended for use from script.
+     <td>
+      Tracks intended for use from script.
+      Not displayed by the user agent.
   </table><p>The attribute may be omitted. The <i>missing value default</i> is
   the <a href=#attr-track-kind-subtitles title=attr-track-kind-subtitles>subtitles</a> state.</p>
 
@@ -24999,15 +25012,6 @@
   text</a>.</p>
 <!--TTSRT-->
 
-  <p>If the elements's <a href=#track-url>track URL</a> identifies a resource
-  that <dfn id=supports-external-timed-track-character-encoding-overrides>supports external timed track character encoding
-  overrides</dfn>, then the <dfn id=attr-track-charset title=attr-track-charset><code>charset</code></dfn> attribute may
-  be specified. If the attribute is set, its value must be a valid
-  character encoding name, must be an <a href=#ascii-case-insensitive>ASCII
-  case-insensitive</a> match for the <a href=#preferred-mime-name>preferred MIME
-  name</a> for that encoding, and must match the character encoding
-  of the resource in question. <a href=#refsIANACHARSET>[IANACHARSET]</a></p>
-
   <p>The <dfn id=attr-track-srclang title=attr-track-srclang><code>srclang</code></dfn>
   attribute gives the language of the timed track data. The value must
   be a valid BCP 47 language tag. This attribute must be present if
@@ -25049,6 +25053,12 @@
 
   </div>
 
+  <p>The <dfn id=attr-track-default title=attr-track-default><code>default</code></dfn>
+  attribute, if specified, indicates that the track is to be enabled
+  if the user's preferences do not indicate that another track would
+  be more appropriate. There must not be more than one
+  <code><a href=#the-track-element>track</a></code> element with the same parent node with the <code title=attr-track-default><a href=#attr-track-default>default</a></code> attribute specified.</p>
+
   <dl class=domintro><dt><var title="">track</var> . <code title=dom-track-track><a href=#dom-track-track>track</a></code></dt>
 
    <dd>
@@ -25064,11 +25074,11 @@
   <a href=#timed-track>timed track</a>'s corresponding <code><a href=#timedtrack>TimedTrack</a></code>
   object.</p>
 
-  <p>The <dfn id=dom-track-src title=dom-track-src><code>src</code></dfn>, <dfn id=dom-track-charset title=dom-track-charset><code>charset</code></dfn>, <dfn id=dom-track-srclang title=dom-track-srclang><code>srclang</code></dfn>, and <dfn id=dom-track-label title=dom-track-label><code>label</code></dfn> IDL attributes must
-  <a href=#reflect>reflect</a> the respective content attributes of the same
-  name. The <dfn id=dom-track-kind title=dom-track-kind><code>kind</code></dfn> IDL
-  attributemust <a href=#reflect>reflect</a> the content attribute of the same
-  name, <a href=#limited-to-only-known-values>limited to only known values</a>.</p>
+  <p>The <dfn id=dom-track-src title=dom-track-src><code>src</code></dfn>, <dfn id=dom-track-srclang title=dom-track-srclang><code>srclang</code></dfn>, <dfn id=dom-track-label title=dom-track-label><code>label</code></dfn>, and <dfn id=dom-track-default title=dom-track-default><code>default</code></dfn> IDL attributes
+  must <a href=#reflect>reflect</a> the respective content attributes of the
+  same name. The <dfn id=dom-track-kind title=dom-track-kind><code>kind</code></dfn>
+  IDL attribute must <a href=#reflect>reflect</a> the content attribute of the
+  same name, <a href=#limited-to-only-known-values>limited to only known values</a>.</p>
 
   </div>
 
@@ -27185,8 +27195,9 @@
 
   <ol><!--KEEP-END w3c-html--><!--TT--><li><p>Let <var title="">current cues</var> be an ordered list of
    <a href=#timed-track-cue title="timed track cue">cues</a>, initialized to contain
-   all the <a href=#timed-track-cue title="timed track cue">cues</a> of all the <a href=#timed-track-hidden title="timed track hidden">hidden</a> or <a href=#timed-track-showing title="timed
-   track showing">showing</a> <a href=#timed-track title="timed track">timed
+   all the <a href=#timed-track-cue title="timed track cue">cues</a> of all the <a href=#timed-track-hidden title="timed track hidden">hidden</a>, <a href=#timed-track-showing title="timed track
+   showing">showing</a>, or <a href=#timed-track-showing-by-default title="timed track showing by
+   default">showing by default</a> <a href=#timed-track title="timed track">timed
    tracks</a> of the <a href=#media-element>media element</a> (not the <a href=#timed-track-disabled title="timed track disabled">disabled</a> ones) whose <a href=#timed-track-cue-start-time title="timed track cue start time">start times</a> are less than
    or equal to the <a href=#current-playback-position>current playback position</a> and whose
    <a href=#timed-track-cue-end-time title="timed track cue end time">end times</a> are greater
@@ -27195,8 +27206,9 @@
 
    <li><p>Let <var title="">other cues</var> be an ordered list of
    <a href=#timed-track-cue title="timed track cue">cues</a>, initialized to contain
-   all the <a href=#timed-track-cue title="timed track cue">cues</a> of <a href=#timed-track-hidden title="timed track hidden">hidden</a> and <a href=#timed-track-showing title="timed
-   track showing">showing</a> <a href=#timed-track title="timed track">timed
+   all the <a href=#timed-track-cue title="timed track cue">cues</a> of <a href=#timed-track-hidden title="timed track hidden">hidden</a>, <a href=#timed-track-showing title="timed track
+   showing">showing</a>, and <a href=#timed-track-showing-by-default title="timed track showing by
+   default">showing by default</a> <a href=#timed-track title="timed track">timed
    tracks</a> of the <a href=#media-element>media element</a> that are not
    present in <var title="">current cues</var>, also in <a href=#timed-track-cue-order>timed
    track cue order</a>.</li>
@@ -27280,7 +27292,8 @@
 
    <li><p>Run the <a href=#rules-for-updating-the-timed-track-rendering>rules for updating the timed track
    rendering</a> of each of the <a href=#timed-track title="timed track">timed
-   tracks</a> in <var title="">affected tracks</var> that are <a href=#timed-track-showing title="timed track showing">showing</a>.
+   tracks</a> in <var title="">affected tracks</var> that are <a href=#timed-track-showing title="timed track showing">showing</a> or <a href=#timed-track-showing-by-default title="timed
+   track showing by default">showing by default</a>.
 <!--TTSRT-->
    For example, for <a href=#timed-track title="timed track">timed tracks</a>
    based on <a href=#websrt>WebSRT</a>, the <a href=#rules-for-updating-the-display-of-websrt-timed-tracks>rules for updating the
@@ -27454,7 +27467,7 @@
 
 <!--KEEP-END w3c-html--><!--TT-->
 <!--<div data-component="other Hixie drafts (editor: Ian Hickson)">-->
-  <h5 id=timed-tracks><span class=secno>4.8.10.10 </span>Timed tracks</h5>
+  <h5 id=text-timed-tracks><span class=secno>4.8.10.10 </span>Text timed tracks</h5>
 
   <h6 id=timed-track-model><span class=secno>4.8.10.10.1 </span>Timed track model</h6>
 
@@ -27611,8 +27624,9 @@
      </dd>
 
      <dt><dfn id=timed-track-showing title="timed track showing">Showing</dfn>
+     <dt><dfn id=timed-track-showing-by-default title="timed track showing by default">Showing by default</dfn>
 
-     <dd>
+     </dt><dd>
 
       <p>Indicates that the timed track is active. If no attempt has
       yet been made to obtain the track's cues, the user agent will
@@ -27628,6 +27642,13 @@
       user can navigate to any point in the <a href=#media-resource>media
       resource</a> by selecting a cue.</p>
 
+      <p>The <a href=#timed-track-showing-by-default title="timed track showing by default">showing by
+      default</a> state is used in conjunction with the <code title=attr-track-default><a href=#attr-track-default>default</a></code> attribute on
+      <code><a href=#the-track-element>track</a></code> elements to indicate that the timed track was
+      enabled due to that attribute. This allows the user agent to
+      override the state if a later track is discovered that is more
+      appropriate per the user's preferences.</p>
+
      </dd>
 
     </dl></dd>
@@ -27785,11 +27806,6 @@
    </dd>
 <!--TTSRT-->
 
-   <dt><dfn id=timed-track-cue-voice-identifier title="timed track cue voice identifier">A voice identifier</dfn>
-   <dd>
-    <p>A string identifying the voice with which the cue is associated.</p>
-   </dd>
-
    <dt><dfn id=timed-track-cue-text title="timed track cue text">The text of the cue</dfn>
    <dd>
     <p>The raw text of the cue, and rules for its interpretation,
@@ -27823,11 +27839,12 @@
     disabled">disabled</a>; and whenever the <a href=#media-element>media
     element</a>'s <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> is changed back to
     <code title=dom-media-HAVE_NOTHING><a href=#dom-media-have_nothing>HAVE_NOTHING</a></code>. When the
-    flag is unset in this way for one or more cues in <a href=#timed-track title="timed track">timed tracks</a> that were <a href=#timed-track-showing title="timed track showing">showing</a> prior to the relevant
-    incident, the user agent must, after having unset the flag for all
-    the affected cues, apply the <a href=#rules-for-updating-the-timed-track-rendering>rules for updating the timed
-    track rendering</a> of those <a href=#timed-track title="timed track">timed
-    tracks</a>.
+    flag is unset in this way for one or more cues in <a href=#timed-track title="timed track">timed tracks</a> that were <a href=#timed-track-showing title="timed track showing">showing</a> or <a href=#timed-track-showing-by-default title="timed
+    track showing by default">showing by default</a> prior to the
+    relevant incident, the user agent must, after having unset the
+    flag for all the affected cues, apply the <a href=#rules-for-updating-the-timed-track-rendering>rules for updating
+    the timed track rendering</a> of those <a href=#timed-track title="timed
+    track">timed tracks</a>.
 <!--TTSRT-->
     For example, for <a href=#timed-track title="timed track">timed tracks</a>
     based on <a href=#websrt>WebSRT</a>, the <a href=#rules-for-updating-the-display-of-websrt-timed-tracks>rules for updating the
@@ -28037,8 +28054,32 @@
    <dd>
     <p>Let the <a href=#timed-track-mode>timed track mode</a> be <a href=#timed-track-showing title="timed
     track showing">showing</a>.</p>
+
+    <p>If there is a <a href=#timed-track>timed track</a> in the <a href=#media-element>media
+    element</a>'s <a href=#list-of-timed-tracks>list of timed tracks</a> whose
+    <a href=#timed-track-mode>timed track mode</a> is <a href=#timed-track-showing-by-default title="timed track showing
+    by default">showing by default</a>, the user agent must
+    furthermore change <em>that</em> <a href=#timed-track>timed track</a>'s
+    <a href=#timed-track-mode>timed track mode</a> to <a href=#timed-track-hidden title="timed track
+    hidden">hidden</a>.</p> <!-- so that we still get events and
+    stuff: we can expect authors to forget that default doesn't mean
+    that it'll always be turned on, and that they'll still rely on
+    events firing even if it doesn't show -->
+
    </dd>
 
+   <dt>If the <code><a href=#the-track-element>track</a></code> element has a <code title=attr-track-default><a href=#attr-track-default>default</a></code> attribute specified, and
+   there is no other <a href=#timed-track>timed track</a> in the <a href=#media-element>media
+   element</a>'s <a href=#list-of-timed-tracks>list of timed tracks</a> whose
+   <a href=#timed-track-mode>timed track mode</a> is <a href=#timed-track-showing title="timed track
+   showing">showing</a> or <a href=#timed-track-showing-by-default title="timed track
+   showing by default">showing by default</a></dt>
+
+   <dd>
+    <p>Let the <a href=#timed-track-mode>timed track mode</a> be <a href=#timed-track-showing-by-default title="timed
+    track showing by default">showing by default</a>.</p>
+   </dd>
+
    <dt>Otherwise</dt>
 
    <dd>
@@ -28048,18 +28089,20 @@
 
   </dl><p>When a <a href=#timed-track>timed track</a> corresponding to a
   <code><a href=#the-track-element>track</a></code> element is created with <a href=#timed-track-mode>timed track
-  mode</a> set to <a href=#timed-track-hidden title="timed track hidden">hidden</a> or
-  <a href=#timed-track-showing title="timed track showing">showing</a>, and when a
-  <a href=#timed-track>timed track</a> corresponding to a <code><a href=#the-track-element>track</a></code>
-  element is created with <a href=#timed-track-mode>timed track mode</a> set to <a href=#timed-track-disabled title="timed track disabled">disabled</a> and subsequently
-  changes its <a href=#timed-track-mode>timed track mode</a> to <a href=#timed-track-hidden title="timed
-  track hidden">hidden</a> or <a href=#timed-track-showing title="timed track
-  showing">showing</a> for the first time, the user agent must
-  immediately and synchronously run the following algorithm. This
-  algorithm interacts closely with the <a href=#event-loop>event loop</a>
-  mechanism; in particular, it has a <a href=#synchronous-section>synchronous section</a>
-  (which is triggered as part of the <a href=#event-loop>event loop</a>
-  algorithm). The step in that section is marked with ⌛.</p>
+  mode</a> set to <a href=#timed-track-hidden title="timed track hidden">hidden</a>,
+  <a href=#timed-track-showing title="timed track showing">showing</a>, or <a href=#timed-track-showing-by-default title="timed track showing by default">showing by default</a>,
+  and when a <a href=#timed-track>timed track</a> corresponding to a
+  <code><a href=#the-track-element>track</a></code> element is created with <a href=#timed-track-mode>timed track
+  mode</a> set to <a href=#timed-track-disabled title="timed track
+  disabled">disabled</a> and subsequently changes its <a href=#timed-track-mode>timed
+  track mode</a> to <a href=#timed-track-hidden title="timed track hidden">hidden</a>,
+  <a href=#timed-track-showing title="timed track showing">showing</a>, or <a href=#timed-track-showing-by-default title="timed track showing by default">showing by default</a> for
+  the first time, the user agent must immediately and synchronously
+  run the following algorithm. This algorithm interacts closely with
+  the <a href=#event-loop>event loop</a> mechanism; in particular, it has a
+  <a href=#synchronous-section>synchronous section</a> (which is triggered as part of the
+  <a href=#event-loop>event loop</a> algorithm). The step in that section is
+  marked with ⌛.</p>
 
   <ol><li><p>Set the <a href=#timed-track-readiness-state>timed track readiness state</a> to <a href=#timed-track-loading title="timed track loading">loading</a>.</li>
 
@@ -28097,11 +28140,7 @@
     <code><a href=#text/srt>text/srt</a></code>)
 <!--TTSRT-->
     as it is received, with the <a href=#timed-track-list-of-cues>timed
-    track list of cues</a> being used for that parser's output. If
-    the <code><a href=#the-track-element>track</a></code> element has a <code title=attr-track-charset><a href=#attr-track-charset>charset</a></code> attribute that specifies
-    a supported character encoding, then that encoding must be given
-    to the parser as a character encoding override. Otherwise the
-    parser must use its default character encoding behavior.</p>
+    track list of cues</a> being used for that parser's output.</p>
 
     <p>If the <a href=#fetch title=fetch>fetching algorithm</a> fails for
     any reason (network error, the server returns an error code, a
@@ -28130,12 +28169,14 @@
     <ul><li>the <a href=#track-url>track URL</a> changes so that it is no longer
      equal to <var title="">URL</var>, while the <a href=#timed-track-mode>timed track
      mode</a> is set to <a href=#timed-track-hidden title="timed track
-     hidden">hidden</a> or <a href=#timed-track-showing title="timed track
-     showing">showing</a>; or</li>
+     hidden">hidden</a>, <a href=#timed-track-showing title="timed track
+     showing">showing</a>, or <a href=#timed-track-showing-by-default title="timed track showing by
+     default">showing by default</a>; or</li>
 
-     <li>the <a href=#timed-track-mode>timed track mode</a> changes to <a href=#timed-track-hidden title="timed track hidden">hidden</a> or <a href=#timed-track-showing title="timed
-     track showing">showing</a>, while the <a href=#track-url>track URL</a> is
-     not equal to <var title="">URL</var></li>
+     <li>the <a href=#timed-track-mode>timed track mode</a> changes to <a href=#timed-track-hidden title="timed track hidden">hidden</a>, <a href=#timed-track-showing title="timed
+     track showing">showing</a>, or <a href=#timed-track-showing-by-default title="timed track
+     showing by default">showing by default</a>, while the
+     <a href=#track-url>track URL</a> is not equal to <var title="">URL</var></li>
 
     </ul><p>...then the user agent must run the following steps:</p>
 
@@ -28160,8 +28201,9 @@
    <li><p><i>Monitoring</i>: Wait until the <a href=#track-url>track URL</a> is
    no longer equal to <var title="">URL</var>, at the same time as the
    <a href=#timed-track-mode>timed track mode</a> is set to <a href=#timed-track-hidden title="timed track
-   hidden">hidden</a> or <a href=#timed-track-showing title="timed track
-   showing">showing</a>.</li>
+   hidden">hidden</a>, <a href=#timed-track-showing title="timed track
+   showing">showing</a>, or <a href=#timed-track-showing-by-default title="timed track showing by
+   default">showing by default</a>.</li>
 
    <li><p>Wait until the <a href=#timed-track-readiness-state>timed track readiness state</a> is
    no longer set to <a href=#timed-track-loading title="timed track
@@ -28244,15 +28286,6 @@
     cues. Otherwise, they should be set to zero.</p>
    </dd>
 
-   <dt>The <a href=#timed-track-cue-voice-identifier>timed track cue voice identifier</a>
-   <dd>
-    <p>Should be set to the empty string if the format has no
-    obvious analogue to cue voices. The <a href=#timed-track-cue-voice-identifier>timed track cue voice
-    identifier</a> may be set to strings that cannot be expressed
-    using <a href=#websrt>WebSRT</a>, if the format supports voices that do
-    not correspond to the voices used by WebSRT.</p>
-   </dd>
-
   </dl></div>
 <!--TTSRT-->
 
@@ -28359,13 +28392,13 @@
      <dd>
       <p>The <a href=#timed-track-disabled>timed track disabled</a> mode.</p>
      </dd>
-     <dt><code><a href=#timedtrack>TimedTrack</a></code> . <code title=dom-TimedTrack-HIDDEN><a href=#dom-timedtrack-hidden>HIDDEN</a></code> (0)</dt>
+     <dt><code><a href=#timedtrack>TimedTrack</a></code> . <code title=dom-TimedTrack-HIDDEN><a href=#dom-timedtrack-hidden>HIDDEN</a></code> (1)</dt>
      <dd>
       <p>The <a href=#timed-track-hidden>timed track hidden</a> mode.</p>
      </dd>
-     <dt><code><a href=#timedtrack>TimedTrack</a></code> . <code title=dom-TimedTrack-SHOWING><a href=#dom-timedtrack-showing>SHOWING</a></code> (0)</dt>
+     <dt><code><a href=#timedtrack>TimedTrack</a></code> . <code title=dom-TimedTrack-SHOWING><a href=#dom-timedtrack-showing>SHOWING</a></code> (2)</dt>
      <dd>
-      <p>The <a href=#timed-track-showing>timed track showing</a> mode.</p>
+      <p>The <a href=#timed-track-showing>timed track showing</a> and <a href=#timed-track-showing-by-default title="timed track showing by default">showing by default</a> modes.</p>
      </dd>
     </dl><p>Can be set, to change the mode.</p>
    </dd>
@@ -28422,7 +28455,7 @@
    <dt><dfn id=dom-timedtrack-hidden title=dom-TimedTrack-HIDDEN><code>HIDDEN</code></dfn> (numeric value 1)</dt>
    <dd>The <a href=#timed-track-hidden>timed track hidden</a> mode.</dd>
    <dt><dfn id=dom-timedtrack-showing title=dom-TimedTrack-SHOWING><code>SHOWING</code></dfn> (numeric value 2)</dt>
-   <dd>The <a href=#timed-track-showing>timed track showing</a> mode.</dd>
+   <dd>The <a href=#timed-track-showing>timed track showing</a> and <a href=#timed-track-showing-by-default title="timed track showing by default">showing by default</a> modes.</dd>
   </dl><p>On setting, if the new value is not either 0, 1, or 2, the user
   agent must throw an <code><a href=#invalid_access_err>INVALID_ACCESS_ERR</a></code>
   exception. Otherwise, if the new value isn't equal to what the
@@ -28457,6 +28490,12 @@
     track</a> that the <code><a href=#timedtrack>TimedTrack</a></code> object represents to
     the <a href=#timed-track-showing>timed track showing</a> mode.</p>
 
+    <p class=note>If the mode had been <a href=#timed-track-showing-by-default title="timed track
+    showing by default">showing by default</a>, this will change it
+    to <a href=#timed-track-showing title="timed track showing">showing</a>, even though
+    the value of <code title=dom-TimedTrack-mode><a href=#dom-timedtrack-mode>mode</a></code> would
+    appear not to change.</p>
+
    </dd>
 
   </dl><p>If the <a href=#timed-track-mode>timed track mode</a> of the <a href=#timed-track>timed
@@ -28714,7 +28753,7 @@
 
   <hr><pre class=idl>
 <!--TTSRT-->
-[<a href=#dom-timedtrackcue title=dom-TimedTrackCue>Constructor</a>(in DOMString id, in double startTime, in double endTime, in DOMString text, in optional DOMString settings, in optional DOMString voice, in optional boolean pauseOnExit)]
+[<a href=#dom-timedtrackcue title=dom-TimedTrackCue>Constructor</a>(in DOMString id, in double startTime, in double endTime, in DOMString text, in optional DOMString settings, in optional boolean pauseOnExit)]
 <!--TTSRT-->
 interface <dfn id=timedtrackcue>TimedTrackCue</dfn> {
   readonly attribute <a href=#timedtrack>TimedTrack</a> <a href=#dom-timedtrackcue-track title=dom-TimedTrackCue-track>track</a>;
@@ -28733,7 +28772,6 @@
   readonly attribute DOMString <a href=#dom-timedtrackcue-alignment title=dom-TimedTrackCue-alignment>alignment</a>;
 <!--TTSRT-->
 
-  readonly attribute DOMString <a href=#dom-timedtrackcue-voice title=dom-TimedTrackCue-voice>voice</a>;
   DOMString <a href=#dom-timedtrackcue-getcueassource() title=dom-TimedTrackCue-getCueAsSource()>getCueAsSource</a>();
   <a href=#documentfragment>DocumentFragment</a> <a href=#dom-timedtrackcue-getcueashtml() title=dom-TimedTrackCue-getCueAsHTML()>getCueAsHTML</a>();
 
@@ -28741,7 +28779,7 @@
   readonly attribute <a href=#function>Function</a> <a href=#handler-timedtrackcue-onexit title=handler-TimedTrackCue-onexit>onexit</a>;
 };</pre>
 
-  <dl class=domintro><!--TTSRT--><dt><var title="">cue</var> = new <code title=dom-TimedTrackCue><a href=#dom-timedtrackcue>TimedTrackCue</a></code>( <var title="">id</var>, <var title="">startTime</var>, <var title="">endTime</var>, <var title="">text</var> [, <var title="">settings</var> [, <var title="">voice</var> [, <var title="">pauseOnExit</var> ] ] ] )</dt>
+  <dl class=domintro><!--TTSRT--><dt><var title="">cue</var> = new <code title=dom-TimedTrackCue><a href=#dom-timedtrackcue>TimedTrackCue</a></code>( <var title="">id</var>, <var title="">startTime</var>, <var title="">endTime</var>, <var title="">text</var> [, <var title="">settings</var> [, <var title="">pauseOnExit</var> ] ] )</dt>
    <dd>
     <p>Returns a new <code><a href=#timedtrackcue>TimedTrackCue</a></code> object, for use with the <code title=dom-MutableTimedTrack-addCue><a href=#dom-mutabletimedtrack-addcue>addCue()</a></code> method.</p>
     <p>The <var title="">id</var> argument sets the <a href=#timed-track-cue-identifier>timed track cue identifier</a>.</p>
@@ -28749,7 +28787,6 @@
     <p>The <var title="">endTime</var> argument sets the <a href=#timed-track-cue-end-time>timed track cue end time</a>.</p>
     <p>The <var title="">text</var> argument sets the <a href=#timed-track-cue-text>timed track cue text</a>.</p>
     <p>The <var title="">settings</var> argument is a string in the format of <a href=#websrt-cue-settings>WebSRT cue settings</a>. If omitted, the empty string is assumed.</p>
-    <p>The <var title="">voice</var> argument sets the <a href=#timed-track-cue-voice-identifier>timed track cue voice identifier</a>. If omitted, the empty string is assumed.</p>
     <p>The <var title="">pauseOnExit</var> argument sets the <a href=#timed-track-cue-pause-on-exit-flag>timed track cue pause-on-exit flag</a>. If omitted, false is assumed.</p>
    </dd>
 <!--TTSRT-->
@@ -28827,11 +28864,6 @@
     </dl></dd>
 <!--TTSRT-->
 
-   <dt><var title="">cue</var> . <a href=#dom-timedtrackcue-voice title=dom-TimedTrackCue-voice>voice</a></dt>
-   <dd>
-    <p>Returns the <a href=#timed-track-cue-voice-identifier>timed track cue voice identifier</a>.</p>
-   </dd>
-
    <dt><var title="">source</var> = <var title="">cue</var> . <span title=dom-TimedTrackCue-getCueAsSource>getCueAsSource</span>()</dt>
    <dd>
     <p>Returns the <a href=#timed-track-cue-text>timed track cue text</a> in raw unparsed form.</p>
@@ -28845,7 +28877,7 @@
   </dl><div class=impl>
 
 <!--TTSRT-->
-  <p>The <dfn id=dom-timedtrackcue title=dom-TimedTrackCue><code>TimedTrackCue(<var title="">id</var>, <var title="">startTime</var>, <var title="">endTime</var>, <var title="">text</var>, <var title="">settings</var>, <var title="">voice</var>, <var title="">pauseOnExit</var>)</code></dfn> constructor, when invoked,
+  <p>The <dfn id=dom-timedtrackcue title=dom-TimedTrackCue><code>TimedTrackCue(<var title="">id</var>, <var title="">startTime</var>, <var title="">endTime</var>, <var title="">text</var>, <var title="">settings</var>, <var title="">pauseOnExit</var>)</code></dfn> constructor, when invoked,
   must run the following steps:</p>
 
   <ol><li><p>Create a new <a href=#timed-track-cue>timed track cue</a> that is not
@@ -28867,10 +28899,6 @@
    pause-on-exit flag</a> be true if the <var title="">pauseOnExit</var> is present and true. Otherwise, let it
    be false.</li>
 
-   <li><p>Let <var title="">cue</var>'s <a href=#timed-track-cue-voice-identifier>timed track cue voice
-   identifier</a> be the value of the <var title="">voice</var>
-   argument, if it is present, or the empty string otherwise.</li>
-
    <li><p>Let <var title="">cue</var>'s <a href=#timed-track-cue-text>timed track cue
    text</a> be the value of the <var title="">text</var> argument,
    and let the rules for its interpretation be the <a href=#websrt-cue-text-parsing-rules>WebSRT cue
@@ -28975,9 +29003,10 @@
    with.</li>
 
    <li><p>Let <var title="">n</var> be the number of <a href=#timed-track title="timed track">timed tracks</a> whose <a href=#timed-track-mode>timed track
-   mode</a> is <a href=#timed-track-showing title="timed track showing">showing</a> and
-   that are in the <a href=#media-element>media element</a>'s <a href=#list-of-timed-tracks>list of timed
-   tracks</a> before <var title="">track</var>.</li>
+   mode</a> is <a href=#timed-track-showing title="timed track showing">showing</a> or
+   <a href=#timed-track-showing-by-default title="timed track showing by default">showing by
+   default</a> and that are in the <a href=#media-element>media element</a>'s
+   <a href=#list-of-timed-tracks>list of timed tracks</a> before <var title="">track</var>.</li>
 
    <li><p>Return <var title="">n</var>.</li>
 
@@ -28997,11 +29026,6 @@
   object represents.</p>
 <!--TTSRT-->
 
-  <p>The <dfn id=dom-timedtrackcue-voice title=dom-TimedTrackCue-voice><code>voice</code></dfn>
-  attribute must return the <a href=#timed-track-cue-voice-identifier>timed track cue voice
-  identifier</a> of the <a href=#timed-track-cue>timed track cue</a> that the
-  <code><a href=#timedtrackcue>TimedTrackCue</a></code> object represents.</p>
-
   <p>The <dfn id=dom-timedtrackcue-getcueassource() title=dom-TimedTrackCue-getCueAsSource()><code>getCueAsSource()</code></dfn>
   method must return the raw <a href=#timed-track-cue-text>timed track cue text</a>.</p>
 
@@ -29056,22 +29080,38 @@
   body</a> encoded as UTF-8 and labeled with the <a href=#mime-type>MIME
   type</a> <code><a href=#text/srt>text/srt</a></code>. <a href=#refsRFC3629>[RFC3629]</a></p>
 
-  <p>A <dfn id=websrt-file-body>WebSRT file body</dfn> consists of an optional U+FEFF BYTE
-  ORDER MARK (BOM) character, followed by zero or more <a href=#websrt-line-terminator title="WebSRT line terminator">WebSRT line terminators</a>,
-  followed by zero or more <a href=#websrt-cue title="WebSRT cue">WebSRT cues</a>
-  separated from each other by two or more <a href=#websrt-line-terminator title="WebSRT line
-  terminator">WebSRT line terminators</a>, followed by zero or more
-  <a href=#websrt-line-terminator title="WebSRT line terminator">WebSRT line
-  terminators</a>.</p>
+  <p>A <dfn id=websrt-file-body>WebSRT file body</dfn> consists of the following
+  components, in the following order:</p>
 
-  <p>A <dfn id=websrt-cue>WebSRT cue</dfn> consists of the following components, in
+  <ol><li>An optional U+FEFF BYTE ORDER MARK (BOM) character.</li>
+
+   <li>The string "<code title="">WEBSRT</code>", a single U+0020
+   SPACE character, and the string "<code title="">FILE</code>".</li>
+
+   <li>Optionally, either a U+0020 SPACE character or a U+0009
+   CHARACTER TABULATION (tab) character followed by any number of
+   characters that are not U+000A LINE FEED (LF) or U+000D CARRIAGE
+   RETURN (CR) characters.</li> <!-- allows for Emacs line -->
+
+   <li>Two or more <a href=#websrt-line-terminator title="WebSRT line terminator">WebSRT line
+   terminators</a>.</li> <!-- the first one to terminate the magic
+   line, the second one to terminate the header block: in the future,
+   we can add a metadata block before the first blank line -->
+
+   <li>Zero or more <a href=#websrt-cue title="WebSRT cue">WebSRT cues</a>
+   separated from each other by two or more <a href=#websrt-line-terminator title="WebSRT line
+   terminator">WebSRT line terminators</a>.</li>
+
+   <li>Zero or more <a href=#websrt-line-terminator title="WebSRT line terminator">WebSRT line
+   terminators</a>.</li>
+
+  </ol><p>A <dfn id=websrt-cue>WebSRT cue</dfn> consists of the following components, in
   the given order:</p>
 
   <ol><li>Optionally, a <a href=#websrt-cue-identifier>WebSRT cue identifier</a> followed by a <a href=#websrt-line-terminator>WebSRT line terminator</a>.</li>
    <li><a href=#websrt-cue-timings>WebSRT cue timings</a>.</li>
    <li>Optionally, one or more U+0020 SPACE characters or U+0009 CHARACTER TABULATION (tab) characters followed by <a href=#websrt-cue-settings>WebSRT cue settings</a>.</li>
    <li>A <a href=#websrt-line-terminator>WebSRT line terminator</a>.</li>
-   <li>Optionally, a <a href=#websrt-voice-declaration>WebSRT voice declaration</a> followed by zero or more U+0020 SPACE characters or U+0009 CHARACTER TABULATION (tab) characters.</li>
    <li>The <dfn id=cue-payload>cue payload</dfn>: either <a href=#websrt-cue-text>WebSRT cue text</a> or <a href=#websrt-metadata-text>WebSRT metadata text</a>.</li>
   </ol><p><a href=#websrt-cue-text>WebSRT cue text</a> is syntactically a subset of
   <a href=#websrt-metadata-text>WebSRT metadata text</a>. Conformance checkers, when
@@ -29162,8 +29202,7 @@
    DIGIT NINE (9), representing the <var title="">seconds</var> as a
    base ten integer in the range 0 ≤ <var title="">seconds</var> ≤ 59.</li>
 
-   <li>Either a U+002E FULL STOP character (.) or a U+002C COMMA
-   character (,).</li>
+   <li>A U+002E FULL STOP character (.).</li>
 
    <li>Three characters in the range U+0030 DIGIT ZERO (0) to U+0039
    DIGIT NINE (9), representing the thousandths of a second <var title="">seconds-frac</var> as a base ten integer.</li>
@@ -29223,22 +29262,6 @@
   <ol><li>A U+0041 LATIN CAPITAL LETTER A character.</li>
    <li>A U+003A COLON character (:).</li>
    <li>One of the following strings: "<code title="">start</code>", "<code title="">middle</code>", "<code title="">end</code>"</li>
-  </ol><p>A <dfn id=websrt-voice-declaration>WebSRT voice declaration</dfn> consists of the following
-  components, in the order given:</p>
-
-  <ol><li>A U+003C LESS-THAN SIGN character (<).</li>
-   <li>One of the following:
-    <ul class=brief><li>One character in the range U+0031 DIGIT ONE (1) to U+0039
-     DIGIT NINE (9), followed by zero or more characters in the range
-     U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9)
-     <li>The string "<dfn id=timed-track-cue-narrator-voice title="timed track cue narrator voice"><code>narrator</code></dfn>".</li>
-     <li>The string "<dfn id=timed-track-cue-music-voice title="timed track cue music voice"><code>music</code></dfn>".</li>
-     <li>The string "<dfn id=timed-track-cue-lyric-voice title="timed track cue lyric voice"><code>lyric</code></dfn>".</li>
-     <li>The string "<dfn id=timed-track-cue-sound-voice title="timed track cue sound voice"><code>sound</code></dfn>".</li> <!-- for audio fx descriptions -->
-     <li>The string "<dfn id=timed-track-cue-comment-voice title="timed track cue comment voice"><code>comment</code></dfn>".</li> <!-- for annotations -->
-     <li>The string "<dfn id=timed-track-cue-credit-voice title="timed track cue credit voice"><code>credit</code></dfn>".</li>
-    </ul></li>
-   <li>A U+003E GREATER-THAN SIGN character (>).</li>
   </ol><p><dfn id=websrt-metadata-text>WebSRT metadata text</dfn> consists of any sequence of one
   or more characters other than U+000A LINE FEED (LF) characters and
   U+000D CARRIAGE RETURN (CR) characters, each optionally separated
@@ -29247,111 +29270,182 @@
   does not start or end with a <a href=#websrt-line-terminator>WebSRT line
   terminator</a>.)</p>
 
-  <p><dfn id=websrt-cue-text>WebSRT cue text</dfn> consists of one or more <a href=#websrt-cue-components>WebSRT
+  <p><dfn id=websrt-cue-text>WebSRT cue text</dfn> consists of zero or more <a href=#websrt-cue-components>WebSRT
   cue components</a>, in any order, each optionally separated from
   the next by a <a href=#websrt-line-terminator>WebSRT line terminator</a>.</p>
 
   <p>The <dfn id=websrt-cue-components>WebSRT cue components</dfn> are:</p>
 
-  <ul><li>A <a href=#websrt-cue-text-span>WebSRT cue text span</a>, representing the text of the cue.</li>
-   <li>A <a href=#websrt-cue-amp-escape>WebSRT cue amp escape</a>, representing a "&" character in the text of the cue.</li>
-   <li>A <a href=#websrt-cue-lt-escape>WebSRT cue lt escape</a>, representing a "<" character in the text of the cue.</li>
-   <li>A <a href=#websrt-cue-timestamp>WebSRT cue timestamp</a>.</li>
+  <ul><li>A <a href=#websrt-cue-class-span>WebSRT cue class span</a>.</li>
    <li>A <a href=#websrt-cue-italics-span>WebSRT cue italics span</a>.</li>
    <li>A <a href=#websrt-cue-bold-span>WebSRT cue bold span</a>.</li>
    <li>A <a href=#websrt-cue-ruby-span>WebSRT cue ruby span</a>.</li>
+   <li>A <a href=#websrt-cue-voice-span>WebSRT cue voice span</a>.</li>
+
+   <li>A <a href=#websrt-cue-timestamp>WebSRT cue timestamp</a>.</li>
+
+   <li>A <a href=#websrt-cue-text-span>WebSRT cue text span</a>, representing the text of the cue.</li>
+
+   <li>A <a href=#websrt-cue-amp-escape>WebSRT cue amp escape</a>, representing a "&" character in the text of the cue.</li>
+   <li>A <a href=#websrt-cue-lt-escape>WebSRT cue lt escape</a>, representing a "<" character in the text of the cue.</li>
+   <li>A <a href=#websrt-cue-gt-escape>WebSRT cue gt escape</a>, representing a ">" character in the text of the cue.</li>
+
   </ul><p><dfn id=websrt-cue-internal-text>WebSRT cue internal text</dfn> consists of an optional
   <a href=#websrt-line-terminator>WebSRT line terminator</a>, followed by zero or more
   <a href=#websrt-cue-components>WebSRT cue components</a>, in any order, each optionally
   followed by a <a href=#websrt-line-terminator>WebSRT line terminator</a>.</p>
 
-  <p>A <dfn id=websrt-cue-text-span>WebSRT cue text span</dfn> consists of one or more
-  characters other than U+000A LINE FEED (LF) characters, U+000D
-  CARRIAGE RETURN (CR) characters, U+0026 AMPERSAND characters (&),
-  and U+003C LESS-THAN SIGN characters (<).</p>
 
-  <p>A <dfn id=websrt-cue-amp-escape>WebSRT cue amp escape</dfn> is the five character string
-  consisting of a U+0026 AMPERSAND character (&), a U+0061 LATIN SMALL
-  LETTER A character, a U+006D LATIN SMALL LETTER M character, a
-  U+0070 LATIN SMALL LETTER P character, and a U+003B SEMICOLON
-  character (;).
 
-  <p>A <dfn id=websrt-cue-lt-escape>WebSRT cue lt escape</dfn> is the five character string
-  consisting of a U+0026 AMPERSAND character (&), a U+006C LATIN SMALL
-  LETTER L character, a U+0074 LATIN SMALL LETTER T character, and a
-  U+003B SEMICOLON character (;).
+  <p>A <dfn id=websrt-cue-class-span>WebSRT cue class span</dfn> consists of a <a href=#websrt-cue-span-start-tag>WebSRT cue
+  span start tag</a> "<code title="">c</code>" that disallows an
+  annotation, <a href=#websrt-cue-internal-text>WebSRT cue internal text</a> representing cue
+  text, and a <a href=#websrt-cue-span-end-tag>WebSRT cue span end tag</a> "<code title="">c</code>".</p>
 
-  <p>A <dfn id=websrt-cue-timestamp>WebSRT cue timestamp</dfn> consists of a U+003C LESS-THAN
-  SIGN character (<), followed by a <a href=#websrt-timestamp>WebSRT timestamp</a>
-  representing the time that the given point in the cue becomes
-  active, followed by a U+003E GREATER-THAN SIGN character (>). The
-  time represented by the <a href=#websrt-timestamp>WebSRT timestamp</a> must be
-  greater than the times represented by any previous <a href=#websrt-cue-timestamp title="WebSRT cue timestamp">WebSRT cue timestamps</a> in the
-  cue, as well as greater than the cue's start time offset, and less
-  than the cue's end time offset.</p>
+  <p>A <dfn id=websrt-cue-italics-span>WebSRT cue italics span</dfn> consists of a <a href=#websrt-cue-span-start-tag>WebSRT
+  cue span start tag</a> "<code title="">i</code>" that disallows
+  an annotation, <a href=#websrt-cue-internal-text>WebSRT cue internal text</a> representing
+  the italicized text, and a <a href=#websrt-cue-span-end-tag>WebSRT cue span end tag</a>
+  "<code title="">i</code>".</p>
 
-  <p>A <dfn id=websrt-cue-italics-span>WebSRT cue italics span</dfn> consists of a U+003C
-  LESS-THAN SIGN character (<), a U+0069 LATIN SMALL LETTER I
-  character, and a U+003E GREATER-THAN SIGN character (>), then
-  <a href=#websrt-cue-internal-text>WebSRT cue internal text</a> representing the italicized
-  text, and finally a U+003C LESS-THAN SIGN character (<), a U+002F
-  SOLIDUS character (/), a U+0069 LATIN SMALL LETTER I character, and
-  a U+003E GREATER-THAN SIGN character (>).</p>
+  <p>A <dfn id=websrt-cue-bold-span>WebSRT cue bold span</dfn> consists of a <a href=#websrt-cue-span-start-tag>WebSRT cue
+  span start tag</a> "<code title="">b</code>" that disallows an
+  annotation, <a href=#websrt-cue-internal-text>WebSRT cue internal text</a> representing the
+  boldened text, and a <a href=#websrt-cue-span-end-tag>WebSRT cue span end tag</a> "<code title="">b</code>".</p>
 
-  <p>A <dfn id=websrt-cue-bold-span>WebSRT cue bold span</dfn> consists of a U+003C LESS-THAN
-  SIGN character (<), a U+0062 LATIN SMALL LETTER B character, and
-  a U+003E GREATER-THAN SIGN character (>), then <a href=#websrt-cue-internal-text>WebSRT cue
-  internal text</a> representing the bolded text, and finally a
-  U+003C LESS-THAN SIGN character (<), a U+002F SOLIDUS character
-  (/), a U+0062 LATIN SMALL LETTER B character, and a U+003E
-  GREATER-THAN SIGN character (>).</p>
-
   <p>A <dfn id=websrt-cue-ruby-span>WebSRT cue ruby span</dfn> consists of the following
   components, in the order given:</p>
 
-  <ol><li>The string "<code title=""><ruby></code>".</li>
+  <ol><li>A <a href=#websrt-cue-span-start-tag>WebSRT cue span start tag</a> "<code title="">i</code>" that disallows an annotation.</li>
    <li>One or more occurrences of the following group of components, in the order given:
     <ol><li><a href=#websrt-cue-internal-text>WebSRT cue internal text</a>, representing the ruby base.</li>
-     <li>The string "<code title=""><rt></code>".</li>
-     <li><a href=#websrt-cue-internal-text>WebSRT cue internal text</a>, representing the ruby text component of th ruby annotation.</li>
-     <li>The string "<code title=""></rt></code>". If this is
-     the last occurance of this group of components in the
+     <li>A <a href=#websrt-cue-span-start-tag>WebSRT cue span start tag</a> "<code title="">rt</code>" that disallows an annotation.</li>
+     <li>A <dfn id=websrt-cue-ruby-text-span>WebSRT cue ruby text span</dfn>: <a href=#websrt-cue-internal-text>WebSRT cue internal text</a>, representing the ruby text component of the ruby annotation.</li>
+     <li>A <a href=#websrt-cue-span-end-tag>WebSRT cue span end tag</a> "<code title="">rt</code>".
+     If this is the last occurance of this group of components in the
      <a href=#websrt-cue-ruby-span>WebSRT cue ruby span</a>, then this last end tag string
      may be omitted.</li>
     </ol></li>
    <li>If the last end tag string was not omitted: Optionally, a <a href=#websrt-line-terminator>WebSRT line terminator</a>.</li>
    <li>If the last end tag string was not omitted: Zero or more U+0020 SPACE characters or U+0009 CHARACTER TABULATION (tab) characters, each optionally followed by a <a href=#websrt-line-terminator>WebSRT line terminator</a>.</li>
-   <li>The string "<code title=""></ruby></code>".</li>
-  </ol><p>For historical reasons, <a href=#websrt-file title="WebSRT file">WebSRT
-  files</a> <a href=#supports-external-timed-track-character-encoding-overrides title="supports external timed track character
-  encoding overrides">support external timed track character encoding
-  overrides</a>.</p>
+   <li>A <a href=#websrt-cue-span-end-tag>WebSRT cue span end tag</a> "<code title="">ruby</code>".</li>
+  </ol><p>A <dfn id=websrt-cue-voice-span>WebSRT cue voice span</dfn> consists of the following
+  components, in the order given:</p>
 
+  <ol><li>A <a href=#websrt-cue-span-start-tag>WebSRT cue span start tag</a> "<code title="">v</code>" that requires an annotation; the annotation represents the name of the voice.</li>
+   <li><a href=#websrt-cue-internal-text>WebSRT cue internal text</a>.</li>
+   <li>A <a href=#websrt-cue-span-end-tag>WebSRT cue span end tag</a> "<code title="">v</code>". If this <a href=#websrt-cue-voice-span>WebSRT cue voice span</a> is the only <a href=#websrt-cue-components title="WebSRT cue components">component</a> of its <a href=#websrt-cue-text>WebSRT cue text</a> sequence, then the end tag may be omitted for brevity.</li>
+  </ol><p>A <dfn id=websrt-cue-span-start-tag>WebSRT cue span start tag</dfn> has a <var title="">tag
+  name</var> and either allows, requires, and disallows an annotation,
+  and consists of the following components, in the order given:</p>
 
+  <ol><li>A U+003C LESS-THAN SIGN character (<).</li>
+
+   <li>The <var title="">tag name</var>.</li>
+
+   <li>Zero or more occurrences of the following sequence:
+
+    <ol><li>U+002E FULL STOP character (.)</li>
+
+     <li>One or more characters other than U+0009 CHARACTER TABULATION
+     (tab) characters, U+000A LINE FEED (LF) characters, U+000D
+     CARRIAGE RETURN (CR) characters, U+0020 SPACE characters, U+0026
+     AMPERSAND characters (&), U+003C LESS-THAN SIGN characters
+     (<), U+003E GREATER-THAN SIGN characters (>), and U+002E FULL
+     STOP characters (.), representing a class that describes the cue
+     span's significance.</li>
+
+    </ol></li>
+
+   <li>
+<!--
+    <dl class="switch">
+
+     <dt>If the start tag allows an annotation:</dt>
+
+     <dd>Optionally, a <span>WebSRT cue span start tag annotation</span>.</dd>
+
+     <dt>-->If the start tag requires an annotation:<!--</dt>
+
+     <dd>A <span>WebSRT cue span start tag annotation</span>.</dd>
+
+    </dl>
+
+    <p>A <dfn>WebSRT cue span start tag annotation</dfn> consists of-->
+
+    one or more of the following components, the concatenation of
+    their representations having a value that contains at least one
+    character other than U+0020 SPACE and U+0009 CHARACTER TABULATION
+    (tab) characters:<!--</p>-->
+
+    <ul><li><a href=#websrt-cue-span-start-tag-annotation-text>WebSRT cue span start tag annotation text</a>, representing the text of the annotation.</li>
+     <li>A <a href=#websrt-cue-amp-escape>WebSRT cue amp escape</a>, representing a "&" character in the text of the annotation.</li>
+     <li>A <a href=#websrt-cue-lt-escape>WebSRT cue lt escape</a>, representing a "<" character in the text of the annotation.</li>
+     <li>A <a href=#websrt-cue-gt-escape>WebSRT cue gt escape</a>, representing a ">" character in the text of the annotation.</li>
+    </ul></li>
+
+   <li>A U+003E GREATER-THAN SIGN character (>).</li>
+
+  </ol><p>A <dfn id=websrt-cue-span-end-tag>WebSRT cue span end tag</dfn> has a <var title="">tag
+  name</var> and consists of the following components, in the order
+  given:</p>
+
+  <ol><li>A U+003C LESS-THAN SIGN character (<).</li>
+   <li>U+002F SOLIDUS character (/).</li>
+   <li>The <var title="">tag name</var>.</li>
+   <li>A U+003E GREATER-THAN SIGN character (>).</li>
+  </ol><p>A <dfn id=websrt-cue-timestamp>WebSRT cue timestamp</dfn> consists of a U+003C LESS-THAN
+  SIGN character (<), followed by a <a href=#websrt-timestamp>WebSRT timestamp</a>
+  representing the time that the given point in the cue becomes
+  active, followed by a U+003E GREATER-THAN SIGN character (>). The
+  time represented by the <a href=#websrt-timestamp>WebSRT timestamp</a> must be
+  greater than the times represented by any previous <a href=#websrt-cue-timestamp title="WebSRT cue timestamp">WebSRT cue timestamps</a> in the
+  cue, as well as greater than the cue's start time offset, and less
+  than the cue's end time offset.</p>
+
+  <p>A <dfn id=websrt-cue-text-span>WebSRT cue text span</dfn> consists of one or more
+  characters other than U+000A LINE FEED (LF) characters, U+000D
+  CARRIAGE RETURN (CR) characters, U+0026 AMPERSAND characters (&),
+  and U+003C LESS-THAN SIGN characters (<).</p>
+
+  <p><dfn id=websrt-cue-span-start-tag-annotation-text>WebSRT cue span start tag annotation text</dfn> consists of
+  one or more characters other than U+000A LINE FEED (LF) characters,
+  U+000D CARRIAGE RETURN (CR) characters, U+0026 AMPERSAND characters
+  (&), and U+003E GREATER-THAN SIGN characters (>).</p>
+
+  <p>A <dfn id=websrt-cue-amp-escape>WebSRT cue amp escape</dfn> is the five character string
+  "<code title="">&</code>".</p>
+
+  <p>A <dfn id=websrt-cue-lt-escape>WebSRT cue lt escape</dfn> is the five character string
+  "<code title=""><</code>".</p>
+
+  <p>A <dfn id=websrt-cue-gt-escape>WebSRT cue gt escape</dfn> is the five character string
+  "<code title="">></code>".</p>
+
+
+
   <div class=impl>
 
   <h6 id=parsing-0><span class=secno>4.8.10.11.2 </span>Parsing</h6>
 
-  <p>A <dfn id=websrt-parser>WebSRT parser</dfn>, given an input byte stream, a
+  <p>A <dfn id=websrt-parser>WebSRT parser</dfn>, given an input byte stream and a
   <a href=#timed-track-list-of-cues>timed track list of cues</a> <var title="">output</var>,
-  and optionally a character encoding override <var title="">encoding</var>, must convert the bytes into a string of
-  Unicode characters by interpreting them as the given <var title="">encoding</var>, or UTF-8 if <var title="">encoding</var> is
-  not provided, and then must parse the resulting string according to
-  the <a href=#websrt-parser-algorithm>WebSRT parser algorithm</a> below. This results in
-  <a href=#timed-track-cue title="timed track cue">timed track cues</a> being added to
-  <var title="">output</var>. <a href=#refsRFC3629>[RFC3629]</a></p>
+  must <a href=#decoded-as-utf-8,-with-error-handling title="decoded as UTF-8, with error handling">decode the
+  byte stream as UTF-8, with error handling</a>, and then must
+  parse the resulting string according to the <a href=#websrt-parser-algorithm>WebSRT parser
+  algorithm</a> below. This results in <a href=#timed-track-cue title="timed track
+  cue">timed track cues</a> being added to <var title="">output</var>. <a href=#refsRFC3629>[RFC3629]</a></p>
 
   <p>A <a href=#websrt-parser>WebSRT parser</a>, specifically its conversion and
   parsing steps, is typically run asynchronously, with the input byte
   stream being updated incrementally as the resource is downloaded;
   this is called an <dfn id=incremental-websrt-parser>incremental WebSRT parser</dfn>.</p>
 
-  <p>The following <a href=#mime-type title="MIME type">MIME type<!--s--></a> must be
-  recognised as indicating the <a href=#websrt>WebSRT</a> format:</p>
+  <p>A <a href=#websrt-parser>WebSRT parser</a> verifies a file signature before
+  parsing the provided byte stream. If the stream lacks this WebSRT
+  file signature, then the parser aborts.</p>
 
-  <ul class=brief><li><code><a href=#text/srt>text/srt</a></code></li>
-  </ul><!--<p class="note">Not all of these MIME types are valid registered
-  types.</p>--><p>When converting the bytes into Unicode characters, if the
+  <p>When converting the bytes into Unicode characters, if the
   encoding used is UTF-8, the bytes must be <a href=#decoded-as-utf-8,-with-error-handling title="decoded as
   UTF-8, with error handling">decoded with the error handling</a>
   defined in this specification, and all U+0000 NULL characters must
@@ -29376,6 +29470,63 @@
    <li><p>If the character indicated by <var title="">position</var>
    is a U+FEFF BYTE ORDER MARK (BOM) character, advance <var title="">position</var> to the next character in <var title="">input</var>.</li>
 
+
+   <li><p><a href=#collect-a-sequence-of-characters>Collect a sequence of characters</a> that are
+   <em>not</em> U+000D CARRIAGE RETURN (CR) or U+000A LINE FEED (LF)
+   characters. Let <var title="">line</var> be those characters, if
+   any.</li>
+
+   <li><p>If <var title="">line</var> is less than eleven characters
+   long, then abort these steps. The file is not a <a href=#websrt-file>WebSRT
+   file</a>.</li>
+
+   <li><p>If <var title="">line</var> is exactly eleven characters
+   long but does not exactly equal "<code title="">WEBSRT FILE</code>", then abort these steps. The file
+   is not a <a href=#websrt-file>WebSRT file</a>.</li>
+
+   <li><p>If <var title="">line</var> is more than eleven characters
+   long but does the first elevent characters do not exactly equal
+   "<code title="">WEBSRT FILE</code>", or the twelfth character
+   is neither a U+0020 SPACE character nor a U+0009 CHARACTER
+   TABULATION (tab) character, then abort these steps. The file is not
+   a <a href=#websrt-file>WebSRT file</a>.</li>
+
+   <li><p>If <var title="">position</var> is past the end of <var title="">input</var>, then jump to the step labeled
+   <i>end</i>.</li>
+
+   <li><p>If the character indicated by <var title="">position</var>
+   is a U+000D CARRIAGE RETURN (CR) character, advance <var title="">position</var> to the next character in <var title="">input</var>.</li>
+
+   <li><p>If <var title="">position</var> is past the end of <var title="">input</var>, then jump to the step labeled
+   <i>end</i>.</li>
+
+   <li><p>If the character indicated by <var title="">position</var>
+   is a U+000A LINE FEED (LF) character, advance <var title="">position</var> to the next character in <var title="">input</var>.</li>
+
+
+   <li><p><i><a href=#the-header-element>Header</a></i>: <a href=#collect-a-sequence-of-characters>Collect a sequence of characters</a>
+   that are <em>not</em> U+000D CARRIAGE RETURN (CR) or U+000A LINE
+   FEED (LF) characters. Let <var title="">line</var> be those
+   characters, if any.</li>
+
+   <li><p>If <var title="">position</var> is past the end of <var title="">input</var>, then jump to the step labeled
+   <i>end</i>.</li>
+
+   <li><p>If the character indicated by <var title="">position</var>
+   is a U+000D CARRIAGE RETURN (CR) character, advance <var title="">position</var> to the next character in <var title="">input</var>.</li>
+
+   <li><p>If <var title="">position</var> is past the end of <var title="">input</var>, then jump to the step labeled
+   <i>end</i>.</li>
+
+   <li><p>If the character indicated by <var title="">position</var>
+   is a U+000A LINE FEED (LF) character, advance <var title="">position</var> to the next character in <var title="">input</var>.</li>
+
+   <!-- In v2, this is where we can put header metadata processing -->
+
+   <li><p>If <var title="">line</var> is not the empty string, then
+   jump back to the step labeled <i><a href=#the-header-element>header</a></i>.</li>
+
+
    <li><p><i>Cue loop</i>: <a href=#collect-a-sequence-of-characters>Collect a sequence of
    characters</a> that are either U+000D CARRIAGE RETURN (CR) or
    U+000A LINE FEED (LF) characters.</li>
@@ -29411,9 +29562,6 @@
    alignment</a> be <a href=#timed-track-cue-middle-alignment title="timed track cue middle
    alignment">middle alignment</a>.</li>
 
-   <li><p>Let <var title="">cue</var>'s <a href=#timed-track-cue-voice-identifier>timed track cue
-   voice identifier</a> be the empty string.</li>
-
    <li><p>Let <var title="">cue</var>'s <a href=#timed-track-cue-text>timed track cue
    text</a> be the empty string.</li>
 
@@ -29492,9 +29640,12 @@
 
    <li><p>Return to the step labeled <i>cue text loop</i>.</li>
 
-   <li><p><i>Cue text processing</i>: <a href=#collect-websrt-cue-voice-and-text>Collect WebSRT cue voice
-   and text</a> from <var title="">cue text</var>, using <var title="">cue</var> for the results. If that fails, discard <var title="">cue</var> and jump to the step labeled <i>cue
-   loop</i>.</li>
+   <li><p><i>Cue text processing</i>: Let the <a href=#timed-track-cue-text>timed track cue
+   text</a> of <var title="">cue</var> be <var title="">cue
+   text</var>, and let the rules for its interpretation be the
+   <a href=#websrt-cue-text-parsing-rules>WebSRT cue text parsing rules</a>, the <a href=#websrt-cue-text-rendering-rules>WebSRT cue
+   text rendering rules</a>, and the <a href=#websrt-cue-text-dom-construction-rules>WebSRT cue text DOM
+   construction rules</a>.</li>
 
    <li><p>Add <var title="">cue</var> to the <a href=#timed-track-list-of-cues>timed track list of
    cues</a> <var title="">output</var>.</li>
@@ -29558,18 +29709,15 @@
 
    <li><p>If <!--<var title="">position</var> is beyond the end of
    <var title="">input</var> or if--> the character at <var title="">position</var> is not a U+002D HYPHEN-MINUS character (-)
-   then abort these steps and return failure. Otherwise, move <var title="">position</var> forwards
-   one character.</li>
+   then abort these steps and return failure. Otherwise, move <var title="">position</var> forwards one character.</li>
 
    <li><p>If <!--<var title="">position</var> is beyond the end of
    <var title="">input</var> or if--> the character at <var title="">position</var> is not a U+002D HYPHEN-MINUS character (-)
-   then abort these steps and return failure. Otherwise, move <var title="">position</var> forwards
-   one character.</li>
+   then abort these steps and return failure. Otherwise, move <var title="">position</var> forwards one character.</li>
 
    <li><p>If <!--<var title="">position</var> is beyond the end of
-   <var title="">input</var> or if--> the character at <var title="">position</var> is not a U+003E GREATER-THAN SIGN character (>)
-   then abort these steps and return failure. Otherwise, move <var title="">position</var> forwards
-   one character.</li>
+   <var title="">input</var> or if--> the character at <var title="">position</var> is not a U+003E GREATER-THAN SIGN character
+   (>) then abort these steps and return failure. Otherwise, move <var title="">position</var> forwards one character.</li>
 
    <li><p><a href=#skip-whitespace>Skip whitespace</a>.</li>
 
@@ -29811,6 +29959,8 @@
   <ol><li><p>Let <var title="">input</var> and <var title="">position</var> be the same variables as those of the same
    name in the algorithm that invoked these steps.</li>
 
+   <li><p>Let <var title="">most significant units</var> be <i title="">minutes</i>.</li>
+
    <li><p>If <var title="">position</var> is past the end of <var title="">input</var>, return an error and abort these
    steps.</li>
 
@@ -29820,14 +29970,15 @@
 
    <li><p><a href=#collect-a-sequence-of-characters>Collect a sequence of characters</a> in the range
    U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9), and let <var title="">string</var> be the collected substring.</li>
-<!--(should only do this check for minutes, not hours, if we ever bring it back)
-   <li><p>If <var title="">string</var> is not exactly two characters
-   in length, return an error and abort these steps.</p></li>
--->
+
    <li><p>Interpret <var title="">string</var> as a base-ten
    integer. Let <var title="">value<sub>1</sub></var> be that
    integer.</li>
 
+   <li><p>If <var title="">string</var> is not exactly two characters
+   in length, or if <var title="">value<sub>1</sub></var> is greater
+   than 59, let <var title="">most significant units</var> be <i title="">hours</i>.</li>
+
    <li><p>If <var title="">position</var> is beyond the end of <var title="">input</var> or if the character at <var title="">position</var> is not a U+003A COLON character (:), then
    return an error and abort these steps. Otherwise, move <var title="">position</var> forwards one character.</li>
 
@@ -29837,25 +29988,23 @@
 
    <li><p><a href=#collect-a-sequence-of-characters>Collect a sequence of characters</a> in the range
    U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9), and let <var title="">string</var> be the collected substring.</li>
-<!--
+
    <li><p>If <var title="">string</var> is not exactly two characters
-   in length, return an error and abort these steps.</p></li>
--->
+   in length, return an error and abort these steps.</li>
+
    <li><p>Interpret <var title="">string</var> as a base-ten
    integer. Let <var title="">value<sub>2</sub></var> be that
    integer.</li>
 
    <li>
 
-    <p>If <!--<var title="">value<sub>1</sub></var> is greater than
-    59, or if--> <var title="">position</var> is not beyond the end of
-    <var title="">input</var> and the character at <var title="">position</var> is not a U+003A COLON character (:), run
-    these substeps:</p>
+    <p>If <var title="">most significant units</var> is <i title="">hours</i>, or if <var title="">position</var> is not
+    beyond the end of <var title="">input</var> and the character at
+    <var title="">position</var> is not a U+003A COLON character (:),
+    run these substeps:</p>
 
-    <ol><li><p><!--If <var title="">position</var> is beyond the end of <var
-     title="">input</var> or if the character at <var
-     title="">position</var> is not a U+003A COLON character (:), then
-     return an error and abort these steps. Otherwise, move--> Move <var title="">position</var> forwards one character.</li>
+    <ol><li><p>If <var title="">position</var> is beyond the end of <var title="">input</var> or if the character at <var title="">position</var> is not a U+003A COLON character (:), then
+     return an error and abort these steps. Otherwise, move <var title="">position</var> forwards one character.</li>
 
      <li><p>If the character indicated by <var title="">position</var>
      is not one of U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9), then
@@ -29863,27 +30012,25 @@
 
      <li><p><a href=#collect-a-sequence-of-characters>Collect a sequence of characters</a> in the range
      U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9), and let <var title="">string</var> be the collected substring.</li>
-<!--
+
      <li><p>If <var title="">string</var> is not exactly two
      characters in length, return an error and abort these
-     steps.</p></li>
--->
+     steps.</li>
+
      <li><p>Interpret <var title="">string</var> as a base-ten
      integer. Let <var title="">value<sub>3</sub></var> be that
      integer.</li>
 
-    </ol><p>Otherwise (if <!--<var title="">value<sub>1</sub></var> is less
-    than or equal to 59, and either--> <var title="">position</var> is
+    </ol><p>Otherwise (if <var title="">most significant units</var> is not
+    <i title="">hours</i>, and either <var title="">position</var> is
     beyond the end of <var title="">input</var>, or the character at
     <var title="">position</var> is not a U+003A COLON character (:)),
     let <var title="">value<sub>3</sub></var> have the value of <var title="">value<sub>2</sub></var>, then <var title="">value<sub>2</sub></var> have the value of <var title="">value<sub>1</sub></var>, then let <var title="">value<sub>1</sub></var> equal zero.</p>
 
    </li>
 
-   <li><p>If <var title="">position</var> is beyond the end of <var title="">input</var> or if the character at <var title="">position</var> is not either a U+002C COMMA character (,)
-   or a U+002E FULL STOP character (.), then return an error and abort
-   these steps. Otherwise, move <var title="">position</var> forwards
-   one character.</li>
+   <li><p>If <var title="">position</var> is beyond the end of <var title="">input</var> or if the character at <var title="">position</var> is not a U+002E FULL STOP character (.),
+   then return an error and abort these steps. Otherwise, move <var title="">position</var> forwards one character.</li>
 
    <li><p>If the character indicated by <var title="">position</var>
    is not one of U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9), then
@@ -29891,18 +30038,19 @@
 
    <li><p><a href=#collect-a-sequence-of-characters>Collect a sequence of characters</a> in the range
    U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9), and let <var title="">string</var> be the collected substring.</li>
-<!--
+
    <li><p>If <var title="">string</var> is not exactly three
    characters in length, return an error and abort these
-   steps.</p></li>
--->
+   steps.</li>
+
    <li><p>Interpret <var title="">string</var> as a base-ten
    integer. Let <var title="">value<sub>4</sub></var> be that
    integer.</li>
 
-<!--
-   (this is where checks of the ranges of the data would go, to make sure thousandsth < 1000, seconds < 60, minutes < 60)
--->
+   <li><p>If <var title="">value<sub>2</sub></var> is greater than 59,
+   if <var title="">value<sub>3</sub></var> is greater than 59, or if
+   <var title="">value<sub>4</sub></var> is greater than 999, return
+   an error and abort these steps.</li>
 
    <li><p>Let <var title="">result</var> be <span title=""><var title="">value<sub>1</sub></var>×60×60 + <var title="">value<sub>2</sub></var>×60 + <var title="">value<sub>3</sub></var> + <var title="">value<sub>4</sub></var>∕1000</span>. <!-- &#x00f7;
    is the division sign if people prefer that to the slash
@@ -29910,100 +30058,6 @@
 
    <li><p>Return <var title="">result</var>.</li>
 
-  </ol><p>When the steps above say that a user agent is to <dfn id=collect-websrt-cue-voice-and-text>collect
-  WebSRT cue voice and text</dfn> from a string <var title="">input</var> for a <a href=#timed-track-cue>timed track cue</a> <var title="">cue</var>, the user agent must run the following steps:</p>
-
-  <ol><li><p>Let <var title="">input</var> be the string being
-   parsed.</li>
-
-   <li><p>Let <var title="">position</var> be a pointer into <var title="">input</var>, initially pointing at the start of the
-   string.</li>
-
-   <li><p>If <var title="">position</var> is past the end of <var title="">input</var>, return an error and abort these
-   steps.</li>
-
-   <li>
-
-    <p>Examine the first few characters of <var title="">input</var>
-    and process them as described by the match set of rules from the
-    following list:</p>
-
-    <dl class=switch><dt>If <var title="">input</var> starts with the string "<code title=""><narrator></code>"</dt>
-     <dd>
-      <p>Let <var title="">cue</var>'s <a href=#timed-track-cue-voice-identifier>timed track cue voice
-      identifier</a> be the string "<code title="timed track cue narrator voice"><a href=#timed-track-cue-narrator-voice>narrator</a></code>"
-      and advance <var title="">position</var> past the matching substring.</p>
-     </dd>
-
-     <dt>If <var title="">input</var> starts with the string "<code title=""><music></code>"</dt>
-     <dd>
-      <p>Let <var title="">cue</var>'s <a href=#timed-track-cue-voice-identifier>timed track cue voice
-      identifier</a> be the string "<code title="timed track cue music voice"><a href=#timed-track-cue-music-voice>music</a></code>"
-      and advance <var title="">position</var> past the matching substring.</p>
-     </dd>
-
-     <dt>If <var title="">input</var> starts with the string "<code title=""><lyric></code>"</dt>
-     <dd>
-      <p>Let <var title="">cue</var>'s <a href=#timed-track-cue-voice-identifier>timed track cue voice
-      identifier</a> be the string "<code title="timed track cue lyric voice"><a href=#timed-track-cue-lyric-voice>lyric</a></code>"
-      and advance <var title="">position</var> past the matching substring.</p>
-     </dd>
-
-     <dt>If <var title="">input</var> starts with the string "<code title=""><sound></code>"</dt>
-     <dd>
-      <p>Let <var title="">cue</var>'s <a href=#timed-track-cue-voice-identifier>timed track cue voice
-      identifier</a> be the string "<code title="timed track cue sound voice"><a href=#timed-track-cue-sound-voice>sound</a></code>"
-      and advance <var title="">position</var> past the matching substring.</p>
-     </dd>
-
-     <dt>If <var title="">input</var> starts with the string "<code title=""><comment></code>"</dt>
-     <dd>
-      <p>Let <var title="">cue</var>'s <a href=#timed-track-cue-voice-identifier>timed track cue voice
-      identifier</a> be the string "<code title="timed track cue comment voice"><a href=#timed-track-cue-comment-voice>comment</a></code>"
-      and advance <var title="">position</var> past the matching substring.</p>
-     </dd>
-
-     <dt>If <var title="">input</var> starts with the string "<code title=""><credit></code>"</dt>
-     <dd>
-      <p>Let <var title="">cue</var>'s <a href=#timed-track-cue-voice-identifier>timed track cue voice
-      identifier</a> be the string "<code title="timed track cue credit voice"><a href=#timed-track-cue-credit-voice>credit</a></code>"
-      and advance <var title="">position</var> past the matching substring.</p>
-     </dd>
-
-
-     <dt>If <var title="">input</var> starts with a U+003C LESS-THAN
-     SIGN character (<), followed by a character in the range
-     U+0031 DIGIT ONE (1) to U+0039 DIGIT NINE (9), followed by zero
-     or more characters in the range U+0030 DIGIT ZERO (0) to U+0039
-     DIGIT NINE (9), followed by a U+003E GREATER-THAN SIGN character
-     (>)</dt>
-
-     <dd>
-      <p>Let <var title="">cue</var>'s <a href=#timed-track-cue-voice-identifier>timed track cue voice
-      identifier</a> be the string of digits (characters in the
-      range U+0030 DIGIT ZERO to U+0039 DIGIT NINE) in the matching
-      substring, and advance <var title="">position</var> past the
-      matching substring.</p>
-     </dd>
-
-     <dt>Otherwise</dt>
-     <dd>
-      <p>Leave the <var title="">cue</var>'s <a href=#timed-track-cue-voice-identifier>timed track cue voice
-      identifier</a> set to the empty string.</p>
-     </dd>
-
-    </dl></li>
-
-   <li><p>If <var title="">position</var> is past the end of <var title="">input</var>, return an error and abort these
-   steps.</li>
-
-   <li><p>Let the <a href=#timed-track-cue-text>timed track cue text</a> of <var title="">cue</var> be the substring of <var title="">input</var>
-   from the position indicated by <var title="">position</var> to the
-   end of the <var title="">input</var>, and let the rules for its
-   interpretation be the <a href=#websrt-cue-text-parsing-rules>WebSRT cue text parsing rules</a>,
-   the <a href=#websrt-cue-text-rendering-rules>WebSRT cue text rendering rules</a>, and the
-   <a href=#websrt-cue-text-dom-construction-rules>WebSRT cue text DOM construction rules</a>.</li>
-
   </ol><h6 id=websrt-cue-text-parsing-rules><span class=secno>4.8.10.11.3 </span><dfn>WebSRT cue text parsing rules</dfn></h6>
 
   <p>A <dfn id=websrt-node-object>WebSRT Node Object</dfn> is a conceptual construct used to
@@ -30023,10 +30077,14 @@
   list of child <a href=#websrt-node-object title="WebSRT Node Object">WebSRT Node
   Objects</a>. The <a href=#websrt-internal-node-object>WebSRT Internal Node Object</a> is said
   to be the <i>parent</i> of the children. Cycles do not occur; the
-  parent-child relationships so constructed form a tree structure.</p>
+  parent-child relationships so constructed form a tree structure.
+  <a href=#websrt-internal-node-object title="WebSRT Internal Node Object">WebSRT Internal Node
+  Objects</a> also have an ordered list of class names, know as
+  their <dfn id="websrt-node-object's-applicable-classes" title="WebSRT Node Object's applicable
+  classes">applicable classes</dfn>.</p>
 
-  <p>There are five concrete classes of <a href=#websrt-internal-node-object title="WebSRT Internal
-  Node Object">WebSRT Internal Node Objects</a>:</p>
+  <p>There are several concrete classes of <a href=#websrt-internal-node-object title="WebSRT
+  Internal Node Object">WebSRT Internal Node Objects</a>:</p>
 
   <dl><dt><dfn id=list-of-websrt-node-objects title="List of WebSRT Node Objects">Lists of WebSRT Node Objects</dfn></dt>
    <dd>
@@ -30034,6 +30092,15 @@
     Node Object">WebSRT Node Objects</a>.</p>
    </dd>
 
+   <dt><dfn id=websrt-class-object title="WebSRT Class Object">WebSRT Class Objects</dfn></dt>
+   <dd>
+    <p>These represent spans of text (a <a href=#websrt-cue-class-span>WebSRT cue class
+    span</a>) in <a href=#websrt-cue-text>WebSRT cue text</a>, and are used to
+    annotate parts of the cue with <a href="#websrt-node-object's-applicable-classes" title="WebSRT Node Object's
+    applicable classes">applicable classes</a> without implying
+    further meaning (such as italics or bold).</p>
+   </dd>
+
    <dt><dfn id=websrt-italic-object title="WebSRT Italic Object">WebSRT Italic Objects</dfn></dt>
    <dd>
     <p>These represent spans of italic text (a <a href=#websrt-cue-italics-span>WebSRT cue
@@ -30054,11 +30121,18 @@
 
    <dt><dfn id=websrt-ruby-text-object title="WebSRT Ruby Text Object">WebSRT Ruby Text Objects</dfn></dt>
    <dd>
-    <p>These represent spans of ruby text (the component of a
-    <a href=#websrt-cue-ruby-span>WebSRT cue ruby span</a> that is between the "<code title=""><rt></code>" and "<code title=""></rt></code>" strings) in <a href=#websrt-cue-text>WebSRT cue
-    text</a>.</p>
+    <p>These represent spans of ruby text (a <a href=#websrt-cue-ruby-text-span>WebSRT cue ruby
+    text span</a>) in <a href=#websrt-cue-text>WebSRT cue text</a>.</p>
    </dd>
 
+   <dt><dfn id=websrt-voice-object title="WebSRT Voice Object">WebSRT Voice Objects</dfn></dt>
+   <dd>
+    <p>These represent spans of text associated with a specific voice
+    (a <a href=#websrt-cue-voice-span>WebSRT cue voice span</a>) in <a href=#websrt-cue-text>WebSRT cue
+    text</a>. A <a href=#websrt-voice-object>WebSRT Voice Object</a> has a value, which
+    is the name of the voice.</p>
+   </dd>
+
   </dl><p><dfn id=websrt-leaf-node-object title="WebSRT Leaf Node Object">WebSRT Leaf Node
   Objects</dfn> are those that contain data, such as text, and cannot
   contain child <a href=#websrt-node-object title="WebSRT Node Object">WebSRT Node
@@ -30130,61 +30204,56 @@
         <p>Ignore the token.</p>
        </dd>
 
+       <dt>If the tag name is "<code title="">c</code>"</dt>
+       <dd>
+        <p><a href=#attach-a-websrt-internal-node-object title="attach a WebSRT Internal Node
+        Object">Attach</a> a <a href=#websrt-class-object>WebSRT Class Object</a>.</p>
+       </dd>
+
        <dt>If the tag name is "<code title="">i</code>"</dt>
        <dd>
-        <p>Create a <a href=#websrt-italic-object>WebSRT Italic Object</a>, and <a href=#attach-a-websrt-internal-node-object title="attach a WebSRT Internal Node Object">attach
-        it</a>.</p>
+        <p><a href=#attach-a-websrt-internal-node-object title="attach a WebSRT Internal Node
+        Object">Attach</a> a <a href=#websrt-italic-object>WebSRT Italic Object</a>.</p>
        </dd>
 
        <dt>If the tag name is "<code title="">b</code>"</dt>
        <dd>
-        <p>Create a <a href=#websrt-bold-object>WebSRT Bold Object</a>, and <a href=#attach-a-websrt-internal-node-object title="attach a WebSRT Internal Node Object">attach
-        it</a>.</p>
+        <p><a href=#attach-a-websrt-internal-node-object title="attach a WebSRT Internal Node
+        Object">Attach</a> a <a href=#websrt-bold-object>WebSRT Bold Object</a>.</p>
        </dd>
 
        <dt>If the tag name is "<code title="">ruby</code>"</dt>
        <dd>
-        <p>Create a <a href=#websrt-ruby-object>WebSRT Ruby Object</a>, and <a href=#attach-a-websrt-internal-node-object title="attach a WebSRT Internal Node Object">attach
-        it</a>.</p>
+        <p><a href=#attach-a-websrt-internal-node-object title="attach a WebSRT Internal Node
+        Object">Attach</a> a <a href=#websrt-ruby-object>WebSRT Ruby Object</a>.</p>
        </dd>
 
        <dt>If the tag name is "<code title="">rt</code>"</dt>
        <dd>
         <p>If <var title="">current</var> is a <a href=#websrt-ruby-object>WebSRT Ruby
-        Object</a>, then create a <a href=#websrt-ruby-text-object>WebSRT Ruby Text
-        Object</a>, and <a href=#attach-a-websrt-internal-node-object title="attach a WebSRT Internal Node
-        Object">attach it</a>.</p>
-        <p>Otherwise, ignore the token.</p>
+        Object</a>, then <a href=#attach-a-websrt-internal-node-object title="attach a WebSRT Internal Node
+        Object">attach</a> a <a href=#websrt-ruby-text-object>WebSRT Ruby Text
+        Object</a>.</p>
        </dd>
 
+       <dt>If the tag name is "<code title="">v</code>"</dt>
+       <dd>
+        <p><a href=#attach-a-websrt-internal-node-object title="attach a WebSRT Internal Node
+        Object">Attach</a> a <a href=#websrt-voice-object>WebSRT Voice Object</a>, and
+        set its value to the token's annotation string.</p>
+       </dd>
+
        <dt>Otherwise</dt>
        <dd>
+        <p>Ignore the token.</p>
+       </dd>
 
-        <ol><li><p>Let <var title="">input</var> be the tag name.</li>
-
-         <li><p>Let <var title="">position</var> be a pointer into
-         <var title="">input</var>, initially pointing at the start of
-         the string.</li>
-
-         <li><p><a href=#collect-a-websrt-timestamp>Collect a WebSRT timestamp</a>.</li>
-
-         <li>
-
-          <p>If that algorithm does not fail, and if <var title="">position</var> now points at the end of <var title="">input</var> (i.e. there are no trailing characters
-          after the timestamp), then create a <a href=#websrt-timestamp-object>WebSRT Timestamp
-          Object</a> whose value is the collected time, then append
-          it to <var title="">current</var>.</p>
-
-          <p>Otherwise, ignore the token.</p>
-
-         </li>
-
-        </ol></dd>
-
       </dl><p>When the steps above say to <dfn id=attach-a-websrt-internal-node-object>attach a WebSRT Internal
-      Node Object</dfn> <var title="">node object</var>, the user
-      agent must append <var title="">node object</var> to <var title="">current</var>, then let <var title="">current</var> be
-      <var title="">node object</var>.</p>
+      Node Object</dfn> of a particular class, the user agent must
+      first create an object of the specified class, then set its list
+      of <a href="#websrt-node-object's-applicable-classes" title="WebSRT Node Object's applicable
+      classes">applicable classes</a> to the list of classes in the
+      token, append the newly created node object to <var title="">current</var>, and finally let <var title="">current</var> be the newly created node object.</p>
 
      </dd>
 
@@ -30194,6 +30263,10 @@
       <p>If any of the following conditions is true, then let <var title="">current</var> be the parent node of <var title="">current</var>.</p>
 
       <ul class=brief><li>The tag name of the end tag token <var title="">token</var>
+       is "<code title="">c</code>" and <var title="">current</var> is
+       a <a href=#websrt-class-object>WebSRT Class Object</a>.</li>
+
+       <li>The tag name of the end tag token <var title="">token</var>
        is "<code title="">i</code>" and <var title="">current</var> is
        a <a href=#websrt-italic-object>WebSRT Italic Object</a>.</li>
 
@@ -30209,6 +30282,10 @@
        is "<code title="">rt</code>" and <var title="">current</var> is
        a <a href=#websrt-ruby-text-object>WebSRT Ruby Text Object</a>.</li>
 
+       <li>The tag name of the end tag token <var title="">token</var>
+       is "<code title="">v</code>" and <var title="">current</var> is
+       a <a href=#websrt-voice-object>WebSRT Voice Object</a>.</li>
+
       </ul><p>Otherwise, if the tag name of the end tag token <var title="">token</var> is "<code title="">ruby</code>" and <var title="">current</var> is a <a href=#websrt-ruby-text-object>WebSRT Ruby Text
       Object</a>, then let <var title="">current</var> be the
       parent node of <var title="">current</var> of the parent node of
@@ -30218,14 +30295,39 @@
 
      </dd>
 
+     <dt>If <var title="">token</var> is a timestamp tag</dt>
+     <dd>
+
+      <ol><li><p>Let <var title="">input</var> be the tag value.</li>
+
+       <li><p>Let <var title="">position</var> be a pointer into
+       <var title="">input</var>, initially pointing at the start of
+       the string.</li>
+
+       <li><p><a href=#collect-a-websrt-timestamp>Collect a WebSRT timestamp</a>.</li>
+
+       <li>
+
+        <p>If that algorithm does not fail, and if <var title="">position</var> now points at the end of <var title="">input</var> (i.e. there are no trailing characters
+        after the timestamp), then create a <a href=#websrt-timestamp-object>WebSRT Timestamp
+        Object</a> whose value is the collected time, then append
+        it to <var title="">current</var>.</p>
+
+        <p>Otherwise, ignore the token.</p>
+
+       </li>
+
+      </ol></dd>
+
     </dl></li>
 
    <li><p>Jump to the step labeled <i>loop</i>.</li>
 
   </ol><p>The <dfn id=websrt-cue-text-tokeniser>WebSRT cue text tokeniser</dfn> is as follows. It emits
   a token, which is either a string (whose value is a sequence of
-  Unicode characters), a start tag (with a tag name), or an end tag
-  (with a tag name).</p>
+  Unicode characters), a start tag (with a tag name, a list of
+  classes, and optionally an annotation), an end tag (with a tag
+  name), or a timestamp tag (with a tag value).</p>
 
   <ol><li><p>Let <var title="">input</var> and <var title="">position</var> be the same variables as those of the same
    name in the algorithm that invoked these steps.</li>
@@ -30235,8 +30337,10 @@
 
    <li><p>Let <var title="">result</var> be the empty string.</li>
 
-   <li><p>Let <var title="">escape</var> be the empty string.</li>
+   <li><p>Let <var title="">buffer</var> be the empty string.</li>
 
+   <li><p>Let <var title="">classes</var> be an empty list.</li>
+
    <li><p><i>Loop</i>: If <var title="">position</var> is past the end of
    <var title="">input</var>, let <var title="">c</var> be an
    end-of-file marker. Otherwise, let <var title="">c</var> be the
@@ -30255,7 +30359,7 @@
 
       <dl><dt>U+0026 AMPERSAND (&)</dt>
        <dd>
-        <p>Set <var title="">escape</var> to <var title="">c</var>,
+        <p>Set <var title="">buffer</var> to <var title="">c</var>,
         set <var title="">tokeniser state</var> to the <a href=#websrt-escape-state>WebSRT
         escape state</a>, and jump to the step labeled
         <i>next</i>.</p>
@@ -30291,15 +30395,18 @@
       <dl><dt>U+003B SEMICOLON character (;)</dt>
        <dd>
 
-        <p>First, examine the value of <var title="">escape</var>:</p>
+        <p>First, examine the value of <var title="">buffer</var>:</p>
 
-        <p>If <var title="">escape</var> is the string "<code title="">&amp</code>", then append a U+0026 AMPERSAND
+        <p>If <var title="">buffer</var> is the string "<code title="">&amp</code>", then append a U+0026 AMPERSAND
         character (&) to <var title="">result</var>.</p>
 
-        <p>If <var title="">escape</var> is the string "<code title="">&lt</code>", then append a U+003C LESS-THAN SIGN
+        <p>If <var title="">buffer</var> is the string "<code title="">&lt</code>", then append a U+003C LESS-THAN SIGN
         character (<) to <var title="">result</var>.</p>
 
-        <p>Otherwise, append <var title="">escape</var> followed by a
+        <p>If <var title="">buffer</var> is the string "<code title="">&gt</code>", then append a U+003E GREATER-THAN SIGN
+        character (>) to <var title="">result</var>.</p>
+
+        <p>Otherwise, append <var title="">buffer</var> followed by a
         U+003B SEMICOLON character (;) to <var title="">result</var>.</p>
 
         <p>Then, in any case, set <var title="">tokeniser state</var>
@@ -30308,23 +30415,23 @@
 
        </dd>
 
+       <dt>Characters in the range U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9)</dt>
+       <dt>Characters in the range U+0041 LATIN CAPITAL LETTER A to U+005A LATIN CAPITAL LETTER Z</dt>
        <dt>Characters in the range U+0061 LATIN SMALL LETTER A to U+007A LATIN SMALL LETTER Z</dt>
-       <dt>Characters in the range U+0041 LATIN CAPITAL LETTER A to U+005A LATIN CAPITAL LETTER Z</dt>
-       <dt>Characters in the range U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9)</dt>
        <dd>
-        <p>Append <var title="">c</var> to <var title="">escape</var>
+        <p>Append <var title="">c</var> to <var title="">buffer</var>
         and jump to the step labeled <i>next</i>.</p>
        </dd>
 
        <dt>End-of-file marker</dt>
        <dd>
-        <p>Append <var title="">escape</var> to <var title="">result</var>, return a string token whose value is
+        <p>Append <var title="">buffer</var> to <var title="">result</var>, return a string token whose value is
         <var title="">result</var>, and abort these steps.</p>
        </dd>
 
        <dt>Anything else</dt>
        <dd>
-        <p>Append <var title="">escape</var> to <var title="">result</var>, set <var title="">tokeniser state</var>
+        <p>Append <var title="">buffer</var> to <var title="">result</var>, set <var title="">tokeniser state</var>
         to the <a href=#websrt-data-state>WebSRT data state</a>, and jump to the step
         labeled <i>next</i>.</p>
        </dd> 
@@ -30337,18 +30444,43 @@
 
       <p>Jump to the entry that matches the value of <var title="">c</var>:</p>
 
-      <dl><dt>U+002F SOLIDUS character (/)</dt>
+      <dl><dt>U+0020 SPACE character</dt>
+       <dt>U+0009 CHARACTER TABULATION (tab) character</dt>
        <dd>
+        <!-- assert: >result< is the empty string -->
+        <p>Set <var title="">tokeniser state</var> to the <a href=#websrt-start-tag-annotation-state>WebSRT
+        start tag annotation state</a>, and jump to the step labeled
+        <i>next</i>.</p>
+       </dd> 
+
+       <dt>U+002E FULL STOP character (.)</dt>
+       <dd>
+        <!-- assert: >result< is the empty string -->
+        <p>Set <var title="">tokeniser state</var> to the <a href=#websrt-start-tag-class-state>WebSRT
+        start tag class state</a>, and jump to the step labeled
+        <i>next</i>.</p>
+       </dd> 
+
+       <dt>U+002F SOLIDUS character (/)</dt>
+       <dd>
         <p>Set <var title="">tokeniser state</var> to the <a href=#websrt-end-tag-state>WebSRT
         end tag state</a>, and jump to the step labeled
         <i>next</i>.</p>
        </dd>
 
+       <dt>Characters in the range U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9)</dt>
+       <dd>
+        <p>Set <var title="">result</var> to <var title="">c</var>,
+        set <var title="">tokeniser state</var> to the <a href=#websrt-timestamp-tag-state>WebSRT
+        timestamp tag state</a>, and jump to the step labeled
+        <i>next</i>.</p>
+       </dd> 
+
        <dt>U+003E GREATER-THAN SIGN character (>)</dt>
        <dt>End-of-file marker</dt>
        <dd>
-        <p>Return a start tag whose tag name is the empty string and
-        abort these steps.</p>
+        <p>Return a start tag whose tag name is the empty string, with
+        no classes and no annotation, and abort these steps.</p>
        </dd>
 
        <dt>Anything else</dt>
@@ -30367,10 +30499,26 @@
 
       <p>Jump to the entry that matches the value of <var title="">c</var>:</p>
 
-      <dl><dt>U+003E GREATER-THAN SIGN character (>)</dt>
+      <dl><dt>U+0020 SPACE character</dt>
+       <dt>U+0009 CHARACTER TABULATION (tab) character</dt>
+       <dd>
+        <p>Set <var title="">tokeniser state</var> to the <a href=#websrt-start-tag-annotation-state>WebSRT
+        start tag annotation state</a>, and jump to the step labeled
+        <i>next</i>.</p>
+       </dd> 
+
+       <dt>U+002E FULL STOP character (.)</dt>
+       <dd>
+        <p>Set <var title="">tokeniser state</var> to the <a href=#websrt-start-tag-class-state>WebSRT
+        start tag class state</a>, and jump to the step labeled
+        <i>next</i>.</p>
+       </dd> 
+
+       <dt>U+003E GREATER-THAN SIGN character (>)</dt>
        <dt>End-of-file marker</dt>
        <dd>
-        <p>Return a start tag whose tag name is <var title="">result</var> and abort these steps.</p>
+        <p>Return a start tag whose tag name is <var title="">result</var>, with no classes and no annotation, and
+        abort these steps.</p>
        </dd>
 
        <dt>Anything else</dt>
@@ -30381,6 +30529,74 @@
 
       </dl></dd>
 
+     <dt><dfn id=websrt-start-tag-class-state>WebSRT start tag class state</dfn></dt>
+
+     <dd>
+
+      <p>Jump to the entry that matches the value of <var title="">c</var>:</p>
+
+      <dl><dt>U+0020 SPACE character</dt>
+       <dt>U+0009 CHARACTER TABULATION (tab) character</dt>
+       <dd>
+        <p>Append to <var title="">classes</var> an entry whose value
+        is <var title="">buffer</var>, set <var title="">buffer</var>
+        to the empty string, set <var title="">tokeniser state</var>
+        to the <a href=#websrt-start-tag-annotation-state>WebSRT start tag annotation state</a>, and
+        jump to the step labeled <i>next</i>.</p>
+       </dd> 
+
+       <dt>U+002E FULL STOP character (.)</dt>
+       <dd>
+        <p>Append to <var title="">classes</var> an entry whose value
+        is <var title="">buffer</var>, set <var title="">buffer</var>
+        to the empty string, and jump to the step labeled
+        <i>next</i>.</p>
+       </dd> 
+
+       <dt>U+003E GREATER-THAN SIGN character (>)</dt>
+       <dt>End-of-file marker</dt>
+       <dd>
+        <p>Append to <var title="">classes</var> an entry whose value
+        is <var title="">buffer</var>, then return a start tag whose
+        tag name is <var title="">result</var>, with the classes given
+        in <var title="">classes</var> but no annotation, and abort
+        these steps.</p>
+       </dd>
+
+       <dt>Anything else</dt>
+       <dd>
+        <p>Append <var title="">c</var> to <var title="">buffer</var>
+        and jump to the step labeled <i>next</i>.</p>
+       </dd> 
+
+      </dl></dd>
+
+     <dt><dfn id=websrt-start-tag-annotation-state>WebSRT start tag annotation state</dfn></dt>
+
+     <dd>
+
+      <p>Jump to the entry that matches the value of <var title="">c</var>:</p>
+
+      <dl><dt>U+003E GREATER-THAN SIGN character (>)</dt>
+       <dt>End-of-file marker</dt>
+       <dd>
+        <p>Remove any leading or trailing U+0020 SPACE or U+0009
+        CHARACTER TABULATION (tab) characters from <var title="">buffer</var>, and replace any sequence of one or
+        more consecutive U+0020 SPACE and U+0009 CHARACTER TABULATION
+        (tab) characters in <var title="">buffer</var> with a single
+        U+0020 SPACE character; then, return a start tag whose tag name is
+        <var title="">result</var>, with the classes given in <var title="">classes</var>, and with <var title="">buffer</var> as
+        the annotation, and abort these steps.</p>
+       </dd>
+
+       <dt>Anything else</dt>
+       <dd>
+        <p>Append <var title="">c</var> to <var title="">buffer</var>
+        and jump to the step labeled <i>next</i>.</p>
+       </dd> 
+
+      </dl></dd>
+
      <dt><dfn id=websrt-end-tag-state>WebSRT end tag state</dfn></dt>
 
      <dd>
@@ -30401,6 +30617,26 @@
 
       </dl></dd>
 
+     <dt><dfn id=websrt-timestamp-tag-state>WebSRT timestamp tag state</dfn></dt>
+
+     <dd>
+
+      <p>Jump to the entry that matches the value of <var title="">c</var>:</p>
+
+      <dl><dt>U+003E GREATER-THAN SIGN character (>)</dt>
+       <dt>End-of-file marker</dt>
+       <dd>
+        <p>Return a timestamp tag whose tag name is <var title="">result</var> and abort these steps.</p>
+       </dd>
+
+       <dt>Anything else</dt>
+       <dd>
+        <p>Append <var title="">c</var> to <var title="">result</var>
+        and jump to the step labeled <i>next</i>.</p>
+       </dd>
+
+      </dl></dd>
+
     </dl></li>
 
    <li><p><i>Next</i>: Advance <var title="">position</var> to the next
@@ -30421,19 +30657,30 @@
      <th>DOM node
    <tbody><tr><td><a href=#list-of-websrt-node-objects>List of WebSRT Node Objects</a>
      <td><code><a href=#documentfragment>DocumentFragment</a></code> node
+    <tr><td><a href=#websrt-class-object>WebSRT Class Object</a>
+     <td><code><a href=#htmlelement>HTMLElement</a></code> element node with <code title=dom-Node-localName><a href=#dom-node-localname>localName</a></code> "<code><a href=#the-span-element>span</a></code>".
     <tr><td><a href=#websrt-italic-object>WebSRT Italic Object</a>
-     <td><code><a href=#htmlelement>HTMLElement</a></code> element node with <code title=dom-Node-localName><a href=#dom-node-localname>localName</a></code> "<code><a href=#the-i-element>i</a></code>" and the <code title=dom-Node-namespaceURI><a href=#dom-node-namespaceuri>namespaceURI</a></code> set to the <a href=#html-namespace-0>HTML namespace</a>.
+     <td><code><a href=#htmlelement>HTMLElement</a></code> element node with <code title=dom-Node-localName><a href=#dom-node-localname>localName</a></code> "<code><a href=#the-i-element>i</a></code>".
     <tr><td><a href=#websrt-bold-object>WebSRT Bold Object</a>
-     <td><code><a href=#htmlelement>HTMLElement</a></code> element node with <code title=dom-Node-localName><a href=#dom-node-localname>localName</a></code> "<code><a href=#the-b-element>b</a></code>" and the <code title=dom-Node-namespaceURI><a href=#dom-node-namespaceuri>namespaceURI</a></code> set to the <a href=#html-namespace-0>HTML namespace</a>.
+     <td><code><a href=#htmlelement>HTMLElement</a></code> element node with <code title=dom-Node-localName><a href=#dom-node-localname>localName</a></code> "<code><a href=#the-b-element>b</a></code>".
     <tr><td><a href=#websrt-ruby-object>WebSRT Ruby Object</a>
-     <td><code><a href=#htmlelement>HTMLElement</a></code> element node with <code title=dom-Node-localName><a href=#dom-node-localname>localName</a></code> "<code><a href=#the-ruby-element>ruby</a></code>" and the <code title=dom-Node-namespaceURI><a href=#dom-node-namespaceuri>namespaceURI</a></code> set to the <a href=#html-namespace-0>HTML namespace</a>.
+     <td><code><a href=#htmlelement>HTMLElement</a></code> element node with <code title=dom-Node-localName><a href=#dom-node-localname>localName</a></code> "<code><a href=#the-ruby-element>ruby</a></code>".
     <tr><td><a href=#websrt-ruby-text-object>WebSRT Ruby Text Object</a>
-     <td><code><a href=#htmlelement>HTMLElement</a></code> element node with <code title=dom-Node-localName><a href=#dom-node-localname>localName</a></code> "<code><a href=#the-rt-element>rt</a></code>" and the <code title=dom-Node-namespaceURI><a href=#dom-node-namespaceuri>namespaceURI</a></code> set to the <a href=#html-namespace-0>HTML namespace</a>.
+     <td><code><a href=#htmlelement>HTMLElement</a></code> element node with <code title=dom-Node-localName><a href=#dom-node-localname>localName</a></code> "<code><a href=#the-rt-element>rt</a></code>".
+    <tr><td><a href=#websrt-voice-object>WebSRT Voice Object</a>
+     <td><code><a href=#htmlelement>HTMLElement</a></code> element node with <code title=dom-Node-localName><a href=#dom-node-localname>localName</a></code> "<code><a href=#the-q-element>q</a></code>", a <code title=attr-title><a href=#the-title-attribute>title</a></code> attribute set to the <a href=#websrt-voice-object>WebSRT Voice Object</a>'s value.
     <tr><td><a href=#websrt-text-object>WebSRT Text Object</a>
      <td><code><a href=#text>Text</a></code> node whose character data is the value of the <a href=#websrt-text-object>WebSRT Text Object</a>.
     <tr><td><a href=#websrt-timestamp-object>WebSRT Timestamp Object</a>
      <td><code><a href=#processinginstruction>ProcessingInstruction</a></code> node whose <code title=dom-ProcessingInstruction-target>target</code> is "<code title="">timestamp</code>" and whose <code title=dom-ProcessingInstruction-data>data</code> is a <a href=#websrt-timestamp>WebSRT timestamp</a> representing the value of the <a href=#websrt-timestamp-object>WebSRT Timestamp Object</a>, with all optional components included and with the seconds separator being a U+002E FULL STOP character (.).
-  </table><p>The <code title=dom-Node-ownerDocument><a href=#dom-node-ownerdocument>ownerDocument</a></code>
+  </table><p><code><a href=#htmlelement>HTMLElement</a></code> nodes created as part of the mapping
+  described above must have their <code title=dom-Node-namespaceURI><a href=#dom-node-namespaceuri>namespaceURI</a></code> set to the
+  <a href=#html-namespace-0>HTML namespace</a>, and must have a <code title=attr-class><a href=#classes>class</a></code> attribute set to the string obtained
+  by concatenating all the classes that apply to the corresponding
+  <a href=#websrt-internal-node-object>WebSRT Internal Node Object</a>, each separated from the
+  next by a single U+0020 SPACE character.</p>
+
+  <p>The <code title=dom-Node-ownerDocument><a href=#dom-node-ownerdocument>ownerDocument</a></code>
   attribute of all nodes in the DOM tree must be set to the given
   document <var title="">owner</var>.</p>
 
@@ -30489,8 +30736,9 @@
   <p>For the purposes of listing chapters in the <a href=#media-resource>media
   resource</a>, only <a href=#timed-track title="timed track">timed tracks</a>
   in the <a href=#media-element>media element</a>'s <a href=#list-of-timed-tracks>list of timed
-  tracks</a> <a href=#timed-track-showing title="timed track showing">showing</a> and
-  whose <a href=#timed-track-kind>timed track kind</a> is <code title=dom-timedtrack-kind-chapters><a href=#dom-timedtrack-kind-chapters>chapters</a></code> should be used.
+  tracks</a> <a href=#timed-track-showing title="timed track showing">showing</a> or
+  <a href=#timed-track-showing-by-default title="timed track showing by default">showing by
+  default</a> and whose <a href=#timed-track-kind>timed track kind</a> is <code title=dom-timedtrack-kind-chapters><a href=#dom-timedtrack-kind-chapters>chapters</a></code> should be used.
   Each <a href=#timed-track-cue title="timed track cue">cue</a> in such a <a href=#timed-track>timed
   track</a> represents a chapter starting at the cue's <a href=#timed-track-cue-start-time title="timed track cue start time">start time</a>. The name of
   the chapter is the <a href=#timed-track-cue-text>timed track cue text</a>, interpreted
@@ -85106,7 +85354,8 @@
   to the user">exposing a user interface</a> for a
   <code><a href=#video>video</a></code> element, user agents should run the <a href=#rules-for-updating-the-timed-track-rendering>rules
   for updating the timed track rendering</a> of each of the <a href=#timed-track title="timed track">timed tracks</a> in the <code><a href=#video>video</a></code>
-  element's <a href=#list-of-timed-tracks>list of timed tracks</a> that are <a href=#timed-track-showing title="timed track showing">showing</a> (e.g., for <a href=#timed-track title="timed track">timed tracks</a> based on
+  element's <a href=#list-of-timed-tracks>list of timed tracks</a> that are <a href=#timed-track-showing title="timed track showing">showing</a> or <a href=#timed-track-showing-by-default title="timed
+  track showing by default">showing by default</a> (e.g., for <a href=#timed-track title="timed track">timed tracks</a> based on
   <a href=#websrt>WebSRT</a>, the <a href=#rules-for-updating-the-display-of-websrt-timed-tracks>rules for updating the display of
   WebSRT timed tracks</a>).</p>
 <!--KEEP-START w3c-html--><!--TT-->
@@ -85127,7 +85376,7 @@
 <!--<div data-component="other Hixie drafts (editor: Ian Hickson)">-->
   <div class=impl>
 
-  <h4 id=timed-tracks-0><span class=secno>14.3.2 </span>Timed tracks</h4>
+  <h4 id=timed-tracks><span class=secno>14.3.2 </span>Timed tracks</h4>
 
   <p class=note>This section is intended to be moved to its own CSS
   module once an editor is found to run with it.</p>
@@ -85171,12 +85420,11 @@
    user interface</a> for <var title="">video</var>, but now it is,
    let <var title="">reset</var> be true. Otherwise, let <var title="">reset</var> be false.</p>
 
-   <li><p>Let <var title="">tracks</var> be the subset of
-   <var title="">video</var>'s <a href=#list-of-timed-tracks>list of timed tracks</a> that
-   have as their <a href=#rules-for-updating-the-timed-track-rendering>rules for updating the timed track
-   rendering</a> these <a href=#rules-for-updating-the-display-of-websrt-timed-tracks>rules for updating the display of
-   WebSRT timed tracks</a>, and whose <a href=#timed-track-mode>timed track mode</a>
-   is <a href=#timed-track-showing title="timed track showing">showing</a>.</li>
+   <li><p>Let <var title="">tracks</var> be the subset of <var title="">video</var>'s <a href=#list-of-timed-tracks>list of timed tracks</a> that have
+   as their <a href=#rules-for-updating-the-timed-track-rendering>rules for updating the timed track rendering</a>
+   these <a href=#rules-for-updating-the-display-of-websrt-timed-tracks>rules for updating the display of WebSRT timed
+   tracks</a>, and whose <a href=#timed-track-mode>timed track mode</a> is <a href=#timed-track-showing title="timed track showing">showing</a> or <a href=#timed-track-showing-by-default title="timed
+   track showing by default">showing by default</a>.</li>
 
    <li><p>Let <var title="">cues</var> be an empty list of <a href=#timed-track-cue title="timed track cue">timed track cues</a>.</li>
 
@@ -85315,10 +85563,10 @@
      <li><p>If the <a href=#timed-track-cue-writing-direction>timed track cue writing direction</a> is
      <a href=#timed-track-cue-horizontal-writing-direction title="timed track cue horizontal writing
      direction">horizontal</a>, then let <var title="">width</var>
-     be '<var title="">size</var>vw' and <var title="">height</var> be
-     'auto'. Otherwise, let <var title="">width</var> be 'auto' and
-     <var title="">height</var> be '<var title="">size</var>vh'. (These are CSS values used by the next
-     section to set CSS properties for the rendering.)</li>
+     be '<var title="">size</var> vw' and <var title="">height</var> be 'auto'. Otherwise, let <var title="">width</var> be 'auto' and <var title="">height</var> be
+     '<var title="">size</var> vh'. (These are CSS values used
+     by the next section to set CSS properties for the rendering; 'vw'
+     and 'vh' are CSS units.) <a href=#refsCSSVALUES>[CSSVALUES]</a></li>
 
      <li>
 
@@ -85422,9 +85670,10 @@
 
       </dl></li>
 
-     <li><p>Let <var title="">left</var> be '<var title="">x-position</var>vw' and <var title="">top</var> be '<var title="">y-position</var>vh'. (These again are CSS values used by
-     the next section to set CSS properties for the
-     rendering.)</li>
+     <li><p>Let <var title="">left</var> be '<var title="">x-position</var> vw' and <var title="">top</var>
+     be '<var title="">y-position</var> vh'. (These again are
+     CSS values used by the next section to set CSS properties for the
+     rendering; 'vw' and 'vh' are CSS units.) <a href=#refsCSSVALUES>[CSSVALUES]</a></li>
 
      <li>
 
@@ -85432,20 +85681,21 @@
       obtaining a set of CSS boxes positioned relative to an initial
       containing block: <a href=#refsCSS>[CSS]</a></p>
 
-      <ul><li>The <i>document tree</i> is the tree of <a href=#websrt-node-object title="WebSRT
-       Node Object">WebSRT Node Objects</a> rooted at <var title="">nodes</var>.</li>
+      <ul><li><p>The <i>document tree</i> is the tree of <a href=#websrt-node-object title="WebSRT Node Object">WebSRT Node Objects</a> rooted at
+       <var title="">nodes</var>.</li>
 
-       <li>For the purposes of processing by the CSS specification,
+       <li><p>For the purposes of processing by the CSS specification,
        <a href=#websrt-internal-node-object title="WebSRT Internal Node Object">WebSRT Internal Node
        Objects</a> are equivalent to elements with the same
-       contents. The name of these elements is not explicitly
-       specified. These elements have no attributes.</li>
+       contents.</li>
 
        <li>For the purposes of processing by the CSS
        specification, <a href=#websrt-text-object title="WebSRT Text Object">WebSRT Text
        Objects</a> are equivalent to text nodes.</li>
 
-       <li>No style sheets are associated with <var title="">nodes</var>.</li>
+       <li>No style sheets are associated with <var title="">nodes</var>. (The nodes are subsequently restyled
+       using style sheets after their boxes are generated, as
+       described below.)</li>
 
        <li>The children of the <var title="">nodes</var> must be
        wrapped in an anonymous box whose 'display' property has the
@@ -85767,7 +86017,7 @@
   text rendering rules</a>, <a href=#websrt-node-object title="WebSRT Node Object">WebSRT
   Node Objects</a> in the <a href=#list-of-websrt-node-objects>list of WebSRT Node Objects</a>
   used in the rendering can be matched by certain pseudo-selectors as
-  defined below. These selector can begin or stop matching individual
+  defined below. These selectors can begin or stop matching individual
   <a href=#websrt-node-object title="WebSRT Node Object">WebSRT Node Objects</a> while a
   <a href=#timed-track-cue title="timed track cue">cue</a> is being rendered, even in
   between applications of the <a href=#websrt-cue-text-rendering-rules>WebSRT cue text rendering
@@ -85786,23 +86036,25 @@
   <code><a href=#video>video</a></code> element, the pseudo-elements defined below won't
   have any effect according to this specification.</p>
 
+  <p>A CSS user agent that implements the <a href=#timed-track title="timed
+  track">timed tracks</a> model must implement the '::cue' and
+  '::cue(<var title="">selector</var>)' pseudo-elements, and the
+  ':past' and ':future' pseudo-classes.</p>
 
+
   <h6 id="the-'::cue'-pseudo-element"><span class=secno>14.3.2.3.1 </span>The '::cue' pseudo-element</h6>
 
-  <p>A CSS user agent that implemented the <a href=#timed-track title="timed
-  track">timed tracks</a> model must implement the '::cue'
-  pseudo-element.</p>
+  <p>The '<dfn id=pseudo-cue title=pseudo-cue>::cue</dfn>' pseudo-element (with no
+  argument) matches any <a href=#list-of-websrt-node-objects>List of WebSRT Node Objects</a>
+  constructed for the <i>matched element</i>, with the exception that
+  the properties corresponding to the 'background' shorthand must be
+  applied to the <a href=#websrt-cue-background-box>WebSRT cue background box</a> rather than
+  the <a href=#list-of-websrt-node-objects>List of WebSRT Node Objects</a>.</p>
 
-  <p>The '<dfn id=pseudo-cue title=pseudo-cue>::cue</dfn>' pseudo-element matches
-  any <a href=#list-of-websrt-node-objects>List of WebSRT Node Objects</a> constructed for the
-  <i>matched element</i>, with the exception that the properties
-  corresponding to the 'background' shorthand must be applied to the
-  <a href=#websrt-cue-background-box>WebSRT cue background box</a> rather than the <a href=#list-of-websrt-node-objects>List of
-  WebSRT Node Objects</a>.</p>
+  <p>The following properties apply to the '::cue' pseudo-element with
+  no argument; other properties set on the pseudo-element must be
+  ignored:</p>
 
-  <p>The following properties apply to the '::cue' pseudo-element;
-  other properties set on the pseudo-element must be ignored:</p>
-
   <ul class=brief><li>'color'</li>
    <li>'text-shadow'</li>
    <li>'text-outline'</li>
@@ -85817,139 +86069,76 @@
           min-height, max-width, min-width, orphans, overflow,
           page-break-*, text-align, unicode-bidi, widows, z-index
    -->
-  </ul><h6 id="the-'::cue-part'-pseudo-element"><span class=secno>14.3.2.3.2 </span>The '::cue-part' pseudo-element</h6>
+  </ul><p>The '<dfn id=pseudo-cue-selector title=pseudo-cue-selector>::cue(<var title="">selector</var>)</dfn>' pseudo-element with an argument must
+  have an argument that consists of a group of selectors. It matches
+  any <a href=#websrt-internal-node-object>WebSRT Internal Node Object</a> constructed for the
+  <i>matched element</i> that also matches the given group of
+  selectors, with the nodes being treated as follows:</p>
 
-  <p>A CSS user agent that implemented the <a href=#timed-track title="timed
-  track">timed tracks</a> model must implement the '::cue-part(<var title="">filter</var>)' pseudo-element.</p>
+  <ul><li><p>The <i>document tree</i> against which the selectors are
+   matched is the tree of <a href=#websrt-node-object title="WebSRT Node Object">WebSRT Node
+   Objects</a> rooted at the <a href=#list-of-websrt-node-objects>list of WebSRT Node
+   Objects</a> for the cue.</li>
 
-  <p>The '<dfn id=pseudo-cue-part title=pseudo-cue-part>::cue-part(<var title="">argument</var>)</dfn>' pseudo-element matches any
-  <a href=#websrt-node-object>WebSRT Node Object</a> constructed for the <i>matched
-  element</i> that matches the given <var title="">argument</var>.</p>
+   <li><p><a href=#websrt-internal-node-object title="WebSRT Internal Node Object">WebSRT Internal
+   Node Objects</a> are elements in the tree.</li>
 
-  <p>The <var title="">argument</var> must match the syntax
-  "<voice> || <part> || <position> || <future-compatibility>". <a href=#refsCSS>[CSS]</a></p>
-  
-  <p>The "<voice>" component must be either a non-negative
-  <integer> or one of the keywords "<code title=pseudo-cue-part-narrator><a href=#pseudo-cue-part-narrator>narrator</a></code>", "<code title=pseudo-cue-part-music><a href=#pseudo-cue-part-music>music</a></code>", "<code title=pseudo-cue-part-lyric><a href=#pseudo-cue-part-lyric>lyric</a></code>", "<code title=pseudo-cue-part-sound><a href=#pseudo-cue-part-sound>sound</a></code>", "<code title=pseudo-cue-part-comment><a href=#pseudo-cue-part-comment>comment</a></code>", or "<code title=pseudo-cue-part-credit><a href=#pseudo-cue-part-credit>credit</a></code>".</p>
+   <li><a href=#websrt-leaf-node-object title="WebSRT Leaf Node Object">WebSRT Leaf Node
+   Objects</a> cannot be matched.</li>
 
-  <p>The "<part>" component must be one of the keywords "<code title=pseudo-cue-part-i><a href=#pseudo-cue-part-i>i</a></code>", "<code title=pseudo-cue-part-b><a href=#pseudo-cue-part-b>b</a></code>", "<code title=pseudo-cue-part-ruby><a href=#pseudo-cue-part-ruby>ruby</a></code>", or "<code title=pseudo-cue-part-rt><a href=#pseudo-cue-part-rt>rt</a></code>".</p>
+   <li>
 
-  <p>The "<position>" component must be one of the keywords "<code title=pseudo-cue-part-past><a href=#pseudo-cue-part-past>past</a></code>" or "<code title=pseudo-cue-part-future><a href=#pseudo-cue-part-future>future</a></code>".</p>
+    <p>For the purposes of element type selectors, the names of <a href=#websrt-internal-node-object title="WebSRT Internal Node Object">WebSRT Internal Node
+    Objects</a> are as given by the following table, where objects
+    having the concrete class given in a cell in the first column have
+    the name given by the second column of the same row:</p>
 
-  <p>The "<future-compatibility>" component can be any
-  identifier.</p>
+    <table><thead><tr><th>Concrete class
+       <th>Name
 
-  <p>Each component of <var title="">argument</var> restricts which
-  <a href=#websrt-node-object title="WebSRT Node Object">WebSRT Node Objects</a> are
-  matched by the pseudo-element, as follows:</p>
+     <tbody><tr><td><a href=#websrt-class-object title="WebSRT Class Object">WebSRT Class Objects</a>
+       <td><code title="">c</code>
 
-  <dl><dt>An integer greater than or equal to zero</dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <a href=#websrt-node-object title="WebSRT Node Object">WebSRT Node Objects</a> from <a href=#timed-track-cue title="timed track cue">timed track cues</a> whose <a href=#timed-track-cue-voice-identifier>timed
-    track cue voice identifier</a> is the given number expressed in
-    base ten with digits in the range U+0030 DIGIT ZERO (0) to U+0039
-    DIGIT NINE (9).</p>
-   </dd>
+      <tr><td><a href=#websrt-italic-object title="WebSRT Italic Object">WebSRT Italic Objects</a>
+       <td><code title="">i</code>
 
-   <dt><dfn id=pseudo-cue-part-narrator title=pseudo-cue-part-narrator><code>narrator</code></dfn></dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <a href=#websrt-node-object title="WebSRT Node Object">WebSRT Node Objects</a> from <a href=#timed-track-cue title="timed track cue">timed track cues</a> whose <a href=#timed-track-cue-voice-identifier>timed
-    track cue voice identifier</a> is "<code title="timed track cue
-    narrator voice"><a href=#timed-track-cue-narrator-voice>narrator</a></code>".</p>
-   </dd>
+      <tr><td><a href=#websrt-bold-object title="WebSRT Bold Object">WebSRT Bold Objects</a>
+       <td><code title="">b</code>
 
-   <dt><dfn id=pseudo-cue-part-music title=pseudo-cue-part-music><code>music</code></dfn></dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <a href=#websrt-node-object title="WebSRT Node Object">WebSRT Node Objects</a> from <a href=#timed-track-cue title="timed track cue">timed track cues</a> whose <a href=#timed-track-cue-voice-identifier>timed
-    track cue voice identifier</a> is "<code title="timed track cue
-    music voice"><a href=#timed-track-cue-music-voice>music</a></code>".</p>
-   </dd>
+      <tr><td><a href=#websrt-ruby-object title="WebSRT Ruby Object">WebSRT Ruby Objects</a>
+       <td><code title="">ruby</code>
 
-   <dt><dfn id=pseudo-cue-part-lyric title=pseudo-cue-part-lyric><code>lyric</code></dfn></dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <a href=#websrt-node-object title="WebSRT Node Object">WebSRT Node Objects</a> from <a href=#timed-track-cue title="timed track cue">timed track cues</a> whose <a href=#timed-track-cue-voice-identifier>timed
-    track cue voice identifier</a> is "<code title="timed track cue
-    lyric voice"><a href=#timed-track-cue-lyric-voice>lyric</a></code>".</p>
-   </dd>
+      <tr><td><a href=#websrt-ruby-text-object title="WebSRT Ruby Text Object">WebSRT Ruby Text Objects</a>
+       <td><code title="">rt</code>
 
-   <dt><dfn id=pseudo-cue-part-sound title=pseudo-cue-part-sound><code>sound</code></dfn></dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <a href=#websrt-node-object title="WebSRT Node Object">WebSRT Node Objects</a> from <a href=#timed-track-cue title="timed track cue">timed track cues</a> whose <a href=#timed-track-cue-voice-identifier>timed
-    track cue voice identifier</a> is "<code title="timed track cue
-    sound voice"><a href=#timed-track-cue-sound-voice>sound</a></code>".</p>
-   </dd>
+      <tr><td><a href=#websrt-voice-object title="WebSRT Voice Object">WebSRT Voice Objects</a>
+       <td><code title="">v</code>
 
-   <dt><dfn id=pseudo-cue-part-comment title=pseudo-cue-part-comment><code>comment</code></dfn></dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <a href=#websrt-node-object title="WebSRT Node Object">WebSRT Node Objects</a> from <a href=#timed-track-cue title="timed track cue">timed track cues</a> whose <a href=#timed-track-cue-voice-identifier>timed
-    track cue voice identifier</a> is "<code title="timed track cue
-    comment voice"><a href=#timed-track-cue-comment-voice>comment</a></code>".</p>
-   </dd>
+      <tr><td>Other elements (specifically, <a href=#list-of-websrt-node-objects title="List of WebSRT Node Objects">Lists of WebSRT Node Objects</a>)
+       <td>No explicit name.
 
-   <dt><dfn id=pseudo-cue-part-credit title=pseudo-cue-part-credit><code>credit</code></dfn></dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <a href=#websrt-node-object title="WebSRT Node Object">WebSRT Node Objects</a> from <a href=#timed-track-cue title="timed track cue">timed track cues</a> whose <a href=#timed-track-cue-voice-identifier>timed
-    track cue voice identifier</a> is "<code title="timed track cue
-    credit voice"><a href=#timed-track-cue-credit-voice>credit</a></code>".</p>
-   </dd>
+    </table></li>
 
-   <dt><dfn id=pseudo-cue-part-i title=pseudo-cue-part-i><code>i</code></dfn></dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <a href=#websrt-italic-object title="WebSRT Italic Object">WebSRT Italic Objects</a>.</p>
-   </dd>
+   <li><p>For the purposes of element type and universal selectors,
+   <a href=#websrt-internal-node-object title="WebSRT Internal Node Object">WebSRT Internal Node
+   Objects</a> are considered as being in the namespace expressed
+   as the empty string.</li>
 
-   <dt><dfn id=pseudo-cue-part-b title=pseudo-cue-part-b><code>b</code></dfn></dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <a href=#websrt-bold-object title="WebSRT Bold Object">WebSRT Bold Objects</a>.</p>
-   </dd>
+   <li><p>For the purposes of attribute selector matching, <a href=#websrt-internal-node-object title="WebSRT Internal Node Object">WebSRT Internal Node
+   Objects</a> have no attributes, except for <a href=#websrt-voice-object title="WebSRT Voice Object">WebSRT Voice Objects</a>, which
+   have a single attribute named "<code title="">voice</code>"
+   whose value is the value of the <a href=#websrt-voice-object>WebSRT Voice
+   Object</a>.</li>
 
-   <dt><dfn id=pseudo-cue-part-ruby title=pseudo-cue-part-ruby><code>ruby</code></dfn></dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <a href=#websrt-ruby-object title="WebSRT Ruby Object">WebSRT Ruby Objects</a>.</p>
-   </dd>
+   <li><p>For the purposes of class selector matching, <a href=#websrt-internal-node-object title="WebSRT Internal Node Object">WebSRT Internal Node
+   Objects</a> have the classes described as the <a href="#websrt-node-object's-applicable-classes">WebSRT
+   Node Object's applicable classes</a>.</li> <!-- ok, this
+   isn't especially well-defined, but the Selectors spec doesn't
+   really give one much to go on here. -->
 
-   <dt><dfn id=pseudo-cue-part-rt title=pseudo-cue-part-rt><code>rt</code></dfn></dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <a href=#websrt-ruby-text-object title="WebSRT Ruby Text Object">WebSRT Ruby Text Objects</a>.</p>
-   </dd>
+  </ul><p>The following properties apply to the '::cue()' pseudo-element
+  with an argument:</p>
 
-   <dt><dfn id=pseudo-cue-part-past title=pseudo-cue-part-past><code>past</code></dfn></dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <a href=#websrt-node-object title="WebSRT Node Object">WebSRT Node Objects</a> that are <i><a href=#in-the-past>in the past</a></i>.</p>
-   </dd>
-
-   <dt><dfn id=pseudo-cue-part-future title=pseudo-cue-part-future><code>future</code></dfn></dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <a href=#websrt-node-object title="WebSRT Node Object">WebSRT Node Objects</a> that are <i><a href=#in-the-future>in the future</a></i>.</p>
-   </dd>
-
-   <dt>Any other identifier</dt>
-   <dd>
-    <p>Restricts the pseudo-element to not matching any <a href=#websrt-node-object title="WebSRT Node Object">WebSRT Node Objects</a>.</p>
-    <p class=note>This is intended to allow for future extensions
-    while still allowing Selectors to include a mixture of old and new
-    '::cue-part()' pseudo-elements.</p>
-   </dd>
-
-  </dl><p>A <a href=#websrt-node-object>WebSRT Node Object</a> <var title="">c</var> is
-  <dfn id=in-the-past>in the past</dfn> if, in a pre-order, depth-first traversal of
-  the <a href=#timed-track-cue>timed track cue</a>'s <a href=#list-of-websrt-node-objects>List of WebSRT Node
-  Objects</a>, there exists a <a href=#websrt-timestamp-object>WebSRT Timestamp Object</a>
-  whose value is less than the <a href=#current-playback-position>current playback position</a>
-  of the <a href=#media-element>media element</a> that is the <i>matched
-  element</i>, entirely after the <a href=#websrt-node-object>WebSRT Node Object</a> <var title="">c</var>.</p>
-
-  <p>A <a href=#websrt-node-object>WebSRT Node Object</a> <var title="">c</var> is
-  <dfn id=in-the-future>in the future</dfn> if, in a pre-order, depth-first traversal
-  of the <a href=#timed-track-cue>timed track cue</a>'s <a href=#list-of-websrt-node-objects>List of WebSRT Node
-  Objects</a>, there exists a <a href=#websrt-timestamp-object>WebSRT Timestamp Object</a>
-  whose value is greater than the <a href=#current-playback-position>current playback
-  position</a> of the <a href=#media-element>media element</a> that is the
-  <i>matched element</i>, entirely before the <a href=#websrt-node-object>WebSRT Node
-  Object</a> <var title="">c</var>.</p>
-
-  <p>The following properties apply to the '::cue-part(<var title="">filter</var>)' pseudo-element:</p>
-
   <ul class=brief><li>'color'</li>
    <li>'text-shadow'</li>
    <li>'text-outline'</li>
@@ -85964,8 +86153,9 @@
    segment when the segment becomes "past", and having the change
    propagate towards the end of the segment so that it reaches the end
    of the segment when the next segment becomes "past".
-  --><p>The following properties apply to the '::cue-part(<var title="">filter</var>)' pseudo-element if the neither of the <code title=pseudo-cue-part-past><a href=#pseudo-cue-part-past>past</a></code> or <code title=pseudo-cue-part-future><a href=#pseudo-cue-part-future>future</a></code> keywords are
-  present:</p>
+  --><p>The following properties apply to the '::cue()' pseudo-element
+  with an argument when the selector does not contain the ':past' and
+  ':future' pseudo-classes:</p>
 
   <ul class=brief><li>the properties corresponding to the 'font' shorthand, including 'line-height'</li>
    <!-- add more... -->
@@ -85976,19 +86166,51 @@
           min-height, max-width, min-width, orphans, overflow,
           page-break-*, text-align, unicode-bidi, widows, z-index
    -->
-  </ul><p>Other properties must be ignored.</p>
+  </ul><p>Properties that do not apply must be ignored.</p>
 
   <p>As a special exception, the properties corresponding to the
   'background' shorthand, when they would have been applied to the
   <a href=#list-of-websrt-node-objects>List of WebSRT Node Objects</a>, must instead be applied to
   the <a href=#websrt-cue-background-box>WebSRT cue background box</a>.</p>
 
+
+  <h6 id="the-':past'-and-':future'-pseudo-classes"><span class=secno>14.3.2.3.2 </span>The ':past' and ':future' pseudo-classes</h6>
+
+  <p>The <dfn id=past-pseudo-class title=past-pseudo-class>':past'</dfn> and <dfn id=future-pseudo-class title=future-pseudo-class>':future'</dfn> pseudo-classes only
+  match <a href=#websrt-node-object title="WebSRT Node Object">WebSRT Node Objects</a>.</p>
+
+  <p>The ':past' pseudo-class only matches <a href=#websrt-node-object title="WebSRT Node
+  Object">WebSRT Node Objects</a> that are <i><a href=#in-the-past>in the past</a></i>.</p>
+
+  <p>A <a href=#websrt-node-object>WebSRT Node Object</a> <var title="">c</var> is
+  <dfn id=in-the-past>in the past</dfn> if, in a pre-order, depth-first traversal of
+  the <a href=#timed-track-cue>timed track cue</a>'s <a href=#list-of-websrt-node-objects>List of WebSRT Node
+  Objects</a>, there exists a <a href=#websrt-timestamp-object>WebSRT Timestamp Object</a>
+  whose value is less than the <a href=#current-playback-position>current playback position</a>
+  of the <a href=#media-element>media element</a> that is the <i>matched
+  element</i>, entirely after the <a href=#websrt-node-object>WebSRT Node Object</a> <var title="">c</var>.</p>
+
+  <p>The ':future' pseudo-class only matches <a href=#websrt-node-object title="WebSRT Node
+  Object">WebSRT Node Objects</a> that are <i><a href=#in-the-future>in the future</a></i>.</p>
+
+  <p>A <a href=#websrt-node-object>WebSRT Node Object</a> <var title="">c</var> is
+  <dfn id=in-the-future>in the future</dfn> if, in a pre-order, depth-first traversal
+  of the <a href=#timed-track-cue>timed track cue</a>'s <a href=#list-of-websrt-node-objects>List of WebSRT Node
+  Objects</a>, there exists a <a href=#websrt-timestamp-object>WebSRT Timestamp Object</a>
+  whose value is greater than the <a href=#current-playback-position>current playback
+  position</a> of the <a href=#media-element>media element</a> that is the
+  <i>matched element</i>, entirely before the <a href=#websrt-node-object>WebSRT Node
+  Object</a> <var title="">c</var>.</p>
+
   </div>
 
 <!--</div>-->
 <!--KEEP-START w3c-html--><!--TT-->
 
 
+
+
+
   <div class=impl>
 
   <h4 id=images-0><span class=secno>14.3.3 </span>Images</h4>
@@ -89361,8 +89583,18 @@
    <dt>Additional information:</dt>
    <dd>
     <dl><dt>Magic number(s):</dt>
-     <dd>No sequence of bytes can uniquely identify a WebSRT timed
-     track file.</dd>
+     <dd>
+      <p>WebSRT files all begin with one of the following byte sequences:</p>
+      <ul class=brief><li> EF BB BF 57 45 42 53 52 54 20 46 49 4C 45 0A
+       <li> EF BB BF 57 45 42 53 52 54 20 46 49 4C 45 0D
+       <li> EF BB BF 57 45 42 53 52 54 20 46 49 4C 45 20
+       <li> EF BB BF 57 45 42 53 52 54 20 46 49 4C 45 09
+       <li>          57 45 42 53 52 54 20 46 49 4C 45 0A
+       <li>          57 45 42 53 52 54 20 46 49 4C 45 0D
+       <li>          57 45 42 53 52 54 20 46 49 4C 45 20
+       <li>          57 45 42 53 52 54 20 46 49 4C 45 09
+      </ul><p class=note>(An optional UTF-8 BOM, the ASCII string "<code title="">WEBSRT FILE</code>", and finally a space, tab, or line break.)
+     </dd>
      <dt>File extension(s):</dt>
      <dd>"<code title="">srt</code>"</dd>
      <dt>Macintosh file type code(s):</dt>
@@ -90594,6 +90826,7 @@
          <code><a href=#video>video</a></code></td>
      <td>empty</td>
      <td><a href=#global-attributes title="global attributes">globals</a>;
+         <code title=attr-track-default><a href=#attr-track-default>default</a></code>;
          <code title=attr-track-kind><a href=#attr-track-kind>kind</a></code>;
          <code title=attr-track-label><a href=#attr-track-label>label</a></code>;
          <code title=attr-track-src><a href=#attr-track-src>src</a></code>;
@@ -91096,6 +91329,10 @@
      <td> <code title=attr-time-datetime><a href=#attr-time-datetime>time</a></code>
      <td> Value of the element
      <td> <a href=#valid-date-or-time-string>Valid date or time string</a>*
+    <tr><th> <code title="">default</code>
+     <td> <code title=attr-track-default><a href=#attr-track-default>track</a></code>
+     <td> Enable the track if no other <a href=#timed-track>timed track</a> is more suitable.
+     <td> <a href=#boolean-attribute>Boolean attribute</a>
     <tr><th> <code title="">defer</code>
      <td> <code title=attr-script-defer><a href=#attr-script-defer>script</a></code>
      <td> Defer script execution

Modified: index
===================================================================
--- index	2010-12-15 20:49:26 UTC (rev 5720)
+++ index	2010-12-25 06:28:38 UTC (rev 5721)
@@ -225,7 +225,7 @@
 
   <header class=head id=head><p><a class=logo href=http://www.whatwg.org/ rel=home><img alt=WHATWG height=101 src=/images/logo width=101></a></p>
    <hgroup><h1>HTML5 (including next generation additions still in development)</h1>
-    <h2 class="no-num no-toc">Draft Standard — 15 December 2010</h2>
+    <h2 class="no-num no-toc">Draft Standard — 25 December 2010</h2>
    </hgroup><p>You can take part in this work. <a href=http://www.whatwg.org/mailing-list>Join the working group's discussion list.</a></p>
    <p><strong>Web designers!</strong> We have a <a href=http://blog.whatwg.org/faq/>FAQ</a>, a <a href=http://forums.whatwg.org/>forum</a>, and a <a href=http://www.whatwg.org/mailing-list#help>help mailing list</a> for you!</p>
    <!--<p class="impl"><strong>Implementors!</strong> We have a <a href="http://www.whatwg.org/mailing-list#implementors">mailing list</a> for you too!</p>-->
@@ -576,7 +576,7 @@
        <li><a href=#the-ready-states><span class=secno>4.8.10.7 </span>The ready states</a></li>
        <li><a href=#playing-the-media-resource><span class=secno>4.8.10.8 </span>Playing the media resource</a></li>
        <li><a href=#seeking><span class=secno>4.8.10.9 </span>Seeking</a></li>
-       <li><a href=#timed-tracks><span class=secno>4.8.10.10 </span>Timed tracks</a>
+       <li><a href=#text-timed-tracks><span class=secno>4.8.10.10 </span>Text timed tracks</a>
         <ol>
          <li><a href=#timed-track-model><span class=secno>4.8.10.10.1 </span>Timed track model</a></li>
          <li><a href=#sourcing-in-band-timed-tracks><span class=secno>4.8.10.10.2 </span>Sourcing in-band timed tracks</a></li>
@@ -1183,14 +1183,14 @@
    <li><a href=#replaced-elements><span class=secno>12.3 </span>Replaced elements</a>
     <ol>
      <li><a href=#embedded-content-2><span class=secno>12.3.1 </span>Embedded content</a></li>
-     <li><a href=#timed-tracks-0><span class=secno>12.3.2 </span>Timed tracks</a>
+     <li><a href=#timed-tracks><span class=secno>12.3.2 </span>Timed tracks</a>
       <ol>
        <li><a href=#websrt-cue-text-rendering-rules><span class=secno>12.3.2.1 </span>WebSRT cue text rendering rules</a></li>
        <li><a href=#applying-css-properties-to-websrt-node-objects><span class=secno>12.3.2.2 </span>Applying CSS properties to WebSRT Node Objects</a></li>
        <li><a href=#css-extensions><span class=secno>12.3.2.3 </span>CSS extensions</a>
         <ol>
          <li><a href="#the-'::cue'-pseudo-element"><span class=secno>12.3.2.3.1 </span>The '::cue' pseudo-element</a></li>
-         <li><a href="#the-'::cue-part'-pseudo-element"><span class=secno>12.3.2.3.2 </span>The '::cue-part' pseudo-element</a></ol></ol></li>
+         <li><a href="#the-':past'-and-':future'-pseudo-classes"><span class=secno>12.3.2.3.2 </span>The ':past' and ':future' pseudo-classes</a></ol></ol></li>
      <li><a href=#images-0><span class=secno>12.3.3 </span>Images</a></li>
      <li><a href=#attributes-for-embedded-content-and-images><span class=secno>12.3.4 </span>Attributes for embedded content and images</a></li>
      <li><a href=#image-maps-0><span class=secno>12.3.5 </span>Image maps</a></li>
@@ -1308,7 +1308,7 @@
 
   <ul class=brief><li>The <code><a href=#devices>device</a></code> element.</li> <!--DEVICE-->
    <li>The <code title=attr-hyperlink-ping><a href=#ping>ping</a></code> attribute and related <a href=#hyperlink-auditing>hyperlink auditing</a> features.</li> <!--PING-->
-   <li>The <a href=#websrt>WebSRT</a> formata and some <a href=#timed-track>timed track</a> API features.</li> <!--TT--> <!--TTSRT-->
+   <li>The <a href=#websrt>WebSRT</a> format and some <a href=#timed-track>timed track</a> API features.</li> <!--TT--> <!--TTSRT-->
    <li>Rules for <a href=#atom>converting HTML to Atom</a>.</li> <!--MD-->
    <li>The <code title=dom-document-cssElementMap><a href=#dom-document-csselementmap>cssElementMap</a></code> feature for defining <span title="CSS element reference identifier">CSS element reference identifiers</span>.</li> <!--CSSREF-->
   </ul><p>Features that are part of HTML (and this specification) but that
@@ -24399,7 +24399,8 @@
   <a href=#timed-track-cue title="timed track cue">timed track cues</a> whose
   <a href=#timed-track-cue-active-flag>timed track cue active flag</a> is set and whose
   <a href=#timed-track>timed track</a> is in the <a href=#timed-track-showing title="timed track
-  showing">showing</a> mode.</p>
+  showing">showing</a> or <a href=#timed-track-showing-by-default title="timed track showing by
+  default">showing by default</a> modes.</p>
 <!--KEEP-START w3c-html--><!--TT-->
 
   <p>In addition to the above, the user agent may provide messages to
@@ -24912,23 +24913,25 @@
    <dd><a href=#global-attributes>Global attributes</a></dd>
    <dd><code title=attr-track-kind><a href=#attr-track-kind>kind</a></code></dd>
    <dd><code title=attr-track-src><a href=#attr-track-src>src</a></code></dd>
-   <dd><code title=attr-track-charset><a href=#attr-track-charset>charset</a></code></dd>
    <dd><code title=attr-track-srclang><a href=#attr-track-srclang>srclang</a></code></dd>
    <dd><code title=attr-track-label><a href=#attr-track-label>label</a></code></dd>
+   <dd><code title=attr-track-default><a href=#attr-track-default>default</a></code></dd>
    <dt>DOM interface:</dt>
    <dd>
 <pre class=idl>interface <dfn id=htmltrackelement>HTMLTrackElement</dfn> : <a href=#htmlelement>HTMLElement</a> {
            attribute DOMString <a href=#dom-track-kind title=dom-track-kind>kind</a>;
            attribute DOMString <a href=#dom-track-src title=dom-track-src>src</a>;
-           attribute DOMString <a href=#dom-track-charset title=dom-track-charset>charset</a>;
            attribute DOMString <a href=#dom-track-srclang title=dom-track-srclang>srclang</a>;
            attribute DOMString <a href=#dom-track-label title=dom-track-label>label</a>;
+           attribute boolean <a href=#dom-track-default title=dom-track-default>default</a>;
 
   readonly attribute <a href=#timedtrack>TimedTrack</a> <a href=#dom-track-track title=dom-track-track>track</a>;
 };</pre>
    </dd>
   </dl><p>The <code><a href=#the-track-element>track</a></code> element allows authors to specify explicit
-  external <a href=#timed-track title="timed track">timed tracks</a> for <a href=#media-element title="media element">media elements</a>. It does not <a href=#represents title=represents>represent</a> anything on its own.</p>
+  external text-based <a href=#timed-track title="timed track">timed tracks</a>
+  for <a href=#media-element title="media element">media elements</a>. It does not
+  <a href=#represents title=represents>represent</a> anything on its own.</p>
 
   <p>The <dfn id=attr-track-kind title=attr-track-kind><code>kind</code></dfn>
   attribute is an <a href=#enumerated-attribute>enumerated attribute</a>. The following
@@ -24941,19 +24944,29 @@
      <th>Brief description
    <tbody><tr><td><dfn id=attr-track-kind-keyword-subtitles title=attr-track-kind-keyword-subtitles><code>subtitles</code></dfn>
      <td><dfn id=attr-track-kind-subtitles title=attr-track-kind-subtitles>Subtitles</dfn>
-     <td>Transcription or translation of the dialogue, suitable for when the sound is available but not understood (e.g. because the user does not understand the language of the <a href=#media-resource>media resource</a>'s soundtrack).
+     <td>
+      Transcription or translation of the dialogue, suitable for when the sound is available but not understood (e.g. because the user does not understand the language of the <a href=#media-resource>media resource</a>'s soundtrack).
+      Displayed over the video.
     <tr><td><dfn id=attr-track-kind-keyword-captions title=attr-track-kind-keyword-captions><code>captions</code></dfn>
      <td><dfn id=attr-track-kind-captions title=attr-track-kind-captions>Captions</dfn>
-     <td>Transcription or translation of the dialogue, sound effects, relevant musical cues, and other relevant audio information, suitable for when the soundtrack is unavailable (e.g. because it is muted or because the user is deaf).
+     <td>
+      Transcription or translation of the dialogue, sound effects, relevant musical cues, and other relevant audio information, suitable for when the soundtrack is unavailable (e.g. because it is muted or because the user is deaf).
+      Displayed over the video; labeled as appropriate for the hard-of-hearing.
     <tr><td><dfn id=attr-track-kind-keyword-descriptions title=attr-track-kind-keyword-descriptions><code>descriptions</code></dfn>
      <td><dfn id=attr-track-kind-descriptions title=attr-track-kind-descriptions>Descriptions</dfn>
-     <td>Textual descriptions of the video component of the <a href=#media-resource>media resource</a>, intended for audio synthesis when the visual component is unavailable (e.g. because the user is interacting with the application without a screen while driving, or because the user is blind).
+     <td>
+      Textual descriptions of the video component of the <a href=#media-resource>media resource</a>, intended for audio synthesis when the visual component is unavailable (e.g. because the user is interacting with the application without a screen while driving, or because the user is blind).
+      Synthesized as separate audio track.
     <tr><td><dfn id=attr-track-kind-keyword-chapters title=attr-track-kind-keyword-chapters><code>chapters</code></dfn>
      <td><dfn id=attr-track-kind-chapters title=attr-track-kind-chapters>Chapters</dfn>
-     <td>Chapter titles, intended to be used for navigating the <a href=#media-resource>media resource</a>.
+     <td>
+      Chapter titles, intended to be used for navigating the <a href=#media-resource>media resource</a>.
+      Displayed as an interactive list in the user agent's interface.
     <tr><td><dfn id=attr-track-kind-keyword-metadata title=attr-track-kind-keyword-metadata><code>metadata</code></dfn>
      <td><dfn id=attr-track-kind-metadata title=attr-track-kind-metadata>Metadata</dfn>
-     <td>Tracks intended for use from script.
+     <td>
+      Tracks intended for use from script.
+      Not displayed by the user agent.
   </table><p>The attribute may be omitted. The <i>missing value default</i> is
   the <a href=#attr-track-kind-subtitles title=attr-track-kind-subtitles>subtitles</a> state.</p>
 
@@ -24981,15 +24994,6 @@
   text</a>.</p>
 <!--TTSRT-->
 
-  <p>If the elements's <a href=#track-url>track URL</a> identifies a resource
-  that <dfn id=supports-external-timed-track-character-encoding-overrides>supports external timed track character encoding
-  overrides</dfn>, then the <dfn id=attr-track-charset title=attr-track-charset><code>charset</code></dfn> attribute may
-  be specified. If the attribute is set, its value must be a valid
-  character encoding name, must be an <a href=#ascii-case-insensitive>ASCII
-  case-insensitive</a> match for the <a href=#preferred-mime-name>preferred MIME
-  name</a> for that encoding, and must match the character encoding
-  of the resource in question. <a href=#refsIANACHARSET>[IANACHARSET]</a></p>
-
   <p>The <dfn id=attr-track-srclang title=attr-track-srclang><code>srclang</code></dfn>
   attribute gives the language of the timed track data. The value must
   be a valid BCP 47 language tag. This attribute must be present if
@@ -25031,6 +25035,12 @@
 
   </div>
 
+  <p>The <dfn id=attr-track-default title=attr-track-default><code>default</code></dfn>
+  attribute, if specified, indicates that the track is to be enabled
+  if the user's preferences do not indicate that another track would
+  be more appropriate. There must not be more than one
+  <code><a href=#the-track-element>track</a></code> element with the same parent node with the <code title=attr-track-default><a href=#attr-track-default>default</a></code> attribute specified.</p>
+
   <dl class=domintro><dt><var title="">track</var> . <code title=dom-track-track><a href=#dom-track-track>track</a></code></dt>
 
    <dd>
@@ -25046,11 +25056,11 @@
   <a href=#timed-track>timed track</a>'s corresponding <code><a href=#timedtrack>TimedTrack</a></code>
   object.</p>
 
-  <p>The <dfn id=dom-track-src title=dom-track-src><code>src</code></dfn>, <dfn id=dom-track-charset title=dom-track-charset><code>charset</code></dfn>, <dfn id=dom-track-srclang title=dom-track-srclang><code>srclang</code></dfn>, and <dfn id=dom-track-label title=dom-track-label><code>label</code></dfn> IDL attributes must
-  <a href=#reflect>reflect</a> the respective content attributes of the same
-  name. The <dfn id=dom-track-kind title=dom-track-kind><code>kind</code></dfn> IDL
-  attributemust <a href=#reflect>reflect</a> the content attribute of the same
-  name, <a href=#limited-to-only-known-values>limited to only known values</a>.</p>
+  <p>The <dfn id=dom-track-src title=dom-track-src><code>src</code></dfn>, <dfn id=dom-track-srclang title=dom-track-srclang><code>srclang</code></dfn>, <dfn id=dom-track-label title=dom-track-label><code>label</code></dfn>, and <dfn id=dom-track-default title=dom-track-default><code>default</code></dfn> IDL attributes
+  must <a href=#reflect>reflect</a> the respective content attributes of the
+  same name. The <dfn id=dom-track-kind title=dom-track-kind><code>kind</code></dfn>
+  IDL attribute must <a href=#reflect>reflect</a> the content attribute of the
+  same name, <a href=#limited-to-only-known-values>limited to only known values</a>.</p>
 
   </div>
 
@@ -27167,8 +27177,9 @@
 
   <ol><!--KEEP-END w3c-html--><!--TT--><li><p>Let <var title="">current cues</var> be an ordered list of
    <a href=#timed-track-cue title="timed track cue">cues</a>, initialized to contain
-   all the <a href=#timed-track-cue title="timed track cue">cues</a> of all the <a href=#timed-track-hidden title="timed track hidden">hidden</a> or <a href=#timed-track-showing title="timed
-   track showing">showing</a> <a href=#timed-track title="timed track">timed
+   all the <a href=#timed-track-cue title="timed track cue">cues</a> of all the <a href=#timed-track-hidden title="timed track hidden">hidden</a>, <a href=#timed-track-showing title="timed track
+   showing">showing</a>, or <a href=#timed-track-showing-by-default title="timed track showing by
+   default">showing by default</a> <a href=#timed-track title="timed track">timed
    tracks</a> of the <a href=#media-element>media element</a> (not the <a href=#timed-track-disabled title="timed track disabled">disabled</a> ones) whose <a href=#timed-track-cue-start-time title="timed track cue start time">start times</a> are less than
    or equal to the <a href=#current-playback-position>current playback position</a> and whose
    <a href=#timed-track-cue-end-time title="timed track cue end time">end times</a> are greater
@@ -27177,8 +27188,9 @@
 
    <li><p>Let <var title="">other cues</var> be an ordered list of
    <a href=#timed-track-cue title="timed track cue">cues</a>, initialized to contain
-   all the <a href=#timed-track-cue title="timed track cue">cues</a> of <a href=#timed-track-hidden title="timed track hidden">hidden</a> and <a href=#timed-track-showing title="timed
-   track showing">showing</a> <a href=#timed-track title="timed track">timed
+   all the <a href=#timed-track-cue title="timed track cue">cues</a> of <a href=#timed-track-hidden title="timed track hidden">hidden</a>, <a href=#timed-track-showing title="timed track
+   showing">showing</a>, and <a href=#timed-track-showing-by-default title="timed track showing by
+   default">showing by default</a> <a href=#timed-track title="timed track">timed
    tracks</a> of the <a href=#media-element>media element</a> that are not
    present in <var title="">current cues</var>, also in <a href=#timed-track-cue-order>timed
    track cue order</a>.</li>
@@ -27262,7 +27274,8 @@
 
    <li><p>Run the <a href=#rules-for-updating-the-timed-track-rendering>rules for updating the timed track
    rendering</a> of each of the <a href=#timed-track title="timed track">timed
-   tracks</a> in <var title="">affected tracks</var> that are <a href=#timed-track-showing title="timed track showing">showing</a>.
+   tracks</a> in <var title="">affected tracks</var> that are <a href=#timed-track-showing title="timed track showing">showing</a> or <a href=#timed-track-showing-by-default title="timed
+   track showing by default">showing by default</a>.
 <!--TTSRT-->
    For example, for <a href=#timed-track title="timed track">timed tracks</a>
    based on <a href=#websrt>WebSRT</a>, the <a href=#rules-for-updating-the-display-of-websrt-timed-tracks>rules for updating the
@@ -27436,7 +27449,7 @@
 
 <!--KEEP-END w3c-html--><!--TT-->
 <!--<div data-component="other Hixie drafts (editor: Ian Hickson)">-->
-  <h5 id=timed-tracks><span class=secno>4.8.10.10 </span>Timed tracks</h5>
+  <h5 id=text-timed-tracks><span class=secno>4.8.10.10 </span>Text timed tracks</h5>
 
   <h6 id=timed-track-model><span class=secno>4.8.10.10.1 </span>Timed track model</h6>
 
@@ -27593,8 +27606,9 @@
      </dd>
 
      <dt><dfn id=timed-track-showing title="timed track showing">Showing</dfn>
+     <dt><dfn id=timed-track-showing-by-default title="timed track showing by default">Showing by default</dfn>
 
-     <dd>
+     </dt><dd>
 
       <p>Indicates that the timed track is active. If no attempt has
       yet been made to obtain the track's cues, the user agent will
@@ -27610,6 +27624,13 @@
       user can navigate to any point in the <a href=#media-resource>media
       resource</a> by selecting a cue.</p>
 
+      <p>The <a href=#timed-track-showing-by-default title="timed track showing by default">showing by
+      default</a> state is used in conjunction with the <code title=attr-track-default><a href=#attr-track-default>default</a></code> attribute on
+      <code><a href=#the-track-element>track</a></code> elements to indicate that the timed track was
+      enabled due to that attribute. This allows the user agent to
+      override the state if a later track is discovered that is more
+      appropriate per the user's preferences.</p>
+
      </dd>
 
     </dl></dd>
@@ -27767,11 +27788,6 @@
    </dd>
 <!--TTSRT-->
 
-   <dt><dfn id=timed-track-cue-voice-identifier title="timed track cue voice identifier">A voice identifier</dfn>
-   <dd>
-    <p>A string identifying the voice with which the cue is associated.</p>
-   </dd>
-
    <dt><dfn id=timed-track-cue-text title="timed track cue text">The text of the cue</dfn>
    <dd>
     <p>The raw text of the cue, and rules for its interpretation,
@@ -27805,11 +27821,12 @@
     disabled">disabled</a>; and whenever the <a href=#media-element>media
     element</a>'s <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> is changed back to
     <code title=dom-media-HAVE_NOTHING><a href=#dom-media-have_nothing>HAVE_NOTHING</a></code>. When the
-    flag is unset in this way for one or more cues in <a href=#timed-track title="timed track">timed tracks</a> that were <a href=#timed-track-showing title="timed track showing">showing</a> prior to the relevant
-    incident, the user agent must, after having unset the flag for all
-    the affected cues, apply the <a href=#rules-for-updating-the-timed-track-rendering>rules for updating the timed
-    track rendering</a> of those <a href=#timed-track title="timed track">timed
-    tracks</a>.
+    flag is unset in this way for one or more cues in <a href=#timed-track title="timed track">timed tracks</a> that were <a href=#timed-track-showing title="timed track showing">showing</a> or <a href=#timed-track-showing-by-default title="timed
+    track showing by default">showing by default</a> prior to the
+    relevant incident, the user agent must, after having unset the
+    flag for all the affected cues, apply the <a href=#rules-for-updating-the-timed-track-rendering>rules for updating
+    the timed track rendering</a> of those <a href=#timed-track title="timed
+    track">timed tracks</a>.
 <!--TTSRT-->
     For example, for <a href=#timed-track title="timed track">timed tracks</a>
     based on <a href=#websrt>WebSRT</a>, the <a href=#rules-for-updating-the-display-of-websrt-timed-tracks>rules for updating the
@@ -28019,8 +28036,32 @@
    <dd>
     <p>Let the <a href=#timed-track-mode>timed track mode</a> be <a href=#timed-track-showing title="timed
     track showing">showing</a>.</p>
+
+    <p>If there is a <a href=#timed-track>timed track</a> in the <a href=#media-element>media
+    element</a>'s <a href=#list-of-timed-tracks>list of timed tracks</a> whose
+    <a href=#timed-track-mode>timed track mode</a> is <a href=#timed-track-showing-by-default title="timed track showing
+    by default">showing by default</a>, the user agent must
+    furthermore change <em>that</em> <a href=#timed-track>timed track</a>'s
+    <a href=#timed-track-mode>timed track mode</a> to <a href=#timed-track-hidden title="timed track
+    hidden">hidden</a>.</p> <!-- so that we still get events and
+    stuff: we can expect authors to forget that default doesn't mean
+    that it'll always be turned on, and that they'll still rely on
+    events firing even if it doesn't show -->
+
    </dd>
 
+   <dt>If the <code><a href=#the-track-element>track</a></code> element has a <code title=attr-track-default><a href=#attr-track-default>default</a></code> attribute specified, and
+   there is no other <a href=#timed-track>timed track</a> in the <a href=#media-element>media
+   element</a>'s <a href=#list-of-timed-tracks>list of timed tracks</a> whose
+   <a href=#timed-track-mode>timed track mode</a> is <a href=#timed-track-showing title="timed track
+   showing">showing</a> or <a href=#timed-track-showing-by-default title="timed track
+   showing by default">showing by default</a></dt>
+
+   <dd>
+    <p>Let the <a href=#timed-track-mode>timed track mode</a> be <a href=#timed-track-showing-by-default title="timed
+    track showing by default">showing by default</a>.</p>
+   </dd>
+
    <dt>Otherwise</dt>
 
    <dd>
@@ -28030,18 +28071,20 @@
 
   </dl><p>When a <a href=#timed-track>timed track</a> corresponding to a
   <code><a href=#the-track-element>track</a></code> element is created with <a href=#timed-track-mode>timed track
-  mode</a> set to <a href=#timed-track-hidden title="timed track hidden">hidden</a> or
-  <a href=#timed-track-showing title="timed track showing">showing</a>, and when a
-  <a href=#timed-track>timed track</a> corresponding to a <code><a href=#the-track-element>track</a></code>
-  element is created with <a href=#timed-track-mode>timed track mode</a> set to <a href=#timed-track-disabled title="timed track disabled">disabled</a> and subsequently
-  changes its <a href=#timed-track-mode>timed track mode</a> to <a href=#timed-track-hidden title="timed
-  track hidden">hidden</a> or <a href=#timed-track-showing title="timed track
-  showing">showing</a> for the first time, the user agent must
-  immediately and synchronously run the following algorithm. This
-  algorithm interacts closely with the <a href=#event-loop>event loop</a>
-  mechanism; in particular, it has a <a href=#synchronous-section>synchronous section</a>
-  (which is triggered as part of the <a href=#event-loop>event loop</a>
-  algorithm). The step in that section is marked with ⌛.</p>
+  mode</a> set to <a href=#timed-track-hidden title="timed track hidden">hidden</a>,
+  <a href=#timed-track-showing title="timed track showing">showing</a>, or <a href=#timed-track-showing-by-default title="timed track showing by default">showing by default</a>,
+  and when a <a href=#timed-track>timed track</a> corresponding to a
+  <code><a href=#the-track-element>track</a></code> element is created with <a href=#timed-track-mode>timed track
+  mode</a> set to <a href=#timed-track-disabled title="timed track
+  disabled">disabled</a> and subsequently changes its <a href=#timed-track-mode>timed
+  track mode</a> to <a href=#timed-track-hidden title="timed track hidden">hidden</a>,
+  <a href=#timed-track-showing title="timed track showing">showing</a>, or <a href=#timed-track-showing-by-default title="timed track showing by default">showing by default</a> for
+  the first time, the user agent must immediately and synchronously
+  run the following algorithm. This algorithm interacts closely with
+  the <a href=#event-loop>event loop</a> mechanism; in particular, it has a
+  <a href=#synchronous-section>synchronous section</a> (which is triggered as part of the
+  <a href=#event-loop>event loop</a> algorithm). The step in that section is
+  marked with ⌛.</p>
 
   <ol><li><p>Set the <a href=#timed-track-readiness-state>timed track readiness state</a> to <a href=#timed-track-loading title="timed track loading">loading</a>.</li>
 
@@ -28079,11 +28122,7 @@
     <code><a href=#text/srt>text/srt</a></code>)
 <!--TTSRT-->
     as it is received, with the <a href=#timed-track-list-of-cues>timed
-    track list of cues</a> being used for that parser's output. If
-    the <code><a href=#the-track-element>track</a></code> element has a <code title=attr-track-charset><a href=#attr-track-charset>charset</a></code> attribute that specifies
-    a supported character encoding, then that encoding must be given
-    to the parser as a character encoding override. Otherwise the
-    parser must use its default character encoding behavior.</p>
+    track list of cues</a> being used for that parser's output.</p>
 
     <p>If the <a href=#fetch title=fetch>fetching algorithm</a> fails for
     any reason (network error, the server returns an error code, a
@@ -28112,12 +28151,14 @@
     <ul><li>the <a href=#track-url>track URL</a> changes so that it is no longer
      equal to <var title="">URL</var>, while the <a href=#timed-track-mode>timed track
      mode</a> is set to <a href=#timed-track-hidden title="timed track
-     hidden">hidden</a> or <a href=#timed-track-showing title="timed track
-     showing">showing</a>; or</li>
+     hidden">hidden</a>, <a href=#timed-track-showing title="timed track
+     showing">showing</a>, or <a href=#timed-track-showing-by-default title="timed track showing by
+     default">showing by default</a>; or</li>
 
-     <li>the <a href=#timed-track-mode>timed track mode</a> changes to <a href=#timed-track-hidden title="timed track hidden">hidden</a> or <a href=#timed-track-showing title="timed
-     track showing">showing</a>, while the <a href=#track-url>track URL</a> is
-     not equal to <var title="">URL</var></li>
+     <li>the <a href=#timed-track-mode>timed track mode</a> changes to <a href=#timed-track-hidden title="timed track hidden">hidden</a>, <a href=#timed-track-showing title="timed
+     track showing">showing</a>, or <a href=#timed-track-showing-by-default title="timed track
+     showing by default">showing by default</a>, while the
+     <a href=#track-url>track URL</a> is not equal to <var title="">URL</var></li>
 
     </ul><p>...then the user agent must run the following steps:</p>
 
@@ -28142,8 +28183,9 @@
    <li><p><i>Monitoring</i>: Wait until the <a href=#track-url>track URL</a> is
    no longer equal to <var title="">URL</var>, at the same time as the
    <a href=#timed-track-mode>timed track mode</a> is set to <a href=#timed-track-hidden title="timed track
-   hidden">hidden</a> or <a href=#timed-track-showing title="timed track
-   showing">showing</a>.</li>
+   hidden">hidden</a>, <a href=#timed-track-showing title="timed track
+   showing">showing</a>, or <a href=#timed-track-showing-by-default title="timed track showing by
+   default">showing by default</a>.</li>
 
    <li><p>Wait until the <a href=#timed-track-readiness-state>timed track readiness state</a> is
    no longer set to <a href=#timed-track-loading title="timed track
@@ -28226,15 +28268,6 @@
     cues. Otherwise, they should be set to zero.</p>
    </dd>
 
-   <dt>The <a href=#timed-track-cue-voice-identifier>timed track cue voice identifier</a>
-   <dd>
-    <p>Should be set to the empty string if the format has no
-    obvious analogue to cue voices. The <a href=#timed-track-cue-voice-identifier>timed track cue voice
-    identifier</a> may be set to strings that cannot be expressed
-    using <a href=#websrt>WebSRT</a>, if the format supports voices that do
-    not correspond to the voices used by WebSRT.</p>
-   </dd>
-
   </dl></div>
 <!--TTSRT-->
 
@@ -28341,13 +28374,13 @@
      <dd>
       <p>The <a href=#timed-track-disabled>timed track disabled</a> mode.</p>
      </dd>
-     <dt><code><a href=#timedtrack>TimedTrack</a></code> . <code title=dom-TimedTrack-HIDDEN><a href=#dom-timedtrack-hidden>HIDDEN</a></code> (0)</dt>
+     <dt><code><a href=#timedtrack>TimedTrack</a></code> . <code title=dom-TimedTrack-HIDDEN><a href=#dom-timedtrack-hidden>HIDDEN</a></code> (1)</dt>
      <dd>
       <p>The <a href=#timed-track-hidden>timed track hidden</a> mode.</p>
      </dd>
-     <dt><code><a href=#timedtrack>TimedTrack</a></code> . <code title=dom-TimedTrack-SHOWING><a href=#dom-timedtrack-showing>SHOWING</a></code> (0)</dt>
+     <dt><code><a href=#timedtrack>TimedTrack</a></code> . <code title=dom-TimedTrack-SHOWING><a href=#dom-timedtrack-showing>SHOWING</a></code> (2)</dt>
      <dd>
-      <p>The <a href=#timed-track-showing>timed track showing</a> mode.</p>
+      <p>The <a href=#timed-track-showing>timed track showing</a> and <a href=#timed-track-showing-by-default title="timed track showing by default">showing by default</a> modes.</p>
      </dd>
     </dl><p>Can be set, to change the mode.</p>
    </dd>
@@ -28404,7 +28437,7 @@
    <dt><dfn id=dom-timedtrack-hidden title=dom-TimedTrack-HIDDEN><code>HIDDEN</code></dfn> (numeric value 1)</dt>
    <dd>The <a href=#timed-track-hidden>timed track hidden</a> mode.</dd>
    <dt><dfn id=dom-timedtrack-showing title=dom-TimedTrack-SHOWING><code>SHOWING</code></dfn> (numeric value 2)</dt>
-   <dd>The <a href=#timed-track-showing>timed track showing</a> mode.</dd>
+   <dd>The <a href=#timed-track-showing>timed track showing</a> and <a href=#timed-track-showing-by-default title="timed track showing by default">showing by default</a> modes.</dd>
   </dl><p>On setting, if the new value is not either 0, 1, or 2, the user
   agent must throw an <code><a href=#invalid_access_err>INVALID_ACCESS_ERR</a></code>
   exception. Otherwise, if the new value isn't equal to what the
@@ -28439,6 +28472,12 @@
     track</a> that the <code><a href=#timedtrack>TimedTrack</a></code> object represents to
     the <a href=#timed-track-showing>timed track showing</a> mode.</p>
 
+    <p class=note>If the mode had been <a href=#timed-track-showing-by-default title="timed track
+    showing by default">showing by default</a>, this will change it
+    to <a href=#timed-track-showing title="timed track showing">showing</a>, even though
+    the value of <code title=dom-TimedTrack-mode><a href=#dom-timedtrack-mode>mode</a></code> would
+    appear not to change.</p>
+
    </dd>
 
   </dl><p>If the <a href=#timed-track-mode>timed track mode</a> of the <a href=#timed-track>timed
@@ -28696,7 +28735,7 @@
 
   <hr><pre class=idl>
 <!--TTSRT-->
-[<a href=#dom-timedtrackcue title=dom-TimedTrackCue>Constructor</a>(in DOMString id, in double startTime, in double endTime, in DOMString text, in optional DOMString settings, in optional DOMString voice, in optional boolean pauseOnExit)]
+[<a href=#dom-timedtrackcue title=dom-TimedTrackCue>Constructor</a>(in DOMString id, in double startTime, in double endTime, in DOMString text, in optional DOMString settings, in optional boolean pauseOnExit)]
 <!--TTSRT-->
 interface <dfn id=timedtrackcue>TimedTrackCue</dfn> {
   readonly attribute <a href=#timedtrack>TimedTrack</a> <a href=#dom-timedtrackcue-track title=dom-TimedTrackCue-track>track</a>;
@@ -28715,7 +28754,6 @@
   readonly attribute DOMString <a href=#dom-timedtrackcue-alignment title=dom-TimedTrackCue-alignment>alignment</a>;
 <!--TTSRT-->
 
-  readonly attribute DOMString <a href=#dom-timedtrackcue-voice title=dom-TimedTrackCue-voice>voice</a>;
   DOMString <a href=#dom-timedtrackcue-getcueassource() title=dom-TimedTrackCue-getCueAsSource()>getCueAsSource</a>();
   <a href=#documentfragment>DocumentFragment</a> <a href=#dom-timedtrackcue-getcueashtml() title=dom-TimedTrackCue-getCueAsHTML()>getCueAsHTML</a>();
 
@@ -28723,7 +28761,7 @@
   readonly attribute <a href=#function>Function</a> <a href=#handler-timedtrackcue-onexit title=handler-TimedTrackCue-onexit>onexit</a>;
 };</pre>
 
-  <dl class=domintro><!--TTSRT--><dt><var title="">cue</var> = new <code title=dom-TimedTrackCue><a href=#dom-timedtrackcue>TimedTrackCue</a></code>( <var title="">id</var>, <var title="">startTime</var>, <var title="">endTime</var>, <var title="">text</var> [, <var title="">settings</var> [, <var title="">voice</var> [, <var title="">pauseOnExit</var> ] ] ] )</dt>
+  <dl class=domintro><!--TTSRT--><dt><var title="">cue</var> = new <code title=dom-TimedTrackCue><a href=#dom-timedtrackcue>TimedTrackCue</a></code>( <var title="">id</var>, <var title="">startTime</var>, <var title="">endTime</var>, <var title="">text</var> [, <var title="">settings</var> [, <var title="">pauseOnExit</var> ] ] )</dt>
    <dd>
     <p>Returns a new <code><a href=#timedtrackcue>TimedTrackCue</a></code> object, for use with the <code title=dom-MutableTimedTrack-addCue><a href=#dom-mutabletimedtrack-addcue>addCue()</a></code> method.</p>
     <p>The <var title="">id</var> argument sets the <a href=#timed-track-cue-identifier>timed track cue identifier</a>.</p>
@@ -28731,7 +28769,6 @@
     <p>The <var title="">endTime</var> argument sets the <a href=#timed-track-cue-end-time>timed track cue end time</a>.</p>
     <p>The <var title="">text</var> argument sets the <a href=#timed-track-cue-text>timed track cue text</a>.</p>
     <p>The <var title="">settings</var> argument is a string in the format of <a href=#websrt-cue-settings>WebSRT cue settings</a>. If omitted, the empty string is assumed.</p>
-    <p>The <var title="">voice</var> argument sets the <a href=#timed-track-cue-voice-identifier>timed track cue voice identifier</a>. If omitted, the empty string is assumed.</p>
     <p>The <var title="">pauseOnExit</var> argument sets the <a href=#timed-track-cue-pause-on-exit-flag>timed track cue pause-on-exit flag</a>. If omitted, false is assumed.</p>
    </dd>
 <!--TTSRT-->
@@ -28809,11 +28846,6 @@
     </dl></dd>
 <!--TTSRT-->
 
-   <dt><var title="">cue</var> . <a href=#dom-timedtrackcue-voice title=dom-TimedTrackCue-voice>voice</a></dt>
-   <dd>
-    <p>Returns the <a href=#timed-track-cue-voice-identifier>timed track cue voice identifier</a>.</p>
-   </dd>
-
    <dt><var title="">source</var> = <var title="">cue</var> . <span title=dom-TimedTrackCue-getCueAsSource>getCueAsSource</span>()</dt>
    <dd>
     <p>Returns the <a href=#timed-track-cue-text>timed track cue text</a> in raw unparsed form.</p>
@@ -28827,7 +28859,7 @@
   </dl><div class=impl>
 
 <!--TTSRT-->
-  <p>The <dfn id=dom-timedtrackcue title=dom-TimedTrackCue><code>TimedTrackCue(<var title="">id</var>, <var title="">startTime</var>, <var title="">endTime</var>, <var title="">text</var>, <var title="">settings</var>, <var title="">voice</var>, <var title="">pauseOnExit</var>)</code></dfn> constructor, when invoked,
+  <p>The <dfn id=dom-timedtrackcue title=dom-TimedTrackCue><code>TimedTrackCue(<var title="">id</var>, <var title="">startTime</var>, <var title="">endTime</var>, <var title="">text</var>, <var title="">settings</var>, <var title="">pauseOnExit</var>)</code></dfn> constructor, when invoked,
   must run the following steps:</p>
 
   <ol><li><p>Create a new <a href=#timed-track-cue>timed track cue</a> that is not
@@ -28849,10 +28881,6 @@
    pause-on-exit flag</a> be true if the <var title="">pauseOnExit</var> is present and true. Otherwise, let it
    be false.</li>
 
-   <li><p>Let <var title="">cue</var>'s <a href=#timed-track-cue-voice-identifier>timed track cue voice
-   identifier</a> be the value of the <var title="">voice</var>
-   argument, if it is present, or the empty string otherwise.</li>
-
    <li><p>Let <var title="">cue</var>'s <a href=#timed-track-cue-text>timed track cue
    text</a> be the value of the <var title="">text</var> argument,
    and let the rules for its interpretation be the <a href=#websrt-cue-text-parsing-rules>WebSRT cue
@@ -28957,9 +28985,10 @@
    with.</li>
 
    <li><p>Let <var title="">n</var> be the number of <a href=#timed-track title="timed track">timed tracks</a> whose <a href=#timed-track-mode>timed track
-   mode</a> is <a href=#timed-track-showing title="timed track showing">showing</a> and
-   that are in the <a href=#media-element>media element</a>'s <a href=#list-of-timed-tracks>list of timed
-   tracks</a> before <var title="">track</var>.</li>
+   mode</a> is <a href=#timed-track-showing title="timed track showing">showing</a> or
+   <a href=#timed-track-showing-by-default title="timed track showing by default">showing by
+   default</a> and that are in the <a href=#media-element>media element</a>'s
+   <a href=#list-of-timed-tracks>list of timed tracks</a> before <var title="">track</var>.</li>
 
    <li><p>Return <var title="">n</var>.</li>
 
@@ -28979,11 +29008,6 @@
   object represents.</p>
 <!--TTSRT-->
 
-  <p>The <dfn id=dom-timedtrackcue-voice title=dom-TimedTrackCue-voice><code>voice</code></dfn>
-  attribute must return the <a href=#timed-track-cue-voice-identifier>timed track cue voice
-  identifier</a> of the <a href=#timed-track-cue>timed track cue</a> that the
-  <code><a href=#timedtrackcue>TimedTrackCue</a></code> object represents.</p>
-
   <p>The <dfn id=dom-timedtrackcue-getcueassource() title=dom-TimedTrackCue-getCueAsSource()><code>getCueAsSource()</code></dfn>
   method must return the raw <a href=#timed-track-cue-text>timed track cue text</a>.</p>
 
@@ -29038,22 +29062,38 @@
   body</a> encoded as UTF-8 and labeled with the <a href=#mime-type>MIME
   type</a> <code><a href=#text/srt>text/srt</a></code>. <a href=#refsRFC3629>[RFC3629]</a></p>
 
-  <p>A <dfn id=websrt-file-body>WebSRT file body</dfn> consists of an optional U+FEFF BYTE
-  ORDER MARK (BOM) character, followed by zero or more <a href=#websrt-line-terminator title="WebSRT line terminator">WebSRT line terminators</a>,
-  followed by zero or more <a href=#websrt-cue title="WebSRT cue">WebSRT cues</a>
-  separated from each other by two or more <a href=#websrt-line-terminator title="WebSRT line
-  terminator">WebSRT line terminators</a>, followed by zero or more
-  <a href=#websrt-line-terminator title="WebSRT line terminator">WebSRT line
-  terminators</a>.</p>
+  <p>A <dfn id=websrt-file-body>WebSRT file body</dfn> consists of the following
+  components, in the following order:</p>
 
-  <p>A <dfn id=websrt-cue>WebSRT cue</dfn> consists of the following components, in
+  <ol><li>An optional U+FEFF BYTE ORDER MARK (BOM) character.</li>
+
+   <li>The string "<code title="">WEBSRT</code>", a single U+0020
+   SPACE character, and the string "<code title="">FILE</code>".</li>
+
+   <li>Optionally, either a U+0020 SPACE character or a U+0009
+   CHARACTER TABULATION (tab) character followed by any number of
+   characters that are not U+000A LINE FEED (LF) or U+000D CARRIAGE
+   RETURN (CR) characters.</li> <!-- allows for Emacs line -->
+
+   <li>Two or more <a href=#websrt-line-terminator title="WebSRT line terminator">WebSRT line
+   terminators</a>.</li> <!-- the first one to terminate the magic
+   line, the second one to terminate the header block: in the future,
+   we can add a metadata block before the first blank line -->
+
+   <li>Zero or more <a href=#websrt-cue title="WebSRT cue">WebSRT cues</a>
+   separated from each other by two or more <a href=#websrt-line-terminator title="WebSRT line
+   terminator">WebSRT line terminators</a>.</li>
+
+   <li>Zero or more <a href=#websrt-line-terminator title="WebSRT line terminator">WebSRT line
+   terminators</a>.</li>
+
+  </ol><p>A <dfn id=websrt-cue>WebSRT cue</dfn> consists of the following components, in
   the given order:</p>
 
   <ol><li>Optionally, a <a href=#websrt-cue-identifier>WebSRT cue identifier</a> followed by a <a href=#websrt-line-terminator>WebSRT line terminator</a>.</li>
    <li><a href=#websrt-cue-timings>WebSRT cue timings</a>.</li>
    <li>Optionally, one or more U+0020 SPACE characters or U+0009 CHARACTER TABULATION (tab) characters followed by <a href=#websrt-cue-settings>WebSRT cue settings</a>.</li>
    <li>A <a href=#websrt-line-terminator>WebSRT line terminator</a>.</li>
-   <li>Optionally, a <a href=#websrt-voice-declaration>WebSRT voice declaration</a> followed by zero or more U+0020 SPACE characters or U+0009 CHARACTER TABULATION (tab) characters.</li>
    <li>The <dfn id=cue-payload>cue payload</dfn>: either <a href=#websrt-cue-text>WebSRT cue text</a> or <a href=#websrt-metadata-text>WebSRT metadata text</a>.</li>
   </ol><p><a href=#websrt-cue-text>WebSRT cue text</a> is syntactically a subset of
   <a href=#websrt-metadata-text>WebSRT metadata text</a>. Conformance checkers, when
@@ -29144,8 +29184,7 @@
    DIGIT NINE (9), representing the <var title="">seconds</var> as a
    base ten integer in the range 0 ≤ <var title="">seconds</var> ≤ 59.</li>
 
-   <li>Either a U+002E FULL STOP character (.) or a U+002C COMMA
-   character (,).</li>
+   <li>A U+002E FULL STOP character (.).</li>
 
    <li>Three characters in the range U+0030 DIGIT ZERO (0) to U+0039
    DIGIT NINE (9), representing the thousandths of a second <var title="">seconds-frac</var> as a base ten integer.</li>
@@ -29205,22 +29244,6 @@
   <ol><li>A U+0041 LATIN CAPITAL LETTER A character.</li>
    <li>A U+003A COLON character (:).</li>
    <li>One of the following strings: "<code title="">start</code>", "<code title="">middle</code>", "<code title="">end</code>"</li>
-  </ol><p>A <dfn id=websrt-voice-declaration>WebSRT voice declaration</dfn> consists of the following
-  components, in the order given:</p>
-
-  <ol><li>A U+003C LESS-THAN SIGN character (<).</li>
-   <li>One of the following:
-    <ul class=brief><li>One character in the range U+0031 DIGIT ONE (1) to U+0039
-     DIGIT NINE (9), followed by zero or more characters in the range
-     U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9)
-     <li>The string "<dfn id=timed-track-cue-narrator-voice title="timed track cue narrator voice"><code>narrator</code></dfn>".</li>
-     <li>The string "<dfn id=timed-track-cue-music-voice title="timed track cue music voice"><code>music</code></dfn>".</li>
-     <li>The string "<dfn id=timed-track-cue-lyric-voice title="timed track cue lyric voice"><code>lyric</code></dfn>".</li>
-     <li>The string "<dfn id=timed-track-cue-sound-voice title="timed track cue sound voice"><code>sound</code></dfn>".</li> <!-- for audio fx descriptions -->
-     <li>The string "<dfn id=timed-track-cue-comment-voice title="timed track cue comment voice"><code>comment</code></dfn>".</li> <!-- for annotations -->
-     <li>The string "<dfn id=timed-track-cue-credit-voice title="timed track cue credit voice"><code>credit</code></dfn>".</li>
-    </ul></li>
-   <li>A U+003E GREATER-THAN SIGN character (>).</li>
   </ol><p><dfn id=websrt-metadata-text>WebSRT metadata text</dfn> consists of any sequence of one
   or more characters other than U+000A LINE FEED (LF) characters and
   U+000D CARRIAGE RETURN (CR) characters, each optionally separated
@@ -29229,111 +29252,182 @@
   does not start or end with a <a href=#websrt-line-terminator>WebSRT line
   terminator</a>.)</p>
 
-  <p><dfn id=websrt-cue-text>WebSRT cue text</dfn> consists of one or more <a href=#websrt-cue-components>WebSRT
+  <p><dfn id=websrt-cue-text>WebSRT cue text</dfn> consists of zero or more <a href=#websrt-cue-components>WebSRT
   cue components</a>, in any order, each optionally separated from
   the next by a <a href=#websrt-line-terminator>WebSRT line terminator</a>.</p>
 
   <p>The <dfn id=websrt-cue-components>WebSRT cue components</dfn> are:</p>
 
-  <ul><li>A <a href=#websrt-cue-text-span>WebSRT cue text span</a>, representing the text of the cue.</li>
-   <li>A <a href=#websrt-cue-amp-escape>WebSRT cue amp escape</a>, representing a "&" character in the text of the cue.</li>
-   <li>A <a href=#websrt-cue-lt-escape>WebSRT cue lt escape</a>, representing a "<" character in the text of the cue.</li>
-   <li>A <a href=#websrt-cue-timestamp>WebSRT cue timestamp</a>.</li>
+  <ul><li>A <a href=#websrt-cue-class-span>WebSRT cue class span</a>.</li>
    <li>A <a href=#websrt-cue-italics-span>WebSRT cue italics span</a>.</li>
    <li>A <a href=#websrt-cue-bold-span>WebSRT cue bold span</a>.</li>
    <li>A <a href=#websrt-cue-ruby-span>WebSRT cue ruby span</a>.</li>
+   <li>A <a href=#websrt-cue-voice-span>WebSRT cue voice span</a>.</li>
+
+   <li>A <a href=#websrt-cue-timestamp>WebSRT cue timestamp</a>.</li>
+
+   <li>A <a href=#websrt-cue-text-span>WebSRT cue text span</a>, representing the text of the cue.</li>
+
+   <li>A <a href=#websrt-cue-amp-escape>WebSRT cue amp escape</a>, representing a "&" character in the text of the cue.</li>
+   <li>A <a href=#websrt-cue-lt-escape>WebSRT cue lt escape</a>, representing a "<" character in the text of the cue.</li>
+   <li>A <a href=#websrt-cue-gt-escape>WebSRT cue gt escape</a>, representing a ">" character in the text of the cue.</li>
+
   </ul><p><dfn id=websrt-cue-internal-text>WebSRT cue internal text</dfn> consists of an optional
   <a href=#websrt-line-terminator>WebSRT line terminator</a>, followed by zero or more
   <a href=#websrt-cue-components>WebSRT cue components</a>, in any order, each optionally
   followed by a <a href=#websrt-line-terminator>WebSRT line terminator</a>.</p>
 
-  <p>A <dfn id=websrt-cue-text-span>WebSRT cue text span</dfn> consists of one or more
-  characters other than U+000A LINE FEED (LF) characters, U+000D
-  CARRIAGE RETURN (CR) characters, U+0026 AMPERSAND characters (&),
-  and U+003C LESS-THAN SIGN characters (<).</p>
 
-  <p>A <dfn id=websrt-cue-amp-escape>WebSRT cue amp escape</dfn> is the five character string
-  consisting of a U+0026 AMPERSAND character (&), a U+0061 LATIN SMALL
-  LETTER A character, a U+006D LATIN SMALL LETTER M character, a
-  U+0070 LATIN SMALL LETTER P character, and a U+003B SEMICOLON
-  character (;).
 
-  <p>A <dfn id=websrt-cue-lt-escape>WebSRT cue lt escape</dfn> is the five character string
-  consisting of a U+0026 AMPERSAND character (&), a U+006C LATIN SMALL
-  LETTER L character, a U+0074 LATIN SMALL LETTER T character, and a
-  U+003B SEMICOLON character (;).
+  <p>A <dfn id=websrt-cue-class-span>WebSRT cue class span</dfn> consists of a <a href=#websrt-cue-span-start-tag>WebSRT cue
+  span start tag</a> "<code title="">c</code>" that disallows an
+  annotation, <a href=#websrt-cue-internal-text>WebSRT cue internal text</a> representing cue
+  text, and a <a href=#websrt-cue-span-end-tag>WebSRT cue span end tag</a> "<code title="">c</code>".</p>
 
-  <p>A <dfn id=websrt-cue-timestamp>WebSRT cue timestamp</dfn> consists of a U+003C LESS-THAN
-  SIGN character (<), followed by a <a href=#websrt-timestamp>WebSRT timestamp</a>
-  representing the time that the given point in the cue becomes
-  active, followed by a U+003E GREATER-THAN SIGN character (>). The
-  time represented by the <a href=#websrt-timestamp>WebSRT timestamp</a> must be
-  greater than the times represented by any previous <a href=#websrt-cue-timestamp title="WebSRT cue timestamp">WebSRT cue timestamps</a> in the
-  cue, as well as greater than the cue's start time offset, and less
-  than the cue's end time offset.</p>
+  <p>A <dfn id=websrt-cue-italics-span>WebSRT cue italics span</dfn> consists of a <a href=#websrt-cue-span-start-tag>WebSRT
+  cue span start tag</a> "<code title="">i</code>" that disallows
+  an annotation, <a href=#websrt-cue-internal-text>WebSRT cue internal text</a> representing
+  the italicized text, and a <a href=#websrt-cue-span-end-tag>WebSRT cue span end tag</a>
+  "<code title="">i</code>".</p>
 
-  <p>A <dfn id=websrt-cue-italics-span>WebSRT cue italics span</dfn> consists of a U+003C
-  LESS-THAN SIGN character (<), a U+0069 LATIN SMALL LETTER I
-  character, and a U+003E GREATER-THAN SIGN character (>), then
-  <a href=#websrt-cue-internal-text>WebSRT cue internal text</a> representing the italicized
-  text, and finally a U+003C LESS-THAN SIGN character (<), a U+002F
-  SOLIDUS character (/), a U+0069 LATIN SMALL LETTER I character, and
-  a U+003E GREATER-THAN SIGN character (>).</p>
+  <p>A <dfn id=websrt-cue-bold-span>WebSRT cue bold span</dfn> consists of a <a href=#websrt-cue-span-start-tag>WebSRT cue
+  span start tag</a> "<code title="">b</code>" that disallows an
+  annotation, <a href=#websrt-cue-internal-text>WebSRT cue internal text</a> representing the
+  boldened text, and a <a href=#websrt-cue-span-end-tag>WebSRT cue span end tag</a> "<code title="">b</code>".</p>
 
-  <p>A <dfn id=websrt-cue-bold-span>WebSRT cue bold span</dfn> consists of a U+003C LESS-THAN
-  SIGN character (<), a U+0062 LATIN SMALL LETTER B character, and
-  a U+003E GREATER-THAN SIGN character (>), then <a href=#websrt-cue-internal-text>WebSRT cue
-  internal text</a> representing the bolded text, and finally a
-  U+003C LESS-THAN SIGN character (<), a U+002F SOLIDUS character
-  (/), a U+0062 LATIN SMALL LETTER B character, and a U+003E
-  GREATER-THAN SIGN character (>).</p>
-
   <p>A <dfn id=websrt-cue-ruby-span>WebSRT cue ruby span</dfn> consists of the following
   components, in the order given:</p>
 
-  <ol><li>The string "<code title=""><ruby></code>".</li>
+  <ol><li>A <a href=#websrt-cue-span-start-tag>WebSRT cue span start tag</a> "<code title="">i</code>" that disallows an annotation.</li>
    <li>One or more occurrences of the following group of components, in the order given:
     <ol><li><a href=#websrt-cue-internal-text>WebSRT cue internal text</a>, representing the ruby base.</li>
-     <li>The string "<code title=""><rt></code>".</li>
-     <li><a href=#websrt-cue-internal-text>WebSRT cue internal text</a>, representing the ruby text component of th ruby annotation.</li>
-     <li>The string "<code title=""></rt></code>". If this is
-     the last occurance of this group of components in the
+     <li>A <a href=#websrt-cue-span-start-tag>WebSRT cue span start tag</a> "<code title="">rt</code>" that disallows an annotation.</li>
+     <li>A <dfn id=websrt-cue-ruby-text-span>WebSRT cue ruby text span</dfn>: <a href=#websrt-cue-internal-text>WebSRT cue internal text</a>, representing the ruby text component of the ruby annotation.</li>
+     <li>A <a href=#websrt-cue-span-end-tag>WebSRT cue span end tag</a> "<code title="">rt</code>".
+     If this is the last occurance of this group of components in the
      <a href=#websrt-cue-ruby-span>WebSRT cue ruby span</a>, then this last end tag string
      may be omitted.</li>
     </ol></li>
    <li>If the last end tag string was not omitted: Optionally, a <a href=#websrt-line-terminator>WebSRT line terminator</a>.</li>
    <li>If the last end tag string was not omitted: Zero or more U+0020 SPACE characters or U+0009 CHARACTER TABULATION (tab) characters, each optionally followed by a <a href=#websrt-line-terminator>WebSRT line terminator</a>.</li>
-   <li>The string "<code title=""></ruby></code>".</li>
-  </ol><p>For historical reasons, <a href=#websrt-file title="WebSRT file">WebSRT
-  files</a> <a href=#supports-external-timed-track-character-encoding-overrides title="supports external timed track character
-  encoding overrides">support external timed track character encoding
-  overrides</a>.</p>
+   <li>A <a href=#websrt-cue-span-end-tag>WebSRT cue span end tag</a> "<code title="">ruby</code>".</li>
+  </ol><p>A <dfn id=websrt-cue-voice-span>WebSRT cue voice span</dfn> consists of the following
+  components, in the order given:</p>
 
+  <ol><li>A <a href=#websrt-cue-span-start-tag>WebSRT cue span start tag</a> "<code title="">v</code>" that requires an annotation; the annotation represents the name of the voice.</li>
+   <li><a href=#websrt-cue-internal-text>WebSRT cue internal text</a>.</li>
+   <li>A <a href=#websrt-cue-span-end-tag>WebSRT cue span end tag</a> "<code title="">v</code>". If this <a href=#websrt-cue-voice-span>WebSRT cue voice span</a> is the only <a href=#websrt-cue-components title="WebSRT cue components">component</a> of its <a href=#websrt-cue-text>WebSRT cue text</a> sequence, then the end tag may be omitted for brevity.</li>
+  </ol><p>A <dfn id=websrt-cue-span-start-tag>WebSRT cue span start tag</dfn> has a <var title="">tag
+  name</var> and either allows, requires, and disallows an annotation,
+  and consists of the following components, in the order given:</p>
 
+  <ol><li>A U+003C LESS-THAN SIGN character (<).</li>
+
+   <li>The <var title="">tag name</var>.</li>
+
+   <li>Zero or more occurrences of the following sequence:
+
+    <ol><li>U+002E FULL STOP character (.)</li>
+
+     <li>One or more characters other than U+0009 CHARACTER TABULATION
+     (tab) characters, U+000A LINE FEED (LF) characters, U+000D
+     CARRIAGE RETURN (CR) characters, U+0020 SPACE characters, U+0026
+     AMPERSAND characters (&), U+003C LESS-THAN SIGN characters
+     (<), U+003E GREATER-THAN SIGN characters (>), and U+002E FULL
+     STOP characters (.), representing a class that describes the cue
+     span's significance.</li>
+
+    </ol></li>
+
+   <li>
+<!--
+    <dl class="switch">
+
+     <dt>If the start tag allows an annotation:</dt>
+
+     <dd>Optionally, a <span>WebSRT cue span start tag annotation</span>.</dd>
+
+     <dt>-->If the start tag requires an annotation:<!--</dt>
+
+     <dd>A <span>WebSRT cue span start tag annotation</span>.</dd>
+
+    </dl>
+
+    <p>A <dfn>WebSRT cue span start tag annotation</dfn> consists of-->
+
+    one or more of the following components, the concatenation of
+    their representations having a value that contains at least one
+    character other than U+0020 SPACE and U+0009 CHARACTER TABULATION
+    (tab) characters:<!--</p>-->
+
+    <ul><li><a href=#websrt-cue-span-start-tag-annotation-text>WebSRT cue span start tag annotation text</a>, representing the text of the annotation.</li>
+     <li>A <a href=#websrt-cue-amp-escape>WebSRT cue amp escape</a>, representing a "&" character in the text of the annotation.</li>
+     <li>A <a href=#websrt-cue-lt-escape>WebSRT cue lt escape</a>, representing a "<" character in the text of the annotation.</li>
+     <li>A <a href=#websrt-cue-gt-escape>WebSRT cue gt escape</a>, representing a ">" character in the text of the annotation.</li>
+    </ul></li>
+
+   <li>A U+003E GREATER-THAN SIGN character (>).</li>
+
+  </ol><p>A <dfn id=websrt-cue-span-end-tag>WebSRT cue span end tag</dfn> has a <var title="">tag
+  name</var> and consists of the following components, in the order
+  given:</p>
+
+  <ol><li>A U+003C LESS-THAN SIGN character (<).</li>
+   <li>U+002F SOLIDUS character (/).</li>
+   <li>The <var title="">tag name</var>.</li>
+   <li>A U+003E GREATER-THAN SIGN character (>).</li>
+  </ol><p>A <dfn id=websrt-cue-timestamp>WebSRT cue timestamp</dfn> consists of a U+003C LESS-THAN
+  SIGN character (<), followed by a <a href=#websrt-timestamp>WebSRT timestamp</a>
+  representing the time that the given point in the cue becomes
+  active, followed by a U+003E GREATER-THAN SIGN character (>). The
+  time represented by the <a href=#websrt-timestamp>WebSRT timestamp</a> must be
+  greater than the times represented by any previous <a href=#websrt-cue-timestamp title="WebSRT cue timestamp">WebSRT cue timestamps</a> in the
+  cue, as well as greater than the cue's start time offset, and less
+  than the cue's end time offset.</p>
+
+  <p>A <dfn id=websrt-cue-text-span>WebSRT cue text span</dfn> consists of one or more
+  characters other than U+000A LINE FEED (LF) characters, U+000D
+  CARRIAGE RETURN (CR) characters, U+0026 AMPERSAND characters (&),
+  and U+003C LESS-THAN SIGN characters (<).</p>
+
+  <p><dfn id=websrt-cue-span-start-tag-annotation-text>WebSRT cue span start tag annotation text</dfn> consists of
+  one or more characters other than U+000A LINE FEED (LF) characters,
+  U+000D CARRIAGE RETURN (CR) characters, U+0026 AMPERSAND characters
+  (&), and U+003E GREATER-THAN SIGN characters (>).</p>
+
+  <p>A <dfn id=websrt-cue-amp-escape>WebSRT cue amp escape</dfn> is the five character string
+  "<code title="">&</code>".</p>
+
+  <p>A <dfn id=websrt-cue-lt-escape>WebSRT cue lt escape</dfn> is the five character string
+  "<code title=""><</code>".</p>
+
+  <p>A <dfn id=websrt-cue-gt-escape>WebSRT cue gt escape</dfn> is the five character string
+  "<code title="">></code>".</p>
+
+
+
   <div class=impl>
 
   <h6 id=parsing-0><span class=secno>4.8.10.11.2 </span>Parsing</h6>
 
-  <p>A <dfn id=websrt-parser>WebSRT parser</dfn>, given an input byte stream, a
+  <p>A <dfn id=websrt-parser>WebSRT parser</dfn>, given an input byte stream and a
   <a href=#timed-track-list-of-cues>timed track list of cues</a> <var title="">output</var>,
-  and optionally a character encoding override <var title="">encoding</var>, must convert the bytes into a string of
-  Unicode characters by interpreting them as the given <var title="">encoding</var>, or UTF-8 if <var title="">encoding</var> is
-  not provided, and then must parse the resulting string according to
-  the <a href=#websrt-parser-algorithm>WebSRT parser algorithm</a> below. This results in
-  <a href=#timed-track-cue title="timed track cue">timed track cues</a> being added to
-  <var title="">output</var>. <a href=#refsRFC3629>[RFC3629]</a></p>
+  must <a href=#decoded-as-utf-8,-with-error-handling title="decoded as UTF-8, with error handling">decode the
+  byte stream as UTF-8, with error handling</a>, and then must
+  parse the resulting string according to the <a href=#websrt-parser-algorithm>WebSRT parser
+  algorithm</a> below. This results in <a href=#timed-track-cue title="timed track
+  cue">timed track cues</a> being added to <var title="">output</var>. <a href=#refsRFC3629>[RFC3629]</a></p>
 
   <p>A <a href=#websrt-parser>WebSRT parser</a>, specifically its conversion and
   parsing steps, is typically run asynchronously, with the input byte
   stream being updated incrementally as the resource is downloaded;
   this is called an <dfn id=incremental-websrt-parser>incremental WebSRT parser</dfn>.</p>
 
-  <p>The following <a href=#mime-type title="MIME type">MIME type<!--s--></a> must be
-  recognised as indicating the <a href=#websrt>WebSRT</a> format:</p>
+  <p>A <a href=#websrt-parser>WebSRT parser</a> verifies a file signature before
+  parsing the provided byte stream. If the stream lacks this WebSRT
+  file signature, then the parser aborts.</p>
 
-  <ul class=brief><li><code><a href=#text/srt>text/srt</a></code></li>
-  </ul><!--<p class="note">Not all of these MIME types are valid registered
-  types.</p>--><p>When converting the bytes into Unicode characters, if the
+  <p>When converting the bytes into Unicode characters, if the
   encoding used is UTF-8, the bytes must be <a href=#decoded-as-utf-8,-with-error-handling title="decoded as
   UTF-8, with error handling">decoded with the error handling</a>
   defined in this specification, and all U+0000 NULL characters must
@@ -29358,6 +29452,63 @@
    <li><p>If the character indicated by <var title="">position</var>
    is a U+FEFF BYTE ORDER MARK (BOM) character, advance <var title="">position</var> to the next character in <var title="">input</var>.</li>
 
+
+   <li><p><a href=#collect-a-sequence-of-characters>Collect a sequence of characters</a> that are
+   <em>not</em> U+000D CARRIAGE RETURN (CR) or U+000A LINE FEED (LF)
+   characters. Let <var title="">line</var> be those characters, if
+   any.</li>
+
+   <li><p>If <var title="">line</var> is less than eleven characters
+   long, then abort these steps. The file is not a <a href=#websrt-file>WebSRT
+   file</a>.</li>
+
+   <li><p>If <var title="">line</var> is exactly eleven characters
+   long but does not exactly equal "<code title="">WEBSRT FILE</code>", then abort these steps. The file
+   is not a <a href=#websrt-file>WebSRT file</a>.</li>
+
+   <li><p>If <var title="">line</var> is more than eleven characters
+   long but does the first elevent characters do not exactly equal
+   "<code title="">WEBSRT FILE</code>", or the twelfth character
+   is neither a U+0020 SPACE character nor a U+0009 CHARACTER
+   TABULATION (tab) character, then abort these steps. The file is not
+   a <a href=#websrt-file>WebSRT file</a>.</li>
+
+   <li><p>If <var title="">position</var> is past the end of <var title="">input</var>, then jump to the step labeled
+   <i>end</i>.</li>
+
+   <li><p>If the character indicated by <var title="">position</var>
+   is a U+000D CARRIAGE RETURN (CR) character, advance <var title="">position</var> to the next character in <var title="">input</var>.</li>
+
+   <li><p>If <var title="">position</var> is past the end of <var title="">input</var>, then jump to the step labeled
+   <i>end</i>.</li>
+
+   <li><p>If the character indicated by <var title="">position</var>
+   is a U+000A LINE FEED (LF) character, advance <var title="">position</var> to the next character in <var title="">input</var>.</li>
+
+
+   <li><p><i><a href=#the-header-element>Header</a></i>: <a href=#collect-a-sequence-of-characters>Collect a sequence of characters</a>
+   that are <em>not</em> U+000D CARRIAGE RETURN (CR) or U+000A LINE
+   FEED (LF) characters. Let <var title="">line</var> be those
+   characters, if any.</li>
+
+   <li><p>If <var title="">position</var> is past the end of <var title="">input</var>, then jump to the step labeled
+   <i>end</i>.</li>
+
+   <li><p>If the character indicated by <var title="">position</var>
+   is a U+000D CARRIAGE RETURN (CR) character, advance <var title="">position</var> to the next character in <var title="">input</var>.</li>
+
+   <li><p>If <var title="">position</var> is past the end of <var title="">input</var>, then jump to the step labeled
+   <i>end</i>.</li>
+
+   <li><p>If the character indicated by <var title="">position</var>
+   is a U+000A LINE FEED (LF) character, advance <var title="">position</var> to the next character in <var title="">input</var>.</li>
+
+   <!-- In v2, this is where we can put header metadata processing -->
+
+   <li><p>If <var title="">line</var> is not the empty string, then
+   jump back to the step labeled <i><a href=#the-header-element>header</a></i>.</li>
+
+
    <li><p><i>Cue loop</i>: <a href=#collect-a-sequence-of-characters>Collect a sequence of
    characters</a> that are either U+000D CARRIAGE RETURN (CR) or
    U+000A LINE FEED (LF) characters.</li>
@@ -29393,9 +29544,6 @@
    alignment</a> be <a href=#timed-track-cue-middle-alignment title="timed track cue middle
    alignment">middle alignment</a>.</li>
 
-   <li><p>Let <var title="">cue</var>'s <a href=#timed-track-cue-voice-identifier>timed track cue
-   voice identifier</a> be the empty string.</li>
-
    <li><p>Let <var title="">cue</var>'s <a href=#timed-track-cue-text>timed track cue
    text</a> be the empty string.</li>
 
@@ -29474,9 +29622,12 @@
 
    <li><p>Return to the step labeled <i>cue text loop</i>.</li>
 
-   <li><p><i>Cue text processing</i>: <a href=#collect-websrt-cue-voice-and-text>Collect WebSRT cue voice
-   and text</a> from <var title="">cue text</var>, using <var title="">cue</var> for the results. If that fails, discard <var title="">cue</var> and jump to the step labeled <i>cue
-   loop</i>.</li>
+   <li><p><i>Cue text processing</i>: Let the <a href=#timed-track-cue-text>timed track cue
+   text</a> of <var title="">cue</var> be <var title="">cue
+   text</var>, and let the rules for its interpretation be the
+   <a href=#websrt-cue-text-parsing-rules>WebSRT cue text parsing rules</a>, the <a href=#websrt-cue-text-rendering-rules>WebSRT cue
+   text rendering rules</a>, and the <a href=#websrt-cue-text-dom-construction-rules>WebSRT cue text DOM
+   construction rules</a>.</li>
 
    <li><p>Add <var title="">cue</var> to the <a href=#timed-track-list-of-cues>timed track list of
    cues</a> <var title="">output</var>.</li>
@@ -29540,18 +29691,15 @@
 
    <li><p>If <!--<var title="">position</var> is beyond the end of
    <var title="">input</var> or if--> the character at <var title="">position</var> is not a U+002D HYPHEN-MINUS character (-)
-   then abort these steps and return failure. Otherwise, move <var title="">position</var> forwards
-   one character.</li>
+   then abort these steps and return failure. Otherwise, move <var title="">position</var> forwards one character.</li>
 
    <li><p>If <!--<var title="">position</var> is beyond the end of
    <var title="">input</var> or if--> the character at <var title="">position</var> is not a U+002D HYPHEN-MINUS character (-)
-   then abort these steps and return failure. Otherwise, move <var title="">position</var> forwards
-   one character.</li>
+   then abort these steps and return failure. Otherwise, move <var title="">position</var> forwards one character.</li>
 
    <li><p>If <!--<var title="">position</var> is beyond the end of
-   <var title="">input</var> or if--> the character at <var title="">position</var> is not a U+003E GREATER-THAN SIGN character (>)
-   then abort these steps and return failure. Otherwise, move <var title="">position</var> forwards
-   one character.</li>
+   <var title="">input</var> or if--> the character at <var title="">position</var> is not a U+003E GREATER-THAN SIGN character
+   (>) then abort these steps and return failure. Otherwise, move <var title="">position</var> forwards one character.</li>
 
    <li><p><a href=#skip-whitespace>Skip whitespace</a>.</li>
 
@@ -29793,6 +29941,8 @@
   <ol><li><p>Let <var title="">input</var> and <var title="">position</var> be the same variables as those of the same
    name in the algorithm that invoked these steps.</li>
 
+   <li><p>Let <var title="">most significant units</var> be <i title="">minutes</i>.</li>
+
    <li><p>If <var title="">position</var> is past the end of <var title="">input</var>, return an error and abort these
    steps.</li>
 
@@ -29802,14 +29952,15 @@
 
    <li><p><a href=#collect-a-sequence-of-characters>Collect a sequence of characters</a> in the range
    U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9), and let <var title="">string</var> be the collected substring.</li>
-<!--(should only do this check for minutes, not hours, if we ever bring it back)
-   <li><p>If <var title="">string</var> is not exactly two characters
-   in length, return an error and abort these steps.</p></li>
--->
+
    <li><p>Interpret <var title="">string</var> as a base-ten
    integer. Let <var title="">value<sub>1</sub></var> be that
    integer.</li>
 
+   <li><p>If <var title="">string</var> is not exactly two characters
+   in length, or if <var title="">value<sub>1</sub></var> is greater
+   than 59, let <var title="">most significant units</var> be <i title="">hours</i>.</li>
+
    <li><p>If <var title="">position</var> is beyond the end of <var title="">input</var> or if the character at <var title="">position</var> is not a U+003A COLON character (:), then
    return an error and abort these steps. Otherwise, move <var title="">position</var> forwards one character.</li>
 
@@ -29819,25 +29970,23 @@
 
    <li><p><a href=#collect-a-sequence-of-characters>Collect a sequence of characters</a> in the range
    U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9), and let <var title="">string</var> be the collected substring.</li>
-<!--
+
    <li><p>If <var title="">string</var> is not exactly two characters
-   in length, return an error and abort these steps.</p></li>
--->
+   in length, return an error and abort these steps.</li>
+
    <li><p>Interpret <var title="">string</var> as a base-ten
    integer. Let <var title="">value<sub>2</sub></var> be that
    integer.</li>
 
    <li>
 
-    <p>If <!--<var title="">value<sub>1</sub></var> is greater than
-    59, or if--> <var title="">position</var> is not beyond the end of
-    <var title="">input</var> and the character at <var title="">position</var> is not a U+003A COLON character (:), run
-    these substeps:</p>
+    <p>If <var title="">most significant units</var> is <i title="">hours</i>, or if <var title="">position</var> is not
+    beyond the end of <var title="">input</var> and the character at
+    <var title="">position</var> is not a U+003A COLON character (:),
+    run these substeps:</p>
 
-    <ol><li><p><!--If <var title="">position</var> is beyond the end of <var
-     title="">input</var> or if the character at <var
-     title="">position</var> is not a U+003A COLON character (:), then
-     return an error and abort these steps. Otherwise, move--> Move <var title="">position</var> forwards one character.</li>
+    <ol><li><p>If <var title="">position</var> is beyond the end of <var title="">input</var> or if the character at <var title="">position</var> is not a U+003A COLON character (:), then
+     return an error and abort these steps. Otherwise, move <var title="">position</var> forwards one character.</li>
 
      <li><p>If the character indicated by <var title="">position</var>
      is not one of U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9), then
@@ -29845,27 +29994,25 @@
 
      <li><p><a href=#collect-a-sequence-of-characters>Collect a sequence of characters</a> in the range
      U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9), and let <var title="">string</var> be the collected substring.</li>
-<!--
+
      <li><p>If <var title="">string</var> is not exactly two
      characters in length, return an error and abort these
-     steps.</p></li>
--->
+     steps.</li>
+
      <li><p>Interpret <var title="">string</var> as a base-ten
      integer. Let <var title="">value<sub>3</sub></var> be that
      integer.</li>
 
-    </ol><p>Otherwise (if <!--<var title="">value<sub>1</sub></var> is less
-    than or equal to 59, and either--> <var title="">position</var> is
+    </ol><p>Otherwise (if <var title="">most significant units</var> is not
+    <i title="">hours</i>, and either <var title="">position</var> is
     beyond the end of <var title="">input</var>, or the character at
     <var title="">position</var> is not a U+003A COLON character (:)),
     let <var title="">value<sub>3</sub></var> have the value of <var title="">value<sub>2</sub></var>, then <var title="">value<sub>2</sub></var> have the value of <var title="">value<sub>1</sub></var>, then let <var title="">value<sub>1</sub></var> equal zero.</p>
 
    </li>
 
-   <li><p>If <var title="">position</var> is beyond the end of <var title="">input</var> or if the character at <var title="">position</var> is not either a U+002C COMMA character (,)
-   or a U+002E FULL STOP character (.), then return an error and abort
-   these steps. Otherwise, move <var title="">position</var> forwards
-   one character.</li>
+   <li><p>If <var title="">position</var> is beyond the end of <var title="">input</var> or if the character at <var title="">position</var> is not a U+002E FULL STOP character (.),
+   then return an error and abort these steps. Otherwise, move <var title="">position</var> forwards one character.</li>
 
    <li><p>If the character indicated by <var title="">position</var>
    is not one of U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9), then
@@ -29873,18 +30020,19 @@
 
    <li><p><a href=#collect-a-sequence-of-characters>Collect a sequence of characters</a> in the range
    U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9), and let <var title="">string</var> be the collected substring.</li>
-<!--
+
    <li><p>If <var title="">string</var> is not exactly three
    characters in length, return an error and abort these
-   steps.</p></li>
--->
+   steps.</li>
+
    <li><p>Interpret <var title="">string</var> as a base-ten
    integer. Let <var title="">value<sub>4</sub></var> be that
    integer.</li>
 
-<!--
-   (this is where checks of the ranges of the data would go, to make sure thousandsth < 1000, seconds < 60, minutes < 60)
--->
+   <li><p>If <var title="">value<sub>2</sub></var> is greater than 59,
+   if <var title="">value<sub>3</sub></var> is greater than 59, or if
+   <var title="">value<sub>4</sub></var> is greater than 999, return
+   an error and abort these steps.</li>
 
    <li><p>Let <var title="">result</var> be <span title=""><var title="">value<sub>1</sub></var>×60×60 + <var title="">value<sub>2</sub></var>×60 + <var title="">value<sub>3</sub></var> + <var title="">value<sub>4</sub></var>∕1000</span>. <!-- &#x00f7;
    is the division sign if people prefer that to the slash
@@ -29892,100 +30040,6 @@
 
    <li><p>Return <var title="">result</var>.</li>
 
-  </ol><p>When the steps above say that a user agent is to <dfn id=collect-websrt-cue-voice-and-text>collect
-  WebSRT cue voice and text</dfn> from a string <var title="">input</var> for a <a href=#timed-track-cue>timed track cue</a> <var title="">cue</var>, the user agent must run the following steps:</p>
-
-  <ol><li><p>Let <var title="">input</var> be the string being
-   parsed.</li>
-
-   <li><p>Let <var title="">position</var> be a pointer into <var title="">input</var>, initially pointing at the start of the
-   string.</li>
-
-   <li><p>If <var title="">position</var> is past the end of <var title="">input</var>, return an error and abort these
-   steps.</li>
-
-   <li>
-
-    <p>Examine the first few characters of <var title="">input</var>
-    and process them as described by the match set of rules from the
-    following list:</p>
-
-    <dl class=switch><dt>If <var title="">input</var> starts with the string "<code title=""><narrator></code>"</dt>
-     <dd>
-      <p>Let <var title="">cue</var>'s <a href=#timed-track-cue-voice-identifier>timed track cue voice
-      identifier</a> be the string "<code title="timed track cue narrator voice"><a href=#timed-track-cue-narrator-voice>narrator</a></code>"
-      and advance <var title="">position</var> past the matching substring.</p>
-     </dd>
-
-     <dt>If <var title="">input</var> starts with the string "<code title=""><music></code>"</dt>
-     <dd>
-      <p>Let <var title="">cue</var>'s <a href=#timed-track-cue-voice-identifier>timed track cue voice
-      identifier</a> be the string "<code title="timed track cue music voice"><a href=#timed-track-cue-music-voice>music</a></code>"
-      and advance <var title="">position</var> past the matching substring.</p>
-     </dd>
-
-     <dt>If <var title="">input</var> starts with the string "<code title=""><lyric></code>"</dt>
-     <dd>
-      <p>Let <var title="">cue</var>'s <a href=#timed-track-cue-voice-identifier>timed track cue voice
-      identifier</a> be the string "<code title="timed track cue lyric voice"><a href=#timed-track-cue-lyric-voice>lyric</a></code>"
-      and advance <var title="">position</var> past the matching substring.</p>
-     </dd>
-
-     <dt>If <var title="">input</var> starts with the string "<code title=""><sound></code>"</dt>
-     <dd>
-      <p>Let <var title="">cue</var>'s <a href=#timed-track-cue-voice-identifier>timed track cue voice
-      identifier</a> be the string "<code title="timed track cue sound voice"><a href=#timed-track-cue-sound-voice>sound</a></code>"
-      and advance <var title="">position</var> past the matching substring.</p>
-     </dd>
-
-     <dt>If <var title="">input</var> starts with the string "<code title=""><comment></code>"</dt>
-     <dd>
-      <p>Let <var title="">cue</var>'s <a href=#timed-track-cue-voice-identifier>timed track cue voice
-      identifier</a> be the string "<code title="timed track cue comment voice"><a href=#timed-track-cue-comment-voice>comment</a></code>"
-      and advance <var title="">position</var> past the matching substring.</p>
-     </dd>
-
-     <dt>If <var title="">input</var> starts with the string "<code title=""><credit></code>"</dt>
-     <dd>
-      <p>Let <var title="">cue</var>'s <a href=#timed-track-cue-voice-identifier>timed track cue voice
-      identifier</a> be the string "<code title="timed track cue credit voice"><a href=#timed-track-cue-credit-voice>credit</a></code>"
-      and advance <var title="">position</var> past the matching substring.</p>
-     </dd>
-
-
-     <dt>If <var title="">input</var> starts with a U+003C LESS-THAN
-     SIGN character (<), followed by a character in the range
-     U+0031 DIGIT ONE (1) to U+0039 DIGIT NINE (9), followed by zero
-     or more characters in the range U+0030 DIGIT ZERO (0) to U+0039
-     DIGIT NINE (9), followed by a U+003E GREATER-THAN SIGN character
-     (>)</dt>
-
-     <dd>
-      <p>Let <var title="">cue</var>'s <a href=#timed-track-cue-voice-identifier>timed track cue voice
-      identifier</a> be the string of digits (characters in the
-      range U+0030 DIGIT ZERO to U+0039 DIGIT NINE) in the matching
-      substring, and advance <var title="">position</var> past the
-      matching substring.</p>
-     </dd>
-
-     <dt>Otherwise</dt>
-     <dd>
-      <p>Leave the <var title="">cue</var>'s <a href=#timed-track-cue-voice-identifier>timed track cue voice
-      identifier</a> set to the empty string.</p>
-     </dd>
-
-    </dl></li>
-
-   <li><p>If <var title="">position</var> is past the end of <var title="">input</var>, return an error and abort these
-   steps.</li>
-
-   <li><p>Let the <a href=#timed-track-cue-text>timed track cue text</a> of <var title="">cue</var> be the substring of <var title="">input</var>
-   from the position indicated by <var title="">position</var> to the
-   end of the <var title="">input</var>, and let the rules for its
-   interpretation be the <a href=#websrt-cue-text-parsing-rules>WebSRT cue text parsing rules</a>,
-   the <a href=#websrt-cue-text-rendering-rules>WebSRT cue text rendering rules</a>, and the
-   <a href=#websrt-cue-text-dom-construction-rules>WebSRT cue text DOM construction rules</a>.</li>
-
   </ol><h6 id=websrt-cue-text-parsing-rules><span class=secno>4.8.10.11.3 </span><dfn>WebSRT cue text parsing rules</dfn></h6>
 
   <p>A <dfn id=websrt-node-object>WebSRT Node Object</dfn> is a conceptual construct used to
@@ -30005,10 +30059,14 @@
   list of child <a href=#websrt-node-object title="WebSRT Node Object">WebSRT Node
   Objects</a>. The <a href=#websrt-internal-node-object>WebSRT Internal Node Object</a> is said
   to be the <i>parent</i> of the children. Cycles do not occur; the
-  parent-child relationships so constructed form a tree structure.</p>
+  parent-child relationships so constructed form a tree structure.
+  <a href=#websrt-internal-node-object title="WebSRT Internal Node Object">WebSRT Internal Node
+  Objects</a> also have an ordered list of class names, know as
+  their <dfn id="websrt-node-object's-applicable-classes" title="WebSRT Node Object's applicable
+  classes">applicable classes</dfn>.</p>
 
-  <p>There are five concrete classes of <a href=#websrt-internal-node-object title="WebSRT Internal
-  Node Object">WebSRT Internal Node Objects</a>:</p>
+  <p>There are several concrete classes of <a href=#websrt-internal-node-object title="WebSRT
+  Internal Node Object">WebSRT Internal Node Objects</a>:</p>
 
   <dl><dt><dfn id=list-of-websrt-node-objects title="List of WebSRT Node Objects">Lists of WebSRT Node Objects</dfn></dt>
    <dd>
@@ -30016,6 +30074,15 @@
     Node Object">WebSRT Node Objects</a>.</p>
    </dd>
 
+   <dt><dfn id=websrt-class-object title="WebSRT Class Object">WebSRT Class Objects</dfn></dt>
+   <dd>
+    <p>These represent spans of text (a <a href=#websrt-cue-class-span>WebSRT cue class
+    span</a>) in <a href=#websrt-cue-text>WebSRT cue text</a>, and are used to
+    annotate parts of the cue with <a href="#websrt-node-object's-applicable-classes" title="WebSRT Node Object's
+    applicable classes">applicable classes</a> without implying
+    further meaning (such as italics or bold).</p>
+   </dd>
+
    <dt><dfn id=websrt-italic-object title="WebSRT Italic Object">WebSRT Italic Objects</dfn></dt>
    <dd>
     <p>These represent spans of italic text (a <a href=#websrt-cue-italics-span>WebSRT cue
@@ -30036,11 +30103,18 @@
 
    <dt><dfn id=websrt-ruby-text-object title="WebSRT Ruby Text Object">WebSRT Ruby Text Objects</dfn></dt>
    <dd>
-    <p>These represent spans of ruby text (the component of a
-    <a href=#websrt-cue-ruby-span>WebSRT cue ruby span</a> that is between the "<code title=""><rt></code>" and "<code title=""></rt></code>" strings) in <a href=#websrt-cue-text>WebSRT cue
-    text</a>.</p>
+    <p>These represent spans of ruby text (a <a href=#websrt-cue-ruby-text-span>WebSRT cue ruby
+    text span</a>) in <a href=#websrt-cue-text>WebSRT cue text</a>.</p>
    </dd>
 
+   <dt><dfn id=websrt-voice-object title="WebSRT Voice Object">WebSRT Voice Objects</dfn></dt>
+   <dd>
+    <p>These represent spans of text associated with a specific voice
+    (a <a href=#websrt-cue-voice-span>WebSRT cue voice span</a>) in <a href=#websrt-cue-text>WebSRT cue
+    text</a>. A <a href=#websrt-voice-object>WebSRT Voice Object</a> has a value, which
+    is the name of the voice.</p>
+   </dd>
+
   </dl><p><dfn id=websrt-leaf-node-object title="WebSRT Leaf Node Object">WebSRT Leaf Node
   Objects</dfn> are those that contain data, such as text, and cannot
   contain child <a href=#websrt-node-object title="WebSRT Node Object">WebSRT Node
@@ -30112,61 +30186,56 @@
         <p>Ignore the token.</p>
        </dd>
 
+       <dt>If the tag name is "<code title="">c</code>"</dt>
+       <dd>
+        <p><a href=#attach-a-websrt-internal-node-object title="attach a WebSRT Internal Node
+        Object">Attach</a> a <a href=#websrt-class-object>WebSRT Class Object</a>.</p>
+       </dd>
+
        <dt>If the tag name is "<code title="">i</code>"</dt>
        <dd>
-        <p>Create a <a href=#websrt-italic-object>WebSRT Italic Object</a>, and <a href=#attach-a-websrt-internal-node-object title="attach a WebSRT Internal Node Object">attach
-        it</a>.</p>
+        <p><a href=#attach-a-websrt-internal-node-object title="attach a WebSRT Internal Node
+        Object">Attach</a> a <a href=#websrt-italic-object>WebSRT Italic Object</a>.</p>
        </dd>
 
        <dt>If the tag name is "<code title="">b</code>"</dt>
        <dd>
-        <p>Create a <a href=#websrt-bold-object>WebSRT Bold Object</a>, and <a href=#attach-a-websrt-internal-node-object title="attach a WebSRT Internal Node Object">attach
-        it</a>.</p>
+        <p><a href=#attach-a-websrt-internal-node-object title="attach a WebSRT Internal Node
+        Object">Attach</a> a <a href=#websrt-bold-object>WebSRT Bold Object</a>.</p>
        </dd>
 
        <dt>If the tag name is "<code title="">ruby</code>"</dt>
        <dd>
-        <p>Create a <a href=#websrt-ruby-object>WebSRT Ruby Object</a>, and <a href=#attach-a-websrt-internal-node-object title="attach a WebSRT Internal Node Object">attach
-        it</a>.</p>
+        <p><a href=#attach-a-websrt-internal-node-object title="attach a WebSRT Internal Node
+        Object">Attach</a> a <a href=#websrt-ruby-object>WebSRT Ruby Object</a>.</p>
        </dd>
 
        <dt>If the tag name is "<code title="">rt</code>"</dt>
        <dd>
         <p>If <var title="">current</var> is a <a href=#websrt-ruby-object>WebSRT Ruby
-        Object</a>, then create a <a href=#websrt-ruby-text-object>WebSRT Ruby Text
-        Object</a>, and <a href=#attach-a-websrt-internal-node-object title="attach a WebSRT Internal Node
-        Object">attach it</a>.</p>
-        <p>Otherwise, ignore the token.</p>
+        Object</a>, then <a href=#attach-a-websrt-internal-node-object title="attach a WebSRT Internal Node
+        Object">attach</a> a <a href=#websrt-ruby-text-object>WebSRT Ruby Text
+        Object</a>.</p>
        </dd>
 
+       <dt>If the tag name is "<code title="">v</code>"</dt>
+       <dd>
+        <p><a href=#attach-a-websrt-internal-node-object title="attach a WebSRT Internal Node
+        Object">Attach</a> a <a href=#websrt-voice-object>WebSRT Voice Object</a>, and
+        set its value to the token's annotation string.</p>
+       </dd>
+
        <dt>Otherwise</dt>
        <dd>
+        <p>Ignore the token.</p>
+       </dd>
 
-        <ol><li><p>Let <var title="">input</var> be the tag name.</li>
-
-         <li><p>Let <var title="">position</var> be a pointer into
-         <var title="">input</var>, initially pointing at the start of
-         the string.</li>
-
-         <li><p><a href=#collect-a-websrt-timestamp>Collect a WebSRT timestamp</a>.</li>
-
-         <li>
-
-          <p>If that algorithm does not fail, and if <var title="">position</var> now points at the end of <var title="">input</var> (i.e. there are no trailing characters
-          after the timestamp), then create a <a href=#websrt-timestamp-object>WebSRT Timestamp
-          Object</a> whose value is the collected time, then append
-          it to <var title="">current</var>.</p>
-
-          <p>Otherwise, ignore the token.</p>
-
-         </li>
-
-        </ol></dd>
-
       </dl><p>When the steps above say to <dfn id=attach-a-websrt-internal-node-object>attach a WebSRT Internal
-      Node Object</dfn> <var title="">node object</var>, the user
-      agent must append <var title="">node object</var> to <var title="">current</var>, then let <var title="">current</var> be
-      <var title="">node object</var>.</p>
+      Node Object</dfn> of a particular class, the user agent must
+      first create an object of the specified class, then set its list
+      of <a href="#websrt-node-object's-applicable-classes" title="WebSRT Node Object's applicable
+      classes">applicable classes</a> to the list of classes in the
+      token, append the newly created node object to <var title="">current</var>, and finally let <var title="">current</var> be the newly created node object.</p>
 
      </dd>
 
@@ -30176,6 +30245,10 @@
       <p>If any of the following conditions is true, then let <var title="">current</var> be the parent node of <var title="">current</var>.</p>
 
       <ul class=brief><li>The tag name of the end tag token <var title="">token</var>
+       is "<code title="">c</code>" and <var title="">current</var> is
+       a <a href=#websrt-class-object>WebSRT Class Object</a>.</li>
+
+       <li>The tag name of the end tag token <var title="">token</var>
        is "<code title="">i</code>" and <var title="">current</var> is
        a <a href=#websrt-italic-object>WebSRT Italic Object</a>.</li>
 
@@ -30191,6 +30264,10 @@
        is "<code title="">rt</code>" and <var title="">current</var> is
        a <a href=#websrt-ruby-text-object>WebSRT Ruby Text Object</a>.</li>
 
+       <li>The tag name of the end tag token <var title="">token</var>
+       is "<code title="">v</code>" and <var title="">current</var> is
+       a <a href=#websrt-voice-object>WebSRT Voice Object</a>.</li>
+
       </ul><p>Otherwise, if the tag name of the end tag token <var title="">token</var> is "<code title="">ruby</code>" and <var title="">current</var> is a <a href=#websrt-ruby-text-object>WebSRT Ruby Text
       Object</a>, then let <var title="">current</var> be the
       parent node of <var title="">current</var> of the parent node of
@@ -30200,14 +30277,39 @@
 
      </dd>
 
+     <dt>If <var title="">token</var> is a timestamp tag</dt>
+     <dd>
+
+      <ol><li><p>Let <var title="">input</var> be the tag value.</li>
+
+       <li><p>Let <var title="">position</var> be a pointer into
+       <var title="">input</var>, initially pointing at the start of
+       the string.</li>
+
+       <li><p><a href=#collect-a-websrt-timestamp>Collect a WebSRT timestamp</a>.</li>
+
+       <li>
+
+        <p>If that algorithm does not fail, and if <var title="">position</var> now points at the end of <var title="">input</var> (i.e. there are no trailing characters
+        after the timestamp), then create a <a href=#websrt-timestamp-object>WebSRT Timestamp
+        Object</a> whose value is the collected time, then append
+        it to <var title="">current</var>.</p>
+
+        <p>Otherwise, ignore the token.</p>
+
+       </li>
+
+      </ol></dd>
+
     </dl></li>
 
    <li><p>Jump to the step labeled <i>loop</i>.</li>
 
   </ol><p>The <dfn id=websrt-cue-text-tokeniser>WebSRT cue text tokeniser</dfn> is as follows. It emits
   a token, which is either a string (whose value is a sequence of
-  Unicode characters), a start tag (with a tag name), or an end tag
-  (with a tag name).</p>
+  Unicode characters), a start tag (with a tag name, a list of
+  classes, and optionally an annotation), an end tag (with a tag
+  name), or a timestamp tag (with a tag value).</p>
 
   <ol><li><p>Let <var title="">input</var> and <var title="">position</var> be the same variables as those of the same
    name in the algorithm that invoked these steps.</li>
@@ -30217,8 +30319,10 @@
 
    <li><p>Let <var title="">result</var> be the empty string.</li>
 
-   <li><p>Let <var title="">escape</var> be the empty string.</li>
+   <li><p>Let <var title="">buffer</var> be the empty string.</li>
 
+   <li><p>Let <var title="">classes</var> be an empty list.</li>
+
    <li><p><i>Loop</i>: If <var title="">position</var> is past the end of
    <var title="">input</var>, let <var title="">c</var> be an
    end-of-file marker. Otherwise, let <var title="">c</var> be the
@@ -30237,7 +30341,7 @@
 
       <dl><dt>U+0026 AMPERSAND (&)</dt>
        <dd>
-        <p>Set <var title="">escape</var> to <var title="">c</var>,
+        <p>Set <var title="">buffer</var> to <var title="">c</var>,
         set <var title="">tokeniser state</var> to the <a href=#websrt-escape-state>WebSRT
         escape state</a>, and jump to the step labeled
         <i>next</i>.</p>
@@ -30273,15 +30377,18 @@
       <dl><dt>U+003B SEMICOLON character (;)</dt>
        <dd>
 
-        <p>First, examine the value of <var title="">escape</var>:</p>
+        <p>First, examine the value of <var title="">buffer</var>:</p>
 
-        <p>If <var title="">escape</var> is the string "<code title="">&amp</code>", then append a U+0026 AMPERSAND
+        <p>If <var title="">buffer</var> is the string "<code title="">&amp</code>", then append a U+0026 AMPERSAND
         character (&) to <var title="">result</var>.</p>
 
-        <p>If <var title="">escape</var> is the string "<code title="">&lt</code>", then append a U+003C LESS-THAN SIGN
+        <p>If <var title="">buffer</var> is the string "<code title="">&lt</code>", then append a U+003C LESS-THAN SIGN
         character (<) to <var title="">result</var>.</p>
 
-        <p>Otherwise, append <var title="">escape</var> followed by a
+        <p>If <var title="">buffer</var> is the string "<code title="">&gt</code>", then append a U+003E GREATER-THAN SIGN
+        character (>) to <var title="">result</var>.</p>
+
+        <p>Otherwise, append <var title="">buffer</var> followed by a
         U+003B SEMICOLON character (;) to <var title="">result</var>.</p>
 
         <p>Then, in any case, set <var title="">tokeniser state</var>
@@ -30290,23 +30397,23 @@
 
        </dd>
 
+       <dt>Characters in the range U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9)</dt>
+       <dt>Characters in the range U+0041 LATIN CAPITAL LETTER A to U+005A LATIN CAPITAL LETTER Z</dt>
        <dt>Characters in the range U+0061 LATIN SMALL LETTER A to U+007A LATIN SMALL LETTER Z</dt>
-       <dt>Characters in the range U+0041 LATIN CAPITAL LETTER A to U+005A LATIN CAPITAL LETTER Z</dt>
-       <dt>Characters in the range U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9)</dt>
        <dd>
-        <p>Append <var title="">c</var> to <var title="">escape</var>
+        <p>Append <var title="">c</var> to <var title="">buffer</var>
         and jump to the step labeled <i>next</i>.</p>
        </dd>
 
        <dt>End-of-file marker</dt>
        <dd>
-        <p>Append <var title="">escape</var> to <var title="">result</var>, return a string token whose value is
+        <p>Append <var title="">buffer</var> to <var title="">result</var>, return a string token whose value is
         <var title="">result</var>, and abort these steps.</p>
        </dd>
 
        <dt>Anything else</dt>
        <dd>
-        <p>Append <var title="">escape</var> to <var title="">result</var>, set <var title="">tokeniser state</var>
+        <p>Append <var title="">buffer</var> to <var title="">result</var>, set <var title="">tokeniser state</var>
         to the <a href=#websrt-data-state>WebSRT data state</a>, and jump to the step
         labeled <i>next</i>.</p>
        </dd> 
@@ -30319,18 +30426,43 @@
 
       <p>Jump to the entry that matches the value of <var title="">c</var>:</p>
 
-      <dl><dt>U+002F SOLIDUS character (/)</dt>
+      <dl><dt>U+0020 SPACE character</dt>
+       <dt>U+0009 CHARACTER TABULATION (tab) character</dt>
        <dd>
+        <!-- assert: >result< is the empty string -->
+        <p>Set <var title="">tokeniser state</var> to the <a href=#websrt-start-tag-annotation-state>WebSRT
+        start tag annotation state</a>, and jump to the step labeled
+        <i>next</i>.</p>
+       </dd> 
+
+       <dt>U+002E FULL STOP character (.)</dt>
+       <dd>
+        <!-- assert: >result< is the empty string -->
+        <p>Set <var title="">tokeniser state</var> to the <a href=#websrt-start-tag-class-state>WebSRT
+        start tag class state</a>, and jump to the step labeled
+        <i>next</i>.</p>
+       </dd> 
+
+       <dt>U+002F SOLIDUS character (/)</dt>
+       <dd>
         <p>Set <var title="">tokeniser state</var> to the <a href=#websrt-end-tag-state>WebSRT
         end tag state</a>, and jump to the step labeled
         <i>next</i>.</p>
        </dd>
 
+       <dt>Characters in the range U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9)</dt>
+       <dd>
+        <p>Set <var title="">result</var> to <var title="">c</var>,
+        set <var title="">tokeniser state</var> to the <a href=#websrt-timestamp-tag-state>WebSRT
+        timestamp tag state</a>, and jump to the step labeled
+        <i>next</i>.</p>
+       </dd> 
+
        <dt>U+003E GREATER-THAN SIGN character (>)</dt>
        <dt>End-of-file marker</dt>
        <dd>
-        <p>Return a start tag whose tag name is the empty string and
-        abort these steps.</p>
+        <p>Return a start tag whose tag name is the empty string, with
+        no classes and no annotation, and abort these steps.</p>
        </dd>
 
        <dt>Anything else</dt>
@@ -30349,10 +30481,26 @@
 
       <p>Jump to the entry that matches the value of <var title="">c</var>:</p>
 
-      <dl><dt>U+003E GREATER-THAN SIGN character (>)</dt>
+      <dl><dt>U+0020 SPACE character</dt>
+       <dt>U+0009 CHARACTER TABULATION (tab) character</dt>
+       <dd>
+        <p>Set <var title="">tokeniser state</var> to the <a href=#websrt-start-tag-annotation-state>WebSRT
+        start tag annotation state</a>, and jump to the step labeled
+        <i>next</i>.</p>
+       </dd> 
+
+       <dt>U+002E FULL STOP character (.)</dt>
+       <dd>
+        <p>Set <var title="">tokeniser state</var> to the <a href=#websrt-start-tag-class-state>WebSRT
+        start tag class state</a>, and jump to the step labeled
+        <i>next</i>.</p>
+       </dd> 
+
+       <dt>U+003E GREATER-THAN SIGN character (>)</dt>
        <dt>End-of-file marker</dt>
        <dd>
-        <p>Return a start tag whose tag name is <var title="">result</var> and abort these steps.</p>
+        <p>Return a start tag whose tag name is <var title="">result</var>, with no classes and no annotation, and
+        abort these steps.</p>
        </dd>
 
        <dt>Anything else</dt>
@@ -30363,6 +30511,74 @@
 
       </dl></dd>
 
+     <dt><dfn id=websrt-start-tag-class-state>WebSRT start tag class state</dfn></dt>
+
+     <dd>
+
+      <p>Jump to the entry that matches the value of <var title="">c</var>:</p>
+
+      <dl><dt>U+0020 SPACE character</dt>
+       <dt>U+0009 CHARACTER TABULATION (tab) character</dt>
+       <dd>
+        <p>Append to <var title="">classes</var> an entry whose value
+        is <var title="">buffer</var>, set <var title="">buffer</var>
+        to the empty string, set <var title="">tokeniser state</var>
+        to the <a href=#websrt-start-tag-annotation-state>WebSRT start tag annotation state</a>, and
+        jump to the step labeled <i>next</i>.</p>
+       </dd> 
+
+       <dt>U+002E FULL STOP character (.)</dt>
+       <dd>
+        <p>Append to <var title="">classes</var> an entry whose value
+        is <var title="">buffer</var>, set <var title="">buffer</var>
+        to the empty string, and jump to the step labeled
+        <i>next</i>.</p>
+       </dd> 
+
+       <dt>U+003E GREATER-THAN SIGN character (>)</dt>
+       <dt>End-of-file marker</dt>
+       <dd>
+        <p>Append to <var title="">classes</var> an entry whose value
+        is <var title="">buffer</var>, then return a start tag whose
+        tag name is <var title="">result</var>, with the classes given
+        in <var title="">classes</var> but no annotation, and abort
+        these steps.</p>
+       </dd>
+
+       <dt>Anything else</dt>
+       <dd>
+        <p>Append <var title="">c</var> to <var title="">buffer</var>
+        and jump to the step labeled <i>next</i>.</p>
+       </dd> 
+
+      </dl></dd>
+
+     <dt><dfn id=websrt-start-tag-annotation-state>WebSRT start tag annotation state</dfn></dt>
+
+     <dd>
+
+      <p>Jump to the entry that matches the value of <var title="">c</var>:</p>
+
+      <dl><dt>U+003E GREATER-THAN SIGN character (>)</dt>
+       <dt>End-of-file marker</dt>
+       <dd>
+        <p>Remove any leading or trailing U+0020 SPACE or U+0009
+        CHARACTER TABULATION (tab) characters from <var title="">buffer</var>, and replace any sequence of one or
+        more consecutive U+0020 SPACE and U+0009 CHARACTER TABULATION
+        (tab) characters in <var title="">buffer</var> with a single
+        U+0020 SPACE character; then, return a start tag whose tag name is
+        <var title="">result</var>, with the classes given in <var title="">classes</var>, and with <var title="">buffer</var> as
+        the annotation, and abort these steps.</p>
+       </dd>
+
+       <dt>Anything else</dt>
+       <dd>
+        <p>Append <var title="">c</var> to <var title="">buffer</var>
+        and jump to the step labeled <i>next</i>.</p>
+       </dd> 
+
+      </dl></dd>
+
      <dt><dfn id=websrt-end-tag-state>WebSRT end tag state</dfn></dt>
 
      <dd>
@@ -30383,6 +30599,26 @@
 
       </dl></dd>
 
+     <dt><dfn id=websrt-timestamp-tag-state>WebSRT timestamp tag state</dfn></dt>
+
+     <dd>
+
+      <p>Jump to the entry that matches the value of <var title="">c</var>:</p>
+
+      <dl><dt>U+003E GREATER-THAN SIGN character (>)</dt>
+       <dt>End-of-file marker</dt>
+       <dd>
+        <p>Return a timestamp tag whose tag name is <var title="">result</var> and abort these steps.</p>
+       </dd>
+
+       <dt>Anything else</dt>
+       <dd>
+        <p>Append <var title="">c</var> to <var title="">result</var>
+        and jump to the step labeled <i>next</i>.</p>
+       </dd>
+
+      </dl></dd>
+
     </dl></li>
 
    <li><p><i>Next</i>: Advance <var title="">position</var> to the next
@@ -30403,19 +30639,30 @@
      <th>DOM node
    <tbody><tr><td><a href=#list-of-websrt-node-objects>List of WebSRT Node Objects</a>
      <td><code><a href=#documentfragment>DocumentFragment</a></code> node
+    <tr><td><a href=#websrt-class-object>WebSRT Class Object</a>
+     <td><code><a href=#htmlelement>HTMLElement</a></code> element node with <code title=dom-Node-localName><a href=#dom-node-localname>localName</a></code> "<code><a href=#the-span-element>span</a></code>".
     <tr><td><a href=#websrt-italic-object>WebSRT Italic Object</a>
-     <td><code><a href=#htmlelement>HTMLElement</a></code> element node with <code title=dom-Node-localName><a href=#dom-node-localname>localName</a></code> "<code><a href=#the-i-element>i</a></code>" and the <code title=dom-Node-namespaceURI><a href=#dom-node-namespaceuri>namespaceURI</a></code> set to the <a href=#html-namespace-0>HTML namespace</a>.
+     <td><code><a href=#htmlelement>HTMLElement</a></code> element node with <code title=dom-Node-localName><a href=#dom-node-localname>localName</a></code> "<code><a href=#the-i-element>i</a></code>".
     <tr><td><a href=#websrt-bold-object>WebSRT Bold Object</a>
-     <td><code><a href=#htmlelement>HTMLElement</a></code> element node with <code title=dom-Node-localName><a href=#dom-node-localname>localName</a></code> "<code><a href=#the-b-element>b</a></code>" and the <code title=dom-Node-namespaceURI><a href=#dom-node-namespaceuri>namespaceURI</a></code> set to the <a href=#html-namespace-0>HTML namespace</a>.
+     <td><code><a href=#htmlelement>HTMLElement</a></code> element node with <code title=dom-Node-localName><a href=#dom-node-localname>localName</a></code> "<code><a href=#the-b-element>b</a></code>".
     <tr><td><a href=#websrt-ruby-object>WebSRT Ruby Object</a>
-     <td><code><a href=#htmlelement>HTMLElement</a></code> element node with <code title=dom-Node-localName><a href=#dom-node-localname>localName</a></code> "<code><a href=#the-ruby-element>ruby</a></code>" and the <code title=dom-Node-namespaceURI><a href=#dom-node-namespaceuri>namespaceURI</a></code> set to the <a href=#html-namespace-0>HTML namespace</a>.
+     <td><code><a href=#htmlelement>HTMLElement</a></code> element node with <code title=dom-Node-localName><a href=#dom-node-localname>localName</a></code> "<code><a href=#the-ruby-element>ruby</a></code>".
     <tr><td><a href=#websrt-ruby-text-object>WebSRT Ruby Text Object</a>
-     <td><code><a href=#htmlelement>HTMLElement</a></code> element node with <code title=dom-Node-localName><a href=#dom-node-localname>localName</a></code> "<code><a href=#the-rt-element>rt</a></code>" and the <code title=dom-Node-namespaceURI><a href=#dom-node-namespaceuri>namespaceURI</a></code> set to the <a href=#html-namespace-0>HTML namespace</a>.
+     <td><code><a href=#htmlelement>HTMLElement</a></code> element node with <code title=dom-Node-localName><a href=#dom-node-localname>localName</a></code> "<code><a href=#the-rt-element>rt</a></code>".
+    <tr><td><a href=#websrt-voice-object>WebSRT Voice Object</a>
+     <td><code><a href=#htmlelement>HTMLElement</a></code> element node with <code title=dom-Node-localName><a href=#dom-node-localname>localName</a></code> "<code><a href=#the-q-element>q</a></code>", a <code title=attr-title><a href=#the-title-attribute>title</a></code> attribute set to the <a href=#websrt-voice-object>WebSRT Voice Object</a>'s value.
     <tr><td><a href=#websrt-text-object>WebSRT Text Object</a>
      <td><code><a href=#text>Text</a></code> node whose character data is the value of the <a href=#websrt-text-object>WebSRT Text Object</a>.
     <tr><td><a href=#websrt-timestamp-object>WebSRT Timestamp Object</a>
      <td><code><a href=#processinginstruction>ProcessingInstruction</a></code> node whose <code title=dom-ProcessingInstruction-target>target</code> is "<code title="">timestamp</code>" and whose <code title=dom-ProcessingInstruction-data>data</code> is a <a href=#websrt-timestamp>WebSRT timestamp</a> representing the value of the <a href=#websrt-timestamp-object>WebSRT Timestamp Object</a>, with all optional components included and with the seconds separator being a U+002E FULL STOP character (.).
-  </table><p>The <code title=dom-Node-ownerDocument><a href=#dom-node-ownerdocument>ownerDocument</a></code>
+  </table><p><code><a href=#htmlelement>HTMLElement</a></code> nodes created as part of the mapping
+  described above must have their <code title=dom-Node-namespaceURI><a href=#dom-node-namespaceuri>namespaceURI</a></code> set to the
+  <a href=#html-namespace-0>HTML namespace</a>, and must have a <code title=attr-class><a href=#classes>class</a></code> attribute set to the string obtained
+  by concatenating all the classes that apply to the corresponding
+  <a href=#websrt-internal-node-object>WebSRT Internal Node Object</a>, each separated from the
+  next by a single U+0020 SPACE character.</p>
+
+  <p>The <code title=dom-Node-ownerDocument><a href=#dom-node-ownerdocument>ownerDocument</a></code>
   attribute of all nodes in the DOM tree must be set to the given
   document <var title="">owner</var>.</p>
 
@@ -30471,8 +30718,9 @@
   <p>For the purposes of listing chapters in the <a href=#media-resource>media
   resource</a>, only <a href=#timed-track title="timed track">timed tracks</a>
   in the <a href=#media-element>media element</a>'s <a href=#list-of-timed-tracks>list of timed
-  tracks</a> <a href=#timed-track-showing title="timed track showing">showing</a> and
-  whose <a href=#timed-track-kind>timed track kind</a> is <code title=dom-timedtrack-kind-chapters><a href=#dom-timedtrack-kind-chapters>chapters</a></code> should be used.
+  tracks</a> <a href=#timed-track-showing title="timed track showing">showing</a> or
+  <a href=#timed-track-showing-by-default title="timed track showing by default">showing by
+  default</a> and whose <a href=#timed-track-kind>timed track kind</a> is <code title=dom-timedtrack-kind-chapters><a href=#dom-timedtrack-kind-chapters>chapters</a></code> should be used.
   Each <a href=#timed-track-cue title="timed track cue">cue</a> in such a <a href=#timed-track>timed
   track</a> represents a chapter starting at the cue's <a href=#timed-track-cue-start-time title="timed track cue start time">start time</a>. The name of
   the chapter is the <a href=#timed-track-cue-text>timed track cue text</a>, interpreted
@@ -81011,7 +81259,8 @@
   to the user">exposing a user interface</a> for a
   <code><a href=#video>video</a></code> element, user agents should run the <a href=#rules-for-updating-the-timed-track-rendering>rules
   for updating the timed track rendering</a> of each of the <a href=#timed-track title="timed track">timed tracks</a> in the <code><a href=#video>video</a></code>
-  element's <a href=#list-of-timed-tracks>list of timed tracks</a> that are <a href=#timed-track-showing title="timed track showing">showing</a> (e.g., for <a href=#timed-track title="timed track">timed tracks</a> based on
+  element's <a href=#list-of-timed-tracks>list of timed tracks</a> that are <a href=#timed-track-showing title="timed track showing">showing</a> or <a href=#timed-track-showing-by-default title="timed
+  track showing by default">showing by default</a> (e.g., for <a href=#timed-track title="timed track">timed tracks</a> based on
   <a href=#websrt>WebSRT</a>, the <a href=#rules-for-updating-the-display-of-websrt-timed-tracks>rules for updating the display of
   WebSRT timed tracks</a>).</p>
 <!--KEEP-START w3c-html--><!--TT-->
@@ -81032,7 +81281,7 @@
 <!--<div data-component="other Hixie drafts (editor: Ian Hickson)">-->
   <div class=impl>
 
-  <h4 id=timed-tracks-0><span class=secno>12.3.2 </span>Timed tracks</h4>
+  <h4 id=timed-tracks><span class=secno>12.3.2 </span>Timed tracks</h4>
 
   <p class=note>This section is intended to be moved to its own CSS
   module once an editor is found to run with it.</p>
@@ -81076,12 +81325,11 @@
    user interface</a> for <var title="">video</var>, but now it is,
    let <var title="">reset</var> be true. Otherwise, let <var title="">reset</var> be false.</p>
 
-   <li><p>Let <var title="">tracks</var> be the subset of
-   <var title="">video</var>'s <a href=#list-of-timed-tracks>list of timed tracks</a> that
-   have as their <a href=#rules-for-updating-the-timed-track-rendering>rules for updating the timed track
-   rendering</a> these <a href=#rules-for-updating-the-display-of-websrt-timed-tracks>rules for updating the display of
-   WebSRT timed tracks</a>, and whose <a href=#timed-track-mode>timed track mode</a>
-   is <a href=#timed-track-showing title="timed track showing">showing</a>.</li>
+   <li><p>Let <var title="">tracks</var> be the subset of <var title="">video</var>'s <a href=#list-of-timed-tracks>list of timed tracks</a> that have
+   as their <a href=#rules-for-updating-the-timed-track-rendering>rules for updating the timed track rendering</a>
+   these <a href=#rules-for-updating-the-display-of-websrt-timed-tracks>rules for updating the display of WebSRT timed
+   tracks</a>, and whose <a href=#timed-track-mode>timed track mode</a> is <a href=#timed-track-showing title="timed track showing">showing</a> or <a href=#timed-track-showing-by-default title="timed
+   track showing by default">showing by default</a>.</li>
 
    <li><p>Let <var title="">cues</var> be an empty list of <a href=#timed-track-cue title="timed track cue">timed track cues</a>.</li>
 
@@ -81220,10 +81468,10 @@
      <li><p>If the <a href=#timed-track-cue-writing-direction>timed track cue writing direction</a> is
      <a href=#timed-track-cue-horizontal-writing-direction title="timed track cue horizontal writing
      direction">horizontal</a>, then let <var title="">width</var>
-     be '<var title="">size</var>vw' and <var title="">height</var> be
-     'auto'. Otherwise, let <var title="">width</var> be 'auto' and
-     <var title="">height</var> be '<var title="">size</var>vh'. (These are CSS values used by the next
-     section to set CSS properties for the rendering.)</li>
+     be '<var title="">size</var> vw' and <var title="">height</var> be 'auto'. Otherwise, let <var title="">width</var> be 'auto' and <var title="">height</var> be
+     '<var title="">size</var> vh'. (These are CSS values used
+     by the next section to set CSS properties for the rendering; 'vw'
+     and 'vh' are CSS units.) <a href=#refsCSSVALUES>[CSSVALUES]</a></li>
 
      <li>
 
@@ -81327,9 +81575,10 @@
 
       </dl></li>
 
-     <li><p>Let <var title="">left</var> be '<var title="">x-position</var>vw' and <var title="">top</var> be '<var title="">y-position</var>vh'. (These again are CSS values used by
-     the next section to set CSS properties for the
-     rendering.)</li>
+     <li><p>Let <var title="">left</var> be '<var title="">x-position</var> vw' and <var title="">top</var>
+     be '<var title="">y-position</var> vh'. (These again are
+     CSS values used by the next section to set CSS properties for the
+     rendering; 'vw' and 'vh' are CSS units.) <a href=#refsCSSVALUES>[CSSVALUES]</a></li>
 
      <li>
 
@@ -81337,20 +81586,21 @@
       obtaining a set of CSS boxes positioned relative to an initial
       containing block: <a href=#refsCSS>[CSS]</a></p>
 
-      <ul><li>The <i>document tree</i> is the tree of <a href=#websrt-node-object title="WebSRT
-       Node Object">WebSRT Node Objects</a> rooted at <var title="">nodes</var>.</li>
+      <ul><li><p>The <i>document tree</i> is the tree of <a href=#websrt-node-object title="WebSRT Node Object">WebSRT Node Objects</a> rooted at
+       <var title="">nodes</var>.</li>
 
-       <li>For the purposes of processing by the CSS specification,
+       <li><p>For the purposes of processing by the CSS specification,
        <a href=#websrt-internal-node-object title="WebSRT Internal Node Object">WebSRT Internal Node
        Objects</a> are equivalent to elements with the same
-       contents. The name of these elements is not explicitly
-       specified. These elements have no attributes.</li>
+       contents.</li>
 
        <li>For the purposes of processing by the CSS
        specification, <a href=#websrt-text-object title="WebSRT Text Object">WebSRT Text
        Objects</a> are equivalent to text nodes.</li>
 
-       <li>No style sheets are associated with <var title="">nodes</var>.</li>
+       <li>No style sheets are associated with <var title="">nodes</var>. (The nodes are subsequently restyled
+       using style sheets after their boxes are generated, as
+       described below.)</li>
 
        <li>The children of the <var title="">nodes</var> must be
        wrapped in an anonymous box whose 'display' property has the
@@ -81672,7 +81922,7 @@
   text rendering rules</a>, <a href=#websrt-node-object title="WebSRT Node Object">WebSRT
   Node Objects</a> in the <a href=#list-of-websrt-node-objects>list of WebSRT Node Objects</a>
   used in the rendering can be matched by certain pseudo-selectors as
-  defined below. These selector can begin or stop matching individual
+  defined below. These selectors can begin or stop matching individual
   <a href=#websrt-node-object title="WebSRT Node Object">WebSRT Node Objects</a> while a
   <a href=#timed-track-cue title="timed track cue">cue</a> is being rendered, even in
   between applications of the <a href=#websrt-cue-text-rendering-rules>WebSRT cue text rendering
@@ -81691,23 +81941,25 @@
   <code><a href=#video>video</a></code> element, the pseudo-elements defined below won't
   have any effect according to this specification.</p>
 
+  <p>A CSS user agent that implements the <a href=#timed-track title="timed
+  track">timed tracks</a> model must implement the '::cue' and
+  '::cue(<var title="">selector</var>)' pseudo-elements, and the
+  ':past' and ':future' pseudo-classes.</p>
 
+
   <h6 id="the-'::cue'-pseudo-element"><span class=secno>12.3.2.3.1 </span>The '::cue' pseudo-element</h6>
 
-  <p>A CSS user agent that implemented the <a href=#timed-track title="timed
-  track">timed tracks</a> model must implement the '::cue'
-  pseudo-element.</p>
+  <p>The '<dfn id=pseudo-cue title=pseudo-cue>::cue</dfn>' pseudo-element (with no
+  argument) matches any <a href=#list-of-websrt-node-objects>List of WebSRT Node Objects</a>
+  constructed for the <i>matched element</i>, with the exception that
+  the properties corresponding to the 'background' shorthand must be
+  applied to the <a href=#websrt-cue-background-box>WebSRT cue background box</a> rather than
+  the <a href=#list-of-websrt-node-objects>List of WebSRT Node Objects</a>.</p>
 
-  <p>The '<dfn id=pseudo-cue title=pseudo-cue>::cue</dfn>' pseudo-element matches
-  any <a href=#list-of-websrt-node-objects>List of WebSRT Node Objects</a> constructed for the
-  <i>matched element</i>, with the exception that the properties
-  corresponding to the 'background' shorthand must be applied to the
-  <a href=#websrt-cue-background-box>WebSRT cue background box</a> rather than the <a href=#list-of-websrt-node-objects>List of
-  WebSRT Node Objects</a>.</p>
+  <p>The following properties apply to the '::cue' pseudo-element with
+  no argument; other properties set on the pseudo-element must be
+  ignored:</p>
 
-  <p>The following properties apply to the '::cue' pseudo-element;
-  other properties set on the pseudo-element must be ignored:</p>
-
   <ul class=brief><li>'color'</li>
    <li>'text-shadow'</li>
    <li>'text-outline'</li>
@@ -81722,139 +81974,76 @@
           min-height, max-width, min-width, orphans, overflow,
           page-break-*, text-align, unicode-bidi, widows, z-index
    -->
-  </ul><h6 id="the-'::cue-part'-pseudo-element"><span class=secno>12.3.2.3.2 </span>The '::cue-part' pseudo-element</h6>
+  </ul><p>The '<dfn id=pseudo-cue-selector title=pseudo-cue-selector>::cue(<var title="">selector</var>)</dfn>' pseudo-element with an argument must
+  have an argument that consists of a group of selectors. It matches
+  any <a href=#websrt-internal-node-object>WebSRT Internal Node Object</a> constructed for the
+  <i>matched element</i> that also matches the given group of
+  selectors, with the nodes being treated as follows:</p>
 
-  <p>A CSS user agent that implemented the <a href=#timed-track title="timed
-  track">timed tracks</a> model must implement the '::cue-part(<var title="">filter</var>)' pseudo-element.</p>
+  <ul><li><p>The <i>document tree</i> against which the selectors are
+   matched is the tree of <a href=#websrt-node-object title="WebSRT Node Object">WebSRT Node
+   Objects</a> rooted at the <a href=#list-of-websrt-node-objects>list of WebSRT Node
+   Objects</a> for the cue.</li>
 
-  <p>The '<dfn id=pseudo-cue-part title=pseudo-cue-part>::cue-part(<var title="">argument</var>)</dfn>' pseudo-element matches any
-  <a href=#websrt-node-object>WebSRT Node Object</a> constructed for the <i>matched
-  element</i> that matches the given <var title="">argument</var>.</p>
+   <li><p><a href=#websrt-internal-node-object title="WebSRT Internal Node Object">WebSRT Internal
+   Node Objects</a> are elements in the tree.</li>
 
-  <p>The <var title="">argument</var> must match the syntax
-  "<voice> || <part> || <position> || <future-compatibility>". <a href=#refsCSS>[CSS]</a></p>
-  
-  <p>The "<voice>" component must be either a non-negative
-  <integer> or one of the keywords "<code title=pseudo-cue-part-narrator><a href=#pseudo-cue-part-narrator>narrator</a></code>", "<code title=pseudo-cue-part-music><a href=#pseudo-cue-part-music>music</a></code>", "<code title=pseudo-cue-part-lyric><a href=#pseudo-cue-part-lyric>lyric</a></code>", "<code title=pseudo-cue-part-sound><a href=#pseudo-cue-part-sound>sound</a></code>", "<code title=pseudo-cue-part-comment><a href=#pseudo-cue-part-comment>comment</a></code>", or "<code title=pseudo-cue-part-credit><a href=#pseudo-cue-part-credit>credit</a></code>".</p>
+   <li><a href=#websrt-leaf-node-object title="WebSRT Leaf Node Object">WebSRT Leaf Node
+   Objects</a> cannot be matched.</li>
 
-  <p>The "<part>" component must be one of the keywords "<code title=pseudo-cue-part-i><a href=#pseudo-cue-part-i>i</a></code>", "<code title=pseudo-cue-part-b><a href=#pseudo-cue-part-b>b</a></code>", "<code title=pseudo-cue-part-ruby><a href=#pseudo-cue-part-ruby>ruby</a></code>", or "<code title=pseudo-cue-part-rt><a href=#pseudo-cue-part-rt>rt</a></code>".</p>
+   <li>
 
-  <p>The "<position>" component must be one of the keywords "<code title=pseudo-cue-part-past><a href=#pseudo-cue-part-past>past</a></code>" or "<code title=pseudo-cue-part-future><a href=#pseudo-cue-part-future>future</a></code>".</p>
+    <p>For the purposes of element type selectors, the names of <a href=#websrt-internal-node-object title="WebSRT Internal Node Object">WebSRT Internal Node
+    Objects</a> are as given by the following table, where objects
+    having the concrete class given in a cell in the first column have
+    the name given by the second column of the same row:</p>
 
-  <p>The "<future-compatibility>" component can be any
-  identifier.</p>
+    <table><thead><tr><th>Concrete class
+       <th>Name
 
-  <p>Each component of <var title="">argument</var> restricts which
-  <a href=#websrt-node-object title="WebSRT Node Object">WebSRT Node Objects</a> are
-  matched by the pseudo-element, as follows:</p>
+     <tbody><tr><td><a href=#websrt-class-object title="WebSRT Class Object">WebSRT Class Objects</a>
+       <td><code title="">c</code>
 
-  <dl><dt>An integer greater than or equal to zero</dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <a href=#websrt-node-object title="WebSRT Node Object">WebSRT Node Objects</a> from <a href=#timed-track-cue title="timed track cue">timed track cues</a> whose <a href=#timed-track-cue-voice-identifier>timed
-    track cue voice identifier</a> is the given number expressed in
-    base ten with digits in the range U+0030 DIGIT ZERO (0) to U+0039
-    DIGIT NINE (9).</p>
-   </dd>
+      <tr><td><a href=#websrt-italic-object title="WebSRT Italic Object">WebSRT Italic Objects</a>
+       <td><code title="">i</code>
 
-   <dt><dfn id=pseudo-cue-part-narrator title=pseudo-cue-part-narrator><code>narrator</code></dfn></dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <a href=#websrt-node-object title="WebSRT Node Object">WebSRT Node Objects</a> from <a href=#timed-track-cue title="timed track cue">timed track cues</a> whose <a href=#timed-track-cue-voice-identifier>timed
-    track cue voice identifier</a> is "<code title="timed track cue
-    narrator voice"><a href=#timed-track-cue-narrator-voice>narrator</a></code>".</p>
-   </dd>
+      <tr><td><a href=#websrt-bold-object title="WebSRT Bold Object">WebSRT Bold Objects</a>
+       <td><code title="">b</code>
 
-   <dt><dfn id=pseudo-cue-part-music title=pseudo-cue-part-music><code>music</code></dfn></dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <a href=#websrt-node-object title="WebSRT Node Object">WebSRT Node Objects</a> from <a href=#timed-track-cue title="timed track cue">timed track cues</a> whose <a href=#timed-track-cue-voice-identifier>timed
-    track cue voice identifier</a> is "<code title="timed track cue
-    music voice"><a href=#timed-track-cue-music-voice>music</a></code>".</p>
-   </dd>
+      <tr><td><a href=#websrt-ruby-object title="WebSRT Ruby Object">WebSRT Ruby Objects</a>
+       <td><code title="">ruby</code>
 
-   <dt><dfn id=pseudo-cue-part-lyric title=pseudo-cue-part-lyric><code>lyric</code></dfn></dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <a href=#websrt-node-object title="WebSRT Node Object">WebSRT Node Objects</a> from <a href=#timed-track-cue title="timed track cue">timed track cues</a> whose <a href=#timed-track-cue-voice-identifier>timed
-    track cue voice identifier</a> is "<code title="timed track cue
-    lyric voice"><a href=#timed-track-cue-lyric-voice>lyric</a></code>".</p>
-   </dd>
+      <tr><td><a href=#websrt-ruby-text-object title="WebSRT Ruby Text Object">WebSRT Ruby Text Objects</a>
+       <td><code title="">rt</code>
 
-   <dt><dfn id=pseudo-cue-part-sound title=pseudo-cue-part-sound><code>sound</code></dfn></dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <a href=#websrt-node-object title="WebSRT Node Object">WebSRT Node Objects</a> from <a href=#timed-track-cue title="timed track cue">timed track cues</a> whose <a href=#timed-track-cue-voice-identifier>timed
-    track cue voice identifier</a> is "<code title="timed track cue
-    sound voice"><a href=#timed-track-cue-sound-voice>sound</a></code>".</p>
-   </dd>
+      <tr><td><a href=#websrt-voice-object title="WebSRT Voice Object">WebSRT Voice Objects</a>
+       <td><code title="">v</code>
 
-   <dt><dfn id=pseudo-cue-part-comment title=pseudo-cue-part-comment><code>comment</code></dfn></dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <a href=#websrt-node-object title="WebSRT Node Object">WebSRT Node Objects</a> from <a href=#timed-track-cue title="timed track cue">timed track cues</a> whose <a href=#timed-track-cue-voice-identifier>timed
-    track cue voice identifier</a> is "<code title="timed track cue
-    comment voice"><a href=#timed-track-cue-comment-voice>comment</a></code>".</p>
-   </dd>
+      <tr><td>Other elements (specifically, <a href=#list-of-websrt-node-objects title="List of WebSRT Node Objects">Lists of WebSRT Node Objects</a>)
+       <td>No explicit name.
 
-   <dt><dfn id=pseudo-cue-part-credit title=pseudo-cue-part-credit><code>credit</code></dfn></dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <a href=#websrt-node-object title="WebSRT Node Object">WebSRT Node Objects</a> from <a href=#timed-track-cue title="timed track cue">timed track cues</a> whose <a href=#timed-track-cue-voice-identifier>timed
-    track cue voice identifier</a> is "<code title="timed track cue
-    credit voice"><a href=#timed-track-cue-credit-voice>credit</a></code>".</p>
-   </dd>
+    </table></li>
 
-   <dt><dfn id=pseudo-cue-part-i title=pseudo-cue-part-i><code>i</code></dfn></dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <a href=#websrt-italic-object title="WebSRT Italic Object">WebSRT Italic Objects</a>.</p>
-   </dd>
+   <li><p>For the purposes of element type and universal selectors,
+   <a href=#websrt-internal-node-object title="WebSRT Internal Node Object">WebSRT Internal Node
+   Objects</a> are considered as being in the namespace expressed
+   as the empty string.</li>
 
-   <dt><dfn id=pseudo-cue-part-b title=pseudo-cue-part-b><code>b</code></dfn></dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <a href=#websrt-bold-object title="WebSRT Bold Object">WebSRT Bold Objects</a>.</p>
-   </dd>
+   <li><p>For the purposes of attribute selector matching, <a href=#websrt-internal-node-object title="WebSRT Internal Node Object">WebSRT Internal Node
+   Objects</a> have no attributes, except for <a href=#websrt-voice-object title="WebSRT Voice Object">WebSRT Voice Objects</a>, which
+   have a single attribute named "<code title="">voice</code>"
+   whose value is the value of the <a href=#websrt-voice-object>WebSRT Voice
+   Object</a>.</li>
 
-   <dt><dfn id=pseudo-cue-part-ruby title=pseudo-cue-part-ruby><code>ruby</code></dfn></dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <a href=#websrt-ruby-object title="WebSRT Ruby Object">WebSRT Ruby Objects</a>.</p>
-   </dd>
+   <li><p>For the purposes of class selector matching, <a href=#websrt-internal-node-object title="WebSRT Internal Node Object">WebSRT Internal Node
+   Objects</a> have the classes described as the <a href="#websrt-node-object's-applicable-classes">WebSRT
+   Node Object's applicable classes</a>.</li> <!-- ok, this
+   isn't especially well-defined, but the Selectors spec doesn't
+   really give one much to go on here. -->
 
-   <dt><dfn id=pseudo-cue-part-rt title=pseudo-cue-part-rt><code>rt</code></dfn></dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <a href=#websrt-ruby-text-object title="WebSRT Ruby Text Object">WebSRT Ruby Text Objects</a>.</p>
-   </dd>
+  </ul><p>The following properties apply to the '::cue()' pseudo-element
+  with an argument:</p>
 
-   <dt><dfn id=pseudo-cue-part-past title=pseudo-cue-part-past><code>past</code></dfn></dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <a href=#websrt-node-object title="WebSRT Node Object">WebSRT Node Objects</a> that are <i><a href=#in-the-past>in the past</a></i>.</p>
-   </dd>
-
-   <dt><dfn id=pseudo-cue-part-future title=pseudo-cue-part-future><code>future</code></dfn></dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <a href=#websrt-node-object title="WebSRT Node Object">WebSRT Node Objects</a> that are <i><a href=#in-the-future>in the future</a></i>.</p>
-   </dd>
-
-   <dt>Any other identifier</dt>
-   <dd>
-    <p>Restricts the pseudo-element to not matching any <a href=#websrt-node-object title="WebSRT Node Object">WebSRT Node Objects</a>.</p>
-    <p class=note>This is intended to allow for future extensions
-    while still allowing Selectors to include a mixture of old and new
-    '::cue-part()' pseudo-elements.</p>
-   </dd>
-
-  </dl><p>A <a href=#websrt-node-object>WebSRT Node Object</a> <var title="">c</var> is
-  <dfn id=in-the-past>in the past</dfn> if, in a pre-order, depth-first traversal of
-  the <a href=#timed-track-cue>timed track cue</a>'s <a href=#list-of-websrt-node-objects>List of WebSRT Node
-  Objects</a>, there exists a <a href=#websrt-timestamp-object>WebSRT Timestamp Object</a>
-  whose value is less than the <a href=#current-playback-position>current playback position</a>
-  of the <a href=#media-element>media element</a> that is the <i>matched
-  element</i>, entirely after the <a href=#websrt-node-object>WebSRT Node Object</a> <var title="">c</var>.</p>
-
-  <p>A <a href=#websrt-node-object>WebSRT Node Object</a> <var title="">c</var> is
-  <dfn id=in-the-future>in the future</dfn> if, in a pre-order, depth-first traversal
-  of the <a href=#timed-track-cue>timed track cue</a>'s <a href=#list-of-websrt-node-objects>List of WebSRT Node
-  Objects</a>, there exists a <a href=#websrt-timestamp-object>WebSRT Timestamp Object</a>
-  whose value is greater than the <a href=#current-playback-position>current playback
-  position</a> of the <a href=#media-element>media element</a> that is the
-  <i>matched element</i>, entirely before the <a href=#websrt-node-object>WebSRT Node
-  Object</a> <var title="">c</var>.</p>
-
-  <p>The following properties apply to the '::cue-part(<var title="">filter</var>)' pseudo-element:</p>
-
   <ul class=brief><li>'color'</li>
    <li>'text-shadow'</li>
    <li>'text-outline'</li>
@@ -81869,8 +82058,9 @@
    segment when the segment becomes "past", and having the change
    propagate towards the end of the segment so that it reaches the end
    of the segment when the next segment becomes "past".
-  --><p>The following properties apply to the '::cue-part(<var title="">filter</var>)' pseudo-element if the neither of the <code title=pseudo-cue-part-past><a href=#pseudo-cue-part-past>past</a></code> or <code title=pseudo-cue-part-future><a href=#pseudo-cue-part-future>future</a></code> keywords are
-  present:</p>
+  --><p>The following properties apply to the '::cue()' pseudo-element
+  with an argument when the selector does not contain the ':past' and
+  ':future' pseudo-classes:</p>
 
   <ul class=brief><li>the properties corresponding to the 'font' shorthand, including 'line-height'</li>
    <!-- add more... -->
@@ -81881,19 +82071,51 @@
           min-height, max-width, min-width, orphans, overflow,
           page-break-*, text-align, unicode-bidi, widows, z-index
    -->
-  </ul><p>Other properties must be ignored.</p>
+  </ul><p>Properties that do not apply must be ignored.</p>
 
   <p>As a special exception, the properties corresponding to the
   'background' shorthand, when they would have been applied to the
   <a href=#list-of-websrt-node-objects>List of WebSRT Node Objects</a>, must instead be applied to
   the <a href=#websrt-cue-background-box>WebSRT cue background box</a>.</p>
 
+
+  <h6 id="the-':past'-and-':future'-pseudo-classes"><span class=secno>12.3.2.3.2 </span>The ':past' and ':future' pseudo-classes</h6>
+
+  <p>The <dfn id=past-pseudo-class title=past-pseudo-class>':past'</dfn> and <dfn id=future-pseudo-class title=future-pseudo-class>':future'</dfn> pseudo-classes only
+  match <a href=#websrt-node-object title="WebSRT Node Object">WebSRT Node Objects</a>.</p>
+
+  <p>The ':past' pseudo-class only matches <a href=#websrt-node-object title="WebSRT Node
+  Object">WebSRT Node Objects</a> that are <i><a href=#in-the-past>in the past</a></i>.</p>
+
+  <p>A <a href=#websrt-node-object>WebSRT Node Object</a> <var title="">c</var> is
+  <dfn id=in-the-past>in the past</dfn> if, in a pre-order, depth-first traversal of
+  the <a href=#timed-track-cue>timed track cue</a>'s <a href=#list-of-websrt-node-objects>List of WebSRT Node
+  Objects</a>, there exists a <a href=#websrt-timestamp-object>WebSRT Timestamp Object</a>
+  whose value is less than the <a href=#current-playback-position>current playback position</a>
+  of the <a href=#media-element>media element</a> that is the <i>matched
+  element</i>, entirely after the <a href=#websrt-node-object>WebSRT Node Object</a> <var title="">c</var>.</p>
+
+  <p>The ':future' pseudo-class only matches <a href=#websrt-node-object title="WebSRT Node
+  Object">WebSRT Node Objects</a> that are <i><a href=#in-the-future>in the future</a></i>.</p>
+
+  <p>A <a href=#websrt-node-object>WebSRT Node Object</a> <var title="">c</var> is
+  <dfn id=in-the-future>in the future</dfn> if, in a pre-order, depth-first traversal
+  of the <a href=#timed-track-cue>timed track cue</a>'s <a href=#list-of-websrt-node-objects>List of WebSRT Node
+  Objects</a>, there exists a <a href=#websrt-timestamp-object>WebSRT Timestamp Object</a>
+  whose value is greater than the <a href=#current-playback-position>current playback
+  position</a> of the <a href=#media-element>media element</a> that is the
+  <i>matched element</i>, entirely before the <a href=#websrt-node-object>WebSRT Node
+  Object</a> <var title="">c</var>.</p>
+
   </div>
 
 <!--</div>-->
 <!--KEEP-START w3c-html--><!--TT-->
 
 
+
+
+
   <div class=impl>
 
   <h4 id=images-0><span class=secno>12.3.3 </span>Images</h4>
@@ -85266,8 +85488,18 @@
    <dt>Additional information:</dt>
    <dd>
     <dl><dt>Magic number(s):</dt>
-     <dd>No sequence of bytes can uniquely identify a WebSRT timed
-     track file.</dd>
+     <dd>
+      <p>WebSRT files all begin with one of the following byte sequences:</p>
+      <ul class=brief><li> EF BB BF 57 45 42 53 52 54 20 46 49 4C 45 0A
+       <li> EF BB BF 57 45 42 53 52 54 20 46 49 4C 45 0D
+       <li> EF BB BF 57 45 42 53 52 54 20 46 49 4C 45 20
+       <li> EF BB BF 57 45 42 53 52 54 20 46 49 4C 45 09
+       <li>          57 45 42 53 52 54 20 46 49 4C 45 0A
+       <li>          57 45 42 53 52 54 20 46 49 4C 45 0D
+       <li>          57 45 42 53 52 54 20 46 49 4C 45 20
+       <li>          57 45 42 53 52 54 20 46 49 4C 45 09
+      </ul><p class=note>(An optional UTF-8 BOM, the ASCII string "<code title="">WEBSRT FILE</code>", and finally a space, tab, or line break.)
+     </dd>
      <dt>File extension(s):</dt>
      <dd>"<code title="">srt</code>"</dd>
      <dt>Macintosh file type code(s):</dt>
@@ -86499,6 +86731,7 @@
          <code><a href=#video>video</a></code></td>
      <td>empty</td>
      <td><a href=#global-attributes title="global attributes">globals</a>;
+         <code title=attr-track-default><a href=#attr-track-default>default</a></code>;
          <code title=attr-track-kind><a href=#attr-track-kind>kind</a></code>;
          <code title=attr-track-label><a href=#attr-track-label>label</a></code>;
          <code title=attr-track-src><a href=#attr-track-src>src</a></code>;
@@ -87001,6 +87234,10 @@
      <td> <code title=attr-time-datetime><a href=#attr-time-datetime>time</a></code>
      <td> Value of the element
      <td> <a href=#valid-date-or-time-string>Valid date or time string</a>*
+    <tr><th> <code title="">default</code>
+     <td> <code title=attr-track-default><a href=#attr-track-default>track</a></code>
+     <td> Enable the track if no other <a href=#timed-track>timed track</a> is more suitable.
+     <td> <a href=#boolean-attribute>Boolean attribute</a>
     <tr><th> <code title="">defer</code>
      <td> <code title=attr-script-defer><a href=#attr-script-defer>script</a></code>
      <td> Defer script execution

Modified: source
===================================================================
--- source	2010-12-15 20:49:26 UTC (rev 5720)
+++ source	2010-12-25 06:28:38 UTC (rev 5721)
@@ -76,7 +76,7 @@
   <ul class="brief">
    <li>The <code>device</code> element.</li> <!--DEVICE-->
    <li>The <code title="attr-hyperlink-ping">ping</code> attribute and related <span>hyperlink auditing</span> features.</li> <!--PING-->
-   <li>The <span>WebSRT</span> formata and some <span>timed track</span> API features.</li> <!--TT--> <!--TTSRT-->
+   <li>The <span>WebSRT</span> format and some <span>timed track</span> API features.</li> <!--TT--> <!--TTSRT-->
    <li>Rules for <a href="#atom">converting HTML to Atom</a>.</li> <!--MD-->
    <li>The <code title="dom-document-cssElementMap">cssElementMap</code> feature for defining <span title="CSS element reference identifier">CSS element reference identifiers</span>.</li> <!--CSSREF-->
   </ul>
@@ -26249,7 +26249,8 @@
   <span title="timed track cue">timed track cues</span> whose
   <span>timed track cue active flag</span> is set and whose
   <span>timed track</span> is in the <span title="timed track
-  showing">showing</span> mode.</p>
+  showing">showing</span> or <span title="timed track showing by
+  default">showing by default</span> modes.</p>
 <!--KEEP-START w3c-html--><!--TT-->
 
   <p>In addition to the above, the user agent may provide messages to
@@ -26825,17 +26826,17 @@
    <dd><span>Global attributes</span></dd>
    <dd><code title="attr-track-kind">kind</code></dd>
    <dd><code title="attr-track-src">src</code></dd>
-   <dd><code title="attr-track-charset">charset</code></dd>
    <dd><code title="attr-track-srclang">srclang</code></dd>
    <dd><code title="attr-track-label">label</code></dd>
+   <dd><code title="attr-track-default">default</code></dd>
    <dt>DOM interface:</dt>
    <dd>
 <pre class="idl">interface <dfn>HTMLTrackElement</dfn> : <span>HTMLElement</span> {
            attribute DOMString <span title="dom-track-kind">kind</span>;
            attribute DOMString <span title="dom-track-src">src</span>;
-           attribute DOMString <span title="dom-track-charset">charset</span>;
            attribute DOMString <span title="dom-track-srclang">srclang</span>;
            attribute DOMString <span title="dom-track-label">label</span>;
+           attribute boolean <span title="dom-track-default">default</span>;
 
   readonly attribute <span>TimedTrack</span> <span title="dom-track-track">track</span>;
 };</pre>
@@ -26843,9 +26844,9 @@
   </dl>
 
   <p>The <code>track</code> element allows authors to specify explicit
-  external <span title="timed track">timed tracks</span> for <span
-  title="media element">media elements</span>. It does not <span
-  title="represents">represent</span> anything on its own.</p>
+  external text-based <span title="timed track">timed tracks</span>
+  for <span title="media element">media elements</span>. It does not
+  <span title="represents">represent</span> anything on its own.</p>
 
   <p>The <dfn title="attr-track-kind"><code>kind</code></dfn>
   attribute is an <span>enumerated attribute</span>. The following
@@ -26863,23 +26864,33 @@
     <tr>
      <td><dfn title="attr-track-kind-keyword-subtitles"><code>subtitles</code></dfn>
      <td><dfn title="attr-track-kind-subtitles">Subtitles</dfn>
-     <td>Transcription or translation of the dialogue, suitable for when the sound is available but not understood (e.g. because the user does not understand the language of the <span>media resource</span>'s soundtrack).
+     <td>
+      Transcription or translation of the dialogue, suitable for when the sound is available but not understood (e.g. because the user does not understand the language of the <span>media resource</span>'s soundtrack).
+      Displayed over the video.
     <tr>
      <td><dfn title="attr-track-kind-keyword-captions"><code>captions</code></dfn>
      <td><dfn title="attr-track-kind-captions">Captions</dfn>
-     <td>Transcription or translation of the dialogue, sound effects, relevant musical cues, and other relevant audio information, suitable for when the soundtrack is unavailable (e.g. because it is muted or because the user is deaf).
+     <td>
+      Transcription or translation of the dialogue, sound effects, relevant musical cues, and other relevant audio information, suitable for when the soundtrack is unavailable (e.g. because it is muted or because the user is deaf).
+      Displayed over the video; labeled as appropriate for the hard-of-hearing.
     <tr>
      <td><dfn title="attr-track-kind-keyword-descriptions"><code>descriptions</code></dfn>
      <td><dfn title="attr-track-kind-descriptions">Descriptions</dfn>
-     <td>Textual descriptions of the video component of the <span>media resource</span>, intended for audio synthesis when the visual component is unavailable (e.g. because the user is interacting with the application without a screen while driving, or because the user is blind).
+     <td>
+      Textual descriptions of the video component of the <span>media resource</span>, intended for audio synthesis when the visual component is unavailable (e.g. because the user is interacting with the application without a screen while driving, or because the user is blind).
+      Synthesized as separate audio track.
     <tr>
      <td><dfn title="attr-track-kind-keyword-chapters"><code>chapters</code></dfn>
      <td><dfn title="attr-track-kind-chapters">Chapters</dfn>
-     <td>Chapter titles, intended to be used for navigating the <span>media resource</span>.
+     <td>
+      Chapter titles, intended to be used for navigating the <span>media resource</span>.
+      Displayed as an interactive list in the user agent's interface.
     <tr>
      <td><dfn title="attr-track-kind-keyword-metadata"><code>metadata</code></dfn>
      <td><dfn title="attr-track-kind-metadata">Metadata</dfn>
-     <td>Tracks intended for use from script.
+     <td>
+      Tracks intended for use from script.
+      Not displayed by the user agent.
   </table>
 
   <p>The attribute may be omitted. The <i>missing value default</i> is
@@ -26911,17 +26922,6 @@
   text</span>.</p>
 <!--START w3c-html--><!--TTSRT-->
 
-  <p>If the elements's <span>track URL</span> identifies a resource
-  that <dfn>supports external timed track character encoding
-  overrides</dfn>, then the <dfn
-  title="attr-track-charset"><code>charset</code></dfn> attribute may
-  be specified. If the attribute is set, its value must be a valid
-  character encoding name, must be an <span>ASCII
-  case-insensitive</span> match for the <span>preferred MIME
-  name</span> for that encoding, and must match the character encoding
-  of the resource in question. <a
-  href="#refsIANACHARSET">[IANACHARSET]</a></p>
-
   <p>The <dfn title="attr-track-srclang"><code>srclang</code></dfn>
   attribute gives the language of the timed track data. The value must
   be a valid BCP 47 language tag. This attribute must be present if
@@ -26968,6 +26968,13 @@
 
   </div>
 
+  <p>The <dfn title="attr-track-default"><code>default</code></dfn>
+  attribute, if specified, indicates that the track is to be enabled
+  if the user's preferences do not indicate that another track would
+  be more appropriate. There must not be more than one
+  <code>track</code> element with the same parent node with the <code
+  title="attr-track-default">default</code> attribute specified.</p>
+
   <dl class="domintro">
 
    <dt><var title="">track</var> . <code title="dom-track-track">track</code></dt>
@@ -26988,13 +26995,13 @@
   object.</p>
 
   <p>The <dfn title="dom-track-src"><code>src</code></dfn>, <dfn
-  title="dom-track-charset"><code>charset</code></dfn>, <dfn
-  title="dom-track-srclang"><code>srclang</code></dfn>, and <dfn
-  title="dom-track-label"><code>label</code></dfn> IDL attributes must
-  <span>reflect</span> the respective content attributes of the same
-  name. The <dfn title="dom-track-kind"><code>kind</code></dfn> IDL
-  attributemust <span>reflect</span> the content attribute of the same
-  name, <span>limited to only known values</span>.</p>
+  title="dom-track-srclang"><code>srclang</code></dfn>, <dfn
+  title="dom-track-label"><code>label</code></dfn>, and <dfn
+  title="dom-track-default"><code>default</code></dfn> IDL attributes
+  must <span>reflect</span> the respective content attributes of the
+  same name. The <dfn title="dom-track-kind"><code>kind</code></dfn>
+  IDL attribute must <span>reflect</span> the content attribute of the
+  same name, <span>limited to only known values</span>.</p>
 
   </div>
 
@@ -29524,8 +29531,9 @@
    <li><p>Let <var title="">current cues</var> be an ordered list of
    <span title="timed track cue">cues</span>, initialized to contain
    all the <span title="timed track cue">cues</span> of all the <span
-   title="timed track hidden">hidden</span> or <span title="timed
-   track showing">showing</span> <span title="timed track">timed
+   title="timed track hidden">hidden</span>, <span title="timed track
+   showing">showing</span>, or <span title="timed track showing by
+   default">showing by default</span> <span title="timed track">timed
    tracks</span> of the <span>media element</span> (not the <span
    title="timed track disabled">disabled</span> ones) whose <span
    title="timed track cue start time">start times</span> are less than
@@ -29537,8 +29545,9 @@
    <li><p>Let <var title="">other cues</var> be an ordered list of
    <span title="timed track cue">cues</span>, initialized to contain
    all the <span title="timed track cue">cues</span> of <span
-   title="timed track hidden">hidden</span> and <span title="timed
-   track showing">showing</span> <span title="timed track">timed
+   title="timed track hidden">hidden</span>, <span title="timed track
+   showing">showing</span>, and <span title="timed track showing by
+   default">showing by default</span> <span title="timed track">timed
    tracks</span> of the <span>media element</span> that are not
    present in <var title="">current cues</var>, also in <span>timed
    track cue order</span>.</p></li>
@@ -29633,7 +29642,8 @@
    <li><p>Run the <span>rules for updating the timed track
    rendering</span> of each of the <span title="timed track">timed
    tracks</span> in <var title="">affected tracks</var> that are <span
-   title="timed track showing">showing</span>.
+   title="timed track showing">showing</span> or <span title="timed
+   track showing by default">showing by default</span>.
 <!--END w3c-html--><!--TTSRT-->
    For example, for <span title="timed track">timed tracks</span>
    based on <span>WebSRT</span>, the <span>rules for updating the
@@ -29832,7 +29842,7 @@
 
 <!--KEEP-END w3c-html--><!--TT-->
 <!--<div data-component="other Hixie drafts (editor: Ian Hickson)">-->
-  <h5>Timed tracks</h5>
+  <h5>Text timed tracks</h5>
 
   <h6>Timed track model</h6>
 
@@ -30008,6 +30018,7 @@
      </dd>
 
      <dt><dfn title="timed track showing">Showing</dfn>
+     <dt><dfn title="timed track showing by default">Showing by default</dfn>
 
      <dd>
 
@@ -30030,6 +30041,14 @@
       user can navigate to any point in the <span>media
       resource</span> by selecting a cue.</p>
 
+      <p>The <span title="timed track showing by default">showing by
+      default</span> state is used in conjunction with the <code
+      title="attr-track-default">default</code> attribute on
+      <code>track</code> elements to indicate that the timed track was
+      enabled due to that attribute. This allows the user agent to
+      override the state if a later track is discovered that is more
+      appropriate per the user's preferences.</p>
+
      </dd>
 
     </dl>
@@ -30198,11 +30217,6 @@
    </dd>
 <!--START w3c-html--><!--TTSRT-->
 
-   <dt><dfn title="timed track cue voice identifier">A voice identifier</dfn>
-   <dd>
-    <p>A string identifying the voice with which the cue is associated.</p>
-   </dd>
-
    <dt><dfn title="timed track cue text">The text of the cue</dfn>
    <dd>
     <p>The raw text of the cue, and rules for its interpretation,
@@ -30243,11 +30257,12 @@
     <code title="dom-media-HAVE_NOTHING">HAVE_NOTHING</code>. When the
     flag is unset in this way for one or more cues in <span
     title="timed track">timed tracks</span> that were <span
-    title="timed track showing">showing</span> prior to the relevant
-    incident, the user agent must, after having unset the flag for all
-    the affected cues, apply the <span>rules for updating the timed
-    track rendering</span> of those <span title="timed track">timed
-    tracks</span>.
+    title="timed track showing">showing</span> or <span title="timed
+    track showing by default">showing by default</span> prior to the
+    relevant incident, the user agent must, after having unset the
+    flag for all the affected cues, apply the <span>rules for updating
+    the timed track rendering</span> of those <span title="timed
+    track">timed tracks</span>.
 <!--END w3c-html--><!--TTSRT-->
     For example, for <span title="timed track">timed tracks</span>
     based on <span>WebSRT</span>, the <span>rules for updating the
@@ -30489,8 +30504,33 @@
    <dd>
     <p>Let the <span>timed track mode</span> be <span title="timed
     track showing">showing</span>.</p>
+
+    <p>If there is a <span>timed track</span> in the <span>media
+    element</span>'s <span>list of timed tracks</span> whose
+    <span>timed track mode</span> is <span title="timed track showing
+    by default">showing by default</span>, the user agent must
+    furthermore change <em>that</em> <span>timed track</span>'s
+    <span>timed track mode</span> to <span title="timed track
+    hidden">hidden</span>.</p> <!-- so that we still get events and
+    stuff: we can expect authors to forget that default doesn't mean
+    that it'll always be turned on, and that they'll still rely on
+    events firing even if it doesn't show -->
+
    </dd>
 
+   <dt>If the <code>track</code> element has a <code
+   title="attr-track-default">default</code> attribute specified, and
+   there is no other <span>timed track</span> in the <span>media
+   element</span>'s <span>list of timed tracks</span> whose
+   <span>timed track mode</span> is <span title="timed track
+   showing">showing</span> or <span title="timed track
+   showing by default">showing by default</span></dt>
+
+   <dd>
+    <p>Let the <span>timed track mode</span> be <span title="timed
+    track showing by default">showing by default</span>.</p>
+   </dd>
+
    <dt>Otherwise</dt>
 
    <dd>
@@ -30502,19 +30542,22 @@
 
   <p>When a <span>timed track</span> corresponding to a
   <code>track</code> element is created with <span>timed track
-  mode</span> set to <span title="timed track hidden">hidden</span> or
-  <span title="timed track showing">showing</span>, and when a
-  <span>timed track</span> corresponding to a <code>track</code>
-  element is created with <span>timed track mode</span> set to <span
-  title="timed track disabled">disabled</span> and subsequently
-  changes its <span>timed track mode</span> to <span title="timed
-  track hidden">hidden</span> or <span title="timed track
-  showing">showing</span> for the first time, the user agent must
-  immediately and synchronously run the following algorithm. This
-  algorithm interacts closely with the <span>event loop</span>
-  mechanism; in particular, it has a <span>synchronous section</span>
-  (which is triggered as part of the <span>event loop</span>
-  algorithm). The step in that section is marked with &#x231B;.</p>
+  mode</span> set to <span title="timed track hidden">hidden</span>,
+  <span title="timed track showing">showing</span>, or <span
+  title="timed track showing by default">showing by default</span>,
+  and when a <span>timed track</span> corresponding to a
+  <code>track</code> element is created with <span>timed track
+  mode</span> set to <span title="timed track
+  disabled">disabled</span> and subsequently changes its <span>timed
+  track mode</span> to <span title="timed track hidden">hidden</span>,
+  <span title="timed track showing">showing</span>, or <span
+  title="timed track showing by default">showing by default</span> for
+  the first time, the user agent must immediately and synchronously
+  run the following algorithm. This algorithm interacts closely with
+  the <span>event loop</span> mechanism; in particular, it has a
+  <span>synchronous section</span> (which is triggered as part of the
+  <span>event loop</span> algorithm). The step in that section is
+  marked with &#x231B;.</p>
 
   <ol>
 
@@ -30557,12 +30600,7 @@
     <code>text/srt</code>)
 <!--START w3c-html--><!--TTSRT-->
     as it is received, with the <span>timed
-    track list of cues</span> being used for that parser's output. If
-    the <code>track</code> element has a <code
-    title="attr-track-charset">charset</code> attribute that specifies
-    a supported character encoding, then that encoding must be given
-    to the parser as a character encoding override. Otherwise the
-    parser must use its default character encoding behavior.</p>
+    track list of cues</span> being used for that parser's output.</p>
 
     <p>If the <span title="fetch">fetching algorithm</span> fails for
     any reason (network error, the server returns an error code, a
@@ -30597,13 +30635,16 @@
      <li>the <span>track URL</span> changes so that it is no longer
      equal to <var title="">URL</var>, while the <span>timed track
      mode</span> is set to <span title="timed track
-     hidden">hidden</span> or <span title="timed track
-     showing">showing</span>; or</li>
+     hidden">hidden</span>, <span title="timed track
+     showing">showing</span>, or <span title="timed track showing by
+     default">showing by default</span>; or</li>
 
      <li>the <span>timed track mode</span> changes to <span
-     title="timed track hidden">hidden</span> or <span title="timed
-     track showing">showing</span>, while the <span>track URL</span> is
-     not equal to <var title="">URL</var></li>
+     title="timed track hidden">hidden</span>, <span title="timed
+     track showing">showing</span>, or <span title="timed track
+     showing by default">showing by default</span>, while the
+     <span>track URL</span> is not equal to <var
+     title="">URL</var></li>
 
     </ul>
 
@@ -30634,8 +30675,9 @@
    <li><p><i>Monitoring</i>: Wait until the <span>track URL</span> is
    no longer equal to <var title="">URL</var>, at the same time as the
    <span>timed track mode</span> is set to <span title="timed track
-   hidden">hidden</span> or <span title="timed track
-   showing">showing</span>.</p></li>
+   hidden">hidden</span>, <span title="timed track
+   showing">showing</span>, or <span title="timed track showing by
+   default">showing by default</span>.</p></li>
 
    <li><p>Wait until the <span>timed track readiness state</span> is
    no longer set to <span title="timed track
@@ -30722,15 +30764,6 @@
     cues. Otherwise, they should be set to zero.</p>
    </dd>
 
-   <dt>The <span>timed track cue voice identifier</span>
-   <dd>
-    <p>Should be set to the empty string if the format has no
-    obvious analogue to cue voices. The <span>timed track cue voice
-    identifier</span> may be set to strings that cannot be expressed
-    using <span>WebSRT</span>, if the format supports voices that do
-    not correspond to the voices used by WebSRT.</p>
-   </dd>
-
   </dl>
 
   </div>
@@ -30851,13 +30884,13 @@
      <dd>
       <p>The <span>timed track disabled</span> mode.</p>
      </dd>
-     <dt><code>TimedTrack</code> . <code title="dom-TimedTrack-HIDDEN">HIDDEN</code> (0)</dt>
+     <dt><code>TimedTrack</code> . <code title="dom-TimedTrack-HIDDEN">HIDDEN</code> (1)</dt>
      <dd>
       <p>The <span>timed track hidden</span> mode.</p>
      </dd>
-     <dt><code>TimedTrack</code> . <code title="dom-TimedTrack-SHOWING">SHOWING</code> (0)</dt>
+     <dt><code>TimedTrack</code> . <code title="dom-TimedTrack-SHOWING">SHOWING</code> (2)</dt>
      <dd>
-      <p>The <span>timed track showing</span> mode.</p>
+      <p>The <span>timed track showing</span> and <span title="timed track showing by default">showing by default</span> modes.</p>
      </dd>
     </dl>
     <p>Can be set, to change the mode.</p>
@@ -30923,7 +30956,7 @@
    <dt><dfn title="dom-TimedTrack-HIDDEN"><code>HIDDEN</code></dfn> (numeric value 1)</dt>
    <dd>The <span>timed track hidden</span> mode.</dd>
    <dt><dfn title="dom-TimedTrack-SHOWING"><code>SHOWING</code></dfn> (numeric value 2)</dt>
-   <dd>The <span>timed track showing</span> mode.</dd>
+   <dd>The <span>timed track showing</span> and <span title="timed track showing by default">showing by default</span> modes.</dd>
   </dl>
 
   <p>On setting, if the new value is not either 0, 1, or 2, the user
@@ -30962,6 +30995,12 @@
     track</span> that the <code>TimedTrack</code> object represents to
     the <span>timed track showing</span> mode.</p>
 
+    <p class="note">If the mode had been <span title="timed track
+    showing by default">showing by default</span>, this will change it
+    to <span title="timed track showing">showing</span>, even though
+    the value of <code title="dom-TimedTrack-mode">mode</code> would
+    appear not to change.</p>
+
    </dd>
 
   </dl>
@@ -31261,7 +31300,7 @@
 
   <pre class="idl">
 <!--END w3c-html--><!--TTSRT-->
-[<span title="dom-TimedTrackCue">Constructor</span>(in DOMString id, in double startTime, in double endTime, in DOMString text, in optional DOMString settings, in optional DOMString voice, in optional boolean pauseOnExit)]
+[<span title="dom-TimedTrackCue">Constructor</span>(in DOMString id, in double startTime, in double endTime, in DOMString text, in optional DOMString settings, in optional boolean pauseOnExit)]
 <!--START w3c-html--><!--TTSRT-->
 interface <dfn>TimedTrackCue</dfn> {
   readonly attribute <span>TimedTrack</span> <span title="dom-TimedTrackCue-track">track</span>;
@@ -31280,7 +31319,6 @@
   readonly attribute DOMString <span title="dom-TimedTrackCue-alignment">alignment</span>;
 <!--START w3c-html--><!--TTSRT-->
 
-  readonly attribute DOMString <span title="dom-TimedTrackCue-voice">voice</span>;
   DOMString <span title="dom-TimedTrackCue-getCueAsSource()">getCueAsSource</span>();
   <span>DocumentFragment</span> <span title="dom-TimedTrackCue-getCueAsHTML()">getCueAsHTML</span>();
 
@@ -31291,7 +31329,7 @@
   <dl class="domintro">
 
 <!--END w3c-html--><!--TTSRT-->
-   <dt><var title="">cue</var> = new <code title="dom-TimedTrackCue">TimedTrackCue</code>( <var title="">id</var>, <var title="">startTime</var>, <var title="">endTime</var>, <var title="">text</var> [, <var title="">settings</var> [, <var title="">voice</var> [, <var title="">pauseOnExit</var> ] ] ] )</dt>
+   <dt><var title="">cue</var> = new <code title="dom-TimedTrackCue">TimedTrackCue</code>( <var title="">id</var>, <var title="">startTime</var>, <var title="">endTime</var>, <var title="">text</var> [, <var title="">settings</var> [, <var title="">pauseOnExit</var> ] ] )</dt>
    <dd>
     <p>Returns a new <code>TimedTrackCue</code> object, for use with the <code title="dom-MutableTimedTrack-addCue">addCue()</code> method.</p>
     <p>The <var title="">id</var> argument sets the <span>timed track cue identifier</span>.</p>
@@ -31299,7 +31337,6 @@
     <p>The <var title="">endTime</var> argument sets the <span>timed track cue end time</span>.</p>
     <p>The <var title="">text</var> argument sets the <span>timed track cue text</span>.</p>
     <p>The <var title="">settings</var> argument is a string in the format of <span>WebSRT cue settings</span>. If omitted, the empty string is assumed.</p>
-    <p>The <var title="">voice</var> argument sets the <span>timed track cue voice identifier</span>. If omitted, the empty string is assumed.</p>
     <p>The <var title="">pauseOnExit</var> argument sets the <span>timed track cue pause-on-exit flag</span>. If omitted, false is assumed.</p>
    </dd>
 <!--START w3c-html--><!--TTSRT-->
@@ -31381,11 +31418,6 @@
    </dd>
 <!--START w3c-html--><!--TTSRT-->
 
-   <dt><var title="">cue</var> . <span title="dom-TimedTrackCue-voice">voice</span></dt>
-   <dd>
-    <p>Returns the <span>timed track cue voice identifier</span>.</p>
-   </dd>
-
    <dt><var title="">source</var> = <var title="">cue</var> . <span title="dom-TimedTrackCue-getCueAsSource">getCueAsSource</span>()</dt>
    <dd>
     <p>Returns the <span>timed track cue text</span> in raw unparsed form.</p>
@@ -31404,7 +31436,7 @@
   <p>The <dfn title="dom-TimedTrackCue"><code>TimedTrackCue(<var
   title="">id</var>, <var title="">startTime</var>, <var
   title="">endTime</var>, <var title="">text</var>, <var
-  title="">settings</var>, <var title="">voice</var>, <var
+  title="">settings</var>, <var
   title="">pauseOnExit</var>)</code></dfn> constructor, when invoked,
   must run the following steps:</p>
 
@@ -31431,10 +31463,6 @@
    title="">pauseOnExit</var> is present and true. Otherwise, let it
    be false.</p></li>
 
-   <li><p>Let <var title="">cue</var>'s <span>timed track cue voice
-   identifier</span> be the value of the <var title="">voice</var>
-   argument, if it is present, or the empty string otherwise.</p></li>
-
    <li><p>Let <var title="">cue</var>'s <span>timed track cue
    text</span> be the value of the <var title="">text</var> argument,
    and let the rules for its interpretation be the <span>WebSRT cue
@@ -31554,9 +31582,11 @@
 
    <li><p>Let <var title="">n</var> be the number of <span
    title="timed track">timed tracks</span> whose <span>timed track
-   mode</span> is <span title="timed track showing">showing</span> and
-   that are in the <span>media element</span>'s <span>list of timed
-   tracks</span> before <var title="">track</var>.</p></li>
+   mode</span> is <span title="timed track showing">showing</span> or
+   <span title="timed track showing by default">showing by
+   default</span> and that are in the <span>media element</span>'s
+   <span>list of timed tracks</span> before <var
+   title="">track</var>.</p></li>
 
    <li><p>Return <var title="">n</var>.</p></li>
 
@@ -31580,11 +31610,6 @@
   object represents.</p>
 <!--START w3c-html--><!--TTSRT-->
 
-  <p>The <dfn title="dom-TimedTrackCue-voice"><code>voice</code></dfn>
-  attribute must return the <span>timed track cue voice
-  identifier</span> of the <span>timed track cue</span> that the
-  <code>TimedTrackCue</code> object represents.</p>
-
   <p>The <dfn
   title="dom-TimedTrackCue-getCueAsSource()"><code>getCueAsSource()</code></dfn>
   method must return the raw <span>timed track cue text</span>.</p>
@@ -31651,15 +31676,35 @@
   body</span> encoded as UTF-8 and labeled with the <span>MIME
   type</span> <code>text/srt</code>. <a href="#refsRFC3629">[RFC3629]</a></p>
 
-  <p>A <dfn>WebSRT file body</dfn> consists of an optional U+FEFF BYTE
-  ORDER MARK (BOM) character, followed by zero or more <span
-  title="WebSRT line terminator">WebSRT line terminators</span>,
-  followed by zero or more <span title="WebSRT cue">WebSRT cues</span>
-  separated from each other by two or more <span title="WebSRT line
-  terminator">WebSRT line terminators</span>, followed by zero or more
-  <span title="WebSRT line terminator">WebSRT line
-  terminators</span>.</p>
+  <p>A <dfn>WebSRT file body</dfn> consists of the following
+  components, in the following order:</p>
 
+  <ol>
+
+   <li>An optional U+FEFF BYTE ORDER MARK (BOM) character.</li>
+
+   <li>The string "<code title="">WEBSRT</code>", a single U+0020
+   SPACE character, and the string "<code title="">FILE</code>".</li>
+
+   <li>Optionally, either a U+0020 SPACE character or a U+0009
+   CHARACTER TABULATION (tab) character followed by any number of
+   characters that are not U+000A LINE FEED (LF) or U+000D CARRIAGE
+   RETURN (CR) characters.</li> <!-- allows for Emacs line -->
+
+   <li>Two or more <span title="WebSRT line terminator">WebSRT line
+   terminators</span>.</li> <!-- the first one to terminate the magic
+   line, the second one to terminate the header block: in the future,
+   we can add a metadata block before the first blank line -->
+
+   <li>Zero or more <span title="WebSRT cue">WebSRT cues</span>
+   separated from each other by two or more <span title="WebSRT line
+   terminator">WebSRT line terminators</span>.</li>
+
+   <li>Zero or more <span title="WebSRT line terminator">WebSRT line
+   terminators</span>.</li>
+
+  </ol>
+
   <p>A <dfn>WebSRT cue</dfn> consists of the following components, in
   the given order:</p>
 
@@ -31668,7 +31713,6 @@
    <li><span>WebSRT cue timings</span>.</li>
    <li>Optionally, one or more U+0020 SPACE characters or U+0009 CHARACTER TABULATION (tab) characters followed by <span>WebSRT cue settings</span>.</li>
    <li>A <span>WebSRT line terminator</span>.</li>
-   <li>Optionally, a <span>WebSRT voice declaration</span> followed by zero or more U+0020 SPACE characters or U+0009 CHARACTER TABULATION (tab) characters.</li>
    <li>The <dfn>cue payload</dfn>: either <span>WebSRT cue text</span> or <span>WebSRT metadata text</span>.</li>
   </ol>
 
@@ -31795,8 +31839,7 @@
    base ten integer in the range 0 ≤ <var
    title="">seconds</var> ≤ 59.</li>
 
-   <li>Either a U+002E FULL STOP character (.) or a U+002C COMMA
-   character (,).</li>
+   <li>A U+002E FULL STOP character (.).</li>
 
    <li>Three characters in the range U+0030 DIGIT ZERO (0) to U+0039
    DIGIT NINE (9), representing the thousandths of a second <var
@@ -31883,27 +31926,6 @@
    <li>One of the following strings: "<code title="">start</code>", "<code title="">middle</code>", "<code title="">end</code>"</li>
   </ol>
 
-  <p>A <dfn>WebSRT voice declaration</dfn> consists of the following
-  components, in the order given:</p>
-
-  <ol>
-   <li>A U+003C LESS-THAN SIGN character (<).</li>
-   <li>One of the following:
-    <ul class="brief">
-     <li>One character in the range U+0031 DIGIT ONE (1) to U+0039
-     DIGIT NINE (9), followed by zero or more characters in the range
-     U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9)
-     <li>The string "<dfn title="timed track cue narrator voice"><code>narrator</code></dfn>".</li>
-     <li>The string "<dfn title="timed track cue music voice"><code>music</code></dfn>".</li>
-     <li>The string "<dfn title="timed track cue lyric voice"><code>lyric</code></dfn>".</li>
-     <li>The string "<dfn title="timed track cue sound voice"><code>sound</code></dfn>".</li> <!-- for audio fx descriptions -->
-     <li>The string "<dfn title="timed track cue comment voice"><code>comment</code></dfn>".</li> <!-- for annotations -->
-     <li>The string "<dfn title="timed track cue credit voice"><code>credit</code></dfn>".</li>
-    </ul>
-   </li>
-   <li>A U+003E GREATER-THAN SIGN character (>).</li>
-  </ol>
-
   <p><dfn>WebSRT metadata text</dfn> consists of any sequence of one
   or more characters other than U+000A LINE FEED (LF) characters and
   U+000D CARRIAGE RETURN (CR) characters, each optionally separated
@@ -31913,20 +31935,28 @@
   does not start or end with a <span>WebSRT line
   terminator</span>.)</p>
 
-  <p><dfn>WebSRT cue text</dfn> consists of one or more <span>WebSRT
+  <p><dfn>WebSRT cue text</dfn> consists of zero or more <span>WebSRT
   cue components</span>, in any order, each optionally separated from
   the next by a <span>WebSRT line terminator</span>.</p>
 
   <p>The <dfn>WebSRT cue components</dfn> are:</p>
 
   <ul>
+
+   <li>A <span>WebSRT cue class span</span>.</li>
+   <li>A <span>WebSRT cue italics span</span>.</li>
+   <li>A <span>WebSRT cue bold span</span>.</li>
+   <li>A <span>WebSRT cue ruby span</span>.</li>
+   <li>A <span>WebSRT cue voice span</span>.</li>
+
+   <li>A <span>WebSRT cue timestamp</span>.</li>
+
    <li>A <span>WebSRT cue text span</span>, representing the text of the cue.</li>
+
    <li>A <span>WebSRT cue amp escape</span>, representing a "&" character in the text of the cue.</li>
    <li>A <span>WebSRT cue lt escape</span>, representing a "<" character in the text of the cue.</li>
-   <li>A <span>WebSRT cue timestamp</span>.</li>
-   <li>A <span>WebSRT cue italics span</span>.</li>
-   <li>A <span>WebSRT cue bold span</span>.</li>
-   <li>A <span>WebSRT cue ruby span</span>.</li>
+   <li>A <span>WebSRT cue gt escape</span>, representing a ">" character in the text of the cue.</li>
+
   </ul>
 
   <p><dfn>WebSRT cue internal text</dfn> consists of an optional
@@ -31934,105 +31964,184 @@
   <span>WebSRT cue components</span>, in any order, each optionally
   followed by a <span>WebSRT line terminator</span>.</p>
 
-  <p>A <dfn>WebSRT cue text span</dfn> consists of one or more
-  characters other than U+000A LINE FEED (LF) characters, U+000D
-  CARRIAGE RETURN (CR) characters, U+0026 AMPERSAND characters (&),
-  and U+003C LESS-THAN SIGN characters (<).</p>
 
-  <p>A <dfn>WebSRT cue amp escape</dfn> is the five character string
-  consisting of a U+0026 AMPERSAND character (&), a U+0061 LATIN SMALL
-  LETTER A character, a U+006D LATIN SMALL LETTER M character, a
-  U+0070 LATIN SMALL LETTER P character, and a U+003B SEMICOLON
-  character (;).
 
-  <p>A <dfn>WebSRT cue lt escape</dfn> is the five character string
-  consisting of a U+0026 AMPERSAND character (&), a U+006C LATIN SMALL
-  LETTER L character, a U+0074 LATIN SMALL LETTER T character, and a
-  U+003B SEMICOLON character (;).
+  <p>A <dfn>WebSRT cue class span</dfn> consists of a <span>WebSRT cue
+  span start tag</span> "<code title="">c</code>" that disallows an
+  annotation, <span>WebSRT cue internal text</span> representing cue
+  text, and a <span>WebSRT cue span end tag</span> "<code
+  title="">c</code>".</p>
 
-  <p>A <dfn>WebSRT cue timestamp</dfn> consists of a U+003C LESS-THAN
-  SIGN character (<), followed by a <span>WebSRT timestamp</span>
-  representing the time that the given point in the cue becomes
-  active, followed by a U+003E GREATER-THAN SIGN character (>). The
-  time represented by the <span>WebSRT timestamp</span> must be
-  greater than the times represented by any previous <span
-  title="WebSRT cue timestamp">WebSRT cue timestamps</span> in the
-  cue, as well as greater than the cue's start time offset, and less
-  than the cue's end time offset.</p>
+  <p>A <dfn>WebSRT cue italics span</dfn> consists of a <span>WebSRT
+  cue span start tag</span> "<code title="">i</code>" that disallows
+  an annotation, <span>WebSRT cue internal text</span> representing
+  the italicized text, and a <span>WebSRT cue span end tag</span>
+  "<code title="">i</code>".</p>
 
-  <p>A <dfn>WebSRT cue italics span</dfn> consists of a U+003C
-  LESS-THAN SIGN character (<), a U+0069 LATIN SMALL LETTER I
-  character, and a U+003E GREATER-THAN SIGN character (>), then
-  <span>WebSRT cue internal text</span> representing the italicized
-  text, and finally a U+003C LESS-THAN SIGN character (<), a U+002F
-  SOLIDUS character (/), a U+0069 LATIN SMALL LETTER I character, and
-  a U+003E GREATER-THAN SIGN character (>).</p>
+  <p>A <dfn>WebSRT cue bold span</dfn> consists of a <span>WebSRT cue
+  span start tag</span> "<code title="">b</code>" that disallows an
+  annotation, <span>WebSRT cue internal text</span> representing the
+  boldened text, and a <span>WebSRT cue span end tag</span> "<code
+  title="">b</code>".</p>
 
-  <p>A <dfn>WebSRT cue bold span</dfn> consists of a U+003C LESS-THAN
-  SIGN character (<), a U+0062 LATIN SMALL LETTER B character, and
-  a U+003E GREATER-THAN SIGN character (>), then <span>WebSRT cue
-  internal text</span> representing the bolded text, and finally a
-  U+003C LESS-THAN SIGN character (<), a U+002F SOLIDUS character
-  (/), a U+0062 LATIN SMALL LETTER B character, and a U+003E
-  GREATER-THAN SIGN character (>).</p>
-
   <p>A <dfn>WebSRT cue ruby span</dfn> consists of the following
   components, in the order given:</p>
 
   <ol>
-   <li>The string "<code title=""><ruby></code>".</li>
+   <li>A <span>WebSRT cue span start tag</span> "<code title="">i</code>" that disallows an annotation.</li>
    <li>One or more occurrences of the following group of components, in the order given:
     <ol>
      <li><span>WebSRT cue internal text</span>, representing the ruby base.</li>
-     <li>The string "<code title=""><rt></code>".</li>
-     <li><span>WebSRT cue internal text</span>, representing the ruby text component of th ruby annotation.</li>
-     <li>The string "<code title=""></rt></code>". If this is
-     the last occurance of this group of components in the
+     <li>A <span>WebSRT cue span start tag</span> "<code title="">rt</code>" that disallows an annotation.</li>
+     <li>A <dfn>WebSRT cue ruby text span</dfn>: <span>WebSRT cue internal text</span>, representing the ruby text component of the ruby annotation.</li>
+     <li>A <span>WebSRT cue span end tag</span> "<code title="">rt</code>".
+     If this is the last occurance of this group of components in the
      <span>WebSRT cue ruby span</span>, then this last end tag string
      may be omitted.</li>
     </ol>
    </li>
    <li>If the last end tag string was not omitted: Optionally, a <span>WebSRT line terminator</span>.</li>
    <li>If the last end tag string was not omitted: Zero or more U+0020 SPACE characters or U+0009 CHARACTER TABULATION (tab) characters, each optionally followed by a <span>WebSRT line terminator</span>.</li>
-   <li>The string "<code title=""></ruby></code>".</li>
+   <li>A <span>WebSRT cue span end tag</span> "<code title="">ruby</code>".</li>
   </ol>
 
-  <p>For historical reasons, <span title="WebSRT file">WebSRT
-  files</span> <span title="supports external timed track character
-  encoding overrides">support external timed track character encoding
-  overrides</span>.</p>
+  <p>A <dfn>WebSRT cue voice span</dfn> consists of the following
+  components, in the order given:</p>
 
+  <ol>
+   <li>A <span>WebSRT cue span start tag</span> "<code title="">v</code>" that requires an annotation; the annotation represents the name of the voice.</li>
+   <li><span>WebSRT cue internal text</span>.</li>
+   <li>A <span>WebSRT cue span end tag</span> "<code title="">v</code>". If this <span>WebSRT cue voice span</span> is the only <span title="WebSRT cue components">component</span> of its <span>WebSRT cue text</span> sequence, then the end tag may be omitted for brevity.</li>
+  </ol>
 
+
+  <p>A <dfn>WebSRT cue span start tag</dfn> has a <var title="">tag
+  name</var> and either allows, requires, and disallows an annotation,
+  and consists of the following components, in the order given:</p>
+
+  <ol>
+
+   <li>A U+003C LESS-THAN SIGN character (<).</li>
+
+   <li>The <var title="">tag name</var>.</li>
+
+   <li>Zero or more occurrences of the following sequence:
+
+    <ol>
+
+     <li>U+002E FULL STOP character (.)</li>
+
+     <li>One or more characters other than U+0009 CHARACTER TABULATION
+     (tab) characters, U+000A LINE FEED (LF) characters, U+000D
+     CARRIAGE RETURN (CR) characters, U+0020 SPACE characters, U+0026
+     AMPERSAND characters (&), U+003C LESS-THAN SIGN characters
+     (<), U+003E GREATER-THAN SIGN characters (>), and U+002E FULL
+     STOP characters (.), representing a class that describes the cue
+     span's significance.</li>
+
+    </ol>
+
+   </li>
+
+   <li>
+<!--
+    <dl class="switch">
+
+     <dt>If the start tag allows an annotation:</dt>
+
+     <dd>Optionally, a <span>WebSRT cue span start tag annotation</span>.</dd>
+
+     <dt>-->If the start tag requires an annotation:<!--</dt>
+
+     <dd>A <span>WebSRT cue span start tag annotation</span>.</dd>
+
+    </dl>
+
+    <p>A <dfn>WebSRT cue span start tag annotation</dfn> consists of-->
+
+    one or more of the following components, the concatenation of
+    their representations having a value that contains at least one
+    character other than U+0020 SPACE and U+0009 CHARACTER TABULATION
+    (tab) characters:<!--</p>-->
+
+    <ul>
+     <li><span>WebSRT cue span start tag annotation text</span>, representing the text of the annotation.</li>
+     <li>A <span>WebSRT cue amp escape</span>, representing a "&" character in the text of the annotation.</li>
+     <li>A <span>WebSRT cue lt escape</span>, representing a "<" character in the text of the annotation.</li>
+     <li>A <span>WebSRT cue gt escape</span>, representing a ">" character in the text of the annotation.</li>
+    </ul>
+
+   </li>
+
+   <li>A U+003E GREATER-THAN SIGN character (>).</li>
+
+  </ol>
+
+  <p>A <dfn>WebSRT cue span end tag</dfn> has a <var title="">tag
+  name</var> and consists of the following components, in the order
+  given:</p>
+
+  <ol>
+   <li>A U+003C LESS-THAN SIGN character (<).</li>
+   <li>U+002F SOLIDUS character (/).</li>
+   <li>The <var title="">tag name</var>.</li>
+   <li>A U+003E GREATER-THAN SIGN character (>).</li>
+  </ol>
+
+
+  <p>A <dfn>WebSRT cue timestamp</dfn> consists of a U+003C LESS-THAN
+  SIGN character (<), followed by a <span>WebSRT timestamp</span>
+  representing the time that the given point in the cue becomes
+  active, followed by a U+003E GREATER-THAN SIGN character (>). The
+  time represented by the <span>WebSRT timestamp</span> must be
+  greater than the times represented by any previous <span
+  title="WebSRT cue timestamp">WebSRT cue timestamps</span> in the
+  cue, as well as greater than the cue's start time offset, and less
+  than the cue's end time offset.</p>
+
+  <p>A <dfn>WebSRT cue text span</dfn> consists of one or more
+  characters other than U+000A LINE FEED (LF) characters, U+000D
+  CARRIAGE RETURN (CR) characters, U+0026 AMPERSAND characters (&),
+  and U+003C LESS-THAN SIGN characters (<).</p>
+
+  <p><dfn>WebSRT cue span start tag annotation text</dfn> consists of
+  one or more characters other than U+000A LINE FEED (LF) characters,
+  U+000D CARRIAGE RETURN (CR) characters, U+0026 AMPERSAND characters
+  (&), and U+003E GREATER-THAN SIGN characters (>).</p>
+
+  <p>A <dfn>WebSRT cue amp escape</dfn> is the five character string
+  "<code title="">&</code>".</p>
+
+  <p>A <dfn>WebSRT cue lt escape</dfn> is the five character string
+  "<code title=""><</code>".</p>
+
+  <p>A <dfn>WebSRT cue gt escape</dfn> is the five character string
+  "<code title="">></code>".</p>
+
+
+
   <div class="impl">
 
   <h6>Parsing</h6>
 
-  <p>A <dfn>WebSRT parser</dfn>, given an input byte stream, a
+  <p>A <dfn>WebSRT parser</dfn>, given an input byte stream and a
   <span>timed track list of cues</span> <var title="">output</var>,
-  and optionally a character encoding override <var
-  title="">encoding</var>, must convert the bytes into a string of
-  Unicode characters by interpreting them as the given <var
-  title="">encoding</var>, or UTF-8 if <var title="">encoding</var> is
-  not provided, and then must parse the resulting string according to
-  the <span>WebSRT parser algorithm</span> below. This results in
-  <span title="timed track cue">timed track cues</span> being added to
-  <var title="">output</var>. <a href="#refsRFC3629">[RFC3629]</a></p>
+  must <span title="decoded as UTF-8, with error handling">decode the
+  byte stream as UTF-8, with error handling</span>, and then must
+  parse the resulting string according to the <span>WebSRT parser
+  algorithm</span> below. This results in <span title="timed track
+  cue">timed track cues</span> being added to <var
+  title="">output</var>. <a href="#refsRFC3629">[RFC3629]</a></p>
 
   <p>A <span>WebSRT parser</span>, specifically its conversion and
   parsing steps, is typically run asynchronously, with the input byte
   stream being updated incrementally as the resource is downloaded;
   this is called an <dfn>incremental WebSRT parser</dfn>.</p>
 
-  <p>The following <span title="MIME type">MIME type<!--s--></span> must be
-  recognised as indicating the <span>WebSRT</span> format:</p>
+  <p>A <span>WebSRT parser</span> verifies a file signature before
+  parsing the provided byte stream. If the stream lacks this WebSRT
+  file signature, then the parser aborts.</p>
 
-  <ul class="brief">
-   <li><code>text/srt</code></li>
-  </ul>
-
-  <!--<p class="note">Not all of these MIME types are valid registered
-  types.</p>-->
-
   <p>When converting the bytes into Unicode characters, if the
   encoding used is UTF-8, the bytes must be <span title="decoded as
   UTF-8, with error handling">decoded with the error handling</span>
@@ -32066,6 +32175,76 @@
    title="">position</var> to the next character in <var
    title="">input</var>.</p></li>
 
+
+   <li><p><span>Collect a sequence of characters</span> that are
+   <em>not</em> U+000D CARRIAGE RETURN (CR) or U+000A LINE FEED (LF)
+   characters. Let <var title="">line</var> be those characters, if
+   any.</p></li>
+
+   <li><p>If <var title="">line</var> is less than eleven characters
+   long, then abort these steps. The file is not a <span>WebSRT
+   file</span>.</p></li>
+
+   <li><p>If <var title="">line</var> is exactly eleven characters
+   long but does not exactly equal "<code
+   title="">WEBSRT FILE</code>", then abort these steps. The file
+   is not a <span>WebSRT file</span>.</p></li>
+
+   <li><p>If <var title="">line</var> is more than eleven characters
+   long but does the first elevent characters do not exactly equal
+   "<code title="">WEBSRT FILE</code>", or the twelfth character
+   is neither a U+0020 SPACE character nor a U+0009 CHARACTER
+   TABULATION (tab) character, then abort these steps. The file is not
+   a <span>WebSRT file</span>.</p></li>
+
+   <li><p>If <var title="">position</var> is past the end of <var
+   title="">input</var>, then jump to the step labeled
+   <i>end</i>.</p></li>
+
+   <li><p>If the character indicated by <var title="">position</var>
+   is a U+000D CARRIAGE RETURN (CR) character, advance <var
+   title="">position</var> to the next character in <var
+   title="">input</var>.</p></li>
+
+   <li><p>If <var title="">position</var> is past the end of <var
+   title="">input</var>, then jump to the step labeled
+   <i>end</i>.</p></li>
+
+   <li><p>If the character indicated by <var title="">position</var>
+   is a U+000A LINE FEED (LF) character, advance <var
+   title="">position</var> to the next character in <var
+   title="">input</var>.</p></li>
+
+
+   <li><p><i>Header</i>: <span>Collect a sequence of characters</span>
+   that are <em>not</em> U+000D CARRIAGE RETURN (CR) or U+000A LINE
+   FEED (LF) characters. Let <var title="">line</var> be those
+   characters, if any.</p></li>
+
+   <li><p>If <var title="">position</var> is past the end of <var
+   title="">input</var>, then jump to the step labeled
+   <i>end</i>.</p></li>
+
+   <li><p>If the character indicated by <var title="">position</var>
+   is a U+000D CARRIAGE RETURN (CR) character, advance <var
+   title="">position</var> to the next character in <var
+   title="">input</var>.</p></li>
+
+   <li><p>If <var title="">position</var> is past the end of <var
+   title="">input</var>, then jump to the step labeled
+   <i>end</i>.</p></li>
+
+   <li><p>If the character indicated by <var title="">position</var>
+   is a U+000A LINE FEED (LF) character, advance <var
+   title="">position</var> to the next character in <var
+   title="">input</var>.</p></li>
+
+   <!-- In v2, this is where we can put header metadata processing -->
+
+   <li><p>If <var title="">line</var> is not the empty string, then
+   jump back to the step labeled <i>header</i>.</p></li>
+
+
    <li><p><i>Cue loop</i>: <span>Collect a sequence of
    characters</span> that are either U+000D CARRIAGE RETURN (CR) or
    U+000A LINE FEED (LF) characters.</p></li>
@@ -32102,9 +32281,6 @@
    alignment">middle alignment</span>.</p></li>
 
    <li><p>Let <var title="">cue</var>'s <span>timed track cue
-   voice identifier</span> be the empty string.</p></li>
-
-   <li><p>Let <var title="">cue</var>'s <span>timed track cue
    text</span> be the empty string.</p></li>
 
    <li><p><span>Collect a sequence of characters</span> that are
@@ -32195,11 +32371,12 @@
 
    <li><p>Return to the step labeled <i>cue text loop</i>.</p></li>
 
-   <li><p><i>Cue text processing</i>: <span>Collect WebSRT cue voice
-   and text</span> from <var title="">cue text</var>, using <var
-   title="">cue</var> for the results. If that fails, discard <var
-   title="">cue</var> and jump to the step labeled <i>cue
-   loop</i>.</p></li>
+   <li><p><i>Cue text processing</i>: Let the <span>timed track cue
+   text</span> of <var title="">cue</var> be <var title="">cue
+   text</var>, and let the rules for its interpretation be the
+   <span>WebSRT cue text parsing rules</span>, the <span>WebSRT cue
+   text rendering rules</span>, and the <span>WebSRT cue text DOM
+   construction rules</span>.</p></li>
 
    <li><p>Add <var title="">cue</var> to the <span>timed track list of
    cues</span> <var title="">output</var>.</p></li>
@@ -32275,20 +32452,20 @@
    <li><p>If <!--<var title="">position</var> is beyond the end of
    <var title="">input</var> or if--> the character at <var
    title="">position</var> is not a U+002D HYPHEN-MINUS character (-)
-   then abort these steps and return failure. Otherwise, move <var title="">position</var> forwards
-   one character.</p></li>
+   then abort these steps and return failure. Otherwise, move <var
+   title="">position</var> forwards one character.</p></li>
 
    <li><p>If <!--<var title="">position</var> is beyond the end of
    <var title="">input</var> or if--> the character at <var
    title="">position</var> is not a U+002D HYPHEN-MINUS character (-)
-   then abort these steps and return failure. Otherwise, move <var title="">position</var> forwards
-   one character.</p></li>
+   then abort these steps and return failure. Otherwise, move <var
+   title="">position</var> forwards one character.</p></li>
 
    <li><p>If <!--<var title="">position</var> is beyond the end of
    <var title="">input</var> or if--> the character at <var
-   title="">position</var> is not a U+003E GREATER-THAN SIGN character (>)
-   then abort these steps and return failure. Otherwise, move <var title="">position</var> forwards
-   one character.</p></li>
+   title="">position</var> is not a U+003E GREATER-THAN SIGN character
+   (>) then abort these steps and return failure. Otherwise, move <var
+   title="">position</var> forwards one character.</p></li>
 
    <li><p><span>Skip whitespace</span>.</p></li>
 
@@ -32581,6 +32758,9 @@
    title="">position</var> be the same variables as those of the same
    name in the algorithm that invoked these steps.</p></li>
 
+   <li><p>Let <var title="">most significant units</var> be <i
+   title="">minutes</i>.</p></li>
+
    <li><p>If <var title="">position</var> is past the end of <var
    title="">input</var>, return an error and abort these
    steps.</p></li>
@@ -32592,14 +32772,16 @@
    <li><p><span>Collect a sequence of characters</span> in the range
    U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9), and let <var
    title="">string</var> be the collected substring.</p></li>
-<!--(should only do this check for minutes, not hours, if we ever bring it back)
-   <li><p>If <var title="">string</var> is not exactly two characters
-   in length, return an error and abort these steps.</p></li>
--->
+
    <li><p>Interpret <var title="">string</var> as a base-ten
    integer. Let <var title="">value<sub>1</sub></var> be that
    integer.</p></li>
 
+   <li><p>If <var title="">string</var> is not exactly two characters
+   in length, or if <var title="">value<sub>1</sub></var> is greater
+   than 59, let <var title="">most significant units</var> be <i
+   title="">hours</i>.</p></li>
+
    <li><p>If <var title="">position</var> is beyond the end of <var
    title="">input</var> or if the character at <var
    title="">position</var> is not a U+003A COLON character (:), then
@@ -32613,28 +32795,28 @@
    <li><p><span>Collect a sequence of characters</span> in the range
    U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9), and let <var
    title="">string</var> be the collected substring.</p></li>
-<!--
+
    <li><p>If <var title="">string</var> is not exactly two characters
    in length, return an error and abort these steps.</p></li>
--->
+
    <li><p>Interpret <var title="">string</var> as a base-ten
    integer. Let <var title="">value<sub>2</sub></var> be that
    integer.</p></li>
 
    <li>
 
-    <p>If <!--<var title="">value<sub>1</sub></var> is greater than
-    59, or if--> <var title="">position</var> is not beyond the end of
-    <var title="">input</var> and the character at <var
-    title="">position</var> is not a U+003A COLON character (:), run
-    these substeps:</p>
+    <p>If <var title="">most significant units</var> is <i
+    title="">hours</i>, or if <var title="">position</var> is not
+    beyond the end of <var title="">input</var> and the character at
+    <var title="">position</var> is not a U+003A COLON character (:),
+    run these substeps:</p>
 
     <ol>
 
-     <li><p><!--If <var title="">position</var> is beyond the end of <var
+     <li><p>If <var title="">position</var> is beyond the end of <var
      title="">input</var> or if the character at <var
      title="">position</var> is not a U+003A COLON character (:), then
-     return an error and abort these steps. Otherwise, move--> Move <var
+     return an error and abort these steps. Otherwise, move <var
      title="">position</var> forwards one character.</p></li>
 
      <li><p>If the character indicated by <var title="">position</var>
@@ -32644,19 +32826,19 @@
      <li><p><span>Collect a sequence of characters</span> in the range
      U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9), and let <var
      title="">string</var> be the collected substring.</p></li>
-<!--
+
      <li><p>If <var title="">string</var> is not exactly two
      characters in length, return an error and abort these
      steps.</p></li>
--->
+
      <li><p>Interpret <var title="">string</var> as a base-ten
      integer. Let <var title="">value<sub>3</sub></var> be that
      integer.</p></li>
 
     </ol>
 
-    <p>Otherwise (if <!--<var title="">value<sub>1</sub></var> is less
-    than or equal to 59, and either--> <var title="">position</var> is
+    <p>Otherwise (if <var title="">most significant units</var> is not
+    <i title="">hours</i>, and either <var title="">position</var> is
     beyond the end of <var title="">input</var>, or the character at
     <var title="">position</var> is not a U+003A COLON character (:)),
     let <var title="">value<sub>3</sub></var> have the value of <var
@@ -32669,10 +32851,9 @@
 
    <li><p>If <var title="">position</var> is beyond the end of <var
    title="">input</var> or if the character at <var
-   title="">position</var> is not either a U+002C COMMA character (,)
-   or a U+002E FULL STOP character (.), then return an error and abort
-   these steps. Otherwise, move <var title="">position</var> forwards
-   one character.</p></li>
+   title="">position</var> is not a U+002E FULL STOP character (.),
+   then return an error and abort these steps. Otherwise, move <var
+   title="">position</var> forwards one character.</p></li>
 
    <li><p>If the character indicated by <var title="">position</var>
    is not one of U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9), then
@@ -32681,18 +32862,19 @@
    <li><p><span>Collect a sequence of characters</span> in the range
    U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9), and let <var
    title="">string</var> be the collected substring.</p></li>
-<!--
+
    <li><p>If <var title="">string</var> is not exactly three
    characters in length, return an error and abort these
    steps.</p></li>
--->
+
    <li><p>Interpret <var title="">string</var> as a base-ten
    integer. Let <var title="">value<sub>4</sub></var> be that
    integer.</p></li>
 
-<!--
-   (this is where checks of the ranges of the data would go, to make sure thousandsth < 1000, seconds < 60, minutes < 60)
--->
+   <li><p>If <var title="">value<sub>2</sub></var> is greater than 59,
+   if <var title="">value<sub>3</sub></var> is greater than 59, or if
+   <var title="">value<sub>4</sub></var> is greater than 999, return
+   an error and abort these steps.</p></li>
 
    <li><p>Let <var title="">result</var> be <span title=""><var
    title="">value<sub>1</sub></var>×60×60 + <var
@@ -32706,121 +32888,7 @@
 
   </ol>
 
-  <p>When the steps above say that a user agent is to <dfn>collect
-  WebSRT cue voice and text</dfn> from a string <var
-  title="">input</var> for a <span>timed track cue</span> <var
-  title="">cue</var>, the user agent must run the following steps:</p>
 
-  <ol>
-
-   <li><p>Let <var title="">input</var> be the string being
-   parsed.</p></li>
-
-   <li><p>Let <var title="">position</var> be a pointer into <var
-   title="">input</var>, initially pointing at the start of the
-   string.</p></li>
-
-   <li><p>If <var title="">position</var> is past the end of <var
-   title="">input</var>, return an error and abort these
-   steps.</p></li>
-
-   <li>
-
-    <p>Examine the first few characters of <var title="">input</var>
-    and process them as described by the match set of rules from the
-    following list:</p>
-
-    <dl class="switch">
-
-     <dt>If <var title="">input</var> starts with the string "<code
-     title=""><narrator></code>"</dt>
-     <dd>
-      <p>Let <var title="">cue</var>'s <span>timed track cue voice
-      identifier</span> be the string "<code title="timed track cue narrator voice">narrator</code>"
-      and advance <var title="">position</var> past the matching substring.</p>
-     </dd>
-
-     <dt>If <var title="">input</var> starts with the string "<code
-     title=""><music></code>"</dt>
-     <dd>
-      <p>Let <var title="">cue</var>'s <span>timed track cue voice
-      identifier</span> be the string "<code title="timed track cue music voice">music</code>"
-      and advance <var title="">position</var> past the matching substring.</p>
-     </dd>
-
-     <dt>If <var title="">input</var> starts with the string "<code
-     title=""><lyric></code>"</dt>
-     <dd>
-      <p>Let <var title="">cue</var>'s <span>timed track cue voice
-      identifier</span> be the string "<code title="timed track cue lyric voice">lyric</code>"
-      and advance <var title="">position</var> past the matching substring.</p>
-     </dd>
-
-     <dt>If <var title="">input</var> starts with the string "<code
-     title=""><sound></code>"</dt>
-     <dd>
-      <p>Let <var title="">cue</var>'s <span>timed track cue voice
-      identifier</span> be the string "<code title="timed track cue sound voice">sound</code>"
-      and advance <var title="">position</var> past the matching substring.</p>
-     </dd>
-
-     <dt>If <var title="">input</var> starts with the string "<code
-     title=""><comment></code>"</dt>
-     <dd>
-      <p>Let <var title="">cue</var>'s <span>timed track cue voice
-      identifier</span> be the string "<code title="timed track cue comment voice">comment</code>"
-      and advance <var title="">position</var> past the matching substring.</p>
-     </dd>
-
-     <dt>If <var title="">input</var> starts with the string "<code
-     title=""><credit></code>"</dt>
-     <dd>
-      <p>Let <var title="">cue</var>'s <span>timed track cue voice
-      identifier</span> be the string "<code title="timed track cue credit voice">credit</code>"
-      and advance <var title="">position</var> past the matching substring.</p>
-     </dd>
-
-
-     <dt>If <var title="">input</var> starts with a U+003C LESS-THAN
-     SIGN character (<), followed by a character in the range
-     U+0031 DIGIT ONE (1) to U+0039 DIGIT NINE (9), followed by zero
-     or more characters in the range U+0030 DIGIT ZERO (0) to U+0039
-     DIGIT NINE (9), followed by a U+003E GREATER-THAN SIGN character
-     (>)</dt>
-
-     <dd>
-      <p>Let <var title="">cue</var>'s <span>timed track cue voice
-      identifier</span> be the string of digits (characters in the
-      range U+0030 DIGIT ZERO to U+0039 DIGIT NINE) in the matching
-      substring, and advance <var title="">position</var> past the
-      matching substring.</p>
-     </dd>
-
-     <dt>Otherwise</dt>
-     <dd>
-      <p>Leave the <var title="">cue</var>'s <span>timed track cue voice
-      identifier</span> set to the empty string.</p>
-     </dd>
-
-    </dl>
-
-   </li>
-
-   <li><p>If <var title="">position</var> is past the end of <var
-   title="">input</var>, return an error and abort these
-   steps.</p></li>
-
-   <li><p>Let the <span>timed track cue text</span> of <var
-   title="">cue</var> be the substring of <var title="">input</var>
-   from the position indicated by <var title="">position</var> to the
-   end of the <var title="">input</var>, and let the rules for its
-   interpretation be the <span>WebSRT cue text parsing rules</span>,
-   the <span>WebSRT cue text rendering rules</span>, and the
-   <span>WebSRT cue text DOM construction rules</span>.</p></li>
-
-  </ol>
-
-
   <h6><dfn>WebSRT cue text parsing rules</dfn></h6>
 
   <p>A <dfn>WebSRT Node Object</dfn> is a conceptual construct used to
@@ -32841,10 +32909,14 @@
   list of child <span title="WebSRT Node Object">WebSRT Node
   Objects</span>. The <span>WebSRT Internal Node Object</span> is said
   to be the <i>parent</i> of the children. Cycles do not occur; the
-  parent-child relationships so constructed form a tree structure.</p>
+  parent-child relationships so constructed form a tree structure.
+  <span title="WebSRT Internal Node Object">WebSRT Internal Node
+  Objects</span> also have an ordered list of class names, know as
+  their <dfn title="WebSRT Node Object's applicable
+  classes">applicable classes</dfn>.</p>
 
-  <p>There are five concrete classes of <span title="WebSRT Internal
-  Node Object">WebSRT Internal Node Objects</span>:</p>
+  <p>There are several concrete classes of <span title="WebSRT
+  Internal Node Object">WebSRT Internal Node Objects</span>:</p>
 
   <dl>
 
@@ -32854,6 +32926,15 @@
     Node Object">WebSRT Node Objects</span>.</p>
    </dd>
 
+   <dt><dfn title="WebSRT Class Object">WebSRT Class Objects</dfn></dt>
+   <dd>
+    <p>These represent spans of text (a <span>WebSRT cue class
+    span</span>) in <span>WebSRT cue text</span>, and are used to
+    annotate parts of the cue with <span title="WebSRT Node Object's
+    applicable classes">applicable classes</span> without implying
+    further meaning (such as italics or bold).</p>
+   </dd>
+
    <dt><dfn title="WebSRT Italic Object">WebSRT Italic Objects</dfn></dt>
    <dd>
     <p>These represent spans of italic text (a <span>WebSRT cue
@@ -32874,13 +32955,18 @@
 
    <dt><dfn title="WebSRT Ruby Text Object">WebSRT Ruby Text Objects</dfn></dt>
    <dd>
-    <p>These represent spans of ruby text (the component of a
-    <span>WebSRT cue ruby span</span> that is between the "<code
-    title=""><rt></code>" and "<code
-    title=""></rt></code>" strings) in <span>WebSRT cue
-    text</span>.</p>
+    <p>These represent spans of ruby text (a <span>WebSRT cue ruby
+    text span</span>) in <span>WebSRT cue text</span>.</p>
    </dd>
 
+   <dt><dfn title="WebSRT Voice Object">WebSRT Voice Objects</dfn></dt>
+   <dd>
+    <p>These represent spans of text associated with a specific voice
+    (a <span>WebSRT cue voice span</span>) in <span>WebSRT cue
+    text</span>. A <span>WebSRT Voice Object</span> has a value, which
+    is the name of the voice.</p>
+   </dd>
+
   </dl>
 
   <p><dfn title="WebSRT Leaf Node Object">WebSRT Leaf Node
@@ -32971,73 +33057,60 @@
         <p>Ignore the token.</p>
        </dd>
 
+       <dt>If the tag name is "<code title="">c</code>"</dt>
+       <dd>
+        <p><span title="attach a WebSRT Internal Node
+        Object">Attach</span> a <span>WebSRT Class Object</span>.</p>
+       </dd>
+
        <dt>If the tag name is "<code title="">i</code>"</dt>
        <dd>
-        <p>Create a <span>WebSRT Italic Object</span>, and <span
-        title="attach a WebSRT Internal Node Object">attach
-        it</span>.</p>
+        <p><span title="attach a WebSRT Internal Node
+        Object">Attach</span> a <span>WebSRT Italic Object</span>.</p>
        </dd>
 
        <dt>If the tag name is "<code title="">b</code>"</dt>
        <dd>
-        <p>Create a <span>WebSRT Bold Object</span>, and <span
-        title="attach a WebSRT Internal Node Object">attach
-        it</span>.</p>
+        <p><span title="attach a WebSRT Internal Node
+        Object">Attach</span> a <span>WebSRT Bold Object</span>.</p>
        </dd>
 
        <dt>If the tag name is "<code title="">ruby</code>"</dt>
        <dd>
-        <p>Create a <span>WebSRT Ruby Object</span>, and <span
-        title="attach a WebSRT Internal Node Object">attach
-        it</span>.</p>
+        <p><span title="attach a WebSRT Internal Node
+        Object">Attach</span> a <span>WebSRT Ruby Object</span>.</p>
        </dd>
 
        <dt>If the tag name is "<code title="">rt</code>"</dt>
        <dd>
         <p>If <var title="">current</var> is a <span>WebSRT Ruby
-        Object</span>, then create a <span>WebSRT Ruby Text
-        Object</span>, and <span title="attach a WebSRT Internal Node
-        Object">attach it</span>.</p>
-        <p>Otherwise, ignore the token.</p>
+        Object</span>, then <span title="attach a WebSRT Internal Node
+        Object">attach</span> a <span>WebSRT Ruby Text
+        Object</span>.</p>
        </dd>
 
+       <dt>If the tag name is "<code title="">v</code>"</dt>
+       <dd>
+        <p><span title="attach a WebSRT Internal Node
+        Object">Attach</span> a <span>WebSRT Voice Object</span>, and
+        set its value to the token's annotation string.</p>
+       </dd>
+
        <dt>Otherwise</dt>
        <dd>
-
-        <ol>
-
-         <li><p>Let <var title="">input</var> be the tag name.</p></li>
-
-         <li><p>Let <var title="">position</var> be a pointer into
-         <var title="">input</var>, initially pointing at the start of
-         the string.</p></li>
-
-         <li><p><span>Collect a WebSRT timestamp</span>.</p></li>
-
-         <li>
-
-          <p>If that algorithm does not fail, and if <var
-          title="">position</var> now points at the end of <var
-          title="">input</var> (i.e. there are no trailing characters
-          after the timestamp), then create a <span>WebSRT Timestamp
-          Object</span> whose value is the collected time, then append
-          it to <var title="">current</var>.</p>
-
-          <p>Otherwise, ignore the token.</p>
-
-         </li>
-
-        </ol>
-
+        <p>Ignore the token.</p>
        </dd>
 
       </dl>
 
       <p>When the steps above say to <dfn>attach a WebSRT Internal
-      Node Object</dfn> <var title="">node object</var>, the user
-      agent must append <var title="">node object</var> to <var
-      title="">current</var>, then let <var title="">current</var> be
-      <var title="">node object</var>.</p>
+      Node Object</dfn> of a particular class, the user agent must
+      first create an object of the specified class, then set its list
+      of <span title="WebSRT Node Object's applicable
+      classes">applicable classes</span> to the list of classes in the
+      token, append the newly created node object to <var
+      title="">current</var>, and finally let <var
+      title="">current</var> be the newly created node object.</p>
 
      </dd>
 
@@ -33051,6 +33124,10 @@
       <ul class="brief">
 
        <li>The tag name of the end tag token <var title="">token</var>
+       is "<code title="">c</code>" and <var title="">current</var> is
+       a <span>WebSRT Class Object</span>.</li>
+
+       <li>The tag name of the end tag token <var title="">token</var>
        is "<code title="">i</code>" and <var title="">current</var> is
        a <span>WebSRT Italic Object</span>.</li>
 
@@ -33066,6 +33143,10 @@
        is "<code title="">rt</code>" and <var title="">current</var> is
        a <span>WebSRT Ruby Text Object</span>.</li>
 
+       <li>The tag name of the end tag token <var title="">token</var>
+       is "<code title="">v</code>" and <var title="">current</var> is
+       a <span>WebSRT Voice Object</span>.</li>
+
       </ul>
 
       <p>Otherwise, if the tag name of the end tag token <var
@@ -33079,6 +33160,36 @@
 
      </dd>
 
+     <dt>If <var title="">token</var> is a timestamp tag</dt>
+     <dd>
+
+      <ol>
+
+       <li><p>Let <var title="">input</var> be the tag value.</p></li>
+
+       <li><p>Let <var title="">position</var> be a pointer into
+       <var title="">input</var>, initially pointing at the start of
+       the string.</p></li>
+
+       <li><p><span>Collect a WebSRT timestamp</span>.</p></li>
+
+       <li>
+
+        <p>If that algorithm does not fail, and if <var
+        title="">position</var> now points at the end of <var
+        title="">input</var> (i.e. there are no trailing characters
+        after the timestamp), then create a <span>WebSRT Timestamp
+        Object</span> whose value is the collected time, then append
+        it to <var title="">current</var>.</p>
+
+        <p>Otherwise, ignore the token.</p>
+
+       </li>
+
+      </ol>
+
+     </dd>
+
     </dl>
 
    </li>
@@ -33089,8 +33200,9 @@
 
   <p>The <dfn>WebSRT cue text tokeniser</dfn> is as follows. It emits
   a token, which is either a string (whose value is a sequence of
-  Unicode characters), a start tag (with a tag name), or an end tag
-  (with a tag name).</p>
+  Unicode characters), a start tag (with a tag name, a list of
+  classes, and optionally an annotation), an end tag (with a tag
+  name), or a timestamp tag (with a tag value).</p>
 
   <ol>
 
@@ -33103,8 +33215,10 @@
 
    <li><p>Let <var title="">result</var> be the empty string.</p></li>
 
-   <li><p>Let <var title="">escape</var> be the empty string.</p></li>
+   <li><p>Let <var title="">buffer</var> be the empty string.</p></li>
 
+   <li><p>Let <var title="">classes</var> be an empty list.</p></li>
+
    <li><p><i>Loop</i>: If <var title="">position</var> is past the end of
    <var title="">input</var>, let <var title="">c</var> be an
    end-of-file marker. Otherwise, let <var title="">c</var> be the
@@ -33129,7 +33243,7 @@
 
        <dt>U+0026 AMPERSAND (&)</dt>
        <dd>
-        <p>Set <var title="">escape</var> to <var title="">c</var>,
+        <p>Set <var title="">buffer</var> to <var title="">c</var>,
         set <var title="">tokeniser state</var> to the <span>WebSRT
         escape state</span>, and jump to the step labeled
         <i>next</i>.</p>
@@ -33172,17 +33286,21 @@
        <dt>U+003B SEMICOLON character (;)</dt>
        <dd>
 
-        <p>First, examine the value of <var title="">escape</var>:</p>
+        <p>First, examine the value of <var title="">buffer</var>:</p>
 
-        <p>If <var title="">escape</var> is the string "<code
+        <p>If <var title="">buffer</var> is the string "<code
         title="">&amp</code>", then append a U+0026 AMPERSAND
         character (&) to <var title="">result</var>.</p>
 
-        <p>If <var title="">escape</var> is the string "<code
+        <p>If <var title="">buffer</var> is the string "<code
         title="">&lt</code>", then append a U+003C LESS-THAN SIGN
         character (<) to <var title="">result</var>.</p>
 
-        <p>Otherwise, append <var title="">escape</var> followed by a
+        <p>If <var title="">buffer</var> is the string "<code
+        title="">&gt</code>", then append a U+003E GREATER-THAN SIGN
+        character (>) to <var title="">result</var>.</p>
+
+        <p>Otherwise, append <var title="">buffer</var> followed by a
         U+003B SEMICOLON character (;) to <var
         title="">result</var>.</p>
 
@@ -33192,24 +33310,24 @@
 
        </dd>
 
+       <dt>Characters in the range U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9)</dt>
+       <dt>Characters in the range U+0041 LATIN CAPITAL LETTER A to U+005A LATIN CAPITAL LETTER Z</dt>
        <dt>Characters in the range U+0061 LATIN SMALL LETTER A to U+007A LATIN SMALL LETTER Z</dt>
-       <dt>Characters in the range U+0041 LATIN CAPITAL LETTER A to U+005A LATIN CAPITAL LETTER Z</dt>
-       <dt>Characters in the range U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9)</dt>
        <dd>
-        <p>Append <var title="">c</var> to <var title="">escape</var>
+        <p>Append <var title="">c</var> to <var title="">buffer</var>
         and jump to the step labeled <i>next</i>.</p>
        </dd>
 
        <dt>End-of-file marker</dt>
        <dd>
-        <p>Append <var title="">escape</var> to <var
+        <p>Append <var title="">buffer</var> to <var
         title="">result</var>, return a string token whose value is
         <var title="">result</var>, and abort these steps.</p>
        </dd>
 
        <dt>Anything else</dt>
        <dd>
-        <p>Append <var title="">escape</var> to <var
+        <p>Append <var title="">buffer</var> to <var
         title="">result</var>, set <var title="">tokeniser state</var>
         to the <span>WebSRT data state</span>, and jump to the step
         labeled <i>next</i>.</p>
@@ -33228,6 +33346,23 @@
 
       <dl>
 
+       <dt>U+0020 SPACE character</dt>
+       <dt>U+0009 CHARACTER TABULATION (tab) character</dt>
+       <dd>
+        <!-- assert: >result< is the empty string -->
+        <p>Set <var title="">tokeniser state</var> to the <span>WebSRT
+        start tag annotation state</span>, and jump to the step labeled
+        <i>next</i>.</p>
+       </dd> 
+
+       <dt>U+002E FULL STOP character (.)</dt>
+       <dd>
+        <!-- assert: >result< is the empty string -->
+        <p>Set <var title="">tokeniser state</var> to the <span>WebSRT
+        start tag class state</span>, and jump to the step labeled
+        <i>next</i>.</p>
+       </dd> 
+
        <dt>U+002F SOLIDUS character (/)</dt>
        <dd>
         <p>Set <var title="">tokeniser state</var> to the <span>WebSRT
@@ -33235,11 +33370,19 @@
         <i>next</i>.</p>
        </dd>
 
+       <dt>Characters in the range U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9)</dt>
+       <dd>
+        <p>Set <var title="">result</var> to <var title="">c</var>,
+        set <var title="">tokeniser state</var> to the <span>WebSRT
+        timestamp tag state</span>, and jump to the step labeled
+        <i>next</i>.</p>
+       </dd> 
+
        <dt>U+003E GREATER-THAN SIGN character (>)</dt>
        <dt>End-of-file marker</dt>
        <dd>
-        <p>Return a start tag whose tag name is the empty string and
-        abort these steps.</p>
+        <p>Return a start tag whose tag name is the empty string, with
+        no classes and no annotation, and abort these steps.</p>
        </dd>
 
        <dt>Anything else</dt>
@@ -33263,11 +33406,27 @@
 
       <dl>
 
+       <dt>U+0020 SPACE character</dt>
+       <dt>U+0009 CHARACTER TABULATION (tab) character</dt>
+       <dd>
+        <p>Set <var title="">tokeniser state</var> to the <span>WebSRT
+        start tag annotation state</span>, and jump to the step labeled
+        <i>next</i>.</p>
+       </dd> 
+
+       <dt>U+002E FULL STOP character (.)</dt>
+       <dd>
+        <p>Set <var title="">tokeniser state</var> to the <span>WebSRT
+        start tag class state</span>, and jump to the step labeled
+        <i>next</i>.</p>
+       </dd> 
+
        <dt>U+003E GREATER-THAN SIGN character (>)</dt>
        <dt>End-of-file marker</dt>
        <dd>
         <p>Return a start tag whose tag name is <var
-        title="">result</var> and abort these steps.</p>
+        title="">result</var>, with no classes and no annotation, and
+        abort these steps.</p>
        </dd>
 
        <dt>Anything else</dt>
@@ -33280,6 +33439,86 @@
 
      </dd>
 
+     <dt><dfn>WebSRT start tag class state</dfn></dt>
+
+     <dd>
+
+      <p>Jump to the entry that matches the value of <var
+      title="">c</var>:</p>
+
+      <dl>
+
+       <dt>U+0020 SPACE character</dt>
+       <dt>U+0009 CHARACTER TABULATION (tab) character</dt>
+       <dd>
+        <p>Append to <var title="">classes</var> an entry whose value
+        is <var title="">buffer</var>, set <var title="">buffer</var>
+        to the empty string, set <var title="">tokeniser state</var>
+        to the <span>WebSRT start tag annotation state</span>, and
+        jump to the step labeled <i>next</i>.</p>
+       </dd> 
+
+       <dt>U+002E FULL STOP character (.)</dt>
+       <dd>
+        <p>Append to <var title="">classes</var> an entry whose value
+        is <var title="">buffer</var>, set <var title="">buffer</var>
+        to the empty string, and jump to the step labeled
+        <i>next</i>.</p>
+       </dd> 
+
+       <dt>U+003E GREATER-THAN SIGN character (>)</dt>
+       <dt>End-of-file marker</dt>
+       <dd>
+        <p>Append to <var title="">classes</var> an entry whose value
+        is <var title="">buffer</var>, then return a start tag whose
+        tag name is <var title="">result</var>, with the classes given
+        in <var title="">classes</var> but no annotation, and abort
+        these steps.</p>
+       </dd>
+
+       <dt>Anything else</dt>
+       <dd>
+        <p>Append <var title="">c</var> to <var title="">buffer</var>
+        and jump to the step labeled <i>next</i>.</p>
+       </dd> 
+
+      </dl>
+
+     </dd>
+
+     <dt><dfn>WebSRT start tag annotation state</dfn></dt>
+
+     <dd>
+
+      <p>Jump to the entry that matches the value of <var
+      title="">c</var>:</p>
+
+      <dl>
+
+       <dt>U+003E GREATER-THAN SIGN character (>)</dt>
+       <dt>End-of-file marker</dt>
+       <dd>
+        <p>Remove any leading or trailing U+0020 SPACE or U+0009
+        CHARACTER TABULATION (tab) characters from <var
+        title="">buffer</var>, and replace any sequence of one or
+        more consecutive U+0020 SPACE and U+0009 CHARACTER TABULATION
+        (tab) characters in <var title="">buffer</var> with a single
+        U+0020 SPACE character; then, return a start tag whose tag name is
+        <var title="">result</var>, with the classes given in <var
+        title="">classes</var>, and with <var title="">buffer</var> as
+        the annotation, and abort these steps.</p>
+       </dd>
+
+       <dt>Anything else</dt>
+       <dd>
+        <p>Append <var title="">c</var> to <var title="">buffer</var>
+        and jump to the step labeled <i>next</i>.</p>
+       </dd> 
+
+      </dl>
+
+     </dd>
+
      <dt><dfn>WebSRT end tag state</dfn></dt>
 
      <dd>
@@ -33306,6 +33545,32 @@
 
      </dd>
 
+     <dt><dfn>WebSRT timestamp tag state</dfn></dt>
+
+     <dd>
+
+      <p>Jump to the entry that matches the value of <var
+      title="">c</var>:</p>
+
+      <dl>
+
+       <dt>U+003E GREATER-THAN SIGN character (>)</dt>
+       <dt>End-of-file marker</dt>
+       <dd>
+        <p>Return a timestamp tag whose tag name is <var
+        title="">result</var> and abort these steps.</p>
+       </dd>
+
+       <dt>Anything else</dt>
+       <dd>
+        <p>Append <var title="">c</var> to <var title="">result</var>
+        and jump to the step labeled <i>next</i>.</p>
+       </dd>
+
+      </dl>
+
+     </dd>
+
     </dl>
 
    </li>
@@ -33337,18 +33602,24 @@
      <td><span>List of WebSRT Node Objects</span>
      <td><code>DocumentFragment</code> node
     <tr>
+     <td><span>WebSRT Class Object</span>
+     <td><code>HTMLElement</code> element node with <code title="dom-Node-localName">localName</code> "<code>span</code>".
+    <tr>
      <td><span>WebSRT Italic Object</span>
-     <td><code>HTMLElement</code> element node with <code title="dom-Node-localName">localName</code> "<code>i</code>" and the <code title="dom-Node-namespaceURI">namespaceURI</code> set to the <span>HTML namespace</span>.
+     <td><code>HTMLElement</code> element node with <code title="dom-Node-localName">localName</code> "<code>i</code>".
     <tr>
      <td><span>WebSRT Bold Object</span>
-     <td><code>HTMLElement</code> element node with <code title="dom-Node-localName">localName</code> "<code>b</code>" and the <code title="dom-Node-namespaceURI">namespaceURI</code> set to the <span>HTML namespace</span>.
+     <td><code>HTMLElement</code> element node with <code title="dom-Node-localName">localName</code> "<code>b</code>".
     <tr>
      <td><span>WebSRT Ruby Object</span>
-     <td><code>HTMLElement</code> element node with <code title="dom-Node-localName">localName</code> "<code>ruby</code>" and the <code title="dom-Node-namespaceURI">namespaceURI</code> set to the <span>HTML namespace</span>.
+     <td><code>HTMLElement</code> element node with <code title="dom-Node-localName">localName</code> "<code>ruby</code>".
     <tr>
      <td><span>WebSRT Ruby Text Object</span>
-     <td><code>HTMLElement</code> element node with <code title="dom-Node-localName">localName</code> "<code>rt</code>" and the <code title="dom-Node-namespaceURI">namespaceURI</code> set to the <span>HTML namespace</span>.
+     <td><code>HTMLElement</code> element node with <code title="dom-Node-localName">localName</code> "<code>rt</code>".
     <tr>
+     <td><span>WebSRT Voice Object</span>
+     <td><code>HTMLElement</code> element node with <code title="dom-Node-localName">localName</code> "<code>q</code>", a <code title="attr-title">title</code> attribute set to the <span>WebSRT Voice Object</span>'s value.
+    <tr>
      <td><span>WebSRT Text Object</span>
      <td><code>Text</code> node whose character data is the value of the <span>WebSRT Text Object</span>.
     <tr>
@@ -33356,6 +33627,15 @@
      <td><code>ProcessingInstruction</code> node whose <code title="dom-ProcessingInstruction-target">target</code> is "<code title="">timestamp</code>" and whose <code title="dom-ProcessingInstruction-data">data</code> is a <span>WebSRT timestamp</span> representing the value of the <span>WebSRT Timestamp Object</span>, with all optional components included and with the seconds separator being a U+002E FULL STOP character (.).
   </table>
 
+  <p><code>HTMLElement</code> nodes created as part of the mapping
+  described above must have their <code
+  title="dom-Node-namespaceURI">namespaceURI</code> set to the
+  <span>HTML namespace</span>, and must have a <code
+  title="attr-class">class</code> attribute set to the string obtained
+  by concatenating all the classes that apply to the corresponding
+  <span>WebSRT Internal Node Object</span>, each separated from the
+  next by a single U+0020 SPACE character.</p>
+
   <p>The <code title="dom-Node-ownerDocument">ownerDocument</code>
   attribute of all nodes in the DOM tree must be set to the given
   document <var title="">owner</var>.</p>
@@ -33413,8 +33693,9 @@
   <p>For the purposes of listing chapters in the <span>media
   resource</span>, only <span title="timed track">timed tracks</span>
   in the <span>media element</span>'s <span>list of timed
-  tracks</span> <span title="timed track showing">showing</span> and
-  whose <span>timed track kind</span> is <code
+  tracks</span> <span title="timed track showing">showing</span> or
+  <span title="timed track showing by default">showing by
+  default</span> and whose <span>timed track kind</span> is <code
   title="dom-timedtrack-kind-chapters">chapters</code> should be used.
   Each <span title="timed track cue">cue</span> in such a <span>timed
   track</span> represents a chapter starting at the cue's <span
@@ -97516,7 +97797,8 @@
   for updating the timed track rendering</span> of each of the <span
   title="timed track">timed tracks</span> in the <code>video</code>
   element's <span>list of timed tracks</span> that are <span
-  title="timed track showing">showing</span> (e.g., for <span
+  title="timed track showing">showing</span> or <span title="timed
+  track showing by default">showing by default</span> (e.g., for <span
   title="timed track">timed tracks</span> based on
   <span>WebSRT</span>, the <span>rules for updating the display of
   WebSRT timed tracks</span>).</p>
@@ -97588,12 +97870,13 @@
    let <var title="">reset</var> be true. Otherwise, let <var
    title="">reset</var> be false.</p>
 
-   <li><p>Let <var title="">tracks</var> be the subset of
-   <var title="">video</var>'s <span>list of timed tracks</span> that
-   have as their <span>rules for updating the timed track
-   rendering</span> these <span>rules for updating the display of
-   WebSRT timed tracks</span>, and whose <span>timed track mode</span>
-   is <span title="timed track showing">showing</span>.</p></li>
+   <li><p>Let <var title="">tracks</var> be the subset of <var
+   title="">video</var>'s <span>list of timed tracks</span> that have
+   as their <span>rules for updating the timed track rendering</span>
+   these <span>rules for updating the display of WebSRT timed
+   tracks</span>, and whose <span>timed track mode</span> is <span
+   title="timed track showing">showing</span> or <span title="timed
+   track showing by default">showing by default</span>.</p></li>
 
    <li><p>Let <var title="">cues</var> be an empty list of <span
    title="timed track cue">timed track cues</span>.</p></li>
@@ -97752,11 +98035,13 @@
      <li><p>If the <span>timed track cue writing direction</span> is
      <span title="timed track cue horizontal writing
      direction">horizontal</span>, then let <var title="">width</var>
-     be '<var title="">size</var>vw' and <var title="">height</var> be
-     'auto'. Otherwise, let <var title="">width</var> be 'auto' and
-     <var title="">height</var> be '<var
-     title="">size</var>vh'. (These are CSS values used by the next
-     section to set CSS properties for the rendering.)</p></li>
+     be '<var title="">size</var>&#x2009;vw' and <var
+     title="">height</var> be 'auto'. Otherwise, let <var
+     title="">width</var> be 'auto' and <var title="">height</var> be
+     '<var title="">size</var>&#x2009;vh'. (These are CSS values used
+     by the next section to set CSS properties for the rendering; 'vw'
+     and 'vh' are CSS units.) <a
+     href="#refsCSSVALUES">[CSSVALUES]</a></p></li>
 
      <li>
 
@@ -97871,10 +98156,11 @@
      </li>
 
      <li><p>Let <var title="">left</var> be '<var
-     title="">x-position</var>vw' and <var title="">top</var> be '<var
-     title="">y-position</var>vh'. (These again are CSS values used by
-     the next section to set CSS properties for the
-     rendering.)</p></li>
+     title="">x-position</var>&#x2009;vw' and <var title="">top</var>
+     be '<var title="">y-position</var>&#x2009;vh'. (These again are
+     CSS values used by the next section to set CSS properties for the
+     rendering; 'vw' and 'vh' are CSS units.) <a
+     href="#refsCSSVALUES">[CSSVALUES]</a></p></li>
 
      <li>
 
@@ -97885,22 +98171,23 @@
 
       <ul>
 
-       <li>The <i>document tree</i> is the tree of <span title="WebSRT
-       Node Object">WebSRT Node Objects</span> rooted at <var
-       title="">nodes</var>.</li>
+       <li><p>The <i>document tree</i> is the tree of <span
+       title="WebSRT Node Object">WebSRT Node Objects</span> rooted at
+       <var title="">nodes</var>.</p></li>
 
-       <li>For the purposes of processing by the CSS specification,
+       <li><p>For the purposes of processing by the CSS specification,
        <span title="WebSRT Internal Node Object">WebSRT Internal Node
        Objects</span> are equivalent to elements with the same
-       contents. The name of these elements is not explicitly
-       specified. These elements have no attributes.</li>
+       contents.</p></li>
 
        <li>For the purposes of processing by the CSS
        specification, <span title="WebSRT Text Object">WebSRT Text
        Objects</span> are equivalent to text nodes.</li>
 
        <li>No style sheets are associated with <var
-       title="">nodes</var>.</li>
+       title="">nodes</var>. (The nodes are subsequently restyled
+       using style sheets after their boxes are generated, as
+       described below.)</li>
 
        <li>The children of the <var title="">nodes</var> must be
        wrapped in an anonymous box whose 'display' property has the
@@ -98297,7 +98584,7 @@
   text rendering rules</span>, <span title="WebSRT Node Object">WebSRT
   Node Objects</span> in the <span>list of WebSRT Node Objects</span>
   used in the rendering can be matched by certain pseudo-selectors as
-  defined below. These selector can begin or stop matching individual
+  defined below. These selectors can begin or stop matching individual
   <span title="WebSRT Node Object">WebSRT Node Objects</span> while a
   <span title="timed track cue">cue</span> is being rendered, even in
   between applications of the <span>WebSRT cue text rendering
@@ -98316,23 +98603,25 @@
   <code>video</code> element, the pseudo-elements defined below won't
   have any effect according to this specification.</p>
 
+  <p>A CSS user agent that implements the <span title="timed
+  track">timed tracks</span> model must implement the '::cue' and
+  '::cue(<var title="">selector</var>)' pseudo-elements, and the
+  ':past' and ':future' pseudo-classes.</p>
 
+
   <h6>The '::cue' pseudo-element</h6>
 
-  <p>A CSS user agent that implemented the <span title="timed
-  track">timed tracks</span> model must implement the '::cue'
-  pseudo-element.</p>
+  <p>The '<dfn title="pseudo-cue">::cue</dfn>' pseudo-element (with no
+  argument) matches any <span>List of WebSRT Node Objects</span>
+  constructed for the <i>matched element</i>, with the exception that
+  the properties corresponding to the 'background' shorthand must be
+  applied to the <span>WebSRT cue background box</span> rather than
+  the <span>List of WebSRT Node Objects</span>.</p>
 
-  <p>The '<dfn title="pseudo-cue">::cue</dfn>' pseudo-element matches
-  any <span>List of WebSRT Node Objects</span> constructed for the
-  <i>matched element</i>, with the exception that the properties
-  corresponding to the 'background' shorthand must be applied to the
-  <span>WebSRT cue background box</span> rather than the <span>List of
-  WebSRT Node Objects</span>.</p>
+  <p>The following properties apply to the '::cue' pseudo-element with
+  no argument; other properties set on the pseudo-element must be
+  ignored:</p>
 
-  <p>The following properties apply to the '::cue' pseudo-element;
-  other properties set on the pseudo-element must be ignored:</p>
-
   <ul class="brief">
    <li>'color'</li>
    <li>'text-shadow'</li>
@@ -98350,175 +98639,99 @@
    -->
   </ul>
 
+  <p>The '<dfn title="pseudo-cue-selector">::cue(<var
+  title="">selector</var>)</dfn>' pseudo-element with an argument must
+  have an argument that consists of a group of selectors. It matches
+  any <span>WebSRT Internal Node Object</span> constructed for the
+  <i>matched element</i> that also matches the given group of
+  selectors, with the nodes being treated as follows:</p>
 
-  <h6>The '::cue-part' pseudo-element</h6>
+  <ul>
 
-  <p>A CSS user agent that implemented the <span title="timed
-  track">timed tracks</span> model must implement the '::cue-part(<var
-  title="">filter</var>)' pseudo-element.</p>
+   <li><p>The <i>document tree</i> against which the selectors are
+   matched is the tree of <span title="WebSRT Node Object">WebSRT Node
+   Objects</span> rooted at the <span>list of WebSRT Node
+   Objects</span> for the cue.</p></li>
 
-  <p>The '<dfn title="pseudo-cue-part">::cue-part(<var
-  title="">argument</var>)</dfn>' pseudo-element matches any
-  <span>WebSRT Node Object</span> constructed for the <i>matched
-  element</i> that matches the given <var title="">argument</var>.</p>
+   <li><p><span title="WebSRT Internal Node Object">WebSRT Internal
+   Node Objects</span> are elements in the tree.</p></li>
 
-  <p>The <var title="">argument</var> must match the syntax
-  "<voice> || <part> || <position> || <future-compatibility>". <a
-  href="#refsCSS">[CSS]</a></p>
-  
-  <p>The "<voice>" component must be either a non-negative
-  <integer> or one of the keywords "<code
-  title="pseudo-cue-part-narrator">narrator</code>", "<code
-  title="pseudo-cue-part-music">music</code>", "<code
-  title="pseudo-cue-part-lyric">lyric</code>", "<code
-  title="pseudo-cue-part-sound">sound</code>", "<code
-  title="pseudo-cue-part-comment">comment</code>", or "<code
-  title="pseudo-cue-part-credit">credit</code>".</p>
+   <li><span title="WebSRT Leaf Node Object">WebSRT Leaf Node
+   Objects</span> cannot be matched.</li>
 
-  <p>The "<part>" component must be one of the keywords "<code
-  title="pseudo-cue-part-i">i</code>", "<code
-  title="pseudo-cue-part-b">b</code>", "<code
-  title="pseudo-cue-part-ruby">ruby</code>", or "<code
-  title="pseudo-cue-part-rt">rt</code>".</p>
+   <li>
 
-  <p>The "<position>" component must be one of the keywords "<code
-  title="pseudo-cue-part-past">past</code>" or "<code
-  title="pseudo-cue-part-future">future</code>".</p>
+    <p>For the purposes of element type selectors, the names of <span
+    title="WebSRT Internal Node Object">WebSRT Internal Node
+    Objects</span> are as given by the following table, where objects
+    having the concrete class given in a cell in the first column have
+    the name given by the second column of the same row:</p>
 
-  <p>The "<future-compatibility>" component can be any
-  identifier.</p>
+    <table>
 
-  <p>Each component of <var title="">argument</var> restricts which
-  <span title="WebSRT Node Object">WebSRT Node Objects</span> are
-  matched by the pseudo-element, as follows:</p>
+     <thead>
+      <tr>
+       <th>Concrete class
+       <th>Name
 
-  <dl>
+     <tbody>
+      <tr>
+       <td><span title="WebSRT Class Object">WebSRT Class Objects</span>
+       <td><code title="">c</code>
 
-   <dt>An integer greater than or equal to zero</dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <span
-    title="WebSRT Node Object">WebSRT Node Objects</span> from <span
-    title="timed track cue">timed track cues</span> whose <span>timed
-    track cue voice identifier</span> is the given number expressed in
-    base ten with digits in the range U+0030 DIGIT ZERO (0) to U+0039
-    DIGIT NINE (9).</p>
-   </dd>
+      <tr>
+       <td><span title="WebSRT Italic Object">WebSRT Italic Objects</span>
+       <td><code title="">i</code>
 
-   <dt><dfn title="pseudo-cue-part-narrator"><code>narrator</code></dfn></dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <span
-    title="WebSRT Node Object">WebSRT Node Objects</span> from <span
-    title="timed track cue">timed track cues</span> whose <span>timed
-    track cue voice identifier</span> is "<code title="timed track cue
-    narrator voice">narrator</code>".</p>
-   </dd>
+      <tr>
+       <td><span title="WebSRT Bold Object">WebSRT Bold Objects</span>
+       <td><code title="">b</code>
 
-   <dt><dfn title="pseudo-cue-part-music"><code>music</code></dfn></dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <span
-    title="WebSRT Node Object">WebSRT Node Objects</span> from <span
-    title="timed track cue">timed track cues</span> whose <span>timed
-    track cue voice identifier</span> is "<code title="timed track cue
-    music voice">music</code>".</p>
-   </dd>
+      <tr>
+       <td><span title="WebSRT Ruby Object">WebSRT Ruby Objects</span>
+       <td><code title="">ruby</code>
 
-   <dt><dfn title="pseudo-cue-part-lyric"><code>lyric</code></dfn></dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <span
-    title="WebSRT Node Object">WebSRT Node Objects</span> from <span
-    title="timed track cue">timed track cues</span> whose <span>timed
-    track cue voice identifier</span> is "<code title="timed track cue
-    lyric voice">lyric</code>".</p>
-   </dd>
+      <tr>
+       <td><span title="WebSRT Ruby Text Object">WebSRT Ruby Text Objects</span>
+       <td><code title="">rt</code>
 
-   <dt><dfn title="pseudo-cue-part-sound"><code>sound</code></dfn></dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <span
-    title="WebSRT Node Object">WebSRT Node Objects</span> from <span
-    title="timed track cue">timed track cues</span> whose <span>timed
-    track cue voice identifier</span> is "<code title="timed track cue
-    sound voice">sound</code>".</p>
-   </dd>
+      <tr>
+       <td><span title="WebSRT Voice Object">WebSRT Voice Objects</span>
+       <td><code title="">v</code>
 
-   <dt><dfn title="pseudo-cue-part-comment"><code>comment</code></dfn></dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <span
-    title="WebSRT Node Object">WebSRT Node Objects</span> from <span
-    title="timed track cue">timed track cues</span> whose <span>timed
-    track cue voice identifier</span> is "<code title="timed track cue
-    comment voice">comment</code>".</p>
-   </dd>
+      <tr>
+       <td>Other elements (specifically, <span title="List of WebSRT Node Objects">Lists of WebSRT Node Objects</span>)
+       <td>No explicit name.
 
-   <dt><dfn title="pseudo-cue-part-credit"><code>credit</code></dfn></dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <span
-    title="WebSRT Node Object">WebSRT Node Objects</span> from <span
-    title="timed track cue">timed track cues</span> whose <span>timed
-    track cue voice identifier</span> is "<code title="timed track cue
-    credit voice">credit</code>".</p>
-   </dd>
+    </table>
 
-   <dt><dfn title="pseudo-cue-part-i"><code>i</code></dfn></dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <span title="WebSRT Italic Object">WebSRT Italic Objects</span>.</p>
-   </dd>
+   </li>
 
-   <dt><dfn title="pseudo-cue-part-b"><code>b</code></dfn></dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <span title="WebSRT Bold Object">WebSRT Bold Objects</span>.</p>
-   </dd>
+   <li><p>For the purposes of element type and universal selectors,
+   <span title="WebSRT Internal Node Object">WebSRT Internal Node
+   Objects</span> are considered as being in the namespace expressed
+   as the empty string.</p></li>
 
-   <dt><dfn title="pseudo-cue-part-ruby"><code>ruby</code></dfn></dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <span title="WebSRT Ruby Object">WebSRT Ruby Objects</span>.</p>
-   </dd>
+   <li><p>For the purposes of attribute selector matching, <span
+   title="WebSRT Internal Node Object">WebSRT Internal Node
+   Objects</span> have no attributes, except for <span
+   title="WebSRT Voice Object">WebSRT Voice Objects</span>, which
+   have a single attribute named "<code title="">voice</code>"
+   whose value is the value of the <span>WebSRT Voice
+   Object</span>.</p></li>
 
-   <dt><dfn title="pseudo-cue-part-rt"><code>rt</code></dfn></dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <span title="WebSRT Ruby Text Object">WebSRT Ruby Text Objects</span>.</p>
-   </dd>
+   <li><p>For the purposes of class selector matching, <span
+   title="WebSRT Internal Node Object">WebSRT Internal Node
+   Objects</span> have the classes described as the <span>WebSRT
+   Node Object's applicable classes</span>.</p></li> <!-- ok, this
+   isn't especially well-defined, but the Selectors spec doesn't
+   really give one much to go on here. -->
 
-   <dt><dfn title="pseudo-cue-part-past"><code>past</code></dfn></dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <span title="WebSRT Node Object">WebSRT Node Objects</span> that are <i>in the past</i>.</p>
-   </dd>
+  </ul>
 
-   <dt><dfn title="pseudo-cue-part-future"><code>future</code></dfn></dt>
-   <dd>
-    <p>Restricts the pseudo-element to only matching <span title="WebSRT Node Object">WebSRT Node Objects</span> that are <i>in the future</i>.</p>
-   </dd>
+  <p>The following properties apply to the '::cue()' pseudo-element
+  with an argument:</p>
 
-   <dt>Any other identifier</dt>
-   <dd>
-    <p>Restricts the pseudo-element to not matching any <span title="WebSRT Node Object">WebSRT Node Objects</span>.</p>
-    <p class="note">This is intended to allow for future extensions
-    while still allowing Selectors to include a mixture of old and new
-    '::cue-part()' pseudo-elements.</p>
-   </dd>
-
-  </dl>
-
-  <p>A <span>WebSRT Node Object</span> <var title="">c</var> is
-  <dfn>in the past</dfn> if, in a pre-order, depth-first traversal of
-  the <span>timed track cue</span>'s <span>List of WebSRT Node
-  Objects</span>, there exists a <span>WebSRT Timestamp Object</span>
-  whose value is less than the <span>current playback position</span>
-  of the <span>media element</span> that is the <i>matched
-  element</i>, entirely after the <span>WebSRT Node Object</span> <var
-  title="">c</var>.</p>
-
-  <p>A <span>WebSRT Node Object</span> <var title="">c</var> is
-  <dfn>in the future</dfn> if, in a pre-order, depth-first traversal
-  of the <span>timed track cue</span>'s <span>List of WebSRT Node
-  Objects</span>, there exists a <span>WebSRT Timestamp Object</span>
-  whose value is greater than the <span>current playback
-  position</span> of the <span>media element</span> that is the
-  <i>matched element</i>, entirely before the <span>WebSRT Node
-  Object</span> <var title="">c</var>.</p>
-
-  <p>The following properties apply to the '::cue-part(<var
-  title="">filter</var>)' pseudo-element:</p>
-
   <ul class="brief">
    <li>'color'</li>
    <li>'text-shadow'</li>
@@ -98538,11 +98751,9 @@
    of the segment when the next segment becomes "past".
   -->
 
-  <p>The following properties apply to the '::cue-part(<var
-  title="">filter</var>)' pseudo-element if the neither of the <code
-  title="pseudo-cue-part-past">past</code> or <code
-  title="pseudo-cue-part-future">future</code> keywords are
-  present:</p>
+  <p>The following properties apply to the '::cue()' pseudo-element
+  with an argument when the selector does not contain the ':past' and
+  ':future' pseudo-classes:</p>
 
   <ul class="brief">
    <li>the properties corresponding to the 'font' shorthand, including 'line-height'</li>
@@ -98556,19 +98767,53 @@
    -->
   </ul>
 
-  <p>Other properties must be ignored.</p>
+  <p>Properties that do not apply must be ignored.</p>
 
   <p>As a special exception, the properties corresponding to the
   'background' shorthand, when they would have been applied to the
   <span>List of WebSRT Node Objects</span>, must instead be applied to
   the <span>WebSRT cue background box</span>.</p>
 
+
+  <h6>The ':past' and ':future' pseudo-classes</h6>
+
+  <p>The <dfn title="past-pseudo-class">':past'</dfn> and <dfn
+  title="future-pseudo-class">':future'</dfn> pseudo-classes only
+  match <span title="WebSRT Node Object">WebSRT Node Objects</span>.</p>
+
+  <p>The ':past' pseudo-class only matches <span title="WebSRT Node
+  Object">WebSRT Node Objects</span> that are <i>in the past</i>.</p>
+
+  <p>A <span>WebSRT Node Object</span> <var title="">c</var> is
+  <dfn>in the past</dfn> if, in a pre-order, depth-first traversal of
+  the <span>timed track cue</span>'s <span>List of WebSRT Node
+  Objects</span>, there exists a <span>WebSRT Timestamp Object</span>
+  whose value is less than the <span>current playback position</span>
+  of the <span>media element</span> that is the <i>matched
+  element</i>, entirely after the <span>WebSRT Node Object</span> <var
+  title="">c</var>.</p>
+
+  <p>The ':future' pseudo-class only matches <span title="WebSRT Node
+  Object">WebSRT Node Objects</span> that are <i>in the future</i>.</p>
+
+  <p>A <span>WebSRT Node Object</span> <var title="">c</var> is
+  <dfn>in the future</dfn> if, in a pre-order, depth-first traversal
+  of the <span>timed track cue</span>'s <span>List of WebSRT Node
+  Objects</span>, there exists a <span>WebSRT Timestamp Object</span>
+  whose value is greater than the <span>current playback
+  position</span> of the <span>media element</span> that is the
+  <i>matched element</i>, entirely before the <span>WebSRT Node
+  Object</span> <var title="">c</var>.</p>
+
   </div>
 <!--END websrt-->
 <!--</div>-->
 <!--KEEP-START w3c-html--><!--TT-->
 
 
+
+
+
   <div class="impl">
 
   <h4>Images</h4>
@@ -102485,8 +102730,20 @@
    <dd>
     <dl>
      <dt>Magic number(s):</dt>
-     <dd>No sequence of bytes can uniquely identify a WebSRT timed
-     track file.</dd>
+     <dd>
+      <p>WebSRT files all begin with one of the following byte sequences:</p>
+      <ul class="brief">
+       <li> EF BB BF 57 45 42 53 52 54 20 46 49 4C 45 0A
+       <li> EF BB BF 57 45 42 53 52 54 20 46 49 4C 45 0D
+       <li> EF BB BF 57 45 42 53 52 54 20 46 49 4C 45 20
+       <li> EF BB BF 57 45 42 53 52 54 20 46 49 4C 45 09
+       <li>          57 45 42 53 52 54 20 46 49 4C 45 0A
+       <li>          57 45 42 53 52 54 20 46 49 4C 45 0D
+       <li>          57 45 42 53 52 54 20 46 49 4C 45 20
+       <li>          57 45 42 53 52 54 20 46 49 4C 45 09
+      </ul>
+      <p class="note">(An optional UTF-8 BOM, the ASCII string "<code title="">WEBSRT FILE</code>", and finally a space, tab, or line break.)
+     </dd>
      <dt>File extension(s):</dt>
      <dd>"<code title="">srt</code>"</dd>
      <dt>Macintosh file type code(s):</dt>
@@ -104042,6 +104299,7 @@
          <code>video</code></td>
      <td>empty</td>
      <td><span title="global attributes">globals</span>;
+         <code title="attr-track-default">default</code>;
          <code title="attr-track-kind">kind</code>;
          <code title="attr-track-label">label</code>;
          <code title="attr-track-src">src</code>;
@@ -104612,6 +104870,11 @@
      <td> Value of the element
      <td> <span>Valid date or time string</span>*
     <tr>
+     <th> <code title="">default</code>
+     <td> <code title="attr-track-default">track</code>
+     <td> Enable the track if no other <span>timed track</span> is more suitable.
+     <td> <span>Boolean attribute</span>
+    <tr>
      <th> <code title="">defer</code>
      <td> <code title="attr-script-defer">script</code>
      <td> Defer script execution




More information about the Commit-Watchers mailing list