HTML Standard Tracker

Filter

File a bug

SVNBugCommentTime (UTC)
2703[Conformance Checkers] [Tools] Allow <frameset> to override the 'in body' mode in certain cases for compatibility with IE and pages that rely on IE's behaviour.2009-01-24 01:52
@@ -54894,27 +54894,30 @@ interface <dfn>MessageChannel</dfn> {
   implicitly or explicitly) the <span><code title="">head</code>
   element pointer</span> gets set to point to this node.</p>
 
   <p>The <span><code title="">form</code> element pointer</span>
   points to the last <code>form</code> element that was opened and
   whose end tag has not yet been seen. It is used to make form
   controls associate with forms in the face of dramatically bad
   markup, for historical reasons.</p>
 
 
-  <h5>The scripting state</h5>
+  <h5>Other parsing state flags</h5>
 
   <p>The <dfn>scripting flag</dfn> is set to "enabled" if the <span
   title="concept-n-script">scripting was enabled</span> for the
   <code>Document</code> with which the parser is associated when the
   parser was created, and "disabled" otherwise.</p>
 
+  <p>The <dfn>frameset-ok flag</dfn> is set to "ok" when the parser is
+  created. It is set to "not ok" after certain tokens are seen.</p>
+
 
   <h4><dfn>Tokenization</dfn></h4>
 
   <p>Implementations must act as if they used the following state
   machine to tokenise HTML. The state machine must start in the
   <span>data state</span>. Most states consume a single character,
   which may have various side-effects, and either switches the state
   machine to a new state to <em>reconsume</em> the same character, or
   switches it to a new state (to consume the next character), or
   repeats the same state (to consume the next character). Some states
