/[suikacvs]/markup/html/whatpm/Whatpm/HTML.pm.src
Suika

Diff of /markup/html/whatpm/Whatpm/HTML.pm.src

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

revision 1.237 by wakaba, Sun Sep 6 08:29:32 2009 UTC revision 1.238 by wakaba, Sun Sep 6 09:53:29 2009 UTC
# Line 2489  sub _tree_construction_main ($) { Line 2489  sub _tree_construction_main ($) {
2489              ## reprocess              ## reprocess
2490              !!!ack-later;              !!!ack-later;
2491              next B;              next B;
2492            } elsif ($token->{type} == END_TAG_TOKEN) {        } elsif ($token->{type} == END_TAG_TOKEN) {
2493              if ($token->{tag_name} eq 'head') {          ## "Before head", "in head", and "after head" insertion modes
2494                if ($self->{insertion_mode} == BEFORE_HEAD_IM) {          ## ignore most of end tags.  Exceptions are "body", "html",
2495                  !!!cp ('t132');          ## and "br" end tags.  "Before head" and "in head" insertion
2496                  ## As if <head>          ## modes also recognize "head" end tag.  "In head noscript"
2497                  !!!create-element ($self->{head_element}, $HTML_NS, 'head',, $token);          ## insertion modes ignore end tags except for "noscript" and
2498                  $self->{open_elements}->[-1]->[0]->append_child ($self->{head_element});          ## "br".
2499                  push @{$self->{open_elements}},  
2500                      [$self->{head_element}, $el_category->{head}];          if ($token->{tag_name} eq 'head') {
2501              if ($self->{insertion_mode} == BEFORE_HEAD_IM) {
2502                  ## Reprocess in the "in head" insertion mode...              !!!cp ('t132');
2503                  pop @{$self->{open_elements}};              ## As if <head>
2504                  $self->{insertion_mode} = AFTER_HEAD_IM;              !!!create-element ($self->{head_element}, $HTML_NS, 'head',, $token);
2505                  !!!next-token;              $self->{open_elements}->[-1]->[0]->append_child ($self->{head_element});
2506                  next B;              push @{$self->{open_elements}},
2507                } elsif ($self->{insertion_mode} == IN_HEAD_NOSCRIPT_IM) {                  [$self->{head_element}, $el_category->{head}];
2508                  !!!cp ('t133');  
2509                  ## As if </noscript>              ## Reprocess in the "in head" insertion mode...
2510                  pop @{$self->{open_elements}};              pop @{$self->{open_elements}};
2511                  !!!parse-error (type => 'in noscript:/',              $self->{insertion_mode} = AFTER_HEAD_IM;
2512                                  text => 'head', token => $token);              !!!next-token;
2513                                next B;
2514                  ## Reprocess in the "in head" insertion mode...            } elsif ($self->{insertion_mode} == IN_HEAD_NOSCRIPT_IM) {
2515                  pop @{$self->{open_elements}};              !!!cp ('t133');
2516                  $self->{insertion_mode} = AFTER_HEAD_IM;              #
2517                  !!!next-token;            } elsif ($self->{insertion_mode} == IN_HEAD_IM) {
2518                  next B;              !!!cp ('t134');
2519                } elsif ($self->{insertion_mode} == IN_HEAD_IM) {              pop @{$self->{open_elements}};
2520                  !!!cp ('t134');              $self->{insertion_mode} = AFTER_HEAD_IM;
2521                  pop @{$self->{open_elements}};              !!!next-token;
2522                  $self->{insertion_mode} = AFTER_HEAD_IM;              next B;
2523                  !!!next-token;            } elsif ($self->{insertion_mode} == AFTER_HEAD_IM) {
2524                  next B;              !!!cp ('t134.1');
2525                } elsif ($self->{insertion_mode} == AFTER_HEAD_IM) {              #
2526                  !!!cp ('t134.1');            } else {
2527                  !!!parse-error (type => 'unmatched end tag', text => 'head',              die "$0: $self->{insertion_mode}: Unknown insertion mode";
2528                                  token => $token);            }
2529                  ## Ignore the token          } elsif ($token->{tag_name} eq 'noscript') {
2530                  !!!next-token;            if ($self->{insertion_mode} == IN_HEAD_NOSCRIPT_IM) {
2531                  next B;              !!!cp ('t136');
2532                } else {              pop @{$self->{open_elements}};
2533                  die "$0: $self->{insertion_mode}: Unknown insertion mode";              $self->{insertion_mode} = IN_HEAD_IM;
2534                }              !!!next-token;
2535              } elsif ($token->{tag_name} eq 'noscript') {              next B;
2536                if ($self->{insertion_mode} == IN_HEAD_NOSCRIPT_IM) {            } else {
2537                  !!!cp ('t136');              !!!cp ('t138');
2538                  pop @{$self->{open_elements}};              #
2539                  $self->{insertion_mode} = IN_HEAD_IM;            }
2540                  !!!next-token;          } elsif ({
2541                  next B;              body => ($self->{insertion_mode} != IN_HEAD_NOSCRIPT_IM),
2542                } elsif ($self->{insertion_mode} == BEFORE_HEAD_IM or              html => ($self->{insertion_mode} != IN_HEAD_NOSCRIPT_IM),
2543                         $self->{insertion_mode} == AFTER_HEAD_IM) {              br => 1,
2544                  !!!cp ('t137');          }->{$token->{tag_name}}) {
                 !!!parse-error (type => 'unmatched end tag',  
                                 text => 'noscript', token => $token);  
                 ## Ignore the token ## ISSUE: An issue in the spec.  
                 !!!next-token;  
                 next B;  
               } else {  
                 !!!cp ('t138');  
                 #  
               }  
             } elsif ({  
                       body => 1, html => 1,  
                      }->{$token->{tag_name}}) {  
               ## TODO: This branch is entirely redundant.  
               if ($self->{insertion_mode} == BEFORE_HEAD_IM or  
                   $self->{insertion_mode} == IN_HEAD_IM or  
                   $self->{insertion_mode} == IN_HEAD_NOSCRIPT_IM) {  
                 !!!cp ('t140');  
                 !!!parse-error (type => 'unmatched end tag',  
                                 text => $token->{tag_name}, token => $token);  
                 ## Ignore the token  
                 !!!next-token;  
                 next B;  
               } elsif ($self->{insertion_mode} == AFTER_HEAD_IM) {  
                 !!!cp ('t140.1');  
                 !!!parse-error (type => 'unmatched end tag',  
                                 text => $token->{tag_name}, token => $token);  
                 ## Ignore the token  
                 !!!next-token;  
                 next B;  
               } else {  
                 die "$0: $self->{insertion_mode}: Unknown insertion mode";  
               }  
             } elsif ($token->{tag_name} eq 'p') {  
               !!!cp ('t142');  
               !!!parse-error (type => 'unmatched end tag',  
                               text => $token->{tag_name}, token => $token);  
               ## Ignore the token  
               !!!next-token;  
               next B;  
         } elsif ($token->{tag_name} eq 'br') {  
2545            if ($self->{insertion_mode} == BEFORE_HEAD_IM) {            if ($self->{insertion_mode} == BEFORE_HEAD_IM) {
2546              !!!cp ('t142.2');              !!!cp ('t142.2');
2547              ## (before head) as if <head>, (in head) as if </head>              ## (before head) as if <head>, (in head) as if </head>
# Line 2601  sub _tree_construction_main ($) { Line 2561  sub _tree_construction_main ($) {
2561              !!!cp ('t143.3');              !!!cp ('t143.3');
2562              ## NOTE: Two parse errors for <head><noscript></br>              ## NOTE: Two parse errors for <head><noscript></br>
2563              !!!parse-error (type => 'unmatched end tag',              !!!parse-error (type => 'unmatched end tag',
2564                              text => 'br', token => $token);                              text => $token->{tag_name}, token => $token);
2565              ## As if </noscript>              ## As if </noscript>
2566              pop @{$self->{open_elements}};              pop @{$self->{open_elements}};
2567              $self->{insertion_mode} = IN_HEAD_IM;              $self->{insertion_mode} = IN_HEAD_IM;
# Line 2619  sub _tree_construction_main ($) { Line 2579  sub _tree_construction_main ($) {
2579              die "$0: $self->{insertion_mode}: Unknown insertion mode";              die "$0: $self->{insertion_mode}: Unknown insertion mode";
2580            }            }
2581    
2582            #            ## "after head" insertion mode
2583          } else { ## Other end tags            ## As if <body>
2584                !!!cp ('t145');            !!!insert-element ('body',, $token);
2585                !!!parse-error (type => 'unmatched end tag',            $self->{insertion_mode} = IN_BODY_IM;
2586                                text => $token->{tag_name}, token => $token);            ## Reprocess.
2587                ## Ignore the token            next B;
2588                !!!next-token;          }
2589                next B;  
2590              }          ## End tags are ignored by default.
2591            !!!cp ('t145');
2592              if ($self->{insertion_mode} == IN_HEAD_NOSCRIPT_IM) {          !!!parse-error (type => 'unmatched end tag',
2593                !!!cp ('t146');                          text => $token->{tag_name}, token => $token);
2594                ## As if </noscript>          ## Ignore the token.
2595                pop @{$self->{open_elements}};          !!!next-token;
               !!!parse-error (type => 'in noscript:/',  
                               text => $token->{tag_name}, token => $token);  
                 
               ## Reprocess in the "in head" insertion mode...  
               ## As if </head>  
               pop @{$self->{open_elements}};  
   
               ## Reprocess in the "after head" insertion mode...  
             } elsif ($self->{insertion_mode} == IN_HEAD_IM) {  
               !!!cp ('t147');  
               ## As if </head>  
               pop @{$self->{open_elements}};  
   
               ## Reprocess in the "after head" insertion mode...  
             } elsif ($self->{insertion_mode} == BEFORE_HEAD_IM) {  
 ## ISSUE: This case cannot be reached?  
               !!!cp ('t148');  
               !!!parse-error (type => 'unmatched end tag',  
                               text => $token->{tag_name}, token => $token);  
               ## Ignore the token ## ISSUE: An issue in the spec.  
               !!!next-token;  
               next B;  
             } else {  
               !!!cp ('t149');  
             }  
   
             ## "after head" insertion mode  
             ## As if <body>  
             !!!insert-element ('body',, $token);  
             $self->{insertion_mode} = IN_BODY_IM;  
             ## reprocess  
2596          next B;          next B;
2597        } elsif ($token->{type} == END_OF_FILE_TOKEN) {        } elsif ($token->{type} == END_OF_FILE_TOKEN) {
2598          if ($self->{insertion_mode} == BEFORE_HEAD_IM) {          if ($self->{insertion_mode} == BEFORE_HEAD_IM) {

Legend:
Removed from v.1.237  
changed lines
  Added in v.1.238

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24