/[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.125 by wakaba, Sat Apr 12 10:41:31 2008 UTC revision 1.126 by wakaba, Sat Apr 12 14:54:33 2008 UTC
# Line 12  use Error qw(:try); Line 12  use Error qw(:try);
12  ## TODO: 1252 parse error (revision 1264)  ## TODO: 1252 parse error (revision 1264)
13  ## TODO: 8859-11 = 874 (revision 1271)  ## TODO: 8859-11 = 874 (revision 1271)
14    
15    my $HTML_NS = q<http://www.w3.org/1999/xhtml>;
16    my $MML_NS = q<http://www.w3.org/1998/Math/MathML>;
17    my $SVG_NS = q<http://www.w3.org/2000/svg>;
18    my $XLINK_NS = q<http://www.w3.org/1999/xlink>;
19    my $XML_NS = q<http://www.w3.org/XML/1998/namespace>;
20    my $XMLNS_NS = q<http://www.w3.org/2000/xmlns/>;
21    
22  sub A_EL () { 0b1 }  sub A_EL () { 0b1 }
23  sub ADDRESS_EL () { 0b10 }  sub ADDRESS_EL () { 0b10 }
24  sub BODY_EL () { 0b100 }  sub BODY_EL () { 0b100 }
# Line 37  sub TABLE_ROW_EL () { 0b1000000000000000 Line 44  sub TABLE_ROW_EL () { 0b1000000000000000
44  sub TABLE_ROW_GROUP_EL () { 0b10000000000000000000000 }  sub TABLE_ROW_GROUP_EL () { 0b10000000000000000000000 }
45  sub MISC_SCOPING_EL () { 0b100000000000000000000000 }  sub MISC_SCOPING_EL () { 0b100000000000000000000000 }
46  sub MISC_SPECIAL_EL () { 0b1000000000000000000000000 }  sub MISC_SPECIAL_EL () { 0b1000000000000000000000000 }
47    sub FOREIGN_EL () { 0b10000000000000000000000000 }
48    sub FOREIGN_FLOW_CONTENT_EL () { 0b100000000000000000000000000 }
49    sub MML_AXML_EL () { 0b1000000000000000000000000000 }
50    
51  sub TABLE_ROWS_EL () {  sub TABLE_ROWS_EL () {
52    TABLE_EL |    TABLE_EL |
# Line 185  my $el_category = { Line 195  my $el_category = {
195    wbr => MISC_SPECIAL_EL,    wbr => MISC_SPECIAL_EL,
196  };  };
197    
198    my $el_category_f = {
199      $MML_NS => {
200        'annotation-xml' => MML_AXML_EL,
201        mi => FOREIGN_FLOW_CONTENT_EL,
202        mo => FOREIGN_FLOW_CONTENT_EL,
203        mn => FOREIGN_FLOW_CONTENT_EL,
204        ms => FOREIGN_FLOW_CONTENT_EL,
205        mtext => FOREIGN_FLOW_CONTENT_EL,
206      },
207      $SVG_NS => {
208        foreignobject => FOREIGN_FLOW_CONTENT_EL, ## TODO: case
209        desc => FOREIGN_FLOW_CONTENT_EL,
210        title => FOREIGN_FLOW_CONTENT_EL,
211      },
212      ## NOTE: In addition, FOREIGN_EL is set to non-HTML elements.
213    };
214    
215  my $c1_entity_char = {  my $c1_entity_char = {
216    0x80 => 0x20AC,    0x80 => 0x20AC,
217    0x81 => 0xFFFD,    0x81 => 0xFFFD,
# Line 450  sub ROW_IMS ()        { 0b10000000 } Line 477  sub ROW_IMS ()        { 0b10000000 }
477  sub BODY_AFTER_IMS () { 0b100000000 }  sub BODY_AFTER_IMS () { 0b100000000 }
478  sub FRAME_IMS ()      { 0b1000000000 }  sub FRAME_IMS ()      { 0b1000000000 }
479  sub SELECT_IMS ()     { 0b10000000000 }  sub SELECT_IMS ()     { 0b10000000000 }
480    sub IN_FOREIGN_CONTENT_IM () { 0b100000000000 }
481        ## NOTE: "in foreign content" insertion mode is special; it is combined
482        ## with the secondary insertion mode.  In this parser, they are stored
483        ## together in the bit-or'ed form.
484    
485  ## NOTE: "initial" and "before html" insertion modes have no constants.  ## NOTE: "initial" and "before html" insertion modes have no constants.
486    
# Line 2889  sub _tree_construction_root_element ($) Line 2920  sub _tree_construction_root_element ($)
2920        } elsif ($token->{type} == START_TAG_TOKEN) {        } elsif ($token->{type} == START_TAG_TOKEN) {
2921          if ($token->{tag_name} eq 'html') {          if ($token->{tag_name} eq 'html') {
2922            my $root_element;            my $root_element;
2923            !!!create-element ($root_element, $token->{tag_name}, $token->{attributes}, $token);            !!!create-element ($root_element, $HTML_NS, $token->{tag_name}, $token->{attributes}, $token);
2924            $self->{document}->append_child ($root_element);            $self->{document}->append_child ($root_element);
2925            push @{$self->{open_elements}},            push @{$self->{open_elements}},
2926                [$root_element, $el_category->{html}];                [$root_element, $el_category->{html}];
# Line 2925  sub _tree_construction_root_element ($) Line 2956  sub _tree_construction_root_element ($)
2956          die "$0: $token->{type}: Unknown token type";          die "$0: $token->{type}: Unknown token type";
2957        }        }
2958    
2959      my $root_element; !!!create-element ($root_element, 'html',, $token);      my $root_element;
2960        !!!create-element ($root_element, $HTML_NS, 'html',, $token);
2961      $self->{document}->append_child ($root_element);      $self->{document}->append_child ($root_element);
2962      push @{$self->{open_elements}}, [$root_element, $el_category->{html}];      push @{$self->{open_elements}}, [$root_element, $el_category->{html}];
2963    
# Line 2966  sub _reset_insertion_mode ($) { Line 2998  sub _reset_insertion_mode ($) {
2998          }          }
2999        }        }
3000            
3001        ## Step 4..13      ## Step 4..14
3002        my $new_mode = {      my $new_mode;
3003        if ($node->[1] & FOREIGN_EL) {
3004          ## NOTE: Strictly spaking, the line below only applies to MathML and
3005          ## SVG elements.  Currently the HTML syntax supports only MathML and
3006          ## SVG elements as foreigners.
3007          $new_mode = $self->{insertion_mode} | IN_FOREIGN_CONTENT_IM;
3008          ## ISSUE: What is set as the secondary insertion mode?
3009        } else {
3010          $new_mode = {
3011                        select => IN_SELECT_IM,                        select => IN_SELECT_IM,
3012                        ## NOTE: |option| and |optgroup| do not set                        ## NOTE: |option| and |optgroup| do not set
3013                        ## insertion mode to "in select" by themselves.                        ## insertion mode to "in select" by themselves.
# Line 2984  sub _reset_insertion_mode ($) { Line 3024  sub _reset_insertion_mode ($) {
3024                        body => IN_BODY_IM,                        body => IN_BODY_IM,
3025                        frameset => IN_FRAMESET_IM,                        frameset => IN_FRAMESET_IM,
3026                       }->{$node->[0]->manakai_local_name};                       }->{$node->[0]->manakai_local_name};
3027                       ## TODO: Foreign namespace case OK?      }
3028        $self->{insertion_mode} = $new_mode and return if defined $new_mode;      $self->{insertion_mode} = $new_mode and return if defined $new_mode;
3029                
3030        ## Step 14        ## Step 15
3031        if ($node->[1] & HTML_EL) {        if ($node->[1] & HTML_EL) {
3032          unless (defined $self->{head_element}) {          unless (defined $self->{head_element}) {
3033            !!!cp ('t29');            !!!cp ('t29');
# Line 3002  sub _reset_insertion_mode ($) { Line 3042  sub _reset_insertion_mode ($) {
3042          !!!cp ('t31');          !!!cp ('t31');
3043        }        }
3044                
3045        ## Step 15        ## Step 16
3046        $self->{insertion_mode} = IN_BODY_IM and return if $last;        $self->{insertion_mode} = IN_BODY_IM and return if $last;
3047                
3048        ## Step 16        ## Step 17
3049        $i--;        $i--;
3050        $node = $self->{open_elements}->[$i];        $node = $self->{open_elements}->[$i];
3051                
3052        ## Step 17        ## Step 18
3053        redo S3;        redo S3;
3054      } # S3      } # S3
3055    
# Line 3121  sub _tree_construction_main ($) { Line 3161  sub _tree_construction_main ($) {
3161      ## Step 1      ## Step 1
3162      my $start_tag_name = $token->{tag_name};      my $start_tag_name = $token->{tag_name};
3163      my $el;      my $el;
3164      !!!create-element ($el, $start_tag_name, $token->{attributes}, $token);      !!!create-element ($el, $HTML_NS, $start_tag_name, $token->{attributes}, $token);
3165    
3166      ## Step 2      ## Step 2
3167      $insert->($el);      $insert->($el);
# Line 3172  sub _tree_construction_main ($) { Line 3212  sub _tree_construction_main ($) {
3212    
3213    my $script_start_tag = sub () {    my $script_start_tag = sub () {
3214      my $script_el;      my $script_el;
3215      !!!create-element ($script_el, 'script', $token->{attributes}, $token);      !!!create-element ($script_el, $HTML_NS, 'script', $token->{attributes}, $token);
3216      ## TODO: mark as "parser-inserted"      ## TODO: mark as "parser-inserted"
3217    
3218      $self->{content_model} = CDATA_CONTENT_MODEL;      $self->{content_model} = CDATA_CONTENT_MODEL;
# Line 3495  sub _tree_construction_main ($) { Line 3535  sub _tree_construction_main ($) {
3535      }      }
3536    }; # $insert_to_foster    }; # $insert_to_foster
3537    
3538    B: {    B: while (1) {
3539      if ($token->{type} == DOCTYPE_TOKEN) {      if ($token->{type} == DOCTYPE_TOKEN) {
3540        !!!cp ('t73');        !!!cp ('t73');
3541        !!!parse-error (type => 'DOCTYPE in the middle', token => $token);        !!!parse-error (type => 'DOCTYPE in the middle', token => $token);
3542        ## Ignore the token        ## Ignore the token
3543        ## Stay in the phase        ## Stay in the phase
3544        !!!next-token;        !!!next-token;
3545        redo B;        next B;
3546      } elsif ($token->{type} == START_TAG_TOKEN and      } elsif ($token->{type} == START_TAG_TOKEN and
3547               $token->{tag_name} eq 'html') {               $token->{tag_name} eq 'html') {
3548        if ($self->{insertion_mode} == AFTER_HTML_BODY_IM) {        if ($self->{insertion_mode} == AFTER_HTML_BODY_IM) {
# Line 3530  sub _tree_construction_main ($) { Line 3570  sub _tree_construction_main ($) {
3570        }        }
3571        !!!nack ('t84.1');        !!!nack ('t84.1');
3572        !!!next-token;        !!!next-token;
3573        redo B;        next B;
3574      } elsif ($token->{type} == COMMENT_TOKEN) {      } elsif ($token->{type} == COMMENT_TOKEN) {
3575        my $comment = $self->{document}->create_comment ($token->{data});        my $comment = $self->{document}->create_comment ($token->{data});
3576        if ($self->{insertion_mode} & AFTER_HTML_IMS) {        if ($self->{insertion_mode} & AFTER_HTML_IMS) {
# Line 3544  sub _tree_construction_main ($) { Line 3584  sub _tree_construction_main ($) {
3584          $self->{open_elements}->[-1]->[0]->append_child ($comment);          $self->{open_elements}->[-1]->[0]->append_child ($comment);
3585        }        }
3586        !!!next-token;        !!!next-token;
3587        redo B;        next B;
3588      } elsif ($self->{insertion_mode} & HEAD_IMS) {      } elsif ($self->{insertion_mode} & IN_FOREIGN_CONTENT_IM) {
3589          if ($token->{type} == CHARACTER_TOKEN) {
3590            !!!cp ('t87.1');
3591            $self->{open_elements}->[-1]->[0]->manakai_append_text ($token->{data});
3592            !!!next-token;
3593            next B;
3594          } elsif ($token->{type} == START_TAG_TOKEN) {
3595            if ($self->{open_elements}->[-1]->[1] & FOREIGN_FLOW_CONTENT_EL or
3596                not ($self->{open_elements}->[-1]->[1] & FOREIGN_EL) or
3597                ($token->{tag_name} eq 'svg' and
3598                 $self->{open_elements}->[-1]->[1] & MML_AXML_EL)) {
3599              ## NOTE: "using the rules for secondary insertion mode"then"continue"
3600              !!!cp ('t87.2');
3601              #
3602            } elsif ({
3603      ## TODO:
3604                     }->{$token->{tag_name}}) {
3605              !!!cp ('t87.2');
3606              !!!parse-error (type => 'not closed',
3607                              value => $self->{open_elements}->[-1]->[0]
3608                                  ->manakai_local_name,
3609                              token => $token);
3610    
3611              pop @{$self->{open_elements}}
3612                  while $self->{open_elements}->[-1]->[1] & FOREIGN_EL;
3613    
3614              $self->{insertion_mode} &= ~ $self->{insertion_mode};
3615              ## Reprocess.
3616              next B;
3617            } else {
3618              ## TODO: case fixup
3619    
3620              !!!insert-element-f ($self->{open_elements}->[-1]->[0]->namespace_uri, $token);
3621    
3622              if ($self->{self_closing}) {
3623                pop @{$self->{open_elements}};
3624                !!!ack ('t87.3');
3625              } else {
3626                !!!cp ('t87.4');
3627              }
3628    
3629              !!!next-token;
3630              next B;
3631            }
3632          } elsif ($token->{type} == END_TAG_TOKEN) {
3633            ## NOTE: "using the rules for secondary insertion mode" then "continue"
3634            !!!cp ('t87.5');
3635            #
3636          } elsif ($token->{type} == END_OF_FILE_TOKEN) {
3637            ## NOTE: "using the rules for secondary insertion mode" then "continue"
3638            !!!cp ('t87.6');
3639            #
3640            ## TODO: ...
3641          } else {
3642            die "$0: $token->{type}: Unknown token type";        
3643          }
3644        }
3645    
3646        if ($self->{insertion_mode} & HEAD_IMS) {
3647        if ($token->{type} == CHARACTER_TOKEN) {        if ($token->{type} == CHARACTER_TOKEN) {
3648          if ($token->{data} =~ s/^([\x09\x0A\x0B\x0C\x20]+)//) {          if ($token->{data} =~ s/^([\x09\x0A\x0B\x0C\x20]+)//) {
3649            unless ($self->{insertion_mode} == BEFORE_HEAD_IM) {            unless ($self->{insertion_mode} == BEFORE_HEAD_IM) {
# Line 3555  sub _tree_construction_main ($) { Line 3653  sub _tree_construction_main ($) {
3653              !!!cp ('t88.1');              !!!cp ('t88.1');
3654              ## Ignore the token.              ## Ignore the token.
3655              !!!next-token;              !!!next-token;
3656              redo B;              next B;
3657            }            }
3658            unless (length $token->{data}) {            unless (length $token->{data}) {
3659              !!!cp ('t88');              !!!cp ('t88');
3660              !!!next-token;              !!!next-token;
3661              redo B;              next B;
3662            }            }
3663          }          }
3664    
3665          if ($self->{insertion_mode} == BEFORE_HEAD_IM) {          if ($self->{insertion_mode} == BEFORE_HEAD_IM) {
3666            !!!cp ('t89');            !!!cp ('t89');
3667            ## As if <head>            ## As if <head>
3668            !!!create-element ($self->{head_element}, 'head',, $token);            !!!create-element ($self->{head_element}, $HTML_NS, 'head',, $token);
3669            $self->{open_elements}->[-1]->[0]->append_child ($self->{head_element});            $self->{open_elements}->[-1]->[0]->append_child ($self->{head_element});
3670            push @{$self->{open_elements}},            push @{$self->{open_elements}},
3671                [$self->{head_element}, $el_category->{head}];                [$self->{head_element}, $el_category->{head}];
# Line 3601  sub _tree_construction_main ($) { Line 3699  sub _tree_construction_main ($) {
3699          !!!insert-element ('body',, $token);          !!!insert-element ('body',, $token);
3700          $self->{insertion_mode} = IN_BODY_IM;          $self->{insertion_mode} = IN_BODY_IM;
3701          ## reprocess          ## reprocess
3702          redo B;          next B;
3703        } elsif ($token->{type} == START_TAG_TOKEN) {        } elsif ($token->{type} == START_TAG_TOKEN) {
3704          if ($token->{tag_name} eq 'head') {          if ($token->{tag_name} eq 'head') {
3705            if ($self->{insertion_mode} == BEFORE_HEAD_IM) {            if ($self->{insertion_mode} == BEFORE_HEAD_IM) {
3706              !!!cp ('t93');              !!!cp ('t93');
3707              !!!create-element ($self->{head_element}, $token->{tag_name}, $token->{attributes}, $token);              !!!create-element ($self->{head_element}, $HTML_NS, $token->{tag_name}, $token->{attributes}, $token);
3708              $self->{open_elements}->[-1]->[0]->append_child              $self->{open_elements}->[-1]->[0]->append_child
3709                  ($self->{head_element});                  ($self->{head_element});
3710              push @{$self->{open_elements}},              push @{$self->{open_elements}},
# Line 3614  sub _tree_construction_main ($) { Line 3712  sub _tree_construction_main ($) {
3712              $self->{insertion_mode} = IN_HEAD_IM;              $self->{insertion_mode} = IN_HEAD_IM;
3713              !!!nack ('t93.1');              !!!nack ('t93.1');
3714              !!!next-token;              !!!next-token;
3715              redo B;              next B;
3716            } elsif ($self->{insertion_mode} == AFTER_HEAD_IM) {            } elsif ($self->{insertion_mode} == AFTER_HEAD_IM) {
3717              !!!cp ('t94');              !!!cp ('t94');
3718              #              #
# Line 3624  sub _tree_construction_main ($) { Line 3722  sub _tree_construction_main ($) {
3722              ## Ignore the token              ## Ignore the token
3723              !!!nack ('t95.1');              !!!nack ('t95.1');
3724              !!!next-token;              !!!next-token;
3725              redo B;              next B;
3726            }            }
3727          } elsif ($self->{insertion_mode} == BEFORE_HEAD_IM) {          } elsif ($self->{insertion_mode} == BEFORE_HEAD_IM) {
3728                !!!cp ('t96');            !!!cp ('t96');
3729                ## As if <head>            ## As if <head>
3730                !!!create-element ($self->{head_element}, 'head',, $token);            !!!create-element ($self->{head_element}, $HTML_NS, 'head',, $token);
3731                $self->{open_elements}->[-1]->[0]->append_child ($self->{head_element});            $self->{open_elements}->[-1]->[0]->append_child ($self->{head_element});
3732                push @{$self->{open_elements}},            push @{$self->{open_elements}},
3733                    [$self->{head_element}, $el_category->{head}];                [$self->{head_element}, $el_category->{head}];
3734    
3735                $self->{insertion_mode} = IN_HEAD_IM;            $self->{insertion_mode} = IN_HEAD_IM;
3736                ## Reprocess in the "in head" insertion mode...            ## Reprocess in the "in head" insertion mode...
3737              } else {          } else {
3738                !!!cp ('t97');            !!!cp ('t97');
3739              }          }
3740    
3741              if ($token->{tag_name} eq 'base') {              if ($token->{tag_name} eq 'base') {
3742                if ($self->{insertion_mode} == IN_HEAD_NOSCRIPT_IM) {                if ($self->{insertion_mode} == IN_HEAD_NOSCRIPT_IM) {
# Line 3668  sub _tree_construction_main ($) { Line 3766  sub _tree_construction_main ($) {
3766                    if $self->{insertion_mode} == AFTER_HEAD_IM;                    if $self->{insertion_mode} == AFTER_HEAD_IM;
3767                !!!nack ('t101.1');                !!!nack ('t101.1');
3768                !!!next-token;                !!!next-token;
3769                redo B;                next B;
3770              } elsif ($token->{tag_name} eq 'link') {              } elsif ($token->{tag_name} eq 'link') {
3771                ## NOTE: There is a "as if in head" code clone.                ## NOTE: There is a "as if in head" code clone.
3772                if ($self->{insertion_mode} == AFTER_HEAD_IM) {                if ($self->{insertion_mode} == AFTER_HEAD_IM) {
# Line 3685  sub _tree_construction_main ($) { Line 3783  sub _tree_construction_main ($) {
3783                    if $self->{insertion_mode} == AFTER_HEAD_IM;                    if $self->{insertion_mode} == AFTER_HEAD_IM;
3784                !!!ack ('t103.1');                !!!ack ('t103.1');
3785                !!!next-token;                !!!next-token;
3786                redo B;                next B;
3787              } elsif ($token->{tag_name} eq 'meta') {              } elsif ($token->{tag_name} eq 'meta') {
3788                ## NOTE: There is a "as if in head" code clone.                ## NOTE: There is a "as if in head" code clone.
3789                if ($self->{insertion_mode} == AFTER_HEAD_IM) {                if ($self->{insertion_mode} == AFTER_HEAD_IM) {
# Line 3750  sub _tree_construction_main ($) { Line 3848  sub _tree_construction_main ($) {
3848                    if $self->{insertion_mode} == AFTER_HEAD_IM;                    if $self->{insertion_mode} == AFTER_HEAD_IM;
3849                !!!ack ('t110.1');                !!!ack ('t110.1');
3850                !!!next-token;                !!!next-token;
3851                redo B;                next B;
3852              } elsif ($token->{tag_name} eq 'title') {              } elsif ($token->{tag_name} eq 'title') {
3853                if ($self->{insertion_mode} == IN_HEAD_NOSCRIPT_IM) {                if ($self->{insertion_mode} == IN_HEAD_NOSCRIPT_IM) {
3854                  !!!cp ('t111');                  !!!cp ('t111');
# Line 3775  sub _tree_construction_main ($) { Line 3873  sub _tree_construction_main ($) {
3873                $parse_rcdata->(RCDATA_CONTENT_MODEL);                $parse_rcdata->(RCDATA_CONTENT_MODEL);
3874                pop @{$self->{open_elements}} # <head>                pop @{$self->{open_elements}} # <head>
3875                    if $self->{insertion_mode} == AFTER_HEAD_IM;                    if $self->{insertion_mode} == AFTER_HEAD_IM;
3876                redo B;                next B;
3877              } elsif ($token->{tag_name} eq 'style') {              } elsif ($token->{tag_name} eq 'style') {
3878                ## NOTE: Or (scripting is enabled and tag_name eq 'noscript' and                ## NOTE: Or (scripting is enabled and tag_name eq 'noscript' and
3879                ## insertion mode IN_HEAD_IM)                ## insertion mode IN_HEAD_IM)
# Line 3791  sub _tree_construction_main ($) { Line 3889  sub _tree_construction_main ($) {
3889                $parse_rcdata->(CDATA_CONTENT_MODEL);                $parse_rcdata->(CDATA_CONTENT_MODEL);
3890                pop @{$self->{open_elements}} # <head>                pop @{$self->{open_elements}} # <head>
3891                    if $self->{insertion_mode} == AFTER_HEAD_IM;                    if $self->{insertion_mode} == AFTER_HEAD_IM;
3892                redo B;                next B;
3893              } elsif ($token->{tag_name} eq 'noscript') {              } elsif ($token->{tag_name} eq 'noscript') {
3894                if ($self->{insertion_mode} == IN_HEAD_IM) {                if ($self->{insertion_mode} == IN_HEAD_IM) {
3895                  !!!cp ('t116');                  !!!cp ('t116');
# Line 3800  sub _tree_construction_main ($) { Line 3898  sub _tree_construction_main ($) {
3898                  $self->{insertion_mode} = IN_HEAD_NOSCRIPT_IM;                  $self->{insertion_mode} = IN_HEAD_NOSCRIPT_IM;
3899                  !!!nack ('t116.1');                  !!!nack ('t116.1');
3900                  !!!next-token;                  !!!next-token;
3901                  redo B;                  next B;
3902                } elsif ($self->{insertion_mode} == IN_HEAD_NOSCRIPT_IM) {                } elsif ($self->{insertion_mode} == IN_HEAD_NOSCRIPT_IM) {
3903                  !!!cp ('t117');                  !!!cp ('t117');
3904                  !!!parse-error (type => 'in noscript:noscript', token => $token);                  !!!parse-error (type => 'in noscript:noscript', token => $token);
3905                  ## Ignore the token                  ## Ignore the token
3906                  !!!nack ('t117.1');                  !!!nack ('t117.1');
3907                  !!!next-token;                  !!!next-token;
3908                  redo B;                  next B;
3909                } else {                } else {
3910                  !!!cp ('t118');                  !!!cp ('t118');
3911                  #                  #
# Line 3834  sub _tree_construction_main ($) { Line 3932  sub _tree_construction_main ($) {
3932                $script_start_tag->();                $script_start_tag->();
3933                pop @{$self->{open_elements}} # <head>                pop @{$self->{open_elements}} # <head>
3934                    if $self->{insertion_mode} == AFTER_HEAD_IM;                    if $self->{insertion_mode} == AFTER_HEAD_IM;
3935                redo B;                next B;
3936              } elsif ($token->{tag_name} eq 'body' or              } elsif ($token->{tag_name} eq 'body' or
3937                       $token->{tag_name} eq 'frameset') {                       $token->{tag_name} eq 'frameset') {
3938                if ($self->{insertion_mode} == IN_HEAD_NOSCRIPT_IM) {                if ($self->{insertion_mode} == IN_HEAD_NOSCRIPT_IM) {
# Line 3870  sub _tree_construction_main ($) { Line 3968  sub _tree_construction_main ($) {
3968                }                }
3969                !!!nack ('t127.1');                !!!nack ('t127.1');
3970                !!!next-token;                !!!next-token;
3971                redo B;                next B;
3972              } else {              } else {
3973                !!!cp ('t128');                !!!cp ('t128');
3974                #                #
# Line 3903  sub _tree_construction_main ($) { Line 4001  sub _tree_construction_main ($) {
4001              $self->{insertion_mode} = IN_BODY_IM;              $self->{insertion_mode} = IN_BODY_IM;
4002              ## reprocess              ## reprocess
4003              !!!ack-later;              !!!ack-later;
4004              redo B;              next B;
4005            } elsif ($token->{type} == END_TAG_TOKEN) {            } elsif ($token->{type} == END_TAG_TOKEN) {
4006              if ($token->{tag_name} eq 'head') {              if ($token->{tag_name} eq 'head') {
4007                if ($self->{insertion_mode} == BEFORE_HEAD_IM) {                if ($self->{insertion_mode} == BEFORE_HEAD_IM) {
4008                  !!!cp ('t132');                  !!!cp ('t132');
4009                  ## As if <head>                  ## As if <head>
4010                  !!!create-element ($self->{head_element}, 'head',, $token);                  !!!create-element ($self->{head_element}, $HTML_NS, 'head',, $token);
4011                  $self->{open_elements}->[-1]->[0]->append_child ($self->{head_element});                  $self->{open_elements}->[-1]->[0]->append_child ($self->{head_element});
4012                  push @{$self->{open_elements}},                  push @{$self->{open_elements}},
4013                      [$self->{head_element}, $el_category->{head}];                      [$self->{head_element}, $el_category->{head}];
# Line 3918  sub _tree_construction_main ($) { Line 4016  sub _tree_construction_main ($) {
4016                  pop @{$self->{open_elements}};                  pop @{$self->{open_elements}};
4017                  $self->{insertion_mode} = AFTER_HEAD_IM;                  $self->{insertion_mode} = AFTER_HEAD_IM;
4018                  !!!next-token;                  !!!next-token;
4019                  redo B;                  next B;
4020                } elsif ($self->{insertion_mode} == IN_HEAD_NOSCRIPT_IM) {                } elsif ($self->{insertion_mode} == IN_HEAD_NOSCRIPT_IM) {
4021                  !!!cp ('t133');                  !!!cp ('t133');
4022                  ## As if </noscript>                  ## As if </noscript>
# Line 3929  sub _tree_construction_main ($) { Line 4027  sub _tree_construction_main ($) {
4027                  pop @{$self->{open_elements}};                  pop @{$self->{open_elements}};
4028                  $self->{insertion_mode} = AFTER_HEAD_IM;                  $self->{insertion_mode} = AFTER_HEAD_IM;
4029                  !!!next-token;                  !!!next-token;
4030                  redo B;                  next B;
4031                } elsif ($self->{insertion_mode} == IN_HEAD_IM) {                } elsif ($self->{insertion_mode} == IN_HEAD_IM) {
4032                  !!!cp ('t134');                  !!!cp ('t134');
4033                  pop @{$self->{open_elements}};                  pop @{$self->{open_elements}};
4034                  $self->{insertion_mode} = AFTER_HEAD_IM;                  $self->{insertion_mode} = AFTER_HEAD_IM;
4035                  !!!next-token;                  !!!next-token;
4036                  redo B;                  next B;
4037                } else {                } else {
4038                  !!!cp ('t135');                  !!!cp ('t135');
4039                  #                  #
# Line 3946  sub _tree_construction_main ($) { Line 4044  sub _tree_construction_main ($) {
4044                  pop @{$self->{open_elements}};                  pop @{$self->{open_elements}};
4045                  $self->{insertion_mode} = IN_HEAD_IM;                  $self->{insertion_mode} = IN_HEAD_IM;
4046                  !!!next-token;                  !!!next-token;
4047                  redo B;                  next B;
4048                } elsif ($self->{insertion_mode} == BEFORE_HEAD_IM) {                } elsif ($self->{insertion_mode} == BEFORE_HEAD_IM) {
4049                  !!!cp ('t137');                  !!!cp ('t137');
4050                  !!!parse-error (type => 'unmatched end tag:noscript', token => $token);                  !!!parse-error (type => 'unmatched end tag:noscript', token => $token);
4051                  ## Ignore the token ## ISSUE: An issue in the spec.                  ## Ignore the token ## ISSUE: An issue in the spec.
4052                  !!!next-token;                  !!!next-token;
4053                  redo B;                  next B;
4054                } else {                } else {
4055                  !!!cp ('t138');                  !!!cp ('t138');
4056                  #                  #
# Line 3963  sub _tree_construction_main ($) { Line 4061  sub _tree_construction_main ($) {
4061                if ($self->{insertion_mode} == BEFORE_HEAD_IM) {                if ($self->{insertion_mode} == BEFORE_HEAD_IM) {
4062                  !!!cp ('t139');                  !!!cp ('t139');
4063                  ## As if <head>                  ## As if <head>
4064                  !!!create-element ($self->{head_element}, 'head',, $token);                  !!!create-element ($self->{head_element}, $HTML_NS, 'head',, $token);
4065                  $self->{open_elements}->[-1]->[0]->append_child ($self->{head_element});                  $self->{open_elements}->[-1]->[0]->append_child ($self->{head_element});
4066                  push @{$self->{open_elements}},                  push @{$self->{open_elements}},
4067                      [$self->{head_element}, $el_category->{head}];                      [$self->{head_element}, $el_category->{head}];
# Line 3975  sub _tree_construction_main ($) { Line 4073  sub _tree_construction_main ($) {
4073                  !!!parse-error (type => 'unmatched end tag:'.$token->{tag_name}, token => $token);                  !!!parse-error (type => 'unmatched end tag:'.$token->{tag_name}, token => $token);
4074                  ## Ignore the token                  ## Ignore the token
4075                  !!!next-token;                  !!!next-token;
4076                  redo B;                  next B;
4077                } else {                } else {
4078                  !!!cp ('t141');                  !!!cp ('t141');
4079                }                }
# Line 3987  sub _tree_construction_main ($) { Line 4085  sub _tree_construction_main ($) {
4085                if ($self->{insertion_mode} == BEFORE_HEAD_IM) {                if ($self->{insertion_mode} == BEFORE_HEAD_IM) {
4086                  !!!cp ('t142');                  !!!cp ('t142');
4087                  ## As if <head>                  ## As if <head>
4088                  !!!create-element ($self->{head_element}, 'head',, $token);                  !!!create-element ($self->{head_element}, $HTML_NS, 'head',, $token);
4089                  $self->{open_elements}->[-1]->[0]->append_child ($self->{head_element});                  $self->{open_elements}->[-1]->[0]->append_child ($self->{head_element});
4090                  push @{$self->{open_elements}},                  push @{$self->{open_elements}},
4091                      [$self->{head_element}, $el_category->{head}];                      [$self->{head_element}, $el_category->{head}];
# Line 4008  sub _tree_construction_main ($) { Line 4106  sub _tree_construction_main ($) {
4106                  !!!parse-error (type => 'unmatched end tag:'.$token->{tag_name}, token => $token);                  !!!parse-error (type => 'unmatched end tag:'.$token->{tag_name}, token => $token);
4107                  ## Ignore the token                  ## Ignore the token
4108                  !!!next-token;                  !!!next-token;
4109                  redo B;                  next B;
4110                }                }
4111              }              }
4112    
# Line 4035  sub _tree_construction_main ($) { Line 4133  sub _tree_construction_main ($) {
4133                !!!parse-error (type => 'unmatched end tag:'.$token->{tag_name}, token => $token);                !!!parse-error (type => 'unmatched end tag:'.$token->{tag_name}, token => $token);
4134                ## Ignore the token ## ISSUE: An issue in the spec.                ## Ignore the token ## ISSUE: An issue in the spec.
4135                !!!next-token;                !!!next-token;
4136                redo B;                next B;
4137              } else {              } else {
4138                !!!cp ('t149');                !!!cp ('t149');
4139              }              }
# Line 4045  sub _tree_construction_main ($) { Line 4143  sub _tree_construction_main ($) {
4143              !!!insert-element ('body',, $token);              !!!insert-element ('body',, $token);
4144              $self->{insertion_mode} = IN_BODY_IM;              $self->{insertion_mode} = IN_BODY_IM;
4145              ## reprocess              ## reprocess
4146              redo B;              next B;
4147        } elsif ($token->{type} == END_OF_FILE_TOKEN) {        } elsif ($token->{type} == END_OF_FILE_TOKEN) {
4148          if ($self->{insertion_mode} == BEFORE_HEAD_IM) {          if ($self->{insertion_mode} == BEFORE_HEAD_IM) {
4149            !!!cp ('t149.1');            !!!cp ('t149.1');
4150    
4151            ## NOTE: As if <head>            ## NOTE: As if <head>
4152            !!!create-element ($self->{head_element}, 'head',, $token);            !!!create-element ($self->{head_element}, $HTML_NS, 'head',, $token);
4153            $self->{open_elements}->[-1]->[0]->append_child            $self->{open_elements}->[-1]->[0]->append_child
4154                ($self->{head_element});                ($self->{head_element});
4155            #push @{$self->{open_elements}},            #push @{$self->{open_elements}},
# Line 4099  sub _tree_construction_main ($) { Line 4197  sub _tree_construction_main ($) {
4197          !!!insert-element ('body',, $token);          !!!insert-element ('body',, $token);
4198          $self->{insertion_mode} = IN_BODY_IM;          $self->{insertion_mode} = IN_BODY_IM;
4199          ## NOTE: Reprocess.          ## NOTE: Reprocess.
4200          redo B;          next B;
4201        } else {        } else {
4202          die "$0: $token->{type}: Unknown token type";          die "$0: $token->{type}: Unknown token type";
4203        }        }
# Line 4114  sub _tree_construction_main ($) { Line 4212  sub _tree_construction_main ($) {
4212              $self->{open_elements}->[-1]->[0]->manakai_append_text ($token->{data});              $self->{open_elements}->[-1]->[0]->manakai_append_text ($token->{data});
4213    
4214              !!!next-token;              !!!next-token;
4215              redo B;              next B;
4216            } elsif ($token->{type} == START_TAG_TOKEN) {            } elsif ($token->{type} == START_TAG_TOKEN) {
4217              if ({              if ({
4218                   caption => 1, col => 1, colgroup => 1, tbody => 1,                   caption => 1, col => 1, colgroup => 1, tbody => 1,
# Line 4133  sub _tree_construction_main ($) { Line 4231  sub _tree_construction_main ($) {
4231                                tag_name => $node->[0]->manakai_local_name,                                tag_name => $node->[0]->manakai_local_name,
4232                                line => $token->{line},                                line => $token->{line},
4233                                column => $token->{column}};                                column => $token->{column}};
4234                      redo B;                      next B;
4235                    } elsif ($node->[1] & TABLE_SCOPING_EL) {                    } elsif ($node->[1] & TABLE_SCOPING_EL) {
4236                      !!!cp ('t152');                      !!!cp ('t152');
4237                      ## ISSUE: This case can never be reached, maybe.                      ## ISSUE: This case can never be reached, maybe.
# Line 4147  sub _tree_construction_main ($) { Line 4245  sub _tree_construction_main ($) {
4245                  ## Ignore the token                  ## Ignore the token
4246                  !!!nack ('t153.1');                  !!!nack ('t153.1');
4247                  !!!next-token;                  !!!next-token;
4248                  redo B;                  next B;
4249                } elsif ($self->{insertion_mode} == IN_CAPTION_IM) {                } elsif ($self->{insertion_mode} == IN_CAPTION_IM) {
4250                  !!!parse-error (type => 'not closed:caption', token => $token);                  !!!parse-error (type => 'not closed:caption', token => $token);
4251                                    
# Line 4173  sub _tree_construction_main ($) { Line 4271  sub _tree_construction_main ($) {
4271                    ## Ignore the token                    ## Ignore the token
4272                    !!!nack ('t157.1');                    !!!nack ('t157.1');
4273                    !!!next-token;                    !!!next-token;
4274                    redo B;                    next B;
4275                  } # INSCOPE                  } # INSCOPE
4276                                    
4277                  ## generate implied end tags                  ## generate implied end tags
# Line 4201  sub _tree_construction_main ($) { Line 4299  sub _tree_construction_main ($) {
4299                                    
4300                  ## reprocess                  ## reprocess
4301                  !!!ack-later;                  !!!ack-later;
4302                  redo B;                  next B;
4303                } else {                } else {
4304                  !!!cp ('t161');                  !!!cp ('t161');
4305                  #                  #
# Line 4231  sub _tree_construction_main ($) { Line 4329  sub _tree_construction_main ($) {
4329                      !!!parse-error (type => 'unmatched end tag:'.$token->{tag_name}, token => $token);                      !!!parse-error (type => 'unmatched end tag:'.$token->{tag_name}, token => $token);
4330                      ## Ignore the token                      ## Ignore the token
4331                      !!!next-token;                      !!!next-token;
4332                      redo B;                      next B;
4333                    }                    }
4334                                    
4335                  ## generate implied end tags                  ## generate implied end tags
# Line 4259  sub _tree_construction_main ($) { Line 4357  sub _tree_construction_main ($) {
4357                  $self->{insertion_mode} = IN_ROW_IM;                  $self->{insertion_mode} = IN_ROW_IM;
4358                                    
4359                  !!!next-token;                  !!!next-token;
4360                  redo B;                  next B;
4361                } elsif ($self->{insertion_mode} == IN_CAPTION_IM) {                } elsif ($self->{insertion_mode} == IN_CAPTION_IM) {
4362                  !!!cp ('t169');                  !!!cp ('t169');
4363                  !!!parse-error (type => 'unmatched end tag:'.$token->{tag_name}, token => $token);                  !!!parse-error (type => 'unmatched end tag:'.$token->{tag_name}, token => $token);
4364                  ## Ignore the token                  ## Ignore the token
4365                  !!!next-token;                  !!!next-token;
4366                  redo B;                  next B;
4367                } else {                } else {
4368                  !!!cp ('t170');                  !!!cp ('t170');
4369                  #                  #
# Line 4292  sub _tree_construction_main ($) { Line 4390  sub _tree_construction_main ($) {
4390                                    value => $token->{tag_name}, token => $token);                                    value => $token->{tag_name}, token => $token);
4391                    ## Ignore the token                    ## Ignore the token
4392                    !!!next-token;                    !!!next-token;
4393                    redo B;                    next B;
4394                  } # INSCOPE                  } # INSCOPE
4395                                    
4396                  ## generate implied end tags                  ## generate implied end tags
# Line 4319  sub _tree_construction_main ($) { Line 4417  sub _tree_construction_main ($) {
4417                  $self->{insertion_mode} = IN_TABLE_IM;                  $self->{insertion_mode} = IN_TABLE_IM;
4418                                    
4419                  !!!next-token;                  !!!next-token;
4420                  redo B;                  next B;
4421                } elsif ($self->{insertion_mode} == IN_CELL_IM) {                } elsif ($self->{insertion_mode} == IN_CELL_IM) {
4422                  !!!cp ('t177');                  !!!cp ('t177');
4423                  !!!parse-error (type => 'unmatched end tag:'.$token->{tag_name}, token => $token);                  !!!parse-error (type => 'unmatched end tag:'.$token->{tag_name}, token => $token);
4424                  ## Ignore the token                  ## Ignore the token
4425                  !!!next-token;                  !!!next-token;
4426                  redo B;                  next B;
4427                } else {                } else {
4428                  !!!cp ('t178');                  !!!cp ('t178');
4429                  #                  #
# Line 4350  sub _tree_construction_main ($) { Line 4448  sub _tree_construction_main ($) {
4448                      $token = {type => END_TAG_TOKEN, tag_name => $tn,                      $token = {type => END_TAG_TOKEN, tag_name => $tn,
4449                                line => $token->{line},                                line => $token->{line},
4450                                column => $token->{column}};                                column => $token->{column}};
4451                      redo B;                      next B;
4452                    } elsif ($node->[1] & TABLE_CELL_EL) {                    } elsif ($node->[1] & TABLE_CELL_EL) {
4453                      !!!cp ('t180');                      !!!cp ('t180');
4454                      $tn = $node->[0]->manakai_local_name;                      $tn = $node->[0]->manakai_local_name;
# Line 4368  sub _tree_construction_main ($) { Line 4466  sub _tree_construction_main ($) {
4466                      value => $token->{tag_name}, token => $token);                      value => $token->{tag_name}, token => $token);
4467                  ## Ignore the token                  ## Ignore the token
4468                  !!!next-token;                  !!!next-token;
4469                  redo B;                  next B;
4470                } # INSCOPE                } # INSCOPE
4471              } elsif ($token->{tag_name} eq 'table' and              } elsif ($token->{tag_name} eq 'table' and
4472                       $self->{insertion_mode} == IN_CAPTION_IM) {                       $self->{insertion_mode} == IN_CAPTION_IM) {
# Line 4393  sub _tree_construction_main ($) { Line 4491  sub _tree_construction_main ($) {
4491                  !!!parse-error (type => 'unmatched end tag:caption', token => $token);                  !!!parse-error (type => 'unmatched end tag:caption', token => $token);
4492                  ## Ignore the token                  ## Ignore the token
4493                  !!!next-token;                  !!!next-token;
4494                  redo B;                  next B;
4495                }                }
4496                                
4497                ## generate implied end tags                ## generate implied end tags
# Line 4419  sub _tree_construction_main ($) { Line 4517  sub _tree_construction_main ($) {
4517                $self->{insertion_mode} = IN_TABLE_IM;                $self->{insertion_mode} = IN_TABLE_IM;
4518    
4519                ## reprocess                ## reprocess
4520                redo B;                next B;
4521              } elsif ({              } elsif ({
4522                        body => 1, col => 1, colgroup => 1, html => 1,                        body => 1, col => 1, colgroup => 1, html => 1,
4523                       }->{$token->{tag_name}}) {                       }->{$token->{tag_name}}) {
# Line 4428  sub _tree_construction_main ($) { Line 4526  sub _tree_construction_main ($) {
4526                  !!!parse-error (type => 'unmatched end tag:'.$token->{tag_name}, token => $token);                  !!!parse-error (type => 'unmatched end tag:'.$token->{tag_name}, token => $token);
4527                  ## Ignore the token                  ## Ignore the token
4528                  !!!next-token;                  !!!next-token;
4529                  redo B;                  next B;
4530                } else {                } else {
4531                  !!!cp ('t191');                  !!!cp ('t191');
4532                  #                  #
# Line 4442  sub _tree_construction_main ($) { Line 4540  sub _tree_construction_main ($) {
4540                !!!parse-error (type => 'unmatched end tag:'.$token->{tag_name}, token => $token);                !!!parse-error (type => 'unmatched end tag:'.$token->{tag_name}, token => $token);
4541                ## Ignore the token                ## Ignore the token
4542                !!!next-token;                !!!next-token;
4543                redo B;                next B;
4544              } else {              } else {
4545                !!!cp ('t193');                !!!cp ('t193');
4546                #                #
# Line 4473  sub _tree_construction_main ($) { Line 4571  sub _tree_construction_main ($) {
4571            unless (length $token->{data}) {            unless (length $token->{data}) {
4572              !!!cp ('t194');              !!!cp ('t194');
4573              !!!next-token;              !!!next-token;
4574              redo B;              next B;
4575            } else {            } else {
4576              !!!cp ('t195');              !!!cp ('t195');
4577            }            }
# Line 4528  sub _tree_construction_main ($) { Line 4626  sub _tree_construction_main ($) {
4626          }          }
4627                            
4628          !!!next-token;          !!!next-token;
4629          redo B;          next B;
4630        } elsif ($token->{type} == START_TAG_TOKEN) {        } elsif ($token->{type} == START_TAG_TOKEN) {
4631              if ({              if ({
4632                   tr => ($self->{insertion_mode} != IN_ROW_IM),                   tr => ($self->{insertion_mode} != IN_ROW_IM),
# Line 4567  sub _tree_construction_main ($) { Line 4665  sub _tree_construction_main ($) {
4665                    !!!insert-element ($token->{tag_name}, $token->{attributes}, $token);                    !!!insert-element ($token->{tag_name}, $token->{attributes}, $token);
4666                    !!!nack ('t204');                    !!!nack ('t204');
4667                    !!!next-token;                    !!!next-token;
4668                    redo B;                    next B;
4669                  } else {                  } else {
4670                    !!!cp ('t205');                    !!!cp ('t205');
4671                    !!!insert-element ('tr',, $token);                    !!!insert-element ('tr',, $token);
# Line 4591  sub _tree_construction_main ($) { Line 4689  sub _tree_construction_main ($) {
4689                                
4690                !!!nack ('t207.1');                !!!nack ('t207.1');
4691                !!!next-token;                !!!next-token;
4692                redo B;                next B;
4693              } elsif ({              } elsif ({
4694                        caption => 1, col => 1, colgroup => 1,                        caption => 1, col => 1, colgroup => 1,
4695                        tbody => 1, tfoot => 1, thead => 1,                        tbody => 1, tfoot => 1, thead => 1,
# Line 4619  sub _tree_construction_main ($) { Line 4717  sub _tree_construction_main ($) {
4717                    ## Ignore the token                    ## Ignore the token
4718                    !!!nack ('t210.1');                    !!!nack ('t210.1');
4719                    !!!next-token;                    !!!next-token;
4720                    redo B;                    next B;
4721                  }                  }
4722                                    
4723                  ## Clear back to table row context                  ## Clear back to table row context
# Line 4636  sub _tree_construction_main ($) { Line 4734  sub _tree_construction_main ($) {
4734                    !!!cp ('t212');                    !!!cp ('t212');
4735                    ## reprocess                    ## reprocess
4736                    !!!ack-later;                    !!!ack-later;
4737                    redo B;                    next B;
4738                  } else {                  } else {
4739                    !!!cp ('t213');                    !!!cp ('t213');
4740                    ## reprocess in the "in table body" insertion mode...                    ## reprocess in the "in table body" insertion mode...
# Line 4664  sub _tree_construction_main ($) { Line 4762  sub _tree_construction_main ($) {
4762                    ## Ignore the token                    ## Ignore the token
4763                    !!!nack ('t216.1');                    !!!nack ('t216.1');
4764                    !!!next-token;                    !!!next-token;
4765                    redo B;                    next B;
4766                  }                  }
4767    
4768                  ## Clear back to table body context                  ## Clear back to table body context
# Line 4702  sub _tree_construction_main ($) { Line 4800  sub _tree_construction_main ($) {
4800                  $self->{insertion_mode} = IN_COLUMN_GROUP_IM;                  $self->{insertion_mode} = IN_COLUMN_GROUP_IM;
4801                  ## reprocess                  ## reprocess
4802                  !!!ack-later;                  !!!ack-later;
4803                  redo B;                  next B;
4804                } elsif ({                } elsif ({
4805                          caption => 1,                          caption => 1,
4806                          colgroup => 1,                          colgroup => 1,
# Line 4729  sub _tree_construction_main ($) { Line 4827  sub _tree_construction_main ($) {
4827                                            }->{$token->{tag_name}};                                            }->{$token->{tag_name}};
4828                  !!!next-token;                  !!!next-token;
4829                  !!!nack ('t220.1');                  !!!nack ('t220.1');
4830                  redo B;                  next B;
4831                } else {                } else {
4832                  die "$0: in table: <>: $token->{tag_name}";                  die "$0: in table: <>: $token->{tag_name}";
4833                }                }
# Line 4760  sub _tree_construction_main ($) { Line 4858  sub _tree_construction_main ($) {
4858                  ## Ignore tokens </table><table>                  ## Ignore tokens </table><table>
4859                  !!!nack ('t223.1');                  !!!nack ('t223.1');
4860                  !!!next-token;                  !!!next-token;
4861                  redo B;                  next B;
4862                }                }
4863                                
4864  ## TODO: Followings are removed from the latest spec.  ## TODO: Followings are removed from the latest spec.
# Line 4788  sub _tree_construction_main ($) { Line 4886  sub _tree_construction_main ($) {
4886    
4887            ## reprocess            ## reprocess
4888            !!!ack-later;            !!!ack-later;
4889            redo B;            next B;
4890          } elsif ($token->{tag_name} eq 'style') {          } elsif ($token->{tag_name} eq 'style') {
4891            if (not $open_tables->[-1]->[1]) { # tainted            if (not $open_tables->[-1]->[1]) { # tainted
4892              !!!cp ('t227.8');              !!!cp ('t227.8');
4893              ## NOTE: This is a "as if in head" code clone.              ## NOTE: This is a "as if in head" code clone.
4894              $parse_rcdata->(CDATA_CONTENT_MODEL);              $parse_rcdata->(CDATA_CONTENT_MODEL);
4895              redo B;              next B;
4896            } else {            } else {
4897              !!!cp ('t227.7');              !!!cp ('t227.7');
4898              #              #
# Line 4804  sub _tree_construction_main ($) { Line 4902  sub _tree_construction_main ($) {
4902              !!!cp ('t227.6');              !!!cp ('t227.6');
4903              ## NOTE: This is a "as if in head" code clone.              ## NOTE: This is a "as if in head" code clone.
4904              $script_start_tag->();              $script_start_tag->();
4905              redo B;              next B;
4906            } else {            } else {
4907              !!!cp ('t227.5');              !!!cp ('t227.5');
4908              #              #
# Line 4825  sub _tree_construction_main ($) { Line 4923  sub _tree_construction_main ($) {
4923    
4924                  !!!next-token;                  !!!next-token;
4925                  !!!ack ('t227.2.1');                  !!!ack ('t227.2.1');
4926                  redo B;                  next B;
4927                } else {                } else {
4928                  !!!cp ('t227.2');                  !!!cp ('t227.2');
4929                  #                  #
# Line 4869  sub _tree_construction_main ($) { Line 4967  sub _tree_construction_main ($) {
4967                  ## Ignore the token                  ## Ignore the token
4968                  !!!nack ('t230.1');                  !!!nack ('t230.1');
4969                  !!!next-token;                  !!!next-token;
4970                  redo B;                  next B;
4971                } else {                } else {
4972                  !!!cp ('t232');                  !!!cp ('t232');
4973                }                }
# Line 4886  sub _tree_construction_main ($) { Line 4984  sub _tree_construction_main ($) {
4984                $self->{insertion_mode} = IN_TABLE_BODY_IM;                $self->{insertion_mode} = IN_TABLE_BODY_IM;
4985                !!!next-token;                !!!next-token;
4986                !!!nack ('t231.1');                !!!nack ('t231.1');
4987                redo B;                next B;
4988              } elsif ($token->{tag_name} eq 'table') {              } elsif ($token->{tag_name} eq 'table') {
4989                if ($self->{insertion_mode} == IN_ROW_IM) {                if ($self->{insertion_mode} == IN_ROW_IM) {
4990                  ## As if </tr>                  ## As if </tr>
# Line 4910  sub _tree_construction_main ($) { Line 5008  sub _tree_construction_main ($) {
5008                    ## Ignore the token                    ## Ignore the token
5009                    !!!nack ('t236.1');                    !!!nack ('t236.1');
5010                    !!!next-token;                    !!!next-token;
5011                    redo B;                    next B;
5012                  }                  }
5013                                    
5014                  ## Clear back to table row context                  ## Clear back to table row context
# Line 4946  sub _tree_construction_main ($) { Line 5044  sub _tree_construction_main ($) {
5044                    ## Ignore the token                    ## Ignore the token
5045                    !!!nack ('t239.1');                    !!!nack ('t239.1');
5046                    !!!next-token;                    !!!next-token;
5047                    redo B;                    next B;
5048                  }                  }
5049                                    
5050                  ## Clear back to table body context                  ## Clear back to table body context
# Line 4992  sub _tree_construction_main ($) { Line 5090  sub _tree_construction_main ($) {
5090                  ## Ignore the token                  ## Ignore the token
5091                  !!!nack ('t243.1');                  !!!nack ('t243.1');
5092                  !!!next-token;                  !!!next-token;
5093                  redo B;                  next B;
5094                }                }
5095                                    
5096                splice @{$self->{open_elements}}, $i;                splice @{$self->{open_elements}}, $i;
# Line 5001  sub _tree_construction_main ($) { Line 5099  sub _tree_construction_main ($) {
5099                $self->_reset_insertion_mode;                $self->_reset_insertion_mode;
5100                                
5101                !!!next-token;                !!!next-token;
5102                redo B;                next B;
5103              } elsif ({              } elsif ({
5104                        tbody => 1, tfoot => 1, thead => 1,                        tbody => 1, tfoot => 1, thead => 1,
5105                       }->{$token->{tag_name}} and                       }->{$token->{tag_name}} and
# Line 5026  sub _tree_construction_main ($) { Line 5124  sub _tree_construction_main ($) {
5124                      ## Ignore the token                      ## Ignore the token
5125                      !!!nack ('t249.1');                      !!!nack ('t249.1');
5126                      !!!next-token;                      !!!next-token;
5127                      redo B;                      next B;
5128                    }                    }
5129                                    
5130                  ## As if </tr>                  ## As if </tr>
# Line 5049  sub _tree_construction_main ($) { Line 5147  sub _tree_construction_main ($) {
5147                      ## Ignore the token                      ## Ignore the token
5148                      !!!nack ('t252.1');                      !!!nack ('t252.1');
5149                      !!!next-token;                      !!!next-token;
5150                      redo B;                      next B;
5151                    }                    }
5152                                    
5153                  ## Clear back to table row context                  ## Clear back to table row context
# Line 5084  sub _tree_construction_main ($) { Line 5182  sub _tree_construction_main ($) {
5182                  ## Ignore the token                  ## Ignore the token
5183                  !!!nack ('t256.1');                  !!!nack ('t256.1');
5184                  !!!next-token;                  !!!next-token;
5185                  redo B;                  next B;
5186                }                }
5187    
5188                ## Clear back to table body context                ## Clear back to table body context
# Line 5099  sub _tree_construction_main ($) { Line 5197  sub _tree_construction_main ($) {
5197                $self->{insertion_mode} = IN_TABLE_IM;                $self->{insertion_mode} = IN_TABLE_IM;
5198                !!!nack ('t257.1');                !!!nack ('t257.1');
5199                !!!next-token;                !!!next-token;
5200                redo B;                next B;
5201              } elsif ({              } elsif ({
5202                        body => 1, caption => 1, col => 1, colgroup => 1,                        body => 1, caption => 1, col => 1, colgroup => 1,
5203                        html => 1, td => 1, th => 1,                        html => 1, td => 1, th => 1,
# Line 5111  sub _tree_construction_main ($) { Line 5209  sub _tree_construction_main ($) {
5209            ## Ignore the token            ## Ignore the token
5210            !!!nack ('t258.1');            !!!nack ('t258.1');
5211             !!!next-token;             !!!next-token;
5212            redo B;            next B;
5213          } else {          } else {
5214            !!!cp ('t259');            !!!cp ('t259');
5215            !!!parse-error (type => 'in table:/'.$token->{tag_name}, token => $token);            !!!parse-error (type => 'in table:/'.$token->{tag_name}, token => $token);
# Line 5142  sub _tree_construction_main ($) { Line 5240  sub _tree_construction_main ($) {
5240                unless (length $token->{data}) {                unless (length $token->{data}) {
5241                  !!!cp ('t260');                  !!!cp ('t260');
5242                  !!!next-token;                  !!!next-token;
5243                  redo B;                  next B;
5244                }                }
5245              }              }
5246                            
# Line 5155  sub _tree_construction_main ($) { Line 5253  sub _tree_construction_main ($) {
5253                pop @{$self->{open_elements}};                pop @{$self->{open_elements}};
5254                !!!ack ('t262.1');                !!!ack ('t262.1');
5255                !!!next-token;                !!!next-token;
5256                redo B;                next B;
5257              } else {              } else {
5258                !!!cp ('t263');                !!!cp ('t263');
5259                #                #
# Line 5167  sub _tree_construction_main ($) { Line 5265  sub _tree_construction_main ($) {
5265                  !!!parse-error (type => 'unmatched end tag:colgroup', token => $token);                  !!!parse-error (type => 'unmatched end tag:colgroup', token => $token);
5266                  ## Ignore the token                  ## Ignore the token
5267                  !!!next-token;                  !!!next-token;
5268                  redo B;                  next B;
5269                } else {                } else {
5270                  !!!cp ('t265');                  !!!cp ('t265');
5271                  pop @{$self->{open_elements}}; # colgroup                  pop @{$self->{open_elements}}; # colgroup
5272                  $self->{insertion_mode} = IN_TABLE_IM;                  $self->{insertion_mode} = IN_TABLE_IM;
5273                  !!!next-token;                  !!!next-token;
5274                  redo B;                              next B;            
5275                }                }
5276              } elsif ($token->{tag_name} eq 'col') {              } elsif ($token->{tag_name} eq 'col') {
5277                !!!cp ('t266');                !!!cp ('t266');
5278                !!!parse-error (type => 'unmatched end tag:col', token => $token);                !!!parse-error (type => 'unmatched end tag:col', token => $token);
5279                ## Ignore the token                ## Ignore the token
5280                !!!next-token;                !!!next-token;
5281                redo B;                next B;
5282              } else {              } else {
5283                !!!cp ('t267');                !!!cp ('t267');
5284                #                #
# Line 5197  sub _tree_construction_main ($) { Line 5295  sub _tree_construction_main ($) {
5295            pop @{$self->{open_elements}}; # colgroup            pop @{$self->{open_elements}}; # colgroup
5296            $self->{insertion_mode} = IN_TABLE_IM;            $self->{insertion_mode} = IN_TABLE_IM;
5297            ## Reprocess.            ## Reprocess.
5298            redo B;            next B;
5299          }          }
5300        } else {        } else {
5301          die "$0: $token->{type}: Unknown token type";          die "$0: $token->{type}: Unknown token type";
# Line 5211  sub _tree_construction_main ($) { Line 5309  sub _tree_construction_main ($) {
5309              ## Ignore the token              ## Ignore the token
5310              !!!nack ('t269.1');              !!!nack ('t269.1');
5311              !!!next-token;              !!!next-token;
5312              redo B;              next B;
5313            } else {            } else {
5314              !!!cp ('t270');              !!!cp ('t270');
5315              pop @{$self->{open_elements}}; # colgroup              pop @{$self->{open_elements}}; # colgroup
5316              $self->{insertion_mode} = IN_TABLE_IM;              $self->{insertion_mode} = IN_TABLE_IM;
5317              !!!ack-later;              !!!ack-later;
5318              ## reprocess              ## reprocess
5319              redo B;              next B;
5320            }            }
5321      } elsif ($self->{insertion_mode} & SELECT_IMS) {      } elsif ($self->{insertion_mode} & SELECT_IMS) {
5322        if ($token->{type} == CHARACTER_TOKEN) {        if ($token->{type} == CHARACTER_TOKEN) {
5323          !!!cp ('t271');          !!!cp ('t271');
5324          $self->{open_elements}->[-1]->[0]->manakai_append_text ($token->{data});          $self->{open_elements}->[-1]->[0]->manakai_append_text ($token->{data});
5325          !!!next-token;          !!!next-token;
5326          redo B;          next B;
5327        } elsif ($token->{type} == START_TAG_TOKEN) {        } elsif ($token->{type} == START_TAG_TOKEN) {
5328          if ($token->{tag_name} eq 'option') {          if ($token->{tag_name} eq 'option') {
5329            if ($self->{open_elements}->[-1]->[1] & OPTION_EL) {            if ($self->{open_elements}->[-1]->[1] & OPTION_EL) {
# Line 5239  sub _tree_construction_main ($) { Line 5337  sub _tree_construction_main ($) {
5337            !!!insert-element ($token->{tag_name}, $token->{attributes}, $token);            !!!insert-element ($token->{tag_name}, $token->{attributes}, $token);
5338            !!!nack ('t273.1');            !!!nack ('t273.1');
5339            !!!next-token;            !!!next-token;
5340            redo B;            next B;
5341          } elsif ($token->{tag_name} eq 'optgroup') {          } elsif ($token->{tag_name} eq 'optgroup') {
5342            if ($self->{open_elements}->[-1]->[1] & OPTION_EL) {            if ($self->{open_elements}->[-1]->[1] & OPTION_EL) {
5343              !!!cp ('t274');              !!!cp ('t274');
# Line 5260  sub _tree_construction_main ($) { Line 5358  sub _tree_construction_main ($) {
5358            !!!insert-element ($token->{tag_name}, $token->{attributes}, $token);            !!!insert-element ($token->{tag_name}, $token->{attributes}, $token);
5359            !!!nack ('t277.1');            !!!nack ('t277.1');
5360            !!!next-token;            !!!next-token;
5361            redo B;            next B;
5362          } elsif ($token->{tag_name} eq 'select' or          } elsif ($token->{tag_name} eq 'select' or
5363                   $token->{tag_name} eq 'input' or                   $token->{tag_name} eq 'input' or
5364                   ($self->{insertion_mode} == IN_SELECT_IN_TABLE_IM and                   ($self->{insertion_mode} == IN_SELECT_IN_TABLE_IM and
# Line 5292  sub _tree_construction_main ($) { Line 5390  sub _tree_construction_main ($) {
5390              ## Ignore the token              ## Ignore the token
5391              !!!nack ('t280.1');              !!!nack ('t280.1');
5392              !!!next-token;              !!!next-token;
5393              redo B;              next B;
5394            }            }
5395                                
5396            !!!cp ('t281');            !!!cp ('t281');
# Line 5303  sub _tree_construction_main ($) { Line 5401  sub _tree_construction_main ($) {
5401            if ($token->{tag_name} eq 'select') {            if ($token->{tag_name} eq 'select') {
5402              !!!nack ('t281.2');              !!!nack ('t281.2');
5403              !!!next-token;              !!!next-token;
5404              redo B;              next B;
5405            } else {            } else {
5406              !!!cp ('t281.1');              !!!cp ('t281.1');
5407              !!!ack-later;              !!!ack-later;
5408              ## Reprocess the token.              ## Reprocess the token.
5409              redo B;              next B;
5410            }            }
5411          } else {          } else {
5412            !!!cp ('t282');            !!!cp ('t282');
# Line 5316  sub _tree_construction_main ($) { Line 5414  sub _tree_construction_main ($) {
5414            ## Ignore the token            ## Ignore the token
5415            !!!nack ('t282.1');            !!!nack ('t282.1');
5416            !!!next-token;            !!!next-token;
5417            redo B;            next B;
5418          }          }
5419        } elsif ($token->{type} == END_TAG_TOKEN) {        } elsif ($token->{type} == END_TAG_TOKEN) {
5420          if ($token->{tag_name} eq 'optgroup') {          if ($token->{tag_name} eq 'optgroup') {
# Line 5335  sub _tree_construction_main ($) { Line 5433  sub _tree_construction_main ($) {
5433            }            }
5434            !!!nack ('t285.1');            !!!nack ('t285.1');
5435            !!!next-token;            !!!next-token;
5436            redo B;            next B;
5437          } elsif ($token->{tag_name} eq 'option') {          } elsif ($token->{tag_name} eq 'option') {
5438            if ($self->{open_elements}->[-1]->[1] & OPTION_EL) {            if ($self->{open_elements}->[-1]->[1] & OPTION_EL) {
5439              !!!cp ('t286');              !!!cp ('t286');
# Line 5347  sub _tree_construction_main ($) { Line 5445  sub _tree_construction_main ($) {
5445            }            }
5446            !!!nack ('t287.1');            !!!nack ('t287.1');
5447            !!!next-token;            !!!next-token;
5448            redo B;            next B;
5449          } elsif ($token->{tag_name} eq 'select') {          } elsif ($token->{tag_name} eq 'select') {
5450            ## have an element in table scope            ## have an element in table scope
5451            my $i;            my $i;
# Line 5368  sub _tree_construction_main ($) { Line 5466  sub _tree_construction_main ($) {
5466              ## Ignore the token              ## Ignore the token
5467              !!!nack ('t290.1');              !!!nack ('t290.1');
5468              !!!next-token;              !!!next-token;
5469              redo B;              next B;
5470            }            }
5471                                
5472            !!!cp ('t291');            !!!cp ('t291');
# Line 5378  sub _tree_construction_main ($) { Line 5476  sub _tree_construction_main ($) {
5476    
5477            !!!nack ('t291.1');            !!!nack ('t291.1');
5478            !!!next-token;            !!!next-token;
5479            redo B;            next B;
5480          } elsif ($self->{insertion_mode} == IN_SELECT_IN_TABLE_IM and          } elsif ($self->{insertion_mode} == IN_SELECT_IN_TABLE_IM and
5481                   {                   {
5482                    caption => 1, table => 1, tbody => 1,                    caption => 1, table => 1, tbody => 1,
# Line 5405  sub _tree_construction_main ($) { Line 5503  sub _tree_construction_main ($) {
5503              ## Ignore the token              ## Ignore the token
5504              !!!nack ('t294.1');              !!!nack ('t294.1');
5505              !!!next-token;              !!!next-token;
5506              redo B;              next B;
5507            }            }
5508                                
5509            ## As if </select>            ## As if </select>
# Line 5430  sub _tree_construction_main ($) { Line 5528  sub _tree_construction_main ($) {
5528              ## Ignore the </select> token              ## Ignore the </select> token
5529              !!!nack ('t297.1');              !!!nack ('t297.1');
5530              !!!next-token; ## TODO: ok?              !!!next-token; ## TODO: ok?
5531              redo B;              next B;
5532            }            }
5533                                
5534            !!!cp ('t298');            !!!cp ('t298');
# Line 5440  sub _tree_construction_main ($) { Line 5538  sub _tree_construction_main ($) {
5538    
5539            !!!ack-later;            !!!ack-later;
5540            ## reprocess            ## reprocess
5541            redo B;            next B;
5542          } else {          } else {
5543            !!!cp ('t299');            !!!cp ('t299');
5544            !!!parse-error (type => 'in select:/'.$token->{tag_name}, token => $token);            !!!parse-error (type => 'in select:/'.$token->{tag_name}, token => $token);
5545            ## Ignore the token            ## Ignore the token
5546            !!!nack ('t299.3');            !!!nack ('t299.3');
5547            !!!next-token;            !!!next-token;
5548            redo B;            next B;
5549          }          }
5550        } elsif ($token->{type} == END_OF_FILE_TOKEN) {        } elsif ($token->{type} == END_OF_FILE_TOKEN) {
5551          unless ($self->{open_elements}->[-1]->[1] & HTML_EL and          unless ($self->{open_elements}->[-1]->[1] & HTML_EL and
# Line 5475  sub _tree_construction_main ($) { Line 5573  sub _tree_construction_main ($) {
5573            unless (length $token->{data}) {            unless (length $token->{data}) {
5574              !!!cp ('t300');              !!!cp ('t300');
5575              !!!next-token;              !!!next-token;
5576              redo B;              next B;
5577            }            }
5578          }          }
5579                    
# Line 5493  sub _tree_construction_main ($) { Line 5591  sub _tree_construction_main ($) {
5591    
5592          $self->{insertion_mode} = IN_BODY_IM;          $self->{insertion_mode} = IN_BODY_IM;
5593          ## reprocess          ## reprocess
5594          redo B;          next B;
5595        } elsif ($token->{type} == START_TAG_TOKEN) {        } elsif ($token->{type} == START_TAG_TOKEN) {
5596          if ($self->{insertion_mode} == AFTER_HTML_BODY_IM) {          if ($self->{insertion_mode} == AFTER_HTML_BODY_IM) {
5597            !!!cp ('t303');            !!!cp ('t303');
# Line 5510  sub _tree_construction_main ($) { Line 5608  sub _tree_construction_main ($) {
5608          $self->{insertion_mode} = IN_BODY_IM;          $self->{insertion_mode} = IN_BODY_IM;
5609          !!!ack-later;          !!!ack-later;
5610          ## reprocess          ## reprocess
5611          redo B;          next B;
5612        } elsif ($token->{type} == END_TAG_TOKEN) {        } elsif ($token->{type} == END_TAG_TOKEN) {
5613          if ($self->{insertion_mode} == AFTER_HTML_BODY_IM) {          if ($self->{insertion_mode} == AFTER_HTML_BODY_IM) {
5614            !!!cp ('t305');            !!!cp ('t305');
# Line 5529  sub _tree_construction_main ($) { Line 5627  sub _tree_construction_main ($) {
5627              !!!parse-error (type => 'unmatched end tag:html', token => $token);              !!!parse-error (type => 'unmatched end tag:html', token => $token);
5628              ## Ignore the token              ## Ignore the token
5629              !!!next-token;              !!!next-token;
5630              redo B;              next B;
5631            } else {            } else {
5632              !!!cp ('t308');              !!!cp ('t308');
5633              $self->{insertion_mode} = AFTER_HTML_BODY_IM;              $self->{insertion_mode} = AFTER_HTML_BODY_IM;
5634              !!!next-token;              !!!next-token;
5635              redo B;              next B;
5636            }            }
5637          } else {          } else {
5638            !!!cp ('t309');            !!!cp ('t309');
# Line 5542  sub _tree_construction_main ($) { Line 5640  sub _tree_construction_main ($) {
5640    
5641            $self->{insertion_mode} = IN_BODY_IM;            $self->{insertion_mode} = IN_BODY_IM;
5642            ## reprocess            ## reprocess
5643            redo B;            next B;
5644          }          }
5645        } elsif ($token->{type} == END_OF_FILE_TOKEN) {        } elsif ($token->{type} == END_OF_FILE_TOKEN) {
5646          !!!cp ('t309.2');          !!!cp ('t309.2');
# Line 5559  sub _tree_construction_main ($) { Line 5657  sub _tree_construction_main ($) {
5657            unless (length $token->{data}) {            unless (length $token->{data}) {
5658              !!!cp ('t310');              !!!cp ('t310');
5659              !!!next-token;              !!!next-token;
5660              redo B;              next B;
5661            }            }
5662          }          }
5663                    
# Line 5587  sub _tree_construction_main ($) { Line 5685  sub _tree_construction_main ($) {
5685              !!!cp ('t315');              !!!cp ('t315');
5686              !!!next-token;              !!!next-token;
5687            }            }
5688            redo B;            next B;
5689          }          }
5690                    
5691          die qq[$0: Character "$token->{data}"];          die qq[$0: Character "$token->{data}"];
# Line 5608  sub _tree_construction_main ($) { Line 5706  sub _tree_construction_main ($) {
5706            !!!insert-element ($token->{tag_name}, $token->{attributes}, $token);            !!!insert-element ($token->{tag_name}, $token->{attributes}, $token);
5707            !!!nack ('t318.1');            !!!nack ('t318.1');
5708            !!!next-token;            !!!next-token;
5709            redo B;            next B;
5710          } elsif ($token->{tag_name} eq 'frame' and          } elsif ($token->{tag_name} eq 'frame' and
5711                   $self->{insertion_mode} == IN_FRAMESET_IM) {                   $self->{insertion_mode} == IN_FRAMESET_IM) {
5712            !!!cp ('t319');            !!!cp ('t319');
# Line 5616  sub _tree_construction_main ($) { Line 5714  sub _tree_construction_main ($) {
5714            pop @{$self->{open_elements}};            pop @{$self->{open_elements}};
5715            !!!ack ('t319.1');            !!!ack ('t319.1');
5716            !!!next-token;            !!!next-token;
5717            redo B;            next B;
5718          } elsif ($token->{tag_name} eq 'noframes') {          } elsif ($token->{tag_name} eq 'noframes') {
5719            !!!cp ('t320');            !!!cp ('t320');
5720            ## NOTE: As if in body.            ## NOTE: As if in body.
5721            $parse_rcdata->(CDATA_CONTENT_MODEL);            $parse_rcdata->(CDATA_CONTENT_MODEL);
5722            redo B;            next B;
5723          } else {          } else {
5724            if ($self->{insertion_mode} == IN_FRAMESET_IM) {            if ($self->{insertion_mode} == IN_FRAMESET_IM) {
5725              !!!cp ('t321');              !!!cp ('t321');
# Line 5633  sub _tree_construction_main ($) { Line 5731  sub _tree_construction_main ($) {
5731            ## Ignore the token            ## Ignore the token
5732            !!!nack ('t322.1');            !!!nack ('t322.1');
5733            !!!next-token;            !!!next-token;
5734            redo B;            next B;
5735          }          }
5736        } elsif ($token->{type} == END_TAG_TOKEN) {        } elsif ($token->{type} == END_TAG_TOKEN) {
5737          if ($self->{insertion_mode} == AFTER_HTML_FRAMESET_IM) {          if ($self->{insertion_mode} == AFTER_HTML_FRAMESET_IM) {
# Line 5667  sub _tree_construction_main ($) { Line 5765  sub _tree_construction_main ($) {
5765            } else {            } else {
5766              !!!cp ('t328');              !!!cp ('t328');
5767            }            }
5768            redo B;            next B;
5769          } elsif ($token->{tag_name} eq 'html' and          } elsif ($token->{tag_name} eq 'html' and
5770                   $self->{insertion_mode} == AFTER_FRAMESET_IM) {                   $self->{insertion_mode} == AFTER_FRAMESET_IM) {
5771            !!!cp ('t329');            !!!cp ('t329');
5772            $self->{insertion_mode} = AFTER_HTML_FRAMESET_IM;            $self->{insertion_mode} = AFTER_HTML_FRAMESET_IM;
5773            !!!next-token;            !!!next-token;
5774            redo B;            next B;
5775          } else {          } else {
5776            if ($self->{insertion_mode} == IN_FRAMESET_IM) {            if ($self->{insertion_mode} == IN_FRAMESET_IM) {
5777              !!!cp ('t330');              !!!cp ('t330');
# Line 5684  sub _tree_construction_main ($) { Line 5782  sub _tree_construction_main ($) {
5782            }            }
5783            ## Ignore the token            ## Ignore the token
5784            !!!next-token;            !!!next-token;
5785            redo B;            next B;
5786          }          }
5787        } elsif ($token->{type} == END_OF_FILE_TOKEN) {        } elsif ($token->{type} == END_OF_FILE_TOKEN) {
5788          unless ($self->{open_elements}->[-1]->[1] & HTML_EL and          unless ($self->{open_elements}->[-1]->[1] & HTML_EL and
# Line 5712  sub _tree_construction_main ($) { Line 5810  sub _tree_construction_main ($) {
5810          !!!cp ('t332');          !!!cp ('t332');
5811          ## NOTE: This is an "as if in head" code clone          ## NOTE: This is an "as if in head" code clone
5812          $script_start_tag->();          $script_start_tag->();
5813          redo B;          next B;
5814        } elsif ($token->{tag_name} eq 'style') {        } elsif ($token->{tag_name} eq 'style') {
5815          !!!cp ('t333');          !!!cp ('t333');
5816          ## NOTE: This is an "as if in head" code clone          ## NOTE: This is an "as if in head" code clone
5817          $parse_rcdata->(CDATA_CONTENT_MODEL);          $parse_rcdata->(CDATA_CONTENT_MODEL);
5818          redo B;          next B;
5819        } elsif ({        } elsif ({
5820                  base => 1, link => 1,                  base => 1, link => 1,
5821                 }->{$token->{tag_name}}) {                 }->{$token->{tag_name}}) {
# Line 5727  sub _tree_construction_main ($) { Line 5825  sub _tree_construction_main ($) {
5825          pop @{$self->{open_elements}}; ## ISSUE: This step is missing in the spec.          pop @{$self->{open_elements}}; ## ISSUE: This step is missing in the spec.
5826          !!!ack ('t334.1');          !!!ack ('t334.1');
5827          !!!next-token;          !!!next-token;
5828          redo B;          next B;
5829        } elsif ($token->{tag_name} eq 'meta') {        } elsif ($token->{tag_name} eq 'meta') {
5830          ## NOTE: This is an "as if in head" code clone, only "-t" differs          ## NOTE: This is an "as if in head" code clone, only "-t" differs
5831          !!!insert-element-t ($token->{tag_name}, $token->{attributes}, $token);          !!!insert-element-t ($token->{tag_name}, $token->{attributes}, $token);
# Line 5778  sub _tree_construction_main ($) { Line 5876  sub _tree_construction_main ($) {
5876    
5877          !!!ack ('t338.1');          !!!ack ('t338.1');
5878          !!!next-token;          !!!next-token;
5879          redo B;          next B;
5880        } elsif ($token->{tag_name} eq 'title') {        } elsif ($token->{tag_name} eq 'title') {
5881          !!!cp ('t341');          !!!cp ('t341');
5882          ## NOTE: This is an "as if in head" code clone          ## NOTE: This is an "as if in head" code clone
5883          $parse_rcdata->(RCDATA_CONTENT_MODEL);          $parse_rcdata->(RCDATA_CONTENT_MODEL);
5884          redo B;          next B;
5885        } elsif ($token->{tag_name} eq 'body') {        } elsif ($token->{tag_name} eq 'body') {
5886          !!!parse-error (type => 'in body:body', token => $token);          !!!parse-error (type => 'in body:body', token => $token);
5887                                
# Line 5804  sub _tree_construction_main ($) { Line 5902  sub _tree_construction_main ($) {
5902          }          }
5903          !!!nack ('t343.1');          !!!nack ('t343.1');
5904          !!!next-token;          !!!next-token;
5905          redo B;          next B;
5906        } elsif ({        } elsif ({
5907                  address => 1, blockquote => 1, center => 1, dir => 1,                  address => 1, blockquote => 1, center => 1, dir => 1,
5908                  div => 1, dl => 1, fieldset => 1,                  div => 1, dl => 1, fieldset => 1,
# Line 5821  sub _tree_construction_main ($) { Line 5919  sub _tree_construction_main ($) {
5919            ## Ignore the token            ## Ignore the token
5920            !!!nack ('t350.1');            !!!nack ('t350.1');
5921            !!!next-token;            !!!next-token;
5922            redo B;            next B;
5923          }          }
5924    
5925          ## has a p element in scope          ## has a p element in scope
# Line 5831  sub _tree_construction_main ($) { Line 5929  sub _tree_construction_main ($) {
5929              !!!back-token; # <form>              !!!back-token; # <form>
5930              $token = {type => END_TAG_TOKEN, tag_name => 'p',              $token = {type => END_TAG_TOKEN, tag_name => 'p',
5931                        line => $token->{line}, column => $token->{column}};                        line => $token->{line}, column => $token->{column}};
5932              redo B;              next B;
5933            } elsif ($_->[1] & SCOPING_EL) {            } elsif ($_->[1] & SCOPING_EL) {
5934              !!!cp ('t345');              !!!cp ('t345');
5935              last INSCOPE;              last INSCOPE;
# Line 5877  sub _tree_construction_main ($) { Line 5975  sub _tree_construction_main ($) {
5975            !!!nack ('t347.1');            !!!nack ('t347.1');
5976            !!!next-token;            !!!next-token;
5977          }          }
5978          redo B;          next B;
5979        } elsif ({li => 1, dt => 1, dd => 1}->{$token->{tag_name}}) {        } elsif ({li => 1, dt => 1, dd => 1}->{$token->{tag_name}}) {
5980          ## has a p element in scope          ## has a p element in scope
5981          INSCOPE: for (reverse @{$self->{open_elements}}) {          INSCOPE: for (reverse @{$self->{open_elements}}) {
# Line 5886  sub _tree_construction_main ($) { Line 5984  sub _tree_construction_main ($) {
5984              !!!back-token; # <x>              !!!back-token; # <x>
5985              $token = {type => END_TAG_TOKEN, tag_name => 'p',              $token = {type => END_TAG_TOKEN, tag_name => 'p',
5986                        line => $token->{line}, column => $token->{column}};                        line => $token->{line}, column => $token->{column}};
5987              redo B;              next B;
5988            } elsif ($_->[1] & SCOPING_EL) {            } elsif ($_->[1] & SCOPING_EL) {
5989              !!!cp ('t354');              !!!cp ('t354');
5990              last INSCOPE;              last INSCOPE;
# Line 5938  sub _tree_construction_main ($) { Line 6036  sub _tree_construction_main ($) {
6036          !!!insert-element-t ($token->{tag_name}, $token->{attributes}, $token);          !!!insert-element-t ($token->{tag_name}, $token->{attributes}, $token);
6037          !!!nack ('t359.1');          !!!nack ('t359.1');
6038          !!!next-token;          !!!next-token;
6039          redo B;          next B;
6040        } elsif ($token->{tag_name} eq 'plaintext') {        } elsif ($token->{tag_name} eq 'plaintext') {
6041          ## has a p element in scope          ## has a p element in scope
6042          INSCOPE: for (reverse @{$self->{open_elements}}) {          INSCOPE: for (reverse @{$self->{open_elements}}) {
# Line 5947  sub _tree_construction_main ($) { Line 6045  sub _tree_construction_main ($) {
6045              !!!back-token; # <plaintext>              !!!back-token; # <plaintext>
6046              $token = {type => END_TAG_TOKEN, tag_name => 'p',              $token = {type => END_TAG_TOKEN, tag_name => 'p',
6047                        line => $token->{line}, column => $token->{column}};                        line => $token->{line}, column => $token->{column}};
6048              redo B;              next B;
6049            } elsif ($_->[1] & SCOPING_EL) {            } elsif ($_->[1] & SCOPING_EL) {
6050              !!!cp ('t368');              !!!cp ('t368');
6051              last INSCOPE;              last INSCOPE;
# Line 5960  sub _tree_construction_main ($) { Line 6058  sub _tree_construction_main ($) {
6058                        
6059          !!!nack ('t368.1');          !!!nack ('t368.1');
6060          !!!next-token;          !!!next-token;
6061          redo B;          next B;
6062        } elsif ($token->{tag_name} eq 'a') {        } elsif ($token->{tag_name} eq 'a') {
6063          AFE: for my $i (reverse 0..$#$active_formatting_elements) {          AFE: for my $i (reverse 0..$#$active_formatting_elements) {
6064            my $node = $active_formatting_elements->[$i];            my $node = $active_formatting_elements->[$i];
# Line 6001  sub _tree_construction_main ($) { Line 6099  sub _tree_construction_main ($) {
6099    
6100          !!!nack ('t374.1');          !!!nack ('t374.1');
6101          !!!next-token;          !!!next-token;
6102          redo B;          next B;
6103        } elsif ($token->{tag_name} eq 'nobr') {        } elsif ($token->{tag_name} eq 'nobr') {
6104          $reconstruct_active_formatting_elements->($insert_to_current);          $reconstruct_active_formatting_elements->($insert_to_current);
6105    
# Line 6014  sub _tree_construction_main ($) { Line 6112  sub _tree_construction_main ($) {
6112              !!!back-token; # <nobr>              !!!back-token; # <nobr>
6113              $token = {type => END_TAG_TOKEN, tag_name => 'nobr',              $token = {type => END_TAG_TOKEN, tag_name => 'nobr',
6114                        line => $token->{line}, column => $token->{column}};                        line => $token->{line}, column => $token->{column}};
6115              redo B;              next B;
6116            } elsif ($node->[1] & SCOPING_EL) {            } elsif ($node->[1] & SCOPING_EL) {
6117              !!!cp ('t377');              !!!cp ('t377');
6118              last INSCOPE;              last INSCOPE;
# Line 6026  sub _tree_construction_main ($) { Line 6124  sub _tree_construction_main ($) {
6124                    
6125          !!!nack ('t377.1');          !!!nack ('t377.1');
6126          !!!next-token;          !!!next-token;
6127          redo B;          next B;
6128        } elsif ($token->{tag_name} eq 'button') {        } elsif ($token->{tag_name} eq 'button') {
6129          ## has a button element in scope          ## has a button element in scope
6130          INSCOPE: for (reverse 0..$#{$self->{open_elements}}) {          INSCOPE: for (reverse 0..$#{$self->{open_elements}}) {
# Line 6037  sub _tree_construction_main ($) { Line 6135  sub _tree_construction_main ($) {
6135              !!!back-token; # <button>              !!!back-token; # <button>
6136              $token = {type => END_TAG_TOKEN, tag_name => 'button',              $token = {type => END_TAG_TOKEN, tag_name => 'button',
6137                        line => $token->{line}, column => $token->{column}};                        line => $token->{line}, column => $token->{column}};
6138              redo B;              next B;
6139            } elsif ($node->[1] & SCOPING_EL) {            } elsif ($node->[1] & SCOPING_EL) {
6140              !!!cp ('t379');              !!!cp ('t379');
6141              last INSCOPE;              last INSCOPE;
# Line 6054  sub _tree_construction_main ($) { Line 6152  sub _tree_construction_main ($) {
6152    
6153          !!!nack ('t379.1');          !!!nack ('t379.1');
6154          !!!next-token;          !!!next-token;
6155          redo B;          next B;
6156        } elsif ({        } elsif ({
6157                  xmp => 1,                  xmp => 1,
6158                  iframe => 1,                  iframe => 1,
# Line 6070  sub _tree_construction_main ($) { Line 6168  sub _tree_construction_main ($) {
6168          }          }
6169          ## NOTE: There is an "as if in body" code clone.          ## NOTE: There is an "as if in body" code clone.
6170          $parse_rcdata->(CDATA_CONTENT_MODEL);          $parse_rcdata->(CDATA_CONTENT_MODEL);
6171          redo B;          next B;
6172        } elsif ($token->{tag_name} eq 'isindex') {        } elsif ($token->{tag_name} eq 'isindex') {
6173          !!!parse-error (type => 'isindex', token => $token);          !!!parse-error (type => 'isindex', token => $token);
6174                    
# Line 6079  sub _tree_construction_main ($) { Line 6177  sub _tree_construction_main ($) {
6177            ## Ignore the token            ## Ignore the token
6178            !!!nack ('t389'); ## NOTE: Not acknowledged.            !!!nack ('t389'); ## NOTE: Not acknowledged.
6179            !!!next-token;            !!!next-token;
6180            redo B;            next B;
6181          } else {          } else {
6182            my $at = $token->{attributes};            my $at = $token->{attributes};
6183            my $form_attrs;            my $form_attrs;
# Line 6127  sub _tree_construction_main ($) { Line 6225  sub _tree_construction_main ($) {
6225            !!!nack ('t391.1'); ## NOTE: Not acknowledged.            !!!nack ('t391.1'); ## NOTE: Not acknowledged.
6226            !!!back-token (@tokens);            !!!back-token (@tokens);
6227            !!!next-token;            !!!next-token;
6228            redo B;            next B;
6229          }          }
6230        } elsif ($token->{tag_name} eq 'textarea') {        } elsif ($token->{tag_name} eq 'textarea') {
6231          my $tag_name = $token->{tag_name};          my $tag_name = $token->{tag_name};
6232          my $el;          my $el;
6233          !!!create-element ($el, $token->{tag_name}, $token->{attributes}, $token);          !!!create-element ($el, $HTML_NS, $token->{tag_name}, $token->{attributes}, $token);
6234                    
6235          ## TODO: $self->{form_element} if defined          ## TODO: $self->{form_element} if defined
6236          $self->{content_model} = RCDATA_CONTENT_MODEL;          $self->{content_model} = RCDATA_CONTENT_MODEL;
# Line 6175  sub _tree_construction_main ($) { Line 6273  sub _tree_construction_main ($) {
6273            !!!parse-error (type => 'in RCDATA:#'.$token->{type}, token => $token);            !!!parse-error (type => 'in RCDATA:#'.$token->{type}, token => $token);
6274          }          }
6275          !!!next-token;          !!!next-token;
6276          redo B;          next B;
6277          } elsif ($token->{tag_name} eq 'math' or
6278                   $token->{tag_name} eq 'svg') {
6279            $reconstruct_active_formatting_elements->($insert_to_current);
6280            
6281            !!!insert-element-f ($token->{tag_name} eq 'math' ? $MML_NS : $SVG_NS, $token);
6282            
6283            if ($self->{self_closing}) {
6284              pop @{$self->{open_elements}};
6285              !!!ack ('t398.1');
6286            } else {
6287              !!!cp ('t398.2');
6288              $self->{insertion_mode} |= IN_FOREIGN_CONTENT_IM;
6289              ## NOTE: |<body><math><mi><svg>| -> "in foreign content" insertion
6290              ## mode, "in body" (not "in foreign content") secondary insertion
6291              ## mode, maybe.
6292            }
6293    
6294            !!!next-token;
6295            next B;
6296        } elsif ({        } elsif ({
6297                  caption => 1, col => 1, colgroup => 1, frame => 1,                  caption => 1, col => 1, colgroup => 1, frame => 1,
6298                  frameset => 1, head => 1, option => 1, optgroup => 1,                  frameset => 1, head => 1, option => 1, optgroup => 1,
# Line 6187  sub _tree_construction_main ($) { Line 6304  sub _tree_construction_main ($) {
6304          ## Ignore the token          ## Ignore the token
6305          !!!nack ('t401.1'); ## NOTE: |<col/>| or |<frame/>| here is an error.          !!!nack ('t401.1'); ## NOTE: |<col/>| or |<frame/>| here is an error.
6306          !!!next-token;          !!!next-token;
6307          redo B;          next B;
6308                    
6309          ## ISSUE: An issue on HTML5 new elements in the spec.          ## ISSUE: An issue on HTML5 new elements in the spec.
6310        } else {        } else {
# Line 6249  sub _tree_construction_main ($) { Line 6366  sub _tree_construction_main ($) {
6366          }          }
6367                    
6368          !!!next-token;          !!!next-token;
6369          redo B;          next B;
6370        }        }
6371      } elsif ($token->{type} == END_TAG_TOKEN) {      } elsif ($token->{type} == END_TAG_TOKEN) {
6372        if ($token->{tag_name} eq 'body') {        if ($token->{tag_name} eq 'body') {
# Line 6271  sub _tree_construction_main ($) { Line 6388  sub _tree_construction_main ($) {
6388                            value => $token->{tag_name}, token => $token);                            value => $token->{tag_name}, token => $token);
6389            ## NOTE: Ignore the token.            ## NOTE: Ignore the token.
6390            !!!next-token;            !!!next-token;
6391            redo B;            next B;
6392          } # INSCOPE          } # INSCOPE
6393    
6394          for (@{$self->{open_elements}}) {          for (@{$self->{open_elements}}) {
# Line 6288  sub _tree_construction_main ($) { Line 6405  sub _tree_construction_main ($) {
6405    
6406          $self->{insertion_mode} = AFTER_BODY_IM;          $self->{insertion_mode} = AFTER_BODY_IM;
6407          !!!next-token;          !!!next-token;
6408          redo B;          next B;
6409        } elsif ($token->{tag_name} eq 'html') {        } elsif ($token->{tag_name} eq 'html') {
6410          ## TODO: Update this code.  It seems that the code below is not          ## TODO: Update this code.  It seems that the code below is not
6411          ## up-to-date, though it has same effect as speced.          ## up-to-date, though it has same effect as speced.
# Line 6306  sub _tree_construction_main ($) { Line 6423  sub _tree_construction_main ($) {
6423            }            }
6424            $self->{insertion_mode} = AFTER_BODY_IM;            $self->{insertion_mode} = AFTER_BODY_IM;
6425            ## reprocess            ## reprocess
6426            redo B;            next B;
6427          } else {          } else {
6428            !!!cp ('t408');            !!!cp ('t408');
6429            !!!parse-error (type => 'unmatched end tag:'.$token->{tag_name}, token => $token);            !!!parse-error (type => 'unmatched end tag:'.$token->{tag_name}, token => $token);
6430            ## Ignore the token            ## Ignore the token
6431            !!!next-token;            !!!next-token;
6432            redo B;            next B;
6433          }          }
6434        } elsif ({        } elsif ({
6435                  address => 1, blockquote => 1, center => 1, dir => 1,                  address => 1, blockquote => 1, center => 1, dir => 1,
# Line 6372  sub _tree_construction_main ($) { Line 6489  sub _tree_construction_main ($) {
6489                }->{$token->{tag_name}};                }->{$token->{tag_name}};
6490          }          }
6491          !!!next-token;          !!!next-token;
6492          redo B;          next B;
6493        } elsif ($token->{tag_name} eq 'form') {        } elsif ($token->{tag_name} eq 'form') {
6494          undef $self->{form_element};          undef $self->{form_element};
6495    
# Line 6417  sub _tree_construction_main ($) { Line 6534  sub _tree_construction_main ($) {
6534          }          }
6535    
6536          !!!next-token;          !!!next-token;
6537          redo B;          next B;
6538        } elsif ({        } elsif ({
6539                  h1 => 1, h2 => 1, h3 => 1, h4 => 1, h5 => 1, h6 => 1,                  h1 => 1, h2 => 1, h3 => 1, h4 => 1, h5 => 1, h6 => 1,
6540                 }->{$token->{tag_name}}) {                 }->{$token->{tag_name}}) {
# Line 6459  sub _tree_construction_main ($) { Line 6576  sub _tree_construction_main ($) {
6576          }          }
6577                    
6578          !!!next-token;          !!!next-token;
6579          redo B;          next B;
6580        } elsif ($token->{tag_name} eq 'p') {        } elsif ($token->{tag_name} eq 'p') {
6581          ## has an element in scope          ## has an element in scope
6582          my $i;          my $i;
# Line 6495  sub _tree_construction_main ($) { Line 6612  sub _tree_construction_main ($) {
6612            !!!cp ('t415.1');            !!!cp ('t415.1');
6613            ## As if <p>, then reprocess the current token            ## As if <p>, then reprocess the current token
6614            my $el;            my $el;
6615            !!!create-element ($el, 'p',, $token);            !!!create-element ($el, $HTML_NS, 'p',, $token);
6616            $insert->($el);            $insert->($el);
6617            ## NOTE: Not inserted into |$self->{open_elements}|.            ## NOTE: Not inserted into |$self->{open_elements}|.
6618          }          }
6619    
6620          !!!next-token;          !!!next-token;
6621          redo B;          next B;
6622        } elsif ({        } elsif ({
6623                  a => 1,                  a => 1,
6624                  b => 1, big => 1, em => 1, font => 1, i => 1,                  b => 1, big => 1, em => 1, font => 1, i => 1,
# Line 6510  sub _tree_construction_main ($) { Line 6627  sub _tree_construction_main ($) {
6627                 }->{$token->{tag_name}}) {                 }->{$token->{tag_name}}) {
6628          !!!cp ('t427');          !!!cp ('t427');
6629          $formatting_end_tag->($token);          $formatting_end_tag->($token);
6630          redo B;          next B;
6631        } elsif ($token->{tag_name} eq 'br') {        } elsif ($token->{tag_name} eq 'br') {
6632          !!!cp ('t428');          !!!cp ('t428');
6633          !!!parse-error (type => 'unmatched end tag:br', token => $token);          !!!parse-error (type => 'unmatched end tag:br', token => $token);
# Line 6519  sub _tree_construction_main ($) { Line 6636  sub _tree_construction_main ($) {
6636          $reconstruct_active_formatting_elements->($insert_to_current);          $reconstruct_active_formatting_elements->($insert_to_current);
6637                    
6638          my $el;          my $el;
6639          !!!create-element ($el, 'br',, $token);          !!!create-element ($el, $HTML_NS, 'br',, $token);
6640          $insert->($el);          $insert->($el);
6641                    
6642          ## Ignore the token.          ## Ignore the token.
6643          !!!next-token;          !!!next-token;
6644          redo B;          next B;
6645        } elsif ({        } elsif ({
6646                  caption => 1, col => 1, colgroup => 1, frame => 1,                  caption => 1, col => 1, colgroup => 1, frame => 1,
6647                  frameset => 1, head => 1, option => 1, optgroup => 1,                  frameset => 1, head => 1, option => 1, optgroup => 1,
# Line 6541  sub _tree_construction_main ($) { Line 6658  sub _tree_construction_main ($) {
6658          !!!parse-error (type => 'unmatched end tag:'.$token->{tag_name}, token => $token);          !!!parse-error (type => 'unmatched end tag:'.$token->{tag_name}, token => $token);
6659          ## Ignore the token          ## Ignore the token
6660          !!!next-token;          !!!next-token;
6661          redo B;          next B;
6662                    
6663          ## ISSUE: Issue on HTML5 new elements in spec          ## ISSUE: Issue on HTML5 new elements in spec
6664                    
# Line 6602  sub _tree_construction_main ($) { Line 6719  sub _tree_construction_main ($) {
6719            ## Step 5;            ## Step 5;
6720            redo S2;            redo S2;
6721          } # S2          } # S2
6722          redo B;          next B;
6723        }        }
6724      }      }
6725      redo B;      next B;
6726      } continue { # B
6727        if ($self->{insertion_mode} & IN_FOREIGN_CONTENT_IM) {
6728          ## NOTE: The code below is executed in cases where it does not have
6729          ## to be, but it it is harmless even in those cases.
6730          ## has an element in scope
6731          INSCOPE: {
6732            for (reverse 0..$#{$self->{open_elements}}) {
6733              my $node = $self->{open_elements}->[$_];
6734              if ($node->[1] & FOREIGN_EL) {
6735                last INSCOPE;
6736              } elsif ($node->[1] & SCOPING_EL) {
6737                last;
6738              }
6739            }
6740            
6741            ## NOTE: No foreign element in scope.
6742            $self->{insertion_mode} &= ~ IN_FOREIGN_CONTENT_IM;
6743          } # INSCOPE
6744        }
6745    } # B    } # B
6746    
6747    ## Stop parsing # MUST    ## Stop parsing # MUST

Legend:
Removed from v.1.125  
changed lines
  Added in v.1.126

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24