Update our copy of the HTML5 spec used for performance testing to match the latest...
authoreric@webkit.org <eric@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 4 Oct 2011 20:53:09 +0000 (20:53 +0000)
committereric@webkit.org <eric@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 4 Oct 2011 20:53:09 +0000 (20:53 +0000)
https://bugs.webkit.org/show_bug.cgi?id=69364

Unreviewed.  The patch is too large to post, so landing this unreviewed. :(

The copy of the html5 spec we were using for testing was over a year old
and didn't have any of the subresources with it (we were only using it
as an HTML parsing benchmark).  I'm about to use it for testing
the full load/render time of the benchmark, so I've updated to the latest
version of the spec (now 8mb instead of 5mb) and inlined two of the
CSS files.  (Inlining the CSS was necessary to make my testing consistent
as there seems to be a race with some timer fired after CSS load.)

Increasing from 5mb to 8mb showed a similar 30% slowdown in our parser
benchmarks as expected.

* Parser/resources/html5.html:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@96640 268f45cc-cd09-0410-ab3c-d52691b4dbfc

PerformanceTests/ChangeLog
PerformanceTests/Parser/resources/html5.html

index a30736c..eccdd68 100644 (file)
@@ -1,5 +1,25 @@
 2011-10-04  Eric Seidel  <eric@webkit.org>
 
+        Update our copy of the HTML5 spec used for performance testing to match the latest version
+        https://bugs.webkit.org/show_bug.cgi?id=69364
+
+        Unreviewed.  The patch is too large to post, so landing this unreviewed. :(
+
+        The copy of the html5 spec we were using for testing was over a year old
+        and didn't have any of the subresources with it (we were only using it
+        as an HTML parsing benchmark).  I'm about to use it for testing
+        the full load/render time of the benchmark, so I've updated to the latest
+        version of the spec (now 8mb instead of 5mb) and inlined two of the
+        CSS files.  (Inlining the CSS was necessary to make my testing consistent
+        as there seems to be a race with some timer fired after CSS load.)
+
+        Increasing from 5mb to 8mb showed a similar 30% slowdown in our parser
+        benchmarks as expected.
+
+        * Parser/resources/html5.html:
+
+2011-10-04  Eric Seidel  <eric@webkit.org>
+
         Add loopsPerRun option to Parser performance test runner
         https://bugs.webkit.org/show_bug.cgi?id=69363
 
index ccb95bc..2c62039 100644 (file)
@@ -1,6 +1,6 @@
-<!DOCTYPE html><html lang=en-US-x-hixie><title>HTML5 (including next generation additions still in development)</title><script>
+<!DOCTYPE html><html lang=en-US-x-hixie><title>HTML Standard</title><script>
    var loadTimer = new Date();
-   var current_revision = "r" + "$Revision: 5097 $".substr(11);
+   var current_revision = "r" + "$Revision: 6626 $".substr(11);
    current_revision = current_revision.substr(0, current_revision.length - 2);
    var last_known_revision = current_revision;
    function getCookie(name) {
      e.setAttribute('src', 'http://www.whatwg.org/specs/web-apps/current-work/' + script + '?' + encodeURIComponent(location) + '&' + encodeURIComponent(document.referrer));
      document.body.appendChild(e);
    }
-  </script><link href=/style/specification rel=stylesheet><link href=/images/icon rel=icon><style>
+  </script>
+  <!-- BEGIN WEBKIT EDITS -->
+  <!-- Note we inline the stylesheets to help make html5-full-render.html show more consistent results. -->
+  <!-- Inlining /style/specification -->
+  <style>
+  /* WHATWG Green: sRGB #3c790a, rgb(60, 121, 10) */
+
+  html { margin: 0; padding: 0; color: black; background: white; }
+  body { margin: 0; padding: 0 1em 2em 8.5em; line-height: 1.35; color: black; background: white top left repeat-y; }
+
+  @media screen {
+    html { background: #eeeeee; }
+    body { margin-bottom: 30%; border-bottom: thin solid #3c790a; }
+  }
+
+  :link { color: #00C; background: transparent }
+  :visited { color: #609; background: transparent }
+  :link:active, :visited:active { color: #C00; background: transparent }
+  :link:hover, :visited:hover { background: #ffa; }
+  code :link, code :visited { color: inherit; }
+
+  body, th, td { font-family: sans-serif, Droid Sans Fallback; }
+
+  h1, h2, h3, h4, h5, h6 { text-align: left; text-rendering: optimiseLegibility; }
+  h1, h2, h3 { color: #3c790a; background: transparent; }
+  h1 { font: 900 200% sans-serif, Droid Sans Fallback; }
+  h1.allcaps { font: 900 350% sans-serif, Droid Sans Fallback; letter-spacing: 2px; }
+  h2 { font: 800 140% sans-serif, Droid Sans Fallback; }
+  h3 { font: 800 125% sans-serif, Droid Sans Fallback; }
+  h4 { font: 800 110% sans-serif, Droid Sans Fallback; }
+  h5 { font: 800 100% sans-serif, Droid Sans Fallback; }
+  h6 { font: 600 italic 100% sans-serif, Droid Sans Fallback; }
+
+  pre { margin-left: 2em; white-space: pre-wrap; }
+  h2 { margin: 3em 0 1em 0; }
+  h3 { margin: 2.5em 0 1em 0; }
+  h4 { margin: 2.5em 0 0.75em 0; }
+  h5, h6 { margin: 2.5em 0 1em; }
+  h1 + h2, h2 + h3, h3 + h4, h4 + h5, h5 + h6, h1 + div + h2, h2 + div + h3, h3 + div + h4, h4 + div + h5, h5 + div + h6 { margin-top: 0.5em; }
+  p { margin: 1em 0; }
+  hr { display: block; background: none; border: none; padding: 0; margin: 2em 0; height: auto; }
+  dl, dd { margin-top: 0; margin-bottom: 0; }
+  dt { margin-top: 0.75em; margin-bottom: 0.25em; clear: left; }
+  dt + dt { margin-top: 0; }
+  dd dt { margin-top: 0.25em; margin-bottom: 0; }
+  dd p, dd ol, dd ol.brief { margin-top: 0; }
+  dd dl + p { margin-top: 1em; }
+  dd table + p { margin-top: 1em; }
+  p + * > li, dd li { margin: 1em 0; }
+  dt, dfn { font-weight: bold; font-style: normal; }
+  i, em, dt dfn { font-style: italic; }
+  pre, code { font-size: inherit; font-family: monospace, Droid Sans Fallback, sans-serif; font-variant: normal; }
+  pre strong { color: black; font: inherit; font-weight: bold; background: yellow; }
+  pre em { font-weight: bolder; font-style: normal; }
+  @media screen { code { color: orangered; } }
+  var sub { vertical-align: bottom; font-size: smaller; position: relative; top: 0.1em; }
+  table { border-collapse: collapse; border-style: hidden hidden none hidden; }
+  table thead, table tbody { border-bottom: solid; }
+  table tbody th { text-align: left; }
+  table tbody th:first-child { border-left: solid; }
+  table td, table th { border-left: solid; border-right: solid; border-bottom: solid thin; vertical-align: top; padding: 0.2em; }
+  blockquote { margin: 0 0 0 2em; border: 0; padding: 0; font-style: italic; }
+  ins { background: green; color: white; /* color: green; border: solid thin lime; padding: 0.3em; line-height: 1.6em; */ text-decoration: none; }
+  del { background: maroon; color: white; /* color: maroon; border: solid thin red; padding: 0.3em; line-height: 1.6em; */ text-decoration: line-through; }
+  body ins, body del { display: block; }
+  body * ins, body * del { display: inline; }
+
+  .toc dfn, h1 dfn, h2 dfn, h3 dfn, h4 dfn, h5 dfn, h6 dfn { font: inherit; }
+  img.extra, p.overview { float: right; }
+  hr.bookmark { border: dashed 2em black; background: yellow; }
+  pre::before { font: bold 0.8em sans-serif; padding: 0.5em; position: absolute; top: auto; margin: -0.703125em 0 0 -3.75em /* 1em/0.8 + 1.5em + 0.5em*2 */ ; width: 1.5em; background: inherit; border: 0.078125em; border-style: solid none solid solid; border-radius: 1em 0 0 1em; }
+  pre.idl { border: solid 0.0625em; background: #EEEEEE; color: black; padding: 0.5em 1em; }
+  pre.idl :link, pre.idl :visited { color: inherit; background: transparent; }
+  pre.idl::before { content: 'IDL'; }
+  pre.asn { border: solid 0.0625em; background: #EEEEEE; color: black; padding: 0.5em 1em; }
+  pre.asn :link, pre.asn :visited { color: inherit; background: transparent; }
+  pre.asn::before { content: 'ASN'; }
+  pre.css { border: solid 0.0625em; background: #FFFFEE; color: black; padding: 0.5em 1em; }
+  pre.css:first-line { color: #AAAA50; }
+  pre.css::before { content: 'CSS'; }
+  dl.domintro { color: green; margin: 2em 0 2em 2em; padding: 0.5em 1em; border: none; background: #DDFFDD; }
+  hr + dl.domintro, div.impl + dl.domintro { margin-top: 2.5em; margin-bottom: 1.5em; }
+  dl.domintro dt, dl.domintro dt * { color: black; text-decoration: none; }
+  dl.domintro dd { margin: 0.5em 0 1em 2em; padding: 0; }
+  dl.domintro dd p { margin: 0.5em 0; }
+  dl.switch { padding-left: 2em; }
+  dl.switch > dt { text-indent: -1.5em; }
+  dl.switch > dt:before { content: '\21AA'; padding: 0 0.5em 0 0; display: inline-block; width: 1em; text-align: right; line-height: 0.5em; }
+  dl.triple { padding: 0 0 0 1em; }
+  dl.triple dt, dl.triple dd { margin: 0; display: inline }
+  dl.triple dt:after { content: ':'; }
+  dl.triple dd:after { content: '\A'; white-space: pre; }
+  .diff-old { text-decoration: line-through; color: silver; background: transparent; }
+  .diff-chg, .diff-new { text-decoration: underline; color: green; background: transparent; }
+  a .diff-new { border-bottom: 1px blue solid; }
+
+  h2 { page-break-before: always; }
+  h1, h2, h3, h4, h5, h6, dt { page-break-after: avoid; }
+  h1 + h2, hr + h2.no-toc { page-break-before: auto; }
+
+  p  > span:not([title=""]):not([class="XXX"]):not([class="impl"]):not([class="note"]),
+  li > span:not([title=""]):not([class="XXX"]):not([class="impl"]):not([class="note"]) { border-bottom: solid #99CC99; }
+
+  .head { margin: 0 0 1em; padding: 1em 0 0 0; display: block; }
+  .head p { margin: 0; }
+  .head h1 { margin: 0; }
+  .head h2 { margin-top: 0; }
+  .head .logo { float: right; margin: 0 1em; }
+  .head .logo img { display: block; margin: 0 0 0 auto; border: none } /* remove border from top image */
+  .head dl { margin: 1em 0; }
+  p.copyright { font-size: 0.6em; font-style: oblique; margin: 0; }
+
+  body > .toc > li { margin-top: 1em; margin-bottom: 1em; }
+  body > .toc.brief > li { margin-top: 0.35em; margin-bottom: 0.35em; }
+  body > .toc > li > * { margin-bottom: 0.5em; }
+  body > .toc > li > * > li > * { margin-bottom: 0.25em; }
+  .toc, .toc li { list-style: none; }
+
+  .brief { margin-top: 1em; margin-bottom: 1em; line-height: 1.1; }
+  .brief li { margin: 0; padding: 0; }
+  .brief li p { margin: 0; padding: 0; }
+
+  .category-list { margin-top: -0.75em; margin-bottom: 1em; line-height: 1.5; }
+  .category-list::before { content: '\21D2\A0'; font-size: 1.2em; font-weight: 900; }
+  .category-list li { display: inline; }
+  .category-list li:not(:last-child)::after { content: ', '; }
+  .category-list li > span, .category-list li > a { text-transform: lowercase; }
+  .category-list li * { text-transform: none; } /* don't affect <code> nested in <a> */
+
+  [title=WIP], [title=TBW] { background: red; color: yellow; padding: 0.1em 0.3em; border: dotted white; margin: 0 0.7em 0 0.2em; }
+  [title=SCS] { background: green; color: white; padding: 0.1em 0.3em; border-style: none dashed; margin: 0 0.7em 0 0.2em; }
+  [title=WIP] :link, [title=WIP] :visited,
+  [title=TBW] :link, [title=TBW] :visited,
+  [title=SCS] :link, [title=SCS] :visited { background: transparent; color: inherit; }
+
+  .big-issue, .XXX { color: #E50000; background: white; border: solid red; padding: 0.5em; margin: 1em 0; }
+  .big-issue > :first-child, .XXX > :first-child { margin-top: 0; }
+  p .big-issue, p .XXX { line-height: 3em; }
+  .note { color: green; background: transparent; font-family: sans-serif, Droid Sans Fallback; }
+  .warning { color: red; background: transparent; }
+  .note, .warning { font-weight: bolder; font-style: italic; }
+  .note em, .warning em, .note i, .warning i { font-style: normal; }
+  p.note, div.note { padding: 0.5em 2em; }
+  span.note { padding: 0 2em; }
+  .note p:first-child, .warning p:first-child { margin-top: 0; }
+  .note p:last-child, .warning p:last-child { margin-bottom: 0; }
+  .warning:before { font-style: normal; }
+
+  .XXX:before, .XXX:after { content: " ** "; position: absolute; left: 0; width: 8em; text-align: right; }
+  p.note:before { content: 'Note: '; }
+  p.warning:before { content: '\26A0 Warning! '; }
+
+  .bookkeeping:before { display: block; content: 'Bookkeeping details'; font-weight: bolder; font-style: italic; }
+  .bookkeeping { font-size: 0.8em; margin: 2em 0; }
+  .bookkeeping p { margin: 0.5em 2em; display: list-item; list-style: square; }
+  .bookkeeping dt { margin: 0.5em 2em 0; }
+  .bookkeeping dd { margin: 0 3em 0.5em; }
+
+  .critical { margin: 1em; border: double thick red; padding: 1em; background: #FFFFCC; }
+  .critical > :first-child { margin-top: 0; }
+
+  h4 { position: relative; z-index: 3; }
+  h4 + .element, h4 + div + .element { margin-top: -2.5em; padding-top: 2em; }
+  .element { background: #EEFFEE; color: black; margin: 0 0 1em 0.15em; padding: 0 1em 0.25em 0.75em; border-left: solid #99FF99 0.25em; position: relative; z-index: 1; }
+  .element:before { position: absolute; z-index: 2; top: 0; left: -1.15em; height: 2em; width: 0.9em; background: #EEFFEE; content: ' '; border-style: none none solid solid; border-color: #99FF99; border-width: 0.25em; }
+
+  .example { display: block; color: #222222; background: #FCFCFC; border-left: double; margin-left: 2em; padding-left: 1em; }
+  td > .example:only-child { margin: 0 0 0 0.1em; }
+
+  .hide { display: none }
+
+  body.dfnEnabled dfn { cursor: pointer; }
+  .dfnPanel {
+    display: inline;
+    position: absolute;
+    z-index: 10;
+    height: auto;
+    width: auto;
+    padding: 0.5em 0.75em;
+    font: small sans-serif, Droid Sans Fallback;
+    background: #DDDDDD;
+    color: black;
+    border: outset 0.2em;
+  }
+  .dfnPanel * { margin: 0; padding: 0; font: inherit; text-indent: 0; }
+  .dfnPanel :link, .dfnPanel :visited { color: black; }
+  .dfnPanel p { font-weight: bolder; }
+  .dfnPanel * + p { margin-top: 0.25em; }
+  .dfnPanel li { list-style-position: inside; }
+
+  @media aural {  
+    h1, h2, h3 { stress: 20; richness: 90 }
+    .hide { speak: none }
+    p.copyright { volume: x-soft; speech-rate: x-fast }
+    dt { pause-before: 20% }
+    code, pre { speak-punctuation: code } 
+  }
+
+  @media print {
+    html { font-size: 8pt; }
+    @page { margin: 1cm 1cm 1cm 1cm; }
+    @page :left {
+      @bottom-left {
+        font: 6pt sans-serif, Droid Sans Fallback;
+        content: counter(page);
+        padding-top: 0em;
+        vertical-align: top;
+      }
+    }
+    @page :right {
+      @bottom-right {
+        font: 6pt sans-serif, Droid Sans Fallback;
+        content: counter(page);
+        text-align: right;
+        vertical-align: top;
+        padding-top: 0em;
+      }
+    }
+    a[href^="#"]::after { font-size: 0.6em; vertical-align: super; padding: 0 0.15em 0 0.15em; content: "p" target-counter(attr(href), page); }
+    .toc a::after { font: inherit; vertical-align: baseline; padding: 0; content: leader('.') target-counter(attr(href), page); }
+    pre a[href^="#"]::after, blockquote a[href^="#"]::after { content: ""; padding: 0; }
+    table { font-size: smaller; }
+    :link, :visited { text-decoration: none; color: inherit; background: transparent; }
+  }
+
+  ul.domTree, ul.domTree ul { padding: 0 0 0 1em; margin: 0; }
+  ul.domTree li { padding: 0; margin: 0; list-style: none; position: relative; }
+  ul.domTree li li { list-style: none; }
+  ul.domTree li:first-child::before { position: absolute; top: 0; height: 0.6em; left: -0.75em; width: 0.5em; border-style: none none solid solid; content: ''; border-width: 0.1em; }
+  ul.domTree li:not(:last-child)::after { position: absolute; top: 0; bottom: -0.6em; left: -0.75em; width: 0.5em; border-style: none none solid solid; content: ''; border-width: 0.1em; }
+  ul.domTree span { font-style: italic; font-family: serif, Droid Sans Fallback; }
+  ul.domTree .t1 code { color: purple; font-weight: bold; }
+  ul.domTree .t2 { font-style: normal; font-family: monospace, Droid Sans Fallback; }
+  ul.domTree .t2 .name { color: black; font-weight: bold; }
+  ul.domTree .t2 .value { color: blue; font-weight: normal; }
+  ul.domTree .t3 code, .domTree .t4 code, .domTree .t5 code { color: gray; }
+  ul.domTree .t7 code, .domTree .t8 code { color: green; }
+  ul.domTree .t10 code { color: teal; }
+
+  :target {
+     background:         #ffa;
+     -moz-box-shadow:    0 0 25px #ffa;
+     -webkit-box-shadow: 0 0 150px #ffa;
+     box-shadow:         0 0 25px #ffa;
+  }
+
+  /*body:not(.statusEnabled) .head, body:not(.dfnEnabled) .head { background: bottom right url(http://hixie.ch/resources/images/spinner) no-repeat; }*/
+
+  </style>
+  <!-- END WEBKIT EDITS -->
+  <link href=/images/icon rel=icon><style>
    .proposal { border: blue solid; padding: 1em; }
    .bad, .bad *:not(.XXX) { color: gray; border-color: gray; background: transparent; }
    #updatesStatus { display: none; }
    .applies td { text-align: center; }
    .applies .yes { background: yellow; }
 
-   .matrix, .matrix td { border: none; text-align: right; }
+   .matrix, .matrix td { border: hidden; text-align: right; }
    .matrix { margin-left: 2em; }
 
    .dice-example { border-collapse: collapse; border-style: hidden solid solid hidden; border-width: thin; margin-left: 3em; }
    .dice-example caption { width: 30em; font-size: smaller; font-style: italic; padding: 0.75em 0; text-align: left; }
    .dice-example td, .dice-example th { border: solid thin; width: 1.35em; height: 1.05em; text-align: center; padding: 0; }
 
+   td.eg { border-width: thin; text-align: center; }
+
    #table-example-1 { border: solid thin; border-collapse: collapse; margin-left: 3em; }
    #table-example-1 * { font-family: "Essays1743", serif; line-height: 1.01em; }
    #table-example-1 caption { padding-bottom: 0.5em; }
 
    .details-example img { vertical-align: top; }
 
+   #base64-table {
+     white-space: nowrap;
+     font-size: 0.6em;
+     column-width: 6em;
+     column-count: 5;
+     column-gap: 1em;
+     -moz-column-width: 6em;
+     -moz-column-count: 5;
+     -moz-column-gap: 1em;
+     -webkit-column-width: 6em;
+     -webkit-column-count: 5;
+     -webkit-column-gap: 1em;
+   }
+   #base64-table thead { display: none; }
+   #base64-table * { border: none; }
+   #base64-table tbody td:first-child:after { content: ':'; }
+   #base64-table tbody td:last-child { text-align: right; }
+
    #named-character-references-table {
+     white-space: nowrap;
      font-size: 0.6em;
-     column-width: 28em;
+     column-width: 30em;
      column-gap: 1em;
-     -moz-column-width: 28em;
+     -moz-column-width: 30em;
      -moz-column-gap: 1em;
-     -webkit-column-width: 28em;
+     -webkit-column-width: 30em;
      -webkit-column-gap: 1em;
    }
+   #named-character-references-table > table > tbody > tr > td:first-child + td,
    #named-character-references-table > table > tbody > tr > td:last-child { text-align: center; }
    #named-character-references-table > table > tbody > tr > td:last-child:hover > span { position: absolute; top: auto; left: auto; margin-left: 0.5em; line-height: 1.2; font-size: 5em; border: outset; padding: 0.25em 0.5em; background: white; width: 1.25em; height: auto; text-align: center; }
+   #named-character-references-table > table > tbody > tr#entity-CounterClockwiseContourIntegral > td:first-child { font-size: 0.5em; }
+
+   .glyph.control { color: red; }
+
+   @font-face {
+     font-family: 'Essays1743';
+     src: url('http://www.whatwg.org/specs/web-apps/current-work/fonts/Essays1743.ttf');
+   }
+   @font-face {
+     font-family: 'Essays1743';
+     font-weight: bold;
+     src: url('http://www.whatwg.org/specs/web-apps/current-work/fonts/Essays1743-Bold.ttf');
+   }
+   @font-face {
+     font-family: 'Essays1743';
+     font-style: italic;
+     src: url('http://www.whatwg.org/specs/web-apps/current-work/fonts/Essays1743-Italic.ttf');
+   }
+   @font-face {
+     font-family: 'Essays1743';
+     font-style: italic;
+     font-weight: bold;
+     src: url('http://www.whatwg.org/specs/web-apps/current-work/fonts/Essays1743-BoldItalic.ttf');
+   }
 
-  </style><style>
-   .domintro:before { display: table; margin: -1em -0.5em -0.5em auto; width: auto; content: 'This box is non-normative. Implementation requirements are given below this box.'; color: black; font-style: italic; border: solid 2px; background: white; padding: 0 0.25em; }
-  </style><link href=data:text/css, id=complete rel=stylesheet title="Complete specification"><link href=data:text/css,.impl%20{%20display:%20none;%20}%0Ahtml%20{%20border:%20solid%20yellow;%20}%20.domintro:before%20{%20display:%20none;%20} id=author rel="alternate stylesheet" title="Author documentation only"><link href=data:text/css,.impl%20{%20background:%20%23FFEEEE;%20}%20.domintro:before%20{%20background:%20%23FFEEEE;%20} id=highlight rel="alternate stylesheet" title="Highlight implementation requirements"><link href=status.css rel=stylesheet><script>
+  </style>
+  <!-- BEGIN WEBKIT EDITS -->
+  <!-- Note we inline the stylesheets to help make html5-full-render.html show more consistent results. -->
+  <!-- Inlining status.css -->
+  <style>
+  .status { border: solid thin; font: 1em sans-serif; width: 7.2em; padding: 0.3em; position: absolute; z-index: 8; left: 0.3em; background: white; color: black; display: none; }
+  .status > * { font-size: 0.6em; }
+  .status.current { position: fixed; z-index: 7; top: 20px; -o-transition: 1s; -webkit-transition: 1s; } /* 20px is in the js file too */
+  .status[hidden] { display: block; opacity: 0.0; -o-transition: 0.25s; -webkit-transition: 0.25s; }
+  .status strong { display: block; border-bottom: thin solid black; margin: -0.5em -0.5em 0.2em; padding: 0.2em 0.5em 0.1em; background: black; color: white; }
+  .status p:first-child + p > a { display: block; margin: 0.1em 0 0.2em; font-weight: bold; color: black; }
+  .status.UNKNOWN strong { background: gray; color: white; }
+  .status.TBW strong { background: red; color: white; }
+  .status.WIP strong { background: red; color: white; }
+  .status.FD strong { background: orange; color: black; }
+  .status.WD strong { background: orange; color: black; }
+  .status.CWD strong { background: red; color: yellow; }
+  .status.ATRISK strong { background: red; color: yellow; }
+  .status.LC strong { background: yellow; color: black; }
+  .status.CR strong { background: lime; color: black; }
+  .status.REC strong { background: green; color: white; }
+  .status.SPLITFD strong { background: navy; color: white; }
+  .status.SPLIT/*CR*/ strong { background: navy; color: white; }
+  .status.SPLITREC strong { background: navy; color: white; }
+  .status:after { position: absolute; top: 0; left: 100%; content: '\25B6'; }
+  .status p { margin: 0; clear: both; }
+  .status p + p { overflow: hidden; }
+  .status div.implementations { height: 22px; }
+  .status div.implementations:before { display: block; content: "Implementation status:"; }
+  .status div.implementations p { font-size: 16px; float: left; margin: 0; border: 2px solid transparent; padding: 1px; text-indent: -10000px; /* well that's just silly */ width: 1em; height: 1em; background: no-repeat center center; /*background-size: 1em 1em;*/ clear: none; }
+  .status div.implementations p.IE { background-image: url(http://www.w3.org/TR/2006/WD-i18n-html-tech-lang-20060721/images/iewin.gif); background-position: center left; }
+  .status div.implementations p.Firefox { background-image: url(http://www.mozilla.org/favicon.ico); }
+  .status div.implementations p.Safari { background-image: url(http://www.webkit.org/favicon.ico); }
+  .status div.implementations p.Opera { background-image: url(http://www.opera.com/favicon.ico); }
+  .status div.implementations p.Shims { background-image: url(http://upload.wikimedia.org/wikipedia/commons/b/b7/Plugin.png); }
+  .status div.implementations p.PASS { }
+  .status div.implementations p.PARTIAL { opacity: 0.4; }
+  .status div.implementations p.NA,
+  .status div.implementations p.NONE { opacity: 0.05; }
+  .status div.implementations p.BUG { border-bottom-color: red; }
+  .status div.implementations p.CRASH { border-style: dotted; border-color: black; background-color: yellow; }
+  .status .edit-link, .status .idref { max-height: 0; opacity: 0; overflow: hidden; -o-transition: 0.25s; -webkit-transition: 0.25s; }
+  .status:hover .idref, .status:hover .edit-link { max-height: 200em; opacity: 1.0; }
+  .status .last-edit { color: silver; }
+  .status:hover { z-index: 10; }
+
+  .progress { text-decoration: blink; }
+
+  .panel { position: fixed; z-index: 9; top: 10%; left: 0; margin: auto; right: 0; width: 35em; border: double thick; background: #EEEEEE; color: black; padding: 1em; font: 1em sans-serif; max-height: 70%; overflow: auto; }
+  .panel h2 { margin: 0; text-align: center; }
+  .panel ul { min-height: 6em; }
+  .panel p { text-align: right; margin: 0; }
+  .panel form { background: transparent; color: black; margin: 0.5em -0.5em 1em; padding: 0.5em; }
+  .panel form.changed { background: yellow; color: black; }
+  .panel form p { text-align: left; margin: 1em 0 0; }
+  .panel form p:first-child { margin-top: 0; }
+  .panel form p:last-child { margin-bottom: 0; }
+  .panel form p textarea { width: 100% /* need the keyword that makes it fit to the parent here XXX */; min-height: 4em; display: block; }
+  .panel form dl { line-height: 1.5em; }
+  .panel form dt { display: inline-block; width: 20em; white-space: nowrap; text-align: right; font-weight: normal; margin: 0; padding: 0; }
+  .panel form dd { display: inline; margin: 0 0 0 1em; padding: 0; }
+  .panel form dd:after { display: block; }
+
+  body.statusEnabled .status { display: block; }
+  </style>
+  <!-- END WEBKIT EDITS -->
+  <script>
+   var startedInit = 0;
    function init() {
+     startedInit = 1;
      if (location.search == '?slow-browser')
        return;
      var configUI = document.createElement('div');
      load('reviewer.js');
      if (document.documentElement.className == "" || document.documentElement.className == "split index")
        load('toc.js');
-     load('styler.js');
      load('updater.js');
      load('dfn.js');
      load('status.js');
      if (getCookie('profile') == '1')
        document.getElementsByTagName('h2')[0].textContent += '; load: ' + (new Date() - loadTimer) + 'ms';
    }
-  </script><body class=draft onload=init()>
-
-  <header class=head id=head><p><a class=logo href=http://www.whatwg.org/ rel=home><img alt=WHATWG src=/images/logo></a></p>
-   <hgroup><h1>HTML5 (including next generation additions still in development)</h1>
-    <h2 class="no-num no-toc">Draft Standard &mdash; 18 May 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>-->
-   <dl><dt>Multiple-page version:</dt>
-    <dd><strong><a href=http://www.whatwg.org/specs/web-apps/current-work/multipage/>http://whatwg.org/html5</a></strong></dd>
+   if (document.documentElement.className == "")
+     setTimeout(function () {
+       if (!startedInit)
+         showAlert("Too slow? Try reading the multipage copy of the spec instead:", "http://whatwg.org/html");
+     }, 6000);
+  </script><body onload=init()>
+
+  <header class=head id=head><p><a class=logo href=http://www.whatwg.org/><img alt=WHATWG height=101 src=/images/logo width=101></a></p>
+   <hgroup><h1 class=allcaps>HTML</h1>
+    <h2 class="no-num no-toc">Living Standard &mdash; Last Updated 4 October 2011</h2>
+   </hgroup><dl><dt><strong>Web developer edition:</strong></dt>
+    <dd><strong><a href=http://developers.whatwg.org/>http://developers.whatwg.org/</a></strong></dd>
+    <dt>Multiple-page version:</dt>
+    <dd><a href=http://www.whatwg.org/specs/web-apps/current-work/multipage/>http://whatwg.org/html</a></dd>
     <dt>One-page version:</dt>
-    <dd><a href=http://www.whatwg.org/specs/web-apps/current-work/>http://www.whatwg.org/specs/web-apps/current-work/</a></dd>
-    <dt>PDF print versions:</dt>
-    <dd>A4: <a href=http://www.whatwg.org/specs/web-apps/current-work/html5-a4.pdf>http://www.whatwg.org/specs/web-apps/current-work/html5-a4.pdf</a></dd>
-    <dd>Letter: <a href=http://www.whatwg.org/specs/web-apps/current-work/html5-letter.pdf>http://www.whatwg.org/specs/web-apps/current-work/html5-letter.pdf</a></dd>
+    <dd><a href=http://www.whatwg.org/specs/web-apps/current-work/>http://whatwg.org/c</a></dd>
+    <dt>Participate:</dt>
+    <dd><a href=http://www.whatwg.org/mailing-list>whatwg@whatwg.org</a></dd>
+    <dd><a href=http://forums.whatwg.org/>http://forums.whatwg.org/</a></dd>
+    <dd><a href=http://wiki.whatwg.org/wiki/IRC>IRC: #whatwg on Freenode</a></dd>
+    <dt>FAQ:</dt>
+    <dd><a href=http://wiki.whatwg.org/wiki/FAQ>http://wiki.whatwg.org/wiki/FAQ</a></dd>
     <dt>Version history:</dt>
-    <dd>Twitter messages (non-editorial changes only): <a href=http://twitter.com/WHATWG>http://twitter.com/WHATWG</a></dd>
+    <dd>Twitter updates: <a href=http://twitter.com/WHATWG>http://twitter.com/WHATWG</a></dd>
     <dd>Commit-Watchers mailing list: <a href=http://lists.whatwg.org/listinfo.cgi/commit-watchers-whatwg.org>http://lists.whatwg.org/listinfo.cgi/commit-watchers-whatwg.org</a></dd>
     <dd>Interactive Web interface: <a href=http://html5.org/tools/web-apps-tracker>http://html5.org/tools/web-apps-tracker</a></dd>
     <dd>Subversion interface: <a href=http://svn.whatwg.org/>http://svn.whatwg.org/</a></dd>
     <dt>Issues:</dt>
-    <dd>To view the open bugs: <a href="http://www.w3.org/Bugs/Public/buglist.cgi?query_format=advanced&amp;short_desc_type=allwordssubstr&amp;short_desc=&amp;product=HTML+WG&amp;long_desc_type=allwordssubstr&amp;long_desc=&amp;bug_file_loc_type=allwordssubstr&amp;bug_file_loc=&amp;status_whiteboard_type=allwordssubstr&amp;status_whiteboard=&amp;keywords_type=allwords&amp;keywords=&amp;bug_status=UNCONFIRMED&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;emailassigned_to1=1&amp;emailtype1=exact&amp;email1=ian%40hixie.ch&amp;emailtype2=substring&amp;email2=&amp;bugidtype=include&amp;bug_id=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;cmdtype=doit&amp;order=Reuse+same+sort+as+last+time&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=">HTML5 bug list</a></dd>
+    <dd>To view the open bugs: <a href="http://www.w3.org/Bugs/Public/buglist.cgi?query_format=advanced&amp;short_desc_type=allwordssubstr&amp;short_desc=&amp;long_desc_type=allwordssubstr&amp;long_desc=&amp;bug_file_loc_type=allwordssubstr&amp;bug_file_loc=&amp;status_whiteboard_type=allwordssubstr&amp;status_whiteboard=&amp;keywords_type=allwords&amp;keywords=&amp;bug_status=UNCONFIRMED&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;emailassigned_to1=1&amp;emailtype1=exact&amp;email1=ian%40hixie.ch&amp;emailtype2=substring&amp;email2=&amp;bugidtype=include&amp;bug_id=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;cmdtype=doit&amp;order=Reuse+same+sort+as+last+time&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=">HTML bug list</a></dd>
     <dd>To file bugs, use the "submit review comments" feature at the bottom of the window</dd>
     <dd>To send feedback by e-mail: <a href=http://www.whatwg.org/mailing-list>whatwg@whatwg.org</a></dd>
     <dd>To view and vote on e-mail feedback: <a href=http://www.whatwg.org/issues/>http://www.whatwg.org/issues/</a></dd>
     <dt>Editor:</dt>
     <dd>Ian Hickson, Google, ian@hixie.ch</dd>
-   </dl><p class=copyright>&copy; Copyright 2004-2010 Apple Computer, Inc.,
+   </dl><p class=copyright>&copy; Copyright 2004-2011 Apple Computer, Inc.,
    Mozilla Foundation, and Opera Software ASA.</p>
    <p class=copyright>You are granted a license to use, reproduce
    and create derivative works of this document.</p>
-  </header><hr><h2 class="no-num no-toc" id=abstract>Abstract</h2>
-
-  <p>This specification evolves HTML and its related APIs to ease the
-  authoring of Web-based applications. The most recent additions
-  include a <code><a href=#devices>device</a></code> element to enable video conferencing,
-  as well as all the features added as part of the earlier HTML5
-  effort.</p>
-
-
-  <h2 class="no-num no-toc" id=status>Status of this document</h2>
-
-  <p><strong>This is a work in progress!</strong> This document is
-  changing on a daily if not hourly basis in response to comments and
-  as a general part of its development process. Comments are very
-  welcome, please send them to <a href=mailto:whatwg@whatwg.org>whatwg@whatwg.org</a>. Thank
-  you.</p>
-
-  <p><a href=http://www.whatwg.org/issues/>Outstanding feedback</a>
-  is tracked; all e-mails sent to the list above receive a reply. The
-  level of outstanding feedback is <a href=http://www.whatwg.org/issues/data.html>charted</a> to allow
-  progress to be evaluated.</p>
-
-  <p>Implementors should be aware that this specification is not
-  stable. <strong>Implementors who are not taking part in the
-  discussions are likely to find the specification changing out from
-  under them in incompatible ways.</strong> Vendors interested in
-  implementing this specification before it eventually reaches the
-  call for implementations should join the <a href=/mailing-list>WHATWG mailing list</a> and take part in the
-  discussions.</p>
-
-  <p>This specification is intended to replace (be the new version of)
-  what was previously the HTML5, HTML4, XHTML1, and DOM2 HTML
-  specifications.</p>
-
-
-
-  <h2 class="no-num no-toc" id=contents>Table of contents</h2>
+  </header><hr><h2 class="no-num no-toc" id=contents>Table of contents</h2>
   
 <!--begin-toc-->
 <ol class=toc>
  <li><a href=#introduction><span class=secno>1 </span>Introduction</a>
   <ol>
-   <li><a href=#is-this-html5?><span class=secno>1.1 </span>Is this HTML5?</a></li>
-   <li><a href=#background><span class=secno>1.2 </span>Background</a></li>
-   <li><a href=#audience><span class=secno>1.3 </span>Audience</a></li>
-   <li><a href=#scope><span class=secno>1.4 </span>Scope</a></li>
-   <li><a href=#history-1><span class=secno>1.5 </span>History</a></li>
-   <li><a href=#design-notes><span class=secno>1.6 </span>Design notes</a>
+   <li><a href=#abstract><span class=secno>1.1 </span>Where does this specification fit?</a></li>
+   <li><a href=#is-this-html5?><span class=secno>1.2 </span>Is this HTML5?</a></li>
+   <li><a href=#background><span class=secno>1.3 </span>Background</a></li>
+   <li><a href=#audience><span class=secno>1.4 </span>Audience</a></li>
+   <li><a href=#scope><span class=secno>1.5 </span>Scope</a></li>
+   <li><a href=#history-1><span class=secno>1.6 </span>History</a></li>
+   <li><a href=#design-notes><span class=secno>1.7 </span>Design notes</a>
+    <ol>
+     <li><a href=#serializability-of-script-execution><span class=secno>1.7.1 </span>Serializability of script execution</a></li>
+     <li><a href=#compliance-with-other-specifications><span class=secno>1.7.2 </span>Compliance with other specifications</a></ol></li>
+   <li><a href=#html-vs-xhtml><span class=secno>1.8 </span>HTML vs XHTML</a></li>
+   <li><a href=#structure-of-this-specification><span class=secno>1.9 </span>Structure of this specification</a>
     <ol>
-     <li><a href=#serializability-of-script-execution><span class=secno>1.6.1 </span>Serializability of script execution</a></li>
-     <li><a href=#compliance-with-other-specifications><span class=secno>1.6.2 </span>Compliance with other specifications</a></ol></li>
-   <li><a href=#html-vs-xhtml><span class=secno>1.7 </span>HTML vs XHTML</a></li>
-   <li><a href=#structure-of-this-specification><span class=secno>1.8 </span>Structure of this specification</a>
+     <li><a href=#how-to-read-this-specification><span class=secno>1.9.1 </span>How to read this specification</a></li>
+     <li><a href=#typographic-conventions><span class=secno>1.9.2 </span>Typographic conventions</a></ol></li>
+   <li><a href=#a-quick-introduction-to-html><span class=secno>1.10 </span>A quick introduction to HTML</a>
     <ol>
-     <li><a href=#how-to-read-this-specification><span class=secno>1.8.1 </span>How to read this specification</a></li>
-     <li><a href=#typographic-conventions><span class=secno>1.8.2 </span>Typographic conventions</a></ol></li>
-   <li><a href=#a-quick-introduction-to-html><span class=secno>1.9 </span>A quick introduction to HTML</a></li>
-   <li><a href=#conformance-requirements-for-authors><span class=secno>1.10 </span>Conformance requirements for authors</a>
+     <li><a href=#writing-secure-applications-with-html><span class=secno>1.10.1 </span>Writing secure applications with HTML</a></li>
+     <li><a href=#common-pitfalls-to-avoid-when-using-the-scripting-apis><span class=secno>1.10.2 </span>Common pitfalls to avoid when using the scripting APIs</a></ol></li>
+   <li><a href=#conformance-requirements-for-authors><span class=secno>1.11 </span>Conformance requirements for authors</a>
     <ol>
-     <li><a href=#presentational-markup><span class=secno>1.10.1 </span>Presentational markup</a></li>
-     <li><a href=#syntax-errors><span class=secno>1.10.2 </span>Syntax errors</a></li>
-     <li><a href=#restrictions-on-content-models-and-on-attribute-values><span class=secno>1.10.3 </span>Restrictions on content models and on attribute values</a></ol></li>
-   <li><a href=#recommended-reading><span class=secno>1.11 </span>Recommended reading</a></ol></li>
+     <li><a href=#presentational-markup><span class=secno>1.11.1 </span>Presentational markup</a></li>
+     <li><a href=#syntax-errors><span class=secno>1.11.2 </span>Syntax errors</a></li>
+     <li><a href=#restrictions-on-content-models-and-on-attribute-values><span class=secno>1.11.3 </span>Restrictions on content models and on attribute values</a></ol></li>
+   <li><a href=#recommended-reading><span class=secno>1.12 </span>Recommended reading</a></ol></li>
  <li><a href=#infrastructure><span class=secno>2 </span>Common infrastructure</a>
   <ol>
    <li><a href=#terminology><span class=secno>2.1 </span>Terminology</a>
      <li><a href=#character-encodings><span class=secno>2.1.6 </span>Character encodings</a></ol></li>
    <li><a href=#conformance-requirements><span class=secno>2.2 </span>Conformance requirements</a>
     <ol>
-     <li><a href=#dependencies><span class=secno>2.2.1 </span>Dependencies</a></li>
-     <li><a href=#extensibility><span class=secno>2.2.2 </span>Extensibility</a></ol></li>
+     <li><a href=#conformance-classes><span class=secno>2.2.1 </span>Conformance classes</a></li>
+     <li><a href=#dependencies><span class=secno>2.2.2 </span>Dependencies</a></li>
+     <li><a href=#extensibility><span class=secno>2.2.3 </span>Extensibility</a></ol></li>
    <li><a href=#case-sensitivity-and-string-comparison><span class=secno>2.3 </span>Case-sensitivity and string comparison</a></li>
-   <li><a href=#common-microsyntaxes><span class=secno>2.4 </span>Common microsyntaxes</a>
+   <li><a href=#utf-8><span class=secno>2.4 </span>UTF-8</a></li>
+   <li><a href=#common-microsyntaxes><span class=secno>2.5 </span>Common microsyntaxes</a>
     <ol>
-     <li><a href=#common-parser-idioms><span class=secno>2.4.1 </span>Common parser idioms</a></li>
-     <li><a href=#boolean-attributes><span class=secno>2.4.2 </span>Boolean attributes</a></li>
-     <li><a href=#keywords-and-enumerated-attributes><span class=secno>2.4.3 </span>Keywords and enumerated attributes</a></li>
-     <li><a href=#numbers><span class=secno>2.4.4 </span>Numbers</a>
+     <li><a href=#common-parser-idioms><span class=secno>2.5.1 </span>Common parser idioms</a></li>
+     <li><a href=#boolean-attributes><span class=secno>2.5.2 </span>Boolean attributes</a></li>
+     <li><a href=#keywords-and-enumerated-attributes><span class=secno>2.5.3 </span>Keywords and enumerated attributes</a></li>
+     <li><a href=#numbers><span class=secno>2.5.4 </span>Numbers</a>
       <ol>
-       <li><a href=#non-negative-integers><span class=secno>2.4.4.1 </span>Non-negative integers</a></li>
-       <li><a href=#signed-integers><span class=secno>2.4.4.2 </span>Signed integers</a></li>
-       <li><a href=#real-numbers><span class=secno>2.4.4.3 </span>Real numbers</a></li>
-       <li><a href=#percentages-and-dimensions><span class=secno>2.4.4.4 </span>Percentages and lengths</a></li>
-       <li><a href=#lists-of-integers><span class=secno>2.4.4.5 </span>Lists of integers</a></li>
-       <li><a href=#lists-of-dimensions><span class=secno>2.4.4.6 </span>Lists of dimensions</a></ol></li>
-     <li><a href=#dates-and-times><span class=secno>2.4.5 </span>Dates and times</a>
+       <li><a href=#non-negative-integers><span class=secno>2.5.4.1 </span>Non-negative integers</a></li>
+       <li><a href=#signed-integers><span class=secno>2.5.4.2 </span>Signed integers</a></li>
+       <li><a href=#floating-point-numbers><span class=secno>2.5.4.3 </span>Floating-point numbers</a></li>
+       <li><a href=#percentages-and-dimensions><span class=secno>2.5.4.4 </span>Percentages and lengths</a></li>
+       <li><a href=#lists-of-integers><span class=secno>2.5.4.5 </span>Lists of integers</a></li>
+       <li><a href=#lists-of-dimensions><span class=secno>2.5.4.6 </span>Lists of dimensions</a></ol></li>
+     <li><a href=#dates-and-times><span class=secno>2.5.5 </span>Dates and times</a>
       <ol>
-       <li><a href=#months><span class=secno>2.4.5.1 </span>Months</a></li>
-       <li><a href=#dates><span class=secno>2.4.5.2 </span>Dates</a></li>
-       <li><a href=#times><span class=secno>2.4.5.3 </span>Times</a></li>
-       <li><a href=#local-dates-and-times><span class=secno>2.4.5.4 </span>Local dates and times</a></li>
-       <li><a href=#global-dates-and-times><span class=secno>2.4.5.5 </span>Global dates and times</a></li>
-       <li><a href=#weeks><span class=secno>2.4.5.6 </span>Weeks</a></li>
-       <li><a href=#vaguer-moments-in-time><span class=secno>2.4.5.7 </span>Vaguer moments in time</a></ol></li>
-     <li><a href=#colors><span class=secno>2.4.6 </span>Colors</a></li>
-     <li><a href=#space-separated-tokens><span class=secno>2.4.7 </span>Space-separated tokens</a></li>
-     <li><a href=#comma-separated-tokens><span class=secno>2.4.8 </span>Comma-separated tokens</a></li>
-     <li><a href=#syntax-references><span class=secno>2.4.9 </span>References</a></li>
-     <li><a href=#mq><span class=secno>2.4.10 </span>Media queries</a></ol></li>
-   <li><a href=#urls><span class=secno>2.5 </span>URLs</a>
+       <li><a href=#months><span class=secno>2.5.5.1 </span>Months</a></li>
+       <li><a href=#dates><span class=secno>2.5.5.2 </span>Dates</a></li>
+       <li><a href=#times><span class=secno>2.5.5.3 </span>Times</a></li>
+       <li><a href=#local-dates-and-times><span class=secno>2.5.5.4 </span>Local dates and times</a></li>
+       <li><a href=#global-dates-and-times><span class=secno>2.5.5.5 </span>Global dates and times</a></li>
+       <li><a href=#weeks><span class=secno>2.5.5.6 </span>Weeks</a></li>
+       <li><a href=#vaguer-moments-in-time><span class=secno>2.5.5.7 </span>Vaguer moments in time</a></ol></li>
+     <li><a href=#colors><span class=secno>2.5.6 </span>Colors</a></li>
+     <li><a href=#space-separated-tokens><span class=secno>2.5.7 </span>Space-separated tokens</a></li>
+     <li><a href=#comma-separated-tokens><span class=secno>2.5.8 </span>Comma-separated tokens</a></li>
+     <li><a href=#syntax-references><span class=secno>2.5.9 </span>References</a></li>
+     <li><a href=#mq><span class=secno>2.5.10 </span>Media queries</a></ol></li>
+   <li><a href=#urls><span class=secno>2.6 </span>URLs</a>
     <ol>
-     <li><a href=#terminology-0><span class=secno>2.5.1 </span>Terminology</a></li>
-     <li><a href=#dynamic-changes-to-base-urls><span class=secno>2.5.2 </span>Dynamic changes to base URLs</a></li>
-     <li><a href=#interfaces-for-url-manipulation><span class=secno>2.5.3 </span>Interfaces for URL manipulation</a></ol></li>
-   <li><a href=#fetching-resources><span class=secno>2.6 </span>Fetching resources</a>
+     <li><a href=#terminology-0><span class=secno>2.6.1 </span>Terminology</a></li>
+     <li><a href=#parsing-urls><span class=secno>2.6.2 </span>Parsing URLs</a></li>
+     <li><a href=#resolving-urls><span class=secno>2.6.3 </span>Resolving URLs</a></li>
+     <li><a href=#url-manipulation-and-creation><span class=secno>2.6.4 </span>URL manipulation and creation</a></li>
+     <li><a href=#dynamic-changes-to-base-urls><span class=secno>2.6.5 </span>Dynamic changes to base URLs</a></li>
+     <li><a href=#interfaces-for-url-manipulation><span class=secno>2.6.6 </span>Interfaces for URL manipulation</a></ol></li>
+   <li><a href=#fetching-resources><span class=secno>2.7 </span>Fetching resources</a>
     <ol>
-     <li><a href=#concept-http-equivalent><span class=secno>2.6.1 </span>Protocol concepts</a></li>
-     <li><a href=#encrypted-http-and-related-security-concerns><span class=secno>2.6.2 </span>Encrypted HTTP and related security concerns</a></li>
-     <li><a href=#content-type-sniffing><span class=secno>2.6.3 </span>Determining the type of a resource</a></ol></li>
-   <li><a href=#common-dom-interfaces><span class=secno>2.7 </span>Common DOM interfaces</a>
+     <li><a href=#concept-http-equivalent><span class=secno>2.7.1 </span>Protocol concepts</a></li>
+     <li><a href=#encrypted-http-and-related-security-concerns><span class=secno>2.7.2 </span>Encrypted HTTP and related security concerns</a></li>
+     <li><a href=#content-type-sniffing><span class=secno>2.7.3 </span>Determining the type of a resource</a></li>
+     <li><a href=#extracting-encodings-from-meta-elements><span class=secno>2.7.4 </span>Extracting encodings from <code>meta</code> elements</a></li>
+     <li><a href=#cors-settings-attributes><span class=secno>2.7.5 </span>CORS settings attributes</a></li>
+     <li><a href=#cors-enabled-fetch><span class=secno>2.7.6 </span>CORS-enabled fetch</a></ol></li>
+   <li><a href=#common-dom-interfaces><span class=secno>2.8 </span>Common DOM interfaces</a>
     <ol>
-     <li><a href=#reflecting-content-attributes-in-idl-attributes><span class=secno>2.7.1 </span>Reflecting content attributes in IDL attributes</a></li>
-     <li><a href=#collections-0><span class=secno>2.7.2 </span>Collections</a>
+     <li><a href=#reflecting-content-attributes-in-idl-attributes><span class=secno>2.8.1 </span>Reflecting content attributes in IDL attributes</a></li>
+     <li><a href=#collections-0><span class=secno>2.8.2 </span>Collections</a>
       <ol>
-       <li><a href=#htmlcollection-0><span class=secno>2.7.2.1 </span>HTMLCollection</a></li>
-       <li><a href=#htmlallcollection-0><span class=secno>2.7.2.2 </span>HTMLAllCollection</a></li>
-       <li><a href=#htmlformcontrolscollection-0><span class=secno>2.7.2.3 </span>HTMLFormControlsCollection</a></li>
-       <li><a href=#htmloptionscollection-0><span class=secno>2.7.2.4 </span>HTMLOptionsCollection</a></li>
-       <li><a href=#htmlpropertiescollection-0><span class=secno>2.7.2.5 </span>HTMLPropertiesCollection</a></ol></li>
-     <li><a href=#domtokenlist-0><span class=secno>2.7.3 </span>DOMTokenList</a></li>
-     <li><a href=#domsettabletokenlist-0><span class=secno>2.7.4 </span>DOMSettableTokenList</a></li>
-     <li><a href=#safe-passing-of-structured-data><span class=secno>2.7.5 </span>Safe passing of structured data</a></li>
-     <li><a href=#domstringmap-0><span class=secno>2.7.6 </span>DOMStringMap</a></li>
-     <li><a href=#dom-feature-strings><span class=secno>2.7.7 </span>DOM feature strings</a></li>
-     <li><a href=#exceptions><span class=secno>2.7.8 </span>Exceptions</a></li>
-     <li><a href=#garbage-collection><span class=secno>2.7.9 </span>Garbage collection</a></ol></li>
-   <li><a href=#namespaces><span class=secno>2.8 </span>Namespaces</a></ol></li>
+       <li><a href=#htmlallcollection-0><span class=secno>2.8.2.1 </span>HTMLAllCollection</a></li>
+       <li><a href=#htmlformcontrolscollection-0><span class=secno>2.8.2.2 </span>HTMLFormControlsCollection</a></li>
+       <li><a href=#htmloptionscollection-0><span class=secno>2.8.2.3 </span>HTMLOptionsCollection</a></li>
+       <li><a href=#htmlpropertiescollection-0><span class=secno>2.8.2.4 </span>HTMLPropertiesCollection</a></ol></li>
+     <li><a href=#domstringmap-0><span class=secno>2.8.3 </span>DOMStringMap</a></li>
+     <li><a href=#domelementmap-0><span class=secno>2.8.4 </span>DOMElementMap</a></li>
+     <li><a href=#transferable-objects><span class=secno>2.8.5 </span>Transferable objects</a></li>
+     <li><a href=#safe-passing-of-structured-data><span class=secno>2.8.6 </span>Safe passing of structured data</a></li>
+     <li><a href=#dom-feature-strings><span class=secno>2.8.7 </span>DOM feature strings</a></li>
+     <li><a href=#garbage-collection><span class=secno>2.8.8 </span>Garbage collection</a></ol></li>
+   <li><a href=#namespaces><span class=secno>2.9 </span>Namespaces</a></ol></li>
  <li><a href=#dom><span class=secno>3 </span>Semantics, structure, and APIs of HTML documents</a>
   <ol>
    <li><a href=#documents><span class=secno>3.1 </span>Documents</a>
      <li><a href=#security-document><span class=secno>3.1.2 </span>Security</a></li>
      <li><a href=#resource-metadata-management><span class=secno>3.1.3 </span>Resource metadata management</a></li>
      <li><a href=#dom-tree-accessors><span class=secno>3.1.4 </span>DOM tree accessors</a></li>
-     <li><a href=#creating-documents><span class=secno>3.1.5 </span>Creating documents</a></ol></li>
+     <li><a href=#loading-xml-documents><span class=secno>3.1.5 </span>Loading XML documents</a></ol></li>
    <li><a href=#elements><span class=secno>3.2 </span>Elements</a>
     <ol>
      <li><a href=#semantics-0><span class=secno>3.2.1 </span>Semantics</a></li>
        <li><a href=#the-dir-attribute><span class=secno>3.2.3.5 </span>The <code>dir</code> attribute</a></li>
        <li><a href=#classes><span class=secno>3.2.3.6 </span>The <code>class</code> attribute</a></li>
        <li><a href=#the-style-attribute><span class=secno>3.2.3.7 </span>The <code>style</code> attribute</a></li>
-       <li><a href=#embedding-custom-non-visible-data><span class=secno>3.2.3.8 </span>Embedding custom non-visible data</a></ol></li>
+       <li><a href=#embedding-custom-non-visible-data-with-the-data-*-attributes><span class=secno>3.2.3.8 </span>Embedding custom non-visible data with the <code title=attr-data-*>data-*</code> attributes</a></ol></li>
      <li><a href=#element-definitions><span class=secno>3.2.4 </span>Element definitions</a>
       <ol>
        <li><a href=#attributes><span class=secno>3.2.4.1 </span>Attributes</a></ol></li>
          <li><a href=#interactive-content-0><span class=secno>3.2.5.1.7 </span>Interactive content</a></ol></li>
        <li><a href=#transparent-content-models><span class=secno>3.2.5.2 </span>Transparent content models</a></li>
        <li><a href=#paragraphs><span class=secno>3.2.5.3 </span>Paragraphs</a></ol></li>
-     <li><a href=#annotations-for-assistive-technology-products-(aria)><span class=secno>3.2.6 </span>Annotations for assistive technology products (ARIA)</a></ol></li>
-   <li><a href=#apis-in-html-documents><span class=secno>3.3 </span>APIs in HTML documents</a></li>
-   <li><a href=#interactions-with-xpath-and-xslt><span class=secno>3.4 </span>Interactions with XPath and XSLT</a></li>
-   <li><a href=#dynamic-markup-insertion><span class=secno>3.5 </span>Dynamic markup insertion</a>
+     <li><a href=#requirements-relating-to-bidirectional-algorithm-formatting-characters><span class=secno>3.2.6 </span>Requirements relating to bidirectional-algorithm formatting
+  characters</a></li>
+     <li><a href=#wai-aria><span class=secno>3.2.7 </span>WAI-ARIA</a></ol></li>
+   <li><a href=#interactions-with-xpath-and-xslt><span class=secno>3.3 </span>Interactions with XPath and XSLT</a></li>
+   <li><a href=#dynamic-markup-insertion><span class=secno>3.4 </span>Dynamic markup insertion</a>
     <ol>
-     <li><a href=#opening-the-input-stream><span class=secno>3.5.1 </span>Opening the input stream</a></li>
-     <li><a href=#closing-the-input-stream><span class=secno>3.5.2 </span>Closing the input stream</a></li>
-     <li><a href=#document.write()><span class=secno>3.5.3 </span><code title=dom-document-write>document.write()</code></a></li>
-     <li><a href=#document.writeln()><span class=secno>3.5.4 </span><code title=dom-document-writeln>document.writeln()</code></a></li>
-     <li><a href=#innerhtml><span class=secno>3.5.5 </span><code title=dom-innerHTML>innerHTML</code></a></li>
-     <li><a href=#outerhtml><span class=secno>3.5.6 </span><code title=dom-outerHTML>outerHTML</code></a></li>
-     <li><a href=#insertadjacenthtml()><span class=secno>3.5.7 </span><code title=dom-insertAdjacentHTML>insertAdjacentHTML()</code></a></ol></ol></li>
+     <li><a href=#opening-the-input-stream><span class=secno>3.4.1 </span>Opening the input stream</a></li>
+     <li><a href=#closing-the-input-stream><span class=secno>3.4.2 </span>Closing the input stream</a></li>
+     <li><a href=#document.write()><span class=secno>3.4.3 </span><code title=dom-document-write>document.write()</code></a></li>
+     <li><a href=#document.writeln()><span class=secno>3.4.4 </span><code title=dom-document-writeln>document.writeln()</code></a></ol></ol></li>
  <li><a href=#semantics><span class=secno>4 </span>The elements of HTML</a>
   <ol>
    <li><a href=#the-root-element><span class=secno>4.1 </span>The root element</a>
     <ol>
-     <li><a href=#the-html-element-0><span class=secno>4.1.1 </span>The <code>html</code> element</a></ol></li>
+     <li><a href=#the-html-element><span class=secno>4.1.1 </span>The <code>html</code> element</a></ol></li>
    <li><a href=#document-metadata><span class=secno>4.2 </span>Document metadata</a>
     <ol>
-     <li><a href=#the-head-element-0><span class=secno>4.2.1 </span>The <code>head</code> element</a></li>
-     <li><a href=#the-title-element-0><span class=secno>4.2.2 </span>The <code>title</code> element</a></li>
+     <li><a href=#the-head-element><span class=secno>4.2.1 </span>The <code>head</code> element</a></li>
+     <li><a href=#the-title-element><span class=secno>4.2.2 </span>The <code>title</code> element</a></li>
      <li><a href=#the-base-element><span class=secno>4.2.3 </span>The <code>base</code> element</a></li>
      <li><a href=#the-link-element><span class=secno>4.2.4 </span>The <code>link</code> element</a></li>
-     <li><a href=#meta><span class=secno>4.2.5 </span>The <code>meta</code> element</a>
+     <li><a href=#the-meta-element><span class=secno>4.2.5 </span>The <code>meta</code> element</a>
       <ol>
        <li><a href=#standard-metadata-names><span class=secno>4.2.5.1 </span>Standard metadata names</a></li>
        <li><a href=#other-metadata-names><span class=secno>4.2.5.2 </span>Other metadata names</a></li>
      <li><a href=#styling><span class=secno>4.2.7 </span>Styling</a></ol></li>
    <li><a href=#scripting-1><span class=secno>4.3 </span>Scripting</a>
     <ol>
-     <li><a href=#script><span class=secno>4.3.1 </span>The <code>script</code> element</a>
+     <li><a href=#the-script-element><span class=secno>4.3.1 </span>The <code>script</code> element</a>
       <ol>
        <li><a href=#scriptingLanguages><span class=secno>4.3.1.1 </span>Scripting languages</a></li>
        <li><a href=#restrictions-for-contents-of-script-elements><span class=secno>4.3.1.2 </span>Restrictions for contents of <code>script</code> elements</a></li>
-       <li><a href=#inline-documentation-for-external-scripts><span class=secno>4.3.1.3 </span>Inline documentation for external scripts</a></ol></li>
+       <li><a href=#inline-documentation-for-external-scripts><span class=secno>4.3.1.3 </span>Inline documentation for external scripts</a></li>
+       <li><a href=#scriptTagXSLT><span class=secno>4.3.1.4 </span>Interaction of <code>script</code> elements and XSLT</a></ol></li>
      <li><a href=#the-noscript-element><span class=secno>4.3.2 </span>The <code>noscript</code> element</a></ol></li>
    <li><a href=#sections><span class=secno>4.4 </span>Sections</a>
     <ol>
-     <li><a href=#the-body-element-0><span class=secno>4.4.1 </span>The <code>body</code> element</a></li>
+     <li><a href=#the-body-element><span class=secno>4.4.1 </span>The <code>body</code> element</a></li>
      <li><a href=#the-section-element><span class=secno>4.4.2 </span>The <code>section</code> element</a></li>
      <li><a href=#the-nav-element><span class=secno>4.4.3 </span>The <code>nav</code> element</a></li>
      <li><a href=#the-article-element><span class=secno>4.4.4 </span>The <code>article</code> element</a></li>
      <li><a href=#the-aside-element><span class=secno>4.4.5 </span>The <code>aside</code> element</a></li>
-     <li><a href=#the-h1,-h2,-h3,-h4,-h5,-and-h6-elements><span class=secno>4.4.6 </span>The <code>h1</code>, <code>h2</code>,
-  <code>h3</code>, <code>h4</code>,
-  <code>h5</code>, and <code>h6</code>
-  elements</a></li>
+     <li><a href=#the-h1,-h2,-h3,-h4,-h5,-and-h6-elements><span class=secno>4.4.6 </span>The <code>h1</code>, <code>h2</code>, <code>h3</code>, <code>h4</code>, <code>h5</code>, and <code>h6</code> elements</a></li>
      <li><a href=#the-hgroup-element><span class=secno>4.4.7 </span>The <code>hgroup</code> element</a></li>
      <li><a href=#the-header-element><span class=secno>4.4.8 </span>The <code>header</code> element</a></li>
      <li><a href=#the-footer-element><span class=secno>4.4.9 </span>The <code>footer</code> element</a></li>
      <li><a href=#the-em-element><span class=secno>4.6.2 </span>The <code>em</code> element</a></li>
      <li><a href=#the-strong-element><span class=secno>4.6.3 </span>The <code>strong</code> element</a></li>
      <li><a href=#the-small-element><span class=secno>4.6.4 </span>The <code>small</code> element</a></li>
-     <li><a href=#the-cite-element><span class=secno>4.6.5 </span>The <code>cite</code> element</a></li>
-     <li><a href=#the-q-element><span class=secno>4.6.6 </span>The <code>q</code> element</a></li>
-     <li><a href=#the-dfn-element><span class=secno>4.6.7 </span>The <code>dfn</code> element</a></li>
-     <li><a href=#the-abbr-element><span class=secno>4.6.8 </span>The <code>abbr</code> element</a></li>
-     <li><a href=#the-time-element><span class=secno>4.6.9 </span>The <code>time</code> element</a></li>
-     <li><a href=#the-code-element><span class=secno>4.6.10 </span>The <code>code</code> element</a></li>
-     <li><a href=#the-var-element><span class=secno>4.6.11 </span>The <code>var</code> element</a></li>
-     <li><a href=#the-samp-element><span class=secno>4.6.12 </span>The <code>samp</code> element</a></li>
-     <li><a href=#the-kbd-element><span class=secno>4.6.13 </span>The <code>kbd</code> element</a></li>
-     <li><a href=#the-sub-and-sup-elements><span class=secno>4.6.14 </span>The <code>sub</code> and <code>sup</code> elements</a></li>
-     <li><a href=#the-i-element><span class=secno>4.6.15 </span>The <code>i</code> element</a></li>
-     <li><a href=#the-b-element><span class=secno>4.6.16 </span>The <code>b</code> element</a></li>
-     <li><a href=#the-mark-element><span class=secno>4.6.17 </span>The <code>mark</code> element</a></li>
-     <li><a href=#the-ruby-element><span class=secno>4.6.18 </span>The <code>ruby</code> element</a></li>
-     <li><a href=#the-rt-element><span class=secno>4.6.19 </span>The <code>rt</code> element</a></li>
-     <li><a href=#the-rp-element><span class=secno>4.6.20 </span>The <code>rp</code> element</a></li>
-     <li><a href=#the-bdo-element><span class=secno>4.6.21 </span>The <code>bdo</code> element</a></li>
-     <li><a href=#the-span-element><span class=secno>4.6.22 </span>The <code>span</code> element</a></li>
-     <li><a href=#the-br-element><span class=secno>4.6.23 </span>The <code>br</code> element</a></li>
-     <li><a href=#the-wbr-element><span class=secno>4.6.24 </span>The <code>wbr</code> element</a></li>
-     <li><a href=#usage-summary><span class=secno>4.6.25 </span>Usage summary</a></ol></li>
+     <li><a href=#the-s-element><span class=secno>4.6.5 </span>The <code>s</code> element</a></li>
+     <li><a href=#the-cite-element><span class=secno>4.6.6 </span>The <code>cite</code> element</a></li>
+     <li><a href=#the-q-element><span class=secno>4.6.7 </span>The <code>q</code> element</a></li>
+     <li><a href=#the-dfn-element><span class=secno>4.6.8 </span>The <code>dfn</code> element</a></li>
+     <li><a href=#the-abbr-element><span class=secno>4.6.9 </span>The <code>abbr</code> element</a></li>
+     <li><a href=#the-time-element><span class=secno>4.6.10 </span>The <code>time</code> element</a></li>
+     <li><a href=#the-code-element><span class=secno>4.6.11 </span>The <code>code</code> element</a></li>
+     <li><a href=#the-var-element><span class=secno>4.6.12 </span>The <code>var</code> element</a></li>
+     <li><a href=#the-samp-element><span class=secno>4.6.13 </span>The <code>samp</code> element</a></li>
+     <li><a href=#the-kbd-element><span class=secno>4.6.14 </span>The <code>kbd</code> element</a></li>
+     <li><a href=#the-sub-and-sup-elements><span class=secno>4.6.15 </span>The <code>sub</code> and <code>sup</code> elements</a></li>
+     <li><a href=#the-i-element><span class=secno>4.6.16 </span>The <code>i</code> element</a></li>
+     <li><a href=#the-b-element><span class=secno>4.6.17 </span>The <code>b</code> element</a></li>
+     <li><a href=#the-u-element><span class=secno>4.6.18 </span>The <code>u</code> element</a></li>
+     <li><a href=#the-mark-element><span class=secno>4.6.19 </span>The <code>mark</code> element</a></li>
+     <li><a href=#the-ruby-element><span class=secno>4.6.20 </span>The <code>ruby</code> element</a></li>
+     <li><a href=#the-rt-element><span class=secno>4.6.21 </span>The <code>rt</code> element</a></li>
+     <li><a href=#the-rp-element><span class=secno>4.6.22 </span>The <code>rp</code> element</a></li>
+     <li><a href=#the-bdi-element><span class=secno>4.6.23 </span>The <code>bdi</code> element</a></li>
+     <li><a href=#the-bdo-element><span class=secno>4.6.24 </span>The <code>bdo</code> element</a></li>
+     <li><a href=#the-span-element><span class=secno>4.6.25 </span>The <code>span</code> element</a></li>
+     <li><a href=#the-br-element><span class=secno>4.6.26 </span>The <code>br</code> element</a></li>
+     <li><a href=#the-wbr-element><span class=secno>4.6.27 </span>The <code>wbr</code> element</a></li>
+     <li><a href=#usage-summary><span class=secno>4.6.28 </span>Usage summary</a></ol></li>
    <li><a href=#edits><span class=secno>4.7 </span>Edits</a>
     <ol>
      <li><a href=#the-ins-element><span class=secno>4.7.1 </span>The <code>ins</code> element</a></li>
      <li><a href=#the-del-element><span class=secno>4.7.2 </span>The <code>del</code> element</a></li>
      <li><a href=#attributes-common-to-ins-and-del-elements><span class=secno>4.7.3 </span>Attributes common to <code>ins</code> and <code>del</code> elements</a></li>
      <li><a href=#edits-and-paragraphs><span class=secno>4.7.4 </span>Edits and paragraphs</a></li>
-     <li><a href=#edits-and-lists><span class=secno>4.7.5 </span>Edits and lists</a></ol></li>
+     <li><a href=#edits-and-lists><span class=secno>4.7.5 </span>Edits and lists</a></li>
+     <li><a href=#edits-and-tables><span class=secno>4.7.6 </span>Edits and tables</a></ol></li>
    <li><a href=#embedded-content-1><span class=secno>4.8 </span>Embedded content</a>
     <ol>
      <li><a href=#the-img-element><span class=secno>4.8.1 </span>The <code>img</code> element</a>
       <ol>
        <li><a href=#alt><span class=secno>4.8.1.1 </span>Requirements for providing text to act as an alternative for images</a>
         <ol>
-         <li><a href=#a-link-or-button-containing-nothing-but-the-image><span class=secno>4.8.1.1.1 </span>A link or button containing nothing but the image</a></li>
-         <li><a href=#a-phrase-or-paragraph-with-an-alternative-graphical-representation:-charts,-diagrams,-graphs,-maps,-illustrations><span class=secno>4.8.1.1.2 </span>A phrase or paragraph with an alternative graphical representation: charts, diagrams, graphs, maps, illustrations</a></li>
-         <li><a href=#a-short-phrase-or-label-with-an-alternative-graphical-representation:-icons,-logos><span class=secno>4.8.1.1.3 </span>A short phrase or label with an alternative graphical representation: icons, logos</a></li>
-         <li><a href=#text-that-has-been-rendered-to-a-graphic-for-typographical-effect><span class=secno>4.8.1.1.4 </span>Text that has been rendered to a graphic for typographical effect</a></li>
-         <li><a href=#a-graphical-representation-of-some-of-the-surrounding-text><span class=secno>4.8.1.1.5 </span>A graphical representation of some of the surrounding text</a></li>
-         <li><a href="#a-purely-decorative-image-that-doesn't-add-any-information"><span class=secno>4.8.1.1.6 </span>A purely decorative image that doesn't add any information</a></li>
-         <li><a href=#a-group-of-images-that-form-a-single-larger-picture-with-no-links><span class=secno>4.8.1.1.7 </span>A group of images that form a single larger picture with no links</a></li>
-         <li><a href=#a-group-of-images-that-form-a-single-larger-picture-with-links><span class=secno>4.8.1.1.8 </span>A group of images that form a single larger picture with links</a></li>
-         <li><a href=#a-key-part-of-the-content><span class=secno>4.8.1.1.9 </span>A key part of the content</a></li>
-         <li><a href=#an-image-not-intended-for-the-user><span class=secno>4.8.1.1.10 </span>An image not intended for the user</a></li>
-         <li><a href=#an-image-in-an-e-mail-or-private-document-intended-for-a-specific-person-who-is-known-to-be-able-to-view-images><span class=secno>4.8.1.1.11 </span>An image in an e-mail or private document intended for a specific person who is known to be able to view images</a></li>
-         <li><a href=#general-guidelines><span class=secno>4.8.1.1.12 </span>General guidelines</a></li>
+         <li><a href=#general-guidelines><span class=secno>4.8.1.1.1 </span>General guidelines</a></li>
+         <li><a href=#a-link-or-button-containing-nothing-but-the-image><span class=secno>4.8.1.1.2 </span>A link or button containing nothing but the image</a></li>
+         <li><a href=#a-phrase-or-paragraph-with-an-alternative-graphical-representation:-charts,-diagrams,-graphs,-maps,-illustrations><span class=secno>4.8.1.1.3 </span>A phrase or paragraph with an alternative graphical representation: charts, diagrams, graphs, maps, illustrations</a></li>
+         <li><a href=#a-short-phrase-or-label-with-an-alternative-graphical-representation:-icons,-logos><span class=secno>4.8.1.1.4 </span>A short phrase or label with an alternative graphical representation: icons, logos</a></li>
+         <li><a href=#text-that-has-been-rendered-to-a-graphic-for-typographical-effect><span class=secno>4.8.1.1.5 </span>Text that has been rendered to a graphic for typographical effect</a></li>
+         <li><a href=#a-graphical-representation-of-some-of-the-surrounding-text><span class=secno>4.8.1.1.6 </span>A graphical representation of some of the surrounding text</a></li>
+         <li><a href="#a-purely-decorative-image-that-doesn't-add-any-information"><span class=secno>4.8.1.1.7 </span>A purely decorative image that doesn't add any information</a></li>
+         <li><a href=#a-group-of-images-that-form-a-single-larger-picture-with-no-links><span class=secno>4.8.1.1.8 </span>A group of images that form a single larger picture with no links</a></li>
+         <li><a href=#a-group-of-images-that-form-a-single-larger-picture-with-links><span class=secno>4.8.1.1.9 </span>A group of images that form a single larger picture with links</a></li>
+         <li><a href=#a-key-part-of-the-content><span class=secno>4.8.1.1.10 </span>A key part of the content</a></li>
+         <li><a href=#an-image-not-intended-for-the-user><span class=secno>4.8.1.1.11 </span>An image not intended for the user</a></li>
+         <li><a href=#an-image-in-an-e-mail-or-private-document-intended-for-a-specific-person-who-is-known-to-be-able-to-view-images><span class=secno>4.8.1.1.12 </span>An image in an e-mail or private document intended for a specific person who is known to be able to view images</a></li>
          <li><a href=#guidance-for-markup-generators><span class=secno>4.8.1.1.13 </span>Guidance for markup generators</a></li>
          <li><a href=#guidance-for-conformance-checkers><span class=secno>4.8.1.1.14 </span>Guidance for conformance checkers</a></ol></ol></li>
      <li><a href=#the-iframe-element><span class=secno>4.8.2 </span>The <code>iframe</code> element</a></li>
      <li><a href=#the-embed-element><span class=secno>4.8.3 </span>The <code>embed</code> element</a></li>
      <li><a href=#the-object-element><span class=secno>4.8.4 </span>The <code>object</code> element</a></li>
      <li><a href=#the-param-element><span class=secno>4.8.5 </span>The <code>param</code> element</a></li>
-     <li><a href=#video><span class=secno>4.8.6 </span>The <code>video</code> element</a></li>
-     <li><a href=#audio><span class=secno>4.8.7 </span>The <code>audio</code> element</a></li>
+     <li><a href=#the-video-element><span class=secno>4.8.6 </span>The <code>video</code> element</a></li>
+     <li><a href=#the-audio-element><span class=secno>4.8.7 </span>The <code>audio</code> element</a></li>
      <li><a href=#the-source-element><span class=secno>4.8.8 </span>The <code>source</code> element</a></li>
      <li><a href=#the-track-element><span class=secno>4.8.9 </span>The <code>track</code> element</a></li>
      <li><a href=#media-elements><span class=secno>4.8.10 </span>Media elements</a>
        <li><a href=#network-states><span class=secno>4.8.10.4 </span>Network states</a></li>
        <li><a href=#loading-the-media-resource><span class=secno>4.8.10.5 </span>Loading the media resource</a></li>
        <li><a href=#offsets-into-the-media-resource><span class=secno>4.8.10.6 </span>Offsets into the media resource</a></li>
-       <li><a href=#the-ready-states><span class=secno>4.8.10.7 </span>The ready states</a></li>
+       <li><a href=#ready-states><span class=secno>4.8.10.7 </span>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=#media-resources-with-multiple-media-tracks><span class=secno>4.8.10.10 </span>Media resources with multiple media 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>
-         <li><a href=#sourcing-out-of-band-timed-tracks><span class=secno>4.8.10.10.3 </span>Sourcing out-of-band timed tracks</a></li>
-         <li><a href=#guidelines-for-exposing-cues-in-various-formats-as-timed-track-cues><span class=secno>4.8.10.10.4 </span>Guidelines for exposing cues in various formats as
-  timed track cues</a></li>
-         <li><a href=#timed-track-api><span class=secno>4.8.10.10.5 </span>Timed track API</a></li>
-         <li><a href=#cue-events><span class=secno>4.8.10.10.6 </span>Event definitions</a></ol></li>
-       <li><a href=#websrt><span class=secno>4.8.10.11 </span>WebSRT</a>
+         <li><a href=#audiotracklist-and-videotracklist-objects><span class=secno>4.8.10.10.1 </span><code>AudioTrackList</code> and <code>VideoTrackList</code> objects</a></li>
+         <li><a href=#selecting-specific-audio-and-video-tracks-declaratively><span class=secno>4.8.10.10.2 </span>Selecting specific audio and video tracks declaratively</a></ol></li>
+       <li><a href=#synchronising-multiple-media-elements><span class=secno>4.8.10.11 </span>Synchronising multiple media elements</a>
         <ol>
-         <li><a href=#syntax-0><span class=secno>4.8.10.11.1 </span>Syntax</a></li>
-         <li><a href=#parsing-0><span class=secno>4.8.10.11.2 </span>Parsing</a></ol></li>
-       <li><a href=#user-interface><span class=secno>4.8.10.12 </span>User interface</a></li>
-       <li><a href=#time-ranges><span class=secno>4.8.10.13 </span>Time ranges</a></li>
-       <li><a href=#mediaevents><span class=secno>4.8.10.14 </span>Event summary</a></li>
-       <li><a href=#security-and-privacy-considerations><span class=secno>4.8.10.15 </span>Security and privacy considerations</a></ol></li>
+         <li><a href=#introduction-0><span class=secno>4.8.10.11.1 </span>Introduction</a></li>
+         <li><a href=#media-controllers><span class=secno>4.8.10.11.2 </span>Media controllers</a></li>
+         <li><a href=#assigning-a-media-controller-declaratively><span class=secno>4.8.10.11.3 </span>Assigning a media controller declaratively</a></ol></li>
+       <li><a href=#timed-text-tracks><span class=secno>4.8.10.12 </span>Timed text tracks</a>
+        <ol>
+         <li><a href=#text-track-model><span class=secno>4.8.10.12.1 </span>Text track model</a></li>
+         <li><a href=#sourcing-in-band-text-tracks><span class=secno>4.8.10.12.2 </span>Sourcing in-band text tracks</a></li>
+         <li><a href=#sourcing-out-of-band-text-tracks><span class=secno>4.8.10.12.3 </span>Sourcing out-of-band text tracks</a></li>
+         <li><a href=#guidelines-for-exposing-cues-in-various-formats-as-text-track-cues><span class=secno>4.8.10.12.4 </span>Guidelines for exposing cues in various formats as
+  text track cues</a></li>
+         <li><a href=#text-track-api><span class=secno>4.8.10.12.5 </span>Text track API</a></li>
+         <li><a href=#text-tracks-describing-chapters><span class=secno>4.8.10.12.6 </span>Text tracks describing chapters</a></li>
+         <li><a href=#cue-events><span class=secno>4.8.10.12.7 </span>Event definitions</a></ol></li>
+       <li><a href=#webvtt-0><span class=secno>4.8.10.13 </span>WebVTT</a>
+        <ol>
+         <li><a href=#introduction-1><span class=secno>4.8.10.13.1 </span>Introduction</a></li>
+         <li><a href=#syntax-0><span class=secno>4.8.10.13.2 </span>Syntax</a></li>
+         <li><a href=#parsing-0><span class=secno>4.8.10.13.3 </span>Parsing</a></li>
+         <li><a href=#webvtt-cue-text-parsing-rules><span class=secno>4.8.10.13.4 </span>WebVTT cue text parsing rules</a></li>
+         <li><a href=#webvtt-cue-text-dom-construction-rules><span class=secno>4.8.10.13.5 </span>WebVTT cue text DOM construction rules</a></ol></li>
+       <li><a href=#user-interface><span class=secno>4.8.10.14 </span>User interface</a></li>
+       <li><a href=#time-ranges><span class=secno>4.8.10.15 </span>Time ranges</a></li>
+       <li><a href=#event-definitions><span class=secno>4.8.10.16 </span>Event definitions</a></li>
+       <li><a href=#mediaevents><span class=secno>4.8.10.17 </span>Event summary</a></li>
+       <li><a href=#security-and-privacy-considerations><span class=secno>4.8.10.18 </span>Security and privacy considerations</a></li>
+       <li><a href=#best-practices-for-authors-using-media-elements><span class=secno>4.8.10.19 </span>Best practices for authors using media elements</a></li>
+       <li><a href=#best-practices-for-implementors-of-media-elements><span class=secno>4.8.10.20 </span>Best practices for implementors of media elements</a></ol></li>
      <li><a href=#the-canvas-element><span class=secno>4.8.11 </span>The <code>canvas</code> element</a>
       <ol>
        <li><a href=#2dcontext><span class=secno>4.8.11.1 </span>The 2D context</a>
          <li><a href=#shadows><span class=secno>4.8.11.1.6 </span>Shadows</a></li>
          <li><a href=#simple-shapes-(rectangles)><span class=secno>4.8.11.1.7 </span>Simple shapes (rectangles)</a></li>
          <li><a href=#complex-shapes-(paths)><span class=secno>4.8.11.1.8 </span>Complex shapes (paths)</a></li>
-         <li><a href=#focus-management-0><span class=secno>4.8.11.1.9 </span>Focus management</a></li>
-         <li><a href=#text-0><span class=secno>4.8.11.1.10 </span>Text</a></li>
-         <li><a href=#images><span class=secno>4.8.11.1.11 </span>Images</a></li>
-         <li><a href=#pixel-manipulation><span class=secno>4.8.11.1.12 </span>Pixel manipulation</a></li>
-         <li><a href=#drawing-model><span class=secno>4.8.11.1.13 </span>Drawing model</a></li>
+         <li><a href=#text-0><span class=secno>4.8.11.1.9 </span>Text</a></li>
+         <li><a href=#images><span class=secno>4.8.11.1.10 </span>Images</a></li>
+         <li><a href=#pixel-manipulation><span class=secno>4.8.11.1.11 </span>Pixel manipulation</a></li>
+         <li><a href=#drawing-model><span class=secno>4.8.11.1.12 </span>Drawing model</a></li>
+         <li><a href=#best-practices><span class=secno>4.8.11.1.13 </span>Best practices</a></li>
          <li><a href=#examples><span class=secno>4.8.11.1.14 </span>Examples</a></ol></li>
        <li><a href=#color-spaces-and-color-correction><span class=secno>4.8.11.2 </span>Color spaces and color correction</a></li>
        <li><a href=#security-with-canvas-elements><span class=secno>4.8.11.3 </span>Security with <code>canvas</code> elements</a></ol></li>
      <li><a href=#dimension-attributes><span class=secno>4.8.17 </span>Dimension attributes</a></ol></li>
    <li><a href=#tabular-data><span class=secno>4.9 </span>Tabular data</a>
     <ol>
-     <li><a href=#the-table-element><span class=secno>4.9.1 </span>The <code>table</code> element</a></li>
+     <li><a href=#the-table-element><span class=secno>4.9.1 </span>The <code>table</code> element</a>
+      <ol>
+       <li><a href=#table-descriptions-techniques><span class=secno>4.9.1.1 </span>Techniques for describing tables</a></li>
+       <li><a href=#table-layout-techniques><span class=secno>4.9.1.2 </span>Techniques for table layout</a></ol></li>
      <li><a href=#the-caption-element><span class=secno>4.9.2 </span>The <code>caption</code> element</a></li>
      <li><a href=#the-colgroup-element><span class=secno>4.9.3 </span>The <code>colgroup</code> element</a></li>
      <li><a href=#the-col-element><span class=secno>4.9.4 </span>The <code>col</code> element</a></li>
      <li><a href=#examples-0><span class=secno>4.9.13 </span>Examples</a></ol></li>
    <li><a href=#forms><span class=secno>4.10 </span>Forms</a>
     <ol>
-     <li><a href=#introduction-0><span class=secno>4.10.1 </span>Introduction</a>
+     <li><a href=#introduction-2><span class=secno>4.10.1 </span>Introduction</a>
       <ol>
        <li><a href="#writing-a-form's-user-interface"><span class=secno>4.10.1.1 </span>Writing a form's user interface</a></li>
        <li><a href=#implementing-the-server-side-processing-for-a-form><span class=secno>4.10.1.2 </span>Implementing the server-side processing for a form</a></li>
        <li><a href=#common-input-element-attributes><span class=secno>4.10.7.2 </span>Common <code>input</code> element attributes</a>
         <ol>
          <li><a href=#the-autocomplete-attribute><span class=secno>4.10.7.2.1 </span>The <code title=attr-input-autocomplete>autocomplete</code> attribute</a></li>
-         <li><a href=#the-list-attribute><span class=secno>4.10.7.2.2 </span>The <code title=attr-input-list>list</code> attribute</a></li>
-         <li><a href=#the-readonly-attribute><span class=secno>4.10.7.2.3 </span>The <code title=attr-input-readonly>readonly</code> attribute</a></li>
-         <li><a href=#the-size-attribute><span class=secno>4.10.7.2.4 </span>The <code title=attr-input-size>size</code> attribute</a></li>
-         <li><a href=#the-required-attribute><span class=secno>4.10.7.2.5 </span>The <code title=attr-input-required>required</code> attribute</a></li>
-         <li><a href=#the-multiple-attribute><span class=secno>4.10.7.2.6 </span>The <code title=attr-input-multiple>multiple</code> attribute</a></li>
-         <li><a href=#the-maxlength-attribute><span class=secno>4.10.7.2.7 </span>The <code title=attr-input-maxlength>maxlength</code> attribute</a></li>
-         <li><a href=#the-pattern-attribute><span class=secno>4.10.7.2.8 </span>The <code title=attr-input-pattern>pattern</code> attribute</a></li>
-         <li><a href=#the-min-and-max-attributes><span class=secno>4.10.7.2.9 </span>The <code title=attr-input-min>min</code> and <code title=attr-input-max>max</code> attributes</a></li>
-         <li><a href=#the-step-attribute><span class=secno>4.10.7.2.10 </span>The <code title=attr-input-step>step</code> attribute</a></li>
-         <li><a href=#the-placeholder-attribute><span class=secno>4.10.7.2.11 </span>The <code title=attr-input-placeholder>placeholder</code> attribute</a></ol></li>
+         <li><a href=#the-dirname-attribute><span class=secno>4.10.7.2.2 </span>The <code title=attr-input-dirname>dirname</code> attribute</a></li>
+         <li><a href=#the-list-attribute><span class=secno>4.10.7.2.3 </span>The <code title=attr-input-list>list</code> attribute</a></li>
+         <li><a href=#the-readonly-attribute><span class=secno>4.10.7.2.4 </span>The <code title=attr-input-readonly>readonly</code> attribute</a></li>
+         <li><a href=#the-size-attribute><span class=secno>4.10.7.2.5 </span>The <code title=attr-input-size>size</code> attribute</a></li>
+         <li><a href=#the-required-attribute><span class=secno>4.10.7.2.6 </span>The <code title=attr-input-required>required</code> attribute</a></li>
+         <li><a href=#the-multiple-attribute><span class=secno>4.10.7.2.7 </span>The <code title=attr-input-multiple>multiple</code> attribute</a></li>
+         <li><a href=#the-maxlength-attribute><span class=secno>4.10.7.2.8 </span>The <code title=attr-input-maxlength>maxlength</code> attribute</a></li>
+         <li><a href=#the-pattern-attribute><span class=secno>4.10.7.2.9 </span>The <code title=attr-input-pattern>pattern</code> attribute</a></li>
+         <li><a href=#the-min-and-max-attributes><span class=secno>4.10.7.2.10 </span>The <code title=attr-input-min>min</code> and <code title=attr-input-max>max</code> attributes</a></li>
+         <li><a href=#the-step-attribute><span class=secno>4.10.7.2.11 </span>The <code title=attr-input-step>step</code> attribute</a></li>
+         <li><a href=#the-placeholder-attribute><span class=secno>4.10.7.2.12 </span>The <code title=attr-input-placeholder>placeholder</code> attribute</a></ol></li>
        <li><a href=#common-input-element-apis><span class=secno>4.10.7.3 </span>Common <code>input</code> element APIs</a></li>
        <li><a href=#common-event-behaviors><span class=secno>4.10.7.4 </span>Common event behaviors</a></ol></li>
      <li><a href=#the-button-element><span class=secno>4.10.8 </span>The <code>button</code> element</a></li>
        <li><a href="#a-form-control's-value"><span class=secno>4.10.19.3 </span>A form control's value</a></li>
        <li><a href=#autofocusing-a-form-control><span class=secno>4.10.19.4 </span>Autofocusing a form control</a></li>
        <li><a href=#limiting-user-input-length><span class=secno>4.10.19.5 </span>Limiting user input length</a></li>
-       <li><a href=#form-submission-0><span class=secno>4.10.19.6 </span>Form submission</a></ol></li>
-     <li><a href=#constraints><span class=secno>4.10.20 </span>Constraints</a>
+       <li><a href=#form-submission-0><span class=secno>4.10.19.6 </span>Form submission</a></li>
+       <li><a href=#submitting-element-directionality><span class=secno>4.10.19.7 </span>Submitting element directionality</a></ol></li>
+     <li><a href=#textFieldSelection><span class=secno>4.10.20 </span>APIs for the text field selections</a></li>
+     <li><a href=#constraints><span class=secno>4.10.21 </span>Constraints</a>
       <ol>
-       <li><a href=#definitions><span class=secno>4.10.20.1 </span>Definitions</a></li>
-       <li><a href=#constraint-validation><span class=secno>4.10.20.2 </span>Constraint validation</a></li>
-       <li><a href=#the-constraint-validation-api><span class=secno>4.10.20.3 </span>The constraint validation API</a></li>
-       <li><a href=#security-forms><span class=secno>4.10.20.4 </span>Security</a></ol></li>
-     <li><a href=#form-submission><span class=secno>4.10.21 </span>Form submission</a>
+       <li><a href=#definitions><span class=secno>4.10.21.1 </span>Definitions</a></li>
+       <li><a href=#constraint-validation><span class=secno>4.10.21.2 </span>Constraint validation</a></li>
+       <li><a href=#the-constraint-validation-api><span class=secno>4.10.21.3 </span>The constraint validation API</a></li>
+       <li><a href=#security-forms><span class=secno>4.10.21.4 </span>Security</a></ol></li>
+     <li><a href=#form-submission><span class=secno>4.10.22 </span>Form submission</a>
       <ol>
-       <li><a href=#introduction-1><span class=secno>4.10.21.1 </span>Introduction</a></li>
-       <li><a href=#implicit-submission><span class=secno>4.10.21.2 </span>Implicit submission</a></li>
-       <li><a href=#form-submission-algorithm><span class=secno>4.10.21.3 </span>Form submission algorithm</a></li>
-       <li><a href=#url-encoded-form-data><span class=secno>4.10.21.4 </span>URL-encoded form data</a></li>
-       <li><a href=#multipart-form-data><span class=secno>4.10.21.5 </span>Multipart form data</a></li>
-       <li><a href=#plain-text-form-data><span class=secno>4.10.21.6 </span>Plain text form data</a></ol></li>
-     <li><a href=#resetting-a-form><span class=secno>4.10.22 </span>Resetting a form</a></li>
-     <li><a href=#event-dispatch><span class=secno>4.10.23 </span>Event dispatch</a></ol></li>
+       <li><a href=#introduction-3><span class=secno>4.10.22.1 </span>Introduction</a></li>
+       <li><a href=#implicit-submission><span class=secno>4.10.22.2 </span>Implicit submission</a></li>
+       <li><a href=#form-submission-algorithm><span class=secno>4.10.22.3 </span>Form submission algorithm</a></li>
+       <li><a href=#constructing-form-data-set><span class=secno>4.10.22.4 </span>Constructing the form data set</a></li>
+       <li><a href=#url-encoded-form-data><span class=secno>4.10.22.5 </span>URL-encoded form data</a></li>
+       <li><a href=#multipart-form-data><span class=secno>4.10.22.6 </span>Multipart form data</a></li>
+       <li><a href=#plain-text-form-data><span class=secno>4.10.22.7 </span>Plain text form data</a></ol></li>
+     <li><a href=#resetting-a-form><span class=secno>4.10.23 </span>Resetting a form</a></ol></li>
    <li><a href=#interactive-elements><span class=secno>4.11 </span>Interactive elements</a>
     <ol>
      <li><a href=#the-details-element><span class=secno>4.11.1 </span>The <code>details</code> element</a></li>
      <li><a href=#the-summary-element><span class=secno>4.11.2 </span>The <code>summary</code> element</a></li>
-     <li><a href=#the-command><span class=secno>4.11.3 </span>The <code>command</code> element</a></li>
-     <li><a href=#menus><span class=secno>4.11.4 </span>The <code>menu</code> element</a>
+     <li><a href=#the-command-element><span class=secno>4.11.3 </span>The <code>command</code> element</a></li>
+     <li><a href=#the-menu-element><span class=secno>4.11.4 </span>The <code>menu</code> element</a>
       <ol>
        <li><a href=#menus-intro><span class=secno>4.11.4.1 </span>Introduction</a></li>
        <li><a href=#building-menus-and-toolbars><span class=secno>4.11.4.2 </span>Building menus and toolbars</a></li>
   a command</a></li>
        <li><a href=#using-the-accesskey-attribute-on-a-label-element-to-define-a-command><span class=secno>4.11.5.6 </span>Using the <code title=attr-accesskey>accesskey</code> attribute on a <code>label</code> element to define a command</a></li>
        <li><a href=#using-the-accesskey-attribute-on-a-legend-element-to-define-a-command><span class=secno>4.11.5.7 </span>Using the <code title=attr-accesskey>accesskey</code> attribute on a <code>legend</code> element to define a command</a></li>
-       <li><a href=#using-the-accesskey-attribute-to-define-a-command-on-other-elements><span class=secno>4.11.5.8 </span>Using the <code title=attr-accesskey>accesskey</code> attribute to define a command on other elements</a></ol></li>
-     <li><a href=#devices><span class=secno>4.11.6 </span>The <code>device</code> element</a>
-      <ol>
-       <li><a href=#stream-api><span class=secno>4.11.6.1 </span>Stream API</a></li>
-       <li><a href=#peer-to-peer-connections><span class=secno>4.11.6.2 </span>Peer-to-peer connections</a></ol></ol></li>
+       <li><a href=#using-the-accesskey-attribute-to-define-a-command-on-other-elements><span class=secno>4.11.5.8 </span>Using the <code title=attr-accesskey>accesskey</code> attribute to define a command on other elements</a></ol></ol></li>
    <li><a href=#links><span class=secno>4.12 </span>Links</a>
     <ol>
-     <li><a href=#hyperlink-elements><span class=secno>4.12.1 </span>Hyperlink elements</a></li>
-     <li><a href=#following-hyperlinks><span class=secno>4.12.2 </span>Following hyperlinks</a>
+     <li><a href=#introduction-4><span class=secno>4.12.1 </span>Introduction</a></li>
+     <li><a href=#links-created-by-a-and-area-elements><span class=secno>4.12.2 </span>Links created by <code>a</code> and <code>area</code> elements</a></li>
+     <li><a href=#following-hyperlinks-0><span class=secno>4.12.3 </span>Following hyperlinks</a></li>
+     <li><a href=#downloading-resources><span class=secno>4.12.4 </span>Downloading resources</a>
       <ol>
-       <li><a href=#hyperlink-auditing><span class=secno>4.12.2.1 </span>Hyperlink auditing</a></ol></li>
-     <li><a href=#linkTypes><span class=secno>4.12.3 </span>Link types</a>
+       <li><a href=#hyperlink-auditing><span class=secno>4.12.4.1 </span>Hyperlink auditing</a></ol></li>
+     <li><a href=#linkTypes><span class=secno>4.12.5 </span>Link types</a>
       <ol>
-       <li><a href=#link-type-alternate><span class=secno>4.12.3.1 </span>Link type "<code>alternate</code>"</a></li>
-       <li><a href=#link-type-archives><span class=secno>4.12.3.2 </span>Link type "<code>archives</code>"</a></li>
-       <li><a href=#link-type-author><span class=secno>4.12.3.3 </span>Link type "<code>author</code>"</a></li>
-       <li><a href=#link-type-bookmark><span class=secno>4.12.3.4 </span>Link type "<code>bookmark</code>"</a></li>
-       <li><a href=#link-type-external><span class=secno>4.12.3.5 </span>Link type "<code>external</code>"</a></li>
-       <li><a href=#link-type-help><span class=secno>4.12.3.6 </span>Link type "<code>help</code>"</a></li>
-       <li><a href=#rel-icon><span class=secno>4.12.3.7 </span>Link type "<code>icon</code>"</a></li>
-       <li><a href=#link-type-license><span class=secno>4.12.3.8 </span>Link type "<code>license</code>"</a></li>
-       <li><a href=#link-type-nofollow><span class=secno>4.12.3.9 </span>Link type "<code>nofollow</code>"</a></li>
-       <li><a href=#link-type-noreferrer><span class=secno>4.12.3.10 </span>Link type "<code>noreferrer</code>"</a></li>
-       <li><a href=#link-type-pingback><span class=secno>4.12.3.11 </span>Link type "<code>pingback</code>"</a></li>
-       <li><a href=#link-type-prefetch><span class=secno>4.12.3.12 </span>Link type "<code>prefetch</code>"</a></li>
-       <li><a href=#link-type-search><span class=secno>4.12.3.13 </span>Link type "<code>search</code>"</a></li>
-       <li><a href=#link-type-stylesheet><span class=secno>4.12.3.14 </span>Link type "<code>stylesheet</code>"</a></li>
-       <li><a href=#link-type-sidebar><span class=secno>4.12.3.15 </span>Link type "<code>sidebar</code>"</a></li>
-       <li><a href=#link-type-tag><span class=secno>4.12.3.16 </span>Link type "<code>tag</code>"</a></li>
-       <li><a href=#hierarchical-link-types><span class=secno>4.12.3.17 </span>Hierarchical link types</a>
+       <li><a href=#rel-alternate><span class=secno>4.12.5.1 </span>Link type "<code>alternate</code>"</a></li>
+       <li><a href=#link-type-author><span class=secno>4.12.5.2 </span>Link type "<code>author</code>"</a></li>
+       <li><a href=#link-type-bookmark><span class=secno>4.12.5.3 </span>Link type "<code>bookmark</code>"</a></li>
+       <li><a href=#link-type-help><span class=secno>4.12.5.4 </span>Link type "<code>help</code>"</a></li>
+       <li><a href=#rel-icon><span class=secno>4.12.5.5 </span>Link type "<code>icon</code>"</a></li>
+       <li><a href=#link-type-license><span class=secno>4.12.5.6 </span>Link type "<code>license</code>"</a></li>
+       <li><a href=#link-type-nofollow><span class=secno>4.12.5.7 </span>Link type "<code>nofollow</code>"</a></li>
+       <li><a href=#link-type-noreferrer><span class=secno>4.12.5.8 </span>Link type "<code>noreferrer</code>"</a></li>
+       <li><a href=#link-type-prefetch><span class=secno>4.12.5.9 </span>Link type "<code>prefetch</code>"</a></li>
+       <li><a href=#link-type-search><span class=secno>4.12.5.10 </span>Link type "<code>search</code>"</a></li>
+       <li><a href=#link-type-stylesheet><span class=secno>4.12.5.11 </span>Link type "<code>stylesheet</code>"</a></li>
+       <li><a href=#link-type-tag><span class=secno>4.12.5.12 </span>Link type "<code>tag</code>"</a></li>
+       <li><a href=#sequential-link-types><span class=secno>4.12.5.13 </span>Sequential link types</a>
         <ol>
-         <li><a href=#link-type-index><span class=secno>4.12.3.17.1 </span>Link type "<code>index</code>"</a></li>
-         <li><a href=#link-type-up><span class=secno>4.12.3.17.2 </span>Link type "<code>up</code>"</a></ol></li>
-       <li><a href=#sequential-link-types><span class=secno>4.12.3.18 </span>Sequential link types</a>
-        <ol>
-         <li><a href=#link-type-first><span class=secno>4.12.3.18.1 </span>Link type "<code>first</code>"</a></li>
-         <li><a href=#link-type-last><span class=secno>4.12.3.18.2 </span>Link type "<code>last</code>"</a></li>
-         <li><a href=#link-type-next><span class=secno>4.12.3.18.3 </span>Link type "<code>next</code>"</a></li>
-         <li><a href=#link-type-prev><span class=secno>4.12.3.18.4 </span>Link type "<code>prev</code>"</a></ol></li>
-       <li><a href=#other-link-types><span class=secno>4.12.3.19 </span>Other link types</a></ol></ol></li>
+         <li><a href=#link-type-next><span class=secno>4.12.5.13.1 </span>Link type "<code>next</code>"</a></li>
+         <li><a href=#link-type-prev><span class=secno>4.12.5.13.2 </span>Link type "<code>prev</code>"</a></ol></li>
+       <li><a href=#other-link-types><span class=secno>4.12.5.14 </span>Other link types</a></ol></ol></li>
    <li><a href=#common-idioms-without-dedicated-elements><span class=secno>4.13 </span>Common idioms without dedicated elements</a>
     <ol>
-     <li><a href=#tag-clouds><span class=secno>4.13.1 </span>Tag clouds</a></li>
-     <li><a href=#conversations><span class=secno>4.13.2 </span>Conversations</a></li>
-     <li><a href=#footnotes><span class=secno>4.13.3 </span>Footnotes</a></ol></li>
+     <li><a href=#the-main-part-of-the-content><span class=secno>4.13.1 </span>The main part of the content</a></li>
+     <li><a href=#rel-up><span class=secno>4.13.2 </span>Bread crumb navigation</a></li>
+     <li><a href=#tag-clouds><span class=secno>4.13.3 </span>Tag clouds</a></li>
+     <li><a href=#conversations><span class=secno>4.13.4 </span>Conversations</a></li>
+     <li><a href=#footnotes><span class=secno>4.13.5 </span>Footnotes</a></ol></li>
    <li><a href=#matching-html-elements-using-selectors><span class=secno>4.14 </span>Matching HTML elements using selectors</a>
     <ol>
      <li><a href=#selectors><span class=secno>4.14.1 </span>Case-sensitivity</a></li>
      <li><a href=#pseudo-classes><span class=secno>4.14.2 </span>Pseudo-classes</a></ol></ol></li>
  <li><a href=#microdata><span class=secno>5 </span>Microdata</a>
   <ol>
-   <li><a href=#introduction-2><span class=secno>5.1 </span>Introduction</a>
+   <li><a href=#introduction-5><span class=secno>5.1 </span>Introduction</a>
     <ol>
      <li><a href=#overview><span class=secno>5.1.1 </span>Overview</a></li>
      <li><a href=#the-basic-syntax><span class=secno>5.1.2 </span>The basic syntax</a></li>
        <li><a href=#examples-2><span class=secno>5.4.2.2 </span>Examples</a></ol></li>
      <li><a href=#licensing-works><span class=secno>5.4.3 </span>Licensing works</a>
       <ol>
-       <li><a href=#conversion-to-rdf><span class=secno>5.4.3.1 </span>Conversion to RDF</a></li>
-       <li><a href=#examples-3><span class=secno>5.4.3.2 </span>Examples</a></ol></ol></li>
+       <li><a href=#examples-3><span class=secno>5.4.3.1 </span>Examples</a></ol></ol></li>
    <li><a href=#converting-html-to-other-formats><span class=secno>5.5 </span>Converting HTML to other formats</a>
     <ol>
      <li><a href=#json><span class=secno>5.5.1 </span>JSON</a></li>
-     <li><a href=#rdf><span class=secno>5.5.2 </span>RDF</a>
-      <ol>
-       <li><a href=#examples-4><span class=secno>5.5.2.1 </span>Examples</a></ol></li>
-     <li><a href=#atom><span class=secno>5.5.3 </span>Atom</a></ol></ol></li>
+     <li><a href=#atom><span class=secno>5.5.2 </span>Atom</a></ol></ol></li>
  <li><a href=#browsers><span class=secno>6 </span>Loading Web pages</a>
   <ol>
    <li><a href=#windows><span class=secno>6.1 </span>Browsing contexts</a>
      <li><a href=#read-html><span class=secno>6.5.2 </span>Page load processing model for HTML files</a></li>
      <li><a href=#read-xml><span class=secno>6.5.3 </span>Page load processing model for XML files</a></li>
      <li><a href=#read-text><span class=secno>6.5.4 </span>Page load processing model for text files</a></li>
-     <li><a href=#read-image><span class=secno>6.5.5 </span>Page load processing model for images</a></li>
-     <li><a href=#read-plugin><span class=secno>6.5.6 </span>Page load processing model for content that uses plugins</a></li>
-     <li><a href=#read-ua-inline><span class=secno>6.5.7 </span>Page load processing model for inline content that doesn't have a DOM</a></li>
-     <li><a href=#scroll-to-fragid><span class=secno>6.5.8 </span>Navigating to a fragment identifier</a></li>
-     <li><a href=#history-traversal><span class=secno>6.5.9 </span>History traversal</a>
+     <li><a href=#read-multipart-x-mixed-replace><span class=secno>6.5.5 </span>Page load processing model for <code>multipart/x-mixed-replaced</code> resources</a></li>
+     <li><a href=#read-image><span class=secno>6.5.6 </span>Page load processing model for images</a></li>
+     <li><a href=#read-plugin><span class=secno>6.5.7 </span>Page load processing model for content that uses plugins</a></li>
+     <li><a href=#read-ua-inline><span class=secno>6.5.8 </span>Page load processing model for inline content that doesn't have a DOM</a></li>
+     <li><a href=#scroll-to-fragid><span class=secno>6.5.9 </span>Navigating to a fragment identifier</a></li>
+     <li><a href=#history-traversal><span class=secno>6.5.10 </span>History traversal</a>
       <ol>
-       <li><a href=#event-definitions><span class=secno>6.5.9.1 </span>Event definitions</a></ol></li>
-     <li><a href=#unloading-documents><span class=secno>6.5.10 </span>Unloading documents</a>
+       <li><a href=#event-definitions-0><span class=secno>6.5.10.1 </span>Event definitions</a></ol></li>
+     <li><a href=#unloading-documents><span class=secno>6.5.11 </span>Unloading documents</a>
       <ol>
-       <li><a href=#event-definition><span class=secno>6.5.10.1 </span>Event definition</a></ol></li>
-     <li><a href=#aborting-a-document-load><span class=secno>6.5.11 </span>Aborting a document load</a></ol></li>
+       <li><a href=#event-definition><span class=secno>6.5.11.1 </span>Event definition</a></ol></li>
+     <li><a href=#aborting-a-document-load><span class=secno>6.5.12 </span>Aborting a document load</a></ol></li>
    <li><a href=#offline><span class=secno>6.6 </span>Offline Web applications</a>
     <ol>
-     <li><a href=#introduction-3><span class=secno>6.6.1 </span>Introduction</a>
+     <li><a href=#introduction-6><span class=secno>6.6.1 </span>Introduction</a>
       <ol>
        <li><a href=#appcacheevents><span class=secno>6.6.1.1 </span>Event summary</a></ol></li>
      <li><a href=#appcache><span class=secno>6.6.2 </span>Application caches</a></li>
      <li><a href=#manifests><span class=secno>6.6.3 </span>The cache manifest syntax</a>
       <ol>
-       <li><a href=#a-sample-manifest><span class=secno>6.6.3.1 </span>A sample manifest</a></li>
+       <li><a href=#some-sample-manifests><span class=secno>6.6.3.1 </span>Some sample manifests</a></li>
        <li><a href=#writing-cache-manifests><span class=secno>6.6.3.2 </span>Writing cache manifests</a></li>
        <li><a href=#parsing-cache-manifests><span class=secno>6.6.3.3 </span>Parsing cache manifests</a></ol></li>
      <li><a href=#downloading-or-updating-an-application-cache><span class=secno>6.6.4 </span>Downloading or updating an application cache</a></li>
      <li><a href=#the-application-cache-selection-algorithm><span class=secno>6.6.5 </span>The application cache selection algorithm</a></li>
      <li><a href=#changesToNetworkingModel><span class=secno>6.6.6 </span>Changes to the networking model</a></li>
      <li><a href=#expiring-application-caches><span class=secno>6.6.7 </span>Expiring application caches</a></li>
-     <li><a href=#application-cache-api><span class=secno>6.6.8 </span>Application cache API</a></li>
-     <li><a href=#browser-state><span class=secno>6.6.9 </span>Browser state</a></ol></ol></li>
+     <li><a href=#disk-space><span class=secno>6.6.8 </span>Disk space</a></li>
+     <li><a href=#application-cache-api><span class=secno>6.6.9 </span>Application cache API</a></li>
+     <li><a href=#browser-state><span class=secno>6.6.10 </span>Browser state</a></ol></ol></li>
  <li><a href=#webappapis><span class=secno>7 </span>Web application APIs</a>
   <ol>
    <li><a href=#scripting><span class=secno>7.1 </span>Scripting</a>
     <ol>
-     <li><a href=#introduction-4><span class=secno>7.1.1 </span>Introduction</a></li>
+     <li><a href=#introduction-7><span class=secno>7.1.1 </span>Introduction</a></li>
      <li><a href=#enabling-and-disabling-scripting><span class=secno>7.1.2 </span>Enabling and disabling scripting</a></li>
      <li><a href=#processing-model-1><span class=secno>7.1.3 </span>Processing model</a>
       <ol>
        <li><a href=#definitions-0><span class=secno>7.1.3.1 </span>Definitions</a></li>
        <li><a href=#calling-scripts><span class=secno>7.1.3.2 </span>Calling scripts</a></li>
        <li><a href=#creating-scripts><span class=secno>7.1.3.3 </span>Creating scripts</a></li>
-       <li><a href=#killing-scripts><span class=secno>7.1.3.4 </span>Killing scripts</a></ol></li>
+       <li><a href=#killing-scripts><span class=secno>7.1.3.4 </span>Killing scripts</a></li>
+       <li><a href=#runtime-script-errors><span class=secno>7.1.3.5 </span>Runtime script errors</a>
+        <ol>
+         <li><a href=#runtime-script-errors-in-documents><span class=secno>7.1.3.5.1 </span>Runtime script errors in documents</a></ol></ol></li>
      <li><a href=#event-loops><span class=secno>7.1.4 </span>Event loops</a>
       <ol>
        <li><a href=#definitions-1><span class=secno>7.1.4.1 </span>Definitions</a></li>
        <li><a href=#processing-model-2><span class=secno>7.1.4.2 </span>Processing model</a></li>
        <li><a href=#generic-task-sources><span class=secno>7.1.4.3 </span>Generic task sources</a></ol></li>
-     <li><a href=#javascript-protocol><span class=secno>7.1.5 </span>The <code title="">javascript:</code> protocol</a></li>
+     <li><a href=#javascript-protocol><span class=secno>7.1.5 </span>The <code title="">javascript:</code> URL scheme</a></li>
      <li><a href=#events><span class=secno>7.1.6 </span>Events</a>
       <ol>
        <li><a href=#event-handler-attributes><span class=secno>7.1.6.1 </span>Event handlers</a></li>
        <li><a href=#event-handlers-on-elements,-document-objects,-and-window-objects><span class=secno>7.1.6.2 </span>Event handlers on elements, <code>Document</code> objects, and <code>Window</code> objects</a></li>
        <li><a href=#event-firing><span class=secno>7.1.6.3 </span>Event firing</a></li>
-       <li><a href=#events-and-the-window-object><span class=secno>7.1.6.4 </span>Events and the <code>Window</code> object</a></li>
-       <li><a href=#runtime-script-errors><span class=secno>7.1.6.5 </span>Runtime script errors</a></ol></ol></li>
-   <li><a href=#timers><span class=secno>7.2 </span>Timers</a></li>
-   <li><a href=#user-prompts><span class=secno>7.3 </span>User prompts</a>
+       <li><a href=#events-and-the-window-object><span class=secno>7.1.6.4 </span>Events and the <code>Window</code> object</a></ol></ol></li>
+   <li><a href=#atob><span class=secno>7.2 </span>Base64 utility methods</a></li>
+   <li><a href=#timers><span class=secno>7.3 </span>Timers</a></li>
+   <li><a href=#user-prompts><span class=secno>7.4 </span>User prompts</a>
     <ol>
-     <li><a href=#simple-dialogs><span class=secno>7.3.1 </span>Simple dialogs</a></li>
-     <li><a href=#printing><span class=secno>7.3.2 </span>Printing</a></li>
-     <li><a href=#dialogs-implemented-using-separate-documents><span class=secno>7.3.3 </span>Dialogs implemented using separate documents</a></ol></li>
-   <li><a href=#system-state-and-capabilities><span class=secno>7.4 </span>System state and capabilities</a>
+     <li><a href=#simple-dialogs><span class=secno>7.4.1 </span>Simple dialogs</a></li>
+     <li><a href=#printing><span class=secno>7.4.2 </span>Printing</a></li>
+     <li><a href=#dialogs-implemented-using-separate-documents><span class=secno>7.4.3 </span>Dialogs implemented using separate documents</a></ol></li>
+   <li><a href=#system-state-and-capabilities><span class=secno>7.5 </span>System state and capabilities</a>
     <ol>
-     <li><a href=#client-identification><span class=secno>7.4.1 </span>Client identification</a></li>
-     <li><a href=#custom-handlers><span class=secno>7.4.2 </span>Custom scheme and content handlers</a>
+     <li><a href=#the-navigator-object><span class=secno>7.5.1 </span>The <code>Navigator</code> object</a>
       <ol>
-       <li><a href=#security-and-privacy><span class=secno>7.4.2.1 </span>Security and privacy</a></li>
-       <li><a href=#sample-handler-impl><span class=secno>7.4.2.2 </span>Sample user interface</a></ol></li>
-     <li><a href=#manually-releasing-the-storage-mutex><span class=secno>7.4.3 </span>Manually releasing the storage mutex</a></ol></ol></li>
+       <li><a href=#client-identification><span class=secno>7.5.1.1 </span>Client identification</a></li>
+       <li><a href=#custom-handlers><span class=secno>7.5.1.2 </span>Custom scheme and content handlers</a></li>
+       <li><a href=#security-and-privacy><span class=secno>7.5.1.3 </span>Security and privacy</a></li>
+       <li><a href=#sample-handler-impl><span class=secno>7.5.1.4 </span>Sample user interface</a></li>
+       <li><a href=#manually-releasing-the-storage-mutex><span class=secno>7.5.1.5 </span>Manually releasing the storage mutex</a></ol></li>
+     <li><a href=#the-external-interface><span class=secno>7.5.2 </span>The <code>External</code> interface</a></ol></ol></li>
  <li><a href=#editing><span class=secno>8 </span>User interaction</a>
   <ol>
    <li><a href=#the-hidden-attribute><span class=secno>8.1 </span>The <code>hidden</code> attribute</a></li>
    <li><a href=#activation><span class=secno>8.2 </span>Activation</a></li>
-   <li><a href=#scrolling-elements-into-view><span class=secno>8.3 </span>Scrolling elements into view</a></li>
-   <li><a href=#focus><span class=secno>8.4 </span>Focus</a>
+   <li><a href=#focus><span class=secno>8.3 </span>Focus</a>
     <ol>
-     <li><a href=#sequential-focus-navigation><span class=secno>8.4.1 </span>Sequential focus navigation</a></li>
-     <li><a href=#focus-management><span class=secno>8.4.2 </span>Focus management</a></li>
-     <li><a href=#document-level-focus-apis><span class=secno>8.4.3 </span>Document-level focus APIs</a></li>
-     <li><a href=#element-level-focus-apis><span class=secno>8.4.4 </span>Element-level focus APIs</a></ol></li>
-   <li><a href=#the-accesskey-attribute><span class=secno>8.5 </span>The <code>accesskey</code> attribute</a></li>
-   <li><a href=#selection><span class=secno>8.6 </span>The text selection APIs</a>
+     <li><a href=#sequential-focus-navigation-and-the-tabindex-attribute><span class=secno>8.3.1 </span>Sequential focus navigation and the <code title=attr-tabindex>tabindex</code> attribute</a></li>
+     <li><a href=#focus-management><span class=secno>8.3.2 </span>Focus management</a></li>
+     <li><a href=#document-level-focus-apis><span class=secno>8.3.3 </span>Document-level focus APIs</a></li>
+     <li><a href=#element-level-focus-apis><span class=secno>8.3.4 </span>Element-level focus APIs</a></ol></li>
+   <li><a href=#assigning-keyboard-shortcuts><span class=secno>8.4 </span>Assigning keyboard shortcuts</a>
     <ol>
-     <li><a href=#documentSelection><span class=secno>8.6.1 </span>APIs for the browsing context selection</a></li>
-     <li><a href=#textFieldSelection><span class=secno>8.6.2 </span>APIs for the text field selections</a></ol></li>
-   <li><a href=#contenteditable><span class=secno>8.7 </span>The <code title=attr-contenteditable>contenteditable</code> attribute</a>
+     <li><a href=#introduction-8><span class=secno>8.4.1 </span>Introduction</a></li>
+     <li><a href=#the-accesskey-attribute><span class=secno>8.4.2 </span>The <code>accesskey</code> attribute</a></li>
+     <li><a href=#processing-model-3><span class=secno>8.4.3 </span>Processing model</a></ol></li>
+   <li><a href=#editing-0><span class=secno>8.5 </span>Editing</a>
     <ol>
-     <li><a href=#user-editing-actions><span class=secno>8.7.1 </span>User editing actions</a></li>
-     <li><a href=#making-entire-documents-editable><span class=secno>8.7.2 </span>Making entire documents editable</a></ol></li>
-   <li><a href=#spelling-and-grammar-checking><span class=secno>8.8 </span>Spelling and grammar checking</a></li>
-   <li><a href=#dnd><span class=secno>8.9 </span>Drag and drop</a>
+     <li><a href=#contenteditable><span class=secno>8.5.1 </span>Making document regions editable: The <code title=attr-contenteditable>contenteditable</code> content
+  attribute</a></li>
+     <li><a href=#making-entire-documents-editable:-the-designmode-idl-attribute><span class=secno>8.5.2 </span>Making entire documents editable: The <code title=dom-document-designMode>designMode</code> IDL attribute</a></li>
+     <li><a href=#best-practices-for-in-page-editors><span class=secno>8.5.3 </span>Best practices for in-page editors</a></li>
+     <li><a href=#editing-apis><span class=secno>8.5.4 </span>Editing APIs</a></li>
+     <li><a href=#spelling-and-grammar-checking><span class=secno>8.5.5 </span>Spelling and grammar checking</a></ol></li>
+   <li><a href=#dnd><span class=secno>8.6 </span>Drag and drop</a>
     <ol>
-     <li><a href=#introduction-5><span class=secno>8.9.1 </span>Introduction</a></li>
-     <li><a href=#the-dragevent-and-datatransfer-interfaces><span class=secno>8.9.2 </span>The <code>DragEvent</code> and <code>DataTransfer</code> interfaces</a></li>
-     <li><a href=#dndevents><span class=secno>8.9.3 </span>Events fired during a drag-and-drop action</a></li>
-     <li><a href=#drag-and-drop-processing-model><span class=secno>8.9.4 </span>Drag-and-drop processing model</a>
+     <li><a href=#introduction-9><span class=secno>8.6.1 </span>Introduction</a></li>
+     <li><a href=#the-drag-data-store><span class=secno>8.6.2 </span>The drag data store</a></li>
+     <li><a href=#the-datatransfer-interface><span class=secno>8.6.3 </span>The <code>DataTransfer</code> interface</a>
       <ol>
-       <li><a href=#when-the-drag-and-drop-operation-starts-or-ends-in-another-document><span class=secno>8.9.4.1 </span>When the drag-and-drop operation starts or ends in another
-  document</a></li>
-       <li><a href=#when-the-drag-and-drop-operation-starts-or-ends-in-another-application><span class=secno>8.9.4.2 </span>When the drag-and-drop operation starts or ends in another
-  application</a></ol></li>
-     <li><a href=#the-draggable-attribute><span class=secno>8.9.5 </span>The <code>draggable</code> attribute</a></li>
-     <li><a href=#security-risks-in-the-drag-and-drop-model><span class=secno>8.9.6 </span>Security risks in the drag-and-drop model</a></ol></li>
-   <li><a href=#undo><span class=secno>8.10 </span>Undo history</a>
+       <li><a href=#the-datatransferitemlist-interface><span class=secno>8.6.3.1 </span>The <code>DataTransferItemList</code> interface</a></li>
+       <li><a href=#the-datatransferitem-interface><span class=secno>8.6.3.2 </span>The <code>DataTransferItem</code> interface</a></ol></li>
+     <li><a href=#the-dragevent-interface><span class=secno>8.6.4 </span>The <code>DragEvent</code> interface</a></li>
+     <li><a href=#drag-and-drop-processing-model><span class=secno>8.6.5 </span>Drag-and-drop processing model</a></li>
+     <li><a href=#dndevents><span class=secno>8.6.6 </span>Events summary</a></li>
+     <li><a href=#the-draggable-attribute><span class=secno>8.6.7 </span>The <code>draggable</code> attribute</a></li>
+     <li><a href=#the-dropzone-attribute><span class=secno>8.6.8 </span>The <code>dropzone</code> attribute</a></li>
+     <li><a href=#security-risks-in-the-drag-and-drop-model><span class=secno>8.6.9 </span>Security risks in the drag-and-drop model</a></ol></li>
+   <li><a href=#text-search-apis><span class=secno>8.7 </span>Text search APIs</a></ol></li>
+ <li><a href=#video-conferencing-and-peer-to-peer-communication><span class=secno>9 </span>Video conferencing and peer-to-peer communication</a>
+  <ol>
+   <li><a href=#introduction-10><span class=secno>9.1 </span>Introduction</a></li>
+   <li><a href=#obtaining-local-multimedia-content><span class=secno>9.2 </span>Obtaining local multimedia content</a></li>
+   <li><a href=#stream-api><span class=secno>9.3 </span>Stream API</a>
+    <ol>
+     <li><a href=#introduction-11><span class=secno>9.3.1 </span>Introduction</a></li>
+     <li><a href=#interface-definitions><span class=secno>9.3.2 </span>Interface definitions</a></ol></li>
+   <li><a href=#peer-to-peer-connections><span class=secno>9.4 </span>Peer-to-peer connections</a>
     <ol>
-     <li><a href=#definitions-2><span class=secno>8.10.1 </span>Definitions</a></li>
-     <li><a href=#the-undomanager-interface><span class=secno>8.10.2 </span>The <code>UndoManager</code> interface</a></li>
-     <li><a href=#undo:-moving-back-in-the-undo-transaction-history><span class=secno>8.10.3 </span>Undo: moving back in the undo transaction history</a></li>
-     <li><a href=#redo:-moving-forward-in-the-undo-transaction-history><span class=secno>8.10.4 </span>Redo: moving forward in the undo transaction history</a></li>
-     <li><a href=#the-undomanagerevent-interface-and-the-undo-and-redo-events><span class=secno>8.10.5 </span>The <code>UndoManagerEvent</code> interface and the <code title=event-undo>undo</code> and <code title=event-redo>redo</code> events</a></li>
-     <li><a href=#implementation-notes><span class=secno>8.10.6 </span>Implementation notes</a></ol></li>
-   <li><a href=#editing-apis><span class=secno>8.11 </span>Editing APIs</a></ol></li>
- <li><a href=#comms><span class=secno>9 </span>Communication</a>
+     <li><a href=#introduction-12><span class=secno>9.4.1 </span>Introduction</a></li>
+     <li><a href=#interface-definitions-0><span class=secno>9.4.2 </span>Interface definitions</a></ol></li>
+   <li><a href=#the-data-stream><span class=secno>9.5 </span>The data stream</a>
+    <ol>
+     <li><a href=#security-considerations><span class=secno>9.5.1 </span>Security considerations</a></ol></li>
+   <li><a href=#garbage-collection-0><span class=secno>9.6 </span>Garbage collection</a></li>
+   <li><a href=#event-definitions-1><span class=secno>9.7 </span>Event definitions</a></li>
+   <li><a href=#mediastreamevents><span class=secno>9.8 </span>Event Summary</a></ol></li>
+ <li><a href=#workers><span class=secno>10 </span>Web workers</a>
   <ol>
-   <li><a href=#event-definitions-0><span class=secno>9.1 </span>Event definitions</a></li>
-   <li><a href=#web-messaging><span class=secno>9.2 </span>Cross-document messaging</a>
+   <li><a href=#introduction-13><span class=secno>10.1 </span>Introduction</a>
     <ol>
-     <li><a href=#introduction-6><span class=secno>9.2.1 </span>Introduction</a></li>
-     <li><a href=#security-postmsg><span class=secno>9.2.2 </span>Security</a>
+     <li><a href=#scope-0><span class=secno>10.1.1 </span>Scope</a></li>
+     <li><a href=#examples-4><span class=secno>10.1.2 </span>Examples</a>
+      <ol>
+       <li><a href=#a-background-number-crunching-worker><span class=secno>10.1.2.1 </span>A background number-crunching worker</a></li>
+       <li><a href=#a-worker-for-updating-a-client-side-database><span class=secno>10.1.2.2 </span>A worker for updating a client-side database</a></li>
+       <li><a href=#worker-used-for-background-i/o><span class=secno>10.1.2.3 </span>Worker used for background I/O</a></li>
+       <li><a href=#shared-workers-introduction><span class=secno>10.1.2.4 </span>Shared workers introduction</a></li>
+       <li><a href=#shared-state-using-a-shared-worker><span class=secno>10.1.2.5 </span>Shared state using a shared worker</a></li>
+       <li><a href=#delegation><span class=secno>10.1.2.6 </span>Delegation</a></ol></li>
+     <li><a href=#tutorials><span class=secno>10.1.3 </span>Tutorials</a>
       <ol>
-       <li><a href=#authors><span class=secno>9.2.2.1 </span>Authors</a></li>
-       <li><a href=#user-agents><span class=secno>9.2.2.2 </span>User agents</a></ol></li>
-     <li><a href=#posting-messages><span class=secno>9.2.3 </span>Posting messages</a></ol></li>
-   <li><a href=#channel-messaging><span class=secno>9.3 </span>Channel messaging</a>
+       <li><a href=#creating-a-dedicated-worker><span class=secno>10.1.3.1 </span>Creating a dedicated worker</a></li>
+       <li><a href=#communicating-with-a-dedicated-worker><span class=secno>10.1.3.2 </span>Communicating with a dedicated worker</a></li>
+       <li><a href=#shared-workers><span class=secno>10.1.3.3 </span>Shared workers</a></ol></ol></li>
+   <li><a href=#infrastructure-0><span class=secno>10.2 </span>Infrastructure</a>
     <ol>
-     <li><a href=#introduction-7><span class=secno>9.3.1 </span>Introduction</a></li>
-     <li><a href=#message-channels><span class=secno>9.3.2 </span>Message channels</a></li>
-     <li><a href=#message-ports><span class=secno>9.3.3 </span>Message ports</a>
+     <li><a href=#the-global-scope><span class=secno>10.2.1 </span>The global scope</a>
       <ol>
-       <li><a href=#ports-and-garbage-collection><span class=secno>9.3.3.1 </span>Ports and garbage collection</a></ol></ol></ol></li>
- <li><a href=#syntax><span class=secno>10 </span>The HTML syntax</a>
+       <li><a href=#the-workerglobalscope-abstract-interface><span class=secno>10.2.1.1 </span>The <code>WorkerGlobalScope</code> abstract interface</a></li>
+       <li><a href=#dedicated-workers-and-the-dedicatedworkerglobalscope-interface><span class=secno>10.2.1.2 </span>Dedicated workers and the <code>DedicatedWorkerGlobalScope</code> interface</a></li>
+       <li><a href=#shared-workers-and-the-sharedworkerglobalscope-interface><span class=secno>10.2.1.3 </span>Shared workers and the <code>SharedWorkerGlobalScope</code> interface</a></ol></li>
+     <li><a href=#origins-of-workers><span class=secno>10.2.2 </span>Origins of workers</a></li>
+     <li><a href=#the-event-loop><span class=secno>10.2.3 </span>The event loop</a></li>
+     <li><a href="#the-worker's-lifetime"><span class=secno>10.2.4 </span>The worker's lifetime</a></li>
+     <li><a href=#processing-model-4><span class=secno>10.2.5 </span>Processing model</a></li>
+     <li><a href=#runtime-script-errors-0><span class=secno>10.2.6 </span>Runtime script errors</a></li>
+     <li><a href=#creating-workers><span class=secno>10.2.7 </span>Creating workers</a>
+      <ol>
+       <li><a href=#the-abstractworker-abstract-interface><span class=secno>10.2.7.1 </span>The <code>AbstractWorker</code> abstract interface</a></li>
+       <li><a href=#dedicated-workers-and-the-worker-interface><span class=secno>10.2.7.2 </span>Dedicated workers and the <code>Worker</code> interface</a></li>
+       <li><a href=#shared-workers-and-the-sharedworker-interface><span class=secno>10.2.7.3 </span>Shared workers and the <code>SharedWorker</code> interface</a></ol></ol></li>
+   <li><a href=#apis-available-to-workers><span class=secno>10.3 </span>APIs available to workers</a>
+    <ol>
+     <li><a href=#importing-scripts-and-libraries><span class=secno>10.3.1 </span>Importing scripts and libraries</a></li>
+     <li><a href=#the-workernavigator-object><span class=secno>10.3.2 </span>The <code>WorkerNavigator</code> object</a></li>
+     <li><a href=#interface-objects-and-constructors><span class=secno>10.3.3 </span>Interface objects and constructors</a></li>
+     <li><a href=#worker-locations><span class=secno>10.3.4 </span>Worker locations</a></ol></ol></li>
+ <li><a href=#comms><span class=secno>11 </span>Communication</a>
   <ol>
-   <li><a href=#writing><span class=secno>10.1 </span>Writing HTML documents</a>
+   <li><a href=#event-definitions-2><span class=secno>11.1 </span>Event definitions</a></li>
+   <li><a href=#server-sent-events><span class=secno>11.2 </span>Server-sent events</a>
     <ol>
-     <li><a href=#the-doctype><span class=secno>10.1.1 </span>The DOCTYPE</a></li>
-     <li><a href=#elements-0><span class=secno>10.1.2 </span>Elements</a>
+     <li><a href=#server-sent-events-intro><span class=secno>11.2.1 </span>Introduction</a></li>
+     <li><a href=#the-eventsource-interface><span class=secno>11.2.2 </span>The <code>EventSource</code> interface</a></li>
+     <li><a href=#processing-model-5><span class=secno>11.2.3 </span>Processing model</a></li>
+     <li><a href=#parsing-an-event-stream><span class=secno>11.2.4 </span>Parsing an event stream</a></li>
+     <li><a href=#event-stream-interpretation><span class=secno>11.2.5 </span>Interpreting an event stream</a></li>
+     <li><a href=#notes><span class=secno>11.2.6 </span>Notes</a></li>
+     <li><a href=#eventsource-push><span class=secno>11.2.7 </span>Connectionless push and other features</a></li>
+     <li><a href=#garbage-collection-1><span class=secno>11.2.8 </span>Garbage collection</a></li>
+     <li><a href=#iana-considerations><span class=secno>11.2.9 </span>IANA considerations</a>
       <ol>
-       <li><a href=#start-tags><span class=secno>10.1.2.1 </span>Start tags</a></li>
-       <li><a href=#end-tags><span class=secno>10.1.2.2 </span>End tags</a></li>
-       <li><a href=#attributes-0><span class=secno>10.1.2.3 </span>Attributes</a></li>
-       <li><a href=#optional-tags><span class=secno>10.1.2.4 </span>Optional tags</a></li>
-       <li><a href=#element-restrictions><span class=secno>10.1.2.5 </span>Restrictions on content models</a></li>
-       <li><a href=#cdata-rcdata-restrictions><span class=secno>10.1.2.6 </span>Restrictions on the contents of raw text and RCDATA elements</a></ol></li>
-     <li><a href=#text-1><span class=secno>10.1.3 </span>Text</a>
+       <li><a href=#text/event-stream><span class=secno>11.2.9.1 </span><code>text/event-stream</code></a></li>
+       <li><a href=#last-event-id><span class=secno>11.2.9.2 </span><code>Last-Event-ID</code></a></ol></ol></li>
+   <li><a href=#network><span class=secno>11.3 </span>Web sockets</a>
+    <ol>
+     <li><a href=#network-intro><span class=secno>11.3.1 </span>Introduction</a></li>
+     <li><a href=#the-websocket-interface><span class=secno>11.3.2 </span>The <code>WebSocket</code> interface</a></li>
+     <li><a href=#feedback-from-the-protocol><span class=secno>11.3.3 </span>Feedback from the protocol</a>
+      <ol>
+       <li><a href=#event-definitions-3><span class=secno>11.3.3.1 </span>Event definitions</a></li>
+       <li><a href=#garbage-collection-2><span class=secno>11.3.3.2 </span>Garbage collection</a></ol></ol></li>
+   <li><a href=#web-messaging><span class=secno>11.4 </span>Cross-document messaging</a>
+    <ol>
+     <li><a href=#introduction-14><span class=secno>11.4.1 </span>Introduction</a></li>
+     <li><a href=#security-postmsg><span class=secno>11.4.2 </span>Security</a>
       <ol>
-       <li><a href=#newlines><span class=secno>10.1.3.1 </span>Newlines</a></ol></li>
-     <li><a href=#character-references><span class=secno>10.1.4 </span>Character references</a></li>
-     <li><a href=#cdata-sections><span class=secno>10.1.5 </span>CDATA sections</a></li>
-     <li><a href=#comments><span class=secno>10.1.6 </span>Comments</a></ol></li>
-   <li><a href=#parsing><span class=secno>10.2 </span>Parsing HTML documents</a>
+       <li><a href=#authors><span class=secno>11.4.2.1 </span>Authors</a></li>
+       <li><a href=#user-agents><span class=secno>11.4.2.2 </span>User agents</a></ol></li>
+     <li><a href=#posting-messages><span class=secno>11.4.3 </span>Posting messages</a></ol></li>
+   <li><a href=#channel-messaging><span class=secno>11.5 </span>Channel messaging</a>
     <ol>
-     <li><a href=#overview-of-the-parsing-model><span class=secno>10.2.1 </span>Overview of the parsing model</a></li>
-     <li><a href=#the-input-stream><span class=secno>10.2.2 </span>The input stream</a>
+     <li><a href=#introduction-15><span class=secno>11.5.1 </span>Introduction</a></li>
+     <li><a href=#message-channels><span class=secno>11.5.2 </span>Message channels</a></li>
+     <li><a href=#message-ports><span class=secno>11.5.3 </span>Message ports</a>
       <ol>
-       <li><a href=#determining-the-character-encoding><span class=secno>10.2.2.1 </span>Determining the character encoding</a></li>
-       <li><a href=#character-encodings-0><span class=secno>10.2.2.2 </span>Character encodings</a></li>
-       <li><a href=#preprocessing-the-input-stream><span class=secno>10.2.2.3 </span>Preprocessing the input stream</a></li>
-       <li><a href=#changing-the-encoding-while-parsing><span class=secno>10.2.2.4 </span>Changing the encoding while parsing</a></ol></li>
-     <li><a href=#parse-state><span class=secno>10.2.3 </span>Parse state</a>
+       <li><a href=#ports-and-garbage-collection><span class=secno>11.5.3.1 </span>Ports and garbage collection</a></ol></ol></ol></li>
+ <li><a href=#webstorage><span class=secno>12 </span>Web storage</a>
+  <ol>
+   <li><a href=#introduction-16><span class=secno>12.1 </span>Introduction</a></li>
+   <li><a href=#storage><span class=secno>12.2 </span>The API</a>
+    <ol>
+     <li><a href=#the-storage-interface><span class=secno>12.2.1 </span>The <code>Storage</code> interface</a></li>
+     <li><a href=#the-sessionstorage-attribute><span class=secno>12.2.2 </span>The <code title=dom-sessionStorage>sessionStorage</code> attribute</a></li>
+     <li><a href=#the-localstorage-attribute><span class=secno>12.2.3 </span>The <code title=dom-localStorage>localStorage</code> attribute</a>
       <ol>
-       <li><a href=#the-insertion-mode><span class=secno>10.2.3.1 </span>The insertion mode</a></li>
-       <li><a href=#the-stack-of-open-elements><span class=secno>10.2.3.2 </span>The stack of open elements</a></li>
-       <li><a href=#the-list-of-active-formatting-elements><span class=secno>10.2.3.3 </span>The list of active formatting elements</a></li>
-       <li><a href=#the-element-pointers><span class=secno>10.2.3.4 </span>The element pointers</a></li>
-       <li><a href=#other-parsing-state-flags><span class=secno>10.2.3.5 </span>Other parsing state flags</a></ol></li>
-     <li><a href=#tokenization><span class=secno>10.2.4 </span>Tokenization</a>
+       <li><a href=#security-localStorage><span class=secno>12.2.3.1 </span>Security</a></ol></li>
+     <li><a href=#the-storage-event><span class=secno>12.2.4 </span>The <code title=event-storage>storage</code> event</a>
       <ol>
-       <li><a href=#data-state><span class=secno>10.2.4.1 </span>Data state</a></li>
-       <li><a href=#character-reference-in-data-state><span class=secno>10.2.4.2 </span>Character reference in data state</a></li>
-       <li><a href=#rcdata-state><span class=secno>10.2.4.3 </span>RCDATA state</a></li>
-       <li><a href=#character-reference-in-rcdata-state><span class=secno>10.2.4.4 </span>Character reference in RCDATA state</a></li>
-       <li><a href=#rawtext-state><span class=secno>10.2.4.5 </span>RAWTEXT state</a></li>
-       <li><a href=#script-data-state><span class=secno>10.2.4.6 </span>Script data state</a></li>
-       <li><a href=#plaintext-state><span class=secno>10.2.4.7 </span>PLAINTEXT state</a></li>
-       <li><a href=#tag-open-state><span class=secno>10.2.4.8 </span>Tag open state</a></li>
-       <li><a href=#end-tag-open-state><span class=secno>10.2.4.9 </span>End tag open state</a></li>
-       <li><a href=#tag-name-state><span class=secno>10.2.4.10 </span>Tag name state</a></li>
-       <li><a href=#rcdata-less-than-sign-state><span class=secno>10.2.4.11 </span>RCDATA less-than sign state</a></li>
-       <li><a href=#rcdata-end-tag-open-state><span class=secno>10.2.4.12 </span>RCDATA end tag open state</a></li>
-       <li><a href=#rcdata-end-tag-name-state><span class=secno>10.2.4.13 </span>RCDATA end tag name state</a></li>
-       <li><a href=#rawtext-less-than-sign-state><span class=secno>10.2.4.14 </span>RAWTEXT less-than sign state</a></li>
-       <li><a href=#rawtext-end-tag-open-state><span class=secno>10.2.4.15 </span>RAWTEXT end tag open state</a></li>
-       <li><a href=#rawtext-end-tag-name-state><span class=secno>10.2.4.16 </span>RAWTEXT end tag name state</a></li>
-       <li><a href=#script-data-less-than-sign-state><span class=secno>10.2.4.17 </span>Script data less-than sign state</a></li>
-       <li><a href=#script-data-end-tag-open-state><span class=secno>10.2.4.18 </span>Script data end tag open state</a></li>
-       <li><a href=#script-data-end-tag-name-state><span class=secno>10.2.4.19 </span>Script data end tag name state</a></li>
-       <li><a href=#script-data-escape-start-state><span class=secno>10.2.4.20 </span>Script data escape start state</a></li>
-       <li><a href=#script-data-escape-start-dash-state><span class=secno>10.2.4.21 </span>Script data escape start dash state</a></li>
-       <li><a href=#script-data-escaped-state><span class=secno>10.2.4.22 </span>Script data escaped state</a></li>
-       <li><a href=#script-data-escaped-dash-state><span class=secno>10.2.4.23 </span>Script data escaped dash state</a></li>
-       <li><a href=#script-data-escaped-dash-dash-state><span class=secno>10.2.4.24 </span>Script data escaped dash dash state</a></li>
-       <li><a href=#script-data-escaped-less-than-sign-state><span class=secno>10.2.4.25 </span>Script data escaped less-than sign state</a></li>
-       <li><a href=#script-data-escaped-end-tag-open-state><span class=secno>10.2.4.26 </span>Script data escaped end tag open state</a></li>
-       <li><a href=#script-data-escaped-end-tag-name-state><span class=secno>10.2.4.27 </span>Script data escaped end tag name state</a></li>
-       <li><a href=#script-data-double-escape-start-state><span class=secno>10.2.4.28 </span>Script data double escape start state</a></li>
-       <li><a href=#script-data-double-escaped-state><span class=secno>10.2.4.29 </span>Script data double escaped state</a></li>
-       <li><a href=#script-data-double-escaped-dash-state><span class=secno>10.2.4.30 </span>Script data double escaped dash state</a></li>
-       <li><a href=#script-data-double-escaped-dash-dash-state><span class=secno>10.2.4.31 </span>Script data double escaped dash dash state</a></li>
-       <li><a href=#script-data-double-escaped-less-than-sign-state><span class=secno>10.2.4.32 </span>Script data double escaped less-than sign state</a></li>
-       <li><a href=#script-data-double-escape-end-state><span class=secno>10.2.4.33 </span>Script data double escape end state</a></li>
-       <li><a href=#before-attribute-name-state><span class=secno>10.2.4.34 </span>Before attribute name state</a></li>
-       <li><a href=#attribute-name-state><span class=secno>10.2.4.35 </span>Attribute name state</a></li>
-       <li><a href=#after-attribute-name-state><span class=secno>10.2.4.36 </span>After attribute name state</a></li>
-       <li><a href=#before-attribute-value-state><span class=secno>10.2.4.37 </span>Before attribute value state</a></li>
-       <li><a href=#attribute-value-(double-quoted)-state><span class=secno>10.2.4.38 </span>Attribute value (double-quoted) state</a></li>
-       <li><a href=#attribute-value-(single-quoted)-state><span class=secno>10.2.4.39 </span>Attribute value (single-quoted) state</a></li>
-       <li><a href=#attribute-value-(unquoted)-state><span class=secno>10.2.4.40 </span>Attribute value (unquoted) state</a></li>
-       <li><a href=#character-reference-in-attribute-value-state><span class=secno>10.2.4.41 </span>Character reference in attribute value state</a></li>
-       <li><a href=#after-attribute-value-(quoted)-state><span class=secno>10.2.4.42 </span>After attribute value (quoted) state</a></li>
-       <li><a href=#self-closing-start-tag-state><span class=secno>10.2.4.43 </span>Self-closing start tag state</a></li>
-       <li><a href=#bogus-comment-state><span class=secno>10.2.4.44 </span>Bogus comment state</a></li>
-       <li><a href=#markup-declaration-open-state><span class=secno>10.2.4.45 </span>Markup declaration open state</a></li>
-       <li><a href=#comment-start-state><span class=secno>10.2.4.46 </span>Comment start state</a></li>
-       <li><a href=#comment-start-dash-state><span class=secno>10.2.4.47 </span>Comment start dash state</a></li>
-       <li><a href=#comment-state><span class=secno>10.2.4.48 </span>Comment state</a></li>
-       <li><a href=#comment-end-dash-state><span class=secno>10.2.4.49 </span>Comment end dash state</a></li>
-       <li><a href=#comment-end-state><span class=secno>10.2.4.50 </span>Comment end state</a></li>
-       <li><a href=#comment-end-bang-state><span class=secno>10.2.4.51 </span>Comment end bang state</a></li>
-       <li><a href=#comment-end-space-state><span class=secno>10.2.4.52 </span>Comment end space state</a></li>
-       <li><a href=#doctype-state><span class=secno>10.2.4.53 </span>DOCTYPE state</a></li>
-       <li><a href=#before-doctype-name-state><span class=secno>10.2.4.54 </span>Before DOCTYPE name state</a></li>
-       <li><a href=#doctype-name-state><span class=secno>10.2.4.55 </span>DOCTYPE name state</a></li>
-       <li><a href=#after-doctype-name-state><span class=secno>10.2.4.56 </span>After DOCTYPE name state</a></li>
-       <li><a href=#after-doctype-public-keyword-state><span class=secno>10.2.4.57 </span>After DOCTYPE public keyword state</a></li>
-       <li><a href=#before-doctype-public-identifier-state><span class=secno>10.2.4.58 </span>Before DOCTYPE public identifier state</a></li>
-       <li><a href=#doctype-public-identifier-(double-quoted)-state><span class=secno>10.2.4.59 </span>DOCTYPE public identifier (double-quoted) state</a></li>
-       <li><a href=#doctype-public-identifier-(single-quoted)-state><span class=secno>10.2.4.60 </span>DOCTYPE public identifier (single-quoted) state</a></li>
-       <li><a href=#after-doctype-public-identifier-state><span class=secno>10.2.4.61 </span>After DOCTYPE public identifier state</a></li>
-       <li><a href=#between-doctype-public-and-system-identifiers-state><span class=secno>10.2.4.62 </span>Between DOCTYPE public and system identifiers state</a></li>
-       <li><a href=#after-doctype-system-keyword-state><span class=secno>10.2.4.63 </span>After DOCTYPE system keyword state</a></li>
-       <li><a href=#before-doctype-system-identifier-state><span class=secno>10.2.4.64 </span>Before DOCTYPE system identifier state</a></li>
-       <li><a href=#doctype-system-identifier-(double-quoted)-state><span class=secno>10.2.4.65 </span>DOCTYPE system identifier (double-quoted) state</a></li>
-       <li><a href=#doctype-system-identifier-(single-quoted)-state><span class=secno>10.2.4.66 </span>DOCTYPE system identifier (single-quoted) state</a></li>
-       <li><a href=#after-doctype-system-identifier-state><span class=secno>10.2.4.67 </span>After DOCTYPE system identifier state</a></li>
-       <li><a href=#bogus-doctype-state><span class=secno>10.2.4.68 </span>Bogus DOCTYPE state</a></li>
-       <li><a href=#cdata-section-state><span class=secno>10.2.4.69 </span>CDATA section state</a></li>
-       <li><a href=#tokenizing-character-references><span class=secno>10.2.4.70 </span>Tokenizing character references</a></ol></li>
-     <li><a href=#tree-construction><span class=secno>10.2.5 </span>Tree construction</a>
+       <li><a href=#event-definition-0><span class=secno>12.2.4.1 </span>Event definition</a></ol></li>
+     <li><a href=#threads><span class=secno>12.2.5 </span>Threads</a></ol></li>
+   <li><a href=#disk-space-0><span class=secno>12.3 </span>Disk space</a></li>
+   <li><a href=#privacy><span class=secno>12.4 </span>Privacy</a>
+    <ol>
+     <li><a href=#user-tracking><span class=secno>12.4.1 </span>User tracking</a></li>
+     <li><a href=#sensitivity-of-data><span class=secno>12.4.2 </span>Sensitivity of data</a></ol></li>
+   <li><a href=#security-storage><span class=secno>12.5 </span>Security</a>
+    <ol>
+     <li><a href=#dns-spoofing-attacks><span class=secno>12.5.1 </span>DNS spoofing attacks</a></li>
+     <li><a href=#cross-directory-attacks><span class=secno>12.5.2 </span>Cross-directory attacks</a></li>
+     <li><a href=#implementation-risks><span class=secno>12.5.3 </span>Implementation risks</a></ol></ol></li>
+ <li><a href=#syntax><span class=secno>13 </span>The HTML syntax</a>
+  <ol>
+   <li><a href=#writing><span class=secno>13.1 </span>Writing HTML documents</a>
+    <ol>
+     <li><a href=#the-doctype><span class=secno>13.1.1 </span>The DOCTYPE</a></li>
+     <li><a href=#elements-0><span class=secno>13.1.2 </span>Elements</a>
       <ol>
-       <li><a href=#creating-and-inserting-elements><span class=secno>10.2.5.1 </span>Creating and inserting elements</a></li>
-       <li><a href=#closing-elements-that-have-implied-end-tags><span class=secno>10.2.5.2 </span>Closing elements that have implied end tags</a></li>
-       <li><a href=#foster-parenting><span class=secno>10.2.5.3 </span>Foster parenting</a></li>
-       <li><a href=#the-initial-insertion-mode><span class=secno>10.2.5.4 </span>The "initial" insertion mode</a></li>
-       <li><a href=#the-before-html-insertion-mode><span class=secno>10.2.5.5 </span>The "before html" insertion mode</a></li>
-       <li><a href=#the-before-head-insertion-mode><span class=secno>10.2.5.6 </span>The "before head" insertion mode</a></li>
-       <li><a href=#parsing-main-inhead><span class=secno>10.2.5.7 </span>The "in head" insertion mode</a></li>
-       <li><a href=#parsing-main-inheadnoscript><span class=secno>10.2.5.8 </span>The "in head noscript" insertion mode</a></li>
-       <li><a href=#the-after-head-insertion-mode><span class=secno>10.2.5.9 </span>The "after head" insertion mode</a></li>
-       <li><a href=#parsing-main-inbody><span class=secno>10.2.5.10 </span>The "in body" insertion mode</a></li>
-       <li><a href=#parsing-main-incdata><span class=secno>10.2.5.11 </span>The "text" insertion mode</a></li>
-       <li><a href=#parsing-main-intable><span class=secno>10.2.5.12 </span>The "in table" insertion mode</a></li>
-       <li><a href=#parsing-main-intabletext><span class=secno>10.2.5.13 </span>The "in table text" insertion mode</a></li>
-       <li><a href=#parsing-main-incaption><span class=secno>10.2.5.14 </span>The "in caption" insertion mode</a></li>
-       <li><a href=#parsing-main-incolgroup><span class=secno>10.2.5.15 </span>The "in column group" insertion mode</a></li>
-       <li><a href=#parsing-main-intbody><span class=secno>10.2.5.16 </span>The "in table body" insertion mode</a></li>
-       <li><a href=#parsing-main-intr><span class=secno>10.2.5.17 </span>The "in row" insertion mode</a></li>
-       <li><a href=#parsing-main-intd><span class=secno>10.2.5.18 </span>The "in cell" insertion mode</a></li>
-       <li><a href=#parsing-main-inselect><span class=secno>10.2.5.19 </span>The "in select" insertion mode</a></li>
-       <li><a href=#parsing-main-inselectintable><span class=secno>10.2.5.20 </span>The "in select in table" insertion mode</a></li>
-       <li><a href=#parsing-main-inforeign><span class=secno>10.2.5.21 </span>The "in foreign content" insertion mode</a></li>
-       <li><a href=#parsing-main-afterbody><span class=secno>10.2.5.22 </span>The "after body" insertion mode</a></li>
-       <li><a href=#parsing-main-inframeset><span class=secno>10.2.5.23 </span>The "in frameset" insertion mode</a></li>
-       <li><a href=#parsing-main-afterframeset><span class=secno>10.2.5.24 </span>The "after frameset" insertion mode</a></li>
-       <li><a href=#the-after-after-body-insertion-mode><span class=secno>10.2.5.25 </span>The "after after body" insertion mode</a></li>
-       <li><a href=#the-after-after-frameset-insertion-mode><span class=secno>10.2.5.26 </span>The "after after frameset" insertion mode</a></ol></li>
-     <li><a href=#the-end><span class=secno>10.2.6 </span>The end</a></li>
-     <li><a href=#coercing-an-html-dom-into-an-infoset><span class=secno>10.2.7 </span>Coercing an HTML DOM into an infoset</a></li>
-     <li><a href=#an-introduction-to-error-handling-and-strange-cases-in-the-parser><span class=secno>10.2.8 </span>An introduction to error handling and strange cases in the parser</a>
+       <li><a href=#start-tags><span class=secno>13.1.2.1 </span>Start tags</a></li>
+       <li><a href=#end-tags><span class=secno>13.1.2.2 </span>End tags</a></li>
+       <li><a href=#attributes-0><span class=secno>13.1.2.3 </span>Attributes</a></li>
+       <li><a href=#optional-tags><span class=secno>13.1.2.4 </span>Optional tags</a></li>
+       <li><a href=#element-restrictions><span class=secno>13.1.2.5 </span>Restrictions on content models</a></li>
+       <li><a href=#cdata-rcdata-restrictions><span class=secno>13.1.2.6 </span>Restrictions on the contents of raw text and RCDATA elements</a></ol></li>
+     <li><a href=#text-1><span class=secno>13.1.3 </span>Text</a>
       <ol>
-       <li><a href=#misnested-tags:-b-i-/b-/i><span class=secno>10.2.8.1 </span>Misnested tags: &lt;b&gt;&lt;i&gt;&lt;/b&gt;&lt;/i&gt;</a></li>
-       <li><a href=#misnested-tags:-b-p-/b-/p><span class=secno>10.2.8.2 </span>Misnested tags: &lt;b&gt;&lt;p&gt;&lt;/b&gt;&lt;/p&gt;</a></li>
-       <li><a href=#unexpected-markup-in-tables><span class=secno>10.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>10.2.8.4 </span>Scripts that modify the page as it is being parsed</a></ol></ol></li>
-   <li><a href=#serializing-html-fragments><span class=secno>10.3 </span>Serializing HTML fragments</a></li>
-   <li><a href=#parsing-html-fragments><span class=secno>10.4 </span>Parsing HTML fragments</a></li>
-   <li><a href=#named-character-references><span class=secno>10.5 </span>Named character references</a></ol></li>
- <li><a href=#the-xhtml-syntax><span class=secno>11 </span>The XHTML syntax</a>
+       <li><a href=#newlines><span class=secno>13.1.3.1 </span>Newlines</a></ol></li>
+     <li><a href=#character-references><span class=secno>13.1.4 </span>Character references</a></li>
+     <li><a href=#cdata-sections><span class=secno>13.1.5 </span>CDATA sections</a></li>
+     <li><a href=#comments><span class=secno>13.1.6 </span>Comments</a></ol></li>
+   <li><a href=#parsing><span class=secno>13.2 </span>Parsing HTML documents</a>
+    <ol>
+     <li><a href=#overview-of-the-parsing-model><span class=secno>13.2.1 </span>Overview of the parsing model</a></li>
+     <li><a href=#the-input-stream><span class=secno>13.2.2 </span>The input stream</a>
+      <ol>
+       <li><a href=#determining-the-character-encoding><span class=secno>13.2.2.1 </span>Determining the character encoding</a></li>
+       <li><a href=#character-encodings-0><span class=secno>13.2.2.2 </span>Character encodings</a></li>
+       <li><a href=#preprocessing-the-input-stream><span class=secno>13.2.2.3 </span>Preprocessing the input stream</a></li>
+       <li><a href=#changing-the-encoding-while-parsing><span class=secno>13.2.2.4 </span>Changing the encoding while parsing</a></ol></li>
+     <li><a href=#parse-state><span class=secno>13.2.3 </span>Parse state</a>
+      <ol>
+       <li><a href=#the-insertion-mode><span class=secno>13.2.3.1 </span>The insertion mode</a></li>
+       <li><a href=#the-stack-of-open-elements><span class=secno>13.2.3.2 </span>The stack of open elements</a></li>
+       <li><a href=#the-list-of-active-formatting-elements><span class=secno>13.2.3.3 </span>The list of active formatting elements</a></li>
+       <li><a href=#the-element-pointers><span class=secno>13.2.3.4 </span>The element pointers</a></li>
+       <li><a href=#other-parsing-state-flags><span class=secno>13.2.3.5 </span>Other parsing state flags</a></ol></li>
+     <li><a href=#tokenization><span class=secno>13.2.4 </span>Tokenization</a>
+      <ol>
+       <li><a href=#data-state><span class=secno>13.2.4.1 </span>Data state</a></li>
+       <li><a href=#character-reference-in-data-state><span class=secno>13.2.4.2 </span>Character reference in data state</a></li>
+       <li><a href=#rcdata-state><span class=secno>13.2.4.3 </span>RCDATA state</a></li>
+       <li><a href=#character-reference-in-rcdata-state><span class=secno>13.2.4.4 </span>Character reference in RCDATA state</a></li>
+       <li><a href=#rawtext-state><span class=secno>13.2.4.5 </span>RAWTEXT state</a></li>
+       <li><a href=#script-data-state><span class=secno>13.2.4.6 </span>Script data state</a></li>
+       <li><a href=#plaintext-state><span class=secno>13.2.4.7 </span>PLAINTEXT state</a></li>
+       <li><a href=#tag-open-state><span class=secno>13.2.4.8 </span>Tag open state</a></li>
+       <li><a href=#end-tag-open-state><span class=secno>13.2.4.9 </span>End tag open state</a></li>
+       <li><a href=#tag-name-state><span class=secno>13.2.4.10 </span>Tag name state</a></li>
+       <li><a href=#rcdata-less-than-sign-state><span class=secno>13.2.4.11 </span>RCDATA less-than sign state</a></li>
+       <li><a href=#rcdata-end-tag-open-state><span class=secno>13.2.4.12 </span>RCDATA end tag open state</a></li>
+       <li><a href=#rcdata-end-tag-name-state><span class=secno>13.2.4.13 </span>RCDATA end tag name state</a></li>
+       <li><a href=#rawtext-less-than-sign-state><span class=secno>13.2.4.14 </span>RAWTEXT less-than sign state</a></li>
+       <li><a href=#rawtext-end-tag-open-state><span class=secno>13.2.4.15 </span>RAWTEXT end tag open state</a></li>
+       <li><a href=#rawtext-end-tag-name-state><span class=secno>13.2.4.16 </span>RAWTEXT end tag name state</a></li>
+       <li><a href=#script-data-less-than-sign-state><span class=secno>13.2.4.17 </span>Script data less-than sign state</a></li>
+       <li><a href=#script-data-end-tag-open-state><span class=secno>13.2.4.18 </span>Script data end tag open state</a></li>
+       <li><a href=#script-data-end-tag-name-state><span class=secno>13.2.4.19 </span>Script data end tag name state</a></li>
+       <li><a href=#script-data-escape-start-state><span class=secno>13.2.4.20 </span>Script data escape start state</a></li>
+       <li><a href=#script-data-escape-start-dash-state><span class=secno>13.2.4.21 </span>Script data escape start dash state</a></li>
+       <li><a href=#script-data-escaped-state><span class=secno>13.2.4.22 </span>Script data escaped state</a></li>
+       <li><a href=#script-data-escaped-dash-state><span class=secno>13.2.4.23 </span>Script data escaped dash state</a></li>
+       <li><a href=#script-data-escaped-dash-dash-state><span class=secno>13.2.4.24 </span>Script data escaped dash dash state</a></li>
+       <li><a href=#script-data-escaped-less-than-sign-state><span class=secno>13.2.4.25 </span>Script data escaped less-than sign state</a></li>
+       <li><a href=#script-data-escaped-end-tag-open-state><span class=secno>13.2.4.26 </span>Script data escaped end tag open state</a></li>
+       <li><a href=#script-data-escaped-end-tag-name-state><span class=secno>13.2.4.27 </span>Script data escaped end tag name state</a></li>
+       <li><a href=#script-data-double-escape-start-state><span class=secno>13.2.4.28 </span>Script data double escape start state</a></li>
+       <li><a href=#script-data-double-escaped-state><span class=secno>13.2.4.29 </span>Script data double escaped state</a></li>
+       <li><a href=#script-data-double-escaped-dash-state><span class=secno>13.2.4.30 </span>Script data double escaped dash state</a></li>
+       <li><a href=#script-data-double-escaped-dash-dash-state><span class=secno>13.2.4.31 </span>Script data double escaped dash dash state</a></li>
+       <li><a href=#script-data-double-escaped-less-than-sign-state><span class=secno>13.2.4.32 </span>Script data double escaped less-than sign state</a></li>
+       <li><a href=#script-data-double-escape-end-state><span class=secno>13.2.4.33 </span>Script data double escape end state</a></li>
+       <li><a href=#before-attribute-name-state><span class=secno>13.2.4.34 </span>Before attribute name state</a></li>
+       <li><a href=#attribute-name-state><span class=secno>13.2.4.35 </span>Attribute name state</a></li>
+       <li><a href=#after-attribute-name-state><span class=secno>13.2.4.36 </span>After attribute name state</a></li>
+       <li><a href=#before-attribute-value-state><span class=secno>13.2.4.37 </span>Before attribute value state</a></li>
+       <li><a href=#attribute-value-(double-quoted)-state><span class=secno>13.2.4.38 </span>Attribute value (double-quoted) state</a></li>
+       <li><a href=#attribute-value-(single-quoted)-state><span class=secno>13.2.4.39 </span>Attribute value (single-quoted) state</a></li>
+       <li><a href=#attribute-value-(unquoted)-state><span class=secno>13.2.4.40 </span>Attribute value (unquoted) state</a></li>
+       <li><a href=#character-reference-in-attribute-value-state><span class=secno>13.2.4.41 </span>Character reference in attribute value state</a></li>
+       <li><a href=#after-attribute-value-(quoted)-state><span class=secno>13.2.4.42 </span>After attribute value (quoted) state</a></li>
+       <li><a href=#self-closing-start-tag-state><span class=secno>13.2.4.43 </span>Self-closing start tag state</a></li>
+       <li><a href=#bogus-comment-state><span class=secno>13.2.4.44 </span>Bogus comment state</a></li>
+       <li><a href=#markup-declaration-open-state><span class=secno>13.2.4.45 </span>Markup declaration open state</a></li>
+       <li><a href=#comment-start-state><span class=secno>13.2.4.46 </span>Comment start state</a></li>
+       <li><a href=#comment-start-dash-state><span class=secno>13.2.4.47 </span>Comment start dash state</a></li>
+       <li><a href=#comment-state><span class=secno>13.2.4.48 </span>Comment state</a></li>
+       <li><a href=#comment-end-dash-state><span class=secno>13.2.4.49 </span>Comment end dash state</a></li>
+       <li><a href=#comment-end-state><span class=secno>13.2.4.50 </span>Comment end state</a></li>
+       <li><a href=#comment-end-bang-state><span class=secno>13.2.4.51 </span>Comment end bang state</a></li>
+       <li><a href=#doctype-state><span class=secno>13.2.4.52 </span>DOCTYPE state</a></li>
+       <li><a href=#before-doctype-name-state><span class=secno>13.2.4.53 </span>Before DOCTYPE name state</a></li>
+       <li><a href=#doctype-name-state><span class=secno>13.2.4.54 </span>DOCTYPE name state</a></li>
+       <li><a href=#after-doctype-name-state><span class=secno>13.2.4.55 </span>After DOCTYPE name state</a></li>
+       <li><a href=#after-doctype-public-keyword-state><span class=secno>13.2.4.56 </span>After DOCTYPE public keyword state</a></li>
+       <li><a href=#before-doctype-public-identifier-state><span class=secno>13.2.4.57 </span>Before DOCTYPE public identifier state</a></li>
+       <li><a href=#doctype-public-identifier-(double-quoted)-state><span class=secno>13.2.4.58 </span>DOCTYPE public identifier (double-quoted) state</a></li>
+       <li><a href=#doctype-public-identifier-(single-quoted)-state><span class=secno>13.2.4.59 </span>DOCTYPE public identifier (single-quoted) state</a></li>
+       <li><a href=#after-doctype-public-identifier-state><span class=secno>13.2.4.60 </span>After DOCTYPE public identifier state</a></li>
+       <li><a href=#between-doctype-public-and-system-identifiers-state><span class=secno>13.2.4.61 </span>Between DOCTYPE public and system identifiers state</a></li>
+       <li><a href=#after-doctype-system-keyword-state><span class=secno>13.2.4.62 </span>After DOCTYPE system keyword state</a></li>
+       <li><a href=#before-doctype-system-identifier-state><span class=secno>13.2.4.63 </span>Before DOCTYPE system identifier state</a></li>
+       <li><a href=#doctype-system-identifier-(double-quoted)-state><span class=secno>13.2.4.64 </span>DOCTYPE system identifier (double-quoted) state</a></li>
+       <li><a href=#doctype-system-identifier-(single-quoted)-state><span class=secno>13.2.4.65 </span>DOCTYPE system identifier (single-quoted) state</a></li>
+       <li><a href=#after-doctype-system-identifier-state><span class=secno>13.2.4.66 </span>After DOCTYPE system identifier state</a></li>
+       <li><a href=#bogus-doctype-state><span class=secno>13.2.4.67 </span>Bogus DOCTYPE state</a></li>
+       <li><a href=#cdata-section-state><span class=secno>13.2.4.68 </span>CDATA section state</a></li>
+       <li><a href=#tokenizing-character-references><span class=secno>13.2.4.69 </span>Tokenizing character references</a></ol></li>
+     <li><a href=#tree-construction><span class=secno>13.2.5 </span>Tree construction</a>
+      <ol>
+       <li><a href=#creating-and-inserting-elements><span class=secno>13.2.5.1 </span>Creating and inserting elements</a></li>
+       <li><a href=#closing-elements-that-have-implied-end-tags><span class=secno>13.2.5.2 </span>Closing elements that have implied end tags</a></li>
+       <li><a href=#foster-parenting><span class=secno>13.2.5.3 </span>Foster parenting</a></li>
+       <li><a href=#parsing-main-inhtml><span class=secno>13.2.5.4 </span>The rules for parsing tokens in HTML content</a>
+        <ol>
+         <li><a href=#the-initial-insertion-mode><span class=secno>13.2.5.4.1 </span>The "initial" insertion mode</a></li>
+         <li><a href=#the-before-html-insertion-mode><span class=secno>13.2.5.4.2 </span>The "before html" insertion mode</a></li>
+         <li><a href=#the-before-head-insertion-mode><span class=secno>13.2.5.4.3 </span>The "before head" insertion mode</a></li>
+         <li><a href=#parsing-main-inhead><span class=secno>13.2.5.4.4 </span>The "in head" insertion mode</a></li>
+         <li><a href=#parsing-main-inheadnoscript><span class=secno>13.2.5.4.5 </span>The "in head noscript" insertion mode</a></li>
+         <li><a href=#the-after-head-insertion-mode><span class=secno>13.2.5.4.6 </span>The "after head" insertion mode</a></li>
+         <li><a href=#parsing-main-inbody><span class=secno>13.2.5.4.7 </span>The "in body" insertion mode</a></li>
+         <li><a href=#parsing-main-incdata><span class=secno>13.2.5.4.8 </span>The "text" insertion mode</a></li>
+         <li><a href=#parsing-main-intable><span class=secno>13.2.5.4.9 </span>The "in table" insertion mode</a></li>
+         <li><a href=#parsing-main-intabletext><span class=secno>13.2.5.4.10 </span>The "in table text" insertion mode</a></li>
+         <li><a href=#parsing-main-incaption><span class=secno>13.2.5.4.11 </span>The "in caption" insertion mode</a></li>
+         <li><a href=#parsing-main-incolgroup><span class=secno>13.2.5.4.12 </span>The "in column group" insertion mode</a></li>
+         <li><a href=#parsing-main-intbody><span class=secno>13.2.5.4.13 </span>The "in table body" insertion mode</a></li>
+         <li><a href=#parsing-main-intr><span class=secno>13.2.5.4.14 </span>The "in row" insertion mode</a></li>
+         <li><a href=#parsing-main-intd><span class=secno>13.2.5.4.15 </span>The "in cell" insertion mode</a></li>
+         <li><a href=#parsing-main-inselect><span class=secno>13.2.5.4.16 </span>The "in select" insertion mode</a></li>
+         <li><a href=#parsing-main-inselectintable><span class=secno>13.2.5.4.17 </span>The "in select in table" insertion mode</a></li>
+         <li><a href=#parsing-main-afterbody><span class=secno>13.2.5.4.18 </span>The "after body" insertion mode</a></li>
+         <li><a href=#parsing-main-inframeset><span class=secno>13.2.5.4.19 </span>The "in frameset" insertion mode</a></li>
+         <li><a href=#parsing-main-afterframeset><span class=secno>13.2.5.4.20 </span>The "after frameset" insertion mode</a></li>
+         <li><a href=#the-after-after-body-insertion-mode><span class=secno>13.2.5.4.21 </span>The "after after body" insertion mode</a></li>
+         <li><a href=#the-after-after-frameset-insertion-mode><span class=secno>13.2.5.4.22 </span>The "after after frameset" insertion mode</a></ol></li>
+       <li><a href=#parsing-main-inforeign><span class=secno>13.2.5.5 </span>The rules for parsing tokens in foreign content</a></ol></li>
+     <li><a href=#the-end><span class=secno>13.2.6 </span>The end</a></li>
+     <li><a href=#coercing-an-html-dom-into-an-infoset><span class=secno>13.2.7 </span>Coercing an HTML DOM into an infoset</a></li>
+     <li><a href=#an-introduction-to-error-handling-and-strange-cases-in-the-parser><span class=secno>13.2.8 </span>An introduction to error handling and strange cases in the parser</a>
+      <ol>
+       <li><a href=#misnested-tags:-b-i-/b-/i><span class=secno>13.2.8.1 </span>Misnested tags: &lt;b&gt;&lt;i&gt;&lt;/b&gt;&lt;/i&gt;</a></li>
+       <li><a href=#misnested-tags:-b-p-/b-/p><span class=secno>13.2.8.2 </span>Misnested tags: &lt;b&gt;&lt;p&gt;&lt;/b&gt;&lt;/p&gt;</a></li>
+       <li><a href=#unexpected-markup-in-tables><span class=secno>13.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>13.2.8.4 </span>Scripts that modify the page as it is being parsed</a></li>
+       <li><a href=#the-execution-of-scripts-that-are-moving-across-multiple-documents><span class=secno>13.2.8.5 </span>The execution of scripts that are moving across multiple documents</a></li>
+       <li><a href=#unclosed-formatting-elements><span class=secno>13.2.8.6 </span>Unclosed formatting elements</a></ol></ol></li>
+   <li><a href=#serializing-html-fragments><span class=secno>13.3 </span>Serializing HTML fragments</a></li>
+   <li><a href=#parsing-html-fragments><span class=secno>13.4 </span>Parsing HTML fragments</a></li>
+   <li><a href=#named-character-references><span class=secno>13.5 </span>Named character references</a></ol></li>
+ <li><a href=#the-xhtml-syntax><span class=secno>14 </span>The XHTML syntax</a>
   <ol>
-   <li><a href=#writing-xhtml-documents><span class=secno>11.1 </span>Writing XHTML documents</a></li>
-   <li><a href=#parsing-xhtml-documents><span class=secno>11.2 </span>Parsing XHTML documents</a></li>
-   <li><a href=#serializing-xhtml-fragments><span class=secno>11.3 </span>Serializing XHTML fragments</a></li>
-   <li><a href=#parsing-xhtml-fragments><span class=secno>11.4 </span>Parsing XHTML fragments</a></ol></li>
- <li><a href=#rendering><span class=secno>12 </span>Rendering</a>
+   <li><a href=#writing-xhtml-documents><span class=secno>14.1 </span>Writing XHTML documents</a></li>
+   <li><a href=#parsing-xhtml-documents><span class=secno>14.2 </span>Parsing XHTML documents</a></li>
+   <li><a href=#serializing-xhtml-fragments><span class=secno>14.3 </span>Serializing XHTML fragments</a></li>
+   <li><a href=#parsing-xhtml-fragments><span class=secno>14.4 </span>Parsing XHTML fragments</a></ol></li>
+ <li><a href=#rendering><span class=secno>15 </span>Rendering</a>
   <ol>
-   <li><a href=#introduction-8><span class=secno>12.1 </span>Introduction</a></li>
-   <li><a href=#the-css-user-agent-style-sheet-and-presentational-hints><span class=secno>12.2 </span>The CSS user agent style sheet and presentational hints</a>
+   <li><a href=#introduction-17><span class=secno>15.1 </span>Introduction</a></li>
+   <li><a href=#the-css-user-agent-style-sheet-and-presentational-hints><span class=secno>15.2 </span>The CSS user agent style sheet and presentational hints</a></li>
+   <li><a href=#non-replaced-elements><span class=secno>15.3 </span>Non-replaced elements</a>
     <ol>
-     <li><a href=#introduction-9><span class=secno>12.2.1 </span>Introduction</a></li>
-     <li><a href=#display-types><span class=secno>12.2.2 </span>Display types</a></li>
-     <li><a href=#margins-and-padding><span class=secno>12.2.3 </span>Margins and padding</a></li>
-     <li><a href=#alignment><span class=secno>12.2.4 </span>Alignment</a></li>
-     <li><a href=#fonts-and-colors><span class=secno>12.2.5 </span>Fonts and colors</a></li>
-     <li><a href=#punctuation-and-decorations><span class=secno>12.2.6 </span>Punctuation and decorations</a></li>
-     <li><a href=#resetting-rules-for-inherited-properties><span class=secno>12.2.7 </span>Resetting rules for inherited properties</a></li>
-     <li><a href=#the-hr-element-0><span class=secno>12.2.8 </span>The <code>hr</code> element</a></li>
-     <li><a href=#the-fieldset-element-0><span class=secno>12.2.9 </span>The <code>fieldset</code> element</a></ol></li>
-   <li><a href=#replaced-elements><span class=secno>12.3 </span>Replaced elements</a>
+     <li><a href=#hidden-elements><span class=secno>15.3.1 </span>Hidden elements</a></li>
+     <li><a href=#the-page><span class=secno>15.3.2 </span>The page</a></li>
+     <li><a href=#flow-content-1><span class=secno>15.3.3 </span>Flow content</a></li>
+     <li><a href=#phrasing-content-1><span class=secno>15.3.4 </span>Phrasing content</a></li>
+     <li><a href=#bidirectional-text><span class=secno>15.3.5 </span>Bidirectional text</a></li>
+     <li><a href=#sections-and-headings><span class=secno>15.3.6 </span>Sections and headings</a></li>
+     <li><a href=#lists><span class=secno>15.3.7 </span>Lists</a></li>
+     <li><a href=#tables><span class=secno>15.3.8 </span>Tables</a></li>
+     <li><a href=#form-controls><span class=secno>15.3.9 </span>Form controls</a></li>
+     <li><a href=#the-hr-element-0><span class=secno>15.3.10 </span>The <code>hr</code> element</a></li>
+     <li><a href=#the-fieldset-element-0><span class=secno>15.3.11 </span>The <code>fieldset</code> element</a></ol></li>
+   <li><a href=#replaced-elements><span class=secno>15.4 </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>
-     <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>
-     <li><a href=#toolbars-0><span class=secno>12.3.6 </span>Toolbars</a></ol></li>
-   <li><a href=#bindings><span class=secno>12.4 </span>Bindings</a>
+     <li><a href=#embedded-content-2><span class=secno>15.4.1 </span>Embedded content</a></li>
+     <li><a href=#timed-text-tracks-0><span class=secno>15.4.2 </span>Timed text tracks</a>
+      <ol>
+       <li><a href=#webvtt-cue-text-rendering-rules><span class=secno>15.4.2.1 </span>WebVTT cue text rendering rules</a></li>
+       <li><a href=#applying-css-properties-to-webvtt-node-objects><span class=secno>15.4.2.2 </span>Applying CSS properties to WebVTT Node Objects</a></li>
+       <li><a href=#css-extensions><span class=secno>15.4.2.3 </span>CSS extensions</a>
+        <ol>
+         <li><a href="#the-'::cue'-pseudo-element"><span class=secno>15.4.2.3.1 </span>The '::cue' pseudo-element</a></li>
+         <li><a href="#the-':past'-and-':future'-pseudo-classes"><span class=secno>15.4.2.3.2 </span>The ':past' and ':future' pseudo-classes</a></ol></ol></li>
+     <li><a href=#images-0><span class=secno>15.4.3 </span>Images</a></li>
+     <li><a href=#attributes-for-embedded-content-and-images><span class=secno>15.4.4 </span>Attributes for embedded content and images</a></li>
+     <li><a href=#image-maps-0><span class=secno>15.4.5 </span>Image maps</a></li>
+     <li><a href=#toolbars-0><span class=secno>15.4.6 </span>Toolbars</a></ol></li>
+   <li><a href=#bindings><span class=secno>15.5 </span>Bindings</a>
     <ol>
-     <li><a href=#introduction-10><span class=secno>12.4.1 </span>Introduction</a></li>
-     <li><a href=#the-button-element-0><span class=secno>12.4.2 </span>The <code>button</code> element</a></li>
-     <li><a href=#the-details-element-0><span class=secno>12.4.3 </span>The <code>details</code> element</a></li>
-     <li><a href=#the-input-element-as-a-text-entry-widget><span class=secno>12.4.4 </span>The <code>input</code> element as a text entry widget</a></li>
-     <li><a href=#the-input-element-as-domain-specific-widgets><span class=secno>12.4.5 </span>The <code>input</code> element as domain-specific widgets</a></li>
-     <li><a href=#the-input-element-as-a-range-control><span class=secno>12.4.6 </span>The <code>input</code> element as a range control</a></li>
-     <li><a href=#the-input-element-as-a-color-well><span class=secno>12.4.7 </span>The <code>input</code> element as a color well</a></li>
-     <li><a href=#the-input-element-as-a-check-box-and-radio-button-widgets><span class=secno>12.4.8 </span>The <code>input</code> element as a check box and radio button widgets</a></li>
-     <li><a href=#the-input-element-as-a-file-upload-control><span class=secno>12.4.9 </span>The <code>input</code> element as a file upload control</a></li>
-     <li><a href=#the-input-element-as-a-button><span class=secno>12.4.10 </span>The <code>input</code> element as a button</a></li>
-     <li><a href=#the-marquee-element-0><span class=secno>12.4.11 </span>The <code>marquee</code> element</a></li>
-     <li><a href=#the-meter-element-0><span class=secno>12.4.12 </span>The <code>meter</code> element</a></li>
-     <li><a href=#the-progress-element-0><span class=secno>12.4.13 </span>The <code>progress</code> element</a></li>
-     <li><a href=#the-select-element-0><span class=secno>12.4.14 </span>The <code>select</code> element</a></li>
-     <li><a href=#the-textarea-element-0><span class=secno>12.4.15 </span>The <code>textarea</code> element</a></li>
-     <li><a href=#the-keygen-element-0><span class=secno>12.4.16 </span>The <code>keygen</code> element</a></li>
-     <li><a href=#the-time-element-0><span class=secno>12.4.17 </span>The <code>time</code> element</a></ol></li>
-   <li><a href=#frames-and-framesets><span class=secno>12.5 </span>Frames and framesets</a></li>
-   <li><a href=#interactive-media><span class=secno>12.6 </span>Interactive media</a>
+     <li><a href=#introduction-18><span class=secno>15.5.1 </span>Introduction</a></li>
+     <li><a href=#the-button-element-0><span class=secno>15.5.2 </span>The <code>button</code> element</a></li>
+     <li><a href=#the-details-element-0><span class=secno>15.5.3 </span>The <code>details</code> element</a></li>
+     <li><a href=#the-input-element-as-a-text-entry-widget><span class=secno>15.5.4 </span>The <code>input</code> element as a text entry widget</a></li>
+     <li><a href=#the-input-element-as-domain-specific-widgets><span class=secno>15.5.5 </span>The <code>input</code> element as domain-specific widgets</a></li>
+     <li><a href=#the-input-element-as-a-range-control><span class=secno>15.5.6 </span>The <code>input</code> element as a range control</a></li>
+     <li><a href=#the-input-element-as-a-color-well><span class=secno>15.5.7 </span>The <code>input</code> element as a color well</a></li>
+     <li><a href=#the-input-element-as-a-checkbox-and-radio-button-widgets><span class=secno>15.5.8 </span>The <code>input</code> element as a checkbox and radio button widgets</a></li>
+     <li><a href=#the-input-element-as-a-file-upload-control><span class=secno>15.5.9 </span>The <code>input</code> element as a file upload control</a></li>
+     <li><a href=#the-input-element-as-a-button><span class=secno>15.5.10 </span>The <code>input</code> element as a button</a></li>
+     <li><a href=#the-marquee-element-0><span class=secno>15.5.11 </span>The <code>marquee</code> element</a></li>
+     <li><a href=#the-meter-element-0><span class=secno>15.5.12 </span>The <code>meter</code> element</a></li>
+     <li><a href=#the-progress-element-0><span class=secno>15.5.13 </span>The <code>progress</code> element</a></li>
+     <li><a href=#the-select-element-0><span class=secno>15.5.14 </span>The <code>select</code> element</a></li>
+     <li><a href=#the-textarea-element-0><span class=secno>15.5.15 </span>The <code>textarea</code> element</a></li>
+     <li><a href=#the-keygen-element-0><span class=secno>15.5.16 </span>The <code>keygen</code> element</a></li>
+     <li><a href=#the-time-element-0><span class=secno>15.5.17 </span>The <code>time</code> element</a></ol></li>
+   <li><a href=#frames-and-framesets><span class=secno>15.6 </span>Frames and framesets</a></li>
+   <li><a href=#interactive-media><span class=secno>15.7 </span>Interactive media</a>
     <ol>
-     <li><a href=#links,-forms,-and-navigation><span class=secno>12.6.1 </span>Links, forms, and navigation</a></li>
-     <li><a href=#the-title-attribute-0><span class=secno>12.6.2 </span>The <code title=attr-title>title</code> attribute</a></li>
-     <li><a href=#editing-hosts><span class=secno>12.6.3 </span>Editing hosts</a></ol></li>
-   <li><a href=#print-media><span class=secno>12.7 </span>Print media</a></ol></li>
- <li><a href=#obsolete><span class=secno>13 </span>Obsolete features</a>
+     <li><a href=#links,-forms,-and-navigation><span class=secno>15.7.1 </span>Links, forms, and navigation</a></li>
+     <li><a href=#the-title-attribute-0><span class=secno>15.7.2 </span>The <code title=attr-title>title</code> attribute</a></li>
+     <li><a href=#editing-hosts><span class=secno>15.7.3 </span>Editing hosts</a></li>
+     <li><a href=#text-rendered-in-native-user-interfaces><span class=secno>15.7.4 </span>Text rendered in native user interfaces</a></ol></li>
+   <li><a href=#print-media><span class=secno>15.8 </span>Print media</a></ol></li>
+ <li><a href=#obsolete><span class=secno>16 </span>Obsolete features</a>
   <ol>
-   <li><a href=#obsolete-but-conforming-features><span class=secno>13.1 </span>Obsolete but conforming features</a>
+   <li><a href=#obsolete-but-conforming-features><span class=secno>16.1 </span>Obsolete but conforming features</a>
     <ol>
-     <li><a href=#warnings-for-obsolete-but-conforming-features><span class=secno>13.1.1 </span>Warnings for obsolete but conforming features</a></ol></li>
-   <li><a href=#non-conforming-features><span class=secno>13.2 </span>Non-conforming features</a></li>
-   <li><a href=#requirements-for-implementations><span class=secno>13.3 </span>Requirements for implementations</a>
+     <li><a href=#warnings-for-obsolete-but-conforming-features><span class=secno>16.1.1 </span>Warnings for obsolete but conforming features</a></ol></li>
+   <li><a href=#non-conforming-features><span class=secno>16.2 </span>Non-conforming features</a></li>
+   <li><a href=#requirements-for-implementations><span class=secno>16.3 </span>Requirements for implementations</a>
     <ol>
-     <li><a href=#the-applet-element><span class=secno>13.3.1 </span>The <code>applet</code> element</a></li>
-     <li><a href=#the-marquee-element><span class=secno>13.3.2 </span>The <code>marquee</code> element</a></li>
-     <li><a href=#frames><span class=secno>13.3.3 </span>Frames</a></li>
-     <li><a href=#other-elements,-attributes-and-apis><span class=secno>13.3.4 </span>Other elements, attributes and APIs</a></ol></ol></li>
- <li><a href=#iana><span class=secno>14 </span>IANA considerations</a>
+     <li><a href=#the-applet-element><span class=secno>16.3.1 </span>The <code>applet</code> element</a></li>
+     <li><a href=#the-marquee-element><span class=secno>16.3.2 </span>The <code>marquee</code> element</a></li>
+     <li><a href=#frames><span class=secno>16.3.3 </span>Frames</a></li>
+     <li><a href=#other-elements,-attributes-and-apis><span class=secno>16.3.4 </span>Other elements, attributes and APIs</a></ol></ol></li>
+ <li><a href=#iana><span class=secno>17 </span>IANA considerations</a>
   <ol>
-   <li><a href=#text/html><span class=secno>14.1 </span><code>text/html</code></a></li>
-   <li><a href=#text/html-sandboxed><span class=secno>14.2 </span><code>text/html-sandboxed</code></a></li>
-   <li><a href=#application/xhtml+xml><span class=secno>14.3 </span><code>application/xhtml+xml</code></a></li>
-   <li><a href=#text/cache-manifest><span class=secno>14.4 </span><code>text/cache-manifest</code></a></li>
-   <li><a href=#text/ping><span class=secno>14.5 </span><code>text/ping</code></a></li>
-   <li><a href=#text/srt><span class=secno>14.6 </span><code>text/srt</code></a></li>
-   <li><a href=#application/microdata+json><span class=secno>14.7 </span><code>application/microdata+json</code></a></li>
-   <li><a href=#ping-from><span class=secno>14.8 </span><code>Ping-From</code></a></li>
-   <li><a href=#ping-to><span class=secno>14.9 </span><code>Ping-To</code></a></ol></li>
+   <li><a href=#text/html><span class=secno>17.1 </span><code>text/html</code></a></li>
+   <li><a href=#text/html-sandboxed><span class=secno>17.2 </span><code>text/html-sandboxed</code></a></li>
+   <li><a href=#multipart/x-mixed-replace><span class=secno>17.3 </span><code>multipart/x-mixed-replace</code></a></li>
+   <li><a href=#application/xhtml+xml><span class=secno>17.4 </span><code>application/xhtml+xml</code></a></li>
+   <li><a href=#application/x-www-form-urlencoded><span class=secno>17.5 </span><code>application/x-www-form-urlencoded</code></a></li>
+   <li><a href=#text/cache-manifest><span class=secno>17.6 </span><code>text/cache-manifest</code></a></li>
+   <li><a href=#text/ping><span class=secno>17.7 </span><code>text/ping</code></a></li>
+   <li><a href=#text/vtt><span class=secno>17.8 </span><code>text/vtt</code></a></li>
+   <li><a href=#application/microdata+json><span class=secno>17.9 </span><code>application/microdata+json</code></a></li>
+   <li><a href=#application/html-peer-connection-data><span class=secno>17.10 </span><code>application/html-peer-connection-data</code></a></li>
+   <li><a href=#ping-from><span class=secno>17.11 </span><code>Ping-From</code></a></li>
+   <li><a href=#ping-to><span class=secno>17.12 </span><code>Ping-To</code></a></li>
+   <li><a href=#web+-scheme-prefix><span class=secno>17.13 </span><code>web+</code> scheme prefix</a></ol></li>
  <li><a class=no-num href=#index>Index</a>
   <ol>
    <li><a class=no-num href=#elements-1>Elements</a></li>
    <li><a class=no-num href=#element-content-categories>Element content categories</a></li>
    <li><a class=no-num href=#attributes-1>Attributes</a></li>
-   <li><a class=no-num href=#interfaces>Interfaces</a></li>
-   <li><a class=no-num href=#events-0>Events</a></ol></li>
+   <li><a class=no-num href=#interfaces>Interfaces</a></ol></li>
  <li><a class=no-num href=#references>References</a></li>
  <li><a class=no-num href=#acknowledgements>Acknowledgements</a></ol>
 <!--end-toc-->
-  <hr><h2 id=introduction><span class=secno>1 </span>Introduction</h2>
+  <hr><!-- An advisory for those reading this source. --><!-- In this specification, there are a number of comments (like
+        this one) that have three consecutive Xs. These indicate known
+        problems that are expected to be resolved in the future. --><!-- There are also comments with the string "v2", "v3", "v4", or
+        higher numbers. These indicate ideas for future versions of
+        the specification that have not yet been included, usually
+        because it's too early (one has to move slowly lest the
+        browser vendors get overwhelmed with changes). --><!-- Finally, there may also be some known issues in this
+        specification marked with the following punctuation: --><!--!--><!-- These are issues that are known to the editor but cannot be
+        currently fixed because they were introduced by W3C decisions.
+        In theory we could fork the WHATWG copy of the spec, but doing
+        so would introduce normative differences between the W3C and
+        WHATWG specs and these issues are not worth the hassle that
+        this would cause. We'll probably be able to fix them some day,
+        but for now we are living with them. --><h2 id=introduction><span class=secno>1 </span>Introduction</h2>
 
 
 
-  <h3 id=is-this-html5?><span class=secno>1.1 </span>Is this HTML5?</h3>
 
-  <p><i>This section is non-normative.</i></p>
+  <h3 id=abstract><span class=secno>1.1 </span>Where does this specification fit?</h3>
+
+  <p>This specification defines a big part of the Web platform, in
+  lots of detail. Its place in the Web platform specification stack
+  relative to other specifications can be best summed up as
+  follows:</p>
+
+  <p><img alt="It consists of everything else, above such core technologies as HTTP, URI/IRIs, DOM Core, XML, Unicode, and ECMAScript; below presentation-layer technologies like CSS, XBL, and the NPAPI; and to the side of technologies like Geolocation, SVG, MathML, and XHR." height=359 src=http://images.whatwg.org/abstract.png width=398></p>
 
 
 
+  <h3 id=is-this-html5?><span class=secno>1.2 </span>Is this HTML5?</h3><!--VERSION-->
+
+  <p><i>This section is non-normative.</i></p>
+
   <p>In short: Yes.</p>
 
-  <p>In more length: "HTML5" has at various times been used to refer
-  to a wide variety of technologies, some of which originated in this
-  document, and some of which have only ever been tangentially
-  related.</p>
-
-  <p>This specification actually now defines the next generation of
-  HTML after HTML5. HTML5 reached Last Call at the WHATWG in October
-  2009, and shortly after we started working on some experimental new
-  features that are not as stable as the rest of the
-  specification. The stability of sections is annotated in the
-  margin.</p>
-
-  <p>The W3C has also been working on HTML in conjunction with the
-  WHATWG; at the W3C, this document has been split into several parts,
-  and the occasional informative paragraph or example has been removed
-  for technical reasons. For all intents and purposes, however, the
-  W3C HTML specifications and this specification are equivalent (and
-  they are in fact all generated from the same source document).</p>
-
-  <p>Features that are considered part of the next generation of HTML
-  beyond HTML5 currently consist of only:</p>
-
-  <ul class=brief><li>The <code><a href=#devices>device</a></code> element.</li>
-   <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>
-  </ul><p>Features that are part of HTML5 (and this specification) but that
-  are either currently, or have been in the past, published as
-  separate specifications:</p>
-
-  <ul class=brief><li><a href=#2dcontext>Canvas 2D Graphics Context</a>
-   <li><a href=#microdata>Microdata</a>
-   <li><a href=#mdvocabs>Microdata vocabularies</a>
-   <li><a href=#crossDocumentMessages>Cross-document messaging</a> (also known as Communications)
-   <li><a href=#channel-messaging>Channel messaging</a> (also known as Communications)
-   <li><a href=#forms>Forms</a> (previously known as Web Forms 2)
-  </ul><p>Features that are not currently in this document that were in the
-  past considered part of HTML5, or that were never part of HTML5 but
-  have been referred to as part of HTML5 in the media, include:</p>
-
-  <ul class=brief><li><a href=http://www.whatwg.org/specs/web-workers/current-work/>Web Workers</a>
-   <li><a href=http://dev.w3.org/html5/webstorage/>Web Storage</a>
-   <li><a href=http://dev.w3.org/html5/websockets/>WebSocket API</a>
-   <li><a href=http://www.whatwg.org/specs/web-socket-protocol/>WebSocket protocol</a>
+  <p>In more length: The term "HTML5" is widely used as a buzzword to
+  refer to modern Web technologies, many of which (though by no means
+  all) are developed at the WHATWG, in some cases in conjunction with
+  the W3C and IETF.</p>
+
+  <p>The WHATWG work is all published in one specification
+
+  (the one you are reading right now),
+
+
+  parts of which are republished in a variety of other forms,
+  including an edition optimized for Web developers
+
+  (known as <a href=http://developers.whatwg.org/>HTML5</a>).
+
+
+  <!-- and one which focuses mainly on the core HTML language -->
+
+  <!-- (known as the <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/">HTML Living Standard</a>). -->
+
+
+  In addition, two subparts of the specification are republished as
+  separate documents, for ease of reference:
+  <a href=http://www.whatwg.org/specs/web-apps/current-work/webvtt.html>WebVTT</a>
+  and
+  <a href=http://www.whatwg.org/specs/web-apps/current-work/webrtc.html>WebRTC</a>.
+  </p>
+
+  <p>The W3C also publishes parts of this specification as separate
+  documents. One of these parts is called "HTML5"; it is a subset of
+
+  this specification (the HTML Living Standard).
+
+  </p>
+
 <!--
-   <li><a href="http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol">WebSocket protocol</a>
+  <p>The WHATWG specification is a continuously maintained living
+  standard, with maturity managed at a very granular per-section
+  scale, indicated by markers in the left margin; this is intended to
+  model the way in which specifications are approached in practice by
+  implementors and authors alike. The W3C specifications follow a more
+  traditional style, with versioned releases of the specification, and
+  with maturity management being done only at the document level; this
+  means that the W3C specifications have version numbers (e.g.
+  "HTML5") and necessarily go through periods of "feature freeze"
+  where new features are not added, so that the specifications can as
+  a whole reach a more mature state.</p>
 -->
-   <li><a href=http://dev.w3.org/html5/eventsource/>Server-sent Events</a>
-   <li><a href=http://dev.w3.org/html5/webdatabase/>Web SQL Database</a>
-   <li><a href=http://dev.w3.org/geo/api/spec-source.html>Geolocation API</a>
-   <li><a href=http://www.w3.org/TR/SVG/>SVG</a>
-   <li><a href=http://www.w3.org/TR/MathML/>MathML</a>
-   <li><a href=http://dev.w3.org/2006/webapi/XMLHttpRequest-2/>XMLHttpRequest</a>
-  </ul><h3 id=background><span class=secno>1.2 </span>Background</h3>
+
+
+  <h6 class=no-toc id=how-do-the-whatwg-and-w3c-specifications-differ?><span class=secno>1.2.1 </span>How do the WHATWG and W3C specifications differ?</h6>
+
+  <p>The features present in both the WHATWG and W3C specifications
+  are specified using identical text, except for the following (mostly
+  editorial) differences:</p><!--FORK-->
+
+  <ul><!--
+   <li>Instead of this section, the W3C HTML specification has a
+   different paragraph explaining the difference between the W3C and
+   WHATWG versions of HTML.</li>
+--><!-- in the status section --><li>The W3C HTML specification refers to the technology as HTML5,
+   rather than just HTML.</li><!--VERSION-->
+
+   <li>Examples that use features from HTML5 are not present in the
+   W3C specifications since the W3C specifications are published as
+   HTML4 due to <a href="http://www.w3.org/2005/07/pubrules?uimode=filter&amp;uri=#format">W3C
+   publication policies</a>.</li><!--HTML4POLICE-->
+
+   <li>The W3C HTML specification defines conformance for documents in
+   a more traditional (version-orientated) way, because of <a href=http://lists.w3.org/Archives/Public/public-html/2011Mar/0574.html>a
+   working group decision from March 2011</a>. This specification, in
+   part driven by its versionless development model, instead uses a
+   conformance definition that more closely models how specifications
+   are used in practice.</li><!--CONFORMANCE-->
+
+   <li>The W3C HTML specification omits a paragraph of implementation
+   advice because of <a href=http://lists.w3.org/Archives/Public/public-html/2010Jun/0001.html>a
+   working group decision from June 2010</a>.</li>
+
+   <li>The W3C HTML specification includes a paragraph of advice
+   redundant with the ARIA specifications because of <a href=http://lists.w3.org/Archives/Public/public-html/2011Mar/0244.html>a
+   working group decision from March 2011</a>.</li>
+
+   <li>The W3C HTML specification gives incomplete advice regarding
+   the <code title=attr-img-alt><a href=#attr-img-alt>alt</a></code> attribute and instead
+   references other documents on the matter because of <a href=http://lists.w3.org/Archives/Public/public-html/2011Mar/0691.html>a
+   working group decision from March 2011</a>.</li>
+
+   <li>The W3C HTML specification includes a link to an incomplete
+   document that contradicts this specification because of <a href=http://lists.w3.org/Archives/Public/public-html/2011Feb/0407.html>a
+   working group decision from February 2011</a>.</li><!--HPAAIG-->
+
+   <li>The W3C HTML specification has different prose regarding the
+   use of tables for layout purposes because of <a href=http://lists.w3.org/Archives/Public/public-html/2011Mar/0245.html>a
+   working group decision from March 2011</a>. In contrast, this
+   specification unambiguously disallows the use of <code><a href=#the-table-element>table</a></code>
+   elements for layout purposes.</li>
+
+   <li>The W3C HTML specification requires authors who are writing
+   HTML e-mails with images to people they know can see the images
+   (e.g. a wife sending her husband photos of their child) to
+   nonetheless include textual alternatives to those images, because
+   of <a href=http://lists.w3.org/Archives/Public/public-html/2011Apr/0451.html>a
+   working group decision from April 2011</a>.</li>
+
+   <li>The W3C HTML specification does not state that the
+   <code><a href=#the-img-element>img</a></code> element's <code title=attr-img-alt><a href=#attr-img-alt>alt</a></code>
+   attribute is its <a href=#fallback-content>fallback content</a>, because of <a href=http://lists.w3.org/Archives/Public/public-html/2011Apr/0452.html>a
+   working group decision from April 2011</a>.</li>
+
+   <li>The W3C HTML specification is missing a clause that requires
+   conformance checkers to discourage cargo-cult accessibility
+   authoring because of <a href=http://lists.w3.org/Archives/Public/public-html/2011May/0018.html>a
+   working group chair decision from May 2011</a>.</li><!--bug
+   11557-->
+
+   <li>The W3C HTML specification is missing some conformance
+   constraints that would make documents misusing <code><a href=#the-canvas-element>canvas</a></code>
+   invalid, because of <a href=http://lists.w3.org/Archives/Public/public-html/2011Jun/0083.html>a
+   working group chair decision from June 2011</a>.</li><!--bug
+   12906-->
+
+   <li>The W3C 2D Context specification has a different API for
+   handling focus and selection in the 2D canvas API, because of <a href=http://lists.w3.org/Archives/Public/public-html/2011May/0138.html>a
+   working group chair decision from May 2011</a>.</li>
+
+  </ul><p>The following sections are only published in the WHATWG
+  specifications and are not currently available anywhere else:</p>
+
+  <ul><li>The <code><a href=#peerconnection>PeerConnection</a></code> API and related video-conferencing features.</li> <!--PEERCONNECTION-->
+   <li>New hyperlink features: the <code title=attr-hyperlink-download><a href=#attr-hyperlink-download>download</a></code> attribute to make download links and the <code title=attr-hyperlink-ping><a href=#ping>ping</a></code> attribute for <a href=#hyperlink-auditing>hyperlink auditing</a>.</li> <!--DOWNLOAD--><!--PING-->
+   <li>The <a href=#webvtt>WebVTT</a> format and some <a href=#text-track>text track</a> API features.</li> <!--TTVTT-->
+   <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 <a href=#css-element-reference-identifier title="CSS element reference identifier">CSS element reference identifiers</a>.</li> <!--CSSREF-->
+   <li>An experimental specification of the legacy <code title=dom-find><a href=#dom-find>window.find()</a></code> API.</li><!--FIND-->
+   <li>Some predefined <a href=#mdvocabs>Microdata vocabularies</a>.</li>
+  </ul><!--
+  <p>Features that are part of the WHATWG HTML Living Standard
+  specification but that are currently published as separate
+  specifications as well, and are not included in the W3C HTML5
+  specification, consist of:</p>
+
+  <ul>
+   <li><a href="#2dcontext">Canvas 2D Graphics Context</a>--><!--2DCONTEXT--><!--
+   <li><a href="#microdata">Microdata</a>--><!--MD--><!--
+   <li><a href="#crossDocumentMessages">Cross-document messaging</a> (also known as Communications)--><!--POSTMSG--><!--
+   <li><a href="#channel-messaging">Channel messaging</a> (also known as Communications)--><!--POSTMSG--><!--
+  </ul>
+--><!--
+  <h6 class="no-toc">What else is HTML5?</h6>
+
+  <p>Features that are not currently published or maintained by the
+  WHATWG but that are sometimes considered to be informally part of
+  "HTML5" include:</p>
+
+  <ul>
+   <li><a href="http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol">WebSocket protocol</a>
+   <li><a href="http://tools.ietf.org/html/draft-abarth-mime-sniff">Media Type Sniffing</a>
+   <li><a href="http://tools.ietf.org/html/draft-abarth-origin">The Web Origin Concept</a>
+   <li><a href="http://dev.w3.org/geo/api/spec-source.html">Geolocation API</a>
+   <li><a href="http://www.w3.org/TR/SVG/">SVG</a>
+   <li><a href="http://www.w3.org/TR/MathML/">MathML</a>
+   <li><a href="http://dev.w3.org/2006/webapi/XMLHttpRequest-2/">XMLHttpRequest</a>
+   <li>Parts of <a href="http://www.w3.org/Style/CSS/current-work">CSS</a>.</li>
+  </ul>
+--><!--
+  <p>The <a href="#forms">forms</a> part of this specification was
+  previously published separately in a specification known as Web
+  Forms 2. The <a href="#workers">Web Workers</a> section was also
+  previously published as a separate document.</p>
+--><!--
+  <p>See also <a
+  href="http://wiki.whatwg.org/wiki/FAQ#What_are_the_various_versions_of_the_spec.3F">the
+  relevant FAQ entry</a>.</p>
+--><!--VERSION--><h3 id=background><span class=secno>1.3 </span>Background</h3>
 
   <p><i>This section is non-normative.</i></p>
 
   specifications to address issues raised in the past few years.</p>
 
 
-  <h3 id=audience><span class=secno>1.3 </span>Audience</h3>
+  <h3 id=audience><span class=secno>1.4 </span>Audience</h3>
 
   <p><i>This section is non-normative.</i></p>
 
   also be helpful in places but is not essential.</p>
 
 
-  <h3 id=scope><span class=secno>1.4 </span>Scope</h3>
+  <h3 id=scope><span class=secno>1.5 </span>Scope</h3>
 
   <p><i>This section is non-normative.</i></p>
 
   software), document editing software, etc.</p>
 
 
-  <h3 id=history-1><span class=secno>1.5 </span>History</h3>
+  <h3 id=history-1><span class=secno>1.6 </span>History</h3>
 
   <p><i>This section is non-normative.</i></p>
 
   <p>With the creation of the W3C, HTML's development changed venue
   again. A first abortive attempt at extending HTML in 1995 known as
   HTML 3.0 then made way to a more pragmatic approach known as HTML
-  3.2, which was completed in 1997. HTML4 followed, reaching
-  completion in 1998.</p>
-
-  <p>At this time, the W3C membership decided to stop evolving HTML
-  and instead begin work on an XML-based equivalent, called
-  XHTML. This effort started with a reformulation of HTML4 in XML,
-  known as XHTML 1.0, which added no new features except the new
-  serialization, and which was completed in 2000. After XHTML 1.0, the
-  W3C's focus turned to making it easier for other working groups to
-  extend XHTML, under the banner of XHTML Modularization. In parallel
-  with this, the W3C also worked on a new language that was not
-  compatible with the earlier HTML and XHTML languages, calling it
-  XHTML2.</p>
+  3.2, which was completed in 1997. HTML4 quicky followed later that
+  same year.</p>
+
+  <p>The following year, the W3C membership decided to stop evolving
+  HTML and instead begin work on an XML-based equivalent, called
+  XHTML. <!-- http://www.w3.org/MarkUp/future/#summary --> This effort
+  started with a reformulation of HTML4 in XML, known as XHTML 1.0,
+  which added no new features except the new serialization, and which
+  was completed in 2000. After XHTML 1.0, the W3C's focus turned to
+  making it easier for other working groups to extend XHTML, under the
+  banner of XHTML Modularization. In parallel with this, the W3C also
+  worked on a new language that was not compatible with the earlier
+  HTML and XHTML languages, calling it XHTML2.</p>
 
   <p>Around the time that HTML's evolution was stopped in 1998, parts
   of the API for HTML developed by browser vendors were specified and
 
   <p>Since then, both groups have been working together.</p>
 
+
   <p>A separate document has been published by the W3C HTML working
-  group to document the differences between this specification and the
-  language described in the HTML4 specification. <a href=#refsHTMLDIFF>[HTMLDIFF]</a></p>
+  group to document the differences between the HTML specified in this
+  document and the language described in the HTML4 specification. <a href=#refsHTMLDIFF>[HTMLDIFF]</a></p>
 
 
 
 
-  <h3 id=design-notes><span class=secno>1.6 </span>Design notes</h3>
+  <h3 id=design-notes><span class=secno>1.7 </span>Design notes</h3>
 
   <p><i>This section is non-normative.</i></p>
 
   design goals. These are described in the next few subsections.</p>
 
 
-  <h4 id=serializability-of-script-execution><span class=secno>1.6.1 </span>Serializability of script execution</h4>
+  <h4 id=serializability-of-script-execution><span class=secno>1.7.1 </span>Serializability of script execution</h4>
 
   <p><i>This section is non-normative.</i></p>
 
   <p>To avoid exposing Web authors to the complexities of
   multithreading, the HTML and DOM APIs are designed such that no
   script can ever detect the simultaneous execution of other
-  scripts. Even with <span title=Worker>workers</span>, the intent
+  scripts. Even with <a href=#worker title=Worker>workers</a>, the intent
   is that the behavior of implementations can be thought of as
   completely serializing the execution of all scripts in all <a href=#browsing-context title="browsing context">browsing contexts</a>.</p>
 
   run while the calling script is blocked.</p>
 
 
-  <h4 id=compliance-with-other-specifications><span class=secno>1.6.2 </span>Compliance with other specifications</h4>
+  <h4 id=compliance-with-other-specifications><span class=secno>1.7.2 </span>Compliance with other specifications</h4>
 
   <p><i>This section is non-normative.</i></p>
 
 
 
 
-  <h3 id=html-vs-xhtml><span class=secno>1.7 </span>HTML vs XHTML</h3>
+  <h3 id=html-vs-xhtml><span class=secno>1.8 </span>HTML vs XHTML</h3>
 
   <p><i>This section is non-normative.</i></p>
 
   in-memory representations of resources that use this language.</p>
 
   <p>The in-memory representation is known as "DOM HTML", or "the DOM"
-  for short. This specification defines version 5 of DOM HTML, known
-  as "DOM5 HTML".</p>
+  for short.</p>
 
   <p>There are various concrete syntaxes that can be used to transmit
   resources that use this abstract language, two of which are defined
 
   This specification defines the latest HTML syntax, known simply as
   "HTML".
-  
+  <!--VERSION-->
 
   </p>
 
 
   This specification defines the latest XHTML syntax, known simply as
   "XHTML".
-  
+  <!--VERSION-->
 
   </p>
 
   HTML syntax, but they are supported in the DOM and in XML.
   Similarly, documents that use the <code><a href=#the-noscript-element>noscript</a></code> feature can
   be represented using the HTML syntax, but cannot be represented with
-  the DOM or in XML. Comments that contain the string "<code title="">--&gt;</code>" can be represented in the DOM but not in the
-  HTML syntax or in XML.</p>
+  the DOM or in XML. Comments that contain the string "<code title="">--&gt;</code>" can only be represented in the DOM, not in
+  the HTML and XML syntaxes.</p>
 
 
-  <h3 id=structure-of-this-specification><span class=secno>1.8 </span>Structure of this specification</h3>
+  <h3 id=structure-of-this-specification><span class=secno>1.9 </span>Structure of this specification</h3>
 
   <p><i>This section is non-normative.</i></p>
 
    this section. Rules for authors on how to use the element<span class=impl>, along with user agent requirements for how to handle
    each element,</span> are also given.</dd>
 
-
+<!--MD-->
    <dt><a href=#microdata>Microdata</a></dt>
 
    <dd>This specification introduces a mechanism for adding
    machine-readable annotations to documents, so that tools can
-   extract trees of name/value pairs from the document. This section
+   extract trees of name-value pairs from the document. This section
    describes this mechanism<span class=impl> and some algorithms
    that can be used to convert HTML documents into other
    formats</span>.
    information, calendar events, and licensing works.
 
    </dd>
-
+<!--MD-->
 
    <dt><a href=#browsers>Loading Web pages</a></dt>
 
    section.</dd>
 
 
+   <dt><a href=#workers>Web workers</a></dt>
+
+   <dd>This specification defines an API for background threads in
+   JavaScript.</dd>
+
 
 
+   <dt><a href=#webstorage>Web storage</a></dt>
+
+   <dd>This specification defines a client-side storage mechanism
+   based on name-value pairs.</dd>
+
+
+<!--POSTMSG-->
    <dt><a href=#comms>The communication APIs</a></dt>
 
    <dd>This section describes some mechanisms that applications
    written in HTML can use to communicate with other applications from
    different domains running on the same client.
-   </dd>
 
+   It also introduces a server-push event stream mechanism, and a
+   two-way full-duplex socket protocol for scripts.
+
+   </dd>
+<!--POSTMSG-->
 
 
    <dt><a href=#syntax>The HTML syntax</a></dt>
 
 
 
-  <h4 id=how-to-read-this-specification><span class=secno>1.8.1 </span>How to read this specification</h4>
+  <h4 id=how-to-read-this-specification><span class=secno>1.9.1 </span>How to read this specification</h4>
 
   <p>This specification should be read like all other specifications.
   First, it should be read cover-to-cover, multiple times. Then, it
   picking random sections from the contents list and following all the
   cross-references.</p>
 
+  <p>As described in the conformance requirements section below, this
+  specification describes conformance criteria for a variety of
+  conformance classes. In particular, there are conformance
+  requirements that apply to <em>producers</em>, for example authors
+  and the documents they create, and there are conformance
+  requirements that apply to <em>consumers</em>, for example Web
+  browsers. They can be distinguished by what they are requiring: a
+  requirement on a producer states what is allowed, while a
+  requirement on a consumer states how software is to act.</p>
+
+  <div class=example>
+
+   <p>For example, "the <code title="">foo</code> attribute's value
+   must be a <a href=#valid-integer>valid integer</a>" is a requirement on
+   producers, as it lays out the allowed values; in contrast, the
+   requirement "the <code title="">foo</code> attribute's value must
+   be parsed using the <a href=#rules-for-parsing-integers>rules for parsing integers</a>" is a
+   requirement on consumers, as it describes how to process the
+   content.</p>
+
+  </div>
+
+  <p><strong>Requirements on producers have no bearing whatsoever on
+  consumers.</strong></p>
+
+  <div class=example>
+
+   <p>Continuing the above example, a requirement stating that a
+   particular attribute's value is constrained to being a <a href=#valid-integer>valid
+   integer</a> emphatically does <em>not</em> imply anything about
+   the requirements on consumers. It might be that the consumers are
+   in fact required to treat the attribute as an opaque string,
+   completely unaffected by whether the value conforms to the
+   requirements or not. It might be (as in the previous example) that
+   the consumers are required to parse the value using specific rules
+   that define how invalid (non-numeric in this case) values are to be
+   processed.</p>
+
+  </div>
+
 
 
-  <h4 id=typographic-conventions><span class=secno>1.8.2 </span>Typographic conventions</h4>
+  <h4 id=typographic-conventions><span class=secno>1.9.2 </span>Typographic conventions</h4>
 
   <p>This is a definition, requirement, or explanation.</p>
 
 
 
 
-  <h3 id=a-quick-introduction-to-html><span class=secno>1.9 </span>A quick introduction to HTML</h3>
+  <h3 id=a-quick-introduction-to-html><span class=secno>1.10 </span>A quick introduction to HTML</h3>
 
   <p><i>This section is non-normative.</i></p>
 
   <pre>&lt;a href="demo.html"&gt;simple&lt;/a&gt;</pre>
 
   <p><a href=#syntax-attributes title=syntax-attributes>Attributes</a> are placed
-  inside the start tag, and consist of a <a href=#syntax-attribute-name title=syntax-attribute-name>name</a> and a <a href=#syntax-attribute-value title=syntax-attribute-value>value</a>, separated by an "<code title="">=</code>" character. The attribute value can remain <a href=#unquoted>unquoted</a> if it doesn't contain spaces or any of
-  <code title="">"</code> <code title="">'</code> <code title="">`</code> <code title="">=</code> <code title="">&lt;</code>
-  or <code title="">&gt;</code>. Otherwise, it has to be quoted using
-  either single or double quotes. The value, along with the "<code title="">=</code>" character, can be omitted altogether if the value
+  inside the start tag, and consist of a <a href=#syntax-attribute-name title=syntax-attribute-name>name</a> and a <a href=#syntax-attribute-value title=syntax-attribute-value>value</a>, separated by an "<code title="">=</code>" character. The attribute value can remain <a href=#unquoted>unquoted</a> if it doesn't contain <a href=#space-character title="space character">space characters</a> or any of <code title="">"</code> <code title="">'</code> <code title="">`</code>
+  <code title="">=</code> <code title="">&lt;</code> or <code title="">&gt;</code>. Otherwise, it has to be quoted using either
+  single or double quotes. The value, along with the "<code title="">=</code>" character, can be omitted altogether if the value
   is the empty string.</p>
 
   <pre>&lt;!-- empty attributes --&gt;
   <p>The <a href=#intro-early-example>markup snippet at the top of
   this section</a> would be turned into the following DOM tree:</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><ul><li class=t3><code>#text</code>: <span title="">&#9166;&#9251;&#9251;</span><li class=t1><code><a href=#the-title-element-0>title</a></code><ul><li class=t3><code>#text</code>: <span title="">Sample page</span></ul><li class=t3><code>#text</code>: <span title="">&#9166;&#9251;</span></ul><li class=t3><code>#text</code>: <span title="">&#9166;&#9251;</span><li class=t1><code><a href=#the-body-element-0>body</a></code><ul><li class=t3><code>#text</code>: <span title="">&#9166;&#9251;&#9251;</span><li class=t1><code><a href=#the-h1,-h2,-h3,-h4,-h5,-and-h6-elements>h1</a></code><ul><li class=t3><code>#text</code>: <span title="">Sample page</span></ul><li class=t3><code>#text</code>: <span title="">&#9166;&#9251;&#9251;</span><li class=t1><code><a href=#the-p-element>p</a></code><ul><li class=t3><code>#text</code>: <span title="">This is a </span><li class=t1><code><a href=#the-a-element>a</a></code> <span class=t2 title=""><code class="attribute name">href</code>="<code class="attribute value">demo.html</code>"</span><ul><li class=t3><code>#text</code>: <span title="">simple</span></ul><li class=t3><code>#text</code>: <span title=""> sample.</span></ul><li class=t3><code>#text</code>: <span title="">&#9166;&#9251;&#9251;</span><li class=t8><code>#comment</code>: <span title=""> this is a comment </span><li class=t3><code>#text</code>: <span title="">&#9166;&#9251;&#9166;</span></ul></ul></ul><p>The <a href=#root-element>root element</a> of this tree is the
-  <code><a href=#the-html-element-0>html</a></code> element, which is the element always found at the
-  root of HTML documents. It contains two elements, <code><a href=#the-head-element-0>head</a></code>
-  and <code><a href=#the-body-element-0>body</a></code>, as well as a text node between them.</p>
+  <ul class=domTree><li class=t10>DOCTYPE: <code title="">html</code><li class=t1><code><a href=#the-html-element>html</a></code><ul><li class=t1><code><a href=#the-head-element>head</a></code><ul><li class=t3><code>#text</code>: <span title="">&#9166;&#9251;&#9251;</span><li class=t1><code><a href=#the-title-element>title</a></code><ul><li class=t3><code>#text</code>: <span title="">Sample page</span></ul><li class=t3><code>#text</code>: <span title="">&#9166;&#9251;</span></ul><li class=t3><code>#text</code>: <span title="">&#9166;&#9251;</span><li class=t1><code><a href=#the-body-element>body</a></code><ul><li class=t3><code>#text</code>: <span title="">&#9166;&#9251;&#9251;</span><li class=t1><code><a href=#the-h1,-h2,-h3,-h4,-h5,-and-h6-elements>h1</a></code><ul><li class=t3><code>#text</code>: <span title="">Sample page</span></ul><li class=t3><code>#text</code>: <span title="">&#9166;&#9251;&#9251;</span><li class=t1><code><a href=#the-p-element>p</a></code><ul><li class=t3><code>#text</code>: <span title="">This is a </span><li class=t1><code><a href=#the-a-element>a</a></code> <span class=t2 title=""><code class="attribute name">href</code>="<code class="attribute value">demo.html</code>"</span><ul><li class=t3><code>#text</code>: <span title="">simple</span></ul><li class=t3><code>#text</code>: <span title=""> sample.</span></ul><li class=t3><code>#text</code>: <span title="">&#9166;&#9251;&#9251;</span><li class=t8><code>#comment</code>: <span title=""> this is a comment </span><li class=t3><code>#text</code>: <span title="">&#9166;&#9251;&#9166;</span></ul></ul></ul><p>The <a href=#root-element>root element</a> of this tree is the
+  <code><a href=#the-html-element>html</a></code> element, which is the element always found at the
+  root of HTML documents. It contains two elements, <code><a href=#the-head-element>head</a></code>
+  and <code><a href=#the-body-element>body</a></code>, as well as a text node between them.</p>
 
   <p>There are many more text nodes in the DOM tree than one would
   initially expect, because the source contains a number of spaces
   (represented here by "&#9251;") and line breaks ("&#9166;") that
-  all end up as text nodes in the DOM.</p>
-
-  <p>The <code><a href=#the-head-element-0>head</a></code> element contains a <code><a href=#the-title-element-0>title</a></code>
+  all end up as text nodes in the DOM. However, for historical reasons
+  not all of the spaces and line breaks in the original markup appear
+  in the DOM. In particular, all the whitespace before
+  <code><a href=#the-head-element>head</a></code> start tag ends up being dropped silently, and all
+  the whitespace after the <code><a href=#the-body-element>body</a></code> end tag ends up placed at
+  the end of the <code><a href=#the-body-element>body</a></code>.</p>
+
+  <p>The <code><a href=#the-head-element>head</a></code> element contains a <code><a href=#the-title-element>title</a></code>
   element, which itself contains a text node with the text "Sample
-  page". Similarly, the <code><a href=#the-body-element-0>body</a></code> element contains an
+  page". Similarly, the <code><a href=#the-body-element>body</a></code> element contains an
   <code><a href=#the-h1,-h2,-h3,-h4,-h5,-and-h6-elements>h1</a></code> element, a <code><a href=#the-p-element>p</a></code> element, and a
   comment.</p>
 
   <hr><p>This DOM tree can be manipulated from scripts in the
   page. Scripts (typically in JavaScript) are small programs that can
-  be embedded using the <code><a href=#script>script</a></code> element or using
+  be embedded using the <code><a href=#the-script-element>script</a></code> element or using
   <a href=#event-handler-content-attributes>event handler content attributes</a>. For example, here is
   a form with a script that sets the value of the form's
   <code><a href=#the-output-element>output</a></code> element to say "Hello World":</p>
 
   <pre>&lt;<a href=#the-form-element>form</a> <a href=#attr-form-name title=attr-form-name>name</a>="main"&gt;
  Result: &lt;<a href=#the-output-element>output</a> <a href=#attr-fe-name title=attr-fe-name>name</a>="result"&gt;&lt;/output&gt;
- &lt;<a href=#script>script</a>&gt;
+ &lt;<a href=#the-script-element>script</a>&gt;
   <a href=#htmldocument title=HTMLDocument>document</a>.<a href=#dom-document-forms title=dom-document-forms>forms</a>.main.<a href=#dom-form-elements title=dom-form-elements>elements</a>.result.<a href=#dom-output-value title=dom-output-value>value</a> = 'Hello World';
  &lt;/script&gt;
 &lt;/form&gt;</pre>
@@ -1816,7 +2496,190 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   understand at first.</p>
 
 
-  <h3 id=conformance-requirements-for-authors><span class=secno>1.10 </span>Conformance requirements for authors</h3>
+  <h4 id=writing-secure-applications-with-html><span class=secno>1.10.1 </span>Writing secure applications with HTML</h4>
+
+  <p><i>This section is non-normative.</i></p>
+
+  <p>When HTML is used to create interactive sites, care needs to be
+  taken to avoid introducing vulnerabilities through which attackers
+  can compromise the integrity of the site itself or of the site's
+  users.</p>
+
+  <p>A comprehensive study of this matter is beyond the scope of this
+  document, and authors are strongly encouraged to study the matter in
+  more detail. However, this section attempts to provide a quick
+  introduction to some common pitfalls in HTML application
+  development.</p>
+
+  <p>The security model of the Web is based on the concept of
+  "origins", and correspondingly many of the potential attacks on the
+  Web involve cross-origin actions. <a href=#refsORIGIN>[ORIGIN]</a></p>
+
+  <dl><dt>Not validating user input</dt>
+   <dt>Cross-site scripting (XSS)</dt>
+   <dt>SQL injection</dt>
+
+   <dd>
+
+    <p>When accepting untrusted input, e.g. user-generated content
+    such as text comments, values in URL parameters, messages from
+    third-party sites, etc, it is imperative that the data be
+    validated before use, and properly escaped when displayed. Failing
+    to do this can allow a hostile user to perform a variety of
+    attacks, ranging from the potentially benign, such as providing
+    bogus user information like a negative age, to the serious, such
+    as running scripts every time a user looks at a page that includes
+    the information, potentially propagating the attack in the
+    process, to the catastrophic, such as deleting all data in the
+    server.</p>
+
+    <p>When writing filters to validate user input, it is imperative
+    that filters always be whitelist-based, allowing known-safe
+    constructs and disallowing all other input. Blacklist-based
+    filters that disallow known-bad inputs and allow everything else
+    are not secure, as not everything that is bad is yet known (for
+    example, because it might be invented in the future).</p>
+
+    <div class=example>
+
+     <p>For example, suppose a page looked at its URL's query string
+     to determine what to display, and the site then redirected the
+     user to that page to display a message, as in:</p>
+
+     <pre>&lt;ul&gt;
+ &lt;li&gt;&lt;a href="message.cgi?say=Hello"&gt;Say Hello&lt;/a&gt;
+ &lt;li&gt;&lt;a href="message.cgi?say=Welcome"&gt;Say Welcome&lt;/a&gt;
+ &lt;li&gt;&lt;a href="message.cgi?say=Kittens"&gt;Say Kittens&lt;/a&gt;
+&lt;/ul&gt;</pre>
+
+     <p>If the message was just displayed to the user without
+     escaping, a hostile attacker could then craft a URL that
+     contained a script element:</p>
+
+     <pre>http://example.com/message.cgi?say=%3Cscript%3Ealert%28%27Oh%20no%21%27%29%3C/script%3E</pre>
+
+     <p>If the attacker then convinced a victim user to visit this
+     page, a script of the attacker's choosing would run on the page.
+     Such a script could do any number of hostile actions, limited
+     only by what the site offers: if the site is an e-commerce shop,
+     for instance, such a script could cause the user to unknowingly
+     make arbitrarily many unwanted purchases.</p>
+
+     <p>This is called a cross-site scripting attack.</p>
+
+    </div>
+
+   </dd>
+
+
+   <dt>Cross-site request forgery (CSRF)</dt>
+
+   <dd>
+
+    <p>If a site allows a user to make form submissions with
+    user-specific side-effects, for example posting messages on a
+    forum under the user's name, making purchases, or applying for a
+    passport, it is important to verify that the request was made by
+    the user intentionally, rather than by another site tricking the
+    user into making the request unknowingly.</p>
+
+    <p>This problem exists because HTML forms can be submitted to
+    other origins.</p>
+
+    <p>Sites can prevent such attacks by populating forms with
+    user-specific hidden tokens, or by checking <code title=http-origin>Origin</code> headers on all requests.</p>
+
+   </dd>
+
+
+
+   <dt>Clickjacking</dt>
+
+   <dd>
+
+    <p>A page that provides users with an interface to perform actions
+    that the user might not wish to perform needs to be designed so as
+    to avoid the possibility that users can be tricked into activating
+    the interface.</p>
+
+    <p>One way that a user could be so tricked is if a hostile site
+    places the victim site in a small <code><a href=#the-iframe-element>iframe</a></code> and then
+    convinces the user to click, for instance by having the user play
+    a reaction game. Once the user is playing the game, the hostile
+    site can quickly position the iframe under the mouse cursor just
+    as the user is about to click, thus tricking the user into
+    clicking the victim site's interface.</p>
+
+    <p>To avoid this, sites that do not expect to be used in frames
+    are encouraged to only enable their interface if they detect that
+    they are not in a frame (e.g. by comparing the <code title=dom-window><a href=#dom-window>window</a></code> object to the value of the <code title=dom-top><a href=#dom-top>top</a></code> attribute).</p>
+
+   </dd>
+
+  </dl><h4 id=common-pitfalls-to-avoid-when-using-the-scripting-apis><span class=secno>1.10.2 </span>Common pitfalls to avoid when using the scripting APIs</h4>
+
+  <p><i>This section is non-normative.</i></p>
+
+  <p>Scripts in HTML have "run-to-completion" semantics, meaning that
+  the browser will generally run the script uninterrupted before doing
+  anything else, such as firing further events or continuing to parse
+  the document.</p>
+
+  <p>On the other hand, parsing of HTML files happens asynchronously
+  and incrementally, meaning that the parser can pause at any point to
+  let scripts run. This is generally a good thing, but it does mean
+  that authors need to be careful to avoid hooking event handlers
+  after the events could have possibly fired.</p>
+
+  <p>There are two techniques for doing this reliably: use <a href=#event-handler-content-attributes>event
+  handler content attributes</a>, or create the element and add the
+  event handlers in the same script. The latter is safe because, as
+  mentioned earlier, scripts are run to completion before further
+  events can fire.</p>
+
+  <div class=example>
+
+   <p>One way this could manifest itself is with <code><a href=#the-img-element>img</a></code>
+   elements and the <code title=event-load>load</code> event. The
+   event could fire as soon as the element has been parsed, especially
+   if the image has already been cached (which is common).</p>
+
+   <p>Here, the author uses the <code title=handler-onload><a href=#handler-onload>onload</a></code> handler on an <code><a href=#the-img-element>img</a></code>
+   element to catch the <code title=event-load>load</code> event:</p>
+
+   <pre>&lt;img src="games.png" alt="Games" onload="gamesLogoHasLoaded(event)"&gt;</pre>
+
+   <p>If the element is being added by script, then so long as the
+   event handlers are added in the same script, the event will still
+   not be missed:</p>
+
+   <pre>&lt;script&gt;
+ var img = new Image();
+ img.src = 'games.png';
+ img.alt = 'Games';
+ img.onload = gamesLogoHasLoaded;
+ // img.addEventListener('load', gamesLogoHasLoaded, false); // would work also
+&lt;/script&gt;</pre>
+
+   <p>However, if the author first created the <code><a href=#the-img-element>img</a></code>
+   element and then in a separate script added the event listeners,
+   there's a chance that the <code title=event-load>load</code>
+   event would be fired in between, leading it to be missed:</p>
+
+   <pre class=bad>&lt;!-- Do not use this style, it has a race condition! --&gt;
+ &lt;img id="games" src="games.png" alt="Games"&gt;
+ &lt;!-- the 'load' event might fire here while the parser is taking a
+      break, in which case you will not see it! --&gt;
+ &lt;script&gt;
+  var img = document.getElementById('games');
+  img.onload = gamesLogoHasLoaded; // might never fire!
+ &lt;/script&gt;</pre>
+
+  </div>
+
+
+
+  <h3 id=conformance-requirements-for-authors><span class=secno>1.11 </span>Conformance requirements for authors</h3>
 
   <p><i>This section is non-normative.</i></p>
 
@@ -1836,7 +2699,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   document and one with errors.</p>
 
 
-  <h4 id=presentational-markup><span class=secno>1.10.1 </span>Presentational markup</h4>
+  <h4 id=presentational-markup><span class=secno>1.11.1 </span>Presentational markup</h4>
 
   <p><i>This section is non-normative.</i></p>
 
@@ -1877,7 +2740,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
    </dd>
 
 
-   <dt>Higher document sizes</dt>
+   <dt>Larger document sizes</dt>
 
    <dd>
 
@@ -1905,13 +2768,13 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   likely to be more convenient when the styles apply to multiple
   pages.</p>
 
-  <p>It is also worth noting that four elements that were previously
+  <p>It is also worth noting that some elements that were previously
   presentational have been redefined in this specification to be
   media-independent: <code><a href=#the-b-element>b</a></code>, <code><a href=#the-i-element>i</a></code>, <code><a href=#the-hr-element>hr</a></code>,
-  and <code><a href=#the-small-element>small</a></code>.</p>
+  <code><a href=#the-s-element>s</a></code>, <code><a href=#the-small-element>small</a></code>, and <code><a href=#the-u-element>u</a></code>.</p>
 
 
-  <h4 id=syntax-errors><span class=secno>1.10.2 </span>Syntax errors</h4>
+  <h4 id=syntax-errors><span class=secno>1.11.2 </span>Syntax errors</h4>
 
   <p><i>This section is non-normative.</i></p>
 
@@ -1956,8 +2819,9 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
     <p>Some error-handling behavior, such as the behavior for the
     <code title="">&lt;table&gt;&lt;hr&gt;...</code> example mentioned
-    above, are incompatible with streaming user agents. To avoid
-    interoperability problems with such user agents, any syntax
+    above, are incompatible with streaming user agents (user agents
+    that process HTML files in one pass, without storing state). To
+    avoid interoperability problems with such user agents, any syntax
     resulting in such behavior is considered invalid.</p>
 
    </dd>
@@ -1988,13 +2852,19 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
     <div class=example>
 
-     <p>For example, the following markup results in poor performance
-     when hitting the highlighted end tag, since all the open elements
-     are examined first to see if they match the close tag:</p>
+     <p>For example, the following markup results in poor performance,
+     since all the unclosed <code><a href=#the-i-element>i</a></code> elements have to be
+     reconstructed in each paragraph, resulting in progressively more
+     elements in each paragraph:</p>
 
-     <pre class=bad>&lt;p&gt;&lt;em&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;...&lt;span&gt;&lt;span&gt;&lt;span&gt;<strong>&lt;/em&gt;</strong></pre>
+     <pre class=bad>&lt;p&gt;&lt;i&gt;He dreamt.
+&lt;p&gt;&lt;i&gt;He dreamt that he ate breakfast.
+&lt;p&gt;&lt;i&gt;Then lunch.
+&lt;p&gt;&lt;i&gt;And finally dinner.</pre>
 
-    </div>
+     <p>The resulting DOM for this fragment would be:</p>
+
+     <ul class=domTree><li class=t1><code><a href=#the-p-element>p</a></code><ul><li class=t1><code><a href=#the-i-element>i</a></code><ul><li class=t3><code>#text</code>: <span title="">He dreamt.</span></ul></ul><li class=t1><code><a href=#the-p-element>p</a></code><ul><li class=t1><code><a href=#the-i-element>i</a></code><ul><li class=t1><code><a href=#the-i-element>i</a></code><ul><li class=t3><code>#text</code>: <span title="">He dreamt that he ate breakfast.</span></ul></ul></ul><li class=t1><code><a href=#the-p-element>p</a></code><ul><li class=t1><code><a href=#the-i-element>i</a></code><ul><li class=t1><code><a href=#the-i-element>i</a></code><ul><li class=t1><code><a href=#the-i-element>i</a></code><ul><li class=t3><code>#text</code>: <span title="">Then lunch.</span></ul></ul></ul></ul><li class=t1><code><a href=#the-p-element>p</a></code><ul><li class=t1><code><a href=#the-i-element>i</a></code><ul><li class=t1><code><a href=#the-i-element>i</a></code><ul><li class=t1><code><a href=#the-i-element>i</a></code><ul><li class=t1><code><a href=#the-i-element>i</a></code><ul><li class=t3><code>#text</code>: <span title="">And finally dinner.</span></ul></ul></ul></ul></ul></ul></div>
 
    </dd>
 
@@ -2017,15 +2887,18 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
      are changed to a string that <em>does</em> form a named character
      reference, they will be interpreted as that character instead.</p>
 
-     <p>In this fragment, the attribute's value is "<code title="">?hello=1&amp;world=2</code>":</p>
+     <p>In this fragment, the attribute's value is "<code title="">?bill&amp;ted</code>":</p>
 
-     <pre class=bad>&lt;a href="?hello=1&amp;world=2"&gt;Demo&lt;/a&gt;</pre>
+     <pre class=bad>&lt;a href="?bill&amp;ted"&gt;Bill and Ted&lt;/a&gt;</pre>
 
      <p>In the following fragment, however, the attribute's value is
-     actually "<code title="">?original=1&copy;=2</code>",
-     <em>not</em> the intended "<code title="">?original=1&amp;copy=2</code>":</p>
+     actually "<code title="">?art&copy;</code>", <em>not</em> the
+     intended "<code title="">?art&amp;copy</code>", because even
+     without the final semicolon, "<code title="">&amp;copy</code>" is
+     handled the same as "<code title="">&amp;copy;</code>" and thus
+     gets interpreted as "<code title="">&copy;</code>":</p>
 
-     <pre class=bad>&lt;a href="?original=1&amp;copy=2"&gt;Compare&lt;/a&gt;</pre>
+     <pre class=bad>&lt;a href="?art&amp;copy"&gt;Art and Copy&lt;/a&gt;</pre>
 
      <p>To avoid this problem, all named character references are
      required to end with a semicolon, and uses of named character
@@ -2034,8 +2907,8 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
      <p>Thus, the correct way to express the above cases is as
      follows:</p>
 
-     <pre>&lt;a href="?hello=1&amp;world=2"&gt;Demo&lt;/a&gt; &lt;!-- &amp;world is ok, since it's not a named character reference --&gt;</pre>
-     <pre>&lt;a href="?original=1&amp;amp;copy=2"&gt;Compare&lt;/a&gt; &lt;!-- the &amp; has to be escaped, since &amp;copy <em>is</em> a named character reference --&gt;</pre>
+     <pre>&lt;a href="?bill&amp;ted"&gt;Bill and Ted&lt;/a&gt; &lt;!-- &amp;ted is ok, since it's not a named character reference --&gt;</pre>
+     <pre>&lt;a href="?art&amp;amp;copy"&gt;Art and Copy&lt;/a&gt; &lt;!-- the &amp; has to be escaped, since &amp;copy <em>is</em> a named character reference --&gt;</pre>
 
     </div>
 
@@ -2160,7 +3033,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
 
 
-  <h4 id=restrictions-on-content-models-and-on-attribute-values><span class=secno>1.10.3 </span>Restrictions on content models and on attribute values</h4>
+  <h4 id=restrictions-on-content-models-and-on-attribute-values><span class=secno>1.11.3 </span>Restrictions on content models and on attribute values</h4>
 
   <p><i>This section is non-normative.</i></p>
 
@@ -2195,10 +3068,10 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
     <div class=example>
 
      <p>In the fragments below, for example, the semantics are
-     nonsensical: a row cannot simultaneously be a cell, nor can a
-     radio button be a progress bar.</p>
+     nonsensical: a separator cannot simultaneously be a cell, nor can
+     radio button be a progress bar.</p>
 
-     <pre class=bad>&lt;tr role="cell"&gt;</pre>
+     <pre class=bad>&lt;hr role="cell"&gt;</pre>
      <pre class=bad>&lt;input type=radio role=progressbar&gt;</pre>
 
     </div>
@@ -2330,14 +3203,14 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
     encouraging authors to avoid making them, authors can save time in
     future efforts.</p>
 
-    <p class=example>For example, a <code><a href=#script>script</a></code> element's
+    <p class=example>For example, a <code><a href=#the-script-element>script</a></code> element's
     <code title=attr-script-src><a href=#attr-script-src>src</a></code> attribute causes the
     element's contents to be ignored. However, this isn't obvious,
     especially if the element's contents appear to be executable
     script &mdash; which can lead to authors spending a lot of time
-    trying to debug the inline script without realising that it is not
+    trying to debug the inline script without realizing that it is not
     executing. To reduce this problem, this specification makes it
-    non-conforming to have executable script in a <code><a href=#script>script</a></code>
+    non-conforming to have executable script in a <code><a href=#the-script-element>script</a></code>
     element when the <code title=attr-script-src><a href=#attr-script-src>src</a></code>
     attribute is present. This means that authors who are validating
     their documents are less likely to waste time with this kind of
@@ -2404,7 +3277,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
    </dd>
 
-  </dl><h3 id=recommended-reading><span class=secno>1.11 </span>Recommended reading</h3>
+  </dl><h3 id=recommended-reading><span class=secno>1.12 </span>Recommended reading</h3>
 
   <p><i>This section is non-normative.</i></p>
 
@@ -2471,6 +3344,24 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
    disabilities, should find conforming user agents to be more
    usable.</blockquote></dd>
 
+   <dt><cite>Polyglot Markup: HTML-Compatible XHTML Documents</cite> <a href=#refsPOLYGLOT>[POLYGLOT]</a></dt>
+
+   <dd><blockquote><p>A document that uses polyglot markup is a document
+   that is a stream of bytes that parses into identical document trees
+   (with the exception of the xmlns attribute on the root element)
+   when processed as HTML and when processed as XML. Polyglot markup
+   that meets a well defined set of constraints is interpreted as
+   compatible, regardless of whether they are processed as HTML or as
+   XHTML, per the HTML5 specification. Polyglot markup uses a specific
+   DOCTYPE, namespace declarations, and a specific case &mdash;
+   normally lower case but occasionally camel case &mdash; for element
+   and attribute names. Polyglot markup uses lower case for certain
+   attribute values. Further constraints include those on empty
+   elements, named entity references, and the use of scripts and
+   style.</blockquote></dd>
+
+<!--(the following is not included in the WHATWG spec for quality reasons)-->
+
   </dl><h2 id=infrastructure><span class=secno>2 </span>Common infrastructure</h2>
 
   <h3 id=terminology><span class=secno>2.1 </span>Terminology</h3>
@@ -2510,6 +3401,10 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
   </div>
 
+  <!-- should find somewhere more appropriate to put this -->
+  <p>The term "transparent black" refers to the color with red, green,
+  blue, and alpha channels all set to zero.</p>
+
 
   <h4 id=resources><span class=secno>2.1.1 </span>Resources</h4>
 
@@ -2563,6 +3458,9 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   subresources</a>; other resources, e.g. fonts or backgrounds, are
   not.</p>
 
+  <p>The term <dfn id=data-protocol title="data protocol"><code title="">data:</code>
+  URL</dfn> refers to <a href=#url title=URL>URLs</a> that use the <code title="">data:</code> scheme. <a href=#refsRFC2397>[RFC2397]</a></p>
+
 
   <h4 id=xml><span class=secno>2.1.2 </span>XML</h4>
 
@@ -2575,10 +3473,15 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   elements.</p>
 
   <p>Except where otherwise stated, all elements defined or mentioned
-  in this specification are in the
-  <code>http://www.w3.org/1999/xhtml</code> namespace, and all
-  attributes defined or mentioned in this specification have no
-  namespace.</p>
+  in this specification are in the <a href=#html-namespace-0>HTML namespace</a>
+  ("<code>http://www.w3.org/1999/xhtml</code>"), and all attributes
+  defined or mentioned in this specification have no namespace.</p>
+
+  <p>The term <dfn id=element-type>element type</dfn> is used to refer to the class of
+  elements have a given local name and namespace. For example,
+  <code><a href=#the-button-element>button</a></code> elements are elements with the element type
+  <code><a href=#the-button-element>button</a></code>, meaning they have the local name "<code title="">button</code>" and (implicitly as defined above) the
+  <a href=#html-namespace-0>HTML namespace</a>.</p>
 
   <p>Attribute names are said to be <dfn id=xml-compatible>XML-compatible</dfn> if they
   match the <a href=http://www.w3.org/TR/REC-xml/#NT-Name><code title="">Name</code></a> production defined in XML, they contain no
@@ -2593,17 +3496,22 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
   <h4 id=dom-trees><span class=secno>2.1.3 </span>DOM trees</h4>
 
-  <p>The term <dfn id=root-element>root element</dfn>, when not explicitly qualified
-  as referring to the document's root element, means the furthest
+  <p>The <dfn id=root-element-of-a-document-object>root element of a <code>Document</code> object</dfn> is
+  that <code><a href=#document>Document</a></code>'s first element child, if any. If it does
+  not have one then the <code><a href=#document>Document</a></code> has no root element.</p>
+
+  <p>The term <dfn id=root-element>root element</dfn>, when not referring to a
+  <code><a href=#document>Document</a></code> object's root element, means the furthest
   ancestor element node of whatever node is being discussed, or the
   node itself if it has no ancestors. When the node is a part of the
   document, then the node's <a href=#root-element>root element</a> is indeed the
   document's root element; however, if the node is not currently part
   of the document tree, the root element will be an orphaned node.</p>
 
-  <p>When an element's <a href=#root-element>root element</a> is the root element
-  of a <code><a href=#document>Document</a></code>, it is said to be <dfn id=in-a-document>in a
-  <code>Document</code></dfn>. An element is said to have been <dfn id=insert-an-element-into-a-document title="insert an element into a document">inserted into a
+  <p>When an element's <a href=#root-element>root element</a> is the <a href=#root-element-of-a-document-object>root
+  element of a <code>Document</code> object</a>, it is said to be
+  <dfn id=in-a-document>in a <code>Document</code></dfn>. An element is said to have
+  been <dfn id=insert-an-element-into-a-document title="insert an element into a document">inserted into a
   document</dfn> when its <a href=#root-element>root element</a> changes and is now
   the document's <a href=#root-element>root element</a>. Analogously, an element is
   said to have been <dfn id=remove-an-element-from-a-document title="remove an element from a
@@ -2618,11 +3526,15 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
   <p>The <code><a href=#document>Document</a></code> of a <code><a href=#node>Node</a></code> (such as an
   element) is the <code><a href=#document>Document</a></code> that the <code><a href=#node>Node</a></code>'s
-  <code title="">ownerDocument</code> IDL attribute returns. When a
-  <code><a href=#node>Node</a></code> is <a href=#in-a-document>in a <code>Document</code></a> then
-  that <code><a href=#document>Document</a></code> is always the <code><a href=#node>Node</a></code>'s
-  <code><a href=#document>Document</a></code>, and the <code><a href=#node>Node</a></code>'s <code title="">ownerDocument</code> IDL attribute thus always returns that
-  <code><a href=#document>Document</a></code>.</p>
+  <code title=dom-Node-ownerDocument><a href=#dom-node-ownerdocument>ownerDocument</a></code> IDL
+  attribute returns. When a <code><a href=#node>Node</a></code> is <a href=#in-a-document>in a
+  <code>Document</code></a> then that <code><a href=#document>Document</a></code> is
+  always the <code><a href=#node>Node</a></code>'s <code><a href=#document>Document</a></code>, and the
+  <code><a href=#node>Node</a></code>'s <code title=dom-Node-ownerDocument><a href=#dom-node-ownerdocument>ownerDocument</a></code> IDL attribute
+  thus always returns that <code><a href=#document>Document</a></code>.</p>
+
+  <p>The <code><a href=#document>Document</a></code> of a content attribute is the
+  <code><a href=#document>Document</a></code> of the attribute's element.</p>
 
   <p>The term <dfn id=tree-order>tree order</dfn> means a pre-order, depth-first
   traversal of DOM nodes involved (through the <code title=dom-Node-parentNode><a href=#dom-node-parentnode>parentNode</a></code>/<code title=dom-Node-childNodes><a href=#dom-node-childnodes>childNodes</a></code> relationship).</p>
@@ -2641,6 +3553,10 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   only if its new value is different than its previous value; setting
   an attribute to a value it already has does not change it.</p>
 
+  <p>The term <dfn title="">empty</dfn>, when used of an attribute
+  value, text node, or string, means that the length of the text is
+  zero (i.e. not even containing spaces or control characters).</p>
+
 
   <h4 id=scripting-0><span class=secno>2.1.4 </span>Scripting</h4>
 
@@ -2659,10 +3575,12 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   operate on the actual underlying data, not a snapshot of the
   data.</p>
 
-  <p>The terms <dfn title="">fire</dfn> and <dfn title="">dispatch</dfn> are used interchangeably in the context of
-  events, as in the DOM Events specifications. The term <dfn id=concept-events-trusted title=concept-events-trusted>trusted event</dfn> is used as
-  defined by the DOM Events specification. <!--
-  http://krijnhoetmer.nl/irc-logs/webapps/20091218 --> <a href=#refsDOMEVENTS>[DOMEVENTS]</a></p>
+  <p>In the contexts of events, the terms <dfn title="">fire</dfn> and
+  <dfn id=concept-event-dispatch title=concept-event-dispatch>dispatch</dfn> are used as
+  defined in the DOM Core specification: firing an event means to
+  create and dispatch it, and dispatching an event means to follow the
+  steps that propagate the event through the tree. The term <dfn id=concept-events-trusted title=concept-events-trusted>trusted event</dfn> is used to refer
+  to events that have the <span>trusted flag</span> set. <a href=#refsDOMCORE>[DOMCORE]</a></p>
 
 
   <h4 id=plugins><span class=secno>2.1.5 </span>Plugins</h4>
@@ -2678,12 +3596,16 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   though a user agent can also designate built-in content handlers as
   plugins.</p>
 
+  <div class=impl>
+
   <p>A user agent must not consider the types <code>text/plain</code>
   and <code>application/octet-stream</code> as having a registered
   <a href=#plugin>plugin</a>.</p> <!-- because of the way <object> handles
   those types, if nothing else (it also doesn't make any sense to have
   a plugin registered for those types, of course) -->
 
+  </div>
+
   <p class=example>One example of a plugin would be a PDF viewer
   that is instantiated in a <a href=#browsing-context>browsing context</a> when the
   user navigates to a PDF file. This would count as a plugin
@@ -2697,7 +3619,18 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   interacting with plugins, as it is expected to be user-agent- and
   platform-specific. Some UAs might opt to support a plugin mechanism
   such as the Netscape Plugin API; others might use remote content
-  converters or have built-in support for certain types. <a href=#refsNPAPI>[NPAPI]</a></p>
+  converters or have built-in support for certain types. Indeed, this
+  specification doesn't require user agents to support plugins at all.
+  <a href=#refsNPAPI>[NPAPI]</a></p>
+
+  <p>A plugin can be <dfn id=concept-plugin-secure title=concept-plugin-secure>secured</dfn>
+  if it honors the semantics of the <code title=attr-iframe-sandbox><a href=#attr-iframe-sandbox>sandbox</a></code> attribute.</p>
+
+  <p class=example>For example, a secured plugin would prevent its
+  contents from creating pop-up windows when the plugin is
+  instantiated inside a sandboxed <code><a href=#the-iframe-element>iframe</a></code>.</p>
+
+  <div class=impl>
 
   <p class=warning>Browsers should take extreme care when
   interacting with external content intended for <a href=#plugin title=plugin>plugins</a>. When third-party software is run with
@@ -2705,6 +3638,8 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   third-party software become as dangerous as those in the user
   agent.</p>
 
+  </div>
+
 
   <h4 id=character-encodings><span class=secno>2.1.6 </span>Character encodings</h4>
 
@@ -2734,19 +3669,19 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
    different <meta charset> elements applying in each case.
   -->
 
-  <p>The term <dfn title="">Unicode character</dfn> is used to mean a
-  <i title="">Unicode scalar value</i> (i.e. any Unicode code point
-  that is not a surrogate code point). <a href=#refsUNICODE>[UNICODE]</a></p>
+  <p>The term <dfn id=a-utf-16-encoding>a UTF-16 encoding</dfn> refers to any variant of
+  UTF-16: self-describing UTF-16 with a BOM, ambiguous UTF-16 without
+  a BOM, raw UTF-16LE, and raw UTF-16BE. <a href=#refsRFC2781>[RFC2781]</a></p>
+
+  <p>The term <dfn id=unicode-character>Unicode character</dfn> is used to mean a <i title="">Unicode scalar value</i> (i.e. any Unicode code point that
+  is not a surrogate code point). <a href=#refsUNICODE>[UNICODE]</a></p>
+
 
 
 
 
 
-<!--FIXUP microdata +1-->
-<!--FIXUP 2dcontext +1-->
   <h3 id=conformance-requirements><span class=secno>2.2 </span>Conformance requirements</h3>
-<!--FIXUP microdata -1-->
-<!--FIXUP 2dcontext -1-->
 
   <p>All diagrams, examples, and notes in this specification are
   non-normative, as are all sections explicitly marked non-normative.
@@ -2758,17 +3693,57 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   interpreted as described in RFC2119. For readability, these words do
   not appear in all uppercase letters in this specification. <a href=#refsRFC2119>[RFC2119]</a></p>
 
-  <p class=impl>Requirements phrased in the imperative as part of
-  algorithms (such as "strip any leading space characters" or "return
-  false and abort these steps") are to be interpreted with the meaning
-  of the key word ("must", "should", "may", etc) used in introducing
-  the algorithm.</p>
+  <div class=impl>
+
+  <p>Requirements phrased in the imperative as part of algorithms
+  (such as "strip any leading space characters" or "return false and
+  abort these steps") are to be interpreted with the meaning of the
+  key word ("must", "should", "may", etc) used in introducing the
+  algorithm.</p>
+
+  <div class=example>
+
+   <p>For example, were the spec to say:</p>
+
+   <pre>To eat a kiwi, the user must:
+1. Peel the kiwi.
+2. Eat the kiwi flesh.</pre>
+
+   <p>...it would be equivalent to the following:</p>
+
+   <pre>To eat a kiwi:
+1. The user must peel the kiwi.
+2. The user must eat the kiwi flesh.</pre>
+
+   <p>Here the key word is "must".</p>
+
+   <p>The former (imperative) style is generally preferred in this
+   specification for stylistic reasons.</p>
+
+  </div>
+
+  <p>Conformance requirements phrased as algorithms or specific steps
+  may be implemented in any manner, so long as the end result is
+  equivalent. (In particular, the algorithms defined in this
+  specification are intended to be easy to follow, and not intended to
+  be performant.)</p>
+
+  </div>
+
+
+
+
+
+  <div class=impl>
+
+  <h4 id=conformance-classes><span class=secno>2.2.1 </span>Conformance classes</h4>
 
   <p>This specification describes the conformance criteria for <span class=impl>user agents (relevant to implementors) and</span>
   documents<span class=impl> (relevant to authors and authoring tool
   implementors)</span>.</p>
 
-  <p><dfn id=conforming-documents>Conforming documents</dfn> are those that comply with all
+  <p><dfn id=conforming-documents>Conforming
+  documents</dfn> are those that comply with all
   the conformance criteria for documents. For readability, some of
   these conformance requirements are phrased as conformance
   requirements on authors; such requirements are implicitly
@@ -2782,9 +3757,12 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   would imply that documents are not allowed to contain elements named
   <code title="">foobar</code>.</p>
 
-  <div class=impl>
-
-
+  <p class="note impl">There is no implied relationship between
+  document conformance requirements and implementation conformance
+  requirements. User agents are not free to handle non-conformant
+  documents as they please; the processing model described in this
+  specification applies to implementations regardless of the
+  conformity of the input documents.</p>
 
   <p>User agents fall into several (overlapping) categories with
   different conformance requirements.</p>
@@ -2801,11 +3779,11 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
     specifications.</p>
 
     <p class=example>A conforming XHTML processor would, upon
-    finding an XHTML <code><a href=#script>script</a></code> element in an XML document,
+    finding an XHTML <code><a href=#the-script-element>script</a></code> element in an XML document,
     execute the script contained in that element. However, if the
     element is found within a transformation expressed in XSLT
     (assuming the user agent also supports XSLT), then the processor
-    would instead treat the <code><a href=#script>script</a></code> element as an opaque
+    would instead treat the <code><a href=#the-script-element>script</a></code> element as an opaque
     element that forms part of the transform.</p>
 
     <p>Web browsers that support <a href=#syntax>the HTML syntax</a> must
@@ -2820,7 +3798,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
     <p class=note>Unless explicitly stated, specifications that
     override the semantics of HTML elements do not override the
     requirements on DOM objects representing those elements. For
-    example, the <code><a href=#script>script</a></code> element in the example above
+    example, the <code><a href=#the-script-element>script</a></code> element in the example above
     would still implement the <code><a href=#htmlscriptelement>HTMLScriptElement</a></code>
     interface.</p>
 
@@ -2848,7 +3826,30 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
    </dd>
 
-   <dt><dfn id=non-scripted>User agents with no scripting support</dfn></dt>
+   <dt id=renderingUA>Visual user agents that support the suggested default rendering</dt>
+
+   <dd>
+
+    <p>User agents, whether interactive or not, may be designated
+    (possibly as a user option) as supporting the suggested default
+    rendering defined by this specification.</p>
+
+    <p>This is not required. In particular, even user agents that do
+    implement the suggested default rendering are encouraged to offer
+    settings that override this default to improve the experience for
+    the user, e.g. changing the color contrast, using different focus
+    styles, or otherwise making the experience more accessible and
+    usable to the user.</p>
+
+    <p>User agents that are designated as supporting the suggested
+    default rendering must, while so designated, implement the rules
+    in <a href=#rendering>the rendering section</a> that that
+    section defines as the behavior that user agents are
+    <em>expected</em> to implement.</p>
+
+   </dd>
+
+   <dt id=non-scripted>User agents with no scripting support</dt>
 
    <dd>
 
@@ -2867,6 +3868,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
    </dd>
 
+
    <dt>Conformance checkers</dt>
 
    <dd id=conformance-checkers>
@@ -2894,7 +3896,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
     <p>The term "HTML validator" can be used to refer to a
     conformance checker that itself conforms to the applicable
     requirements of this specification.</p>
-    
+    <!--VERSION-->
 
     <div class=note>
 
@@ -2923,6 +3925,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
     </div>
    </dd>
 
+
    <dt>Data mining tools</dt>
 
    <dd id=data-mining>
@@ -2938,13 +3941,15 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
    </dd>
 
+
    <dt id=editors>Authoring tools and markup generators</dt>
 
    <dd>
 
     <p>Authoring tools and markup generators must generate
-    <a href=#conforming-documents>conforming documents</a>. Conformance criteria that apply
-    to authors also apply to authoring tools, where appropriate.</p>
+    <a href=#conforming-documents>conforming
+    documents</a>. Conformance criteria that apply to authors also
+    apply to authoring tools, where appropriate.</p>
 
     <p>Authoring tools are exempt from the strict requirements of
     using elements only for their specified purpose, but only to the
@@ -2999,7 +4004,31 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
    </dd>
 
-  </dl><p>Some conformance requirements are phrased as requirements on
+  </dl><p id=hardwareLimitations>User agents may impose
+  implementation-specific limits on otherwise unconstrained inputs,
+  e.g. to prevent denial of service attacks, to guard against running
+  out of memory, or to work around platform-specific limitations.</p>
+
+  <p>For compatibility with existing content and prior specifications,
+  this specification describes two authoring formats: one based on XML
+  (referred to as <a href=#the-xhtml-syntax>the XHTML syntax</a>), and one using a <a href=#writing>custom format</a> inspired by SGML (referred to as
+  <a href=#syntax>the HTML syntax</a>). Implementations must support at least
+  one of these two formats, although supporting both is
+  encouraged.</p>
+
+  <p id=entity-references>The language in this specification assumes
+  that the user agent expands all entity references, and therefore
+  does not include entity reference nodes in the DOM. If user agents
+  do include entity reference nodes in the DOM, then user agents must
+  handle them as if they were fully expanded when implementing this
+  specification. For example, if a requirement talks about an
+  element's child text nodes, then any text nodes that are children of
+  an entity reference that is a child of that element would be used as
+  well. Entity references to unknown entities must be treated as if
+  they contained just an empty text node for the purposes of the
+  algorithms defined in this specification.</p>
+
+  <p>Some conformance requirements are phrased as requirements on
   elements, attributes, methods or objects. Such requirements fall
   into two categories: those describing content model restrictions,
   and those describing implementation behavior. Those in the former
@@ -3011,52 +4040,12 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   specification does not distinguish between conformance criteria on
   authors and conformance criteria on documents.)</p>
 
-  <p>Conformance requirements phrased as algorithms or specific steps
-  may be implemented in any manner, so long as the end result is
-  equivalent. (In particular, the algorithms defined in this
-  specification are intended to be easy to follow, and not intended to
-  be performant.)</p>
-
-  <p id=hardwareLimitations>User agents may impose
-  implementation-specific limits on otherwise unconstrained inputs,
-  e.g. to prevent denial of service attacks, to guard against running
-  out of memory, or to work around platform-specific limitations.</p>
-
   </div>
 
 
-
-  <p class="note impl">There is no implied relationship between
-  document conformance requirements and implementation conformance
-  requirements. User agents are not free to handle non-conformant
-  documents as they please; the processing model described in this
-  specification applies to implementations regardless of the
-  conformity of the input documents.</p>
-
-  <p>For compatibility with existing content and prior specifications,
-  this specification describes two authoring formats: one based on XML
-  (referred to as <a href=#the-xhtml-syntax>the XHTML syntax</a>), and one using a <a href=#writing>custom format</a> inspired by SGML (referred to as
-  <a href=#syntax>the HTML syntax</a>). <span class=impl>Implementations
-  may support only one of these two formats, although supporting both
-  is encouraged.</span></p>
-
-  <p class=impl id=entity-references>The language in this
-  specification assumes that the user agent expands all entity
-  references, and therefore does not include entity reference nodes in
-  the DOM. If user agents do include entity reference nodes in the
-  DOM, then user agents must handle them as if they were fully
-  expanded when implementing this specification. For example, if a
-  requirement talks about an element's child text nodes, then any text
-  nodes that are children of an entity reference that is a child of
-  that element would be used as well. Entity references to unknown
-  entities must be treated as if they contained just an empty text
-  node for the purposes of the algorithms defined in this
-  specification.</p>
-
-
   <div class=impl>
 
-  <h4 id=dependencies><span class=secno>2.2.1 </span>Dependencies</h4>
+  <h4 id=dependencies><span class=secno>2.2.2 </span>Dependencies</h4>
 
   <p>This specification relies on several other underlying
   specifications.</p>
@@ -3082,10 +4071,10 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
     defined, in this specification, in terms of operations on the DOM.
     <a href=#refsDOMCORE>[DOMCORE]</a></p>
 
-    <p>Implementations must support some version of DOM Core and DOM
-    Events, because this specification is defined in terms of the DOM,
-    and some of the features are defined as extensions to the DOM Core
-    interfaces. <a href=#refsDOMCORE>[DOMCORE]</a> <a href=#refsDOMEVENTS>[DOMEVENTS]</a></p>
+    <p>Implementations must support DOM Core and the events defined in
+    DOM Events, because this specification is defined in terms of the
+    DOM, and some of the features are defined as extensions to the DOM
+    Core interfaces. <a href=#refsDOMCORE>[DOMCORE]</a> <a href=#refsDOMEVENTS>[DOMEVENTS]</a></p>
 
     <p>In particular, the following features are defined in the DOM
     Core specification: <a href=#refsDOMCORE>[DOMCORE]</a></p>
@@ -3104,43 +4093,125 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
      <li><dfn id=processinginstruction><code>ProcessingInstruction</code></dfn> interface</li>
      <li><dfn id=text><code>Text</code></dfn> interface</li>
 
+     <li><dfn id=htmlcollection><code>HTMLCollection</code></dfn> interface, and the terms <dfn id=collections>collections</dfn> and <dfn id=represented-by-the-collection>represented by the collection</dfn></li>
+
+     <li><dfn id=domtokenlist><code>DOMTokenList</code></dfn> interface</li>
+     <li><dfn id=domsettabletokenlist><code>DOMSettableTokenList</code></dfn> interface</li>
+
      <li><dfn id=dom-domimplementation-createdocument title=dom-DOMImplementation-createDocument><code>createDocument()</code></dfn> method</li>
+     <li><dfn id=dom-domimplementation-createhtmldocument title=dom-DOMImplementation-createHTMLDocument><code>createHTMLDocument()</code></dfn> method</li>
+     <li><dfn id=dom-document-createelement title=dom-Document-createElement><code>createElement()</code></dfn> method</li>
+     <li><dfn id=dom-document-createelementns title=dom-Document-createElementNS><code>createElementNS()</code></dfn> method</li>
      <li><dfn id=dom-document-getelementbyid title=dom-Document-getElementById><code>getElementById()</code></dfn> method</li>
      <li><dfn id=dom-node-insertbefore title=dom-Node-insertBefore><code>insertBefore()</code></dfn> method</li>
 
-     <li><dfn id=dom-node-childnodes title=dom-Node-childNodes><code>childNodes</code></dfn> attribute </li>
-     <li><dfn id=dom-node-localname title=dom-Node-localName><code>localName</code></dfn> attribute </li>
-     <li><dfn id=dom-node-parentnode title=dom-Node-parentNode><code>parentNode</code></dfn> attribute </li>
-     <li><dfn id=dom-element-tagname title=dom-Element-tagName><code>tagName</code></dfn> attribute </li>
-     <li><dfn id=textcontent><code>textContent</code></dfn> attribute </li>
+     <li><dfn id=dom-node-ownerdocument title=dom-Node-ownerDocument><code>ownerDocument</code></dfn> attribute</li>
+     <li><dfn id=dom-node-childnodes title=dom-Node-childNodes><code>childNodes</code></dfn> attribute</li>
+     <li><dfn id=dom-node-localname title=dom-Node-localName><code>localName</code></dfn> attribute</li>
+     <li><dfn id=dom-node-parentnode title=dom-Node-parentNode><code>parentNode</code></dfn> attribute</li>
+     <li><dfn id=dom-node-namespaceuri title=dom-Node-namespaceURI><code>namespaceURI</code></dfn> attribute</li>
+     <li><dfn id=dom-element-tagname title=dom-Element-tagName><code>tagName</code></dfn> attribute</li>
+     <li><dfn id=dom-element-id title=dom-Element-id><code>id</code></dfn> attribute</li>
+     <li><dfn id=textcontent><code>textContent</code></dfn> attribute</li>
+
+     <li><dfn id=event><code>Event</code></dfn> interface</li>
+     <li><dfn id=eventtarget><code>EventTarget</code></dfn> interface</li>
+     <li><dfn id=eventinit><code>EventInit</code></dfn> dictionary type</li>
+     <li>The <dfn id=concept-event-type title=concept-event-type>type</dfn> of an event</li>
+
+     <li><dfn id=dom-event-target title=dom-Event-target><code>target</code></dfn> attribute</li>
 
-    </ul><p>The following features are defined in the DOM Events
+     <li>The <dfn id="document's-character-encoding" title="document's character encoding">character encoding</dfn> and <dfn id=concept-document-media-type title=concept-document-media-type>media type</dfn> of a <code><a href=#document>Document</a></code></li>
+     <li>The distinction between <dfn id=xml-documents>XML documents</dfn> and <dfn id=html-documents>HTML documents</dfn></li>
+     <li>The terms <dfn id=quirks-mode>quirks mode</dfn>, <dfn id=limited-quirks-mode>limited-quirks mode</dfn>, and <dfn id=no-quirks-mode>no-quirks mode</dfn></li>
+     <li>The algorithm to <dfn id=concept-node-clone title=concept-node-clone>clone</dfn> a <code><a href=#node>Node</a></code>, and the concept of <dfn id=concept-node-clone-ext title=concept-node-clone-ext>cloning steps</dfn> used by tat algorithm</li>
+     <li>The concept of <dfn id=base-url-change-steps>base URL change steps</dfn> and the definition of what happens when an element is <dfn id=affected-by-a-base-url-change>affected by a base URL change</dfn>.</li>
+     <li>The concept of an element's <dfn id=concept-id title=concept-id>unique identifier (ID)</dfn>.</li>
+
+    </ul><p>The term <dfn id=throw>throw</dfn> in this specification is used as
+    defined in the DOM Core specification. The following
+    <code><a href=#domexception>DOMException</a></code> types are defined in the DOM Core
+    specification: <a href=#refsDOMCORE>[DOMCORE]</a></p>
+
+    <ol class=brief><li value=1><dfn id=indexsizeerror><code>IndexSizeError</code></dfn></li>
+     <li value=3><dfn id=hierarchyrequesterror><code>HierarchyRequestError</code></dfn></li>
+     <li value=4><dfn id=wrongdocumenterror><code>WrongDocumentError</code></dfn></li>
+     <li value=5><dfn id=invalidcharactererror><code>InvalidCharacterError</code></dfn></li>
+     <li value=7><dfn id=nomodificationallowederror><code>NoModificationAllowedError</code></dfn></li>
+     <li value=8><dfn id=notfounderror><code>NotFoundError</code></dfn></li>
+     <li value=9><dfn id=notsupportederror><code>NotSupportedError</code></dfn></li>
+     <li value=11><dfn id=invalidstateerror><code>InvalidStateError</code></dfn></li>
+     <li value=12><dfn id=syntaxerror><code>SyntaxError</code></dfn></li>
+     <li value=13><dfn id=invalidmodificationerror><code>InvalidModificationError</code></dfn></li>
+     <li value=14><dfn id=namespaceerror><code>NamespaceError</code></dfn></li>
+     <li value=15><dfn id=invalidaccesserror><code>InvalidAccessError</code></dfn></li>
+     <li value=17><dfn id=typemismatcherror><code>TypeMismatchError</code></dfn></li>
+     <li value=18><dfn id=securityerror><code>SecurityError</code></dfn></li>
+     <li value=19><dfn id=networkerror><code>NetworkError</code></dfn></li>
+     <li value=20><dfn id=aborterror><code>AbortError</code></dfn></li>
+     <li value=21><dfn id=urlmismatcherror><code>URLMismatchError</code></dfn></li>
+     <li value=22><dfn id=quotaexceedederror><code>QuotaExceededError</code></dfn></li>
+     <li value=23><dfn id=timeouterror><code>TimeoutError</code></dfn></li>
+     <li value=24><dfn id=invalidnodetypeerror><code>InvalidNodeTypeError</code></dfn></li>
+     <li value=25><dfn id=datacloneerror><code>DataCloneError</code></dfn></li>
+    </ol><p class=example>For example, to <i>throw a
+    <code><a href=#timeouterror>TimeoutError</a></code> exception</i>, a user agent would
+    construct a <code><a href=#domexception>DOMException</a></code> object whose type was the
+    string "<code title="">TimeoutError</code>" (and whose code was
+    the number 23, for legacy reasons) and actually throw that object
+    as an exception.</p>
+
+    <p>The following features are defined in the DOM Events
     specification: <a href=#refsDOMEVENTS>[DOMEVENTS]</a></p>
 
-    <ul class=brief><li><dfn id=event><code>Event</code></dfn> interface</li>
-     <li><dfn id=eventtarget><code>EventTarget</code></dfn> interface</li>
-     <li><dfn id=uievent><code>UIEvent</code></dfn> interface</li>
+    <ul class=brief><li><dfn id=uievent><code>UIEvent</code></dfn> interface</li>
+     <li><dfn id=mouseevent><code>MouseEvent</code></dfn> interface</li>
+     <li><dfn id=mouseeventinit><code>MouseEventInit</code></dfn> dictionary type</li>
 
      <li><dfn id=event-click title=event-click><code>click</code></dfn> event</li>
-     <li><dfn id=event-domactivate title=event-DOMActivate><code>DOMActivate</code></dfn> event</li>
 
-     <li><dfn id=dom-event-target title=dom-Event-target><code>target</code></dfn> attribute</li>
+    </ul><!--
+    <p>The following features are defined in the DOM
+    Range specification: <a href="#refsDOMRANGE">[DOMRANGE]</a></p>
+
+    <ul class="brief">
+
+     <li><dfn><code>Range</code></dfn> interface</li>
+
+     <li><dfn title="dom-Range-deleteContents"><code>deleteContents()</code></dfn> method </li>
+     <li><dfn title="dom-Range-selectNodeContents"><code>selectNodeContents()</code></dfn> method </li>
+     <li><dfn title="dom-Range-setEnd"><code>setEnd()</code></dfn> method </li>
+     <li><dfn title="dom-Range-setStart"><code>setStart()</code></dfn> method </li>
+
+     <li><dfn title="dom-Range-collapsed"><code>collapsed</code></dfn> attribute </li>
+     <li><dfn title="dom-Range-endContainer"><code>endContainer</code></dfn> attribute </li>
+     <li><dfn title="dom-Range-endOffset"><code>endOffset</code></dfn> attribute </li>
+     <li><dfn title="dom-Range-startContainer"><code>startContainer</code></dfn> attribute </li>
+     <li><dfn title="dom-Range-startOffset"><code>startOffset</code></dfn> attribute </li>
+
+    </ul>
+--><p>In addition, user agents must implement the features defined in
+    the DOM Range, DOM Parsing and Serialization, HTML Editing APIs,
+    and UndoManager and DOM Transaction specifications that apply to
+    their conformance class.
+    <a href=#refsDOMRANGE>[DOMRANGE]</a>
+    <a href=#refsDOMPARSING>[DOMPARSING]</a>
+    <a href=#refsEDITING>[EDITING]</a>
+    <a href=#refsUNDO>[UNDO]</a>
+    </p>
 
-    </ul><p>The following features are defined in the DOM
-    Range specification: <a href=#refsDOMRANGE>[DOMRANGE]</a></p>
+   </dd>
 
-    <ul class=brief><li><dfn id=range><code>Range</code></dfn> interface</li>
+   <dt>File API</dt>
 
-     <li><dfn id=dom-range-deletecontents title=dom-Range-deleteContents><code>deleteContents()</code></dfn> method </li>
-     <li><dfn id=dom-range-selectnodecontents title=dom-Range-selectNodeContents><code>selectNodeContents()</code></dfn> method </li>
-     <li><dfn id=dom-range-setend title=dom-Range-setEnd><code>setEnd()</code></dfn> method </li>
-     <li><dfn id=dom-range-setstart title=dom-Range-setStart><code>setStart()</code></dfn> method </li>
+   <dd>
 
-     <li><dfn id=dom-range-collapsed title=dom-Range-collapsed><code>collapsed</code></dfn> attribute </li>
-     <li><dfn id=dom-range-endcontainer title=dom-Range-endContainer><code>endContainer</code></dfn> attribute </li>
-     <li><dfn id=dom-range-endoffset title=dom-Range-endOffset><code>endOffset</code></dfn> attribute </li>
-     <li><dfn id=dom-range-startcontainer title=dom-Range-startContainer><code>startContainer</code></dfn> attribute </li>
-     <li><dfn id=dom-range-startoffset title=dom-Range-startOffset><code>startOffset</code></dfn> attribute </li>
+    <p>This specification uses the following interfaces defined in the
+    File API specification: <a href=#refsFILEAPI>[FILEAPI]</a></p>
+
+    <ul class=brief><li><dfn id=blob><code>Blob</code></dfn></li>
+     <li><dfn id=file><code>File</code></dfn></li>
+     <li><dfn id=filelist><code>FileList</code></dfn></li>
 
     </ul></dd>
 
@@ -3152,15 +4223,31 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
     required for conforming IDL fragments, as described in the Web IDL
     specification. <a href=#refsWEBIDL>[WEBIDL]</a></p>
 
+    <p>The terms <dfn id=supported-property-indices>supported property indices</dfn>, <dfn id=supported-property-names>supported
+    property names</dfn>, <dfn id=determine-the-value-of-an-indexed-property>determine the value of an indexed
+    property</dfn>, <dfn id=determine-the-value-of-a-named-property>determine the value of a named
+    property</dfn>, <dfn id=platform-array-objects>platform array objects</dfn>, and <dfn id=dfn-read-only-array title=dfn-read-only-array>read only</dfn> (when applied to
+    arrays) are used as defined in the WebIDL specification.</p>
+
     <p id=float-nan>Except where otherwise specified, if an IDL
-    attribute that is a floating point number type (<code title="">float</code>) is assigned an Infinity or Not-a-Number
-    (NaN) value, a <code><a href=#not_supported_err>NOT_SUPPORTED_ERR</a></code> exception must be
+    attribute that is a floating point number type (<code title="">double</code>) is assigned an Infinity or Not-a-Number
+    (NaN) value, a <code><a href=#notsupportederror>NotSupportedError</a></code> exception must be
     raised.</p>
 
     <p>Except where otherwise specified, if a method with an argument
-    that is a floating point number type (<code title="">float</code>)
+    that is a floating point number type (<code title="">double</code>)
     is passed an Infinity or Not-a-Number (NaN) value, a
-    <code><a href=#not_supported_err>NOT_SUPPORTED_ERR</a></code> exception must be raised.</p>
+    <code><a href=#notsupportederror>NotSupportedError</a></code> exception must be raised.</p>
+
+   </dd>
+
+   <dt>Typed Arrays</dt>
+
+   <dd>
+
+    <p>The <dfn id=arraybuffer>ArrayBuffer</dfn> interface and underlying concepts
+    from the Typed Array Specification are used for several features
+    in this specification. <a href=#refsTYPEDARRAY>[TYPEDARRAY]</a></p>
 
    </dd>
 
@@ -3186,8 +4273,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
    <dd>
 
-    <p>Implementations must support some version of the Media Queries
-    language. <a href=#refsMQ>[MQ]</a></p>
+    <p>Implementations must support the Media Queries language. <a href=#refsMQ>[MQ]</a></p>
 
    </dd>
 
@@ -3203,6 +4289,102 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
    </dd>
 
+   <dt>Cookies</dt>
+
+   <dd>
+
+    <p>The following term is defined in the Cookie specification: <a href=#refsCOOKIES>[COOKIES]</a></p>
+
+    <ul class=brief><li><dfn id=cookie-string>cookie-string</dfn>
+     <li><dfn id=receives-a-set-cookie-string>receives a set-cookie-string</dfn>
+    </ul></dd>
+
+   <dt>CORS</dt>
+
+   <dd>
+
+    <p>The following terms are defined in the CORS specification: <a href=#refsCORS>[CORS]</a></p>
+
+    <ul class=brief><li><dfn id=cross-origin-request>cross-origin request</dfn>
+     <li><dfn id=cross-origin-request-status>cross-origin request status</dfn>
+     <li><dfn id=custom-request-headers>custom request headers</dfn>
+     <li><dfn id=simple-cross-origin-request>simple cross-origin request</dfn>
+     <li><dfn id=redirect-steps>redirect steps</dfn>
+     <li><dfn id=credential-flag>credential flag</dfn>
+     <li><dfn id=resource-sharing-check>resource sharing check</dfn>
+    </ul></dd>
+
+   <dt>CSS modules</dt>
+
+   <dd>
+
+    <p>While support for CSS as a whole is not required of
+    implementations of this specification (though it is encouraged, at
+    least for Web browsers), some features are defined in terms of
+    specific CSS requirements.</p>
+
+    <p>In particular, some features require that a string be
+    <dfn id=parsed-as-a-css-color-value>parsed as a CSS &lt;color&gt; value</dfn>. When parsing a CSS
+    value, user agents are required by the CSS specifications to apply
+    some error handling rules. These apply to this specification also.
+    <a href=#refsCSSCOLOR>[CSSCOLOR]</a> <a href=#refsCSS>[CSS]</a></p>
+
+    <p class=example>For example, user agents are required to close
+    all open constructs upon finding the end of a style sheet
+    unexpectedly. Thus, when parsing the string "<code title="">rgb(0,0,0</code>" (with a missing close-parenthesis) for
+    a color value, the close parenthesis is implied by this error
+    handling rule, and a value is obtained (the color 'black').
+    However, the similar construct "<code title="">rgb(0,0,</code>"
+    (with both a missing parenthesis and a missing "blue" value)
+    cannot be parsed, as closing the open construct does not result
+    in a viable value.</p>
+
+    <p>The term <dfn id=css-element-reference-identifier>CSS element reference identifier</dfn> is used as
+    defined in the <cite>CSS Image Values and Replaced Content</cite>
+    specification to define the API that declares identifiers for use
+    with the CSS 'element()' function. <a href=#refsCSSIMAGES>[CSSIMAGES]</a></p>
+
+    <p>Similarly, the term <dfn id=provides-a-paint-source>provides a paint source</dfn> is used
+    as defined in the <cite>CSS Image Values and Replaced
+    Content</cite> specification to define the interaction of certain
+    HTML elements with the CSS 'element()' function. <a href=#refsCSSIMAGES>[CSSIMAGES]</a></p>
+
+   </dd>
+
+
+
+   <dt>The WebSocket protocol</dt>
+
+   <dd>
+
+    <div data-component="WebSocket API (editor: Ian Hickson)"><!--websocket-api-->
+
+    <p>The following terms are defined in the WebSocket protocol
+    specification: <a href=#refsWSP>[WSP]</a></p>
+
+    <ul class=brief><li><dfn id="parse-a-websocket-url's-components">parse a WebSocket URL's components</dfn>
+     <li><dfn id=establish-a-websocket-connection>establish a WebSocket connection</dfn>
+     <li><dfn id=the-websocket-connection-is-established>the WebSocket connection is established</dfn>
+     <li><dfn id="validate-the-server's-response">validate the server's response</dfn>
+     <li><dfn id=extensions-in-use>extensions in use</dfn>
+     <li><dfn id=subprotocol-in-use>subprotocol in use</dfn>
+     <li><dfn id=headers-to-send-appropriate-cookies>headers to send appropriate cookies</dfn>
+     <li><dfn id="cookies-set-during-the-server's-opening-handshake">cookies set during the server's opening handshake</dfn>
+     <li><dfn id=a-websocket-message-has-been-received>a WebSocket message has been received</dfn>
+     <li><dfn id=fail-the-websocket-connection>fail the WebSocket connection</dfn>
+     <li><dfn id=close-the-websocket-connection>close the WebSocket connection</dfn>
+     <li><dfn id=start-the-websocket-closing-handshake>start the WebSocket closing handshake</dfn>
+     <li><dfn id=the-websocket-closing-handshake-is-started>the WebSocket closing handshake is started</dfn>
+     <li><dfn id=the-websocket-connection-is-closed>the WebSocket connection is closed</dfn> (possibly <i title="">cleanly</i>)
+     <li><dfn id=the-websocket-connection-close-code>the WebSocket connection close code</dfn>
+     <li><dfn id=the-websocket-connection-close-reason>the WebSocket connection close reason</dfn>
+
+    </ul></div><!--data-component-->
+
+   </dd>
+
+
+
   </dl><p>This specification does not <em>require</em> support of any
   particular network protocol, style sheet language, scripting
   language, or any of the DOM specifications beyond those described
@@ -3219,7 +4401,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
 
 
-  <h4 id=extensibility><span class=secno>2.2.2 </span>Extensibility</h4>
+  <h4 id=extensibility><span class=secno>2.2.3 </span>Extensibility</h4>
 
   <p>HTML has a wide number of extensibility mechanisms that can be
   used for adding semantics in a safe manner:</p>
@@ -3237,17 +4419,17 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
    include data on HTML elements that scripts can then look for and
    process.</li>
 
-   <li>Authors can use the <code title=meta><a href=#meta>&lt;meta name=""
+   <li>Authors can use the <code title=meta><a href=#the-meta-element>&lt;meta name=""
    content=""&gt;</a></code> mechanism to include page-wide metadata by
    registering <a href=#concept-meta-extensions title=concept-meta-extensions>extensions to the
    predefined set of metadata names</a>.</li>
 
    <li>Authors can use the <code title=attr-hyperlink-rel><a href=#attr-hyperlink-rel>rel=""</a></code> mechanism to annotate
-   links with specific meanings by registering <a href=#concept-rel-extensions title=concept-rel-extensions> extensions to the predefined set of
+   links with specific meanings by registering <a href=#concept-rel-extensions title=concept-rel-extensions>extensions to the predefined set of
    link types</a>. This is also used by Microformats.</li>
 
-   <li>Authors can embed raw data using the <code title=script><a href=#script>&lt;script type=""&gt;</a></code> mechanism with a custom
-   type, for further handling by inline or server-side scripts.</li>
+   <li>Authors can embed raw data using the <code title=script><a href=#the-script-element>&lt;script type=""&gt;</a></code> mechanism with a custom
+   type, for further handling by inline or server-side scripts.</li>
 
    <li>Authors can create <a href=#plugin title=plugin>plugins</a> and
    invoke them using the <code><a href=#the-embed-element>embed</a></code> element. This is how Flash
@@ -3257,9 +4439,11 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
    mechanism. This is widely used by script libraries, for
    instance.</li>
 
-   <li>Authors can use the microdata feature (the <code title=attr-item>item=""</code> and <code title=attr-itemprop><a href=#names:-the-itemprop-attribute>itemprop=""</a></code> attributes) to embed
+<!--MD-->
+   <li>Authors can use the microdata feature (the <code title=attr-itemscope><a href=#attr-itemscope>itemscope=""</a></code> and <code title=attr-itemprop><a href=#names:-the-itemprop-attribute>itemprop=""</a></code> attributes) to embed
    nested name-value pairs of data to be shared with other
    applications and sites.</li>
+<!--MD-->
 
   </ul><div class=impl>
 
@@ -3281,13 +4465,13 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
   <p>For markup-level features that are intended for use with
   <a href=#syntax>the HTML syntax</a>, extensions should be limited to new
-  attributes of the form "<code title="">_<var title="">vendor</var>-<var title="">feature</var></code>", where
+  attributes of the form "<code title="">x-<var title="">vendor</var>-<var title="">feature</var></code>", where
   <var title="">vendor</var> is a short string that identifies the
   vendor responsible for the extension, and <var title="">feature</var> is the name of the feature. New element names
   should not be created. Using attributes for such extensions
   exclusively allows extensions from multiple vendors to co-exist on
   the same element, which would not be possible with elements. Using
-  the "<code title="">_<var title="">vendor</var>-<var title="">feature</var></code>" form allows extensions to be made
+  the "<code title="">x-<var title="">vendor</var>-<var title="">feature</var></code>" form allows extensions to be made
   without risk of conflicting with future additions to the
   specification.</p>
 
@@ -3300,14 +4484,16 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
    these features could write:</p>
 
    <pre>&lt;p&gt;This smells of lemons!
-&lt;span _ferret-smellovision _ferret-smellcode="LEM01"
-      _mb-outputsmell _mb-smell="lemon juice"&gt;&lt;/span&gt;&lt;/p&gt;</pre>
+&lt;span x-ferret-smellovision x-ferret-smellcode="LEM01"
+      x-mb-outputsmell x-mb-smell="lemon juice"&gt;&lt;/span&gt;&lt;/p&gt;</pre>
 
   </div>
 
-  <p>Attribute names starting with a U+005F LOW LINE character (_) are
-  reserved for user agent use and are guaranteed to never be formally
-  added to the HTML language.</p>
+  <p>Attribute names beginning with the two characters "<code title="">x-</code>" are reserved for user agent use and are
+  guaranteed to never be formally added to the HTML language. For
+  flexibility, attributes names containing underscores (the U+005F LOW
+  LINE character) are also reserved for experimental purposes and are
+  guaranteed to never be formally added to the HTML language.</p>
 
   <p class=note>Pages that use such attributes are by definition
   non-conforming.</p>
@@ -3316,6 +4502,19 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   members should be prefixed by vendor-specific strings to prevent
   clashes with future versions of this specification.</p>
 
+  <p>For events, experimental event names should be prefixed with
+  vendor-specific strings.</p>
+
+  <div class=example>
+
+   <p>For example, if a user agent called "Pleas<!--e h-->old" were to
+   add an event to indicate when the user is going up in an elevator,
+   it could use the prefix "<code title="">pleasold</code>" and thus
+   name the event "<code title="">pleasoldgoingup</code>", possibly
+   with an event handler attribute named "<code title="">onpleasoldgoingup</code>".</p>
+
+  </div>
+
   <p>All extensions must be defined so that the use of extensions
   neither contradicts nor causes the non-conformance of functionality
   defined in the specification.</p> <!-- thanks to QA Framework -->
@@ -3333,16 +4532,31 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
   </div>
 
+  <p>When adding new <a href=#reflect title=reflect>reflecting</a> IDL
+  attributes corresponding to content attributes of the form "<code title="">x-<var title="">vendor</var>-<var title="">feature</var></code>", the IDL attribute should be named
+  "<code title=""><var title="">vendor</var><var title="">Feature</var></code>" (i.e. the "<code title="">x</code>"
+  is dropped from the IDL attribute's name).</p>
+
   <hr><p>When vendor-neutral extensions to this specification are needed,
   either this specification can be updated accordingly, or an
   extension specification can be written that overrides the
   requirements in this specification. When someone applying this
   specification to their activities decides that they will recognize
   the requirements of such an extension specification, it becomes an
+<!--CONFORMANCE--><!--FORK-->
   <dfn id=other-applicable-specifications title="other applicable specifications">applicable
   specification</dfn> for the purposes of conformance requirements in
   this specification.</p>
-  <!-- http://www.w3.org/mid/17E341CD-E790-422C-9F9A-69347EE01CEB@iki.fi -->
+
+  <p class=note>Someone could write a specification that defines any
+  arbitrary byte stream as conforming, and then claim that their
+  random junk is conforming. However, that does not mean that their
+  random junk actually is conforming for everyone's purposes: if
+  someone else decides that that specification does not apply to their
+  work, then they can quite legitimately say that the aforementioned
+  random junk is just that, junk, and not conforming at all. As far as
+  conformance goes, what matters in a particular community is what
+  that community <em>agrees</em> is applicable.</p>
 
   <hr><p>User agents must treat elements and attributes that they do not
   understand as semantically neutral; leaving them in the DOM (for DOM
@@ -3379,6 +4593,9 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   manner means using the Unicode <i>compatibility caseless match</i>
   operation to compare the two strings. <a href=#refsUNICODE>[UNICODE]</a></p>
 
+  <p>Except where otherwise stated, string comparisons must be
+  performed in a <a href=#case-sensitive>case-sensitive</a> manner.</p>
+
 
   <div class=impl>
 
@@ -3403,7 +4620,74 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   two strings as matches of each other.</p>
 
 
-  <h3 id=common-microsyntaxes><span class=secno>2.4 </span>Common microsyntaxes</h3>
+  <div class=impl>
+
+  <h3 id=utf-8><span class=secno>2.4 </span>UTF-8</h3>
+
+  <p>When a user agent is required to <dfn id=decoded-as-utf-8,-with-error-handling title="decoded as UTF-8,
+  with error handling">decode a byte string as UTF-8, with error
+  handling</dfn>, it means that the byte stream must be converted to a
+  Unicode string by interpreting it as UTF-8, except that any errors
+  must be handled as described in the following list. Bytes in the
+  following list are represented in hexadecimal. <a href=#refsRFC3629>[RFC3629]</a>
+
+  <dl class=switch><dt>One byte in the range FE to FF</dt>
+
+
+   <dt><a href=#overlong-form title="overlong form">Overlong forms</a> (e.g. F0 80 80 A0)</dt>
+
+   <dt>One byte in the range C0 to C1, followed by one byte in the range 80 to BF</dt> <!-- overlong ASCII (redundant with the previous line, really, but worth calling out separately as it's especially dangerous to miss this case) -->
+
+
+   <dt>One byte in the range F0 to F4, followed by three bytes in the range 80 to BF that represent a code point above U+10FFFF</dt>
+
+   <dt>One byte in the range F5 to F7, followed by three bytes in the range 80 to BF</dt> <!-- above U+10FFFF -->
+
+   <dt>One byte in the range F8 to FB, followed by four bytes in the range 80 to BF</dt> <!-- above U+10FFFF -->
+
+   <dt>One byte in the range FC to FD, followed by five bytes in the range 80 to BF</dt> <!-- above U+10FFFF -->
+
+
+   <dt>One byte in the range C0 to FD that is not followed by a byte in the range 80 to BF</dt> <!-- too short -->
+
+   <dt>One byte in the range E0 to FD, followed by a byte in the range 80 to BF that is not followed by a byte in the range 80 to BF</dt> <!-- too short -->
+
+   <dt>One byte in the range F0 to FD, followed by two bytes in the range 80 to BF, the last of which is not followed by a byte in the range 80 to BF</dt> <!-- too short -->
+
+   <dt>One byte in the range F8 to FD, followed by three bytes in the range 80 to BF, the last of which is not followed by a byte in the range 80 to BF</dt> <!-- too short -->
+
+   <dt>One byte in the range FC to FD, followed by four bytes in the range 80 to BF, the last of which is not followed by a byte in the range 80 to BF</dt> <!-- too short -->
+
+
+   <dt>Any byte sequence that represents a code point in the range U+D800 to U+DFFF</dt> <!-- surrogate halves -->
+
+
+   <dd>The whole matched sequence must be replaced by a single U+FFFD
+   REPLACEMENT CHARACTER.</dd>
+
+
+   <dt>One byte in the range 80 to BF not preceded by a byte in the range 80 to FD</dt>
+
+   <dt>One byte in the range 80 to BF preceded by a byte that is part of a complete UTF-8 sequence that does not include this byte</dt>
+
+   <dt>One byte in the range 80 to BF preceded by a byte that is part of a sequence that has been replaced by a U+FFFD REPLACEMENT CHARACTER, either alone or as part of a sequence</dt>
+
+   <dd>Each such byte must be replaced with a U+FFFD REPLACEMENT CHARACTER.</dd>
+
+
+  </dl><p>For the purposes of the above requirements, an <dfn id=overlong-form>overlong
+  form</dfn> in UTF-8 is a sequence that encodes a code point using
+  more bytes than the minimum needed to encode that code point in
+  UTF-8.</p>
+
+  <p class=example>For example, the byte string "41 98 BA 42 E2 98
+  43 E2 98 BA E2 98" would be converted to the string
+  "A&#65533;&#65533;B&#65533;C&#9786;&#65533;".</p>
+
+  </div>
+
+
+  <h3 id=common-microsyntaxes><span class=secno>2.5 </span>Common microsyntaxes</h3>
 
   <p>There are various places in HTML that accept particular data
   types, such as dates or numbers. This section describes what the
@@ -3426,7 +4710,9 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
   <div class=impl>
 
-  <h4 id=common-parser-idioms><span class=secno>2.4.1 </span>Common parser idioms</h4>
+  <h4 id=common-parser-idioms><span class=secno>2.5.1 </span>Common parser idioms</h4>
+
+  </div>
 
   <p>The <dfn id=space-character title="space character">space characters</dfn>, for the
   purposes of this specification, are U+0020 SPACE, U+0009 CHARACTER
@@ -3440,6 +4726,8 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   <p class=note>This should not be confused with the "White_Space"
   value (abbreviated "WS") of the "Bidi_Class" property in the <code title="">Unicode.txt</code> data file.</p>
 
+  <div class=impl>
+
   <p>The <dfn id=alphanumeric-ascii-characters>alphanumeric ASCII characters</dfn> are those in the
   ranges U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9), U+0041 LATIN
   CAPITAL LETTER A to U+005A LATIN CAPITAL LETTER Z, U+0061 LATIN
@@ -3484,11 +4772,43 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   <p>The <dfn id=code-point-length>code-point length</dfn> of a string is the number of
   Unicode code points in that string.</p>
 
+  <p>When a user agent has to <dfn id=strictly-split-a-string>strictly split a string</dfn> on a
+  particular delimiter character <var title="">delimiter</var>, it
+  must use the following algorithm:</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>Let <var title="">tokens</var> be a list of tokens,
+   initially empty.</li>
+
+   <li><p>While <var title="">position</var> is not past the end of
+   <var title="">input</var>:</p>
+
+    <ol><li><p><a href=#collect-a-sequence-of-characters>Collect a sequence of characters</a> that are not
+     the <var title="">delimiter</var> character.</li>
+
+     <li><p>Add the string collected in the previous step to <var title="">tokens</var>.</li>
+
+     <li><p>Advance <var title="">position</var> to the next character
+     in <var title="">input</var>.</li> <!-- skips past the delimiter -->
+
+    </ol></li>
+
+   <li><p>Return <var title="">tokens</var>.</li>
+
+  </ol><p class=note>For the special cases of splitting a string <a href=#split-a-string-on-spaces title="split a string on spaces">on spaces</a> and <a href=#split-a-string-on-spaces title="split a string on spaces">on commas</a>, this algorithm
+  does not apply (those algorithms also perform <a href=#strip-leading-and-trailing-whitespace title="strip
+  leading and trailing whitespace">whitespace trimming</a>).</p>
+
   </div>
 
 
 
-  <h4 id=boolean-attributes><span class=secno>2.4.2 </span>Boolean attributes</h4>
+  <h4 id=boolean-attributes><span class=secno>2.5.2 </span>Boolean attributes</h4>
 
   <p>A number of attributes are <dfn id=boolean-attribute title="boolean attribute">boolean
   attributes</dfn>. The presence of a boolean attribute on an element
@@ -3504,9 +4824,27 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   boolean attributes. To represent a false value, the attribute has to
   be omitted altogether.</p>
 
+  <div class=example>
+
+   <p>Here is an example of a checkbox that is checked and disabled.
+   The <code title=attr-input-checked><a href=#attr-input-checked>checked</a></code> and <code title=attr-fe-disabled><a href=#attr-fe-disabled>disabled</a></code> attributes are the
+   boolean attributes.</p>
+
+   <pre>&lt;label&gt;&lt;input type=checkbox checked name=cheese disabled&gt; Cheese&lt;/label&gt;</pre>
 
+   <p>This could be equivalently written as this:
 
-  <h4 id=keywords-and-enumerated-attributes><span class=secno>2.4.3 </span>Keywords and enumerated attributes</h4>
+   <pre>&lt;label&gt;&lt;input type=checkbox checked=checked name=cheese disabled=disabled&gt; Cheese&lt;/label&gt;</pre>
+
+   <p>You can also mix styles; the following is still equivalent:</p>
+
+   <pre>&lt;label&gt;&lt;input type='checkbox' checked name=cheese disabled=""&gt; Cheese&lt;/label&gt;</pre>
+
+  </div>
+
+
+
+  <h4 id=keywords-and-enumerated-attributes><span class=secno>2.5.3 </span>Keywords and enumerated attributes</h4>
 
   <p>Some attributes are defined as taking one of a finite set of
   keywords. Such attributes are called <dfn id=enumerated-attribute title="enumerated
@@ -3543,9 +4881,9 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   <p class=note>The empty string can be a valid keyword.</p>
 
 
-  <h4 id=numbers><span class=secno>2.4.4 </span>Numbers</h4>
+  <h4 id=numbers><span class=secno>2.5.4 </span>Numbers</h4>
 
-  <h5 id=non-negative-integers><span class=secno>2.4.4.1 </span>Non-negative integers</h5>
+  <h5 id=non-negative-integers><span class=secno>2.5.4.1 </span>Non-negative integers</h5>
 
   <p>A string is a <dfn id=valid-non-negative-integer>valid non-negative integer</dfn> if it
   consists of one or more characters in the range U+0030 DIGIT ZERO
@@ -3560,8 +4898,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   given in the following algorithm. When invoked, the steps must be
   followed in the order given, aborting at the first step that returns
   a value. This algorithm will return either zero, a positive integer,
-  or an error. Leading spaces are ignored. Trailing spaces and any
-  trailing garbage characters are ignored.</p>
+  or an error.</p>
 
   <ol><li><p>Let <var title="">input</var> be the string being
    parsed.</li>
@@ -3595,7 +4932,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   </ol></div>
 
 
-  <h5 id=signed-integers><span class=secno>2.4.4.2 </span>Signed integers</h5>
+  <h5 id=signed-integers><span class=secno>2.5.4.2 </span>Signed integers</h5>
 
   <p>A string is a <dfn id=valid-integer>valid integer</dfn> if it consists of one or
   more characters in the range U+0030 DIGIT ZERO (0) to U+0039 DIGIT
@@ -3616,9 +4953,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   non-negative integers</a>, and are as given in the following
   algorithm. When invoked, the steps must be followed in the order
   given, aborting at the first step that returns a value. This
-  algorithm will return either an integer or an error. Leading spaces
-  are ignored. Trailing spaces and trailing garbage characters are
-  ignored.</p>
+  algorithm will return either an integer or an error.</p>
 
   <ol><li><p>Let <var title="">input</var> be the string being
    parsed.</li>
@@ -3674,7 +5009,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   </ol></div>
 
 
-  <h5 id=real-numbers><span class=secno>2.4.4.3 </span>Real numbers</h5>
+  <h5 id=floating-point-numbers><span class=secno>2.5.4.3 </span>Floating-point numbers</h5>
 
   <p>A string is a <dfn id=valid-floating-point-number>valid floating point number</dfn> if it
   consists of:</p>
@@ -3738,8 +5073,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   <p>The <dfn id=rules-for-parsing-floating-point-number-values>rules for parsing floating point number values</dfn> are
   as given in the following algorithm. This algorithm must be aborted
   at the first step that returns something. This algorithm will return
-  either a number or an error. Leading spaces are ignored. Trailing
-  spaces and garbage characters are ignored.</p>
+  either a number or an error.</p>
 
   <ol><li><p>Let <var title="">input</var> be the string being
    parsed.</li>
@@ -3769,6 +5103,15 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
      <li>If <var title="">position</var> is past the end of <var title="">input</var>, return an error.</li>
 
+    </ol><p>Otherwise, if the character indicated by <var title="">position</var> (the first character) is a U+002B PLUS
+    SIGN character (+):</p>
+
+    <ol><li>Advance <var title="">position</var> to the next
+     character. (The "<code title="">+</code>" is ignored, but it is
+     not conforming.)</li>
+
+     <li>If <var title="">position</var> is past the end of <var title="">input</var>, return an error.</li>
+
     </ol></li>
 
    <li><p>If the character indicated by <var title="">position</var>
@@ -3793,9 +5136,15 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
      character.</li>
 
      <li><p>If <var title="">position</var> is past the end of <var title="">input</var>, or 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 jump to the step labeled
+     U+0039 DIGIT NINE (9), U+0065 LATIN SMALL LETTER E (e), or U+0045
+     LATIN CAPITAL LETTER E (E), then jump to the step labeled
      <i>conversion</i>.</li>
 
+     <li><p>If the character indicated by <var title="">position</var>
+     is a U+0065 LATIN SMALL LETTER E character (e) or a U+0045 LATIN
+     CAPITAL LETTER E character (E), skip the remainder of these
+     substeps.</p>
+
      <li><p><i>Fraction loop</i>: Multiply <var title="">divisor</var>
      by ten.</li>
 
@@ -3862,15 +5211,15 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
     </ol></li>
 
    <li><p><i>Conversion</i>: Let <var title="">S</var> be the set of
-   finite IEEE 754 single-precision floating point values except
-   &minus;0, but with two special values added: 2<sup title="">128</sup> and &minus;2<sup title="">128</sup>.</li>
+   finite IEEE 754 double-precision floating point values except
+   &minus;0, but with two special values added: 2<sup title="">1024</sup> and &minus;2<sup title="">1024</sup>.</li>
 
    <li><p>Let <var title="">rounded-value</var> be the number in <var title="">S</var> that is closest to <var title="">value</var>,
    selecting the number with an even significand if there are two
-   equally close values. (The two special values 2<sup title="">128</sup> and &minus;2<sup title="">128</sup> are
+   equally close values. (The two special values 2<sup title="">1024</sup> and &minus;2<sup title="">1024</sup> are
    considered to have even significands for this purpose.)</li>
 
-   <li><p>If <var title="">rounded-value</var> is 2<sup title="">128</sup> or &minus;2<sup title="">128</sup>, return an
+   <li><p>If <var title="">rounded-value</var> is 2<sup title="">1024</sup> or &minus;2<sup title="">1024</sup>, return an
    error.</li>
 
    <li><p>Return <var title="">rounded-value</var>.</li>
@@ -3879,7 +5228,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
 
 <div class=impl>
-  <h5 id=percentages-and-dimensions><span class=secno>2.4.4.4 </span>Percentages and lengths</h5>
+  <h5 id=percentages-and-dimensions><span class=secno>2.5.4.4 </span>Percentages and lengths</h5>
 <!--(percentages are not used in valid html anymore)
   <p>A string is a <dfn>valid dimension value</dfn> if it consists of
   a character in the range U+0031 DIGIT ONE (1) to U+0039 DIGIT NINE
@@ -3982,7 +5331,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   </ol></div>
 
 
-  <h5 id=lists-of-integers><span class=secno>2.4.4.5 </span>Lists of integers</h5>
+  <h5 id=lists-of-integers><span class=secno>2.5.4.5 </span>Lists of integers</h5>
 
   <p>A <dfn id=valid-list-of-integers>valid list of integers</dfn> is a number of <a href=#valid-integer title="valid integer">valid integers</a> separated by U+002C
   COMMA characters, with no other characters (e.g. no <a href=#space-character title="space character">space characters</a>). In addition, there
@@ -4253,7 +5602,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
   <div class=impl>
 
-  <h5 id=lists-of-dimensions><span class=secno>2.4.4.6 </span>Lists of dimensions</h5>
+  <h5 id=lists-of-dimensions><span class=secno>2.5.4.6 </span>Lists of dimensions</h5>
 
   <!-- no definition of a type since no conforming feature uses this
   syntax (it's only used in cols="" and rows="" on <frameset> -->
@@ -4357,7 +5706,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   </ol></div>
 
 
-  <h4 id=dates-and-times><span class=secno>2.4.5 </span>Dates and times</h4>
+  <h4 id=dates-and-times><span class=secno>2.5.5 </span>Dates and times</h4>
 
   <p>In the algorithms below, the <dfn id=number-of-days-in-month-month-of-year-year>number of days in month <var title="">month</var> of year <var title="">year</var></dfn> is:
   <em>31</em> if <var title="">month</var> is 1, 3, 5, 7, 8, 10, or
@@ -4384,7 +5733,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   </div>
 
 
-  <h5 id=months><span class=secno>2.4.5.1 </span>Months</h5>
+  <h5 id=months><span class=secno>2.5.5.1 </span>Months</h5>
 
   <p>A <dfn id=concept-month title=concept-month>month</dfn> consists of a specific
   proleptic Gregorian date with no time-zone information and no date
@@ -4456,7 +5805,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   </ol></div>
 
 
-  <h5 id=dates><span class=secno>2.4.5.2 </span>Dates</h5>
+  <h5 id=dates><span class=secno>2.5.5.2 </span>Dates</h5>
 
   <p>A <dfn id=concept-date title=concept-date>date</dfn> consists of a specific
   proleptic Gregorian date with no time-zone information, consisting
@@ -4528,7 +5877,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   </ol></div>
 
 
-  <h5 id=times><span class=secno>2.4.5.3 </span>Times</h5>
+  <h5 id=times><span class=secno>2.5.5.3 </span>Times</h5>
 
   <p>A <dfn id=concept-time title=concept-time>time</dfn> consists of a specific
   time with no time-zone information, consisting of an hour, a minute,
@@ -4645,8 +5994,9 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
      <li><p><a href=#collect-a-sequence-of-characters>Collect a sequence of characters</a> that are
      either characters in the range U+0030 DIGIT ZERO (0) to U+0039
      DIGIT NINE (9) or U+002E FULL STOP characters. If the collected
-     sequence has more than one U+002E FULL STOP characters, or if the
-     last character in the sequence is a U+002E FULL STOP character,
+     sequence is three characters long, or if it is longer than three
+     characters long and the third character is not a U+002E FULL STOP
+     character, or if it has more than one U+002E FULL STOP character,
      then fail. Otherwise, let the collected string be <var title="">second</var> instead of its previous value.</li>
 
     </ol></li>
@@ -4665,7 +6015,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   </ol></div>
 
 
-  <h5 id=local-dates-and-times><span class=secno>2.4.5.4 </span>Local dates and times</h5>
+  <h5 id=local-dates-and-times><span class=secno>2.5.5.4 </span>Local dates and times</h5>
 
   <p>A <dfn id=concept-datetime-local title=concept-datetime-local>local date and time</dfn>
   consists of a specific proleptic Gregorian date, consisting of a
@@ -4717,7 +6067,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
 
 
-  <h5 id=global-dates-and-times><span class=secno>2.4.5.5 </span>Global dates and times</h5>
+  <h5 id=global-dates-and-times><span class=secno>2.5.5.5 </span>Global dates and times</h5>
 
   <p>A <dfn id=concept-datetime title=concept-datetime>global date and time</dfn>
   consists of a specific proleptic Gregorian date, consisting of a
@@ -4743,9 +6093,11 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
      <li>Or:
 
-      <ol><li>Either a U+002B PLUS SIGN character (+) or a U+002D
-       HYPHEN-MINUS character (-), representing the sign of the
-       time-zone offset</li>
+      <ol><li>Either a U+002B PLUS SIGN character (+) or, if the
+       time-zone offset is not zero, a U+002D HYPHEN-MINUS character
+       (-), representing the sign of the time-zone offset</li>
+       <!-- the -00:00 offset is disallowed because RFC3339 gives it a
+       special semantic -->
 
        <li>Two <a href=#concept-datetime-digit title=concept-datetime-digit>digits</a>,
        representing the hours component <var title="">hour</var> of
@@ -4766,6 +6118,15 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   zones is -12:00 to +14:00, and the minutes component of offsets of
   actual time zones is always either 00, 30, or 45.</p>
 
+  <p>Times in dates before the formation of UTC in the mid twentieth
+  century must be expressed and interpreted in terms of UT1
+  (contemporary Earth solar time at the 0&deg; longitude), not UTC
+  (the approximation of UT1 that ticks in SI seconds). Time before the
+  formation of time zones must be expressed and interpeted as UT1
+  times with explicit time zones that approximate the contemporary
+  difference between the appropriate local time and the time observed
+  at the location of Greenwich, London.</p>
+
   <div class=example>
 
    <p>The following are some examples of dates written as <a href=#valid-global-date-and-time-string title="valid global date and time string">valid global date and
@@ -4773,9 +6134,9 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
    <dl><dt>"<code>0037-12-13T00:00Z</code>"</dt>
 
-    <dd>Midnight UTC on the birthday of Nero (the Roman Emperor). See
-    below for further discussion on which date this actually
-    corresponds to.</dd>
+    <dd>Midnight in areas using London time on the birthday of Nero
+    (the Roman Emperor). See below for further discussion on which
+    date this actually corresponds to.</dd>
 
     <dt>"<code>1979-10-14T12:00:00.001-04:00</code>"</dt>
 
@@ -4796,38 +6157,57 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
     zero-padded. The date "37-12-13" would not be a valid date.</li>
 
     <li>To unambiguously identify a moment in time prior to the
-    introduction of the Gregorian calendar, the date has to be first
-    converted to the Gregorian calendar from the calendar in use at
-    the time (e.g. from the Julian calendar). The date of Nero's birth
-    is the 15th of December 37, in the Julian Calendar, which is the
-    13th of December 37 in the proleptic Gregorian Calendar.</li> <!--
-    This might not be true. I can't find a reference that gives his
-    birthday with an explicit statement about the calendar being
-    used. However, it seems unlikely that it would be given in the
-    Gregorian calendar, so I assume sites use the Julian one. -->
+    introduction of the Gregorian calendar (insofar as moments in time
+    before the formation of UTC can be unambiguously identified), the
+    date has to be first converted to the Gregorian calendar from the
+    calendar in use at the time (e.g. from the Julian calendar). The
+    date of Nero's birth is the 15th of December 37, in the Julian
+    Calendar, which is the 13th of December 37 in the proleptic
+    Gregorian Calendar.</li> <!-- This might not be true. I can't find
+    a reference that gives his birthday with an explicit statement
+    about the calendar being used. However, it seems unlikely that it
+    would be given in the Gregorian calendar, so I assume sites use
+    the Julian one. -->
 
     <li>The time and time-zone offset components are not optional.</li>
 
     <li>Dates before the year one can't be represented as a datetime
     in this version of HTML.</li>
 
+    <li>Times of specific events in ancient times are, at best,
+    approximations, since time was not well coordinated or measured
+    until relatively recent decades.</li>
+
     <li>Time-zone offsets differ based on daylight savings time.</li>
 
    </ul></div>
 
-  <div class=impl>
+  <p>A string is a <dfn id=valid-forced-utc-global-date-and-time-string>valid forced-UTC global date and time
+  string</dfn> representing a date, time, and a time-zone offset if it
+  consists of the following components in the given order:</p>
+
+  <ol><li>A <a href=#valid-date-string>valid date string</a> representing the date converted to the UTC time zone</li>
+
+   <li>A U+0054 LATIN CAPITAL LETTER T character (T)</li>
+
+   <li>A <a href=#valid-time-string>valid time string</a> representing the time converted to the UTC time zone and expressed as the shortest possible string for the given time (e.g. omitting the seconds component entirely if the given time is zero seconds past the minute)</li>
+
+   <li>A U+005A LATIN CAPITAL LETTER Z character (Z)</li>
+
+  </ol><div class=impl>
 
   <p>The <dfn id=best-representation-of-the-global-date-and-time-string>best representation of the global date and time
   string</dfn> <var title="">datetime</var> is the <a href=#valid-global-date-and-time-string>valid global
-  date and time string</a> representing <var title="">datetime</var> with the last character of the string not
-  being a U+005A LATIN CAPITAL LETTER Z character (Z), even if the
-  time zone is UTC, and with a U+002D HYPHEN-MINUS character (-)
-  representing the sign of the time-zone offset when the time zone is
-  UTC.</p>
+  date and time string</a> representing <var title="">datetime</var>, with the <a href=#valid-time-string>valid time string</a>
+  component being given in its shortest possible form, with the last
+  character of the string not being a U+005A LATIN CAPITAL LETTER Z
+  character (Z), even if the time zone is UTC, and with a U+002B PLUS
+  SIGN character (+) representing the sign of the time-zone offset
+  when the time zone is UTC.</p>
 
   <p>The rules to <dfn id=parse-a-global-date-and-time-string>parse a global date and time string</dfn> are
   as follows. This will return either a time in UTC, with associated
-  time-zone offset information for round tripping or display purposes,
+  time-zone offset information for round-tripping or display purposes,
   or nothing. If at any point the algorithm says that it "fails", this
   means that it is aborted at that point and returns nothing.</p>
 
@@ -4931,7 +6311,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   </ol></div>
 
 
-  <h5 id=weeks><span class=secno>2.4.5.6 </span>Weeks</h5>
+  <h5 id=weeks><span class=secno>2.5.5.6 </span>Weeks</h5>
 
   <p>A <dfn id=concept-week title=concept-week>week</dfn> consists of a week-year
   number and a week number representing a seven-day period starting on
@@ -5026,7 +6406,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   </ol></div>
 
 
-  <h5 id=vaguer-moments-in-time><span class=secno>2.4.5.7 </span>Vaguer moments in time</h5>
+  <h5 id=vaguer-moments-in-time><span class=secno>2.5.5.7 </span>Vaguer moments in time</h5>
 
   <p>A string is a <dfn id=valid-date-or-time-string>valid date or time string</dfn> if it is also
   one of the following:</p>
@@ -5136,7 +6516,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   </ol></div>
 
 
-  <h4 id=colors><span class=secno>2.4.6 </span>Colors</h4>
+  <h4 id=colors><span class=secno>2.5.6 </span>Colors</h4>
 
   <p>A <dfn id=simple-color>simple color</dfn> consists of three 8-bit numbers in the
   range 0..255, representing the red, green, and blue components of
@@ -5224,15 +6604,26 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
    <li><p>If <var title="">input</var> is the empty string, then
    return an error.</li>
 
+   <li><p><a href=#strip-leading-and-trailing-whitespace>Strip leading and trailing whitespace</a> from <var title="">input</var>.</li>
+
    <li><p>If <var title="">input</var> is an <a href=#ascii-case-insensitive>ASCII
    case-insensitive</a> match for the string "<code title="">transparent</code>", then return an error.</li>
 
-   <li><p>If <var title="">input</var> is an <a href=#ascii-case-insensitive>ASCII
-   case-insensitive</a> match for one of the keywords listed in the
-   <a href=http://www.w3.org/TR/css3-color/#svg-color>SVG color
-   keywords</a> or <a href=http://www.w3.org/TR/css3-color/#css2-system>CSS2 System
-   Colors</a> sections of the CSS3 Color specification, then return
-   the <a href=#simple-color>simple color</a> corresponding to that keyword. <a href=#refsCSSCOLOR>[CSSCOLOR]</a></li>
+   <li>
+
+    <p>If <var title="">input</var> is an <a href=#ascii-case-insensitive>ASCII
+    case-insensitive</a> match for one of the keywords listed in
+    the <a href=http://www.w3.org/TR/css3-color/#svg-color>SVG color
+    keywords</a> <!-- or <a
+    href="http://www.w3.org/TR/css3-color/#css2-system">CSS2 System
+    Colors</a> --> section<!--s--> of the CSS3 Color specification,
+    then return the <a href=#simple-color>simple color</a> corresponding to that
+    keyword. <a href=#refsCSSCOLOR>[CSSCOLOR]</a></p>
+
+    <p class=note><a href=http://www.w3.org/TR/css3-color/#css2-system>CSS2 System
+    Colors</a> are not recognised.</p>
+
+   </li>
 
    <li>
 
@@ -5319,30 +6710,29 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
   </ol></div>
 
-  <hr><p class=note>The <a href=#canvas-context-2d title=canvas-context-2d>2D graphics
+  <hr><!--2DCANVAS--><p class=note>The <a href=#canvas-context-2d title=canvas-context-2d>2D graphics
   context</a> has a separate color syntax that also handles
   opacity.</p>
 
-  
+  <!--2DCANVAS-->
 
 
-  <h4 id=space-separated-tokens><span class=secno>2.4.7 </span>Space-separated tokens</h4>
+  <h4 id=space-separated-tokens><span class=secno>2.5.7 </span>Space-separated tokens</h4>
 
   <p>A <dfn id=set-of-space-separated-tokens>set of space-separated tokens</dfn> is a string containing
-  zero or more words separated by one or more <a href=#space-character title="space
-  character">space characters</a>, where words consist of any
-  string of one or more characters, none of which are <a href=#space-character title="space character">space characters</a>.</p>
+  zero or more words (known as tokens) separated by one or more <a href=#space-character title="space character">space characters</a>, where words consist
+  of any string of one or more characters, none of which are <a href=#space-character title="space character">space characters</a>.</p>
 
   <p>A string containing a <a href=#set-of-space-separated-tokens>set of space-separated tokens</a>
   may have leading or trailing <a href=#space-character title="space character">space
   characters</a>.</p>
 
   <p>An <dfn id=unordered-set-of-unique-space-separated-tokens>unordered set of unique space-separated tokens</dfn> is a
-  <a href=#set-of-space-separated-tokens>set of space-separated tokens</a> where none of the words
+  <a href=#set-of-space-separated-tokens>set of space-separated tokens</a> where none of the tokens
   are duplicated.</p>
 
   <p>An <dfn id=ordered-set-of-unique-space-separated-tokens>ordered set of unique space-separated tokens</dfn> is a
-  <a href=#set-of-space-separated-tokens>set of space-separated tokens</a> where none of the words
+  <a href=#set-of-space-separated-tokens>set of space-separated tokens</a> where none of the tokens
   are duplicated but where the order of the tokens is meaningful.</p>
 
   <p><a href=#set-of-space-separated-tokens title="set of space-separated tokens">Sets of
@@ -5352,6 +6742,10 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   non-conforming. If no such set of allowed values is provided, then
   all values are conforming.</p>
 
+  <p class=note>How tokens in a <a href=#set-of-space-separated-tokens>set of space-separated
+  tokens</a> are to be compared (e.g. case-sensitively or not) is
+  defined on a per-set basis.</p>
+
   <div class=impl>
 
   <p>When a user agent has to <dfn id=split-a-string-on-spaces>split a string on spaces</dfn>, it
@@ -5419,7 +6813,8 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
    characters</a> that are not <a href=#space-character title="space character">space
    characters</a>, and let that be <var title="">s</var>.</li>
 
-   <li><p>If <var title="">s</var> is exactly equal to <var title="">token</var>, then:</p>
+   <li><p>If <var title="">s</var> is exactly equal to <var title="">token</var> (this is a <a href=#case-sensitive>case-sensitive</a>
+   comparison), then:</p>
 
     <ol><li><p><a href=#skip-whitespace>Skip whitespace</a> (in <var title="">input</var>).</li>
 
@@ -5446,7 +6841,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
 
 
-  <h4 id=comma-separated-tokens><span class=secno>2.4.8 </span>Comma-separated tokens</h4>
+  <h4 id=comma-separated-tokens><span class=secno>2.5.8 </span>Comma-separated tokens</h4>
 
   <p>A <dfn id=set-of-comma-separated-tokens>set of comma-separated tokens</dfn> is a string containing
   zero or more tokens each separated from the next by a single U+002C
@@ -5487,7 +6882,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
    U+002C COMMA characters (,). Let <var title="">s</var> be the resulting sequence (which might be the
    empty string).</li>
 
-   <li><p>Remove any leading or trailing sequence of <a href=#space-character title="space character">space characters</a> from <var title="">s</var>.</li>
+   <li><p><a href=#strip-leading-and-trailing-whitespace>Strip leading and trailing whitespace</a> from <var title="">s</var>.</li>
 
    <li><p>Add <var title="">s</var> to <var title="">tokens</var>.</li>
 
@@ -5503,7 +6898,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
 
 
-  <h4 id=syntax-references><span class=secno>2.4.9 </span>References</h4>
+  <h4 id=syntax-references><span class=secno>2.5.9 </span>References</h4>
 
   <p>A <dfn id=valid-hash-name-reference>valid hash-name reference</dfn> to an element of type <var title="">type</var> is a string consisting of a U+0023 NUMBER SIGN
   character (#) followed by a string which exactly matches the value
@@ -5542,7 +6937,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   </ol></div>
 
 
-  <h4 id=mq><span class=secno>2.4.10 </span>Media queries</h4>
+  <h4 id=mq><span class=secno>2.5.10 </span>Media queries</h4>
 
   <p>A string is a <dfn id=valid-media-query>valid media query</dfn> if it matches the
   <code title="">media_query_list</code> production of the Media
@@ -5557,11 +6952,23 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
 
 
-  <h3 id=urls><span class=secno>2.5 </span>URLs</h3>
+  <h3 id=urls><span class=secno>2.6 </span>URLs</h3>
 
-  <h4 id=terminology-0><span class=secno>2.5.1 </span>Terminology</h4>
+  <p>This specification defines the term <a href=#url>URL</a>, and defines
+  various algorithms for dealing with URLs, because for historical
+  reasons the rules defined by the URI and IRI specifications are not
+  a complete description of what HTML user agents need to implement to
+  be compatible with Web content.</p>
+
+  <p class=note>The term "URL" in this specification is used in a
+  manner distinct from the precise technical meaning it is given in
+  RFC 3986. Readers familiar with that RFC will find it easier to read
+  <em>this</em> specification if they pretend the term "URL" as used
+  herein is really called something else altogether. This is a
+  <a href=#willful-violation>willful violation</a> of RFC 3986. <a href=#refsRFC3986>[RFC3986]</a></p>
 
-  <!-- see also: svn diff -r3244:3245 source -->
+
+  <h4 id=terminology-0><span class=secno>2.6.1 </span>Terminology</h4>
 
   <p>A <dfn id=url>URL</dfn> is a string used to identify a resource.</p>
 
@@ -5577,7 +6984,8 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
    component contains no unescaped non-ASCII characters. <a href=#refsRFC3987>[RFC3987]</a></li>
 
    <li><p>The <a href=#url>URL</a> is a valid IRI reference and the <a href="#document's-character-encoding" title="document's character encoding">character encoding</a> of
-   the URL's <code><a href=#document>Document</a></code> is UTF-8 or UTF-16. <a href=#refsRFC3987>[RFC3987]</a></li>
+   the URL's <code><a href=#document>Document</a></code> is UTF-8 or <a href=#a-utf-16-encoding>a UTF-16
+   encoding</a>. <a href=#refsRFC3987>[RFC3987]</a></li>
 
   </ul><p>A string is a <dfn id=valid-non-empty-url>valid non-empty URL</dfn> if it is a
   <a href=#valid-url>valid URL</a> but it is not the empty string.</p>
@@ -5592,24 +7000,154 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   whitespace">stripping leading and trailing whitespace</a> from
   it, it is a <a href=#valid-non-empty-url>valid non-empty URL</a>.</p>
 
+  <p>This specification defines the URL
+  <dfn id=about:legacy-compat><code>about:legacy-compat</code></dfn> as a reserved, though
+  unresolvable, <code title="">about:</code> URI, for use in <a href=#syntax-doctype title=syntax-doctype>DOCTYPE</a>s in <a href=#html-documents>HTML
+  documents</a> when needed for compatibility with XML tools. <a href=#refsABOUT>[ABOUT]</a></p>
+
+  <p>This specification defines the URL
+  <dfn id=about:srcdoc><code>about:srcdoc</code></dfn> as a reserved, though
+  unresolvable, <code title="">about:</code> URI, that is used as
+  <a href="#the-document's-address">the document's address</a> of <a href=#an-iframe-srcdoc-document title="an iframe srcdoc
+  document"><code>iframe</code> <code title=attr-iframe-srcdoc>srcdoc</code> documents</a>. <a href=#refsABOUT>[ABOUT]</a></p>
+
+
   <div class=impl>
 
+  <h4 id=parsing-urls><span class=secno>2.6.2 </span>Parsing URLs</h4>
+
   <p>To <dfn id=parse-a-url>parse a URL</dfn> <var title="">url</var> into its
-  component parts, the user agent must use the <span class=XXX>parse
-  an address</span> algorithm defined by the IRI specification. <a href=#refsRFC3987>[RFC3987]</a></p>
-
-  <p>Parsing a URL can fail. If it does not, then it results in the
-  following components, again as defined by the IRI specification:</p>
-
-  <ul class=brief><li><dfn id=url-scheme title=url-scheme>&lt;scheme&gt;</dfn></li>
-   <li><dfn id=url-host title=url-host>&lt;host&gt;</dfn></li>
-   <li><dfn id=url-port title=url-port>&lt;port&gt;</dfn></li>
-   <li><dfn id=url-hostport title=url-hostport>&lt;hostport&gt;</dfn></li>
-   <li><dfn id=url-path title=url-path>&lt;path&gt;</dfn></li>
-   <li><dfn id=url-query title=url-query>&lt;query&gt;</dfn></li>
-   <li><dfn id=url-fragment title=url-fragment>&lt;fragment&gt;</dfn></li>
-   <li><dfn id=url-host-specific title=url-host-specific>&lt;host-specific&gt;</dfn></li>
-  </ul><hr><p>To <dfn id=resolve-a-url>resolve a URL</dfn> to an <a href=#absolute-url>absolute URL</a>
+  component parts, the user agent must use the following steps:</p>
+
+  <ol><li><p><a href=#strip-leading-and-trailing-whitespace>Strip leading and trailing whitespace</a> from <var title="">url</var>.</li>
+
+   <li>
+
+    <p>Parse <var title="">url</var> in the manner defined by RFC
+    3986, with the following exceptions:</p>
+
+    <ul><li>Add all characters with code points less than or equal to
+     U+0020 or greater than or equal to U+007F to the
+     &lt;unreserved&gt; production.</li>
+
+     <li>Add the characters U+0022, U+003C, U+003E, U+005B .. U+005E,
+     U+0060, and U+007B .. U+007D to the &lt;unreserved&gt;
+     production.
+      <!--
+       0022 QUOTATION MARK
+       003C LESS-THAN SIGN
+       003E GREATER-THAN SIGN
+       005B LEFT SQUARE BRACKET
+       005C REVERSE SOLIDUS
+       005D RIGHT SQUARE BRACKET
+       005E CIRCUMFLEX ACCENT
+       0060 GRAVE ACCENT
+       007B LEFT CURLY BRACKET
+       007C VERTICAL LINE
+       007D RIGHT CURLY BRACKET
+      -->
+     </li>
+
+     <li>Add a single U+0025 PERCENT SIGN character as a second
+     alternative way of matching the &lt;pct-encoded&gt; production,
+     except when the &lt;pct-encoded&gt; is used in the
+     &lt;reg-name&gt; production.</li>
+
+     <li>Add the U+0023 NUMBER SIGN character to the characters
+     allowed in the &lt;fragment&gt; production.</li>
+
+     <!-- some browsers also have other differences, e.g. Mozilla
+     seems to treat ";" as if it was not in sub-delims, if the scheem
+     is "ftp". -->
+
+    </ul></li>
+
+   <li>
+
+    <p>If <var title="">url</var> doesn't match the
+    &lt;URI-reference&gt; production, even after the above changes are
+    made to the ABNF definitions, then parsing the URL fails with an
+    error. <a href=#refsRFC3986>[RFC3986]</a></p>
+
+    <p>Otherwise, parsing <var title="">url</var> was successful; the
+    components of the URL are substrings of <var title="">url</var>
+    defined as follows:</p>
+
+    <dl><dt><dfn id=url-scheme title=url-scheme>&lt;scheme&gt;</dfn></dt>
+
+     <dd><p>The substring matched by the &lt;scheme&gt; production, if any.</dd>
+
+
+     <dt><dfn id=url-host title=url-host>&lt;host&gt;</dfn></dt>
+
+     <dd><p>The substring matched by the &lt;host&gt; production, if any.</dd>
+
+
+     <dt><dfn id=url-port title=url-port>&lt;port&gt;</dfn></dt>
+
+     <dd><p>The substring matched by the &lt;port&gt; production, if any.</dd>
+
+
+     <dt><dfn id=url-hostport title=url-hostport>&lt;hostport&gt;</dfn></dt>
+
+     <dd><p>If there is a &lt;scheme&gt; component and a &lt;port&gt;
+     component and the port given by the &lt;port&gt; component is
+     different than the default port defined for the protocol given by
+     the &lt;scheme&gt; component, then &lt;hostport&gt; is the
+     substring that starts with the substring matched by the
+     &lt;host&gt; production and ends with the substring matched by the
+     &lt;port&gt; production, and includes the colon in between the
+     two. Otherwise, it is the same as the &lt;host&gt; component.</p>
+
+
+     <dt><dfn id=url-path title=url-path>&lt;path&gt;</dfn></dt>
+
+     <dd>
+
+      <p>The substring matched by one of the following productions, if
+      one of them was matched:</p>
+
+      <ul class=brief><li>&lt;path-abempty&gt;</li>
+       <li>&lt;path-absolute&gt;</li>
+       <li>&lt;path-noscheme&gt;</li>
+       <li>&lt;path-rootless&gt;</li>
+       <li>&lt;path-empty&gt;</li>
+      </ul></dd>
+
+
+     <dt><dfn id=url-query title=url-query>&lt;query&gt;</dfn></dt>
+
+     <dd><p>The substring matched by the &lt;query&gt; production, if any.</dd>
+
+
+     <dt><dfn id=url-fragment title=url-fragment>&lt;fragment&gt;</dfn></dt>
+
+     <dd><p>The substring matched by the &lt;fragment&gt; production, if any.</dd>
+
+
+     <dt><dfn id=url-host-specific title=url-host-specific>&lt;host-specific&gt;</dfn></dt>
+
+     <dd><p>The substring that <em>follows</em> the substring matched
+     by the &lt;authority&gt; production, or the whole string if the
+     &lt;authority&gt; production wasn't matched.</dd>
+
+    </dl></li>
+
+  </ol><p class=note>These parsing rules are a <a href=#willful-violation>willful
+  violation</a> of RFC 3986 and RFC 3987 (which do not define error
+  handling), motivated by a desire to handle legacy content. <a href=#refsRFC3986>[RFC3986]</a> <a href=#refsRFC3987>[RFC3987]</a></p>
+
+  </div>
+
+
+  <h4 id=resolving-urls><span class=secno>2.6.3 </span>Resolving URLs</h4>
+
+  <p>Resolving a URL is the process of taking a relative URL and
+  obtaining the absolute URL that it implies.</p>
+
+  <div class=impl>
+
+  <p>To <dfn id=resolve-a-url>resolve a URL</dfn> to an <a href=#absolute-url>absolute URL</a>
   relative to either another <a href=#absolute-url>absolute URL</a> or an element,
   the user agent must use the following steps. Resolving a URL can
   result in an error, in which case the URL is not resolvable.</p>
@@ -5639,8 +7177,8 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
     </dl></li>
 
-   <li><p>If <var title="">encoding</var> is a UTF-16 encoding, then
-   change the value of <var title="">encoding</var> to UTF-8.</li>
+   <li><p>If <var title="">encoding</var> is <a href=#a-utf-16-encoding>a UTF-16
+   encoding</a>, then change the value of <var title="">encoding</var> to UTF-8.</li>
 
    <li>
 
@@ -5689,15 +7227,17 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
      </li>
 
-     <li><p>If there is no <code><a href=#the-base-element>base</a></code> element that is both a
-     child of <a href=#the-head-element>the <code>head</code> element</a> and has an
-     <code title=attr-base-href><a href=#attr-base-href>href</a></code> attribute, then the
-     <a href=#document-base-url>document base URL</a> is <var title="">fallback base
-     url</var>.</li>
+     <li><p>If the <code><a href=#document>Document</a></code> is <a href=#an-iframe-srcdoc-document>an
+     <code>iframe</code> <code title=attr-iframe-srcdoc>srcdoc</code> document</a>, then
+     let <var title="">fallback base url</var> be the <a href=#document-base-url>document
+     base URL</a> of the <code><a href=#document>Document</a></code>'s <a href=#browsing-context>browsing
+     context</a>'s <a href=#browsing-context-container>browsing context container</a>'s
+     <code><a href=#document>Document</a></code> instead.</li>
 
-     <li><p>Otherwise, let <var title="">url</var> be the value of the
-     <code title=attr-base-href><a href=#attr-base-href>href</a></code> attribute of the first
-     such element.</li>
+     <li><p>If there is no <code><a href=#the-base-element>base</a></code> element that has an <code title=attr-base-href><a href=#attr-base-href>href</a></code> attribute, then the
+     <a href=#document-base-url>document base URL</a> is <var title="">fallback base
+     url</var>; abort these steps. Otherwise, let <var title="">url</var> be the value of the <code title=attr-base-href><a href=#attr-base-href>href</a></code> attribute of the first such
+     element.</li>
 
      <li><p><a href=#resolve-a-url title="resolve a URL">Resolve</a> <var title="">url</var> relative to <var title="">fallback base
      url</var> (thus, the <code><a href=#the-base-element>base</a></code> <code title=attr-base-href><a href=#attr-base-href>href</a></code> attribute isn't affected by
@@ -5708,11 +7248,115 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
     </ol></li>
 
-   <li><p>Return the result of applying the <span class=XXX>resolve
-   an address</span> algorithm defined by the IRI specification to
-   resolve <var title="">url</var> relative to <var title="">base</var> using encoding <var title="">encoding</var>. <a href=#refsRFC3987>[RFC3987]</a></li>
+   <li><p><a href=#parse-a-url title="parse a URL">Parse</a> <var title="">url</var> into its component parts.</li>
 
-  </ol></div>
+   <li>
+
+    <p>If parsing <var title="">url</var> resulted in a <a href=#url-host title=url-host>&lt;host&gt;</a> component, then replace the
+    matching substring of <var title="">url</var> with the string that
+    results from expanding any sequences of percent-encoded octets in
+    that component that are valid UTF-8 sequences into Unicode
+    characters as defined by UTF-8.</p>
+
+    <p>If any percent-encoded octets in that component are not valid
+    UTF-8 sequences (e.g. sequences of percent-encoded octets that
+    expand to surrogate code points), then return an error and abort
+    these steps.</p>
+
+    <p>Apply the IDNA ToASCII algorithm to the matching substring,
+    with both the AllowUnassigned and UseSTD3ASCIIRules flags
+    set. Replace the matching substring with the result of the ToASCII
+    algorithm.</p>
+
+    <p>If ToASCII fails to convert one of the components of the
+    string, e.g. because it is too long or because it contains invalid
+    characters, then return an error and abort these steps. <a href=#refsRFC3490>[RFC3490]</a></p>
+
+   </li>
+
+   <li>
+
+    <p>If parsing <var title="">url</var> resulted in a <a href=#url-path title=url-path>&lt;path&gt;</a> component, then replace the
+    matching substring of <var title="">url</var> with the string that
+    results from applying the following steps to each character other
+    than U+0025 PERCENT SIGN (%) that doesn't match the original
+    &lt;path&gt; production defined in RFC 3986:</p>
+
+    <ol><li>Encode the character into a sequence of octets as defined by
+     UTF-8.</li>
+
+     <li>Replace the character with the percent-encoded form of those
+     octets. <a href=#refsRFC3986>[RFC3986]</a></li>
+
+    </ol><div class=example>
+
+     <p>For instance if <var title="">url</var> was "<code title="">//example.com/a^b&#9786;c%FFd%z/?e</code>", then the
+     <a href=#url-path title=url-path>&lt;path&gt;</a> component's substring
+     would be "<code title="">/a^b&#9786;c%FFd%z/</code>" and the two
+     characters that would have to be escaped would be "<code title="">^</code>" and "<code title="">&#9786;</code>". The
+     result after this step was applied would therefore be that <var title="">url</var> now had the value "<code title="">//example.com/a%5Eb%E2%98%BAc%FFd%z/?e</code>".</p>
+
+    </div>
+
+   </li>
+
+   <li>
+
+    <p>If parsing <var title="">url</var> resulted in a <a href=#url-query title=url-query>&lt;query&gt;</a> component, then replace the
+    matching substring of <var title="">url</var> with the string that
+    results from applying the following steps to each character other
+    than U+0025 PERCENT SIGN (%) that doesn't match the original
+    &lt;query&gt; production defined in RFC 3986:</p>
+
+    <ol><li>If the character in question cannot be expressed in the
+     encoding <var title="">encoding</var>, then replace it with a
+     single 0x3F octet (an ASCII question mark) and skip the remaining
+     substeps for this character.</li>
+
+     <li>Encode the character into a sequence of octets as defined by
+     the encoding <var title="">encoding</var>.</li>
+
+     <li>Replace the character with the percent-encoded form of those
+     octets. <a href=#refsRFC3986>[RFC3986]</a></li>
+
+    </ol></li>
+
+   <li><p>Apply the algorithm described in RFC 3986 section 5.2
+   Relative Resolution, using <var title="">url</var> as the
+   potentially relative URI reference (<var title="">R</var>), and
+   <var title="">base</var> as the base URI (<var title="">Base</var>). <a href=#refsRFC3986>[RFC3986]</a></li>
+
+   <li>
+
+    <p>Apply any relevant conformance criteria of RFC 3986 and RFC
+    3987, returning an error and aborting these steps if
+    appropriate. <a href=#refsRFC3986>[RFC3986]</a> <a href=#refsRFC3987>[RFC3987]</a></p>
+
+    <p class=example>For instance, if an absolute URI that would be
+    returned by the above algorithm violates the restrictions specific
+    to its scheme, e.g. a <code title="">data:</code> URI using the
+    "<code title="">//</code>" server-based naming authority syntax,
+    then user agents are to treat this as an error instead.<!-- RFC
+    3986, 3.1 Scheme --></p>
+
+   </li>
+
+   <li><p>Let <var title="">result</var> be the target URI (<var title="">T</var>) returned by the Relative Resolution
+   algorithm.</li>
+
+   <li><p>If <var title="">result</var> uses a scheme with a
+   server-based naming authority, replace all U+005C REVERSE SOLIDUS
+   (\) characters in <var title="">result</var> with U+002F SOLIDUS
+   (/) characters.</li>
+
+   <li><p>Return <var title="">result</var>.</li>
+
+  </ol><p class=note>Some of the steps in these rules, for example the
+  processing of U+005C REVERSE SOLIDUS (\) characters, are a
+  <a href=#willful-violation>willful violation</a> of RFC 3986 and RFC 3987, motivated
+  by a desire to handle legacy content. <a href=#refsRFC3986>[RFC3986]</a> <a href=#refsRFC3987>[RFC3987]</a></p>
+
+  </div>
 
   <p>A <a href=#url>URL</a> is an <dfn id=absolute-url>absolute URL</dfn> if <a href=#resolve-a-url title="resolve a url">resolving</a> it results in the same output
   regardless of what it is resolved relative to, and that output is
@@ -5728,28 +7372,74 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   immediately after the <a href=#url-scheme title=url-scheme>&lt;scheme&gt;</a>
   component and they are both U+002F SOLIDUS characters (//).</p>
 
-  <hr><p>This specification defines the URL
-  <dfn id=about:legacy-compat><code>about:legacy-compat</code></dfn> as a reserved, though
-  unresolvable, <code title="">about:</code> URI, for use in <a href=#syntax-doctype title=syntax-doctype>DOCTYPE</a>s in <a href=#html-documents>HTML
-  documents</a> when needed for compatibility with XML tools. <a href=#refsABOUT>[ABOUT]</a></p>
 
-  <p>This specification defines the URL
-  <dfn id=about:srcdoc><code>about:srcdoc</code></dfn> as a reserved, though
-  unresolvable, <code title="">about:</code> URI, that is used as
-  <a href="#the-document's-address">the document's address</a> of <a href=#an-iframe-srcdoc-document title="an iframe srcdoc
-  document"><code>iframe</code> <code title=attr-iframe-srcdoc>srcdoc</code> documents</a>. <a href=#refsABOUT>[ABOUT]</a></p>
 
-  <p class=note>The term "URL" in this specification is used in a
-  manner distinct from the precise technical meaning it is given in
-  RFC 3986. Readers familiar with that RFC will find it easier to read
-  <em>this</em> specification if they pretend the term "URL" as used
-  herein is really called something else altogether. This is a
-  <a href=#willful-violation>willful violation</a> of RFC 3986. <a href=#refsRFC3986>[RFC3986]</a></p>
+  <div class=impl>
+
+  <h4 id=url-manipulation-and-creation><span class=secno>2.6.4 </span>URL manipulation and creation</h4>
+
+  <p>To <dfn id=fragment-escaped title=fragment-escaped>fragment-escape</dfn> a string
+  <var title="">input</var>, a user agent must run the following
+  steps:</p>
+
+  <ol><li><p>Let <var title="">input</var> be the string to be
+   escaped.</li>
+
+   <li><p>Let <var title="">position</var> point at the first
+   character of <var title="">input</var>.</li>
+
+   <li><p>Let <var title="">output</var> be an empty string.</li>
+
+   <li><p><i>Loop</i>: 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 in <var title="">input</var> pointed to by
+    <var title="">position</var> is in the range U+0000 to U+0020 or
+    is one of the following characters:</p>
+
+    <ul class=brief><li>U+0022 QUOTATION MARK character (")
+     <li>U+0023 NUMBER SIGN character (#)
+     <li>U+0025 PERCENT SIGN character (%)
+     <li>U+003C LESS-THAN SIGN character (&lt;)
+     <li>U+003E GREATER-THAN SIGN character (&gt;)
+     <li>U+005B LEFT SQUARE BRACKET character ([)
+     <li>U+005C REVERSE SOLIDUS character (\)
+     <li>U+005D RIGHT SQUARE BRACKET character (])
+     <li>U+005E CIRCUMFLEX ACCENT character (^)
+     <li>U+007B LEFT CURLY BRACKET character ({)
+     <li>U+007C VERTICAL LINE character (|)
+     <li>U+007D RIGHT CURLY BRACKET character (})
+    </ul><p>...then append the percent-encoded form of the character to
+    <var title="">output</var>. <a href=#refsRFC3986>[RFC3986]</a></p> <!-- this is the same
+    phrasing that's used elsewhere in the spec, but we really should
+    define 'percent-encoded' or at least ensure we consistently say
+    whether it's upper-case or lower-case. -->
+
+    <p>Otherwise, append the character itself to <var title="">output</var>.</p>
+
+    <p class=note>This escapes any ASCII characters that are not
+    valid in the URI &lt;fragment&gt; production without being
+    escaped.</p>
+
+   </li>
+
+   <li><p>Advance <var title="">position</var> to the next character
+   in <var title="">input</var>.</li>
+
+   <li><p>Return to the step labeled <i>loop</i>.</li>
+
+   <li><p><i>End</i>: Return <var title="">output</var>.</li>
+
+  </ol></div>
+
 
 
   <div class=impl>
 
-  <h4 id=dynamic-changes-to-base-urls><span class=secno>2.5.2 </span>Dynamic changes to base URLs</h4>
+  <h4 id=dynamic-changes-to-base-urls><span class=secno>2.6.5 </span>Dynamic changes to base URLs</h4>
 
   <p>When an <code title=attr-xml-base><a href=#the-xml:base-attribute-(xml-only)>xml:base</a></code> attribute
   changes, the attribute's element, and all descendant elements, are
@@ -5759,16 +7449,11 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   elements in that document are <a href=#affected-by-a-base-url-change>affected by a base URL
   change</a>.</p>
 
-  <p>When an element is moved from one document to another, if the two
-  documents have different <a href=#document-base-url title="document base URL">base
-  URLs</a>, then that element and all its descendants are
-  <a href=#affected-by-a-base-url-change>affected by a base URL change</a>.</p>
-
-  <p>When an element is <dfn id=affected-by-a-base-url-change>affected by a base URL change</dfn>, it
-  must act as described in the following list:</p>
+  <p>The following are <a href=#base-url-change-steps>base URL change steps</a>, which run
+  when an element is <a href=#affected-by-a-base-url-change>affected by a base URL change</a> (as
+  defined by the DOM Core specification):</p>
 
-  <dl class=switch><dt>If the element is a <a href=#hyperlink title=hyperlink>hyperlink
-   element</a></dt>
+  <dl class=switch><dt>If the element creates a <a href=#hyperlink>hyperlink</a></dt>
 
    <dd>
 
@@ -5811,11 +7496,12 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
     <p>The element is not directly affected.</p>
 
-    <p class=example>Changing the base URL doesn't affect the image
-    displayed by <code><a href=#the-img-element>img</a></code> elements, although subsequent
-    accesses of the <code title=dom-img-src><a href=#dom-img-src>src</a></code> IDL attribute
-    from script will return a new <a href=#absolute-url>absolute URL</a> that might
-    no longer correspond to the image being shown.</p>
+    <p class=example>For instance, changing the base URL doesn't
+    affect the image displayed by <code><a href=#the-img-element>img</a></code> elements, although
+    subsequent accesses of the <code title=dom-img-src><a href=#dom-img-src>src</a></code>
+    IDL attribute from script will return a new <a href=#absolute-url>absolute
+    URL</a> that might no longer correspond to the image being
+    shown.</p>
 
    </dd>
 
@@ -5823,10 +7509,10 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
 
 
-  <h4 id=interfaces-for-url-manipulation><span class=secno>2.5.3 </span>Interfaces for URL manipulation</h4>
+  <h4 id=interfaces-for-url-manipulation><span class=secno>2.6.6 </span>Interfaces for URL manipulation</h4>
 
   <p>An interface that has a complement of <dfn id=url-decomposition-idl-attributes>URL decomposition IDL
-  attributes</dfn> will have seven attributes with the following
+  attributes</dfn> has seven attributes with the following
   definitions:</p>
 
 <pre class="idl extract">           attribute DOMString <a href=#dom-uda-protocol title=dom-uda-protocol>protocol</a>;
@@ -5884,18 +7570,18 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
   </dl><div class=impl>
 
-  <hr><p>The attributes defined to be URL decomposition IDL attributes must
-  act as described for the attributes with the same corresponding
-  names in this section.</p>
+  <hr><p>The attributes defined to be <a href=#url-decomposition-idl-attributes>URL decomposition IDL
+  attributes</a> must act as described for the attributes with the
+  same corresponding names in this section.</p>
 
-  <p>In addition, an interface with a complement of URL decomposition IDL
-  attributes will define an <dfn id=concept-uda-input title=concept-uda-input>input</dfn>, which is a <a href=#url>URL</a>
+  <p>In addition, an interface with a complement of <a href=#url-decomposition-idl-attributes>URL
+  decomposition IDL attributes</a> defines an <dfn id=concept-uda-input title=concept-uda-input>input</dfn>, which is a <a href=#url>URL</a>
   that the attributes act on, and a <dfn id=concept-uda-setter title=concept-uda-setter>common setter action</dfn>, which is a
   set of steps invoked when any of the attributes' setters are
   invoked.</p>
 
-  <p>The seven URL decomposition IDL attributes have similar
-  requirements.</p>
+  <p>The seven <a href=#url-decomposition-idl-attributes>URL decomposition IDL attributes</a> have
+  similar requirements.</p>
 
   <p>On getting, if the <a href=#concept-uda-input title=concept-uda-input>input</a>
   is an <a href=#absolute-url>absolute URL</a> that fulfills the condition given in
@@ -5933,7 +7619,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   using the <a href=#parse-a-url title="parse a URL">URL parsing rules</a> defined
   in this specification.</p>
 
-  <table><thead><tr><th>Attribute
+  <table id=table-uda><thead><tr><th>Attribute
      <th>Component
      <th>Getter Condition
      <th>Prefix
@@ -5970,7 +7656,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
          Remove any leading U+0030 DIGIT ZERO characters (0) in the new value.
          If the resulting string is empty, set it to a single U+0030 DIGIT ZERO character (0).
      <td><a href=#concept-uda-input title=concept-uda-input>input</a> is an <a href=#authority-based-url>authority-based URL</a>,
-         and the new value, when interpretted as a base-ten integer, is less than or equal to 65535
+         and the new value, when interpreted as a base-ten integer, is less than or equal to 65535
     <tr><td><dfn id=dom-uda-pathname title=dom-uda-pathname><code>pathname</code></dfn>
      <td><a href=#url-path title=url-path>&lt;path&gt;</a>
      <td><a href=#concept-uda-input title=concept-uda-input>input</a> is a <a href=#hierarchical-url>hierarchical URL</a>
@@ -6003,7 +7689,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
    <p>The table below demonstrates how the getter <span class=impl>condition</span> for <code title=dom-uda-search><a href=#dom-uda-search>search</a></code> results in different results
    depending on the exact original syntax of the URL:</p>
 
-   <table><thead><tr><th> Input URL
+   <table id=table-uda-examples><thead><tr><th> Input URL
       <th> <code title=dom-uda-search><a href=#dom-uda-search>search</a></code> value
       <th> Explanation
     <tbody><tr><td> <code title="">http://example.com/</code>
@@ -6021,30 +7707,69 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
       <td> The (empty) <a href=#url-fragment title=url-fragment>&lt;fragment&gt;</a> component is not part of the <a href=#url-query title=url-query>&lt;query&gt;</a> component.
    </table></div>
 
+  <div class=example>
+
+   <p>The following table is similar; it provides a list of what each
+   of the <a href=#url-decomposition-idl-attributes>URL decomposition IDL attributes</a> returns for a
+   given <var title="">input</var> URL.</p>
+
+   <table><thead><tr><th>Input
+      <th><code title=dom-uda-protocol><a href=#dom-uda-protocol>protocol</a></code>
+      <th><code title=dom-uda-host><a href=#dom-uda-host>host</a></code>
+      <th><code title=dom-uda-hostname><a href=#dom-uda-hostname>hostname</a></code>
+      <th><code title=dom-uda-port><a href=#dom-uda-port>port</a></code>
+      <th><code title=dom-uda-pathname><a href=#dom-uda-pathname>pathname</a></code>
+      <th><code title=dom-uda-search><a href=#dom-uda-search>search</a></code>
+      <th><code title=dom-uda-hash><a href=#dom-uda-hash>hash</a></code>
+    <tbody><tr><td><code title="">http://example.com/carrot#question%3f</code>
+      <td><code title="">http:</code>
+      <td><code title="">example.com</code>
+      <td><code title="">example.com</code>
+      <td>(empty string)
+      <td><code title="">/carrot</code>
+      <td>(empty string)
+      <td><code title="">#question%3f</code>
+     <tr><td><code title="">https://www.example.com:4443?</code>
+      <td><code title="">https:</code>
+      <td><code title="">www.example.com:4443</code>
+      <td><code title="">www.example.com</code>
+      <td><code title="">4443</code>
+      <td><code title="">/</code>
+      <td><code title="">?</code>
+      <td>(empty string)
+   </table></div>
+
 
   <div class=impl>
 
-  <h3 id=fetching-resources><span class=secno>2.6 </span>Fetching resources</h3>
+  <h3 id=fetching-resources><span class=secno>2.7 </span>Fetching resources</h3>
 
   <p>When a user agent is to <dfn id=fetch>fetch</dfn> a resource or
   <a href=#url>URL</a>, optionally from an origin <i title="">origin</i>,
-  and optionally with a <i>synchronous flag</i> and/or a <i>manual
-  redirect flag</i>, the following steps must be run. (When a
-  <em>URL</em> is to be fetched, the URL identifies a resource to be
-  obtained.)</p>
+  and optionally with a <i>synchronous flag</i>, a <i>manual redirect
+  flag</i>, a <i>force same-origin flag</i>, and/or a <i>block cookies
+  flag</i>, the following steps must be run. (When a <em>URL</em> is
+  to be fetched, the URL identifies a resource to be obtained.)</p>
 
   <!-- if invoked with the synchronous flag, make sure to release the
   storage mutex first -->
 
-  <!-- synchronous flag is only used by sync-XHR, for legacy reasons;
-  don't use it in new features! -->
+  <!-- synchronous flag is only to be used in algorithms that are
+  themselves asynchronous! Only sync-XHR is allowed to make the
+  mistake of screwing that up. :-P -->
+
+  <!-- the force same-origin flag is for use in places where we'll be
+  moving to CORS one day; when used, the algorithm must be invoked
+  with a URL (not something else, like a POST request) whose origin is
+  the same as the /origin/, which must also be present, and the
+  algorithm must not be invoked with the manual redirect flag. -->
+
+  <!-- "block cookies" is currently only used by XHR -->
 
   <ol><li>
 
-    <p>Generate the <i>address of the resource from which Request-URIs
-    are obtained</i> as required by HTTP for the <code title=http-referer>Referer</code> (sic) header from <a href="#the-document's-current-address">the
-    document's current address</a> of the appropriate
-    <code><a href=#document>Document</a></code> as given by the following list. <a href=#refsHTTP>[HTTP]</a></p>
+    <p>Let <var title="">document</var> be the appropriate
+    <code><a href=#document>Document</a></code> as given by the following list:</p>
 
     <dl class=switch><dt>When <a href=#navigate title=navigate>navigating</a></dt>
 
@@ -6060,7 +7785,26 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
      <dd>The <a href=#entry-script>entry script</a>'s <a href="#script's-document" title="script's
      document">document</a>.</dd>
 
-    </dl><p>Remove any <a href=#url-fragment title=url-fragment>&lt;fragment&gt;</a>
+    </dl></li>
+
+   <li>
+
+    <p>While <var title="">document</var> is <a href=#an-iframe-srcdoc-document>an
+    <code>iframe</code> <code title=attr-iframe-srcdoc>srcdoc</code>
+    document</a>, let <var title="">document</var> be <var title="">document</var>'s <a href=#browsing-context>browsing context</a>'s
+    <a href=#browsing-context-container>browsing context container</a>'s <code><a href=#document>Document</a></code>
+    instead.</p>
+
+   </li>
+
+   <li>
+
+    <p>Generate the <i>address of the resource from which Request-URIs
+    are obtained</i> as required by HTTP for the <code title=http-referer>Referer</code> (sic) header from <a href="#the-document's-current-address">the
+    document's current address</a> of <var title="">document</var>.
+    <a href=#refsHTTP>[HTTP]</a></p>
+
+    <p>Remove any <a href=#url-fragment title=url-fragment>&lt;fragment&gt;</a>
     component from the generated <i>address of the resource from which
     Request-URIs are obtained</i>.</p> <!-- RFC2616 says "The URI MUST
     NOT include a fragment." (section 14.36) -->
@@ -6089,6 +7833,18 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
     download instead of initiating a new one, then use the results of
     the existing download instead of starting a new one.</p>
 
+    <p>Otherwise, if the resource is identified by an <a href=#absolute-url>absolute
+    URL</a> with a scheme that does not define a mechanism to
+    obtain the resource (e.g. it is a <code title="">mailto:</code>
+    URL) or that the user agent does not support, then act as if the
+    resource was an HTTP 204 No Content response with no other
+    metadata.</p>
+
+    <p>Otherwise, if the resource is identified by the
+    <a href=#url>URL</a> <dfn id=about:blank><code>about:blank</code></dfn>, then the
+    resource is immediately available and consists of the empty
+    string, with no metadata.</p>
+
     <p>Otherwise, at a time convenient to the user and the user agent,
     download (or otherwise obtain) the resource, applying the
     semantics of the relevant specifications (e.g. performing an HTTP
@@ -6105,17 +7861,13 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
     explicitly initiated from an <i title="">origin</i>, then <i title="">the origin that initiated the HTTP request</i> is <i title="">origin</i>. Otherwise, this is <i title="">a request from
     a "privacy-sensitive" context</i>. <a href=#refsORIGIN>[ORIGIN]</a></p>
 
-    <p>If the resource is identified by the <a href=#url>URL</a>
-    <dfn id=about:blank><code>about:blank</code></dfn>, then the resource is
-    immediately available and consists of the empty string, with no
-    metadata.</p>
-
    </li>
 
    <li>
 
-    <p>If there are cookies to be set, then the user agent must run
-    the following substeps:</p>
+    <p>If the algorithm was not invoked with the <i>block cookies
+    flag</i>, and there are cookies to be set, then the user agent
+    must run the following substeps:</p>
 
     <ol><li><p>Wait until ownership of the <a href=#storage-mutex>storage mutex</a> can
      be taken by this instance of the <a href=#fetch title=fetch>fetching</a> algorithm.</li>
@@ -6134,12 +7886,28 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
     <p>If the fetched resource is an HTTP redirect <a href=#concept-http-equivalent-codes title=concept-http-equivalent-codes>or equivalent</a>,
     then:</p>
 
-    <dl class=switch><dt>If the <i>manual redirect flag</i> is set</dt>
+    <dl class=switch><dt>If the <i>force same-origin flag</i> is set and the
+     <a href=#url>URL</a> of the target of the redirect does not have the
+     <a href=#same-origin>same origin</a> as the <a href=#url>URL</a> for which the
+     <a href=#fetch>fetch</a> algorithm was invoked</dt>
+
+     <dd>
+
+      <p>Abort these steps and return failure from this algorithm, as
+      if the remote host could not be contacted.</p>
+
+     </dd>
+
+     <dt>If the <i>manual redirect flag</i> is set</dt>
 
      <dd>
 
       <p>Continue, using the fetched resource (the redirect) as the
-      result of the algorithm.</p>
+      result of the algorithm. If the calling algorithm subsequently
+      requires the user agent to <dfn id=transparently-follow-the-redirect>transparently follow the
+      redirect</dfn>, then the user agent must resume this algorithm
+      from the <i>main step</i>, but using the target of the redirect
+      as the resource to fetch, rather than the original resource.</p>
 
      </dd>
 
@@ -6208,7 +7976,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   applicable.</p>
 
 
-  <h4 id=concept-http-equivalent><span class=secno>2.6.1 </span>Protocol concepts</h4>
+  <h4 id=concept-http-equivalent><span class=secno>2.7.1 </span>Protocol concepts</h4>
 
   <p>User agents can implement a variety of transfer protocols, but
   this specification mostly defines behavior in terms of HTTP. <a href=#refsHTTP>[HTTP]</a></p>
@@ -6231,7 +7999,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   protocol.</p>
 
 
-  <h4 id=encrypted-http-and-related-security-concerns><span class=secno>2.6.2 </span>Encrypted HTTP and related security concerns</h4>
+  <h4 id=encrypted-http-and-related-security-concerns><span class=secno>2.7.2 </span>Encrypted HTTP and related security concerns</h4>
 
   <p>Anything in this specification that refers to HTTP also applies
   to HTTP-over-TLS, as represented by <a href=#url title=url>URLs</a>
@@ -6277,47 +8045,54 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   </div>
 
 
-  <h4 id=content-type-sniffing><span class=secno>2.6.3 </span>Determining the type of a resource</h4>
+  <h4 id=content-type-sniffing><span class=secno>2.7.3 </span>Determining the type of a resource</h4>
 
   <p>The <dfn id=content-type title=Content-Type>Content-Type metadata</dfn> of a
   resource must be obtained and interpreted in a manner consistent
-  with the requirements of the Content-Type Processing Model
+  with the requirements of the Media Type Sniffing
   specification. <a href=#refsMIMESNIFF>[MIMESNIFF]</a></p>
 
   <p>The <dfn id=content-type-sniffing-0 title="Content-Type sniffing">sniffed type of a
   resource</dfn> must be found in a manner consistent with the
-  requirements given in the Content-Type Processing Model
+  requirements given in the Media Type Sniffing
   specification for finding the <i>sniffed-type</i> of the relevant
   sequence of octets. <a href=#refsMIMESNIFF>[MIMESNIFF]</a></p>
 
   <p>The <dfn id=content-type-sniffing:-image title="Content-Type sniffing: image">rules for sniffing
   images specifically</dfn> and the <dfn id=content-type-sniffing:-text-or-binary title="Content-Type sniffing:
-  text or binary">rules for distingushing if a resource is text or
-  binary</dfn> are also defined in the Content-Type Processing Model
+  text or binary">rules for distinguishing if a resource is text or
+  binary</dfn> are also defined in the Media Type Sniffing
   specification. Both sets of rules return a <a href=#mime-type>MIME type</a> as
   their result. <a href=#refsMIMESNIFF>[MIMESNIFF]</a></p>
 
   <p class=warning>It is imperative that the rules in the
-  Content-Type Processing Model specification be followed
+  Media Type Sniffing specification be followed
   exactly. When a user agent uses different heuristics for content
   type detection than the server expects, security problems can
-  occur. For more details, see the Content-Type Processing Model
+  occur. For more details, see the Media Type Sniffing
   specification. <a href=#refsMIMESNIFF>[MIMESNIFF]</a></p>
 
-  <p>The <dfn id=algorithm-for-extracting-an-encoding-from-a-content-type>algorithm for extracting an encoding from a
-  Content-Type</dfn>, given a string <var title="">s</var>, is as
-  follows. It either returns an encoding or nothing.</p>
 
-  <ol><li><p>Find the first seven characters in <var title="">s</var>
-   that are an <a href=#ascii-case-insensitive>ASCII case-insensitive</a> match for the word
-   "<code title="">charset</code>".  If no such match is found, return
-   nothing.</li>
+  <h4 id=extracting-encodings-from-meta-elements><span class=secno>2.7.4 </span>Extracting encodings from <code><a href=#the-meta-element>meta</a></code> elements</h4>
+
+  <p>The <dfn id=algorithm-for-extracting-an-encoding-from-a-meta-element>algorithm for extracting an encoding from a
+  <code>meta</code> element</dfn>, given a string <var title="">s</var>, is as follows. It either returns an encoding or
+  nothing.</p>
+
+  <ol><!-- http://www.hixie.ch/tests/adhoc/html/parsing/encoding/all.html --><li><p>Let <var title="">position</var> be a pointer into <var title="">s</var>, initially pointing at the start of the
+   string.</li>
+
+   <li><p><i>Loop</i>: Find the first seven characters in <var title="">s</var> after <var title="">position</var> that are an
+   <a href=#ascii-case-insensitive>ASCII case-insensitive</a> match for the word "<code title="">charset</code>". If no such match is found, return nothing
+   and abort these steps.</li>
 
    <li><p>Skip any U+0009, U+000A, U+000C, U+000D, or U+0020
    characters that immediately follow the word "<code title="">charset</code>" (there might not be any).</li>
 
    <li><p>If the next character is not a U+003D EQUALS SIGN ('='),
-   return nothing and abort these steps.</li>
+   then move <var title="">position</var> to point just before that
+   next character, and jump back to the step labeled
+   <i>loop</i>.</li>
 
    <li><p>Skip any U+0009, U+000A, U+000C, U+000D, or U+0020
    characters that immediately follow the equals sign (there might not
@@ -6344,17 +8119,207 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
     </dl></li>
 
-  </ol><p class=note>This requirement is a <a href=#willful-violation>willful violation</a>
-  of the HTTP specification, motivated by the need for backwards
-  compatibility with legacy content. <a href=#refsHTTP>[HTTP]</a></p>
+  </ol><p class=note>This algorithm is distinct from those in the HTTP
+  specification (for example, HTTP doesn't allow the use of single
+  quotes and requires supporting a backslash-escape mechanism that is
+  not supported by this algorithm<!-- not to mention not having any
+  rules for error-handling, which is of course why we're having to
+  define it ourselves -->). While the algorithm is used in contexts
+  that, historically, were related to HTTP, the syntax as supported by
+  implementations diverged some time ago. <a href=#refsHTTP>[HTTP]</a></p>
 
   </div>
 
 
+  <h4 id=cors-settings-attributes><span class=secno>2.7.5 </span>CORS settings attributes</h4>
+
+  <p>A <dfn id=cors-settings-attribute>CORS settings attribute</dfn> is an <a href=#enumerated-attribute>enumerated
+  attribute</a>. The following table lists the keywords and states
+  for the attribute &mdash; the keywords in the left column map to the
+  states in the cell in the second column on the same row as the
+  keyword.</p>
+
+  <table><thead><tr><th> Keyword
+     <th> State
+     <th> Brief description
+   <tbody><tr><td><dfn id=attr-crossorigin-anonymous-keyword title=attr-crossorigin-anonymous-keyword><code>anonymous</code></dfn>
+     <td><dfn id=attr-crossorigin-anonymous title=attr-crossorigin-anonymous>Anonymous</dfn>
+     <td>Cross-origin CORS requests for the element will not have the <i>credentials flag</i> set.
+    <tr><td><dfn id=attr-crossorigin-use-credentials-keyword title=attr-crossorigin-use-credentials-keyword><code>use-credentials</code></dfn>
+     <td><dfn id=attr-crossorigin-use-credentials title=attr-crossorigin-use-credentials>Use Credentials</dfn>
+     <td>Cross-origin CORS requests for the element will have the <i>credentials flag</i> set.
+  </table><p>The empty string is also a valid keyword, and maps to the <a href=#attr-crossorigin-anonymous title=attr-crossorigin-anonymous>Anonymous</a> state. The
+  attribute's <i>invalid value default</i> is the <a href=#attr-crossorigin-anonymous title=attr-crossorigin-anonymous>Anonymous</a> state. The
+  <i>missing value default</i>, used when the attribute is omitted, is
+  the <dfn id=attr-crossorigin-none title=attr-crossorigin-none>No CORS</dfn> state.</p>
+
+
+  <div class=impl>
+  <h4 id=cors-enabled-fetch><span class=secno>2.7.6 </span>CORS-enabled fetch</h4>
+
+  <p>When the user agent is required to perform a <dfn id=potentially-cors-enabled-fetch>potentially
+  CORS-enabled fetch</dfn> of an <a href=#absolute-url>absolute URL</a> <var title="">URL</var>, with a mode <var title="">mode</var> that is
+  either "<a href=#attr-crossorigin-none title=attr-crossorigin-none>No CORS</a>", "<a href=#attr-crossorigin-anonymous title=attr-crossorigin-anonymous>Anonymous</a>", or "<a href=#attr-crossorigin-use-credentials title=attr-crossorigin-use-credentials>Use Credentials</a>",
+  an <a href=#origin>origin</a> <var title="">origin</var>, and a default
+  origin behaviour <var title="">default</var> which is either
+  "<i>taint</i>" or "<i>fail</i>", it must run the first applicable
+  set of steps from the following list. The default origin behaviour
+  is only used if <var title="">mode</var> is "<a href=#attr-crossorigin-none title=attr-crossorigin-none>No CORS</a>". This algorithm wraps
+  the <a href=#fetch>fetch</a> algorithm above, and labels the obtained
+  resource as either <dfn id=cors-same-origin>CORS-same-origin</dfn> or
+  <dfn id=cors-cross-origin>CORS-cross-origin</dfn>, or blocks the resource entirely.</p>
+
+  <dl class=switch><dt>If <var title="">mode</var> is "<a href=#attr-crossorigin-none title=attr-crossorigin-none>No CORS</a>"</dt>
+
+   <dd>
+
+    <p>Run these substeps:</p>
+
+    <ol><li><p>Let <var title="">result</var> have no value.</li>
+
+     <li><p><a href=#fetch>Fetch</a> <var title="">URL</var>, with the
+     <i>manual redirect flag</i> set.</li> <!-- http-origin privacy
+     sensitive -->
+
+     <li><p><i>Loop</i>: Wait for the <a href=#fetch>fetch</a> algorithm
+     to know if the result is a redirect or not.</li>
+
+     <li>
+
+      <p>If the result of the <a href=#fetch>fetch</a> is a redirect, and
+      <var title="">result</var> still has no value, then apply the
+      CORS <a href=#redirect-steps>redirect steps</a>, with the CORS
+      <a href=#credential-flag>credential flag</a> set to true and the <i>request
+      rules</i> being that the user agent continue to follow these
+      steps. If this resumes the <a href=#fetch>fetch</a> algorithm, then
+      return to the <i>loop</i> step. If it failed due to a failure
+      of the CORS <a href=#resource-sharing-check>resource sharing check</a>, then: if <var title="">default</var> is <i>fail</i>, then set <var title="">result</var> to <i>fail</i> and jump to the step
+      labeled <i>end</i>; if <var title="">default</var> is
+      <i>taint</i>, then set <var title="">result</var> to
+      <i>taint</i>, <a href=#transparently-follow-the-redirect>transparently follow the redirect</a>
+      but with the <i>manual redirect flag</i> no longer set, and
+      jump to the step labeled <i>end</i> below.</p>
+
+      <p>Otherwise, if the resource is not available (e.g. there is
+      a network error) then set <var title="">result</var> to the
+      same value as <var title="">default</var>, and jump to the
+      step labeled <i>end</i> below.</p>
+
+      <p>Otherwise, perform a <a href=#resource-sharing-check>resource sharing check</a>,
+      with the CORS <a href=#credential-flag>credential flag</a> set to true. If it
+      returns fail, then set <var title="">result</var> to the same
+      value as <var title="">default</var>; otherwise, set <var title="">result</var> to <i>success</i>. Then, jump to the
+      step labeled <i>end</i> below.</p>
+
+     </li>
+
+     <li>
+
+      <p><i>End</i>: Jump to the appropriate step from the following
+      list:</p>
+
+      <dl class=switch><dt>If <var title="">result</var> is <i>fail</i></dt>
+
+       <dd>
+
+        <p>Discard all fetched data and prevent any <a href=#concept-task title=concept-task>tasks</a> from the <a href=#fetch>fetch</a>
+        algorithm from being <a href=#queue-a-task title="queue a task">queued</a>.
+        For the purposes of the calling algorithm, the user agent must
+        act as if there was a fatal network error and no resource was
+        obtained. The user agent may report a cross-origin resource
+        access failure to the user (e.g. in a debugging console).</p>
+
+       </dd>
+
+       <dt>If <var title="">result</var> is <i>taint</i></dt>
+
+       <dd>
+
+        <p>The <a href=#concept-task title=concept-task>tasks</a> from the
+        <a href=#fetch>fetch</a> algorithm are <a href=#queue-a-task title="queue a
+        task">queued</a> normally, but for the purposes of the
+        calling algorithm, the obtained resource is
+        <a href=#cors-cross-origin>CORS-cross-origin</a>. The user agent may report a
+        cross-origin resource access failure to the user (e.g. in a
+        debugging console).</p>
+
+       </dd>
+
+       <dt>If <var title="">result</var> is <i>success</i></dt>
+
+       <dd>
+
+        <p>The <a href=#concept-task title=concept-task>tasks</a> from the
+        <a href=#fetch>fetch</a> algorithm are <a href=#queue-a-task title="queue a
+        task">queued</a> normally, and for the purposes of the
+        calling algorithm, the obtained resource is
+        <a href=#cors-same-origin>CORS-same-origin</a>.</p>
+
+       </dd>
+
+      </dl></li>
+
+    </ol></dd>
+
+
+   <dt>If <var title="">mode</var> is "<a href=#attr-crossorigin-anonymous title=attr-crossorigin-anonymous>Anonymous</a>" or "<a href=#attr-crossorigin-use-credentials title=attr-crossorigin-use-credentials>Use
+   Credentials</a>"</dt>
+
+   <dd>
+
+    <p>Run these steps:</p>
+
+    <ol><li><p>Perform a <a href=#cross-origin-request>cross-origin request</a> with the
+     <i>request URL</i> set to <var title="">URL</var>, the
+     <i>source origin</i> set to <var title="">origin</var>, and the
+     <i>credentials flag</i> set to true if <var title="">mode</var>
+     is "<a href=#attr-crossorigin-use-credentials title=attr-crossorigin-use-credentials>Use
+     Credentials</a>" and set to false otherwise. <a href=#refsCORS>[CORS]</a></li>
+
+     <li><p>Wait for the CORS <a href=#cross-origin-request-status>cross-origin request status</a>
+     to have a value.</li>
+
+     <li>
+
+      <p>Jump to the appropriate step from the following list:</p>
+
+      <dl class=switch><dt>If the CORS <a href=#cross-origin-request-status>cross-origin request status</a> is not <i>success</i></dt>
+
+       <dd>
+
+        <p>Discard all fetched data and prevent any <a href=#concept-task title=concept-task>tasks</a> from the <a href=#fetch>fetch</a>
+        algorithm from being <a href=#queue-a-task title="queue a task">queued</a>.
+        For the purposes of the calling algorithm, the user agent must
+        act as if there was a fatal network error and no resource was
+        obtained. If a CORS <a href=#resource-sharing-check>resource sharing check</a>
+        failed, the user agent may report a cross-origin resource
+        access failure to the user (e.g. in a debugging console).</p>
+
+       </dd>
+
+       <dt>If the CORS <a href=#cross-origin-request-status>cross-origin request status</a> is <i>success</i></dt>
+
+       <dd>
+
+        <p>The <a href=#concept-task title=concept-task>tasks</a> from the
+        <a href=#fetch>fetch</a> algorithm are <a href=#queue-a-task title="queue a
+        task">queued</a> normally, and for the purposes of the
+        calling algorithm, the obtained resource is
+        <a href=#cors-same-origin>CORS-same-origin</a>.</p>
+
+       </dd>
+
+      </dl></li>
+
+    </ol></dd>
+
+  </dl></div>
 
-  <h3 id=common-dom-interfaces><span class=secno>2.7 </span>Common DOM interfaces</h3>
 
-  <h4 id=reflecting-content-attributes-in-idl-attributes><span class=secno>2.7.1 </span>Reflecting content attributes in IDL attributes</h4>
+
+  <h3 id=common-dom-interfaces><span class=secno>2.8 </span>Common DOM interfaces</h3>
+
+  <h4 id=reflecting-content-attributes-in-idl-attributes><span class=secno>2.8.1 </span>Reflecting content attributes in IDL attributes</h4>
 
   <p>Some IDL attributes are defined to <dfn id=reflect>reflect</dfn> a
   particular content attribute. This means that on getting, the IDL
@@ -6397,24 +8362,19 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   attribute must set the content attribute to the specified literal
   value.</p>
 
-  <p>If a reflecting IDL attribute is a <code>DOMString</code> whose
-  content attribute is an <a href=#enumerated-attribute>enumerated attribute</a>, and the
-  IDL attribute is <dfn id=limited-to-only-known-values>limited to only known values</dfn>, then, on
-  getting, the IDL attribute must return the conforming value
-  associated with the state the attribute is in (in its canonical
-  case), or the empty string if the attribute is in a state that has
-  no associated keyword value; and on setting, if the new value is an
-  <a href=#ascii-case-insensitive>ASCII case-insensitive</a> match for one of the keywords
-  given for that attribute, then the content attribute must be set to
-  the conforming value associated with the state that the attribute
-  would be in if set to the given new value, otherwise, if the new
-  value is the empty string, then the content attribute must be
-  removed, otherwise, the content attribute must be set to the given
-  new value.</p>
+  <p>If a reflecting IDL attribute is a <code>DOMString</code>
+  attribute whose content attribute is an <a href=#enumerated-attribute>enumerated
+  attribute</a>, and the IDL attribute is <dfn id=limited-to-only-known-values>limited to only
+  known values</dfn>, then, on getting, the IDL attribute must return
+  the conforming value associated with the state the attribute is in
+  (in its canonical case), or the empty string if the attribute is in
+  a state that has no associated keyword value; and on setting, the
+  content attribute must be set to the specified new value.</p>
 
-  <p>If a reflecting IDL attribute is a <code>DOMString</code> but
-  doesn't fall into any of the above categories, then the getting and
-  setting must be done in a transparent, case-preserving manner.</p>
+  <p>If a reflecting IDL attribute is a <code>DOMString</code>
+  attribute but doesn't fall into any of the above categories, then
+  the getting and setting must be done in a transparent,
+  case-preserving manner.</p>
 
   <p>If a reflecting IDL attribute is a <code title="">boolean</code>
   attribute, then on getting the IDL attribute must return true if the
@@ -6424,7 +8384,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   set to true. (This corresponds to the rules for <a href=#boolean-attribute title="boolean
   attribute">boolean content attributes</a>.)</p>
 
-  <p>If a reflecting IDL attribute is a signed integer type
+  <p>If a reflecting IDL attribute has a signed integer type
   (<code>long</code>) then, on getting, the content attribute must be
   parsed according to the <a href=#rules-for-parsing-integers title="rules for parsing
   integers">rules for parsing signed integers</a>, and if that is
@@ -6437,7 +8397,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   a <a href=#valid-integer>valid integer</a> and then that string must be used as
   the new content attribute value.</p>
 
-  <p>If a reflecting IDL attribute is a signed integer type
+  <p>If a reflecting IDL attribute has a signed integer type
   (<code>long</code>) that is <dfn id=limited-to-only-non-negative-numbers>limited to only non-negative
   numbers</dfn> then, on getting, the content attribute must be parsed
   according to the <a href=#rules-for-parsing-non-negative-integers>rules for parsing non-negative
@@ -6446,44 +8406,48 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   returned. If, on the other hand, it fails or returns an out of range
   value, or if the attribute is absent, the default value must be
   returned instead, or &minus;1 if there is no default value. On
-  setting, if the value is negative, the user agent must fire an
-  <code><a href=#index_size_err>INDEX_SIZE_ERR</a></code> exception. Otherwise, the given value
+  setting, if the value is negative, the user agent must throw an
+  <code><a href=#indexsizeerror>IndexSizeError</a></code> exception. Otherwise, the given value
   must be converted to the shortest possible string representing the
   number as a <a href=#valid-non-negative-integer>valid non-negative integer</a> and then that
   string must be used as the new content attribute value.</p>
 
-  <p>If a reflecting IDL attribute is an <em>unsigned</em> integer
+  <p>If a reflecting IDL attribute has an <em>unsigned</em> integer
   type (<code>unsigned long</code>) then, on getting, the content
   attribute must be parsed according to the <a href=#rules-for-parsing-non-negative-integers>rules for parsing
   non-negative integers</a>, and if that is successful, and the
-  value is in the range of the IDL attribute's type, the resulting
-  value must be returned. If, on the other hand, it fails or returns
-  an out of range value, or if the attribute is absent, the default
-  value must be returned instead, or 0 if there is no default
-  value. On setting, the given value must be converted to the shortest
-  possible string representing the number as a <a href=#valid-non-negative-integer>valid
-  non-negative integer</a> and then that string must be used as the
-  new content attribute value.</p>
-
-  <p>If a reflecting IDL attribute is an unsigned integer type
+  value is in the range 0 to 2147483647 inclusive, the resulting value
+  must be returned. If, on the other hand, it fails or returns an out
+  of range value, or if the attribute is absent, the default value
+  must be returned instead, or 0 if there is no default value. On
+  setting, the given value must be converted to the shortest possible
+  string representing the number as a <a href=#valid-non-negative-integer>valid non-negative
+  integer</a> and then that string must be used as the new content
+  attribute value.</p>
+  <!-- see http://www.w3.org/Bugs/Public/show_bug.cgi?id=10352 and
+  https://bugzilla.mozilla.org/show_bug.cgi?id=586118 for why the
+  range is clamped to 2147483647 rather the normal unsigned long
+  maximum value of 4294967295 -->
+
+  <p>If a reflecting IDL attribute has an unsigned integer type
   (<code>unsigned long</code>) that is <dfn id=limited-to-only-non-negative-numbers-greater-than-zero>limited to only
   non-negative numbers greater than zero</dfn>, then the behavior is
   similar to the previous case, but zero is not allowed. On getting,
   the content attribute must first be parsed according to the
   <a href=#rules-for-parsing-non-negative-integers>rules for parsing non-negative integers</a>, and if that is
-  successful, and the value is in the range of the IDL attribute's
-  type, the resulting value must be returned. If, on the other hand,
-  it fails or returns an out of range value, or if the attribute is
+  successful, and the value is in the range 1 to 2147483647 inclusive,
+  the resulting value must be returned. If, on the other hand, it
+  fails or returns an out of range value, or if the attribute is
   absent, the default value must be returned instead, or 1 if there is
   no default value. On setting, if the value is zero, the user agent
-  must fire an <code><a href=#index_size_err>INDEX_SIZE_ERR</a></code> exception. Otherwise, the
+  must throw an <code><a href=#indexsizeerror>IndexSizeError</a></code> exception. Otherwise, the
   given value must be converted to the shortest possible string
   representing the number as a <a href=#valid-non-negative-integer>valid non-negative integer</a>
   and then that string must be used as the new content attribute
-  value.</p>
-
-  <p>If a reflecting IDL attribute is a floating point number type
-  (<code>float</code>), then, on getting, the content attribute must
+  value.</p> <!-- see previous paragraph for note about the range -->
+  <p>If a reflecting IDL attribute has a floating point number type
+  (<code>double</code>), then, on getting, the content attribute must
   be parsed according to the <a href=#rules-for-parsing-floating-point-number-values>rules for parsing floating point
   number values</a>, and if that is successful, the resulting value
   must be returned. If, on the other hand, it fails, or if the
@@ -6493,31 +8457,46 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   floating point number</a> and then that string must be used as
   the new content attribute value.</p>
 
+  <p>If a reflecting IDL attribute has a floating point number type
+  (<code>double</code>) that is <dfn id=limited-to-numbers-greater-than-zero>limited to numbers greater than
+  zero</dfn>, then the behavior is similar to the previous case, but
+  zero and negative values are not allowed. On getting, the content
+  attribute must be parsed according to the <a href=#rules-for-parsing-floating-point-number-values>rules for parsing
+  floating point number values</a>, and if that is successful and
+  the value is greater than 0.0, the resulting value must be returned.
+  If, on the other hand, it fails or returns an out of range value, or
+  if the attribute is absent, the default value must be returned
+  instead, or 0.0 if there is no default value. On setting, if the
+  value is less than or equal to zero, then the value must be ignored.
+  Otherwise, the given value must be converted to the <a href=#best-representation-of-the-number-as-a-floating-point-number>best
+  representation of the number as a floating point number</a> and
+  then that string must be used as the new content attribute
+  value.</p>
+
   <p class=note>The values Infinity and Not-a-Number (NaN) values
   throw an exception on setting, as <a href=#float-nan>defined
   earlier</a>.</p>
 
-  <p>If a reflecting IDL attribute is of the type
+  <p>If a reflecting IDL attribute has the type
   <code><a href=#domtokenlist>DOMTokenList</a></code> or <code><a href=#domsettabletokenlist>DOMSettableTokenList</a></code>, then
   on getting it must return a <code><a href=#domtokenlist>DOMTokenList</a></code> or
   <code><a href=#domsettabletokenlist>DOMSettableTokenList</a></code> object (as appropriate) whose
-  underlying string is the element's corresponding content
-  attribute. When the object mutates its underlying string, the
-  content attribute must itself be immediately mutated. When the
-  attribute is absent, then the string represented by the object is
-  the empty string; when the object mutates this empty string, the
-  user agent must add the corresponding content attribute, with its
-  value set to the value it would have been set to after mutating the
-  empty string. The same <code><a href=#domtokenlist>DOMTokenList</a></code> or
-  <code><a href=#domsettabletokenlist>DOMSettableTokenList</a></code> object must be returned every time
-  for each attribute.</p>
+  underlying string is the element's corresponding content attribute.
+  When the object mutates its underlying string, the content attribute
+  must itself be immediately mutated. When the attribute is absent,
+  then the string represented by the object is the empty string; when
+  the object mutates this empty string, the user agent must add the
+  corresponding content attribute, with its value set to the value it
+  would have been set to after mutating the empty string. The same
+  <code><a href=#domtokenlist>DOMTokenList</a></code> or <code><a href=#domsettabletokenlist>DOMSettableTokenList</a></code>
+  object must be returned every time for each attribute.</p>
 
   <div class=example>
 
-   <p>If an element with no attributes has its <code title=dom-tokenlist-remove><a href=#dom-tokenlist-remove>element.classList.remove()</a></code>
+   <p>If an element with no attributes has its <code title=dom-tokenlist-remove>element.classList.remove()</code>
    method invoked, the underlying string won't be changed, since the
    result of removing any token from the empty string is still the
-   empty string. However, if the <code title=dom-tokenlist-add><a href=#dom-tokenlist-add>element.classList.add()</a></code> method is
+   empty string. However, if the <code title=dom-tokenlist-add>element.classList.add()</code> method is
    then invoked, a <code title=attr-class><a href=#classes>class</a></code> attribute
    will be added to the element with the value of the token to be
    added.</p>
@@ -6535,7 +8514,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
    <li>Let <var title="">candidate</var> be the element that the <code title=dom-Document-getElementById><a href=#dom-document-getelementbyid>document.getElementById()</a></code> method
    would find when called on the content attribute's document if it
-   was passed as its argument the current value of the corresponding
+   were passed as its argument the current value of the corresponding
    content attribute.</li>
 
    <li>If <var title="">candidate</var> is null, or if it is not
@@ -6544,155 +8523,53 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
    <li>Otherwise, it must return <var title="">candidate</var>.</li>
 
-  </ol><p>On setting, if the given element has an <code title=attr-id><a href=#the-id-attribute>id</a></code> attribute, then the content attribute must
+  </ol><p>On setting, if the given element has an <code title=attr-id><a href=#the-id-attribute>id</a></code> attribute, and has the same <a href=#home-subtree>home
+  subtree</a> as the element of the attribute being set, and the
+  given element is the first element in that <a href=#home-subtree>home subtree</a>
+  whose <a href=#concept-id title=concept-ID>ID</a> is the value of that <code title=attr-id><a href=#the-id-attribute>id</a></code> attribute, then the content attribute must
   be set to the value of that <code title=attr-id><a href=#the-id-attribute>id</a></code>
-  attribute. Otherwise, the IDL attribute must be set to the empty
+  attribute. Otherwise, the content attribute must be set to the empty
   string.</p>
 
   </div>
 
 
-  <h4 id=collections-0><span class=secno>2.7.2 </span>Collections</h4>
+  <h4 id=collections-0><span class=secno>2.8.2 </span>Collections</h4>
 
-  <p>The <code><a href=#htmlcollection>HTMLCollection</a></code>, <code><a href=#htmlallcollection>HTMLAllCollection</a></code>,
+  <p>The <code><a href=#htmlallcollection>HTMLAllCollection</a></code>,
   <code><a href=#htmlformcontrolscollection>HTMLFormControlsCollection</a></code>,
-  <code><a href=#htmloptionscollection>HTMLOptionsCollection</a></code>, and
-  <code><a href=#htmlpropertiescollection>HTMLPropertiesCollection</a></code> interfaces represent various
-  lists of DOM nodes. Collectively, objects implementing these
-  interfaces are called <dfn id=collections>collections</dfn>.</p>
-
-  <p>When a <a href=#collections title=collections>collection</a> is created, a
-  filter and a root are associated with the collection.</p>
-
-  <p class=example>For example, when the <code><a href=#htmlcollection>HTMLCollection</a></code>
-  object for the <code title=dom-document-images><a href=#dom-document-images>document.images</a></code> attribute is
-  created, it is associated with a filter that selects only
-  <code><a href=#the-img-element>img</a></code> elements, and rooted at the root of the
-  document.</p>
-
-  <p>The <a href=#collections title=collections>collection</a> then <dfn id=represented-by-the-collection title="represented by the collection">represents</dfn> a
-  <a href=#live>live</a> view of the subtree rooted at the collection's
-  root, containing only nodes that match the given filter. The view is
-  linear. <span class=impl>In the absence of specific requirements
-  to the contrary, the nodes within the collection must be sorted in
-  <a href=#tree-order>tree order</a>.</span></p>
+  <code><a href=#htmloptionscollection>HTMLOptionsCollection</a></code>,
+<!--MD-->
+  and <code><a href=#htmlpropertiescollection>HTMLPropertiesCollection</a></code>
+<!--MD-->
+  interfaces are <a href=#collections>collections</a> derived from the
+  <code><a href=#htmlcollection>HTMLCollection</a></code> interface.</p>
 
-  <div class=impl>
-
-  <p class=note>The <code title=dom-table-rows><a href=#dom-table-rows>rows</a></code> list is
-  not in tree order.</p>
-
-  <p>An attribute that returns a collection must return the same
-  object every time it is retrieved.</p>
-
-  </div>
-
-
-  <h5 id=htmlcollection-0><span class=secno>2.7.2.1 </span>HTMLCollection</h5>
-
-  <p>The <code><a href=#htmlcollection>HTMLCollection</a></code> interface represents a generic
-  <a href=#collections title=collections>collection</a> of elements.</p>
-
-  <pre class=idl>interface <dfn id=htmlcollection>HTMLCollection</dfn> {
-  readonly attribute unsigned long <a href=#dom-htmlcollection-length title=dom-HTMLCollection-length>length</a>;
-  caller getter object <a href=#dom-htmlcollection-item title=dom-HTMLCollection-item>item</a>(in unsigned long index); // only returns Element
-  caller getter object <a href=#dom-htmlcollection-nameditem title=dom-HTMLCollection-namedItem>namedItem</a>(in DOMString name); // only returns Element
-};</pre>
-
-  <dl class=domintro><dt><var title="">collection</var> . <code title=dom-HTMLCollection-length><a href=#dom-htmlcollection-length>length</a></code></dt>
-   <dd>
-    <p>Returns the number of elements in the collection.</p>
-   </dd>
-
-   <dt><var title="">element</var> = <var title="">collection</var> . <code title=dom-HTMLCollection-item><a href=#dom-htmlcollection-item>item</a></code>(<var title="">index</var>)</dt>
-   <dt><var title="">collection</var>[<var title="">index</var>]</dt>
-   <dt><var title="">collection</var>(<var title="">index</var>)</dt>
-   <dd>
-    <p>Returns the item with index <var title="">index</var> from the collection. The items are sorted in <a href=#tree-order>tree order</a>.</p>
-    <p>Returns null if <var title="">index</var> is out of range.</p>
-   </dd>
-
-   <dt><var title="">element</var> = <var title="">collection</var> . <code title=dom-HTMLCollection-item><a href=#dom-htmlcollection-item>namedItem</a></code>(<var title="">name</var>)</dt>
-   <dt><var title="">collection</var>[<var title="">name</var>]</dt>
-   <dt><var title="">collection</var>(<var title="">name</var>)</dt>
-   <dd>
-    <p>Returns the first item with <a href=#concept-id title=concept-id>ID</a> or name <var title="">name</var>
-    from the collection.</p>
-    <p>Returns null if no element with that <a href=#concept-id title=concept-id>ID</a> or name could be found.</p>
-    <p>Only <code><a href=#the-a-element>a</a></code>, <code><a href=#the-applet-element>applet</a></code>, <code><a href=#the-area-element>area</a></code>,
-    <code><a href=#the-embed-element>embed</a></code>, <code><a href=#the-form-element>form</a></code>, <code><a href=#frame>frame</a></code>,
-    <code><a href=#frameset>frameset</a></code>, <code><a href=#the-iframe-element>iframe</a></code>, <code><a href=#the-img-element>img</a></code>, and
-    <code><a href=#the-object-element>object</a></code> elements can have a name for the purpose of
-    this method; their name is given by the value of their <code title="">name</code> attribute.</p>
-   </dd>
-  </dl><div class=impl>
-
-  <p>The object's <span>indices of the supported indexed
-  properties</span> are the numbers in the range zero to one less than
-  the number of nodes <a href=#represented-by-the-collection>represented by the collection</a>. If
-  there are no such elements, then there are no <span>supported
-  indexed properties</span>.</p>
-
-  <p>The <dfn id=dom-htmlcollection-length title=dom-HTMLCollection-length><code>length</code></dfn>
-  attribute must return the number of nodes <a href=#represented-by-the-collection>represented by the
-  collection</a>.</p>
-
-  <p>The <dfn id=dom-htmlcollection-item title=dom-HTMLCollection-item><code>item(<var title="">index</var>)</code></dfn> method must return the <var title="">index</var>th node in the collection. If there is no <var title="">index</var>th node in the collection, then the method must
-  return null.</p>
 
-  <p>The <span>names of the supported named properties</span> consist
-  of the values of the <code title="">name</code> attributes of each
-  <code><a href=#the-a-element>a</a></code>, <code><a href=#the-applet-element>applet</a></code>, <code><a href=#the-area-element>area</a></code>,
-  <code><a href=#the-embed-element>embed</a></code>, <code><a href=#the-form-element>form</a></code>, <code><a href=#frame>frame</a></code>,
-  <code><a href=#frameset>frameset</a></code>, <code><a href=#the-iframe-element>iframe</a></code>, <code><a href=#the-img-element>img</a></code>, and
-  <code><a href=#the-object-element>object</a></code> element <a href=#represented-by-the-collection>represented by the
-  collection</a> with a <code title="">name</code> attribute, plus
-  the list of IDs that the elements <a href=#represented-by-the-collection>represented by the
-  collection</a> have.</p>
-
-  <p>The <dfn id=dom-htmlcollection-nameditem title=dom-HTMLCollection-namedItem><code>namedItem(<var title="">key</var>)</code></dfn> method must return the first node
-  in the collection that matches the following requirements:</p>
-
-  <ul><li>It is an <code><a href=#the-a-element>a</a></code>, <code><a href=#the-applet-element>applet</a></code>,
-   <code><a href=#the-area-element>area</a></code>, <code><a href=#the-embed-element>embed</a></code>, <code><a href=#the-form-element>form</a></code>,
-   <code><a href=#frame>frame</a></code>, <code><a href=#frameset>frameset</a></code>, <code><a href=#the-iframe-element>iframe</a></code>,
-   <code><a href=#the-img-element>img</a></code>, or <code><a href=#the-object-element>object</a></code> element with a <code title="">name</code> attribute equal to <var title="">key</var>,
-   or,</li>
-
-   <li>It is an element with an <a href=#concept-id title=concept-id>ID</a>
-   equal to <var title="">key</var>.</li>
-
-  </ul><p>If no such elements are found, then the method must return
-  null.</p>
-
-  </div>
-
-
-  <h5 id=htmlallcollection-0><span class=secno>2.7.2.2 </span>HTMLAllCollection</h5>
+  <h5 id=htmlallcollection-0><span class=secno>2.8.2.1 </span>HTMLAllCollection</h5>
 
   <p>The <code><a href=#htmlallcollection>HTMLAllCollection</a></code> interface represents a generic
   <a href=#collections title=collections>collection</a> of elements just like
   <code><a href=#htmlcollection>HTMLCollection</a></code>, with the exception that its <code title=dom-HTMLAllCollection-namedItem><a href=#dom-htmlallcollection-nameditem>namedItem()</a></code> method
-  returns an <code><a href=#htmlcollection>HTMLCollection</a></code> object when there are
+  returns an <code><a href=#htmlallcollection>HTMLAllCollection</a></code> object when there are
   multiple matching elements.</p>
 
   <pre class=idl>interface <dfn id=htmlallcollection>HTMLAllCollection</dfn> : <a href=#htmlcollection>HTMLCollection</a> {
-  // inherits <a href=#dom-htmlcollection-length title=dom-HTMLCollection-length>length</a> and <a href=#dom-htmlcollection-item title=dom-HTMLCollection-item>item</a>()
-  caller getter object <a href=#dom-htmlallcollection-nameditem title=dom-HTMLAllCollection-namedItem>namedItem</a>(in DOMString name); // overrides inherited namedItem()
-  <a href=#htmlallcollection>HTMLAllCollection</a> <a href=#dom-htmlallcollection-tags title=dom-HTMLAllCollection-tags>tags</a>(in DOMString tagName);
+  // inherits <span title=dom-HTMLCollection-length>length</span> and <span title=dom-HTMLCollection-item>item</span>()
+  legacycaller getter object? <a href=#dom-htmlallcollection-nameditem title=dom-HTMLAllCollection-namedItem>namedItem</a>(DOMString name); // overrides inherited namedItem()
+  <a href=#htmlallcollection>HTMLAllCollection</a> <a href=#dom-htmlallcollection-tags title=dom-HTMLAllCollection-tags>tags</a>(DOMString tagName);
 };</pre>
 
-  <dl class=domintro><dt><var title="">collection</var> . <code title=dom-HTMLCollection-length><a href=#dom-htmlcollection-length>length</a></code></dt>
+  <dl class=domintro><dt><var title="">collection</var> . <code title=dom-HTMLCollection-length>length</code></dt>
    <dd>
     <p>Returns the number of elements in the collection.</p>
    </dd>
 
-   <dt><var title="">element</var> = <var title="">collection</var> . <code title=dom-HTMLCollection-item><a href=#dom-htmlcollection-item>item</a></code>(<var title="">index</var>)</dt>
+   <dt><var title="">element</var> = <var title="">collection</var> . <code title=dom-HTMLCollection-item>item</code>(<var title="">index</var>)</dt>
    <dt><var title="">collection</var>[<var title="">index</var>]</dt>
    <dt><var title="">collection</var>(<var title="">index</var>)</dt>
    <dd>
     <p>Returns the item with index <var title="">index</var> from the collection. The items are sorted in <a href=#tree-order>tree order</a>.</p>
-    <p>Returns null if <var title="">index</var> is out of range.</p>
    </dd>
 
    <dt><var title="">element</var> = <var title="">collection</var> . <code title=dom-HTMLAllCollection-namedItem><a href=#dom-htmlallcollection-nameditem>namedItem</a></code>(<var title="">name</var>)</dt>
@@ -6702,7 +8579,6 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
    <dd>
     <p>Returns the item with <a href=#concept-id title=concept-id>ID</a> or name <var title="">name</var> from the collection.</p>
     <p>If there are multiple matching items, then an <code><a href=#htmlallcollection>HTMLAllCollection</a></code> object containing all those elements is returned.</p>
-    <p>Returns null if no element with that <a href=#concept-id title=concept-id>ID</a> or name could be found.</p>
     <p>Only <code><a href=#the-a-element>a</a></code>, <code><a href=#the-applet-element>applet</a></code>, <code><a href=#the-area-element>area</a></code>,
     <code><a href=#the-embed-element>embed</a></code>, <code><a href=#the-form-element>form</a></code>, <code><a href=#frame>frame</a></code>,
     <code><a href=#frameset>frameset</a></code>, <code><a href=#the-iframe-element>iframe</a></code>, <code><a href=#the-img-element>img</a></code>, and
@@ -6717,10 +8593,9 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
 
   </dl><div class=impl>
 
-  <p>The object's <span>indices of the supported indexed
-  properties</span> and <span>names of the supported named
-  properties</span> are as defined for <code><a href=#htmlcollection>HTMLCollection</a></code>
-  objects.</p>
+  <p>The object's <a href=#supported-property-indices>supported property indices</a> and
+  <a href=#supported-property-names>supported property names</a> are as defined for
+  <code><a href=#htmlcollection>HTMLCollection</a></code> objects.</p>
 
   <p>The <dfn id=dom-htmlallcollection-nameditem title=dom-HTMLAllCollection-namedItem><code>namedItem(<var title="">key</var>)</code></dfn> method must act according to the
   following algorithm:</p>
@@ -6730,7 +8605,7 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
     <p>Let <var title="">collection</var> be an
     <code><a href=#htmlallcollection>HTMLAllCollection</a></code> object rooted at the same node as
     the <code><a href=#htmlallcollection>HTMLAllCollection</a></code> object on which the method was
-    invoked, whose filter matches only only elements that already
+    invoked, whose filter matches only elements that already
     match the filter of the <code><a href=#htmlallcollection>HTMLAllCollection</a></code> object on
     which the method was invoked and that are either:</p>
 
@@ -6763,36 +8638,40 @@ a.setAttribute('href', 'http://example.com/'); // change the content attribute d
   object on which the method was invoked. In <a href=#html-documents>HTML
   documents</a>, the argument must first be <a href=#converted-to-ascii-lowercase>converted to
   ASCII lowercase</a>.</p>
+<!--if legacycaller is removed:
+  <p>In addition to the above, <code>HTMLAllCollection</code> objects,
+  in JavaScript, must be callable. Calling such an object must
+  implicitly invoke the index getter with the same arguments.</p>
+-->
 
   </div>
 
 
-  <h5 id=htmlformcontrolscollection-0><span class=secno>2.7.2.3 </span>HTMLFormControlsCollection</h5>
+  <h5 id=htmlformcontrolscollection-0><span class=secno>2.8.2.2 </span>HTMLFormControlsCollection</h5>
 
   <p>The <code><a href=#htmlformcontrolscollection>HTMLFormControlsCollection</a></code> interface represents
   a <a href=#collections title=collections>collection</a> of <a href=#category-listed title=category-listed>listed elements</a> in <code><a href=#the-form-element>form</a></code>
   and <code><a href=#the-fieldset-element>fieldset</a></code> elements.</p>
 
   <pre class=idl>interface <dfn id=htmlformcontrolscollection>HTMLFormControlsCollection</dfn> : <a href=#htmlcollection>HTMLCollection</a> {
-  // inherits <a href=#dom-htmlcollection-length title=dom-HTMLCollection-length>length</a> and <a href=#dom-htmlcollection-item title=dom-HTMLCollection-item>item</a>()
-  caller getter object <a href=#dom-htmlformcontrolscollection-nameditem title=dom-HTMLFormControlsCollection-namedItem>namedItem</a>(in DOMString name); // overrides inherited namedItem()
+  // inherits <span title=dom-HTMLCollection-length>length</span> and <span title=dom-HTMLCollection-item>item</span>()
+  legacycaller getter object? <a href=#dom-htmlformcontrolscollection-nameditem title=dom-HTMLFormControlsCollection-namedItem>namedItem</a>(DOMString name); // overrides inherited namedItem()
 };
 
 interface <dfn id=radionodelist>RadioNodeList</dfn> : <a href=#nodelist>NodeList</a> {
           attribute DOMString <a href=#dom-radionodelist-value title=dom-RadioNodeList-value>value</a>;
 };</pre>
 
-  <dl class=domintro><dt><var title="">collection</var> . <code title=dom-HTMLCollection-length><a href=#dom-htmlcollection-length>length</a></code></dt>
+  <dl class=domintro><dt><var title="">collection</var> . <code title=dom-HTMLCollection-length>length</code></dt>
    <dd>
     <p>Returns the number of elements in the collection.</p>
    </dd>
 
-   <dt><var title="">element</var> = <var title="">collection</var> . <code title=dom-HTMLCollection-item><a href=#dom-htmlcollection-item>item</a></code>(<var title="">index</var>)</dt>
+   <dt><var title="">element</var> = <var title="">collection</var> . <code title=dom-HTMLCollection-item>item</code>(<var title="">index</var>)</dt>
    <dt><var title="">collection</var>[<var title="">index</var>]</dt>
    <dt><var title="">collection</var>(<var title="">index</var>)</dt>
    <dd>
     <p>Returns the item with index <var title="">index</var> from the collection. The items are sorted in <a href=#tree-order>tree order</a>.</p>
-    <p>Returns null if <var title="">index</var> is out of range.</p>
    </dd>
 
    <dt><var title="">element</var> = <var title="">collection</var> . <code title=dom-HTMLFormControlsCollection-namedItem><a href=#dom-htmlformcontrolscollection-nameditem>namedItem</a></code>(<var title="">name</var>)</dt>
@@ -6802,7 +8681,6 @@ interface <dfn id=radionodelist>RadioNodeList</dfn> : <a href=#nodelist>NodeList
    <dd>
     <p>Returns the item with <a href=#concept-id title=concept-id>ID</a> or <code title=attr-fe-name><a href=#attr-fe-name>name</a></code> <var title="">name</var> from the collection.</p>
     <p>If there are multiple matching items, then a <code><a href=#radionodelist>RadioNodeList</a></code> object containing all those elements is returned.</p>
-    <p>Returns null if no element with that <a href=#concept-id title=concept-id>ID</a> or <code title=attr-fe-name><a href=#attr-fe-name>name</a></code> could be found.</p>
    </dd>
 
    <dt><var title="">radioNodeList</var> . <var title="">value</var> [ = <var title="">value</var> ]</dt>
@@ -6813,12 +8691,11 @@ interface <dfn id=radionodelist>RadioNodeList</dfn> : <a href=#nodelist>NodeList
 
   </dl><div class=impl>
 
-  <p>The object's <span>indices of the supported indexed
-  properties</span> are as defined for <code><a href=#htmlcollection>HTMLCollection</a></code>
-  objects.</p>
+  <p>The object's <a href=#supported-property-indices>supported property indices</a> are as
+  defined for <code><a href=#htmlcollection>HTMLCollection</a></code> objects.</p>
 
-  <p>The <span>names of the supported named properties</span> consist
-  of the values of all the <code title=attr-id><a href=#the-id-attribute>id</a></code> and <code title=attr-fe-name><a href=#attr-fe-name>name</a></code> attributes of all the elements
+  <p>The <a href=#supported-property-names>supported property names</a> consist of the values
+  of all the <code title=attr-id><a href=#the-id-attribute>id</a></code> and <code title=attr-fe-name><a href=#attr-fe-name>name</a></code> attributes of all the elements
   <a href=#represented-by-the-collection>represented by the collection</a>.</p>
 
   <p>The <dfn id=dom-htmlformcontrolscollection-nameditem title=dom-HTMLFormControlsCollection-namedItem><code>namedItem(<var title="">name</var>)</code></dfn> method must act according to the
@@ -6884,7 +8761,7 @@ http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20html%3E..
 --></div>
 
 
-  <h5 id=htmloptionscollection-0><span class=secno>2.7.2.4 </span>HTMLOptionsCollection</h5>
+  <h5 id=htmloptionscollection-0><span class=secno>2.8.2.3 </span>HTMLOptionsCollection</h5>
 
   <p>The <code><a href=#htmloptionscollection>HTMLOptionsCollection</a></code> interface represents a
   list of <code><a href=#the-option-element>option</a></code> elements. It is always rooted on a
@@ -6892,12 +8769,16 @@ http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20html%3E..
   manipulate that element's descendants.</p>
 
   <pre class=idl>interface <dfn id=htmloptionscollection>HTMLOptionsCollection</dfn> : <a href=#htmlcollection>HTMLCollection</a> {
-  // inherits <a href=#dom-htmlcollection-item title=dom-HTMLCollection-item>item</a>()
+  // inherits <span title=dom-HTMLCollection-item>item</span>()
            attribute unsigned long <a href=#dom-htmloptionscollection-length title=dom-HTMLOptionsCollection-length>length</a>; // overrides inherited length
-  caller getter object <a href=#dom-htmloptionscollection-nameditem title=dom-HTMLOptionsCollection-namedItem>namedItem</a>(in DOMString name); // overrides inherited namedItem()
-  void <a href=#dom-htmloptionscollection-add title=dom-HTMLOptionsCollection-add>add</a>(in <a href=#htmlelement>HTMLElement</a> element, in optional <a href=#htmlelement>HTMLElement</a> before);
-  void <a href=#dom-htmloptionscollection-add title=dom-HTMLOptionsCollection-add>add</a>(in <a href=#htmlelement>HTMLElement</a> element, in long before);
-  void <a href=#dom-htmloptionscollection-remove title=dom-HTMLOptionsCollection-remove>remove</a>(in long index);
+  legacycaller getter object? <a href=#dom-htmloptionscollection-nameditem title=dom-HTMLOptionsCollection-namedItem>namedItem</a>(DOMString name); // overrides inherited namedItem()
+  <a href=#dom-htmloptionscollection-setter title=dom-HTMLOptionsCollection-setter>setter creator</a> void (unsigned long index, <a href=#htmloptionelement>HTMLOptionElement</a> option);
+  void <a href=#dom-htmloptionscollection-add title=dom-HTMLOptionsCollection-add>add</a>(<a href=#htmloptionelement>HTMLOptionElement</a> element, optional <a href=#htmlelement>HTMLElement</a>? before);
+  void <a href=#dom-htmloptionscollection-add title=dom-HTMLOptionsCollection-add>add</a>(<a href=#htmloptgroupelement>HTMLOptGroupElement</a> element, optional <a href=#htmlelement>HTMLElement</a>? before);
+  void <a href=#dom-htmloptionscollection-add title=dom-HTMLOptionsCollection-add>add</a>(<a href=#htmloptionelement>HTMLOptionElement</a> element, long before);
+  void <a href=#dom-htmloptionscollection-add title=dom-HTMLOptionsCollection-add>add</a>(<a href=#htmloptgroupelement>HTMLOptGroupElement</a> element, long before);
+  void <a href=#dom-htmloptionscollection-remove title=dom-HTMLOptionsCollection-remove>remove</a>(long index);
+           attribute long <a href=#dom-htmloptionscollection-selectedindex title=dom-HTMLOptionsCollection-selectedIndex>selectedIndex</a>;
 };</pre>
 
   <dl class=domintro><dt><var title="">collection</var> . <code title=dom-HTMLOptionsCollection-length><a href=#dom-htmloptionscollection-length>length</a></code> [ = <var title="">value</var> ]</dt>
@@ -6907,12 +8788,11 @@ http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20html%3E..
     <p>When set to a greater number, adds new blank <code><a href=#the-option-element>option</a></code> elements to that container.</p>
    </dd>
 
-   <dt><var title="">element</var> = <var title="">collection</var> . <code title=dom-HTMLCollection-item><a href=#dom-htmlcollection-item>item</a></code>(<var title="">index</var>)</dt>
+   <dt><var title="">element</var> = <var title="">collection</var> . <code title=dom-HTMLCollection-item>item</code>(<var title="">index</var>)</dt>
    <dt><var title="">collection</var>[<var title="">index</var>]</dt>
    <dt><var title="">collection</var>(<var title="">index</var>)</dt>
    <dd>
     <p>Returns the item with index <var title="">index</var> from the collection. The items are sorted in <a href=#tree-order>tree order</a>.</p>
-    <p>Returns null if <var title="">index</var> is out of range.</p>
    </dd>
 
    <dt><var title="">element</var> = <var title="">collection</var> . <code title=dom-HTMLOptionsCollection-namedItem><a href=#dom-htmloptionscollection-nameditem>namedItem</a></code>(<var title="">name</var>)</dt>
@@ -6922,7 +8802,6 @@ http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20html%3E..
    <dd>
     <p>Returns the item with <a href=#concept-id title=concept-id>ID</a> or <code title=attr-option-name><a href=#attr-option-name>name</a></code> <var title="">name</var> from the collection.</p>
     <p>If there are multiple matching items, then a <code><a href=#nodelist>NodeList</a></code> object containing all those elements is returned.</p>
-    <p>Returns null if no element with that <a href=#concept-id title=concept-id>ID</a> could be found.</p>
    </dd>
 
    <dt><var title="">collection</var> . <code title=dom-HTMLOptionsCollection-add><a href=#dom-htmloptionscollection-add>add</a></code>(<var title="">element</var> [, <var title="">before</var> ] )</dt>
@@ -6935,17 +8814,26 @@ http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20html%3E..
     <p>If <var title="">before</var> is omitted, null, or a number out
     of range, then <var title="">element</var> will be added at the
     end of the list.</p>
-    <p>This method will throw a <code><a href=#hierarchy_request_err>HIERARCHY_REQUEST_ERR</a></code>
+    <p>This method will throw a <code><a href=#hierarchyrequesterror>HierarchyRequestError</a></code>
     exception if <var title="">element</var> is an ancestor of the
-    element into which it is to be inserted. If <var title="">element</var> is not an <code><a href=#the-option-element>option</a></code> or
-    <code><a href=#the-optgroup-element>optgroup</a></code> element, then the method does nothing.</p>
+    element into which it is to be inserted.</p>
+   </dd>
+
+   <dt><var title="">collection</var> . <code title=dom-HTMLOptionsCollection-selectedIndex><a href=#dom-htmloptionscollection-selectedindex>selectedIndex</a></code> [ = <var title="">value</var> ]</dt>
+
+   <dd>
+
+    <p>Returns the index of the first selected item, if any, or
+    &minus;1 if there is no selected item.</p>
+
+    <p>Can be set, to change the selection.</p>
+
    </dd>
 
   </dl><div class=impl>
 
-  <p>The object's <span>indices of the supported indexed
-  properties</span> are as defined for <code><a href=#htmlcollection>HTMLCollection</a></code>
-  objects.</p>
+  <p>The object's <a href=#supported-property-indices>supported property indices</a> are as
+  defined for <code><a href=#htmlcollection>HTMLCollection</a></code> objects.</p>
 
   <p>On getting, the <dfn id=dom-htmloptionscollection-length title=dom-HTMLOptionsCollection-length><code>length</code></dfn>
   attribute must return the number of nodes <a href=#represented-by-the-collection>represented by the
@@ -6961,7 +8849,7 @@ http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20html%3E..
   <code><a href=#htmloptionscollection>HTMLOptionsCollection</a></code> is rooted, where <var title="">n</var> is the difference between the two numbers (new
   value minus old value). Mutation events must be fired as if a
   <code><a href=#documentfragment>DocumentFragment</a></code> containing the new <code><a href=#the-option-element>option</a></code>
-  elements had been inserted.  If the new value is lower, then the
+  elements had been inserted. If the new value is lower, then the
   last <var title="">n</var> nodes in the collection must be removed
   from their parent nodes, where <var title="">n</var> is the
   difference between the two numbers (old value minus new value).</p>
@@ -6971,8 +8859,8 @@ http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20html%3E..
   children to existing <code><a href=#the-optgroup-element>optgroup</a></code> elements (though it can
   remove children from them).</p>
 
-  <p>The <span>names of the supported named properties</span> consist
-  of the values of all the <code title=attr-id><a href=#the-id-attribute>id</a></code> and <code title=attr-option-name><a href=#attr-option-name>name</a></code> attributes of all the elements
+  <p>The <a href=#supported-property-names>supported property names</a> consist of the values
+  of all the <code title=attr-id><a href=#the-id-attribute>id</a></code> and <code title=attr-option-name><a href=#attr-option-name>name</a></code> attributes of all the elements
   <a href=#represented-by-the-collection>represented by the collection</a>.</p>
 
   <p>The <dfn id=dom-htmloptionscollection-nameditem title=dom-HTMLOptionsCollection-namedItem><code>namedItem(<var title="">name</var>)</code></dfn> method must act according to the
@@ -6995,22 +8883,41 @@ http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20html%3E..
 
    <li>Return that <code><a href=#nodelist>NodeList</a></code> object.</li>
 
+  </ol><p>When the user agent is to <dfn id=dom-htmloptionscollection-setter title=dom-HTMLOptionsCollection-setter>set the value of a new
+  indexed property</dfn> for a given property index <var title="">index</var> to a new value <var title="">value</var>, it
+  must run the following algorithm:</p>
+
+  <ol><li><p>Let <var title="">length</var> be the number of nodes
+   <a href=#represented-by-the-collection>represented by the collection</a>.</li>
+
+   <li><p>Let <var title="">n</var> be <var title="">index</var> minus
+   <var title="">length</var>.</li>
+
+   <li><p>If <var title="">n</var> is greater than zero, then append
+   <span title=""><var title="">n</var>-1</span> new
+   <code><a href=#the-option-element>option</a></code> elements with no attributes and no child nodes
+   to the <code><a href=#the-select-element>select</a></code> element on which the
+   <code><a href=#htmloptionscollection>HTMLOptionsCollection</a></code> is rooted. Mutation events must
+   be fired as if a <code><a href=#documentfragment>DocumentFragment</a></code> containing the new
+   <code><a href=#the-option-element>option</a></code> elements had been inserted.</li>
+
+   <li><p>If <var title="">n</var> is greater than or equal to zero,
+   append <var title="">value</var> to the <code><a href=#the-select-element>select</a></code>
+   element. Otherwise, replace the <var title="">index</var>th element
+   in the collection by <var title="">value</var>.</li>
+
   </ol><p>The <dfn id=dom-htmloptionscollection-add title=dom-HTMLOptionsCollection-add><code>add(<var title="">element</var>, <var title="">before</var>)</code></dfn>
   method must act according to the following algorithm:</p>
 
-  <ol><li><p>If <var title="">element</var> is not an <code><a href=#the-option-element>option</a></code>
-   or <code><a href=#the-optgroup-element>optgroup</a></code> element, then return and abort these
-   steps.</li>
-
-   <li><p>If <var title="">element</var> is an ancestor of the
+  <ol><li><p>If <var title="">element</var> is an ancestor of the
    <code><a href=#the-select-element>select</a></code> element on which the
    <code><a href=#htmloptionscollection>HTMLOptionsCollection</a></code> is rooted, then throw a
-   <code><a href=#hierarchy_request_err>HIERARCHY_REQUEST_ERR</a></code> exception.</li>
+   <code><a href=#hierarchyrequesterror>HierarchyRequestError</a></code> exception.</li>
 
    <li><p>If <var title="">before</var> is an element, but that
    element isn't a descendant of the <code><a href=#the-select-element>select</a></code> element on
    which the <code><a href=#htmloptionscollection>HTMLOptionsCollection</a></code> is rooted, then throw
-   a <code><a href=#not_found_err>NOT_FOUND_ERR</a></code> exception.</li>
+   a <code><a href=#notfounderror>NotFoundError</a></code> exception.</li>
 
    <li><p>If <var title="">element</var> and <var title="">before</var> are the same element, then return and abort
    these steps.</li>
@@