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