--- markup/html/scripting-parser/parser.html 2008/05/16 10:29:25 1.17 +++ markup/html/scripting-parser/parser.html 2008/09/20 13:32:45 1.20 @@ -295,7 +295,7 @@ // 8.1. If the parser were originally created for the ... if (this.fragmentParsingMode) { // 8.2. Mark the script element as "already executed" and ... - el.alreadyExecuted = true; + el.manakaiAlreadyExecuted = true; continue; } @@ -312,8 +312,8 @@ oldInsertionPoint += this.insertionPoint; this.setInsertionPoint (oldInsertionPoint); - // 12. If there is a script that will execute as soon as ... - while (this.scriptExecutedWhenParserResumes) { + // 12. If there is a pending external script + while (this.pendingExternalScript) { // 12.1. If the tree construction stage is being called reentrantly if (this.reentrant) { log ('parse: abort (reentrance)'); @@ -323,8 +323,8 @@ // 12.2. Otherwise } else { // 1. - var script = this.scriptExecutedWhenParserResumes; - this.scriptExecutedWhenParserResumes = null; + var script = this.pendingExternalScript; + this.pendingExternalScript = null; // 2. Pause until the script has completed loading. // @@ -521,54 +521,60 @@ var doc = this.ownerDocument || this; var p = doc._parser; - // 1. Script type + // 1.The script's type // - // 2.1. If scripting is disabled + // 2. The cript's character encoding + // + + // 3.1. If without script // // 2.2. If the script element was created by an XML ... innerHTML ... // // 2.3. If the user agent does not support the scripting language ... // - // 2.4. If the script element has its "already executed" flag set - if (e.manakaiAlreadyExecuted) { + if (false) { // 2.5. Abort these steps at this point. - log ('Running a script: aborted (already executed)'); + log ('Running a script: aborted (noscript)'); logIndentLevel--; return e; } - // 3. Set the element's "already executed" flag. + // 4. Set the element's "already executed" flag. e.manakaiAlreadyExecuted = true; - // 4. If the element has a src attribute, then a load for ... + // 5. If the element has a src attribute, then a load for ... // TODO: load an external resource // 5. The first of the following options: - // 5.1. if (/* TODO: If the document is still being parsed && */ e.defer && !e.async) { + // 6.1. p.scriptsExecutedAfterParsing.push (e); log ('Running a script: aborted (defer)'); } else if (e.async && e.src != null) { + // 6.2. p.scriptsExecutedAsynchronously.push (e); log ('Running a script: aborted (async src)'); } else if (e.async && e.src == null && p.scriptsExecutedAsynchronously.length > 0) { + // 6.3. p.scriptsExecutedAsynchronously.push (e); log ('Running a script: aborted (async)'); - // ISSUE: What is the difference with the case above? } else if (e.src != null && e.manakaiParserInserted) { - if (p.scriptExecutedWhenParserResumes) { - log ('Error: There is a script that will execute as soon as the parser resumes.'); + // 6.4. + if (p.pendingExternalScript) { + log ('Error: There is a pending external script.'); } - p.scriptExecutedWhenParserResumes = e; + p.pendingExternalScript = e; log ('Running a script: aborted (src parser-inserted)'); } else if (e.src != null) { + // 6.5. p.scriptsExecutedSoon.push (e); log ('Running a script: aborted (src)'); } else { + // 6.6. executeScript (doc, e); // even if other scripts are already executing. } @@ -765,8 +771,8 @@ + p.input.s.substring (p.insertionPoint, p.input.s.length); p.insertionPoint += s.length; - // 3. If there is a script that will execute as soon as the parser resumes - if (p.scriptExecutedAfterParserResumes) { + // 3. If there is a pending external script + if (p.pendingExternalScript) { log ('document.write: processed later (there is an unprocessed