<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.whatwg.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jgraham</id>
	<title>WHATWG Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.whatwg.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jgraham"/>
	<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/wiki/Special:Contributions/Jgraham"/>
	<updated>2026-05-13T10:31:36Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=Testsuite&amp;diff=10020</id>
		<title>Testsuite</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=Testsuite&amp;diff=10020"/>
		<updated>2016-01-18T17:33:26Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: Update testsuite page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tests for WHATWG specifications are maintained in the [http://github.com/w3c/web-platform-tests web-platform-tests] repository, along with those for many other web-platform features, including all those maintained by W3C (except, for historical reasons, CSS).&lt;br /&gt;
&lt;br /&gt;
Tests are contributed by community members, including implementers. In general specification editors are not responsible for maintaining tests along with the specification, due to the excess burden of work this would create. Therefore different specifications are accompanied by testsuites of varying breadth and depth.&lt;br /&gt;
&lt;br /&gt;
In order to contribute tests to the testsuite for a WHATWG specification, follow the instructions on [http://testthewebforward.org/docs/ Test the Web Forward].&lt;br /&gt;
&lt;br /&gt;
== Old lists of tests that maybe have not been ported to web platform tests? ==&lt;br /&gt;
&lt;br /&gt;
People should prune this list...&lt;br /&gt;
&lt;br /&gt;
* [[Test cases]]&lt;br /&gt;
* [http://www.whatwg.org/html5 The specification] has links to test in the status boxes.&lt;br /&gt;
* [http://samples.msdn.microsoft.com/ietestcenter/ IE&#039;s tests]&lt;br /&gt;
* [http://trac.webkit.org/browser/trunk/LayoutTests (Some of?) WebKit&#039;s tests]&lt;br /&gt;
* [http://mxr.mozilla.org/mozilla-central/find?string=test_.*%28html|svg%29%24&amp;amp;tree=mozilla-central&amp;amp;hint= Some of Mozilla&#039;s mochitests]&lt;br /&gt;
** [[Testsuite/Mozilla]]&lt;br /&gt;
* [http://mxr.mozilla.org/mozilla-central/find?string=reftest.list Some of Mozilla&#039;s reftests]&lt;br /&gt;
* [http://philip.html5.org/tests/canvas/suite/tests/ Philip&#039;s canvas tests]&lt;br /&gt;
* [http://hixie.ch/tests/adhoc/html/ Hixie&#039;s ad-hoc tests]&lt;br /&gt;
* [http://lachy.id.au/dev/markup/tests/html5/ Lachlan&#039;s tests]&lt;br /&gt;
* [http://hg.gsnedders.com/php-html-5-direct/file/tip/tests/numbersTest gsnedders&#039; number parsing tests]&lt;br /&gt;
* [http://simon.html5.org/test/html/ zcorpan&#039;s tests]&lt;br /&gt;
* [http://mathias.html5.org/tests/ Mathias’s tests]&lt;br /&gt;
* [http://hsivonen.iki.fi/test/moz/video-selection/ hsivonen&#039;s video tests]&lt;br /&gt;
* [http://www.w3.org/DOM/Test/ Document Object Model (DOM) Conformance Test Suites]&lt;br /&gt;
* [http://dev.w3.org/2006/webapi/WindowTestSuite/ Window test suite]&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=Forking&amp;diff=6393</id>
		<title>Forking</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=Forking&amp;diff=6393"/>
		<updated>2011-05-02T08:58:34Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this page is to summarize information and arguments relevant to whether it makes sense for web specification copyright licenses to permit [[Wikipedia:Fork (software development)|forking]].  For our purposes, forking means the ability for a third party to redistribute modified versions of the specification without the permission of the copyright holders.  Standard licenses that permit forking include [http://creativecommons.org/choose/zero/ CC0], the [http://opensource.org/licenses/mit-license.php MIT license], and the [http://www.opensource.org/licenses/bsd-license.php BSD licenses].&lt;br /&gt;
&lt;br /&gt;
More specifically, this page focuses on whether the W3C&#039;s HTML5 specification should allow forks, as the WHATWG version always has.&lt;br /&gt;
&lt;br /&gt;
== Existing forks of HTML ==&lt;br /&gt;
(based on [http://krijnhoetmer.nl/irc-logs/whatwg/20110430#l-179 IRC comment] by Maciej; possibly not everything here is strictly a fork, could use classification and explanation work)&lt;br /&gt;
&lt;br /&gt;
=== W3C-hosted forks ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.w3.org/TR/xhtml-basic/ XHTML Basic]&lt;br /&gt;
* [http://www.w3.org/TR/1999/NOTE-html40-mobile-19990315/ HTML 4 Mobile]&lt;br /&gt;
* [http://www.w3.org/TR/xhtml2/ XHTML 2]&lt;br /&gt;
* [http://www.w3.org/TR/xhtml-print/ XHTML-Print]&lt;br /&gt;
&lt;br /&gt;
=== W3C-published but disavowed forks ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.w3.org/TR/NOTE-Submission-HDML-spec.html HDML]&lt;br /&gt;
* [http://www.w3.org/TR/2002/NOTE-XHTMLplusSMIL-20020131/ XHTML+SMIL]&lt;br /&gt;
* [http://www.w3.org/TR/1998/NOTE-compactHTML-19980209/ CHTML]&lt;br /&gt;
&lt;br /&gt;
=== Other forks ===&lt;br /&gt;
&lt;br /&gt;
* [http://jp29.org/iso.htm ISO HTML]&lt;br /&gt;
* [http://www.openmobilealliance.org/tech/affiliates/wap/wap-277-xhtmlmp-20011029-a.pdf XHTML-MP]&lt;br /&gt;
* [http://www.wapforum.org/what/technical.htm WML] (apparently no free download)&lt;br /&gt;
* [http://webapp.etsi.org/workprogram/Report_WorkItem.asp?WKI_ID=19886 WTVML] (apparently no free download)&lt;br /&gt;
* [http://www.whatwg.org/specs/web-apps/current-work/multipage/ WHATWG HTML]&lt;br /&gt;
* [http://www.ce.org/Standards/browseByCommittee_2757.asp CE-HTML] (apparently only a preview available for free)&lt;br /&gt;
* [http://idpf.org/epub/30/spec/epub30-publications.html EPUB]&lt;br /&gt;
* [http://html4all.org/HTMLDraft.html HTML 4.1]&lt;br /&gt;
&lt;br /&gt;
== Organizational forks ==&lt;br /&gt;
One argument presented in favor of allowing forks is that if the W3C ever makes poor decisions that compromise the quality of its standards, other organizations should have the right to issue competing standards, with implementers agreeing to follow the better standard.  When the W3C owns the right to large, established specifications that it doesn&#039;t permit others to fork, this becomes harder.  Looking at cases where standards authors have abandoned an existing standards group to form their own should give an idea of whether this tends to be a good or bad thing.&lt;br /&gt;
&lt;br /&gt;
=== W3C competing with IETF ===&lt;br /&gt;
The W3C itself was founded at least partly because Tim Berners-Lee felt that standardization at the IETF wasn&#039;t working well.  As he writes in his book, [http://www.w3.org/People/Berners-Lee/Weaving/Overview.html &#039;&#039;Weaving the Web&#039;&#039;] (pp. 62-3):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Progress in the [IETF&#039;s] URI working group was slow, partly due to the number of endless philosophical rat holes down which technical conversations would disappear. . . . Sometimes there was a core philosophy being argued, and from my point of view that was not up for compromise.  Sometimes there was a basically arbitrary decision (like which punctuation characters to use) that I had already made, and changing it would only mean that millions of Web browsers and existing links would have to be changed.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In practice, the W3C has wound up cooperating with the IETF more than competing.&lt;br /&gt;
&lt;br /&gt;
=== WHATWG competing with W3C ===&lt;br /&gt;
After HTML 4.01 was finalized in 1998, no new features were added to the HTML markup language other than in XHTML variants that browsers didn&#039;t implement.  Thus HTML as a standard markup language did not progress at all between about 1998 and 2004.  In 2004, Mozilla and Opera requested permission from the W3C to work on improving non-XML-based versions of HTML, and they were denied permission.  Apple, Mozilla, and Opera then founded the WHATWG, which began work on a new version of the HTML specification outside the W3C.  In a couple of years, the WHATWG rewrote the HTML standard from scratch, made it drastically more precise, and added many new highly-demanded features (such as video and canvas) that were previously only available through proprietary plugins.  In 2007, the W3C formed an HTML Working Group again to work on non-XML-based versions of HTML, based on and in conjunction with the work of the WHATWG.&lt;br /&gt;
&lt;br /&gt;
== Modularization ==&lt;br /&gt;
&lt;br /&gt;
[http://www.w3.org/TR/xhtml-modularization/ XHTML Modularization] has the goal of &amp;quot;providing a means for subsetting and extending XHTML, a feature needed for extending XHTML&#039;s reach onto emerging platforms&amp;quot;. Although this is not technically a fork (in the sense that it does not imply taking the W3C spec text and rewriting portions of it), the ability to create new HTML-derived specs that add or replace functionality carries many of the same risks that are brought up in the context of forking.&lt;br /&gt;
&lt;br /&gt;
== Supposed risks of forking ==&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;A national government could create its own intentionally incompatible national version of the html specification in order to prevent general Web access from within that country&amp;quot;: This argument is wrong at multiple levels:&lt;br /&gt;
** A national government would not be bound by copyright anyway. Even [http://arstechnica.com/tech-policy/news/2008/08/air-force-cracks-software-carpet-bombs-dmca.ars the US government] does not consider itself bound by copyright law.&lt;br /&gt;
** A specification is only needed if there is a desire for multiple independent interoperable implementations, i.e., if competition is being encouraged. But what government would on the one hand encourage competition amongst browser vendors and on the other hand prevent those browser vendors from implementing other versions of HTML?&lt;br /&gt;
** In practice, it would be economically impractical to control the Web by developing a parallel HTML that is similar enough that the W3C spec could be used as a basis, but different enough that it is incompatible with the Web&#039;s HTML. In reality, countries use content filtering software to do such control (c.f. China).&lt;br /&gt;
** Whether the W3C allows forking or not, and even if we grant that a license could stop this, this scenario could already happen because the entire HTML spec is already under a liberal license at the WHATWG.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Other undesirable forks could be for device specific variants of specs where it would be better for those groups to come into W3C [...] than to splinter html&amp;quot;: When the W3C forks HTML (as it has in the past, see the list above), it is just as bad as when anyone else does. There is nothing special about the W3C here.&lt;br /&gt;
&lt;br /&gt;
== Advantages of allowing forking ==&lt;br /&gt;
&lt;br /&gt;
* It encourages the W3C to do a good job, because of the risk that if the W3C does &#039;&#039;not&#039;&#039; do a good job, it will lose relevance. This has already been shown to be beneficial both to the W3C and the Web at large with HTML5 itself: the W3C tried to strongarm the Web into abandoning HTML, and when the WHATWG worked on it instead, the W3C changed its mind. This demonstrates the benefit of allowing forking (though in this case, it turns out copyright restrictions were not any kind of barrier to forking, because HTML4 wasn&#039;t good enough to be a useful starting point and we instead started from scratch).&lt;br /&gt;
&lt;br /&gt;
== Reasons preventing forking is not necessary ==&lt;br /&gt;
&lt;br /&gt;
* If the W3C is the best place to work on specs, then people will not need to fork, they&#039;ll just work on them at the W3C.&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=Forking&amp;diff=6391</id>
		<title>Forking</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=Forking&amp;diff=6391"/>
		<updated>2011-05-02T08:49:26Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: /* Other forks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of this page is to summarize information and arguments relevant to whether it makes sense for web specification copyright licenses to permit [[Wikipedia:Fork (software development)|forking]].  For our purposes, forking means the ability for a third party to redistribute modified versions of the specification without the permission of the copyright holders.  Standard licenses that permit forking include [http://creativecommons.org/choose/zero/ CC0], the [http://opensource.org/licenses/mit-license.php MIT license], and the [http://www.opensource.org/licenses/bsd-license.php BSD licenses].&lt;br /&gt;
&lt;br /&gt;
More specifically, this page focuses on whether the W3C&#039;s HTML5 specification should allow forks, as the WHATWG version always has.&lt;br /&gt;
&lt;br /&gt;
== Existing forks of HTML ==&lt;br /&gt;
(based on [http://krijnhoetmer.nl/irc-logs/whatwg/20110430#l-179 IRC comment] by Maciej; possibly not everything here is strictly a fork, could use classification and explanation work)&lt;br /&gt;
&lt;br /&gt;
=== W3C-hosted forks ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.w3.org/TR/1998/NOTE-compactHTML-19980209/ CHTML]&lt;br /&gt;
* [http://www.w3.org/TR/xhtml-basic/ XHTML Basic]&lt;br /&gt;
* [http://www.w3.org/TR/xhtml2/ XHTML 2]&lt;br /&gt;
* [http://www.w3.org/TR/xhtml-print/ XHTML-Print]&lt;br /&gt;
* [http://www.w3.org/TR/NOTE-Submission-HDML-spec.html HDML]&lt;br /&gt;
&lt;br /&gt;
=== Other forks ===&lt;br /&gt;
&lt;br /&gt;
* [http://jp29.org/iso.htm ISO HTML]&lt;br /&gt;
* [http://www.openmobilealliance.org/tech/affiliates/wap/wap-277-xhtmlmp-20011029-a.pdf XHTML-MP]&lt;br /&gt;
* [http://www.wapforum.org/what/technical.htm WML] (apparently no free download)&lt;br /&gt;
* [http://webapp.etsi.org/workprogram/Report_WorkItem.asp?WKI_ID=19886 WTVML] (apparently no free download)&lt;br /&gt;
* [http://www.whatwg.org/specs/web-apps/current-work/multipage/ WHATWG HTML]&lt;br /&gt;
* [http://www.ce.org/Standards/browseByCommittee_2757.asp CE-HTML] (apparently only a preview available for free)&lt;br /&gt;
* [http://idpf.org/epub/30/spec/epub30-publications.html EPUB]&lt;br /&gt;
* [http://html4all.org/HTMLDraft.html HTML 4.1]&lt;br /&gt;
&lt;br /&gt;
== Organizational forks ==&lt;br /&gt;
One argument presented in favor of allowing forks is that if the W3C ever makes poor decisions that compromise the quality of its standards, other organizations should have the right to issue competing standards, with implementers agreeing to follow the better standard.  When the W3C owns the right to large, established specifications that it doesn&#039;t permit others to fork, this becomes harder.  Looking at cases where standards authors have abandoned an existing standards group to form their own should give an idea of whether this tends to be a good or bad thing.&lt;br /&gt;
&lt;br /&gt;
=== W3C competing with IETF ===&lt;br /&gt;
The W3C itself was founded at least partly because Tim Berners-Lee felt that standardization at the IETF wasn&#039;t working well.  As he writes in his book, [http://www.w3.org/People/Berners-Lee/Weaving/Overview.html &#039;&#039;Weaving the Web&#039;&#039;] (pp. 62-3):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Progress in the [IETF&#039;s] URI working group was slow, partly due to the number of endless philosophical rat holes down which technical conversations would disappear. . . . Sometimes there was a core philosophy being argued, and from my point of view that was not up for compromise.  Sometimes there was a basically arbitrary decision (like which punctuation characters to use) that I had already made, and changing it would only mean that millions of Web browsers and existing links would have to be changed.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In practice, the W3C has wound up cooperating with the IETF more than competing.&lt;br /&gt;
&lt;br /&gt;
=== WHATWG competing with W3C ===&lt;br /&gt;
After HTML 4.01 was finalized in 1998, no new features were added to the HTML markup language other than in XHTML variants that browsers didn&#039;t implement.  Thus HTML as a standard markup language did not progress at all between about 1998 and 2004.  In 2004, Mozilla and Opera requested permission from the W3C to work on improving non-XML-based versions of HTML, and they were denied permission.  Apple, Mozilla, and Opera then founded the WHATWG, which began work on a new version of the HTML specification outside the W3C.  In a couple of years, the WHATWG rewrote the HTML standard from scratch, made it drastically more precise, and added many new highly-demanded features (such as video and canvas) that were previously only available through proprietary plugins.  In 2007, the W3C formed an HTML Working Group again to work on non-XML-based versions of HTML, based on and in conjunction with the work of the WHATWG.&lt;br /&gt;
&lt;br /&gt;
== Supposed risks of forking ==&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;A national government could create its own intentionally incompatible national version of the html specification in order to prevent general Web access from within that country&amp;quot;: This argument is wrong at multiple levels:&lt;br /&gt;
** A national government would not be bound by copyright anyway. Even [http://arstechnica.com/tech-policy/news/2008/08/air-force-cracks-software-carpet-bombs-dmca.ars the US government] does not consider itself bound by copyright law.&lt;br /&gt;
** A specification is only needed if there is a desire for multiple independent interoperable implementations, i.e., if competition is being encouraged. But what government would on the one hand encourage competition amongst browser vendors and on the other hand prevent those browser vendors from implementing other versions of HTML?&lt;br /&gt;
** In practice, it would be economically impractical to control the Web by developing a parallel HTML that is similar enough that the W3C spec could be used as a basis, but different enough that it is incompatible with the Web&#039;s HTML. In reality, countries use content filtering software to do such control (c.f. China).&lt;br /&gt;
** Whether the W3C allows forking or not, and even if we grant that a license could stop this, this scenario could already happen because the entire HTML spec is already under a liberal license at the WHATWG.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Other undesirable forks could be for device specific variants of specs where it would be better for those groups to come into W3C [...] than to splinter html&amp;quot;: When the W3C forks HTML (as it has in the past, see the list above), it is just as bad as when anyone else does. There is nothing special about the W3C here.&lt;br /&gt;
&lt;br /&gt;
== Advantages of allowing forking ==&lt;br /&gt;
&lt;br /&gt;
* It encourages the W3C to do a good job, because of the risk that if the W3C does &#039;&#039;not&#039;&#039; do a good job, it will lose relevance. This has already been shown to be beneficial both to the W3C and the Web at large with HTML5 itself: the W3C tried to strongarm the Web into abandoning HTML, and when the WHATWG worked on it instead, the W3C changed its mind. This demonstrates the benefit of allowing forking (though in this case, it turns out copyright restrictions were not any kind of barrier to forking, because HTML4 wasn&#039;t good enough to be a useful starting point and we instead started from scratch).&lt;br /&gt;
&lt;br /&gt;
== Reasons preventing forking is not necessary ==&lt;br /&gt;
&lt;br /&gt;
* If the W3C is the best place to work on specs, then people will not need to fork, they&#039;ll just work on them at the W3C.&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=Testsuite/Requirements&amp;diff=6257</id>
		<title>Testsuite/Requirements</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=Testsuite/Requirements&amp;diff=6257"/>
		<updated>2011-02-15T08:20:05Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: Created page with &amp;#039;= HTML Testsuite Requirements =  == Improved Test Runner ==  The current test runner is optimised mainly for manual tests. An in-browser test runner that deals automatically with...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= HTML Testsuite Requirements =&lt;br /&gt;
&lt;br /&gt;
== Improved Test Runner ==&lt;br /&gt;
&lt;br /&gt;
The current test runner is optimised mainly for manual tests. An in-browser test runner that deals automatically with the results of javascript tests is essential. It should also deal with self-describing reftests and manual tests in a sane way.&lt;br /&gt;
&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
&lt;br /&gt;
* Produces a machine-readable report in some format (could be current XML or some other possibly non-XML format).&lt;br /&gt;
&lt;br /&gt;
* Loads tests automatically based on test manifest files containing metadata about test uri, type, etc.&lt;br /&gt;
&lt;br /&gt;
* Allows all or a subset of tests to be run&lt;br /&gt;
&lt;br /&gt;
* Hooks into testharness to extract the results of the javascript tests without human intervention&lt;br /&gt;
&lt;br /&gt;
* Allows reftests to be run by humans e.g. by allowing user to flick between test view and ref view to spot differences (automatic running of reftests will require browser-specific code and is explicitly out of scope)&lt;br /&gt;
&lt;br /&gt;
* Allows manual tests to be run by humans&lt;br /&gt;
&lt;br /&gt;
=== Possible considerations ===&lt;br /&gt;
&lt;br /&gt;
* Tests that require a top level browsing context&lt;br /&gt;
&lt;br /&gt;
== Annotation of Spec ==&lt;br /&gt;
&lt;br /&gt;
In order to know which areas of the spec are well tested and hence have a sense for (an upper bound on) the completeness of the testsuite as well as the areas where it would be most profitable to direct new testing effort, it would be beneficial to produce an annotated version of the spec documenting tests that cover given requirements.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
* Map each test onto a piece of spec &lt;br /&gt;
&lt;br /&gt;
* Fine grained definition of &amp;quot;piece&amp;quot;; some sections are long and contain many normative requirements so paragraph-level is probably the minimum useful level&lt;br /&gt;
&lt;br /&gt;
* Good behaviour in the face of spec modifications, deletions, insertions and rearragements.&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=ParserIssues&amp;diff=4924</id>
		<title>ParserIssues</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=ParserIssues&amp;diff=4924"/>
		<updated>2010-06-11T08:08:00Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Filed bugs ==&lt;br /&gt;
&lt;br /&gt;
* http://www.w3.org/Bugs/Public/show_bug.cgi?id=9659 Initial U+0000 should not set frameset-ok to &amp;quot;not ok&amp;quot;&lt;br /&gt;
* http://www.w3.org/Bugs/Public/show_bug.cgi?id=9582 Steps for handling end tags in the &amp;quot;in foreign&amp;quot; mode get stuck in an infinite loop&lt;br /&gt;
* http://www.w3.org/Bugs/Public/show_bug.cgi?id=9581 Steps for handling end tags in the &amp;quot;in foreign&amp;quot; mode may compare the name of an already-popped node&lt;br /&gt;
* http://www.w3.org/Bugs/Public/show_bug.cgi?id=9580 Steps for handling end tags in the &amp;quot;in foreign&amp;quot; mode walk past the root node in the stack&lt;br /&gt;
* http://www.w3.org/Bugs/Public/show_bug.cgi?id=9767 Consider ignoring document.write() when IE ignores it if IE has a sane condition for ignoring it&lt;br /&gt;
* http://www.w3.org/Bugs/Public/show_bug.cgi?id=9829 &amp;lt;button&amp;gt; should be scoping for the purpose of implicitly closing &amp;lt;nowiki&amp;gt;&amp;lt;p&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* http://www.w3.org/Bugs/Public/show_bug.cgi?id=9831 Handling of EOF in foreignContent mode causes all tags to be popped of stack of open elements&lt;br /&gt;
* http://www.w3.org/Bugs/Public/show_bug.cgi?id=9843 &amp;lt;nowiki&amp;gt;Specced behavior for document.write(&amp;quot;&amp;lt;link rel=stylesheet href=...&amp;gt;&amp;lt;script&amp;gt;...&amp;lt;/script&amp;gt;...&amp;quot;) matches none of the top 4 engines&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* http://www.w3.org/Bugs/Public/show_bug.cgi?id=9910 &amp;lt;nowiki&amp;gt;&amp;lt;basefont&amp;gt;  and &amp;lt;bgsound&amp;gt; should not break out of &#039;in head&#039;, should be treated as a void elements within &amp;lt;head&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Possible other issues ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;&amp;lt;!DOCTYPE html&amp;gt;&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;&amp;lt;i&amp;gt;&amp;lt;u&amp;gt;&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;X&amp;lt;/nowiki&amp;gt; - should spaceness of character have any effect in InBody mode?&lt;br /&gt;
* To enable the parser to decide whether a given script can call document.write() (for optimizing speculative parsing), it is necessary for the execution properties of the script as seen at start tag to remain constant until the end tag is parsed. This can be achieved by freezing the effective values for the src, defer and async attributes when a parser-inserted script is inserted to the tree. There&#039;s no non-racy way for a script to detect this when the script comes from the network stream, so this is OK. However, if the parser implements the same script execution logic for the network stream case and the document.write case in the same way, there is a non-racy way to detect the implementation details in the document.write() case. For an implementation that does speculative off-the-main-thread parsing, it is a developer time-consuming theoretical purity exercise to make the document.write() case correct per spec. OTOH, if the spec enshrines the freezing behavior as correct, it&#039;ll be a developer time-consuming theoretical purity exercise for implementations that don&#039;t have the kind of speculative parsing that needs the freezing.&lt;br /&gt;
* Having &amp;lt;nowiki&amp;gt;-- &amp;gt;&amp;lt;/nowiki&amp;gt; terminate comments breaks CNN Money https://bugzilla.mozilla.org/show_bug.cgi?id=570309&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=ParserIssues&amp;diff=4912</id>
		<title>ParserIssues</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=ParserIssues&amp;diff=4912"/>
		<updated>2010-06-02T13:40:52Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Filed bugs ==&lt;br /&gt;
&lt;br /&gt;
* http://www.w3.org/Bugs/Public/show_bug.cgi?id=9659 Initial U+0000 should not set frameset-ok to &amp;quot;not ok&amp;quot;&lt;br /&gt;
* http://www.w3.org/Bugs/Public/show_bug.cgi?id=9582 Steps for handling end tags in the &amp;quot;in foreign&amp;quot; mode get stuck in an infinite loop&lt;br /&gt;
* http://www.w3.org/Bugs/Public/show_bug.cgi?id=9581 Steps for handling end tags in the &amp;quot;in foreign&amp;quot; mode may compare the name of an already-popped node&lt;br /&gt;
* http://www.w3.org/Bugs/Public/show_bug.cgi?id=9580 Steps for handling end tags in the &amp;quot;in foreign&amp;quot; mode walk past the root node in the stack&lt;br /&gt;
* http://www.w3.org/Bugs/Public/show_bug.cgi?id=9767 Consider ignoring document.write() when IE ignores it if IE has a sane condition for ignoring it&lt;br /&gt;
* http://www.w3.org/Bugs/Public/show_bug.cgi?id=9829 &amp;lt;button&amp;gt; should be scoping for the purpose of implicitly closing &amp;lt;nowiki&amp;gt;&amp;lt;p&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* http://www.w3.org/Bugs/Public/show_bug.cgi?id=9831 Handling of EOF in foreignContent mode causes all tags to be popped of stack of open elements&lt;br /&gt;
&lt;br /&gt;
== Possible other issues ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;&amp;lt;!DOCTYPE html&amp;gt;&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;&amp;lt;i&amp;gt;&amp;lt;u&amp;gt;&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;X&amp;lt;/nowiki&amp;gt; - should spaceness of character have any effect in InBody mode?&lt;br /&gt;
* To enable the parser to decide whether a given script can call document.write() (for optimizing speculative parsing), it is necessary for the execution properties of the script as seen at start tag to remain constant until the end tag is parsed. This can be achieved by freezing the effective values for the src, defer and async attributes when a parser-inserted script is inserted to the tree. There&#039;s no non-racy way for a script to detect this when the script comes from the network stream, so this is OK. However, if the parser implements the same script execution logic for the network stream case and the document.write case in the same way, there is a non-racy way to detect the implementation details in the document.write() case. For an implementation that does speculative off-the-main-thread parsing, it is a developer time-consuming theoretical purity exercise to make the document.write() case correct per spec. OTOH, if the spec enshrines the freezing behavior as correct, it&#039;ll be a developer time-consuming theoretical purity exercise for implementations that don&#039;t have the kind of speculative parsing that needs the freezing.&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=ParserIssues&amp;diff=4911</id>
		<title>ParserIssues</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=ParserIssues&amp;diff=4911"/>
		<updated>2010-06-02T13:40:28Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Filed bugs ==&lt;br /&gt;
&lt;br /&gt;
* http://www.w3.org/Bugs/Public/show_bug.cgi?id=9659 Initial U+0000 should not set frameset-ok to &amp;quot;not ok&amp;quot;&lt;br /&gt;
* http://www.w3.org/Bugs/Public/show_bug.cgi?id=9582 Steps for handling end tags in the &amp;quot;in foreign&amp;quot; mode get stuck in an infinite loop&lt;br /&gt;
* http://www.w3.org/Bugs/Public/show_bug.cgi?id=9581 Steps for handling end tags in the &amp;quot;in foreign&amp;quot; mode may compare the name of an already-popped node&lt;br /&gt;
* http://www.w3.org/Bugs/Public/show_bug.cgi?id=9580 Steps for handling end tags in the &amp;quot;in foreign&amp;quot; mode walk past the root node in the stack&lt;br /&gt;
* http://www.w3.org/Bugs/Public/show_bug.cgi?id=9767 Consider ignoring document.write() when IE ignores it if IE has a sane condition for ignoring it&lt;br /&gt;
* http://www.w3.org/Bugs/Public/show_bug.cgi?id=9829 &amp;lt;button&amp;gt; should be scoping for the purpose of implicitly closing &amp;lt;p&amp;gt;&lt;br /&gt;
* http://www.w3.org/Bugs/Public/show_bug.cgi?id=9831 Handling of EOF in foreignContent mode causes all tags to be popped of stack of open elements&lt;br /&gt;
&lt;br /&gt;
== Possible other issues ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;&amp;lt;!DOCTYPE html&amp;gt;&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;&amp;lt;i&amp;gt;&amp;lt;u&amp;gt;&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;X&amp;lt;/nowiki&amp;gt; - should spaceness of character have any effect in InBody mode?&lt;br /&gt;
* To enable the parser to decide whether a given script can call document.write() (for optimizing speculative parsing), it is necessary for the execution properties of the script as seen at start tag to remain constant until the end tag is parsed. This can be achieved by freezing the effective values for the src, defer and async attributes when a parser-inserted script is inserted to the tree. There&#039;s no non-racy way for a script to detect this when the script comes from the network stream, so this is OK. However, if the parser implements the same script execution logic for the network stream case and the document.write case in the same way, there is a non-racy way to detect the implementation details in the document.write() case. For an implementation that does speculative off-the-main-thread parsing, it is a developer time-consuming theoretical purity exercise to make the document.write() case correct per spec. OTOH, if the spec enshrines the freezing behavior as correct, it&#039;ll be a developer time-consuming theoretical purity exercise for implementations that don&#039;t have the kind of speculative parsing that needs the freezing.&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=ParserIssues&amp;diff=4907</id>
		<title>ParserIssues</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=ParserIssues&amp;diff=4907"/>
		<updated>2010-05-31T10:48:01Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: Created page with &amp;#039;== Filed bugs ==  * http://www.w3.org/Bugs/Public/show_bug.cgi?id=9659 Initial U+0000 should not set frameset-ok to &amp;quot;not ok&amp;quot; * http://www.w3.org/Bugs/Public/show_bug.cgi?id=9582 ...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Filed bugs ==&lt;br /&gt;
&lt;br /&gt;
* http://www.w3.org/Bugs/Public/show_bug.cgi?id=9659 Initial U+0000 should not set frameset-ok to &amp;quot;not ok&amp;quot;&lt;br /&gt;
* http://www.w3.org/Bugs/Public/show_bug.cgi?id=9582 Steps for handling end tags in the &amp;quot;in foreign&amp;quot; mode get stuck in an infinite loop&lt;br /&gt;
* http://www.w3.org/Bugs/Public/show_bug.cgi?id=9581  Steps for handling end tags in the &amp;quot;in foreign&amp;quot; mode may compare the name of an already-popped node&lt;br /&gt;
* http://www.w3.org/Bugs/Public/show_bug.cgi?id=9580 Steps for handling end tags in the &amp;quot;in foreign&amp;quot; mode walk past the root node in the stack&lt;br /&gt;
&lt;br /&gt;
== Possible other issues ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;&amp;lt;!DOCTYPE html&amp;gt;&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;&amp;lt;i&amp;gt;&amp;lt;u&amp;gt;&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;X&amp;lt;/nowiki&amp;gt; - should spaceness of character have any effect in InBody mode?&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=Web_ECMAScript&amp;diff=3938</id>
		<title>Web ECMAScript</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=Web_ECMAScript&amp;diff=3938"/>
		<updated>2009-08-13T13:31:23Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: /* RegExp */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for documenting the differences between the ES5 draft and the requirements for ECMAScript implementations in web browsers.&lt;br /&gt;
&lt;br /&gt;
== Identifiers ==&lt;br /&gt;
&lt;br /&gt;
(this is very rough)&lt;br /&gt;
&lt;br /&gt;
Identifiers containing escape sequences are not equivalent to fully unescaped identifiers in the case that, after fully unescaping identifier, it is a ReservedWord. In particular it is possible to create Identifiers that unescape to a reserved word so long as at least one character is fully escaped. Subsequent use of such identifiers must also have at least one character escaped (otherwise the reserved word will be used instead) but it need not be the same character(s) as that originally used to create the identifier.&lt;br /&gt;
&lt;br /&gt;
== 15.5.4 Properties of the String Prototype Object ==&lt;br /&gt;
&lt;br /&gt;
Several extra methods are found on String.prototype for wrapping text in HTML elements (these are all generic; the this value need not be a String object):&lt;br /&gt;
&lt;br /&gt;
Algorithm ToHTMLTag(tag_name, content, attribute_name, attribute_value):&lt;br /&gt;
#if attribute_name is undefined return &amp;quot;&amp;lt;&amp;quot; + tag_name + &amp;quot;&amp;gt;&amp;quot; + content + &amp;quot;&amp;lt;/&amp;quot; + tag_name + &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
#otherwise return &amp;quot;&amp;lt;&amp;quot; + tag_name + &amp;quot; &amp;quot; + attribute_name + &amp;quot;=\&amp;quot;&amp;quot; + attribute_value + &amp;quot;\&amp;quot;&amp;gt;&amp;quot; + content + &amp;quot;&amp;lt;/&amp;quot; + tag_name + &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.anchor(name) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let n be ToString(name)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;a&amp;quot;, content, &amp;quot;name&amp;quot;, n)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.big() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;big&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.blink() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;blink&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.bold() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;b&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.fixed() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;tt&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.fontcolor(color) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let attribute_value be ToString(color)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;font&amp;quot;, content, &amp;quot;color&amp;quot;, attribute_value)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.fontsize(size) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let attribute_value be ToString(size)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;font&amp;quot;, content, &amp;quot;size&amp;quot;, attribute_value)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.italics() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;i&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.link(href) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let attribute_value be ToString(href)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;a&amp;quot;, content, &amp;quot;href&amp;quot;, attribute_value)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.small() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;small&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.strike() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;strike&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.sub() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;sub&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.sup() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;sup&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
== RegExp ==&lt;br /&gt;
&lt;br /&gt;
After a regexp is executed the RegExp constructor object has properties $1...$9 which are assigned the values of the first 9 match groups from the previous regexp. (more detail here)&lt;br /&gt;
&lt;br /&gt;
DecimalEscapes in CharacterRanges all behave like \0 rather than throwing syntax errors i.e. /[\1-Z]/ will match any character with a codepoint between 0 and 90.&lt;br /&gt;
&lt;br /&gt;
== Date ==&lt;br /&gt;
&lt;br /&gt;
=== 15.9.4.3 Date.UTC ===&lt;br /&gt;
&lt;br /&gt;
When called with fewer than 2 arguments Date.UTC must return NaN.&lt;br /&gt;
&lt;br /&gt;
== Global scope ==&lt;br /&gt;
&lt;br /&gt;
ES5 claims the global scope &amp;quot;this&amp;quot; is the same as the global object, which is not always true in HTML5.&lt;br /&gt;
&lt;br /&gt;
== Eval ==&lt;br /&gt;
&lt;br /&gt;
Use of eval not called &amp;quot;eval&amp;quot;. Shoud work but implementations differ on the scope (Spidermonkey first tries global and then local if the object as not found globally, JScript uses local scope, others use global scope), may not have strong compat requirements&lt;br /&gt;
&lt;br /&gt;
eval.apply(this, code) should work but scope again varies when &amp;quot;this&amp;quot; is not the global object&lt;br /&gt;
&lt;br /&gt;
eval.apply({}, code) should throw EvalError&lt;br /&gt;
&lt;br /&gt;
== Date Parsing ==&lt;br /&gt;
&lt;br /&gt;
TODO:This is a mess&lt;br /&gt;
&lt;br /&gt;
== HTML comments ==&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;!-- is a line comment (same as //)&lt;br /&gt;
&lt;br /&gt;
In JScript, the following are ignored if they are at the end of the script (i.e. just followed by whitespace lines): either (1) a line that starts with just whitespace and comments and consists of &amp;quot;--&amp;gt;&amp;quot; followed by anything except new lines and finally followed by another &amp;quot;--&amp;gt;&amp;quot;, or (2) one or two lines that start with just whitespace and comments and consist of just &amp;quot;--&amp;gt;&amp;quot;. --&amp;gt; at the end of the last line of the script causes the line to be ignored unless the &amp;quot;--&amp;gt;&amp;quot; occurs within a comment. The last non-whitespace line of the script is ignored if it ends with &amp;quot;--&amp;gt;&amp;quot; and doesn&#039;t contain &amp;quot;//&amp;quot; or &amp;quot;&amp;amp;lt;!--&amp;quot; (but not in eval).&lt;br /&gt;
&lt;br /&gt;
In Futhark, the following is ignored if it is at the end of the script (i.e. just followed by whitespace lines): a line that starts with just whitespace and comments and consists of &amp;quot;--&amp;gt;&amp;quot;, and &amp;lt;em&amp;gt;optionally&amp;lt;/em&amp;gt; followed by anything except new lines and finally followed by another &amp;quot;--&amp;gt;&amp;quot;. Moreover, a script can end with an open multiline comment if it ends with &amp;quot;--&amp;gt;&amp;quot; on the same line. The last non-whitespace line of the script is ignored if it ends with &amp;quot;--&amp;gt;&amp;quot; and doesn&#039;t contain &amp;quot;//&amp;quot;&amp;lt;!-- or &amp;quot;&amp;amp;lt;!--&amp;quot;--&amp;gt; (but not in eval).&lt;br /&gt;
&lt;br /&gt;
In SpiderMonkey, &amp;quot;--&amp;gt;&amp;quot; on any line that starts with just whitespace and comments is treated as a line comment (same as //). (Also, ;version=1.6, 1.7 or 1.8 or ;e4x=1 enables E4X &amp;amp;lt;!-- --&amp;gt; comments.)&lt;br /&gt;
&lt;br /&gt;
In Nitro and V8, &amp;quot;--&amp;gt;&amp;quot; on any line that starts with just whitespace (but not comments) is treated as a line comment (same as //).&lt;br /&gt;
&lt;br /&gt;
== Property Enumeration ==&lt;br /&gt;
&lt;br /&gt;
Enumeration of objects is in insertion order (but host property order compared to user defined property order does not seem to be significant)&lt;br /&gt;
&lt;br /&gt;
== Object Properties ==&lt;br /&gt;
&lt;br /&gt;
All objects have a mutable __proto__ property that is a reference to the prototype of the object. Note that ES5 defines that objects with extensible:false must not have their prototype mutated. In the case that setting an objects __proto__ would cause a prototype chain to become cyclic, the setter must fail and throw Error().&lt;br /&gt;
&lt;br /&gt;
== Getters and Setters ==&lt;br /&gt;
&lt;br /&gt;
 * __lookupGetter__&lt;br /&gt;
 * __lookupSetter__&lt;br /&gt;
 * __defineGetter__&lt;br /&gt;
 * __defineSetter__&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=Web_ECMAScript&amp;diff=3775</id>
		<title>Web ECMAScript</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=Web_ECMAScript&amp;diff=3775"/>
		<updated>2009-06-22T09:31:41Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for documenting the differences between the ES5 draft and the requirements for ECMAScript implementations in web browsers.&lt;br /&gt;
&lt;br /&gt;
== Identifiers ==&lt;br /&gt;
&lt;br /&gt;
(this is very rough)&lt;br /&gt;
&lt;br /&gt;
Identifiers containing escape sequences are not equivalent to fully unescaped identifiers in the case that, after fully unescaping identifier, it is a ReservedWord. In particular it is possible to create Identifiers that unescape to a reserved word so long as at least one character is fully escaped. Subsequent use of such identifiers must also have at least one character escaped (otherwise the reserved word will be used instead) but it need not be the same character(s) as that originally used to create the identifier.&lt;br /&gt;
&lt;br /&gt;
== 15.5.4 Properties of the String Prototype Object ==&lt;br /&gt;
&lt;br /&gt;
Several extra methods are found on String.prototype for wrapping text in HTML elements (these are all generic; the this value need not be a String object):&lt;br /&gt;
&lt;br /&gt;
Algorithm ToHTMLTag(tag_name, content, attribute_name, attribute_value):&lt;br /&gt;
#if attribute_name is undefined return &amp;quot;&amp;lt;&amp;quot; + tag_name + &amp;quot;&amp;gt;&amp;quot; + content + &amp;quot;&amp;lt;/&amp;quot; + tag_name + &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
#otherwise return &amp;quot;&amp;lt;&amp;quot; + tag_name + &amp;quot; &amp;quot; + attribute_name + &amp;quot;=\&amp;quot;&amp;quot; + attribute_value + &amp;quot;\&amp;quot;&amp;gt;&amp;quot; + content + &amp;quot;&amp;lt;/&amp;quot; + tag_name + &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.anchor(name) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let n be ToString(name)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;a&amp;quot;, content, &amp;quot;name&amp;quot;, n)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.big() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;big&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.blink() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;blink&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.bold() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;b&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.fixed() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;tt&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.fontcolor(color) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let attribute_value be ToString(color)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;font&amp;quot;, content, &amp;quot;color&amp;quot;, attribute_value)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.fontsize(size) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let attribute_value be ToString(size)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;font&amp;quot;, content, &amp;quot;size&amp;quot;, attribute_value)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.italics() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;i&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.link(href) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let attribute_value be ToString(href)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;a&amp;quot;, content, &amp;quot;href&amp;quot;, attribute_value)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.small() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;small&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.strike() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;strike&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.sub() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;sub&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.sup() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;sup&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
== RegExp ==&lt;br /&gt;
&lt;br /&gt;
After a regep is executed the RegExp constructor object has properties $1...$9 which are assigned the values of the first 9 match groups from the previous regexp. (more detail here)&lt;br /&gt;
&lt;br /&gt;
== Date ==&lt;br /&gt;
&lt;br /&gt;
=== 15.9.4.3 Date.UTC ===&lt;br /&gt;
&lt;br /&gt;
When called with fewer than 2 arguments Date.UTC must return NaN.&lt;br /&gt;
&lt;br /&gt;
== Global scope ==&lt;br /&gt;
&lt;br /&gt;
ES3.1 claims the global scope &amp;quot;this&amp;quot; is the same as the global object, which is not always true in HTML5.&lt;br /&gt;
&lt;br /&gt;
== Eval ==&lt;br /&gt;
&lt;br /&gt;
Use of eval not called &amp;quot;eval&amp;quot;. Shoud work but implementations differ on the scope (Spidermonkey first tries global and then local if the object as not found globally, JScript uses local scope, others use global scope), may not have strong compat requirements&lt;br /&gt;
&lt;br /&gt;
eval.apply(this, code) should work but scope again varies when &amp;quot;this&amp;quot; is not the global object&lt;br /&gt;
&lt;br /&gt;
eval.apply({}, code) should throw EvalError&lt;br /&gt;
&lt;br /&gt;
== Date Parsing ==&lt;br /&gt;
&lt;br /&gt;
TODO:This is a mess&lt;br /&gt;
&lt;br /&gt;
== HTML comments ==&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;!-- is a line comment (same as //)&lt;br /&gt;
&lt;br /&gt;
In JScript, the following are ignored if they are at the end of the script (i.e. just followed by whitespace lines): either (1) a line that starts with just whitespace and comments and consists of &amp;quot;--&amp;gt;&amp;quot; followed by anything except new lines and finally followed by another &amp;quot;--&amp;gt;&amp;quot;, or (2) one or two lines that start with just whitespace and comments and consist of just &amp;quot;--&amp;gt;&amp;quot;. --&amp;gt; at the end of the last line of the script causes the line to be ignored unless the &amp;quot;--&amp;gt;&amp;quot; occurs within a comment. The last non-whitespace line of the script is ignored if it ends with &amp;quot;--&amp;gt;&amp;quot; and doesn&#039;t contain &amp;quot;//&amp;quot; or &amp;quot;&amp;amp;lt;!--&amp;quot; (but not in eval).&lt;br /&gt;
&lt;br /&gt;
In Futhark, the following is ignored if it is at the end of the script (i.e. just followed by whitespace lines): a line that starts with just whitespace and comments and consists of &amp;quot;--&amp;gt;&amp;quot;, and &amp;lt;em&amp;gt;optionally&amp;lt;/em&amp;gt; followed by anything except new lines and finally followed by another &amp;quot;--&amp;gt;&amp;quot;. Moreover, a script can end with an open multiline comment if it ends with &amp;quot;--&amp;gt;&amp;quot; on the same line. The last non-whitespace line of the script is ignored if it ends with &amp;quot;--&amp;gt;&amp;quot; and doesn&#039;t contain &amp;quot;//&amp;quot;&amp;lt;!-- or &amp;quot;&amp;amp;lt;!--&amp;quot;--&amp;gt; (but not in eval).&lt;br /&gt;
&lt;br /&gt;
In SpiderMonkey, &amp;quot;--&amp;gt;&amp;quot; on any line that starts with just whitespace and comments is treated as a line comment (same as //). (Also, ;version=1.6, 1.7 or 1.8 or ;e4x=1 enables E4X &amp;amp;lt;!-- --&amp;gt; comments.)&lt;br /&gt;
&lt;br /&gt;
In Nitro and V8, &amp;quot;--&amp;gt;&amp;quot; on any line that starts with just whitespace (but not comments) is treated as a line comment (same as //).&lt;br /&gt;
&lt;br /&gt;
== Property Enumeration ==&lt;br /&gt;
&lt;br /&gt;
Enumeration of objects is in insertion order (but host property order compared to user defined property order does not seem to be significant)&lt;br /&gt;
&lt;br /&gt;
== Object Properties ==&lt;br /&gt;
&lt;br /&gt;
All objects have a mutable __proto__ property that is a reference to the prototype of the object. Note that ES5 defines that objects with extensible:false must not have their prototype mutated. In the case that setting an objects __proto__ would cause a prototype chain to become cyclic, the setter must fail and throw Error().&lt;br /&gt;
&lt;br /&gt;
== Getters and Setters ==&lt;br /&gt;
&lt;br /&gt;
 * __lookupGetter__&lt;br /&gt;
 * __lookupSetter__&lt;br /&gt;
 * __defineGetter__&lt;br /&gt;
 * __defineSetter__&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=Web_ECMAScript&amp;diff=3764</id>
		<title>Web ECMAScript</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=Web_ECMAScript&amp;diff=3764"/>
		<updated>2009-06-05T13:44:51Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: /* HTML comments */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for documenting the differences between the ES5 draft and the requirements for ECMAScript implementations in web browsers.&lt;br /&gt;
&lt;br /&gt;
== Identifiers ==&lt;br /&gt;
&lt;br /&gt;
(this is very rough)&lt;br /&gt;
&lt;br /&gt;
Identifiers containing escape sequences are not equivalent to fully unescaped identifiers in the case that, after fully unescaping identifier, it is a ReservedWord. In particular it is possible to create Identifiers that unescape to a reserved word so long as at least one character is fully escaped. Subsequent use of such identifiers must also have at least one character escaped (otherwise the reserved word will be used instead) but it need not be the same character(s) as that originally used to create the identifier.&lt;br /&gt;
&lt;br /&gt;
== 15.5.4 Properties of the String Prototype Object ==&lt;br /&gt;
&lt;br /&gt;
Several extra methods are found on String.prototype for wrapping text in HTML elements (these are all generic; the this value need not be a String object):&lt;br /&gt;
&lt;br /&gt;
Algorithm ToHTMLTag(tag_name, content, attribute_name, attribute_value):&lt;br /&gt;
#if attribute_name is undefined return &amp;quot;&amp;lt;&amp;quot; + tag_name + &amp;quot;&amp;gt;&amp;quot; + content + &amp;quot;&amp;lt;/&amp;quot; + tag_name + &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
#otherwise return &amp;quot;&amp;lt;&amp;quot; + tag_name + &amp;quot; &amp;quot; + attribute_name + &amp;quot;=\&amp;quot;&amp;quot; + attribute_value + &amp;quot;\&amp;quot;&amp;gt;&amp;quot; + content + &amp;quot;&amp;lt;/&amp;quot; + tag_name + &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.anchor(name) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let n be ToString(name)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;a&amp;quot;, content, &amp;quot;name&amp;quot;, n)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.big() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;big&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.blink() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;blink&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.bold() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;b&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.fixed() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;tt&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.fontcolor(color) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let attribute_value be ToString(color)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;font&amp;quot;, content, &amp;quot;color&amp;quot;, attribute_value)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.fontsize(size) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let attribute_value be ToString(size)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;font&amp;quot;, content, &amp;quot;size&amp;quot;, attribute_value)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.italics() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;i&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.link(href) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let attribute_value be ToString(href)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;a&amp;quot;, content, &amp;quot;href&amp;quot;, attribute_value)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.small() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;small&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.strike() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;strike&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.sub() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;sub&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.sup() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;sup&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
== RegExp ==&lt;br /&gt;
&lt;br /&gt;
After a regep is executed the RegExp constructor object has properties $1...$9 which are assigned the values of the first 9 match groups from the previous regexp. (more detail here)&lt;br /&gt;
&lt;br /&gt;
== Date ==&lt;br /&gt;
&lt;br /&gt;
=== 15.9.4.3 Date.UTC ===&lt;br /&gt;
&lt;br /&gt;
When called with fewer than 2 arguments Date.UTC must return NaN.&lt;br /&gt;
&lt;br /&gt;
== Global scope ==&lt;br /&gt;
&lt;br /&gt;
ES3.1 claims the global scope &amp;quot;this&amp;quot; is the same as the global object, which is not always true in HTML5.&lt;br /&gt;
&lt;br /&gt;
== Eval ==&lt;br /&gt;
&lt;br /&gt;
Use of eval not called &amp;quot;eval&amp;quot;. Shoud work but implementations differ on the scope (Spidermonkey first tries global and then local if the object as not found globally, JScript uses local scope, others use global scope), may not have strong compat requirements&lt;br /&gt;
&lt;br /&gt;
eval.apply(this, code) should work but scope again varies when &amp;quot;this&amp;quot; is not the global object&lt;br /&gt;
&lt;br /&gt;
eval.apply({}, code) should throw EvalError&lt;br /&gt;
&lt;br /&gt;
== Date Parsing ==&lt;br /&gt;
&lt;br /&gt;
TODO:This is a mess&lt;br /&gt;
&lt;br /&gt;
== HTML comments ==&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;!-- is a line comment (same as //)&lt;br /&gt;
&lt;br /&gt;
In JScript, the following are ignored if they are at the end of the script (i.e. just followed by whitespace lines): either (1) a line that starts with just whitespace and comments and consists of &amp;quot;--&amp;gt;&amp;quot; followed by anything except new lines and finally followed by another &amp;quot;--&amp;gt;&amp;quot;, or (2) one or two lines that start with just whitespace and comments and consist of just &amp;quot;--&amp;gt;&amp;quot;. --&amp;gt; at the end of the last line of the script causes the line to be ignored unless the &amp;quot;--&amp;gt;&amp;quot; occurs within a comment.&lt;br /&gt;
&lt;br /&gt;
In Futhark, the following is ignored if it is at the end of the script (i.e. just followed by whitespace lines): a line that starts with just whitespace and comments and consists of &amp;quot;--&amp;gt;&amp;quot;, and &amp;lt;em&amp;gt;optionally&amp;lt;/em&amp;gt; followed by anything except new lines and finally followed by another &amp;quot;--&amp;gt;&amp;quot;. Moreover, a script can end with an open multiline comment if it ends with &amp;quot;--&amp;gt;&amp;quot; on the same line.&lt;br /&gt;
&lt;br /&gt;
In SpiderMonkey, &amp;quot;--&amp;gt;&amp;quot; on any line that starts with just whitespace and comments is treated as a line comment (same as //). (Also, ;version=1.6, 1.7 or 1.8 or ;e4x=1 enables E4X &amp;amp;lt;!-- --&amp;gt; comments.)&lt;br /&gt;
&lt;br /&gt;
In Nitro and V8, &amp;quot;--&amp;gt;&amp;quot; on any line that starts with just whitespace (but not comments) is treated as a line comment (same as //).&lt;br /&gt;
&lt;br /&gt;
== Stuff that needs a home ==&lt;br /&gt;
&lt;br /&gt;
Enumeration of objects is in insertion order (but host property order compared to user defined property order does not seem to be significant)&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=Parser_tests&amp;diff=3763</id>
		<title>Parser tests</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=Parser_tests&amp;diff=3763"/>
		<updated>2009-06-02T20:08:42Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: /* Tree Construction Tests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Parser Tests=&lt;br /&gt;
&lt;br /&gt;
This page documents the unit-test format(s) being used for implementations of the HTML5 parsing spec. The aim is to produce implementation-independent, self-describing tests that can be shared between any groups working on these technologies.&lt;br /&gt;
&lt;br /&gt;
==Tokenizer Tests==&lt;br /&gt;
The test format is [http://www.json.org/ JSON]. This has the advantage that the syntax allows backward-compatible extensions to the tests and the disadvantage that it is relatively verbose.&lt;br /&gt;
&lt;br /&gt;
===Basic Structure===&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;tests&amp;quot;: [&lt;br /&gt;
 &lt;br /&gt;
 {&amp;quot;description&amp;quot;:&amp;quot;Test description&amp;quot;,&lt;br /&gt;
 &amp;quot;input&amp;quot;:&amp;quot;input_string&amp;quot;,&lt;br /&gt;
 &amp;quot;output&amp;quot;:[expected_output_tokens]},&lt;br /&gt;
 &amp;quot;contentModelFlags&amp;quot;:[content_model_flags],&lt;br /&gt;
 &amp;quot;lastStartTag&amp;quot;:last_start_tag,&lt;br /&gt;
 &amp;quot;ignoreErrorOrder&amp;quot;:ignore_error_order&lt;br /&gt;
 ]}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;description&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;input&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;output&amp;lt;/tt&amp;gt; are always present. The other values are optional.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;input_string&amp;lt;/tt&amp;gt; is a string literal containing the input string to pass to the tokenizer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;expected_output_tokens&amp;lt;/tt&amp;gt; is a list of tokens, ordered with the first produced by the tokenizer the first (leftmost) in the list. The list must mach the &#039;&#039;&#039;complete&#039;&#039;&#039; list of tokens that the tokenizer should produce. Valid tokens are:&lt;br /&gt;
&lt;br /&gt;
 [&amp;quot;DOCTYPE&amp;quot;, name, public_id, system_id, correctness]&lt;br /&gt;
 [&amp;quot;StartTag&amp;quot;, name, {attributes}&#039;&#039;, true&#039;&#039;]&lt;br /&gt;
 [&amp;quot;StartTag&amp;quot;, name, {attributes}]&lt;br /&gt;
 [&amp;quot;EndTag&amp;quot;, name]&lt;br /&gt;
 [&amp;quot;Comment&amp;quot;, data]&lt;br /&gt;
 [&amp;quot;Character&amp;quot;, data]&lt;br /&gt;
 &amp;quot;ParseError&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;public_id&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;system_id&amp;lt;/tt&amp;gt; are either strings or &amp;lt;tt&amp;gt;null&amp;lt;/tt&amp;gt;. &amp;lt;tt&amp;gt;correctness&amp;lt;/tt&amp;gt; is either &amp;lt;tt&amp;gt;true&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;false&amp;lt;/tt&amp;gt;; &amp;lt;tt&amp;gt;true&amp;lt;/tt&amp;gt; corresponds to the force-quirks flag being false, and vice-versa.&lt;br /&gt;
&lt;br /&gt;
When the self-closing flag is set, the &amp;lt;tt&amp;gt;StartTag&amp;lt;/tt&amp;gt; array has &amp;lt;tt&amp;gt;true&amp;lt;/tt&amp;gt; as its fourth entry. When the flag is not set, the array has only three entries for backwards compatibility.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;content_model_flags&amp;lt;/tt&amp;gt; is a list of strings from the set:&lt;br /&gt;
 PCDATA&lt;br /&gt;
 RCDATA&lt;br /&gt;
 CDATA&lt;br /&gt;
 PLAINTEXT&lt;br /&gt;
The test case applies when the tokenizer begins with its content model flag set to any of those values. If &amp;lt;tt&amp;gt;content_model_flags&amp;lt;/tt&amp;gt; is omitted, it defaults to &amp;lt;tt&amp;gt;[&amp;quot;PCDATA&amp;quot;]&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;last_start_tag&amp;lt;/tt&amp;gt; is a lowercase string that should be used as &amp;quot;the tag name of the last start tag token emitted&amp;quot; in the tokenizer algorithm. If it is omitted, it is treated as if &amp;quot;no start tag token has ever been emitted by this instance of the tokeniser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;ignore_error_order&amp;lt;/tt&amp;gt; is a boolean value indicating that the order of &amp;lt;tt&amp;gt;ParseError&amp;lt;/tt&amp;gt; tokens relative to other tokens in the output stream is unimportant, and implementations should ignore such differences between their output and &amp;lt;tt&amp;gt;expected_output_tokens&amp;lt;/tt&amp;gt;. (This is used for errors emitted by the input stream preprocessing stage, since it is useful to test that code but it is undefined when the errors occur). If it is omitted, it defaults to &amp;lt;tt&amp;gt;false&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multiple tests per file are allowed simply by adding more objects to the &amp;quot;tests&amp;quot; list.&lt;br /&gt;
&lt;br /&gt;
All adjacent character tokens are coalesced into a single &amp;lt;tt&amp;gt;[&amp;quot;Character&amp;quot;, data]&amp;lt;/tt&amp;gt; token.&lt;br /&gt;
&lt;br /&gt;
=== Open Issues ===&lt;br /&gt;
* Is the format too verbose?&lt;br /&gt;
* Do we want to allow the test to pass if only a subset of the actual tokens emitted matches the expected_output_tokens list?&lt;br /&gt;
&lt;br /&gt;
==Tree Construction Tests==&lt;br /&gt;
&lt;br /&gt;
Each file containing tree construction tests consists of any number of tests separated by two newlines (LF) and a single newline before the end of the file. For instance:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[TEST]LF&lt;br /&gt;
LF&lt;br /&gt;
[TEST]LF&lt;br /&gt;
LF&lt;br /&gt;
[TEST]LF&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where [TEST] is the following format:&lt;br /&gt;
&lt;br /&gt;
Each test must begin with a string &amp;quot;#data&amp;quot; followed by a newline (LF). All subsequent lines until a line that says &amp;quot;#errors&amp;quot; are the test data and must be passed to the system being tested unchanged, except with the final newline (on the last line) removed.&lt;br /&gt;
&lt;br /&gt;
Then there must be a line that says &amp;quot;#errors&amp;quot;. It must be followed by one line per parse error that a conformant checker would return. It doesn&#039;t matter what those lines are, although they can&#039;t be &amp;quot;#document-fragment&amp;quot;, &amp;quot;#document&amp;quot;, or empty, the only thing that matters is that there be the right number of parse errors.&lt;br /&gt;
&lt;br /&gt;
Then there *may* be a line that says &amp;quot;#document-fragment&amp;quot;, which must be followed by a newline (LF), followed by a string of characters that indicates the context element, followed by a newline (LF). If this line is present the &amp;quot;#data&amp;quot; must be parsed using the HTML fragment parsing algorithm with the context element as context.&lt;br /&gt;
&lt;br /&gt;
Then there must be a line that says &amp;quot;#document&amp;quot;, which must be followed by a dump of the tree of the parsed DOM. Each node must be represented by a single line. Each line must start with &amp;quot;| &amp;quot;, followed by two spaces per parent node that the node has before the root document node.&lt;br /&gt;
* Element nodes must be represented by a &amp;quot;&amp;lt;tt&amp;gt;&amp;lt;&amp;lt;/tt&amp;gt;&amp;quot; then the &#039;&#039;tag name string&#039;&#039; &amp;quot;&amp;lt;tt&amp;gt;&amp;gt;&amp;lt;/tt&amp;gt;&amp;quot;, and all the attributes must be given, sorted lexicographically by UTF-16 code unit according to their &#039;&#039;attribute name string&#039;&#039;, on subsequent nodes, as if they were children of the element node.&lt;br /&gt;
* Attribute nodes must have the &#039;&#039;attribute name string&#039;&#039;, then an &amp;quot;=&amp;quot; sign, then the attribute value in double quotes (&amp;quot;).&lt;br /&gt;
* Text nodes must be the string, in double quotes. Newlines aren&#039;t escaped.&lt;br /&gt;
* Comments must be &amp;quot;&amp;lt;tt&amp;gt;&amp;lt;&amp;lt;/tt&amp;gt;&amp;quot; then &amp;quot;&amp;lt;tt&amp;gt;!-- &amp;lt;/tt&amp;gt;&amp;quot; then the data then &amp;quot;&amp;lt;tt&amp;gt; --&amp;gt;&amp;lt;/tt&amp;gt;&amp;quot;.&lt;br /&gt;
* DOCTYPEs must be &amp;quot;&amp;lt;tt&amp;gt;&amp;lt;!DOCTYPE &amp;lt;/tt&amp;gt;&amp;quot; then the name then if either of the system id or public id is non-empty a space, public id in double-quotes, another space an the system id in double-quotes, and then in any case &amp;quot;&amp;lt;tt&amp;gt;&amp;gt;&amp;lt;/tt&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;tag name string&#039;&#039; is the local name prefixed by a namespace designator. For the HTML namespace, the namespace designator is the empty string, i.e. there&#039;s no prefix. For the SVG namespace, the namespace designator is &amp;quot;svg &amp;quot;. For the MathML namespace, the namespace designator is &amp;quot;math &amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;attribute name string&#039;&#039; is the local name prefixed by a namespace designator. For no namespace, the namespace designator is the empty string, i.e. there&#039;s no prefix. For the XLink namespace, the namespace designator is &amp;quot;xlink &amp;quot;. For the XML namespace, the namespace designator is &amp;quot;xml &amp;quot;. For the XMLNS namespace, the namespace designator is &amp;quot;xmlns &amp;quot;. Note the difference between &amp;quot;xlink:href&amp;quot; which is an attribute in no namespace with the local name &amp;quot;xlink:href&amp;quot; and &amp;quot;xlink href&amp;quot; which is an attribute in the xlink namespace with the local name &amp;quot;href&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
If there is also a &amp;quot;#document-fragment&amp;quot; the bit following &amp;quot;#document&amp;quot; must be a representation of the HTML fragment serialization for the context element given by &amp;quot;#document-fragment&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#data&lt;br /&gt;
&amp;lt;p&amp;gt;One&amp;lt;p&amp;gt;Two&lt;br /&gt;
#errors&lt;br /&gt;
3: Missing document type declaration&lt;br /&gt;
#document&lt;br /&gt;
| &amp;lt;html&amp;gt;&lt;br /&gt;
|   &amp;lt;head&amp;gt;&lt;br /&gt;
|   &amp;lt;body&amp;gt;&lt;br /&gt;
|     &amp;lt;p&amp;gt;&lt;br /&gt;
|       &amp;quot;One&amp;quot;&lt;br /&gt;
|     &amp;lt;p&amp;gt;&lt;br /&gt;
|       &amp;quot;Two&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tests can be found here: http://html5lib.googlecode.com/svn/trunk/testdata/tree-construction/&lt;br /&gt;
&lt;br /&gt;
=== Open Issues ===&lt;br /&gt;
* should relax the order constraint?&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=Web_ECMAScript&amp;diff=3758</id>
		<title>Web ECMAScript</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=Web_ECMAScript&amp;diff=3758"/>
		<updated>2009-05-19T09:50:48Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for documenting the differences between the ES5 draft and the requirements for ECMAScript implementations in web browsers.&lt;br /&gt;
&lt;br /&gt;
== Identifiers ==&lt;br /&gt;
&lt;br /&gt;
(this is very rough)&lt;br /&gt;
&lt;br /&gt;
Identifiers containing escape sequences are not equivalent to fully unescaped identifiers in the case that, after fully unescaping identifier, it is a ReservedWord. In particular it is possible to create Identifiers that unescape to a reserved word so long as at least one character is fully escaped. Subsequent use of such identifiers must also have at least one character escaped (otherwise the reserved word will be used instead) but it need not be the same character(s) as that originally used to create the identifier.&lt;br /&gt;
&lt;br /&gt;
== 15.5.4 Properties of the String Prototype Object ==&lt;br /&gt;
&lt;br /&gt;
Several extra methods are found on String.prototype for wrapping text in HTML elements (these are all generic; the this value need not be a String object):&lt;br /&gt;
&lt;br /&gt;
Algorithm ToHTMLTag(tag_name, content, attribute_name, attribute_value):&lt;br /&gt;
#if attribute_name is undefined return &amp;quot;&amp;lt;&amp;quot; + tag_name + &amp;quot;&amp;gt;&amp;quot; + content + &amp;quot;&amp;lt;/&amp;quot; + tag_name + &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
#otherwise return &amp;quot;&amp;lt;&amp;quot; + tag_name + &amp;quot; &amp;quot; + attribute_name + &amp;quot;=\&amp;quot;&amp;quot; + attribute_value + &amp;quot;\&amp;quot;&amp;gt;&amp;quot; + content + &amp;quot;&amp;lt;/&amp;quot; + tag_name + &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.anchor(name) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let n be ToString(name)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;a&amp;quot;, content, &amp;quot;name&amp;quot;, n)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.big() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;big&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.blink() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;blink&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.bold() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;b&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.fixed() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;tt&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.fontcolor(color) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let attribute_value be ToString(color)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;font&amp;quot;, content, &amp;quot;color&amp;quot;, attribute_value)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.fontsize(size) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let attribute_value be ToString(size)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;font&amp;quot;, content, &amp;quot;size&amp;quot;, attribute_value)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.italics() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;i&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.link(href) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let attribute_value be ToString(href)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;a&amp;quot;, content, &amp;quot;href&amp;quot;, attribute_value)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.small() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;small&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.strike() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;strike&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.sub() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;sub&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.sup() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;sup&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
== RegExp ==&lt;br /&gt;
&lt;br /&gt;
After a regep is executed the RegExp constructor object has properties $1...$9 which are assigned the values of the first 9 match groups from the previous regexp. (more detail here)&lt;br /&gt;
&lt;br /&gt;
== Date ==&lt;br /&gt;
&lt;br /&gt;
=== 15.9.4.3 Date.UTC ===&lt;br /&gt;
&lt;br /&gt;
When called with fewer than 2 arguments Date.UTC must return NaN.&lt;br /&gt;
&lt;br /&gt;
== Global scope ==&lt;br /&gt;
&lt;br /&gt;
ES3.1 claims the global scope &amp;quot;this&amp;quot; is the same as the global object, which is not always true in HTML5.&lt;br /&gt;
&lt;br /&gt;
== Eval ==&lt;br /&gt;
&lt;br /&gt;
Use of eval not called &amp;quot;eval&amp;quot;. Shoud work but implementations differ on the scope (Spidermonkey first tries global and then local if the object as not found globally, JScript uses local scope, others use global scope), may not have strong compat requirements&lt;br /&gt;
&lt;br /&gt;
eval.apply(this, code) should work but scope again varies when &amp;quot;this&amp;quot; is not the global object&lt;br /&gt;
&lt;br /&gt;
eval.apply({}, code) should throw EvalError&lt;br /&gt;
&lt;br /&gt;
== Date Parsing ==&lt;br /&gt;
&lt;br /&gt;
TODO:This is a mess&lt;br /&gt;
&lt;br /&gt;
== HTML comments ==&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;!-- is a line comment (same as //)&lt;br /&gt;
&lt;br /&gt;
In JScript, the following are ignored if they are at the end of the script (i.e. just followed by whitespace lines): either (1) a line that starts with just whitespace and comments and consists of &amp;quot;--&amp;gt;&amp;quot; followed by anything except new lines and finally followed by another &amp;quot;--&amp;gt;&amp;quot;, or (2) one or two lines that start with just whitespace and comments and consist of just &amp;quot;--&amp;gt;&amp;quot;. Moreover, a script can end with an open multiline comment if it ends with &amp;quot;--&amp;gt;&amp;quot; on the same line.&lt;br /&gt;
&lt;br /&gt;
In Futhark, the following is ignored if it is at the end of the script (i.e. just followed by whitespace lines): a line that starts with just whitespace and comments and consists of &amp;quot;--&amp;gt;&amp;quot;, and &amp;lt;em&amp;gt;optionally&amp;lt;/em&amp;gt; followed by anything except new lines and finally followed by another &amp;quot;--&amp;gt;&amp;quot;. Moreover, a script can end with an open multiline comment if it ends with &amp;quot;--&amp;gt;&amp;quot; on the same line.&lt;br /&gt;
&lt;br /&gt;
In SpiderMonkey, &amp;quot;--&amp;gt;&amp;quot; on any line that starts with just whitespace and comments is treated as a line comment (same as //). (Also, ;version=1.6, 1.7 or 1.8 or ;e4x=1 enables E4X &amp;amp;lt;!-- --&amp;gt; comments.)&lt;br /&gt;
&lt;br /&gt;
In Nitro and V8, &amp;quot;--&amp;gt;&amp;quot; on any line that starts with just whitespace (but not comments) is treated as a line comment (same as //).&lt;br /&gt;
&lt;br /&gt;
== Stuff that needs a home ==&lt;br /&gt;
&lt;br /&gt;
Enumeration of objects is in insertion order (but host property order compared to user defined property order does not seem to be significant)&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=Web_ECMAScript&amp;diff=3737</id>
		<title>Web ECMAScript</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=Web_ECMAScript&amp;diff=3737"/>
		<updated>2009-05-05T09:47:50Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: Magic regexp variables&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for documenting the differences between the ES5 draft and the requirements for ECMAScript implementations in web browsers.&lt;br /&gt;
&lt;br /&gt;
== Identifiers ==&lt;br /&gt;
&lt;br /&gt;
(this is very rough)&lt;br /&gt;
&lt;br /&gt;
Identifiers containing escape sequences are not equivalent to fully unescaped identifiers in the case that, after fully unescaping identifier, it is a ReservedWord. In particular it is possible to create Identifiers that unescape to a reserved word so long as at least one character is fully escaped. Subsequent use of such identifiers must also have at least one character escaped (otherwise the reserved word will be used instead) but it need not be the same character(s) as that originally used to create the identifier.&lt;br /&gt;
&lt;br /&gt;
== 15.5.4 Properties of the String Prototype Object ==&lt;br /&gt;
&lt;br /&gt;
Several extra methods are found on String.prototype for wrapping text in HTML elements (these are all generic; the this value need not be a String object):&lt;br /&gt;
&lt;br /&gt;
Algorithm ToHTMLTag(tag_name, content, attribute_name, attribute_value):&lt;br /&gt;
#if attribute_name is undefined return &amp;quot;&amp;lt;&amp;quot; + tag_name + &amp;quot;&amp;gt;&amp;quot; + content + &amp;quot;&amp;lt;/&amp;quot; + tag_name + &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
#otherwise return &amp;quot;&amp;lt;&amp;quot; + tag_name + &amp;quot; &amp;quot; + attribute_name + &amp;quot;=\&amp;quot;&amp;quot; + attribute_value + &amp;quot;\&amp;quot;&amp;gt;&amp;quot; + content + &amp;quot;&amp;lt;/&amp;quot; + tag_name + &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.anchor(name) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let n be ToString(name)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;a&amp;quot;, content, &amp;quot;name&amp;quot;, n)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.big() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;big&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.blink() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;blink&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.bold() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;b&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.fixed() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;tt&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.fontcolor(color) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let attribute_value be ToString(color)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;font&amp;quot;, content, &amp;quot;color&amp;quot;, attribute_value)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.fontsize(size) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let attribute_value be ToString(size)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;font&amp;quot;, content, &amp;quot;size&amp;quot;, attribute_value)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.italics() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;i&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.link(href) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let attribute_value be ToString(href)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;a&amp;quot;, content, &amp;quot;href&amp;quot;, attribute_value)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.small() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;small&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.strike() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;strike&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.sub() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;sub&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.sup() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;sup&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
== RegExp ==&lt;br /&gt;
&lt;br /&gt;
After a regep is executed the RegExp constructor object has properties $1...$9 which are assigned the values of the first 9 match groups from the previous regexp. (more detail here)&lt;br /&gt;
&lt;br /&gt;
== Global scope ==&lt;br /&gt;
&lt;br /&gt;
ES3.1 claims the global scope &amp;quot;this&amp;quot; is the same as the global object, which is not always true in HTML5.&lt;br /&gt;
&lt;br /&gt;
== Eval ==&lt;br /&gt;
&lt;br /&gt;
Use of eval not called &amp;quot;eval&amp;quot;. Shoud work but implementations differ on the scope (Spidermonkey first tries global and then local if the object as not found globally, JScript uses local scope, others use global scope), may not have strong compat requirements&lt;br /&gt;
&lt;br /&gt;
eval.apply(this, code) should work but scope again varies when &amp;quot;this&amp;quot; is not the global object&lt;br /&gt;
&lt;br /&gt;
eval.apply({}, code) should throw EvalError&lt;br /&gt;
&lt;br /&gt;
== Date Parsing ==&lt;br /&gt;
&lt;br /&gt;
TODO:This is a mess&lt;br /&gt;
&lt;br /&gt;
== HTML comments ==&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;!-- is a line comment (same as //)&lt;br /&gt;
&lt;br /&gt;
In JScript, the following are ignored if they are at the end of the script (i.e. just followed by whitespace lines): either (1) a line that starts with just whitespace and comments and consists of &amp;quot;--&amp;gt;&amp;quot; followed by anything except new lines and finally followed by another &amp;quot;--&amp;gt;&amp;quot;, or (2) one or two lines that start with just whitespace and comments and consist of just &amp;quot;--&amp;gt;&amp;quot;. Moreover, a script can end with an open multiline comment if it ends with &amp;quot;--&amp;gt;&amp;quot; on the same line.&lt;br /&gt;
&lt;br /&gt;
In Futhark, the following is ignored if it is at the end of the script (i.e. just followed by whitespace lines): a line that starts with just whitespace and comments and consists of &amp;quot;--&amp;gt;&amp;quot;, and &amp;lt;em&amp;gt;optionally&amp;lt;/em&amp;gt; followed by anything except new lines and finally followed by another &amp;quot;--&amp;gt;&amp;quot;. Moreover, a script can end with an open multiline comment if it ends with &amp;quot;--&amp;gt;&amp;quot; on the same line.&lt;br /&gt;
&lt;br /&gt;
In SpiderMonkey, &amp;quot;--&amp;gt;&amp;quot; on any line that starts with just whitespace and comments is treated as a line comment (same as //). (Also, ;version=1.6, 1.7 or 1.8 or ;e4x=1 enables E4X &amp;amp;lt;!-- --&amp;gt; comments.)&lt;br /&gt;
&lt;br /&gt;
In Nitro and V8, &amp;quot;--&amp;gt;&amp;quot; on any line that starts with just whitespace (but not comments) is treated as a line comment (same as //).&lt;br /&gt;
&lt;br /&gt;
== Stuff that needs a home ==&lt;br /&gt;
&lt;br /&gt;
Enumeration of objects is in insertion order (but host property order compared to user defined property order does not seem to be significant)&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=Web_ECMAScript&amp;diff=3708</id>
		<title>Web ECMAScript</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=Web_ECMAScript&amp;diff=3708"/>
		<updated>2009-04-26T16:23:59Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: --&amp;gt; used as a comment start&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for documenting the differences between the ES5 draft and the requirements for ECMAScript implementations in web browsers.&lt;br /&gt;
&lt;br /&gt;
== Identifiers ==&lt;br /&gt;
&lt;br /&gt;
(this is very rough)&lt;br /&gt;
&lt;br /&gt;
Identifiers containing escape sequences are not equivalent to fully unescaped identifiers in the case that, after fully unescaping identifier, it is a ReservedWord. In particular it is possible to create Identifiers that unescape to a reserved word so long as at least one character is fully escaped. Subsequent use of such identifiers must also have at least one character escaped (otherwise the reserved word will be used instead) but it need not be the same character(s) as that originally used to create the identifier.&lt;br /&gt;
&lt;br /&gt;
== 15.5.4 Properties of the String Prototype Object ==&lt;br /&gt;
&lt;br /&gt;
Several extra methods are found on String.prototype for wrapping text in HTML elements (these are all generic; the this value need not be a String object):&lt;br /&gt;
&lt;br /&gt;
Algorithm ToHTMLTag(tag_name, content, attribute_name, attribute_value):&lt;br /&gt;
#if attribute_name is undefined return &amp;quot;&amp;lt;&amp;quot; + tag_name + &amp;quot;&amp;gt;&amp;quot; + content + &amp;quot;&amp;lt;/&amp;quot; + tag_name + &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
#otherwise return &amp;quot;&amp;lt;&amp;quot; + tag_name + &amp;quot; &amp;quot; + attribute_name + &amp;quot;=\&amp;quot;&amp;quot; + attribute_value + &amp;quot;\&amp;quot;&amp;gt;&amp;quot; + content + &amp;quot;&amp;lt;/&amp;quot; + tag_name + &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.anchor(name) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let n be ToString(name)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;a&amp;quot;, content, &amp;quot;name&amp;quot;, n)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.big() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;big&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.blink() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;blink&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.bold() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;b&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.fixed() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;tt&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.fontcolor(color) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let attribute_value be ToString(color)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;font&amp;quot;, content, &amp;quot;color&amp;quot;, attribute_value)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.fontsize(size) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let attribute_value be ToString(size)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;font&amp;quot;, content, &amp;quot;size&amp;quot;, attribute_value)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.italics() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;i&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.link(href) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let attribute_value be ToString(href)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;a&amp;quot;, content, &amp;quot;href&amp;quot;, attribute_value)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.small() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;small&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.strike() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;strike&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.sub() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;sub&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.sup() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;sup&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
== Global scope ==&lt;br /&gt;
&lt;br /&gt;
ES3.1 claims the global scope &amp;quot;this&amp;quot; is the same as the global object, which is not always true in HTML5.&lt;br /&gt;
&lt;br /&gt;
== Eval ==&lt;br /&gt;
&lt;br /&gt;
Use of eval not called &amp;quot;eval&amp;quot;. Shoud work but implementations differ on the scope (Spidermonkey first tries global and then local if the object as not found globally, JScript uses local scope, others use global scope), may not have strong compat requirements&lt;br /&gt;
&lt;br /&gt;
eval.apply(this, code) should work but scope again varies when &amp;quot;this&amp;quot; is not the global object&lt;br /&gt;
&lt;br /&gt;
eval.apply({}, code) should throw EvalError&lt;br /&gt;
&lt;br /&gt;
== Date Parsing ==&lt;br /&gt;
&lt;br /&gt;
TODO:This is a mess&lt;br /&gt;
&lt;br /&gt;
== HTML comments ==&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;!-- is a line comment (same as //)&lt;br /&gt;
&lt;br /&gt;
--&amp;gt; starts a line comment iff all the proceeding characters on the line are whitespace characters (so &amp;quot;a--&amp;gt;b&amp;quot; is evaluated as an expression but &amp;quot; --&amp;gt;b&amp;quot; is a comment)&lt;br /&gt;
&lt;br /&gt;
== Stuff that needs a home ==&lt;br /&gt;
&lt;br /&gt;
Enumeration of objects is in insertion order (but host property order compared to user defined property order does not seem to be significant)&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=Web_ECMAScript&amp;diff=3619</id>
		<title>Web ECMAScript</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=Web_ECMAScript&amp;diff=3619"/>
		<updated>2009-04-17T10:18:31Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Web ECMAScript =&lt;br /&gt;
&lt;br /&gt;
This page is for documenting the differences between the ES5 draft and the requirements for ECMAScript implementations in web browsers.&lt;br /&gt;
&lt;br /&gt;
== Identifiers ==&lt;br /&gt;
&lt;br /&gt;
(this is very rough)&lt;br /&gt;
&lt;br /&gt;
Identifiers containing escape sequences are not equivalent to fully unescaped identifiers in the case that, after fully unescaping identifier, it is a ReservedWord. In particular it is possible to create Identifiers that unescape to a reserved word so long as at least one character is fully escaped. Subsequent use of such identifiers must also have at least one character escaped (otherwise the reserved word will be used instead) but it need not be the same character(s) as that originally used to create the identifier.&lt;br /&gt;
&lt;br /&gt;
== 15.5.4 Properties of the String Prototype Object ==&lt;br /&gt;
&lt;br /&gt;
Several extra methods are found on String.prototype for wrapping text in HTML elements (these are all generic; the this value need not be a String object):&lt;br /&gt;
&lt;br /&gt;
Algorithm ToHTMLTag(tag_name, content, attribute_name, attribute_value):&lt;br /&gt;
#if attribute_name is undefined return &amp;quot;&amp;lt;&amp;quot; + tag_name + &amp;quot;&amp;gt;&amp;quot; + content + &amp;quot;&amp;lt;/&amp;quot; + tag_name + &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
#otherwise return &amp;quot;&amp;lt;&amp;quot; + tag_name + &amp;quot; &amp;quot; + attribute_name + &amp;quot;=\&amp;quot;&amp;quot; + attribute_value + &amp;quot;\&amp;quot;&amp;gt;&amp;quot; + content + &amp;quot;&amp;lt;/&amp;quot; + tag_name + &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.anchor(name) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let n be ToString(name)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;a&amp;quot;, content, &amp;quot;name&amp;quot;, n)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.big() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;big&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.blink() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;blink&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.bold() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;b&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.fixed() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;tt&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.fontcolor(color) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let attribute_value be ToString(color)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;font&amp;quot;, content, &amp;quot;color&amp;quot;, attribute_value)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.fontsize(size) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let attribute_value be ToString(size)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;font&amp;quot;, content, &amp;quot;size&amp;quot;, attribute_value)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.italics() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;i&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.link(href) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let attribute_value be ToString(href)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;a&amp;quot;, content, &amp;quot;href&amp;quot;, attribute_value)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.small() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;small&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.strike() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;strike&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.sub() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;sub&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.sup() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;sup&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
== Global scope ==&lt;br /&gt;
&lt;br /&gt;
ES3.1 claims the global scope &amp;quot;this&amp;quot; is the same as the global object, which is not always true in HTML5.&lt;br /&gt;
&lt;br /&gt;
== Eval ==&lt;br /&gt;
&lt;br /&gt;
Use of eval not called &amp;quot;eval&amp;quot;. Shoud work but implementations differ on the scope (Spidermonkey first tries global and then local if the object as not found globally, JScript uses local scope, others use global scope), may not have strong compat requirements&lt;br /&gt;
&lt;br /&gt;
eval.apply(this, code) should work but scope again varies when &amp;quot;this&amp;quot; is not the global object&lt;br /&gt;
&lt;br /&gt;
eval.apply({}, code) should throw EvalError&lt;br /&gt;
&lt;br /&gt;
== Date Parsing ==&lt;br /&gt;
&lt;br /&gt;
TODO:This is a mess&lt;br /&gt;
&lt;br /&gt;
== Stuff that needs a home ==&lt;br /&gt;
&lt;br /&gt;
Enumeration of objects is in insertion order (but host property order compared to user defined property order does not seem to be significant)&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=Web_ECMAScript&amp;diff=3618</id>
		<title>Web ECMAScript</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=Web_ECMAScript&amp;diff=3618"/>
		<updated>2009-04-17T10:04:02Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Web ECMAScript =&lt;br /&gt;
&lt;br /&gt;
This page is for documenting the differences between the ES5 draft and the requirements for ECMAScript implementations in web browsers.&lt;br /&gt;
&lt;br /&gt;
== Identifiers ==&lt;br /&gt;
&lt;br /&gt;
(this is very rough)&lt;br /&gt;
&lt;br /&gt;
Identifiers containing escape sequences are not equivalent to fully unescaped identifiers in the case that, after fully unescaping identifier, it is a ReservedWord. In particular it is possible to create Identifiers that unescape to a reserved word so long as at least one character is fully escaped. Subsequent use of such identifiers must also have at least one character escaped (otherwise the reserved word will be used instead) but it need not be the same character(s) as that originally used to create the identifier.&lt;br /&gt;
&lt;br /&gt;
== 15.5.4 Properties of the String Prototype Object ==&lt;br /&gt;
&lt;br /&gt;
Several extra methods are found on String.prototype for wrapping text in HTML elements (these are all generic; the this value need not be a String object):&lt;br /&gt;
&lt;br /&gt;
Algorithm ToHTMLTag(tag_name, content, attribute_name, attribute_value):&lt;br /&gt;
#if attribute_name is undefined return &amp;quot;&amp;lt;&amp;quot; + tag_name + &amp;quot;&amp;gt;&amp;quot; + content + &amp;quot;&amp;lt;/&amp;quot; + tag_name + &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
#otherwise return &amp;quot;&amp;lt;&amp;quot; + tag_name + &amp;quot; &amp;quot; + attribute_name + &amp;quot;=\&amp;quot;&amp;quot; + attribute_value + &amp;quot;\&amp;quot;&amp;gt;&amp;quot; + content + &amp;quot;&amp;lt;/&amp;quot; + tag_name + &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.anchor(name) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let n be ToString(name)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;a&amp;quot;, content, &amp;quot;name&amp;quot;, n)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.big() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;big&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.blink() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;blink&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.bold() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;b&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.fixed() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;tt&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.fontcolor(color) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let attribute_value be ToString(color)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;font&amp;quot;, content, &amp;quot;color&amp;quot;, attribute_value)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.fontsize(size) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let attribute_value be ToString(size)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;font&amp;quot;, content, &amp;quot;size&amp;quot;, attribute_value)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.italics() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;i&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.link(href) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let attribute_value be ToString(href)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;a&amp;quot;, content, &amp;quot;href&amp;quot;, attribute_value)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.small() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;small&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.strike() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;strike&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.sub() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;sub&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.sup() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;sup&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
== Global scope ==&lt;br /&gt;
&lt;br /&gt;
ES3.1 claims the global scope &amp;quot;this&amp;quot; is the same as the global object, which is not always true in HTML5.&lt;br /&gt;
&lt;br /&gt;
== Stuff that needs a home ==&lt;br /&gt;
&lt;br /&gt;
Enumeration of objects is in insertion order (but host property order compared to user defined property order does not seem to be significant)&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=Web_ECMAScript&amp;diff=3612</id>
		<title>Web ECMAScript</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=Web_ECMAScript&amp;diff=3612"/>
		<updated>2009-04-16T10:23:20Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Web ECMAScript =&lt;br /&gt;
&lt;br /&gt;
This page is for documenting the differences between the ES5 draft and the requirements for ECMAScript implementations in web browsers.&lt;br /&gt;
&lt;br /&gt;
== 15.5.4 Properties of the String Prototype Object ==&lt;br /&gt;
&lt;br /&gt;
Several extra methods are found on String.prototype for wrapping text in HTML elements (these are all generic; the this value need not be a String object):&lt;br /&gt;
&lt;br /&gt;
Algorithm ToHTMLTag(tag_name, content, attribute_name, attribute_value):&lt;br /&gt;
#if attribute_name is undefined return &amp;quot;&amp;lt;&amp;quot; + tag_name + &amp;quot;&amp;gt;&amp;quot; + content + &amp;quot;&amp;lt;/&amp;quot; + tag_name + &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
#otherwise return &amp;quot;&amp;lt;&amp;quot; + tag_name + &amp;quot; &amp;quot; + attribute_name &amp;quot;=&amp;quot; &amp;quot;\&amp;quot;&amp;quot; + attribute_value + &amp;quot;\&amp;quot;&amp;quot; &amp;quot;&amp;gt;&amp;quot; + content + &amp;quot;&amp;lt;/&amp;quot; + tag_name + &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.anchor(name) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let n be ToString(name)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;a&amp;quot;, content, &amp;quot;name&amp;quot;, n)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.big() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;big&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.blink() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;blink&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.bold() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;bold&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.fixed() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;tt&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.fontcolor(color) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let attribute_value be ToString(color)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;font&amp;quot;, content, &amp;quot;color&amp;quot;, attribute_value)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.fontsize(size) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let attribute_value be ToString(size)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;font&amp;quot;, content, &amp;quot;size&amp;quot;, attribute_value)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.italics() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;i&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.link ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let attribute_value be ToString(href)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;a&amp;quot;, content, &amp;quot;href&amp;quot;, attribute_value)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.small() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;small&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.strike() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;strike&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.sub() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;sub&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.sup() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;sup&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
== Stuff that needs a home ==&lt;br /&gt;
&lt;br /&gt;
Enumeration of objects is in insertion order (but host property order compared to user defined property order does not seem to be significant)&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=Web_ECMAScript&amp;diff=3611</id>
		<title>Web ECMAScript</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=Web_ECMAScript&amp;diff=3611"/>
		<updated>2009-04-16T10:05:11Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Web ECMAScript =&lt;br /&gt;
&lt;br /&gt;
This page is for documenting the differences between the ES5 draft and the requirements for ECMAScript implementations in web browsers.&lt;br /&gt;
&lt;br /&gt;
== 15.5.4 Properties of the String Prototype Object ==&lt;br /&gt;
&lt;br /&gt;
Several extra methods are found on String.prototype for wrapping text in HTML elements (these are all generic; the this value need not be a String object):&lt;br /&gt;
&lt;br /&gt;
Algorithm ToHTMLTag(tag_name, content, attribute_name, attribute_value):&lt;br /&gt;
#if attribute_name is undefined return &amp;quot;&amp;lt;&amp;quot; + tag_name + &amp;quot;&amp;gt;&amp;quot; + content + &amp;quot;&amp;lt;/&amp;quot; + tag_name + &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
#otherwise return &amp;quot;&amp;lt;&amp;quot; + tag_name + &amp;quot; &amp;quot; + attribute_name &amp;quot;=&amp;quot; &amp;quot;\&amp;quot;&amp;quot; + attribute_value + &amp;quot;\&amp;quot;&amp;quot; &amp;quot;&amp;gt;&amp;quot; + content + &amp;quot;&amp;lt;/&amp;quot; + tag_name + &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.anchor(name) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let n be ToString(name)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;a&amp;quot;, content, &amp;quot;name&amp;quot;, n)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.big() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;big&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.blink() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;blink&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.bold() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;bold&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.fixed() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;tt&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.fontcolor(color) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let attribute_value be ToString(color)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;font&amp;quot;, content, &amp;quot;color&amp;quot;, attribute_value)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.fontsize(size) ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let attribute_value be ToString(size)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;font&amp;quot;, content, &amp;quot;size&amp;quot;, attribute_value)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.italics() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;i&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.link ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Let attribute_value be ToString(href)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;a&amp;quot;, content, &amp;quot;href&amp;quot;, attribute_value)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.small() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;small&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.strike() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;strike&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.sub() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;sub&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.sup() ===&lt;br /&gt;
&lt;br /&gt;
# Let content be ToString(this)&lt;br /&gt;
# Return ToHTMLTag(&amp;quot;sup&amp;quot;, content)&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=Web_ECMAScript&amp;diff=3610</id>
		<title>Web ECMAScript</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=Web_ECMAScript&amp;diff=3610"/>
		<updated>2009-04-16T09:56:40Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: Start page for ECMAScript things needed on the web&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Web ECMAScript =&lt;br /&gt;
&lt;br /&gt;
This page is for documenting the differences between the ES5 draft and the requirements for ECMAScript implementations in web browsers.&lt;br /&gt;
&lt;br /&gt;
== 15.5.4 Properties of the String Prototype Object ==&lt;br /&gt;
&lt;br /&gt;
Several extra methods are found on String.prototype for wrapping text in HTML elements (these are all generic; the this value need not be a String object):&lt;br /&gt;
&lt;br /&gt;
Algorithm ToHTMLTag(tag_name, content, attribute_name, attribute_value):&lt;br /&gt;
if attribute_name is undefined return &amp;quot;&amp;lt;&amp;quot; + tag_name + &amp;quot;&amp;gt;&amp;quot; + content + &amp;quot;&amp;lt;/&amp;quot; + tag_name + &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
otherwise return &amp;quot;&amp;lt;&amp;quot; + tag_name + &amp;quot; &amp;quot; + attribute_name &amp;quot;=&amp;quot; &amp;quot;\&amp;quot;&amp;quot; + attribute_value + &amp;quot;\&amp;quot;&amp;quot; &amp;quot;&amp;gt;&amp;quot; + content + &amp;quot;&amp;lt;/&amp;quot; + tag_name + &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.anchor(name) ===&lt;br /&gt;
&lt;br /&gt;
1. Let content be ToString(this)&lt;br /&gt;
2. Let n be ToString(name)&lt;br /&gt;
3. Return ToHTMLTag(&amp;quot;a&amp;quot;, content, &amp;quot;name&amp;quot;, n)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.big() ===&lt;br /&gt;
&lt;br /&gt;
1. Let content be ToString(this)&lt;br /&gt;
2. Return ToHTMLTag(&amp;quot;big&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.blink() ===&lt;br /&gt;
&lt;br /&gt;
1. Let content be ToString(this)&lt;br /&gt;
2. Return ToHTMLTag(&amp;quot;blink&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.bold() ===&lt;br /&gt;
&lt;br /&gt;
1. Let content be ToString(this)&lt;br /&gt;
2. Return ToHTMLTag(&amp;quot;bold&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.fixed() ===&lt;br /&gt;
&lt;br /&gt;
1. Let content be ToString(this)&lt;br /&gt;
2. Return ToHTMLTag(&amp;quot;tt&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.fontcolor(color) ===&lt;br /&gt;
&lt;br /&gt;
1. Let content be ToString(this)&lt;br /&gt;
2. Let attribute_value be ToString(color)&lt;br /&gt;
3. Return ToHTMLTag(&amp;quot;font&amp;quot;, content, &amp;quot;color&amp;quot;, attribute_value)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.fontsize(size) ===&lt;br /&gt;
&lt;br /&gt;
1. Let content be ToString(this)&lt;br /&gt;
2. Let attribute_value be ToString(size)&lt;br /&gt;
3. Return ToHTMLTag(&amp;quot;font&amp;quot;, content, &amp;quot;size&amp;quot;, attribute_value)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.italics() ===&lt;br /&gt;
&lt;br /&gt;
1. Let content be ToString(this)&lt;br /&gt;
2. Return ToHTMLTag(&amp;quot;i&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.link ===&lt;br /&gt;
&lt;br /&gt;
1. Let content be ToString(this)&lt;br /&gt;
2. Let attribute_value be ToString(href)&lt;br /&gt;
3. Return ToHTMLTag(&amp;quot;a&amp;quot;, content, &amp;quot;href&amp;quot;, attribute_value)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.small() ===&lt;br /&gt;
&lt;br /&gt;
1. Let content be ToString(this)&lt;br /&gt;
2. Return ToHTMLTag(&amp;quot;small&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.strike() ===&lt;br /&gt;
&lt;br /&gt;
1. Let content be ToString(this)&lt;br /&gt;
2. Return ToHTMLTag(&amp;quot;strike&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.sub() ===&lt;br /&gt;
&lt;br /&gt;
1. Let content be ToString(this)&lt;br /&gt;
2. Return ToHTMLTag(&amp;quot;sub&amp;quot;, content)&lt;br /&gt;
&lt;br /&gt;
=== String.prototype.sup() ===&lt;br /&gt;
&lt;br /&gt;
1. Let content be ToString(this)&lt;br /&gt;
2. Return ToHTMLTag(&amp;quot;sup&amp;quot;, content)&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=Presentations&amp;diff=2480</id>
		<title>Presentations</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=Presentations&amp;diff=2480"/>
		<updated>2007-08-24T15:19:01Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: Add my BarCamb presentation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These are the known presentations related to the WHATWG and/or HTML5.&lt;br /&gt;
&lt;br /&gt;
* [http://hixie.ch/advocacy/whatwg-presentation/ Proposing extensions to HTML4 and the DOM] by [[User:Hixie|Ian Hickson]]&lt;br /&gt;
* [http://lachy.id.au/dev/presentation/future-of-html/ The Future of HTML] by [[User:Lachlan_Hunt|Lachlan Hunt]] (Presented 2007-01-25)&lt;br /&gt;
* [http://simonwillison.net/2007/talks/oxford-html5/ What the heck is HTML 5?] by [[User:SimonW|Simon Willison]] (Presented 2007-04-11)&lt;br /&gt;
* [http://lists.w3.org/Archives/Public/www-archive/2007Apr/att-0036/html5.xml Evolving the Web: HTML5] by [[User:Annevk|Anne van Kesteren]] (Presented 2007-04-17 at QUT)&lt;br /&gt;
* [http://lists.w3.org/Archives/Public/www-archive/2007May/att-0063/html5-short.xml Evolving the Web: HTML5 (XTech 2007 edition)] by [[User:Annevk|Anne van Kesteren]] (Presented 2007-05-17 at XTech 2007)&lt;br /&gt;
* [http://2007.xtech.org/public/asset/attachment/83 Implementing an HTML5 conformance checker using XML tools] by Henri Sivonen (Presented 2007-05-18 at XTech 2007)&lt;br /&gt;
* [http://blog.whatwg.org/html5-geekmeet How HTML5 can be used today] by [[User:zcorpan|Simon Pieters]] (Presented 2007-05-23)&lt;br /&gt;
* [http://lists.w3.org/Archives/Public/www-archive/2007May/att-0087/html5.htm HTML5: Incremental Improvements to the Web] by [[User:Annevk|Anne van Kesteren]] (Presented 2007-05-31 at reboot 9.0)&lt;br /&gt;
* [http://edward.oconnor.cx/2007/BarCamp-San-Diego/ What to expect from HTML5] by [[User:EdwardOConnor|Edward O&#039;Connor]] (Presented 2007-06-03 at BarCamp San Diego)&lt;br /&gt;
* [http://lachy.id.au/dev/presentation/developing-with-html5/Developing%20with%20HTML5.ppt Developing with HTML5] by [[User:Lachlan_Hunt|Lachlan Hunt]] (Presented 2007-08-03)&lt;br /&gt;
* [http://james.html5.org/presentations/barcamb.pdf HTML 5: The Next Generation of Markup on The Web] by: [[User:jgraham|James Graham]] (Presented 2007-08-24 at BarCamp Cambridge)&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=HTML5Lib&amp;diff=2085</id>
		<title>HTML5Lib</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=HTML5Lib&amp;diff=2085"/>
		<updated>2006-12-25T00:30:45Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: /* Profiling on web-apps.htm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= HTML5Lib =&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/html5lib/ HTML5Lib] is a project to create a Python-based implementation of various parts of the WHATWG spec, in particular, a tokenizer and parser. It is &#039;&#039;&#039;not&#039;&#039;&#039; an offical WHATWG project, however we plan to use this wiki to document and discuss the library design. The code is avaliable under an open-source MIT license.&lt;br /&gt;
&lt;br /&gt;
== SVN ==&lt;br /&gt;
Please commit often with sort of detailed descriptions of what you did. If you want to make sure you&#039;re not going to redo work talk to people on #whatwg.&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
In comments &amp;quot;XXX&amp;quot; indicates something that has yet to be done. Something might be wrong, has not yet been written and other things in that general direction.&lt;br /&gt;
&lt;br /&gt;
In comments &amp;quot;AT&amp;quot; indicates that the comment documents an alternate implementation technique or strategy.&lt;br /&gt;
&lt;br /&gt;
== HTMLTokenizer ==&lt;br /&gt;
&lt;br /&gt;
The tokenizer is controlled by a single HTMLTokenizer class stored in tokenizer.py at the moment. You initialize the HTMLTokenizer with a stream argument that holds an HTMLInputStream. You can iterate over the object created to get tokens back.&lt;br /&gt;
&lt;br /&gt;
Currently tokens are objects, they will become dicts.&lt;br /&gt;
&lt;br /&gt;
=== Interface ===&lt;br /&gt;
&lt;br /&gt;
The parser needs to change the self.contentModelFlag attribute which affects how certain states are handled.&lt;br /&gt;
&lt;br /&gt;
=== Issues ===&lt;br /&gt;
* Use of if statements in the states may be suboptimal (but we should time this)&lt;br /&gt;
&lt;br /&gt;
== HTMLParser ==&lt;br /&gt;
&lt;br /&gt;
=== Profiling on web-apps.htm ===&lt;br /&gt;
&lt;br /&gt;
I did some profiling on web-apps.htm which is a rather large document. Based on that I already changed a number of things which speed us up a bit. Below are some things to consider for future revisions:&lt;br /&gt;
&lt;br /&gt;
* utils.MethodDispatcher is invoked way too often. By pre declaring some of it in InBody I managed to decrease the amount of invocatoins by over 24.000, but InBody.__init__ is invoked about 7000 times for web-apps.htm so that amount could be higher. Not sure how to put them somewhere else though. First thing I tried was HTMLParser but references get all messed up then...&lt;br /&gt;
- We should be able to store a single instance of each InsertionMode rather than creating a new one every time the mode switches. Hopefully we have been disiplined enough not to keep any state in those classes so the change should be painless.&lt;br /&gt;
&lt;br /&gt;
* 713194 calls to __contains__ in sets.py makes us slow. Takes about 1.0x CPU seconds. &lt;br /&gt;
- I&#039;ve just switched to the built-in sets type. hopefully this will help a bit [[User:Jgraham|Jgraham]] 00:30, 25 December 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
* 440382 calls to char in tokenizer.py is the runner up with 0.8x CPU seconds.&lt;br /&gt;
&lt;br /&gt;
* dataState in tokenizer.py with 0.7 CPU seconds is next.&lt;br /&gt;
&lt;br /&gt;
* __iter__ in tokenizer.py with 0.59x CPU seconds...&lt;br /&gt;
&lt;br /&gt;
* Creation of all node objects in web-apps takes .57x CPU seconds.&lt;br /&gt;
&lt;br /&gt;
* etc.&lt;br /&gt;
&lt;br /&gt;
== Testcases ==&lt;br /&gt;
Testcases are under the /tests directory. They require [http://cheeseshop.python.org/pypi/simplejson simplejson]. New code should not be checked in if it regresses previously functional unit tests. Ideally new features should be accompanied by new unit tests for those features. Documentation of the test format is available at [[Parser_tests]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Implementations]]&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=HTML5Lib&amp;diff=2084</id>
		<title>HTML5Lib</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=HTML5Lib&amp;diff=2084"/>
		<updated>2006-12-25T00:13:49Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: /* Profiling on web-apps.htm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= HTML5Lib =&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/html5lib/ HTML5Lib] is a project to create a Python-based implementation of various parts of the WHATWG spec, in particular, a tokenizer and parser. It is &#039;&#039;&#039;not&#039;&#039;&#039; an offical WHATWG project, however we plan to use this wiki to document and discuss the library design. The code is avaliable under an open-source MIT license.&lt;br /&gt;
&lt;br /&gt;
== SVN ==&lt;br /&gt;
Please commit often with sort of detailed descriptions of what you did. If you want to make sure you&#039;re not going to redo work talk to people on #whatwg.&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
In comments &amp;quot;XXX&amp;quot; indicates something that has yet to be done. Something might be wrong, has not yet been written and other things in that general direction.&lt;br /&gt;
&lt;br /&gt;
In comments &amp;quot;AT&amp;quot; indicates that the comment documents an alternate implementation technique or strategy.&lt;br /&gt;
&lt;br /&gt;
== HTMLTokenizer ==&lt;br /&gt;
&lt;br /&gt;
The tokenizer is controlled by a single HTMLTokenizer class stored in tokenizer.py at the moment. You initialize the HTMLTokenizer with a stream argument that holds an HTMLInputStream. You can iterate over the object created to get tokens back.&lt;br /&gt;
&lt;br /&gt;
Currently tokens are objects, they will become dicts.&lt;br /&gt;
&lt;br /&gt;
=== Interface ===&lt;br /&gt;
&lt;br /&gt;
The parser needs to change the self.contentModelFlag attribute which affects how certain states are handled.&lt;br /&gt;
&lt;br /&gt;
=== Issues ===&lt;br /&gt;
* Use of if statements in the states may be suboptimal (but we should time this)&lt;br /&gt;
&lt;br /&gt;
== HTMLParser ==&lt;br /&gt;
&lt;br /&gt;
=== Profiling on web-apps.htm ===&lt;br /&gt;
&lt;br /&gt;
I did some profiling on web-apps.htm which is a rather large document. Based on that I already changed a number of things which speed us up a bit. Below are some things to consider for future revisions:&lt;br /&gt;
&lt;br /&gt;
* utils.MethodDispatcher is invoked way too often. By pre declaring some of it in InBody I managed to decrease the amount of invocatoins by over 24.000, but InBody.__init__ is invoked about 7000 times for web-apps.htm so that amount could be higher. Not sure how to put them somewhere else though. First thing I tried was HTMLParser but references get all messed up then...&lt;br /&gt;
- We should be able to store a single instance of each InsertionMode rather than creating a new one every time the mode switches. Hopefully we have been disiplined enough not to keep any state in those classes so the change should be painless.&lt;br /&gt;
&lt;br /&gt;
* 713194 calls to __contains__ in sets.py makes us slow. Takes about 1.0x CPU seconds. We need to switch to built-in sets on python &amp;gt;=2.4 This should not be a difficult change.&lt;br /&gt;
&lt;br /&gt;
* 440382 calls to char in tokenizer.py is the runner up with 0.8x CPU seconds.&lt;br /&gt;
&lt;br /&gt;
* dataState in tokenizer.py with 0.7 CPU seconds is next.&lt;br /&gt;
&lt;br /&gt;
* __iter__ in tokenizer.py with 0.59x CPU seconds...&lt;br /&gt;
&lt;br /&gt;
* Creation of all node objects in web-apps takes .57x CPU seconds.&lt;br /&gt;
&lt;br /&gt;
* etc.&lt;br /&gt;
&lt;br /&gt;
== Testcases ==&lt;br /&gt;
Testcases are under the /tests directory. They require [http://cheeseshop.python.org/pypi/simplejson simplejson]. New code should not be checked in if it regresses previously functional unit tests. Ideally new features should be accompanied by new unit tests for those features. Documentation of the test format is available at [[Parser_tests]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Implementations]]&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=HTML5Lib&amp;diff=2083</id>
		<title>HTML5Lib</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=HTML5Lib&amp;diff=2083"/>
		<updated>2006-12-25T00:06:06Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: /* Testcases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= HTML5Lib =&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/html5lib/ HTML5Lib] is a project to create a Python-based implementation of various parts of the WHATWG spec, in particular, a tokenizer and parser. It is &#039;&#039;&#039;not&#039;&#039;&#039; an offical WHATWG project, however we plan to use this wiki to document and discuss the library design. The code is avaliable under an open-source MIT license.&lt;br /&gt;
&lt;br /&gt;
== SVN ==&lt;br /&gt;
Please commit often with sort of detailed descriptions of what you did. If you want to make sure you&#039;re not going to redo work talk to people on #whatwg.&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
In comments &amp;quot;XXX&amp;quot; indicates something that has yet to be done. Something might be wrong, has not yet been written and other things in that general direction.&lt;br /&gt;
&lt;br /&gt;
In comments &amp;quot;AT&amp;quot; indicates that the comment documents an alternate implementation technique or strategy.&lt;br /&gt;
&lt;br /&gt;
== HTMLTokenizer ==&lt;br /&gt;
&lt;br /&gt;
The tokenizer is controlled by a single HTMLTokenizer class stored in tokenizer.py at the moment. You initialize the HTMLTokenizer with a stream argument that holds an HTMLInputStream. You can iterate over the object created to get tokens back.&lt;br /&gt;
&lt;br /&gt;
Currently tokens are objects, they will become dicts.&lt;br /&gt;
&lt;br /&gt;
=== Interface ===&lt;br /&gt;
&lt;br /&gt;
The parser needs to change the self.contentModelFlag attribute which affects how certain states are handled.&lt;br /&gt;
&lt;br /&gt;
=== Issues ===&lt;br /&gt;
* Use of if statements in the states may be suboptimal (but we should time this)&lt;br /&gt;
&lt;br /&gt;
== HTMLParser ==&lt;br /&gt;
&lt;br /&gt;
=== Profiling on web-apps.htm ===&lt;br /&gt;
&lt;br /&gt;
I did some profiling on web-apps.htm which is a rather large document. Based on that I already changed a number of things which speed us up a bit. Below are some things to consider for future revisions:&lt;br /&gt;
&lt;br /&gt;
* utils.MethodDispatcher is invoked way too often. By pre declaring some of it in InBody I managed to decrease the amount of invocatoins by over 24.000, but InBody.__init__ is invoked about 7000 times for web-apps.htm so that amount could be higher. Not sure how to put them somewhere else though. First thing I tried was HTMLParser but references get all messed up then...&lt;br /&gt;
&lt;br /&gt;
* 713194 calls to __contains__ in sets.py makes us slow. Takes about 1.0x CPU seconds.&lt;br /&gt;
&lt;br /&gt;
* 440382 calls to char in tokenizer.py is the runner up with 0.8x CPU seconds.&lt;br /&gt;
&lt;br /&gt;
* dataState in tokenizer.py with 0.7 CPU seconds is next.&lt;br /&gt;
&lt;br /&gt;
* __iter_ in tokenizer.py with 0.59x CPU seconds...&lt;br /&gt;
&lt;br /&gt;
* Creation of all node objects in web-apps takes .57x CPU seconds.&lt;br /&gt;
&lt;br /&gt;
* etc.&lt;br /&gt;
&lt;br /&gt;
== Testcases ==&lt;br /&gt;
Testcases are under the /tests directory. They require [http://cheeseshop.python.org/pypi/simplejson simplejson]. New code should not be checked in if it regresses previously functional unit tests. Ideally new features should be accompanied by new unit tests for those features. Documentation of the test format is available at [[Parser_tests]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Implementations]]&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=Parser_tests&amp;diff=2048</id>
		<title>Parser tests</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=Parser_tests&amp;diff=2048"/>
		<updated>2006-12-11T14:29:57Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: typos&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Parser Tests=&lt;br /&gt;
&lt;br /&gt;
This page documents the unit-test format(s) being used for implementations of the HTML5 parsing spec. The aim is to produce implementation-independent, self-describing tests that can be shared between any groups working on these technologies.&lt;br /&gt;
&lt;br /&gt;
==Tokenizer Tests==&lt;br /&gt;
The test format is [http://www.json.org/ json]. This has the advantage that the syntax allows backward-compatible extensions to the tests and the disadvantage that it is relatively verbose.&lt;br /&gt;
&lt;br /&gt;
===Basic Structure===&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;tests&amp;quot;:&lt;br /&gt;
 [&lt;br /&gt;
 &lt;br /&gt;
 {&amp;quot;description&amp;quot;:&amp;quot;Test description&amp;quot;,&lt;br /&gt;
 &amp;quot;input&amp;quot;:&amp;quot;input_string&amp;quot;,&lt;br /&gt;
 &amp;quot;output&amp;quot;:[expected_output_tokens]}&lt;br /&gt;
 &lt;br /&gt;
 ]&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
input_string is a string literal containing the input string to pass to the tokenizer&lt;br /&gt;
expected_output_tokens is a list of tokens, ordered with the first produced by the tokenizer the first (leftmost) in the list. The list must mach the &#039;&#039;&#039;complete&#039;&#039;&#039; list of tokens that the tokenizer should produce. Valid tokens are:&lt;br /&gt;
&lt;br /&gt;
 [&amp;quot;DOCTYPE&amp;quot;, name, error?]&lt;br /&gt;
 [&amp;quot;StartTag&amp;quot;, name, {attributes}])&lt;br /&gt;
 [&amp;quot;EndTag&amp;quot;, name]&lt;br /&gt;
 [&amp;quot;Comment&amp;quot;, data]&lt;br /&gt;
 [&amp;quot;Character&amp;quot;, data]&lt;br /&gt;
 &amp;quot;ParseError&amp;quot;&lt;br /&gt;
 &amp;quot;AtheistParseError&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multiple tests per file are allowed simply by adding more objects to the &amp;quot;tests&amp;quot; list. &lt;br /&gt;
&lt;br /&gt;
=== Open Issues ===&lt;br /&gt;
* Is the format too verbose?&lt;br /&gt;
* Do we want to allow the starting content model flag of the tokenizer to be specified (e.g. through a &amp;quot;contentModel&amp;quot; field in the test objects?&lt;br /&gt;
* Do we want to allow the test to pass if only a subset of the actual tokens emitted matches the expected_output_tokens list?&lt;br /&gt;
* Do we want the &amp;quot;AtheistParseError&amp;quot;?&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=HTML5Lib&amp;diff=2047</id>
		<title>HTML5Lib</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=HTML5Lib&amp;diff=2047"/>
		<updated>2006-12-09T22:39:39Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: Move testcases bit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=HTML5Lib=&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/html5lib/ HTML5Lib] is a project to create a Python-based implementation of various parts of the WHATWG spec, in particular, a tokenizer and parser. It is &#039;&#039;&#039;not&#039;&#039;&#039; an offical WHATWG project, however we plan to use this wiki to document and discuss the library design. The code is avaliable under an open-source MIT license.&lt;br /&gt;
&lt;br /&gt;
==SVN==&lt;br /&gt;
Please commit often with sort of detailed descriptions of what you did. If you want to make sure you&#039;re not going to redo work talk to people on #whatwg.&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
&lt;br /&gt;
===General===&lt;br /&gt;
&lt;br /&gt;
In comments &amp;quot;XXX&amp;quot; indicates something that has yet to be done. Something might be wrong, has not yet been written and other things in that general direction.&lt;br /&gt;
&lt;br /&gt;
In comments &amp;quot;AT&amp;quot; indicates that the comment documents an alternate implementation technique or strategy.&lt;br /&gt;
&lt;br /&gt;
===HTMLTokenizer===&lt;br /&gt;
&lt;br /&gt;
The tokenizer is controlled by a single HTMLTokenizer class stored in tokenizer.py at the moment. You initialize the HTMLTokenizer with a parser argument. For this project that is represented by the HTMLParser. self.parser points to that. The parser has to implement the following methods in order to work:&lt;br /&gt;
&lt;br /&gt;
* processDoctype(name, error)&lt;br /&gt;
* processStartTag(tagname, attributes{})&lt;br /&gt;
* processEndTag()(tagname)&lt;br /&gt;
* processComment(data)&lt;br /&gt;
* processCharacter(data)&lt;br /&gt;
* processEOF()&lt;br /&gt;
&lt;br /&gt;
====Interface====&lt;br /&gt;
&lt;br /&gt;
You need to invoke the &amp;quot;tokenize&amp;quot; method with a dataStream argument in order to start.&lt;br /&gt;
&lt;br /&gt;
The parser can also change the self.contentModelFlag attribute which affects how certain states are handled.&lt;br /&gt;
&lt;br /&gt;
====Issues====&lt;br /&gt;
* Should keep track of line+col number for error reporting&lt;br /&gt;
* Use of if statements in the states may be suboptimal (but we should time this)&lt;br /&gt;
&lt;br /&gt;
==Testcases==&lt;br /&gt;
Testcases are under the /tests directory. They require [http://cheeseshop.python.org/pypi/simplejson simplejson] and can optionally be run under the [http://nose.python-hosting.com/ nose] unit-test framework. New code should not be checked in if it regresses previously functional unit tests. Ideally new features should be accompanied by new unit tests for those features. Documentation of the test format is available at [[Parser_tests]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Implementations]]&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=HTML5Lib&amp;diff=2046</id>
		<title>HTML5Lib</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=HTML5Lib&amp;diff=2046"/>
		<updated>2006-12-09T22:36:54Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: Add note about testcases&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=HTML5Lib=&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/html5lib/ HTML5Lib] is a project to create a Python-based implementation of various parts of the WHATWG spec, in particular, a tokenizer and parser. It is &#039;&#039;&#039;not&#039;&#039;&#039; an offical WHATWG project, however we plan to use this wiki to document and discuss the library design. The code is avaliable under an open-source MIT license.&lt;br /&gt;
&lt;br /&gt;
==SVN==&lt;br /&gt;
Please commit often with sort of detailed descriptions of what you did. If you want to make sure you&#039;re not going to redo work talk to people on #whatwg.&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
&lt;br /&gt;
===General===&lt;br /&gt;
&lt;br /&gt;
In comments &amp;quot;XXX&amp;quot; indicates something that has yet to be done. Something might be wrong, has not yet been written and other things in that general direction.&lt;br /&gt;
&lt;br /&gt;
In comments &amp;quot;AT&amp;quot; indicates that the comment documents an alternate implementation technique or strategy.&lt;br /&gt;
&lt;br /&gt;
===HTMLTokenizer===&lt;br /&gt;
&lt;br /&gt;
The tokenizer is controlled by a single HTMLTokenizer class stored in tokenizer.py at the moment. You initialize the HTMLTokenizer with a parser argument. For this project that is represented by the HTMLParser. self.parser points to that. The parser has to implement the following methods in order to work:&lt;br /&gt;
&lt;br /&gt;
* processDoctype(name, error)&lt;br /&gt;
* processStartTag(tagname, attributes{})&lt;br /&gt;
* processEndTag()(tagname)&lt;br /&gt;
* processComment(data)&lt;br /&gt;
* processCharacter(data)&lt;br /&gt;
* processEOF()&lt;br /&gt;
&lt;br /&gt;
====Interface====&lt;br /&gt;
&lt;br /&gt;
You need to invoke the &amp;quot;tokenize&amp;quot; method with a dataStream argument in order to start.&lt;br /&gt;
&lt;br /&gt;
The parser can also change the self.contentModelFlag attribute which affects how certain states are handled.&lt;br /&gt;
&lt;br /&gt;
===Testcases===&lt;br /&gt;
Testcases are under the /tests directory. They require [http://cheeseshop.python.org/pypi/simplejson simplejson] and can optionally be run under the [http://nose.python-hosting.com/ nose] unit-test framework. New code should not be checked in if it regresses previously functional unit tests. Ideally new features should be accompanied by new unit tests for those features. Documentation of the test format is available at [[Parser_tests]].&lt;br /&gt;
&lt;br /&gt;
====Issues====&lt;br /&gt;
* Should keep track of line+col number for error reporting&lt;br /&gt;
* Use of if statements in the states may be suboptimal (but we should time this)&lt;br /&gt;
&lt;br /&gt;
[[Category:Implementations]]&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=Parser_tests&amp;diff=2045</id>
		<title>Parser tests</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=Parser_tests&amp;diff=2045"/>
		<updated>2006-12-09T22:25:52Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: Create tokenizer testcase documentation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Parser Tests=&lt;br /&gt;
&lt;br /&gt;
This page documents the unit-test format(s) being used for implementations of the HTML5 parsing spec. The aim is to produce implementation-independent, self-describing tests that can be shared between any groups working on these technologies.&lt;br /&gt;
&lt;br /&gt;
==Tokenizer Tests==&lt;br /&gt;
The test format is [http://www.json.org/ json]. This has the advantage that the syntax is extensible and the disadvantage that it is relatively verbose.&lt;br /&gt;
&lt;br /&gt;
===Basic Structure===&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;tests&amp;quot;:&lt;br /&gt;
 [&lt;br /&gt;
 &lt;br /&gt;
 {&amp;quot;description&amp;quot;:&amp;quot;Test description&amp;quot;,&lt;br /&gt;
 &amp;quot;input&amp;quot;:&amp;quot;input_string&amp;quot;,&lt;br /&gt;
 &amp;quot;output&amp;quot;:[expected_output_tokens]}&lt;br /&gt;
 ]&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
input_string is a string literal containing the input string to pass to the tokenizer&lt;br /&gt;
expected_output_tokens is a list of tokens, ordered with the first produced by the tokenizer the first (leftmost) in the list. The list must mach the &#039;&#039;&#039;complete&#039;&#039;&#039; list of tokens that the tokenizer should produce. Valid tokens are:&lt;br /&gt;
&lt;br /&gt;
 [&amp;quot;DOCTYPE&amp;quot;, name, error?]&lt;br /&gt;
 [&amp;quot;StartTag&amp;quot;, name, {attributes}])&lt;br /&gt;
 [&amp;quot;EndTag&amp;quot;, name]&lt;br /&gt;
 [&amp;quot;Comment&amp;quot;, data]&lt;br /&gt;
 [&amp;quot;Character&amp;quot;, data]&lt;br /&gt;
 &amp;quot;ParseError&amp;quot;&lt;br /&gt;
 &amp;quot;AtheistParseError&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multiple tests per file are allowed simply by adding more objects to the &amp;quot;tests&amp;quot; list. &lt;br /&gt;
&lt;br /&gt;
=== Open Issues ===&lt;br /&gt;
* Is the format too verbose&lt;br /&gt;
* Do we want to allow the starting content model flag of the tokenizer to be specified (e.g. through a &amp;quot;contentModel&amp;quot; field in the test objects&lt;br /&gt;
* Do we want to allow the test to pass if only a subset of the actual tokens emitted matches the expected_output_tokens list.&lt;br /&gt;
* Do we want an &amp;quot;AtheistParseError&amp;quot;&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=HTML5Lib&amp;diff=1971</id>
		<title>HTML5Lib</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=HTML5Lib&amp;diff=1971"/>
		<updated>2006-12-03T00:53:29Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=HTML5Lib=&lt;br /&gt;
&lt;br /&gt;
HTML5Lib is a project to create a Python-based implementation of various parts of the WHATWG spec, in particular, a tokenizer and parser. It is &#039;&#039;&#039;not&#039;&#039;&#039; an offical WHATWG project, however we plan to use this wiki to document and discuss the library design. The code is avaliable under an open-source MIT license.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Important Note ==&lt;br /&gt;
&#039;&#039;&#039;Do not contribute material to this page unless you are happy for it to be released under the terms of the MIT license rather than the usual GFDL&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Project Page==&lt;br /&gt;
[http://code.google.com/p/html5lib/ Google code project page]&lt;br /&gt;
&lt;br /&gt;
==Design Issues==&lt;br /&gt;
&lt;br /&gt;
===Tokenizer===&lt;br /&gt;
&lt;br /&gt;
The tokenizer is controlled by a single Tokenizer class. It emits tokens which are subclasses of the Token class. At some level it needs to be possible to store information about the token being emitted as the tree builder sometimes need to reprocess a token, however there may be some opportunity to economize here.&lt;br /&gt;
&lt;br /&gt;
====Interface====&lt;br /&gt;
getToken - return the next token.&lt;br /&gt;
&lt;br /&gt;
====Description====&lt;br /&gt;
The current tokenizer state is stored in the state attribute. Each state corresponds to a single method on the Tokenizer object. The states attributes maps state names to methods.&lt;br /&gt;
&lt;br /&gt;
Occasionally, parsing will result in characters being read multiple times from the stream. Therefore a queue is used to buffer characters that have been read from the file but need to be reprocessed (do we need to buffer multiple characters? Will support for a trailing slash change this?).&lt;br /&gt;
&lt;br /&gt;
During processing, any unfinished tokens are held in the token attribute and finished tokens in the tokenQueue.&lt;br /&gt;
&lt;br /&gt;
====Issues====&lt;br /&gt;
* Should keep track of line+col number for error reporting&lt;br /&gt;
* Use of if statements in the states may be suboptimal (but we should time this)&lt;br /&gt;
&lt;br /&gt;
[[Category:Implementations]]&lt;br /&gt;
&lt;br /&gt;
==Idea on how it can work together==&lt;br /&gt;
&lt;br /&gt;
There&#039;s an HTMLParser class you can invoke with an object. What this object is can be decided later. File object, string, URI, etc. The newly created HTMLParser object then instantiates an HTMLTokenizer with itself as argument and the object. The HTMLTokenizer then invokes does things like parser.emitStartTagToken(name, ...) etc.&lt;br /&gt;
&lt;br /&gt;
OK I&#039;ve created a callback branch in svn with work in this direction. I don&#039;t know if it is going to work better or not... --[[User:Jgraham|Jgraham]] 00:53, 3 December 2006 (UTC)&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=HTML5Lib&amp;diff=1970</id>
		<title>HTML5Lib</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=HTML5Lib&amp;diff=1970"/>
		<updated>2006-12-03T00:00:46Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: Copyright notice&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=HTML5Lib=&lt;br /&gt;
&lt;br /&gt;
HTML5Lib is a project to create a Python-based implementation of various parts of the WHATWG spec, in particular, a tokenizer and parser. It is &#039;&#039;&#039;not&#039;&#039;&#039; an offical WHATWG project, however we plan to use this wiki to document and discuss the library design. The code is avaliable under an open-source MIT license.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Important Note ==&lt;br /&gt;
&#039;&#039;&#039;Do not contribute material to this page unless you are happy for it to be released under the terms of the MIT license rather than the usual GFDL&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Project Page==&lt;br /&gt;
[http://code.google.com/p/html5lib/ Google code project page]&lt;br /&gt;
&lt;br /&gt;
==Design Issues==&lt;br /&gt;
&lt;br /&gt;
===Tokenizer===&lt;br /&gt;
&lt;br /&gt;
The tokenizer is controlled by a single Tokenizer class. It emits tokens which are subclasses of the Token class. At some level it needs to be possible to store information about the token being emitted as the tree builder sometimes need to reprocess a token, however there may be some opportunity to economize here.&lt;br /&gt;
&lt;br /&gt;
====Interface====&lt;br /&gt;
getToken - return the next token.&lt;br /&gt;
&lt;br /&gt;
====Description====&lt;br /&gt;
The current tokenizer state is stored in the state attribute. Each state corresponds to a single method on the Tokenizer object. The states attributes maps state names to methods.&lt;br /&gt;
&lt;br /&gt;
Occasionally, parsing will result in characters being read multiple times from the stream. Therefore a queue is used to buffer characters that have been read from the file but need to be reprocessed (do we need to buffer multiple characters? Will support for a trailing slash change this?).&lt;br /&gt;
&lt;br /&gt;
During processing, any unfinished tokens are held in the token attribute and finished tokens in the tokenQueue.&lt;br /&gt;
&lt;br /&gt;
====Issues====&lt;br /&gt;
* Should keep track of line+col number for error reporting&lt;br /&gt;
* Use of if statements in the states may be suboptimal (but we should time this)&lt;br /&gt;
&lt;br /&gt;
[[Category:Implementations]]&lt;br /&gt;
&lt;br /&gt;
==Idea on how it can work together==&lt;br /&gt;
&lt;br /&gt;
There&#039;s an HTMLParser class you can invoke with an object. What this object is can be decided later. File object, string, URI, etc. The newly created HTMLParser object then instantiates an HTMLTokenizer with itself as argument and the object. The HTMLTokenizer then invokes does things like parser.emitStartTagToken(name, ...) etc.&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=HTML5Lib&amp;diff=1966</id>
		<title>HTML5Lib</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=HTML5Lib&amp;diff=1966"/>
		<updated>2006-12-02T18:51:43Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=HTML5Lib=&lt;br /&gt;
&lt;br /&gt;
HTML5Lib is a project to create a Python-based implementation of various parts of the WHATWG spec, in particular, a tokeniser and parser. It is &#039;&#039;&#039;not&#039;&#039;&#039; an offical WHATWG project, however we plan to use this wiki to document and discuss the library design. The code is avaliable under an open-source MIT license.&lt;br /&gt;
&lt;br /&gt;
==Project Page==&lt;br /&gt;
[http://code.google.com/p/html5lib/ Google code project page]&lt;br /&gt;
&lt;br /&gt;
==Design Issues==&lt;br /&gt;
&lt;br /&gt;
===Tokeniser===&lt;br /&gt;
&lt;br /&gt;
The tokeniser is controlled by a single Tokeniser class. It emits tokens which are subclasses of the Token class. At some level it needs to be possible to store information about the token being emitted as the tree builder sometimes need to reprocess a token, however there may be some opportunity to economize here.&lt;br /&gt;
&lt;br /&gt;
====Interface====&lt;br /&gt;
getToken - return the next token.&lt;br /&gt;
&lt;br /&gt;
====Description====&lt;br /&gt;
The current tokeniser state is stored in the state attribute. Each state corresponds to a single method on the Tokeniser object. The states attributes maps state names to methods.&lt;br /&gt;
&lt;br /&gt;
Occasionally, parsing will result in characters being read multiple times from the stream. Therefore a queue is used to buffer characters that have been read from the file but need to be reprocessed (do we need to buffer multiple characters? Will support for a trailing slash change this?).&lt;br /&gt;
&lt;br /&gt;
During processing, any unfinished tokens are held in the token attribute and finished tokens in the tokenQueue.&lt;br /&gt;
&lt;br /&gt;
====Issues====&lt;br /&gt;
* Should keep track of line+col number for error reporting&lt;br /&gt;
* Use of if statements in the states may be suboptimal (but we should time this)&lt;br /&gt;
&lt;br /&gt;
[[Category:Implementations]]&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=HTML5Lib&amp;diff=1965</id>
		<title>HTML5Lib</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=HTML5Lib&amp;diff=1965"/>
		<updated>2006-12-02T18:28:55Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: readd category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=HTML5Lib=&lt;br /&gt;
&lt;br /&gt;
HTML5Lib is a project to create a Python-based implementation of various parts of the WHATWG spec, in particular, a tokeniser and parser. It is &#039;&#039;&#039;not&#039;&#039;&#039; an offical WHATWG project, however we plan to use this wiki to document and discuss the library design. The code is avaliable under an open-source MIT license.&lt;br /&gt;
&lt;br /&gt;
==Project Page==&lt;br /&gt;
[http://code.google.com/p/html5lib/ Google code project page]&lt;br /&gt;
&lt;br /&gt;
==Design Issues==&lt;br /&gt;
&lt;br /&gt;
===Tokeniser===&lt;br /&gt;
&lt;br /&gt;
The tokeniser is controlled by a single Tokeniser class. It emits tokens which are subclasses of the Token class. At some level it needs to be possible to store information about the token being emitted as the tree builder sometimes need to reprocess a token, however there may be some opportunity to economize here.&lt;br /&gt;
&lt;br /&gt;
====Interface====&lt;br /&gt;
getToken - return the next token.&lt;br /&gt;
&lt;br /&gt;
====Description====&lt;br /&gt;
The current tokeniser state is stored in the tokenQueue. Each state corresponds to a single method on the Tokeniser object. The states attributes maps state names to methods.&lt;br /&gt;
Occasionally, parsing will result in characters being read multiple times from the stream. Therefore a queue is used to buffer characters that have been read from the file but need to be reprocessed (do we need to buffer multiple characters? Will support for a trailing slash change this?).&lt;br /&gt;
During processing, any unfinished tokens are held in the token attribute and finished tokens in the tokenQueue.&lt;br /&gt;
&lt;br /&gt;
====Issues====&lt;br /&gt;
* Should keep track of line+col number for error reporting&lt;br /&gt;
* Use of if statements in the states may be suboptimal (but we should time this)&lt;br /&gt;
&lt;br /&gt;
[[Category:Implementations]]&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=HTML5Lib&amp;diff=1964</id>
		<title>HTML5Lib</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=HTML5Lib&amp;diff=1964"/>
		<updated>2006-12-02T18:27:24Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: Description of tokeniser&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=HTML5Lib=&lt;br /&gt;
&lt;br /&gt;
HTML5Lib is a project to create a Python-based implementation of various parts of the WHATWG spec, in particular, a tokeniser and parser. It is &#039;&#039;&#039;not&#039;&#039;&#039; an offical WHATWG project, however we plan to use this wiki to document and discuss the library design. The code is avaliable under an open-source MIT license.&lt;br /&gt;
&lt;br /&gt;
==Project Page==&lt;br /&gt;
[http://code.google.com/p/html5lib/ Google code project page]&lt;br /&gt;
&lt;br /&gt;
==Design Issues==&lt;br /&gt;
&lt;br /&gt;
===Tokeniser===&lt;br /&gt;
&lt;br /&gt;
The tokeniser is controlled by a single Tokeniser class. It emits tokens which are subclasses of the Token class. At some level it needs to be possible to store information about the token being emitted as the tree builder sometimes need to reprocess a token, however there may be some opportunity to economize here.&lt;br /&gt;
&lt;br /&gt;
====Interface====&lt;br /&gt;
getToken - return the next token.&lt;br /&gt;
&lt;br /&gt;
====Description====&lt;br /&gt;
The current tokeniser state is stored in the tokenQueue. Each state corresponds to a single method on the Tokeniser object. The states attributes maps state names to methods.&lt;br /&gt;
Occasionally, parsing will result in characters being read multiple times from the stream. Therefore a queue is used to buffer characters that have been read from the file but need to be reprocessed (do we need to buffer multiple characters? Will support for a trailing slash change this?).&lt;br /&gt;
During processing, any unfinished tokens are held in the token attribute and finished tokens in the tokenQueue.&lt;br /&gt;
&lt;br /&gt;
====Issues====&lt;br /&gt;
* Should keep track of line+col number for error reporting&lt;br /&gt;
* Use of if statements in the states may be suboptimal (but we should time this)&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=HTML5Lib&amp;diff=1959</id>
		<title>HTML5Lib</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=HTML5Lib&amp;diff=1959"/>
		<updated>2006-12-02T17:25:42Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: Initial page creation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=HTML5Lib=&lt;br /&gt;
&lt;br /&gt;
HTML5Lib is a project to create a Python-based implementation of various parts of the WHATWG spec, in particular, a tokeniser and parser. It is &#039;&#039;&#039;not&#039;&#039;&#039; an offical WHATWG project, however we plan to use this wiki to document and discuss the library design. The code is avaliable under an open-source MIT license.&lt;br /&gt;
&lt;br /&gt;
==Project Page==&lt;br /&gt;
[http://code.google.com/p/html5lib/ Google code project page]&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=Implementations&amp;diff=1958</id>
		<title>Implementations</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=Implementations&amp;diff=1958"/>
		<updated>2006-12-02T17:19:46Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: Start implementations page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page documents implementations of various WHATWG specs&lt;br /&gt;
&lt;br /&gt;
==Web Browsers==&lt;br /&gt;
&lt;br /&gt;
==Libraries==&lt;br /&gt;
* [[HTML5Lib]]&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=Main_Page&amp;diff=1957</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=Main_Page&amp;diff=1957"/>
		<updated>2006-12-02T17:17:29Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: Add implementations page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the WHATWG Wiki. Before you begin, please read the [[WHATWG Wiki:Contribution Guidelines|Contribution Guidelines]].&lt;br /&gt;
&lt;br /&gt;
==Purpose==&lt;br /&gt;
The purpose of the WHATWG Wiki is to create a place for WHATWG contributors to post and compile their own proposals and ideas regarding WHATWG specifications. The specifications themselves will not be available for editing via this wiki. However, ideas you post here may find their way into current and future WHATWG specifications.&lt;br /&gt;
&lt;br /&gt;
== Feature Proposals ==&lt;br /&gt;
&lt;br /&gt;
See [[Feature Proposals]].&lt;br /&gt;
&lt;br /&gt;
==WHATWG Specifications==&lt;br /&gt;
* [[Web Forms 2.0]]&lt;br /&gt;
* [[Web Applications 1.0]]&lt;br /&gt;
* [[Web Controls 1.0]]&lt;br /&gt;
&lt;br /&gt;
==Implementations==&lt;br /&gt;
See [[Implementations]].&lt;br /&gt;
&lt;br /&gt;
==Communicating with the community==&lt;br /&gt;
The WHATWG community has four main channels of communication:&lt;br /&gt;
* [http://www.whatwg.org/mailing-list The mailing list]&lt;br /&gt;
* [http://blog.whatwg.org/ The blog]&lt;br /&gt;
* [http://wiki.whatwg.org/ This wiki]&lt;br /&gt;
* [[IRC]]&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
	<entry>
		<id>https://wiki.whatwg.org/index.php?title=Image_Caption&amp;diff=1882</id>
		<title>Image Caption</title>
		<link rel="alternate" type="text/html" href="https://wiki.whatwg.org/index.php?title=Image_Caption&amp;diff=1882"/>
		<updated>2006-11-16T18:27:35Z</updated>

		<summary type="html">&lt;p&gt;Jgraham: reword text on assitive technologies&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Image caption are often found on the web, but there is no standard markup for this.&lt;br /&gt;
&lt;br /&gt;
== Problem Description ==&lt;br /&gt;
Currently, most people use either a table, custom class names, or simply put the image inside a paragraph, each option either conveying a wrong meaning or being ambiguous with the rest of the content.&lt;br /&gt;
&lt;br /&gt;
An interesting analysis has been done on the subject by Dan Cederholm in one of his SimpleQuiz. [http://www.simplebits.com/notebook/2004/01/20/sqxi_conclusion.html His conclusion]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;So in this case, I might choose option A -- because visually it shows the relationship between the items better than the others. But I suppose this is bad semantics. Or maybe just another case where we don&#039;t have the &#039;perfect&#039; set of defined elements for this (very) specific job.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And his option A was:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;img scr=&amp;quot;...&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
   Caption Text&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In other word, he could not figure out anything good using current elements available in HTML, and, as most people do, had to create his own solution.&lt;br /&gt;
&lt;br /&gt;
Setting a standard for such things -- an explicit association between the caption and the illustration -- would help image search engines, it could enable the automatic creation of a figure index for a page. The fact that image captions should be treated differently to body text (they are not in the main flow of the document) suggests this element could be important for figure handling by assistive tools allowing e.g. aural browsers to skip captions except on explicit user request.&lt;br /&gt;
&lt;br /&gt;
== Proposed Solutions ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;figure&amp;gt; with &amp;amp;lt;caption&amp;gt; ===&lt;br /&gt;
A &amp;lt;figure&amp;gt; element contains illustrative content for the current section. It can contain a &amp;amp;lt;caption&amp;gt; element, either as the first or the last child, that will be used to describe or give a caption to the content of the figure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;figure&amp;gt;&lt;br /&gt;
  &amp;lt;caption&amp;gt;Caption Text&amp;lt;/caption&amp;gt;&lt;br /&gt;
  &amp;lt;img src=&amp;quot;...&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/figure&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Processing Model ====&lt;br /&gt;
The processing model for HTML files must be changed so that the &amp;amp;lt;caption&amp;gt; is no longer ignored when outside the context of a table. It could also be a good idea to add a new figure insertion mode that would prevent figure captions from being moved to the enclosing table when inside a table cell, otherwise &amp;amp;lt;figure&amp;gt; will break in table-based layouts.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
  &amp;lt;figure&amp;gt;&lt;br /&gt;
    &amp;lt;caption&amp;gt;Caption Text&amp;lt;/caption&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;...&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/figure&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Limitations ====&lt;br /&gt;
&amp;amp;lt;caption&amp;gt; being ignored by current browsers when outside a table makes it impossible to style, and it&#039;ll also be terribly broken with table layouts when figure captions end up at the top (or the bottom) of the enclosing table.&lt;br /&gt;
&lt;br /&gt;
==== Implementation ====&lt;br /&gt;
Parsing changes in this section could be hard to implement is the &amp;amp;lt;caption&amp;gt; element&#039;s legacy within &amp;amp;lt;table&amp;gt;. So it is uncertain &lt;br /&gt;
&lt;br /&gt;
Putting aside the parsing problem, there&#039;s not much else to implement for visual browsers. A good display model that could be used to display figures is already available in CSS 2.1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
figure { display: table; }&lt;br /&gt;
caption { display: table-caption; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would display the figure as a one-cell table, and the caption either at the top or at the bottom (depending on the [http://www.w3.org/TR/CSS21/tables.html#propdef-caption-side caption-side] property). The interesting part of this model is that the caption&#039;s width is constrained by the width of the figure, making it the ideal choice for floated figures.&lt;br /&gt;
&lt;br /&gt;
==== Adoption ==== &lt;br /&gt;
The syntax is pretty straightforward to use. &amp;quot;figure&amp;quot; and &amp;quot;caption&amp;quot; are commonly used terms to designate exactly this feature in the print world. It should be a natural choice to authors that wonder how to markup their images.&lt;br /&gt;
&lt;br /&gt;
This markup won&#039;t work however if an author wants the caption to be elsewhere in the document. (In this proposal, &amp;amp;lt;caption&amp;gt; is pinned to the figure&#039;s content.) It does not seem a common use case however.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;figure&amp;gt; with &amp;amp;lt;legend&amp;gt; ===&lt;br /&gt;
A &amp;lt;figure&amp;gt; element contains illustrative content for the current section. It can contain a &amp;amp;lt;legend&amp;gt; element, either as the first or the last child, that will be used to describe or give a caption to the content of the figure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;figure&amp;gt;&lt;br /&gt;
  &amp;lt;legend&amp;gt;Caption Text&amp;lt;/legend&amp;gt;&lt;br /&gt;
  &amp;lt;img src=&amp;quot;...&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/figure&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Processing Model ====&lt;br /&gt;
:&#039;&#039;To be completed&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Limitations ====&lt;br /&gt;
:&#039;&#039;To be completed&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Implementation ====&lt;br /&gt;
A good display model that could be used to display figures is already available in CSS 2.1, the table model. A default stylesheet could look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
figure { display: table; }&lt;br /&gt;
figure legend { display: table-caption; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would display the figure as a one-cell table, and the figure legend either at the top or at the bottom (depending on the [http://www.w3.org/TR/CSS21/tables.html#propdef-caption-side caption-side] property). The interesting part of this model is that the legend&#039;s width is constrained by the width of the figure, making it the ideal choice for floated figures.&lt;br /&gt;
&lt;br /&gt;
==== Adoption ==== &lt;br /&gt;
&amp;quot;figure&amp;quot; and &amp;quot;legend&amp;quot; are commonly used terms in the print world, so their use could prove natural to authors. It is most likely that authors that need a markup for their figure will chose this one if it is sanctioned in a standard.&lt;br /&gt;
&lt;br /&gt;
This markup won&#039;t work if an author wants the caption to be elsewhere in the document. (In this proposal, &amp;amp;lt;legend&amp;gt; is pinned to the figure&#039;s content.) It does not seem a common use case however.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
:&#039;&#039;Some evidence is there that this feature is desparately needed on the web.&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Jgraham</name></author>
	</entry>
</feed>