@@ -56727,21 +56730,21 @@ interface <dfn>MessageChannel</dfn> {
 
 
 
   <h5>The "<dfn title="insertion mode: initial">initial</dfn>" insertion mode</h5>
 
   <p>When the <span>insertion mode</span> is "<span title="insertion
   mode: initial">initial</span>", tokens must be handled as follows:</p>
 
   <dl class="switch">
 
-   <dt>A character token that is one of one of U+0009 CHARACTER
+   <dt>A character token that is one of U+0009 CHARACTER
    TABULATION, U+000A LINE FEED (LF), U+000C FORM FEED (FF),
    <!--U+000D CARRIAGE RETURN (CR),--> or U+0020 SPACE</dt>
    <dd>
     <p>Ignore the token.</p>
    </dd>
 
    <dt>A comment token</dt>
    <dd>
     <p>Append a <code>Comment</code> node to the <code>Document</code>
     object with the <code title="">data</code> attribute set to the
@@ -56913,21 +56916,21 @@ interface <dfn>MessageChannel</dfn> {
     <p><span>Parse error</span>. Ignore the token.</p>
    </dd>
 
    <dt>A comment token</dt>
    <dd>
     <p>Append a <code>Comment</code> node to the <code>Document</code>
     object with the <code title="">data</code> attribute set to the
     data given in the comment token.</p>
    </dd>
 
-   <dt>A character token that is one of one of U+0009 CHARACTER
+   <dt>A character token that is one of U+0009 CHARACTER
    TABULATION, U+000A LINE FEED (LF), U+000C FORM FEED (FF),
    <!--U+000D CARRIAGE RETURN (CR),--> or U+0020 SPACE</dt>
    <dd>
     <p>Ignore the token.</p>
    </dd>
 
    <dt>A start tag whose tag name is "html"</dt>
    <dd>
 
     <p><span>Create an element for the token</span> in the <span>HTML
@@ -56986,21 +56989,21 @@ interface <dfn>MessageChannel</dfn> {
   as described in the next section.</p>
 
 
   <h5>The "<dfn title="insertion mode: before head">before head</dfn>" insertion mode</h5>
 
   <p>When the <span>insertion mode</span> is "<span title="insertion
   mode: before head">before head</span>", tokens must be handled as follows:</p>
 
   <dl class="switch">
 
-   <dt>A character token that is one of one of U+0009 CHARACTER
+   <dt>A character token that is one of U+0009 CHARACTER
    TABULATION, U+000A LINE FEED (LF), U+000C FORM FEED (FF),
    <!--U+000D CARRIAGE RETURN (CR),--> or U+0020 SPACE</dt>
    <dd>
     <p>Ignore the token.</p> <!-- :-( -->
    </dd>
 
    <dt>A comment token</dt>
    <dd>
     <p>Append a <code>Comment</code> node to the <span>current
     node</span> with the <code title="">data</code> attribute set to
@@ -57064,21 +57067,21 @@ interface <dfn>MessageChannel</dfn> {
   </dl>
 
 
   <h5 id="parsing-main-inhead">The "<dfn title="insertion mode: in head">in head</dfn>" insertion mode</h5>
 
   <p>When the <span>insertion mode</span> is "<span title="insertion
   mode: in head">in head</span>", tokens must be handled as follows:</p>
 
   <dl class="switch">
 
-   <dt>A character token that is one of one of U+0009 CHARACTER
+   <dt>A character token that is one of U+0009 CHARACTER
    TABULATION, U+000A LINE FEED (LF), U+000C FORM FEED (FF),
    <!--U+000D CARRIAGE RETURN (CR),--> or U+0020 SPACE</dt>
    <dd>
     <p><span title="insert a character">Insert the character</span> into
     the <span>current node</span>.</p>
    </dd>
 
    <dt>A comment token</dt>
    <dd>
     <p>Append a <code>Comment</code> node to the <span>current
@@ -57273,21 +57276,21 @@ interface <dfn>MessageChannel</dfn> {
     <p>Pop the <span>current node</span> (which will be a
     <code>noscript</code> element) from the <span>stack of open
     elements</span>; the new <span>current node</span> will be a
     <code>head</code> element.</p>
 
     <p>Switch the <span>insertion mode</span> to "<span
     title="insertion mode: in head">in head</span>".</p>
 
    </dd>
 
-   <dt>A character token that is one of one of U+0009 CHARACTER
+   <dt>A character token that is one of U+0009 CHARACTER
    TABULATION, U+000A LINE FEED (LF), U+000C FORM FEED (FF),
    <!--U+000D CARRIAGE RETURN (CR),--> or U+0020 SPACE</dt>
    <dt>A comment token</dt>
    <dt>A start tag whose tag name is one of: "link", "meta", "noframes", "style"</dt>
    <dd>
     <p>Process the token <span>using the rules for</span> the "<span
     title="insertion mode: in head">in head</span>" <span>insertion
     mode</span>.</p>
    </dd>
 
@@ -57316,21 +57319,21 @@ interface <dfn>MessageChannel</dfn> {
   </dl>
 
 
   <h5>The "<dfn title="insertion mode: after head">after head</dfn>" insertion mode</h5>
 
   <p>When the <span>insertion mode</span> is "<span title="insertion
   mode: after head">after head</span>", tokens must be handled as follows:</p>
 
   <dl class="switch">
 
-   <dt>A character token that is one of one of U+0009 CHARACTER
+   <dt>A character token that is one of U+0009 CHARACTER
    TABULATION, U+000A LINE FEED (LF), U+000C FORM FEED (FF),
    <!--U+000D CARRIAGE RETURN (CR),--> or U+0020 SPACE</dt>
    <dd>
     <p><span title="insert a character">Insert the character</span> into
     the <span>current node</span>.</p>
    </dd>
 
    <dt>A comment token</dt>
    <dd>
     <p>Append a <code>Comment</code> node to the <span>current
@@ -57420,20 +57423,25 @@ interface <dfn>MessageChannel</dfn> {
 
    <dt>A character token</dt>
    <dd>
 
     <p><span>Reconstruct the active formatting elements</span>, if
     any.</p>
 
     <p><span title="insert a character">Insert the token's
     character</span> into the <span>current node</span>.</p>
 
+    <p>If the token is not one of U+0009 CHARACTER TABULATION, U+000A
+    LINE FEED (LF), U+000C FORM FEED (FF), <!--U+000D CARRIAGE RETURN
+    (CR),--> or U+0020 SPACE, then set the <span>frameset-ok
+    flag</span> to "not ok".</p>
+
    </dd>
 
    <dt>A comment token</dt>
    <dd>
     <p>Append a <code>Comment</code> node to the <span>current
     node</span> with the <code title="">data</code> attribute set to
     the data given in the comment token.</p>
    </dd>
 
    <dt>A DOCTYPE token</dt>
@@ -57469,20 +57477,54 @@ interface <dfn>MessageChannel</dfn> {
     then ignore the token. (<span>fragment case</span>)</p>
 
     <p>Otherwise, for each attribute on the token, check to see if
     the attribute is already present on the <code>body</code>
     element (the second element) on the <span>stack of open
     elements</span>. If it is not, add the attribute and its
     corresponding value to that element.</p>
 
    </dd>
 
+   <dt>A start tag whose tag name is "frameset"</dt>
+   <dd>
+
+    <p><span>Parse error</span>.</p>
+
+    <p>If the second element on the <span>stack of open
+    elements</span> is not a <code>body</code> element, or, if the
+    <span>stack of open elements</span> has only one node on it,
+    then ignore the token. (<span>fragment case</span>)</p>
+
+    <p>If the <span>frameset-ok flag</span> is set to "not ok", ignore
+    the token.</p>
+
+    <p>Otherwise, run the following steps:</p>
+
+    <ol>
+
+     <li><p>Remove the second element on the <span>stack of open
+     elements</span> from its parent node, if it has one.</p></li>
+
+     <li><p>Pop all the nodes from the bottom of the <span>stack of
+     open elements</span>, from the <span>current node</span> up to
+     the root <code>html</code> element.</p>
+
+     <li><p><span>Insert an HTML element</span> for the
+     token.</p></li>
+
+     <li><p>Switch the <span>insertion mode</span> to "<span
+     title="insertion mode: in frameset">in frameset</span>".</p>
+
+    </ol>
+
+   </dd>
+
    <dt>An end-of-file token</dt>
    <dd>
 
     <p>If there is a node in the <span>stack of open elements</span>
     that is not either a <code>dd</code> element, a <code>dt</code>
     element, an <code>li</code> element, a <code>p</code> element, a
     <code>tbody</code> element, a <code>td</code> element, a
     <code>tfoot</code> element, a <code>th</code> element, a
     <code>thead</code> element, a <code>tr</code> element, the
     <code>body</code> element, or the <code>html</code> element, then
@@ -57585,20 +57627,22 @@ interface <dfn>MessageChannel</dfn> {
     scope</span>, then act as if an end tag with the tag name
     "p" had been seen.</p>
 
     <p><span>Insert an HTML element</span> for the token.</p>
 
     <p>If the next token is a U+000A LINE FEED (LF) character
     token, then ignore that token and move on to the next
     one. (Newlines at the start of <code>pre</code> blocks are
     ignored as an authoring convenience.)</p>
 
+    <p>Set the <span>frameset-ok flag</span> to "not ok".</p>
+
    </dd>
 
    <!-- as normal, but interacts with the form element pointer -->
    <dt>A start tag whose tag name is "form"</dt>
    <dd>
 
     <p>If the <span><code title="form">form</code> element
     pointer</span> is not null, then this is a <span>parse
     error</span>; ignore the token.</p>
 
@@ -57616,20 +57660,22 @@ interface <dfn>MessageChannel</dfn> {
    </dd>
 
    <!-- as normal, but imply </li> when there's another <li> open in weird cases -->
    <dt>A start tag whose tag name is "li"</dt>
    <dd>
 
     <p>Run the following algorithm:</p>
 
     <ol>
 
+     <li><p>Set the <span>frameset-ok flag</span> to "not ok".</p></li>
+
      <li><p>Initialize <var title="">node</var> to be the <span>current
      node</span> (the bottommost node of the stack).</p></li>
 
      <li><p>If <var title="">node</var> is an <code>li</code> element,
      then act as if an end tag with the tag name "li" had
      been seen, then jump to the last step.</p></li>
 
      <li><p>If <var title="">node</var> is not in the
      <span>formatting</span> category, and is not in the
      <span>phrasing</span> category, and is not an
@@ -57666,20 +57712,22 @@ interface <dfn>MessageChannel</dfn> {
    </dd>
 
    <!-- as normal, but imply </dt> or </dd> when there's another <dt> or <dd> open in weird cases  -->
    <dt>A start tag whose tag name is one of: "dd", "dt"</dt>
    <dd>
 
     <p>Run the following algorithm:</p>
 
     <ol>
 
+     <li><p>Set the <span>frameset-ok flag</span> to "not ok".</p></li>
+
      <li><p>Initialize <var title="">node</var> to be the <span>current
      node</span> (the bottommost node of the stack).</p></li>
 
      <li><p>If <var title="">node</var> is a <code>dd</code> or
      <code>dt</code> element, then act as if an end tag with the same
      tag name as <var title="">node</var> had been seen, then jump to
      the last step.</p></li>
 
      <li><p>If <var title="">node</var> is not in the
      <span>formatting</span> category, and is not in the
@@ -58157,34 +58205,38 @@ interface <dfn>MessageChannel</dfn> {
     <p>Otherwise:</p>
 
     <p><span>Reconstruct the active formatting elements</span>, if
     any.</p>
 
     <p><span>Insert an HTML element</span> for the token.</p>
 
     <p>Insert a marker at the end of the <span>list of active
     formatting elements</span>.</p>
 
+    <p>Set the <span>frameset-ok flag</span> to "not ok".</p>
+
    </dd>
 
    <dt>A start tag token whose tag name is one of: "applet",
    "marquee", "object"</dt>
    <dd>
 
     <p><span>Reconstruct the active formatting elements</span>, if
     any.</p>
 
     <p><span>Insert an HTML element</span> for the token.</p>
 
     <p>Insert a marker at the end of the <span>list of active
     formatting elements</span>.</p>
 
+    <p>Set the <span>frameset-ok flag</span> to "not ok".</p>
+
    </dd>
 
    <dt>An end tag token whose tag name is one of: "applet", "button",
    "marquee", "object"</dt>
    <dd>
 
     <p>If the <span>stack of open elements</span> does not <span
     title="has an element in scope">have an element in scope</span>
     with the same tag name as that of the token, then this is a
     <span>parse error</span>; ignore the token.</p>
@@ -58203,59 +58255,55 @@ interface <dfn>MessageChannel</dfn> {
      until an element with the same tag name as the token has been
      popped from the stack.</p></li>
 
      <li><span>Clear the list of active formatting elements up to the
      last marker</span>.</li>
 
     </ol>
 
    </dd>
 
-   <dt>A start tag whose tag name is "xmp"</dt>
-   <dd>
-
-    <p><span>Reconstruct the active formatting elements</span>, if
-    any.</p>
-
-    <p>Follow the <span>generic CDATA element parsing algorithm</span>.</p>
-
-   </dd>
-
    <dt>A start tag whose tag name is "table"</dt>
    <dd>
 
     <p>If the <span>stack of open elements</span> <span title="has
     an element in scope">has a <code>p</code> element in
     scope</span>, then act as if an end tag with the tag name
     "p" had been seen.</p> <!-- XXX quirks: don't do this -->
 
     <p><span>Insert an HTML element</span> for the token.</p>
 
+    <p>Set the <span>frameset-ok flag</span> to "not ok".</p>
+
     <p>Switch the <span>insertion mode</span> to "<span
     title="insertion mode: in table">in table</span>".</p>
 
    </dd>
 
    <dt>A start tag whose tag name is one of: "area", "basefont",
    "bgsound", "br", "embed", "img", "input", "spacer", "wbr"</dt>
    <dd>
 
     <p><span>Reconstruct the active formatting elements</span>, if
     any.</p>
 
     <p><span>Insert an HTML element</span> for the token. Immediately
     pop the <span>current node</span> off the <span>stack of open
     elements</span>.</p>
 
     <p><span title="acknowledge self-closing flag">Acknowledge the
     token's <i>self-closing flag</i></span>, if it is set.</p>
 
+    <p>Set the <span>frameset-ok flag</span> to "not ok".</p> <!--
+    shouldn't really do it for <area>, <basefont>, <bgsound>, and
+    <spacer> -->
+
    </dd>
 
    <dt>A start tag whose tag name is one of: "param", "source"</dt>
    <dd>
 
     <p><span>Insert an HTML element</span> for the token. Immediately
     pop the <span>current node</span> off the <span>stack of open
     elements</span>.</p>
 
     <p><span title="acknowledge self-closing flag">Acknowledge the
@@ -58271,20 +58319,22 @@ interface <dfn>MessageChannel</dfn> {
     scope</span>, then act as if an end tag with the tag name
     "p" had been seen.</p> <!-- XXX quirks: don't do this -->
 
     <p><span>Insert an HTML element</span> for the token. Immediately
     pop the <span>current node</span> off the <span>stack of open
     elements</span>.</p>
 
     <p><span title="acknowledge self-closing flag">Acknowledge the
     token's <i>self-closing flag</i></span>, if it is set.</p>
 
+    <p>Set the <span>frameset-ok flag</span> to "not ok".</p>
+
    </dd>
 
    <dt>A start tag whose tag name is "image"</dt>
    <dd>
     <p><span>Parse error</span>. Change the token's tag name
     to "img" and reprocess it. (Don't ask.)</p> <!-- As of
     2005-12, studies showed that around 0.2% of pages used the
     <image> element. -->
    </dd>
 
@@ -58376,42 +58426,70 @@ interface <dfn>MessageChannel</dfn> {
      token, then ignore that token and move on to the next
      one. (Newlines at the start of <code>textarea</code> elements are
      ignored as an authoring convenience.)</p></li>
 
      <li><p>Switch the tokeniser's <span>content model flag</span> to
      the RCDATA state.</p></li>
 
      <li><p>Let the <span>original insertion mode</span> be the
      current <span>insertion mode</span>.</p>
 
+     <li><p>Set the <span>frameset-ok flag</span> to "not
+     ok".</p></li>
+
      <li><p>Switch the <span>insertion mode</span> to "<span
      title="insertion mode: in CDATA/RCDATA">in
      CDATA/RCDATA</span>".</p></li>
 
     </ol>
 
    </dd>
 
-   <dt>A start tag whose tag name is one of: "iframe", "noembed"</dt>
+   <dt>A start tag whose tag name is "xmp"</dt>
+   <dd>
+
+    <p><span>Reconstruct the active formatting elements</span>, if
+    any.</p>
+
+    <p>Set the <span>frameset-ok flag</span> to "not ok".</p>
+
+    <p>Follow the <span>generic CDATA element parsing algorithm</span>.</p>
+
+   </dd>
+
+   <dt>A start tag whose tag name is "iframe"</dt>
+   <dd>
+
+    <p>Set the <span>frameset-ok flag</span> to "not ok".</p>
+
+    <p>Follow the <span>generic CDATA element parsing algorithm</span>.</p>
+
+   </dd>
+
+   <dt>A start tag whose tag name is "noembed"</dt>
    <dt>A start tag whose tag name is "noscript", if the <span>scripting flag</span> is enabled</dt>
    <dd>
+
     <p>Follow the <span>generic CDATA element parsing algorithm</span>.</p>
+
    </dd>
 
    <dt>A start tag whose tag name is "select"</dt>
    <dd>
 
     <p><span>Reconstruct the active formatting elements</span>, if
     any.</p>
 
     <p><span>Insert an HTML element</span> for the token.</p>
 
+    <p>Set the <span>frameset-ok flag</span> to "not ok".</p>
+
     <p>If the <span>insertion mode</span> is one of <span
     title="insertion mode: in table">in table</span>", "<span
     title="insertion mode: in caption">in caption</span>", "<span
     title="insertion mode: in column group">in column group</span>",
     "<span title="insertion mode: in table body">in table
     body</span>", "<span title="insertion mode: in row">in
     row</span>", or "<span title="insertion mode: in cell">in
     cell</span>", then switch the <span>insertion mode</span> to
     "<span title="insertion mode: in select in table">in select in
     table</span>". Otherwise, switch the <span>insertion mode</span>
@@ -58525,22 +58603,22 @@ interface <dfn>MessageChannel</dfn> {
 
     <p>Otherwise, let the <span>secondary insertion mode</span> be the
     current <span>insertion mode</span>, and then switch the
     <span>insertion mode</span> to "<span title="insertion mode: in
     foreign content">in foreign content</span>".</p>
 
    </dd>
 -->
 
    <dt>A start <!--or end--> tag whose tag name is one of: "caption",
-   "col", "colgroup", "frame", "frameset", "head", "tbody", "td",
-   "tfoot", "th", "thead", "tr"</dt>
+   "col", "colgroup", "frame", "head", "tbody", "td", "tfoot", "th",
+   "thead", "tr"</dt>
    <!--<dt>An end tag whose tag name is one of: "area", "base",
    "basefont", "bgsound", "command", "embed", "eventsource", "hr",
    "iframe", "image", "img", "input", "isindex", "link", "meta",
    "noembed", "noframes", "param", "script", "select", "source",
    "spacer", "style", "table", "textarea", "title", "wbr"</dt>--> <!--
    add keygen if we add the start tag -->
    <!--<dt>An end tag whose tag name is "noscript", if the
    <span>scripting flag</span> is enabled</dt>-->
    <dd>
     <p><span>Parse error</span>. Ignore the token.</p>
@@ -58748,21 +58826,21 @@ interface <dfn>MessageChannel</dfn> {
   </dl>
 
 
   <h5 id="parsing-main-intable">The "<dfn title="insertion mode: in table">in table</dfn>" insertion mode</h5>
 
   <p>When the <span>insertion mode</span> is "<span title="insertion
   mode: in table">in table</span>", tokens must be handled as follows:</p>
 
   <dl class="switch">
 
-   <dt>A character token that is one of one of U+0009 CHARACTER
+   <dt>A character token that is one of U+0009 CHARACTER
    TABULATION, U+000A LINE FEED (LF), U+000C FORM FEED (FF),
    <!--U+000D CARRIAGE RETURN (CR),--> or U+0020 SPACE</dt>
    <dd>
 
     <p>If the <span>current table</span> is <span>tainted</span>, then
     act as described in the "anything else" entry below.</p>
 
     <p>Otherwise, <span title="insert a character">insert the
     character</span> into the <span>current node</span>.</p>
 
@@ -59010,21 +59088,21 @@ interface <dfn>MessageChannel</dfn> {
   </dl>
 
 
   <h5 id="parsing-main-incolgroup">The "<dfn title="insertion mode: in column group">in column group</dfn>" insertion mode</h5>
 
   <p>When the <span>insertion mode</span> is "<span title="insertion
   mode: in column group">in column group</span>", tokens must be handled as follows:</p>
 
   <dl class="switch">
 
-   <dt>A character token that is one of one of U+0009 CHARACTER
+   <dt>A character token that is one of U+0009 CHARACTER
    TABULATION, U+000A LINE FEED (LF), U+000C FORM FEED (FF),
    <!--U+000D CARRIAGE RETURN (CR),--> or U+0020 SPACE</dt>
    <dd>
     <p><span title="insert a character">Insert the character</span> into
     the <span>current node</span>.</p>
    </dd>
 
    <dt>A comment token</dt>
    <dd>
     <p>Append a <code>Comment</code> node to the <span>current
@@ -59759,21 +59837,21 @@ interface <dfn>MessageChannel</dfn> {
   </dl>
 
 
   <h5 id="parsing-main-afterbody">The "<dfn title="insertion mode: after body">after body</dfn>" insertion mode</h5>
 
   <p>When the <span>insertion mode</span> is "<span title="insertion
   mode: after body">after body</span>", tokens must be handled as follows:</p>
 
   <dl class="switch">
 
-   <dt>A character token that is one of one of U+0009 CHARACTER
+   <dt>A character token that is one of U+0009 CHARACTER
    TABULATION, U+000A LINE FEED (LF), U+000C FORM FEED (FF),
    <!--U+000D CARRIAGE RETURN (CR),--> or U+0020 SPACE</dt>
    <dd>
     <p>Process the token <span>using the rules for</span> the "<span
     title="insertion mode: in body">in body</span>" <span>insertion
     mode</span>.</p>
    </dd>
 
    <dt>A comment token</dt>
    <dd>
@@ -59825,21 +59903,21 @@ interface <dfn>MessageChannel</dfn> {
   </dl>
 
 
   <h5 id="parsing-main-inframeset">The "<dfn title="insertion mode: in frameset">in frameset</dfn>" insertion mode</h5>
 
   <p>When the <span>insertion mode</span> is "<span title="insertion
   mode: in frameset">in frameset</span>", tokens must be handled as follows:</p>
 
   <dl class="switch">
 
-   <dt>A character token that is one of one of U+0009 CHARACTER
+   <dt>A character token that is one of U+0009 CHARACTER
    TABULATION, U+000A LINE FEED (LF), U+000C FORM FEED (FF),
    <!--U+000D CARRIAGE RETURN (CR),--> or U+0020 SPACE</dt>
    <dd>
     <p><span title="insert a character">Insert the character</span> into
     the <span>current node</span>.</p>
    </dd>
 
    <dt>A comment token</dt>
    <dd>
     <p>Append a <code>Comment</code> node to the <span>current
@@ -59927,21 +60005,21 @@ interface <dfn>MessageChannel</dfn> {
 
 
   <h5 id="parsing-main-afterframeset">The "<dfn title="insertion mode: after frameset">after frameset</dfn>" insertion mode</h5>
 
   <p>When the <span>insertion mode</span> is "<span title="insertion
   mode: after frameset">after frameset</span>", tokens must be handled as follows:</p>
 
   <!-- due to rules in the "in frameset" mode, this can't be entered in the fragment case -->
   <dl class="switch">
 
-   <dt>A character token that is one of one of U+0009 CHARACTER
+   <dt>A character token that is one of U+0009 CHARACTER
    TABULATION, U+000A LINE FEED (LF), U+000C FORM FEED (FF),
    <!--U+000D CARRIAGE RETURN (CR),--> or U+0020 SPACE</dt>
    <dd>
     <p><span title="insert a character">Insert the character</span> into
     the <span>current node</span>.</p>
    </dd>
 
    <dt>A comment token</dt>
    <dd>
     <p>Append a <code>Comment</code> node to the <span>current
@@ -60001,21 +60079,21 @@ interface <dfn>MessageChannel</dfn> {
   <dl class="switch">
 
    <dt>A comment token</dt>
    <dd>
     <p>Append a <code>Comment</code> node to the <code>Document</code>
     object with the <code title="">data</code> attribute set to the
     data given in the comment token.</p>
    </dd>
 
    <dt>A DOCTYPE token</dt>
-   <dt>A character token that is one of one of U+0009 CHARACTER
+   <dt>A character token that is one of U+0009 CHARACTER
    TABULATION, U+000A LINE FEED (LF), U+000C FORM FEED (FF),
    <!--U+000D CARRIAGE RETURN (CR),--> or U+0020 SPACE</dt>
    <dt>A start tag whose tag name is "html"</dt>
    <dd>
     <p>Process the token <span>using the rules for</span> the "<span
     title="insertion mode: in body">in body</span>" <span>insertion
     mode</span>.</p>
    </dd>
 
    <dt>An end-of-file token</dt>
@@ -60041,21 +60119,21 @@ interface <dfn>MessageChannel</dfn> {
   <dl class="switch">
 
    <dt>A comment token</dt>
    <dd>
     <p>Append a <code>Comment</code> node to the <code>Document</code>
     object with the <code title="">data</code> attribute set to the
     data given in the comment token.</p>
    </dd>
 
    <dt>A DOCTYPE token</dt>
-   <dt>A character token that is one of one of U+0009 CHARACTER
+   <dt>A character token that is one of U+0009 CHARACTER
    TABULATION, U+000A LINE FEED (LF), U+000C FORM FEED (FF),
    <!--U+000D CARRIAGE RETURN (CR),--> or U+0020 SPACE</dt>
    <dt>A start tag whose tag name is "html"</dt>
    <dd>
     <p>Process the token <span>using the rules for</span> the "<span
     title="insertion mode: in body">in body</span>" <span>insertion
     mode</span>.</p>
    </dd>
 
    <dt>An end-of-file token</dt>

|