| 141 |
address => ADDRESS_EL, |
address => ADDRESS_EL, |
| 142 |
applet => MISC_SCOPING_EL, |
applet => MISC_SCOPING_EL, |
| 143 |
area => MISC_SPECIAL_EL, |
area => MISC_SPECIAL_EL, |
| 144 |
|
article => MISC_SPECIAL_EL, |
| 145 |
|
aside => MISC_SPECIAL_EL, |
| 146 |
b => FORMATTING_EL, |
b => FORMATTING_EL, |
| 147 |
base => MISC_SPECIAL_EL, |
base => MISC_SPECIAL_EL, |
| 148 |
basefont => MISC_SPECIAL_EL, |
basefont => MISC_SPECIAL_EL, |
| 156 |
center => MISC_SPECIAL_EL, |
center => MISC_SPECIAL_EL, |
| 157 |
col => MISC_SPECIAL_EL, |
col => MISC_SPECIAL_EL, |
| 158 |
colgroup => MISC_SPECIAL_EL, |
colgroup => MISC_SPECIAL_EL, |
| 159 |
|
command => MISC_SPECIAL_EL, |
| 160 |
|
datagrid => MISC_SPECIAL_EL, |
| 161 |
dd => DD_EL, |
dd => DD_EL, |
| 162 |
|
details => MISC_SPECIAL_EL, |
| 163 |
|
dialog => MISC_SPECIAL_EL, |
| 164 |
dir => MISC_SPECIAL_EL, |
dir => MISC_SPECIAL_EL, |
| 165 |
div => DIV_EL, |
div => DIV_EL, |
| 166 |
dl => MISC_SPECIAL_EL, |
dl => MISC_SPECIAL_EL, |
| 167 |
dt => DT_EL, |
dt => DT_EL, |
| 168 |
em => FORMATTING_EL, |
em => FORMATTING_EL, |
| 169 |
embed => MISC_SPECIAL_EL, |
embed => MISC_SPECIAL_EL, |
| 170 |
|
eventsource => MISC_SPECIAL_EL, |
| 171 |
fieldset => MISC_SPECIAL_EL, |
fieldset => MISC_SPECIAL_EL, |
| 172 |
|
figure => MISC_SPECIAL_EL, |
| 173 |
font => FORMATTING_EL, |
font => FORMATTING_EL, |
| 174 |
|
footer => MISC_SPECIAL_EL, |
| 175 |
form => FORM_EL, |
form => FORM_EL, |
| 176 |
frame => MISC_SPECIAL_EL, |
frame => MISC_SPECIAL_EL, |
| 177 |
frameset => FRAMESET_EL, |
frameset => FRAMESET_EL, |
| 182 |
h5 => HEADING_EL, |
h5 => HEADING_EL, |
| 183 |
h6 => HEADING_EL, |
h6 => HEADING_EL, |
| 184 |
head => MISC_SPECIAL_EL, |
head => MISC_SPECIAL_EL, |
| 185 |
|
header => MISC_SPECIAL_EL, |
| 186 |
hr => MISC_SPECIAL_EL, |
hr => MISC_SPECIAL_EL, |
| 187 |
html => HTML_EL, |
html => HTML_EL, |
| 188 |
i => FORMATTING_EL, |
i => FORMATTING_EL, |
| 189 |
iframe => MISC_SPECIAL_EL, |
iframe => MISC_SPECIAL_EL, |
| 190 |
img => MISC_SPECIAL_EL, |
img => MISC_SPECIAL_EL, |
| 191 |
|
#image => MISC_SPECIAL_EL, ## NOTE: Commented out in the spec. |
| 192 |
input => MISC_SPECIAL_EL, |
input => MISC_SPECIAL_EL, |
| 193 |
isindex => MISC_SPECIAL_EL, |
isindex => MISC_SPECIAL_EL, |
| 194 |
li => LI_EL, |
li => LI_EL, |
| 197 |
marquee => MISC_SCOPING_EL, |
marquee => MISC_SCOPING_EL, |
| 198 |
menu => MISC_SPECIAL_EL, |
menu => MISC_SPECIAL_EL, |
| 199 |
meta => MISC_SPECIAL_EL, |
meta => MISC_SPECIAL_EL, |
| 200 |
|
nav => MISC_SPECIAL_EL, |
| 201 |
nobr => NOBR_EL | FORMATTING_EL, |
nobr => NOBR_EL | FORMATTING_EL, |
| 202 |
noembed => MISC_SPECIAL_EL, |
noembed => MISC_SPECIAL_EL, |
| 203 |
noframes => MISC_SPECIAL_EL, |
noframes => MISC_SPECIAL_EL, |
| 216 |
s => FORMATTING_EL, |
s => FORMATTING_EL, |
| 217 |
script => MISC_SPECIAL_EL, |
script => MISC_SPECIAL_EL, |
| 218 |
select => SELECT_EL, |
select => SELECT_EL, |
| 219 |
|
section => MISC_SPECIAL_EL, |
| 220 |
small => FORMATTING_EL, |
small => FORMATTING_EL, |
| 221 |
spacer => MISC_SPECIAL_EL, |
spacer => MISC_SPECIAL_EL, |
| 222 |
strike => FORMATTING_EL, |
strike => FORMATTING_EL, |
| 336 |
|
|
| 337 |
## ISSUE: xmlns:xlink="non-xlink-ns" is not an error. |
## ISSUE: xmlns:xlink="non-xlink-ns" is not an error. |
| 338 |
|
|
| 339 |
my $c1_entity_char = { |
my $charref_map = { |
| 340 |
|
0x0D => 0x000A, |
| 341 |
0x80 => 0x20AC, |
0x80 => 0x20AC, |
| 342 |
0x81 => 0xFFFD, |
0x81 => 0xFFFD, |
| 343 |
0x82 => 0x201A, |
0x82 => 0x201A, |
| 370 |
0x9D => 0xFFFD, |
0x9D => 0xFFFD, |
| 371 |
0x9E => 0x017E, |
0x9E => 0x017E, |
| 372 |
0x9F => 0x0178, |
0x9F => 0x0178, |
| 373 |
}; # $c1_entity_char |
}; # $charref_map |
| 374 |
|
$charref_map->{$_} = 0xFFFD |
| 375 |
|
for 0x0000..0x0008, 0x000B, 0x000E..0x001F, 0x007F, |
| 376 |
|
0xD800..0xDFFF, 0xFDD0..0xFDDF, ## ISSUE: 0xFDEF |
| 377 |
|
0xFFFE, 0xFFFF, 0x1FFFE, 0x1FFFF, 0x2FFFE, 0x2FFFF, 0x3FFFE, 0x3FFFF, |
| 378 |
|
0x4FFFE, 0x4FFFF, 0x5FFFE, 0x5FFFF, 0x6FFFE, 0x6FFFF, 0x7FFFE, |
| 379 |
|
0x7FFFF, 0x8FFFE, 0x8FFFF, 0x9FFFE, 0x9FFFF, 0xAFFFE, 0xAFFFF, |
| 380 |
|
0xBFFFE, 0xBFFFF, 0xCFFFE, 0xCFFFF, 0xDFFFE, 0xDFFFF, 0xEFFFE, |
| 381 |
|
0xEFFFF, 0xFFFFE, 0xFFFFF, 0x10FFFE, 0x10FFFF; |
| 382 |
|
|
| 383 |
|
## TODO: Invoke the reset algorithm when a resettable element is |
| 384 |
|
## created (cf. HTML5 revision 2259). |
| 385 |
|
|
| 386 |
sub parse_byte_string ($$$$;$) { |
sub parse_byte_string ($$$$;$) { |
| 387 |
my $self = shift; |
my $self = shift; |
| 3199 |
my $code = $self->{s_kwd}; |
my $code = $self->{s_kwd}; |
| 3200 |
my $l = $self->{line_prev}; |
my $l = $self->{line_prev}; |
| 3201 |
my $c = $self->{column_prev}; |
my $c = $self->{column_prev}; |
| 3202 |
if ($code == 0 or (0xD800 <= $code and $code <= 0xDFFF)) { |
if ($charref_map->{$code}) { |
| 3203 |
!!!cp (1015); |
!!!cp (1015); |
| 3204 |
!!!parse-error (type => 'invalid character reference', |
!!!parse-error (type => 'invalid character reference', |
| 3205 |
text => (sprintf 'U+%04X', $code), |
text => (sprintf 'U+%04X', $code), |
| 3206 |
line => $l, column => $c); |
line => $l, column => $c); |
| 3207 |
$code = 0xFFFD; |
$code = $charref_map->{$code}; |
| 3208 |
} elsif ($code > 0x10FFFF) { |
} elsif ($code > 0x10FFFF) { |
| 3209 |
!!!cp (1016); |
!!!cp (1016); |
| 3210 |
!!!parse-error (type => 'invalid character reference', |
!!!parse-error (type => 'invalid character reference', |
| 3211 |
text => (sprintf 'U-%08X', $code), |
text => (sprintf 'U-%08X', $code), |
| 3212 |
line => $l, column => $c); |
line => $l, column => $c); |
| 3213 |
$code = 0xFFFD; |
$code = 0xFFFD; |
|
} elsif ($code == 0x000D) { |
|
|
!!!cp (1017); |
|
|
!!!parse-error (type => 'CR character reference', |
|
|
line => $l, column => $c); |
|
|
$code = 0x000A; |
|
|
} elsif (0x80 <= $code and $code <= 0x9F) { |
|
|
!!!cp (1018); |
|
|
!!!parse-error (type => 'C1 character reference', |
|
|
text => (sprintf 'U+%04X', $code), |
|
|
line => $l, column => $c); |
|
|
$code = $c1_entity_char->{$code}; |
|
| 3214 |
} |
} |
| 3215 |
|
|
| 3216 |
if ($self->{prev_state} == DATA_STATE) { |
if ($self->{prev_state} == DATA_STATE) { |
| 3307 |
my $code = $self->{s_kwd}; |
my $code = $self->{s_kwd}; |
| 3308 |
my $l = $self->{line_prev}; |
my $l = $self->{line_prev}; |
| 3309 |
my $c = $self->{column_prev}; |
my $c = $self->{column_prev}; |
| 3310 |
if ($code == 0 or (0xD800 <= $code and $code <= 0xDFFF)) { |
if ($charref_map->{$code}) { |
| 3311 |
!!!cp (1008); |
!!!cp (1008); |
| 3312 |
!!!parse-error (type => 'invalid character reference', |
!!!parse-error (type => 'invalid character reference', |
| 3313 |
text => (sprintf 'U+%04X', $code), |
text => (sprintf 'U+%04X', $code), |
| 3314 |
line => $l, column => $c); |
line => $l, column => $c); |
| 3315 |
$code = 0xFFFD; |
$code = $charref_map->{$code}; |
| 3316 |
} elsif ($code > 0x10FFFF) { |
} elsif ($code > 0x10FFFF) { |
| 3317 |
!!!cp (1009); |
!!!cp (1009); |
| 3318 |
!!!parse-error (type => 'invalid character reference', |
!!!parse-error (type => 'invalid character reference', |
| 3319 |
text => (sprintf 'U-%08X', $code), |
text => (sprintf 'U-%08X', $code), |
| 3320 |
line => $l, column => $c); |
line => $l, column => $c); |
| 3321 |
$code = 0xFFFD; |
$code = 0xFFFD; |
|
} elsif ($code == 0x000D) { |
|
|
!!!cp (1010); |
|
|
!!!parse-error (type => 'CR character reference', line => $l, column => $c); |
|
|
$code = 0x000A; |
|
|
} elsif (0x80 <= $code and $code <= 0x9F) { |
|
|
!!!cp (1011); |
|
|
!!!parse-error (type => 'C1 character reference', text => (sprintf 'U+%04X', $code), line => $l, column => $c); |
|
|
$code = $c1_entity_char->{$code}; |
|
| 3322 |
} |
} |
| 3323 |
|
|
| 3324 |
if ($self->{prev_state} == DATA_STATE) { |
if ($self->{prev_state} == DATA_STATE) { |
| 6973 |
last INSCOPE; |
last INSCOPE; |
| 6974 |
} |
} |
| 6975 |
} # INSCOPE |
} # INSCOPE |
| 6976 |
|
|
| 6977 |
|
## NOTE: Special, Scope (<li><foo><li> == <li><foo><li/></foo></li>) |
| 6978 |
|
## Interpreted as <li><foo/></li><li/> (non-conforming) |
| 6979 |
|
## blockquote (O9.27), center (O), dd (Fx3, O, S3.1.2, IE7), |
| 6980 |
|
## dt (Fx, O, S, IE), dl (O), fieldset (O, S, IE), form (Fx, O, S), |
| 6981 |
|
## hn (O), pre (O), applet (O, S), button (O, S), marquee (Fx, O, S), |
| 6982 |
|
## object (Fx) |
| 6983 |
|
## Generate non-tree (non-conforming) |
| 6984 |
|
## basefont (IE7 (where basefont is non-void)), center (IE), |
| 6985 |
|
## form (IE), hn (IE) |
| 6986 |
|
## address, div, p (<li><foo><li> == <li><foo/></li><li/>) |
| 6987 |
|
## Interpreted as <li><foo><li/></foo></li> (non-conforming) |
| 6988 |
|
## div (Fx, S) |
| 6989 |
|
|
| 6990 |
## Step 1 |
## Step 1 |
| 6991 |
my $i = -1; |
my $i = -1; |
| 7366 |
!!!nack ('t380.1'); |
!!!nack ('t380.1'); |
| 7367 |
} elsif ({ |
} elsif ({ |
| 7368 |
b => 1, big => 1, em => 1, font => 1, i => 1, |
b => 1, big => 1, em => 1, font => 1, i => 1, |
| 7369 |
s => 1, small => 1, strile => 1, |
s => 1, small => 1, strike => 1, |
| 7370 |
strong => 1, tt => 1, u => 1, |
strong => 1, tt => 1, u => 1, |
| 7371 |
}->{$token->{tag_name}}) { |
}->{$token->{tag_name}}) { |
| 7372 |
!!!cp ('t375'); |
!!!cp ('t375'); |
| 7671 |
} elsif ({ |
} elsif ({ |
| 7672 |
a => 1, |
a => 1, |
| 7673 |
b => 1, big => 1, em => 1, font => 1, i => 1, |
b => 1, big => 1, em => 1, font => 1, i => 1, |
| 7674 |
nobr => 1, s => 1, small => 1, strile => 1, |
nobr => 1, s => 1, small => 1, strike => 1, |
| 7675 |
strong => 1, tt => 1, u => 1, |
strong => 1, tt => 1, u => 1, |
| 7676 |
}->{$token->{tag_name}}) { |
}->{$token->{tag_name}}) { |
| 7677 |
!!!cp ('t427'); |
!!!cp ('t427'); |
| 7762 |
## Ignore the token |
## Ignore the token |
| 7763 |
!!!next-token; |
!!!next-token; |
| 7764 |
last S2; |
last S2; |
|
} |
|
| 7765 |
|
|
| 7766 |
|
## NOTE: |<span><dd></span>a|: In Safari 3.1.2 and Opera |
| 7767 |
|
## 9.27, "a" is a child of <dd> (conforming). In |
| 7768 |
|
## Firefox 3.0.2, "a" is a child of <body>. In WinIE 7, |
| 7769 |
|
## "a" is a child of both <body> and <dd>. |
| 7770 |
|
} |
| 7771 |
|
|
| 7772 |
!!!cp ('t434'); |
!!!cp ('t434'); |
| 7773 |
} |
} |
| 7774 |
|
|