/[suikacvs]/markup/html/scripting-parser/parser.html
Suika

Diff of /markup/html/scripting-parser/parser.html

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.16 by wakaba, Tue Apr 29 04:07:18 2008 UTC revision 1.20 by wakaba, Sat Sep 20 13:32:45 2008 UTC
# Line 295  Line 295 
295            // 8.1. If the parser were originally created for the ...            // 8.1. If the parser were originally created for the ...
296            if (this.fragmentParsingMode) {            if (this.fragmentParsingMode) {
297              // 8.2. Mark the script element as "already executed" and ...              // 8.2. Mark the script element as "already executed" and ...
298              el.alreadyExecuted = true;              el.manakaiAlreadyExecuted = true;
299              continue;              continue;
300            }            }
301    
# Line 312  Line 312 
312            oldInsertionPoint += this.insertionPoint;            oldInsertionPoint += this.insertionPoint;
313            this.setInsertionPoint (oldInsertionPoint);            this.setInsertionPoint (oldInsertionPoint);
314    
315            // 12. If there is a script that will execute as soon as ...            // 12. If there is a pending external script
316            while (this.scriptExecutedWhenParserResumes) {            while (this.pendingExternalScript) {
317              // 12.1. If the tree construction stage is being called reentrantly              // 12.1. If the tree construction stage is being called reentrantly
318              if (this.reentrant) {              if (this.reentrant) {
319                log ('parse: abort (reentrance)');                log ('parse: abort (reentrance)');
# Line 323  Line 323 
323              // 12.2. Otherwise              // 12.2. Otherwise
324              } else {              } else {
325                // 1.                // 1.
326                var script = this.scriptExecutedWhenParserResumes;                var script = this.pendingExternalScript;
327                this.scriptExecutedWhenParserResumes = null;                this.pendingExternalScript = null;
328    
329                // 2. Pause until the script has completed loading.                // 2. Pause until the script has completed loading.
330                //                //
# Line 521  Line 521 
521        var doc = this.ownerDocument || this;        var doc = this.ownerDocument || this;
522        var p = doc._parser;        var p = doc._parser;
523    
524        // 1. Script type        // 1.The script's type
525        //        //
526    
527        // 2.1. If scripting is disabled        // 2. The cript's character encoding
528          //
529    
530          // 3.1. If without script
531        //        //
532        // 2.2. If the script element was created by an XML ... innerHTML ...        // 2.2. If the script element was created by an XML ... innerHTML ...
533        //        //
534        // 2.3. If the user agent does not support the scripting language ...        // 2.3. If the user agent does not support the scripting language ...
535        //        //
536        // 2.4. If the script element has its "already executed" flag set        if (false) {
       if (e.manakaiAlreadyExecuted) {  
537          // 2.5. Abort these steps at this point.          // 2.5. Abort these steps at this point.
538          log ('Running a script: aborted (already executed)');          log ('Running a script: aborted (noscript)');
539          logIndentLevel--;          logIndentLevel--;
540          return e;          return e;
541        }        }
542    
543        // 3. Set the element's "already executed" flag.        // 4. Set the element's "already executed" flag.
544        e.manakaiAlreadyExecuted = true;        e.manakaiAlreadyExecuted = true;
545    
546        // 4. If the element has a src attribute, then a load for ...        // 5. If the element has a src attribute, then a load for ...
547        // TODO: load an external resource        // TODO: load an external resource
548    
549        // 5. The first of the following options:        // 5. The first of the following options:
550    
       // 5.1.  
551        if (/* TODO: If the document is still being parsed && */        if (/* TODO: If the document is still being parsed && */
552            e.defer && !e.async) {            e.defer && !e.async) {
553            // 6.1.
554          p.scriptsExecutedAfterParsing.push (e);          p.scriptsExecutedAfterParsing.push (e);
555          log ('Running a script: aborted (defer)');          log ('Running a script: aborted (defer)');
556        } else if (e.async && e.src != null) {        } else if (e.async && e.src != null) {
557            // 6.2.
558          p.scriptsExecutedAsynchronously.push (e);          p.scriptsExecutedAsynchronously.push (e);
559          log ('Running a script: aborted (async src)');          log ('Running a script: aborted (async src)');
560        } else if (e.async && e.src == null &&        } else if (e.async && e.src == null &&
561                   p.scriptsExecutedAsynchronously.length > 0) {                   p.scriptsExecutedAsynchronously.length > 0) {
562            // 6.3.
563          p.scriptsExecutedAsynchronously.push (e);          p.scriptsExecutedAsynchronously.push (e);
564          log ('Running a script: aborted (async)');          log ('Running a script: aborted (async)');
         // ISSUE: What is the difference with the case above?  
565        } else if (e.src != null && e.manakaiParserInserted) {        } else if (e.src != null && e.manakaiParserInserted) {
566          if (p.scriptExecutedWhenParserResumes) {          // 6.4.
567            log ('Error: There is a script that will execute as soon as the parser resumes.');          if (p.pendingExternalScript) {
568              log ('Error: There is a pending external script.');
569          }          }
570          p.scriptExecutedWhenParserResumes = e;          p.pendingExternalScript = e;
571          log ('Running a script: aborted (src parser-inserted)');          log ('Running a script: aborted (src parser-inserted)');
572        } else if (e.src != null) {        } else if (e.src != null) {
573            // 6.5.
574          p.scriptsExecutedSoon.push (e);          p.scriptsExecutedSoon.push (e);
575          log ('Running a script: aborted (src)');          log ('Running a script: aborted (src)');
576        } else {        } else {
577            // 6.6.
578          executeScript (doc, e); // even if other scripts are already executing.          executeScript (doc, e); // even if other scripts are already executing.
579        }        }
580    
# Line 598  Line 604 
604      }      }
605    
606      // If the load was successful      // If the load was successful
     log ('load event fired at the script element');  
607    
608      if (true) {      if (true) {
609      // Scripting is enabled, Document.designMode is disabled,      // Scripting is enabled, Document.designMode is disabled,
# Line 607  Line 612 
612        parseAndRunScript (doc, s);        parseAndRunScript (doc, s);
613      }      }
614    
615        log ('load event fired at the script element');
616    
617      log ('executing a script block: end');      log ('executing a script block: end');
618    } // executeScript    } // executeScript
619    
# Line 764  Line 771 
771          + p.input.s.substring (p.insertionPoint, p.input.s.length);          + p.input.s.substring (p.insertionPoint, p.input.s.length);
772      p.insertionPoint += s.length;      p.insertionPoint += s.length;
773    
774      // 3. If there is a script that will execute as soon as the parser resumes      // 3. If there is a pending external script
775      if (p.scriptExecutedAfterParserResumes) {      if (p.pendingExternalScript) {
776        log ('document.write: processed later (there is an unprocessed <script src>)');        log ('document.write: processed later (there is an unprocessed <script src>)');
777        logIndentLevel--;        logIndentLevel--;
778        log ('document.write: return');        log ('document.write: return');
# Line 896  algorithm.  Especially, this parser: Line 903  algorithm.  Especially, this parser:
903  algorithm, and so on.  algorithm, and so on.
904  <li>Does not raise parse errors for invalid attribute specifications in start  <li>Does not raise parse errors for invalid attribute specifications in start
905  or end tags.  or end tags.
906  <li>Does not support PCDATA elements (<code>title</code> and  <li>Does not support RCDATA elements (<code>title</code> and
907  <code>textarea</code>).  <code>textarea</code>).
908  <li>Does not strip the first newline in <code>pre</code> elements.  <li>Does not strip the first newline in <code>pre</code>,
909    <code>listing</code>, and <code>textarea</code> elements.
910  <li>Does not support <code>&lt;!--</code>..<code>--></code> parsing rule  <li>Does not support <code>&lt;!--</code>..<code>--></code> parsing rule
911  in <code>script</code> element.  in CDATA/RCDATA elements.
912  <li>Does not support foreign (SVG or MathML) elements.  <li>Does not support foreign (SVG or MathML) elements.
913  <li>Only supports <code>script</code> <code>type</code>  <li>Only supports <code>script</code> <code>type</code>
914  <code>text/javascript</code>.  <code>type</code> and <code>language</code>  <code>text/javascript</code>.  <code>type</code> and <code>language</code>
# Line 942  when it is inserted into the document, n Line 950  when it is inserted into the document, n
950  executed.  Currently it does not matter, since we don't allow dynamic  executed.  Currently it does not matter, since we don't allow dynamic
951  modification to the |src| content/DOM attribute value yet. -->  modification to the |src| content/DOM attribute value yet. -->
952    
953    <p>See also
954    <a href="http://suika.fam.cx/gate/2005/sw/Live%20Scripting%20HTML%20Parser">SuikaWiki:
955    Live Scripting HTML Parser</a>.
956    
957  </body>  </body>
958  </html>  </html>
959  <!-- $Date$ -->  <!-- $Date$ -->

Legend:
Removed from v.1.16  
changed lines
  Added in v.1.20

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24