- From: poot <cvsmail@w3.org>
- Date: Sat, 16 Oct 2010 07:56:48 +0900 (JST)
- To: public-html-diffs@w3.org
hixie: Add in some hard-coded limits for dealing with unclosed
formatting elements to limit the explosive growth of the list of
formatting elements in commonly-seen cases. (whatwg r5638)
http://dev.w3.org/cvsweb/html5/spec/Overview.html?r1=1.4513&r2=1.4514&f=h
http://html5.org/tools/web-apps-tracker?from=5637&to=5638
===================================================================
RCS file: /sources/public/html5/spec/Overview.html,v
retrieving revision 1.4513
retrieving revision 1.4514
diff -u -d -r1.4513 -r1.4514
--- Overview.html 15 Oct 2010 21:53:03 -0000 1.4513
+++ Overview.html 15 Oct 2010 22:56:18 -0000 1.4514
@@ -1242,7 +1242,8 @@
<li><a href="#misnested-tags:-b-i-b-i"><span class="secno">8.2.8.1 </span>Misnested tags: <b><i></b></i></a></li>
<li><a href="#misnested-tags:-b-p-b-p"><span class="secno">8.2.8.2 </span>Misnested tags: <b><p></b></p></a></li>
<li><a href="#unexpected-markup-in-tables"><span class="secno">8.2.8.3 </span>Unexpected markup in tables</a></li>
- <li><a href="#scripts-that-modify-the-page-as-it-is-being-parsed"><span class="secno">8.2.8.4 </span>Scripts that modify the page as it is being parsed</a></ol></ol></li>
+ <li><a href="#scripts-that-modify-the-page-as-it-is-being-parsed"><span class="secno">8.2.8.4 </span>Scripts that modify the page as it is being parsed</a></li>
+ <li><a href="#unclosed-formatting-elements"><span class="secno">8.2.8.5 </span>Unclosed formatting elements</a></ol></ol></li>
<li><a href="#serializing-html-fragments"><span class="secno">8.3 </span>Serializing HTML fragments</a></li>
<li><a href="#parsing-html-fragments"><span class="secno">8.4 </span>Parsing HTML fragments</a></li>
<li><a href="#named-character-references"><span class="secno">8.5 </span>Named character references</a></ol></li>
@@ -56354,7 +56355,28 @@
created, so that further elements can be created for that token if
necessary.</p>
- <p>When the steps below require the UA to <dfn id="reconstruct-the-active-formatting-elements">reconstruct the
+ <p>When the steps below require the UA to <dfn id="push-onto-the-list-of-active-formatting-elements">push onto the list of
+ active formatting elements</dfn> an element <var title="">element</var>, the UA must perform the following steps:</p>
+
+ <ol><li><p>If there are already three elements in the <a href="#list-of-active-formatting-elements">list of
+ active formatting elements</a> after the last list marker, if
+ any, or anywhere in the list if there are no list markers, that
+ have the same tag name, namespace, and attributes as <var title="">element</var>, then remove the earliest such element from
+ the <a href="#list-of-active-formatting-elements">list of active formatting elements</a>. For these
+ purposes, the attributes must be compared as they were when the
+ elements were created by the parser; two elements have the same
+ attributes if all their parsed attributes can be paired such that
+ the two attributes in each pair have identical names, namespaces,
+ and values (the order of the attributes does not matter).</p>
+
+ <p class="note">This is the Noah's Ark clause. But with three per
+ family instead of two.</li> <!-- A sort of polyamorous Noah's
+ Ark, if you will. -->
+
+ <li><p>Add <var title="">element</var> to the <a href="#list-of-active-formatting-elements">list of active
+ formatting elements</a>.</li>
+
+ </ol><p>When the steps below require the UA to <dfn id="reconstruct-the-active-formatting-elements">reconstruct the
active formatting elements</dfn>, the UA must perform the following
steps:</p>
@@ -60035,9 +60057,9 @@
<p><a href="#reconstruct-the-active-formatting-elements">Reconstruct the active formatting elements</a>, if
any.</p>
- <p><a href="#insert-an-html-element">Insert an HTML element</a> for the token. Add that
- element to the <a href="#list-of-active-formatting-elements">list of active formatting
- elements</a>.</p>
+ <p><a href="#insert-an-html-element">Insert an HTML element</a> for the token. <a href="#push-onto-the-list-of-active-formatting-elements">Push
+ onto the list of active formatting elements</a> that
+ element.</p>
</dd>
@@ -60048,9 +60070,9 @@
<p><a href="#reconstruct-the-active-formatting-elements">Reconstruct the active formatting elements</a>, if
any.</p>
- <p><a href="#insert-an-html-element">Insert an HTML element</a> for the token. Add that
- element to the <a href="#list-of-active-formatting-elements">list of active formatting
- elements</a>.</p>
+ <p><a href="#insert-an-html-element">Insert an HTML element</a> for the token. <a href="#push-onto-the-list-of-active-formatting-elements">Push
+ onto the list of active formatting elements</a> that
+ element.</p>
</dd>
@@ -60067,9 +60089,9 @@
<a href="#reconstruct-the-active-formatting-elements">reconstruct the active formatting elements</a>, if
any.</p>
- <p><a href="#insert-an-html-element">Insert an HTML element</a> for the token. Add that
- element to the <a href="#list-of-active-formatting-elements">list of active formatting
- elements</a>.</p>
+ <p><a href="#insert-an-html-element">Insert an HTML element</a> for the token. <a href="#push-onto-the-list-of-active-formatting-elements">Push
+ onto the list of active formatting elements</a> that
+ element.</p>
</dd>
@@ -60092,16 +60114,20 @@
<li>has the same tag name as the token.</li>
- </ul><p>If there is no such node, or, if that node is also in the
- <a href="#stack-of-open-elements">stack of open elements</a> but the element is not <a href="#has-an-element-in-scope" title="has an element in scope">in scope</a>, then this is a
- <a href="#parse-error">parse error</a>; ignore the token, and abort these
- steps.</p>
+ </ul><p>If there is no such node, then abort these steps and instead
+ act as described in the "any other end tag" entry below.</p>
<p>Otherwise, if there is such a node, but that node is not
in the <a href="#stack-of-open-elements">stack of open elements</a>, then this is a
<a href="#parse-error">parse error</a>; remove the element from the list,
and abort these steps.</p>
+ <p>Otherwise, if there is such a node, and that node is also in
+ the <a href="#stack-of-open-elements">stack of open elements</a>, but the element is not
+ <a href="#has-an-element-in-scope" title="has an element in scope">in scope</a>, then this
+ is a <a href="#parse-error">parse error</a>; ignore the token, and abort these
+ steps.</p>
+
<p>Otherwise, there is a <var title="">formatting
element</var> and that element is in <a href="#stack-of-open-elements" title="stack of
open elements">the stack</a> and is <a href="#has-an-element-in-scope" title="has an
@@ -62626,6 +62652,36 @@
<ul class="domTree"><li class="t1"><code><a href="#the-html-element-0">html</a></code><ul><li class="t1"><code><a href="#the-head-element-0">head</a></code><li class="t1"><code><a href="#the-body-element-0">body</a></code><ul><li class="t1"><code><a href="#script">script</a></code><ul><li class="t3"><code>#text</code>: <span title="">alert(document.URL);</span></ul></ul></ul></ul><p>This second alert will say "http://example.com/inner".</p>
+ <h5 id="unclosed-formatting-elements"><span class="secno">8.2.8.5 </span>Unclosed formatting elements</h5>
+
+ <p><i>This section is non-normative.</i></p>
+
+ <p>The following markup shows how nested formatting elements (such
+ as <code><a href="#the-b-element">b</a></code>) get collected and continue to be applied even as
+ the elements they are contained in are closed, but that excessive
+ duplicates are thrown away.</p>
+
+ <pre><!DOCTYPE html>
+<p><b class=x><b class=x><b><b class=x><b class=x><b>X
+<p>X
+<p><b><b class=x><b>X
+<p></b></b></b></b></b></b>X</pre>
+
+ <p>The resulting DOM tree is as follows:</p>
+
+ <ul class="domTree"><li class="t10">DOCTYPE: <code><a href="#the-html-element-0">html</a></code><li class="t1"><code><a href="#the-html-element-0">html</a></code><ul><li class="t1"><code><a href="#the-head-element-0">head</a></code><li class="t1"><code><a href="#the-body-element-0">body</a></code><ul><li class="t1"><code><a href="#the-p-element">p</a></code><ul><li class="t1"><code><a href="#the-b-element">b</a></code> <span class="t2" title=""><code class="attribute name">class</code>="<code class="attribute value">x</code>"</span><ul><li class="t1"><code><a href="#the-b-element">b</a></code> <span class="t2" title=""><code class="attribute name">class</code>="<code class="attribute value">x</code>"</span><ul><li class="t1"><code><a href="#the-b-element">b</a></code><ul><li class="t1"><code><a href="#the-b-element">b</a></code> <span class="t2" title=""><code class="attribute name">class</code>="<code class="attribute value">x</code>"</span><ul><li class="t1"><code><a href="#the-b-element">b</a></code> span class="t2" title=""><code class="attribute name">class</code>="<code class="attribute value">x</code>"</span><ul><li class="t1"><code><a href="#the-b-element">b</a></code><ul><li class="t3"><code>#text</code>: <span title="">X⏎</span></ul></ul></ul></ul></ul></ul></ul><li class="t1"><code><a href="#the-p-element">p</a></code><ul><li class="t1"><code><a href="#the-b-element">b</a></code> <span class="t2" title=""><code class="attribute name">class</code>="<code class="attribute value">x</code>"</span><ul><li class="t1"><code><a href="#the-b-element">b</a></code><ul><li class="t1"><code><a href="#the-b-element">b</a></code> <span class="t2" title=""><code class="attribute name">class</code>="<code class="attribute value">x</code>"</span><ul><li class="t1"><code><a href="#the-b-element">b</a></code> <span class="t2" title=""><code class="attribute name">class</code>="<code class="attribute value">x</code>"</span><ul><li class="t1"><code><a href="#the-b-element">b</a></code><ul><li class="t3"><code>#ext</code>: <span title="">X⏎</span></ul></ul></ul></ul></ul></ul><li class="t1"><code><a href="#the-p-element">p</a></code><ul><li class="t1"><code><a href="#the-b-element">b</a></code> <span class="t2" title=""><code class="attribute name">class</code>="<code class="attribute value">x</code>"</span><ul><li class="t1"><code><a href="#the-b-element">b</a></code><ul><li class="t1"><code><a href="#the-b-element">b</a></code> <span class="t2" title=""><code class="attribute name">class</code>="<code class="attribute value">x</code>"</span><ul><li class="t1"><code><a href="#the-b-element">b</a></code> <span class="t2" title=""><code class="attribute name">class</code>="<code class="attribute value">x</code>"</span><ul><li class="t1"><code><a href="#the-b-element">b</a></code><ul><li class="t1"><code><a href="#the-b-element">b</a></code><ul><li class="t1"><code><a href="#the-b-element">b</a></code> <span class="t2" title=""><code class="attribute name">class</code>="<code class="attribute value">x</code>"<span><ul><li class="t1"><code><a href="#the-b-element">b</a></code><ul><li class="t3"><code>#text</code>: <span title="">X⏎</span></ul></ul></ul></ul></ul></ul></ul></ul></ul><li class="t1"><code><a href="#the-p-element">p</a></code><ul><li class="t3"><code>#text</code>: <span title="">X⏎</span></ul></ul></ul></ul><p>Note how the second <code><a href="#the-p-element">p</a></code> element in the markup has no
+ explicit <code><a href="#the-b-element">b</a></code> elements, but in the resulting DOM, up to
+ three of each kind of formatting element (in this case three
+ <code><a href="#the-b-element">b</a></code> elements with the class attribute, and two unadorned
+ <code><a href="#the-b-element">b</a></code> elements) get reconstructed before the element's
+ "X".</p>
+
+ <p>Also note how this means that in the final paragraph only six
+ <code><a href="#the-b-element">b</a></code> end tags are needed to completely clear the list of
+ formatting elements, even though nine <code><a href="#the-b-element">b</a></code> start tags have
+ been seen up to this point.</p>
+
+
<h3 id="serializing-html-fragments"><span class="secno">8.3 </span>Serializing HTML fragments</h3>
Received on Friday, 15 October 2010 22:57:19 UTC