/[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.88 by wakaba, Sat Mar 8 02:35:05 2008 UTC revision 1.93 by wakaba, Sat Mar 8 03:43:48 2008 UTC
# Line 5997  sub _tree_construction_main ($) { Line 5997  sub _tree_construction_main ($) {
5997          INSCOPE: for (reverse 0..$#{$self->{open_elements}}) {          INSCOPE: for (reverse 0..$#{$self->{open_elements}}) {
5998            my $node = $self->{open_elements}->[$_];            my $node = $self->{open_elements}->[$_];
5999            if ($node->[1] eq $token->{tag_name}) {            if ($node->[1] eq $token->{tag_name}) {
             ## generate implied end tags  
             while ({  
                     dd => ($token->{tag_name} ne 'dd'),  
                     dt => ($token->{tag_name} ne 'dt'),  
                     li => ($token->{tag_name} ne 'li'),  
                     p => 1,  
                    }->{$self->{open_elements}->[-1]->[1]}) {  
               !!!cp ('t409');  
               pop @{$self->{open_elements}};  
             }  
               
6000              !!!cp ('t410');              !!!cp ('t410');
6001              $i = $_;              $i = $_;
6002              last INSCOPE;              last INSCOPE;
# Line 6019  sub _tree_construction_main ($) { Line 6008  sub _tree_construction_main ($) {
6008              last INSCOPE;              last INSCOPE;
6009            }            }
6010          } # INSCOPE          } # INSCOPE
6011            
6012          if ($self->{open_elements}->[-1]->[1] ne $token->{tag_name}) {          unless (defined $i) { # has an element in scope
6013            if (defined $i) {            !!!cp ('t413');
6014              !!!parse-error (type => 'unmatched end tag:'.$token->{tag_name});
6015            } else {
6016              ## Step 1. generate implied end tags
6017              while ({
6018                      dd => ($token->{tag_name} ne 'dd'),
6019                      dt => ($token->{tag_name} ne 'dt'),
6020                      li => ($token->{tag_name} ne 'li'),
6021                      p => 1,
6022                     }->{$self->{open_elements}->[-1]->[1]}) {
6023                !!!cp ('t409');
6024                pop @{$self->{open_elements}};
6025              }
6026    
6027              ## Step 2.
6028              if ($self->{open_elements}->[-1]->[1] ne $token->{tag_name}) {
6029              !!!cp ('t412');              !!!cp ('t412');
6030              !!!parse-error (type => 'not closed:'.$self->{open_elements}->[-1]->[1]);              !!!parse-error (type => 'not closed:'.$self->{open_elements}->[-1]->[1]);
6031            } else {            } else {
6032              !!!cp ('t413');              !!!cp ('t414');
             !!!parse-error (type => 'unmatched end tag:'.$token->{tag_name});  
6033            }            }
6034          }  
6035                      ## Step 3.
         if (defined $i) {  
           !!!cp ('t414');  
6036            splice @{$self->{open_elements}}, $i;            splice @{$self->{open_elements}}, $i;
6037          } else {  
6038            !!!cp ('t416');            ## Step 4.
6039              $clear_up_to_marker->()
6040                  if {
6041                    button => 1, marquee => 1, object => 1,
6042                  }->{$token->{tag_name}};
6043          }          }
         $clear_up_to_marker->()  
           if {  
             button => 1, marquee => 1, object => 1,  
           }->{$token->{tag_name}};  
6044          !!!next-token;          !!!next-token;
6045          redo B;          redo B;
6046        } elsif ($token->{tag_name} eq 'form') {        } elsif ($token->{tag_name} eq 'form') {
6047            undef $self->{form_element};
6048    
6049          ## has an element in scope          ## has an element in scope
6050            my $i;
6051          INSCOPE: for (reverse 0..$#{$self->{open_elements}}) {          INSCOPE: for (reverse 0..$#{$self->{open_elements}}) {
6052            my $node = $self->{open_elements}->[$_];            my $node = $self->{open_elements}->[$_];
6053            if ($node->[1] eq $token->{tag_name}) {            if ($node->[1] eq $token->{tag_name}) {
             ## generate implied end tags  
             while ({  
                     dd => 1, dt => 1, li => 1, p => 1,  
                    }->{$self->{open_elements}->[-1]->[1]}) {  
               !!!cp ('t417');  
               pop @{$self->{open_elements}};  
             }  
   
6054              !!!cp ('t418');              !!!cp ('t418');
6055                $i = $_;
6056              last INSCOPE;              last INSCOPE;
6057            } elsif ({            } elsif ({
6058                      table => 1, caption => 1, td => 1, th => 1,                      table => 1, caption => 1, td => 1, th => 1,
# Line 6065  sub _tree_construction_main ($) { Line 6062  sub _tree_construction_main ($) {
6062              last INSCOPE;              last INSCOPE;
6063            }            }
6064          } # INSCOPE          } # INSCOPE
6065            
6066          if ($self->{open_elements}->[-1]->[1] eq $token->{tag_name}) {          unless (defined $i) { # has an element in scope
           !!!cp ('t420');  
           pop @{$self->{open_elements}};  
         } else {  
6067            !!!cp ('t421');            !!!cp ('t421');
6068            !!!parse-error (type => 'unmatched end tag:'.$token->{tag_name});            !!!parse-error (type => 'unmatched end tag:'.$token->{tag_name});
6069            } else {
6070              ## Step 1. generate implied end tags
6071              while ({
6072                      dd => 1, dt => 1, li => 1, p => 1,
6073                     }->{$self->{open_elements}->[-1]->[1]}) {
6074                !!!cp ('t417');
6075                pop @{$self->{open_elements}};
6076              }
6077              
6078              ## Step 2.
6079              if ($self->{open_elements}->[-1]->[1] ne $token->{tag_name}) {
6080                !!!cp ('t417.1');
6081                !!!parse-error (type => 'not closed:'.$self->{open_elements}->[-1]->[1]);
6082              } else {
6083                !!!cp ('t420');
6084              }  
6085              
6086              ## Step 3.
6087              splice @{$self->{open_elements}}, $i;
6088          }          }
6089    
         undef $self->{form_element};  
6090          !!!next-token;          !!!next-token;
6091          redo B;          redo B;
6092        } elsif ({        } elsif ({
# Line 6087  sub _tree_construction_main ($) { Line 6099  sub _tree_construction_main ($) {
6099            if ({            if ({
6100                 h1 => 1, h2 => 1, h3 => 1, h4 => 1, h5 => 1, h6 => 1,                 h1 => 1, h2 => 1, h3 => 1, h4 => 1, h5 => 1, h6 => 1,
6101                }->{$node->[1]}) {                }->{$node->[1]}) {
             ## generate implied end tags  
             while ({  
                     dd => 1, dt => 1, li => 1, p => 1,  
                    }->{$self->{open_elements}->[-1]->[1]}) {  
               !!!cp ('t422');  
               pop @{$self->{open_elements}};  
             }  
   
6102              !!!cp ('t423');              !!!cp ('t423');
6103              $i = $_;              $i = $_;
6104              last INSCOPE;              last INSCOPE;
# Line 6106  sub _tree_construction_main ($) { Line 6110  sub _tree_construction_main ($) {
6110              last INSCOPE;              last INSCOPE;
6111            }            }
6112          } # INSCOPE          } # INSCOPE
6113            
6114          if ($self->{open_elements}->[-1]->[1] ne $token->{tag_name}) {          unless (defined $i) { # has an element in scope
6115            !!!cp ('t425');            !!!cp ('t425.1');
6116            !!!parse-error (type => 'unmatched end tag:'.$token->{tag_name});            !!!parse-error (type => 'unmatched end tag:'.$token->{tag_name});
6117          } else {          } else {
6118            !!!cp ('t426');            ## Step 1. generate implied end tags
6119              while ({
6120                      dd => 1, dt => 1, li => 1, p => 1,
6121                     }->{$self->{open_elements}->[-1]->[1]}) {
6122                !!!cp ('t422');
6123                pop @{$self->{open_elements}};
6124              }
6125              
6126              ## Step 2.
6127              if ($self->{open_elements}->[-1]->[1] ne $token->{tag_name}) {
6128                !!!cp ('t425');
6129                !!!parse-error (type => 'unmatched end tag:'.$token->{tag_name});
6130              } else {
6131                !!!cp ('t426');
6132              }
6133    
6134              ## Step 3.
6135              splice @{$self->{open_elements}}, $i;
6136          }          }
6137                    
         splice @{$self->{open_elements}}, $i if defined $i;  
6138          !!!next-token;          !!!next-token;
6139          redo B;          redo B;
6140        } elsif ($token->{tag_name} eq 'p') {        } elsif ($token->{tag_name} eq 'p') {
# Line 6123  sub _tree_construction_main ($) { Line 6143  sub _tree_construction_main ($) {
6143          INSCOPE: for (reverse 0..$#{$self->{open_elements}}) {          INSCOPE: for (reverse 0..$#{$self->{open_elements}}) {
6144            my $node = $self->{open_elements}->[$_];            my $node = $self->{open_elements}->[$_];
6145            if ($node->[1] eq $token->{tag_name}) {            if ($node->[1] eq $token->{tag_name}) {
             ## generate implied end tags  
             while ({  
                     dd => 1, dt => 1, li => 1, p => 0,  
                    }->{$self->{open_elements}->[-1]->[1]}) {  
               !!!cp ('t409.1');  
               pop @{$self->{open_elements}};  
             }  
               
6146              !!!cp ('t410.1');              !!!cp ('t410.1');
6147              $i = $_;              $i = $_;
6148              last INSCOPE;              last INSCOPE;
# Line 6142  sub _tree_construction_main ($) { Line 6154  sub _tree_construction_main ($) {
6154              last INSCOPE;              last INSCOPE;
6155            }            }
6156          } # INSCOPE          } # INSCOPE
6157            
6158          if ($self->{open_elements}->[-1]->[1] ne $token->{tag_name}) {          if (defined $i) {
6159            if (defined $i) {            if ($self->{open_elements}->[-1]->[1] ne $token->{tag_name}) {
6160              !!!cp ('t412.1');              !!!cp ('t412.1');
6161              !!!parse-error (type => 'not closed:'.$self->{open_elements}->[-1]->[1]);              !!!parse-error (type => 'not closed:'.$self->{open_elements}->[-1]->[1]);
6162            } else {            } else {
6163              !!!cp ('t413.1');              !!!cp ('t414.1');
             !!!parse-error (type => 'unmatched end tag:'.$token->{tag_name});  
6164            }            }
6165          }  
           
         if (defined $i) {  
           !!!cp ('t414.1');  
6166            splice @{$self->{open_elements}}, $i;            splice @{$self->{open_elements}}, $i;
6167          } else {          } else {
6168              !!!cp ('t413.1');
6169              !!!parse-error (type => 'unmatched end tag:'.$token->{tag_name});
6170    
6171            !!!cp ('t415.1');            !!!cp ('t415.1');
6172            ## As if <p>, then reprocess the current token            ## As if <p>, then reprocess the current token
6173            my $el;            my $el;
6174            !!!create-element ($el, 'p');            !!!create-element ($el, 'p');
6175            $insert->($el);            $insert->($el);
6176              ## NOTE: Not inserted into |$self->{open_elements}|.
6177          }          }
6178    
6179          !!!next-token;          !!!next-token;
6180          redo B;          redo B;
6181        } elsif ({        } elsif ({

Legend:
Removed from v.1.88  
changed lines
  Added in v.1.93

[email protected]
ViewVC Help
Powered by ViewVC 1.1.24