| 5 |
require Whatpm::CSS::MediaQueryParser; |
require Whatpm::CSS::MediaQueryParser; |
| 6 |
|
|
| 7 |
sub new ($) { |
sub new ($) { |
| 8 |
my $self = bless {must_level => 'm', |
my $self = bless { |
| 9 |
message_level => 'w', |
level => { |
| 10 |
unsupported_level => 'u', |
must => 'm', |
| 11 |
lookup_namespace_uri => sub { undef }}, shift; |
uncertain => 'u', |
| 12 |
|
}, |
| 13 |
|
lookup_namespace_uri => sub { undef }, |
| 14 |
|
}, shift; |
| 15 |
# $self->{base_uri} |
# $self->{base_uri} |
| 16 |
# $self->{unitless_px} = 1/0 |
# $self->{unitless_px} = 1/0 |
| 17 |
# $self->{hashless_rgb} = 1/0 |
# $self->{hashless_rgb} = 1/0 |
| 110 |
|
|
| 111 |
my $sp = Whatpm::CSS::SelectorsParser->new; |
my $sp = Whatpm::CSS::SelectorsParser->new; |
| 112 |
$sp->{onerror} = $self->{onerror}; |
$sp->{onerror} = $self->{onerror}; |
| 113 |
|
$sp->{level} = $self->{level}; |
| 114 |
$sp->{must_level} = $self->{must_level}; |
$sp->{must_level} = $self->{must_level}; |
| 115 |
$sp->{pseudo_element} = $self->{pseudo_element}; |
$sp->{pseudo_element} = $self->{pseudo_element}; |
| 116 |
$sp->{pseudo_class} = $self->{pseudo_class}; |
$sp->{pseudo_class} = $self->{pseudo_class}; |
| 117 |
|
|
| 118 |
my $mp = Whatpm::CSS::MediaQueryParser->new; |
my $mp = Whatpm::CSS::MediaQueryParser->new; |
| 119 |
$mp->{onerror} = $self->{onerror}; |
$mp->{onerror} = $self->{onerror}; |
| 120 |
|
$mp->{level} = $self->{level}; |
| 121 |
$mp->{must_level} = $self->{must_level}; |
$mp->{must_level} = $self->{must_level}; |
| 122 |
$mp->{unsupported_level} = $self->{unsupported_level}; |
$mp->{unsupported_level} = $self->{unsupported_level}; |
| 123 |
|
|
| 217 |
undef $charset_allowed; |
undef $charset_allowed; |
| 218 |
undef $import_allowed; |
undef $import_allowed; |
| 219 |
} else { |
} else { |
| 220 |
$onerror->(type => 'at-rule not allowed:namespace', |
$onerror->(type => 'at-rule not allowed', |
| 221 |
level => $self->{must_level}, |
text => 'namespace', |
| 222 |
|
level => $self->{level}->{must}, |
| 223 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 224 |
token => $t); |
token => $t); |
| 225 |
} |
} |
| 234 |
# |
# |
| 235 |
} |
} |
| 236 |
|
|
| 237 |
$onerror->(type => 'at-rule syntax error:namespace', |
$onerror->(type => 'at-rule syntax error', |
| 238 |
level => $self->{must_level}, |
text => 'namespace', |
| 239 |
|
level => $self->{level}->{must}, |
| 240 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 241 |
token => $t); |
token => $t); |
| 242 |
# |
# |
| 287 |
} |
} |
| 288 |
} |
} |
| 289 |
|
|
| 290 |
$onerror->(type => 'at-rule syntax error:import', |
$onerror->(type => 'at-rule syntax error', |
| 291 |
level => $self->{must_level}, |
text => 'import', |
| 292 |
|
level => $self->{level}->{must}, |
| 293 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 294 |
token => $t) |
token => $t) |
| 295 |
if defined $mq; ## NOTE: Otherwise, already raised in MQ parser |
if defined $mq; ## NOTE: Otherwise, already raised in MQ parser |
| 296 |
|
|
| 297 |
# |
# |
| 298 |
} else { |
} else { |
| 299 |
$onerror->(type => 'at-rule not allowed:import', |
$onerror->(type => 'at-rule not allowed', |
| 300 |
level => $self->{must_level}, |
text => 'import', |
| 301 |
|
level => $self->{level}->{must}, |
| 302 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 303 |
token => $t); |
token => $t); |
| 304 |
|
|
| 326 |
## Stay in the state. |
## Stay in the state. |
| 327 |
redo S; |
redo S; |
| 328 |
} else { |
} else { |
| 329 |
$onerror->(type => 'at-rule syntax error:media', |
$onerror->(type => 'at-rule syntax error', |
| 330 |
level => $self->{must_level}, |
text => 'media', |
| 331 |
|
level => $self->{level}->{must}, |
| 332 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 333 |
token => $t); |
token => $t); |
| 334 |
} |
} |
| 338 |
|
|
| 339 |
# |
# |
| 340 |
} else { ## Nested @media rule |
} else { ## Nested @media rule |
| 341 |
$onerror->(type => 'at-rule not allowed:media', |
$onerror->(type => 'at-rule not allowed', |
| 342 |
level => $self->{must_level}, |
text => 'media', |
| 343 |
|
level => $self->{level}->{must}, |
| 344 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 345 |
token => $t); |
token => $t); |
| 346 |
|
|
| 374 |
# |
# |
| 375 |
} |
} |
| 376 |
|
|
| 377 |
$onerror->(type => 'at-rule syntax error:charset', |
$onerror->(type => 'at-rule syntax error', |
| 378 |
level => $self->{must_level}, |
text => 'charset', |
| 379 |
|
level => $self->{level}->{must}, |
| 380 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 381 |
token => $t); |
token => $t); |
| 382 |
# |
# |
| 383 |
} else { |
} else { |
| 384 |
$onerror->(type => 'at-rule not allowed:charset', |
$onerror->(type => 'at-rule not allowed', |
| 385 |
level => $self->{must_level}, |
text => 'charset', |
| 386 |
|
level => $self->{level}->{must}, |
| 387 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 388 |
token => $t); |
token => $t); |
| 389 |
# |
# |
| 390 |
} |
} |
| 391 |
} else { |
} else { |
| 392 |
$onerror->(type => 'at-rule not supported', |
$onerror->(type => 'unknown at-rule', |
| 393 |
level => $self->{unsupported_level}, |
level => $self->{level}->{uncertain}, |
| 394 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 395 |
token => $t, |
token => $t, |
| 396 |
value => $t->{value}); |
value => $t->{value}); |
| 410 |
} elsif ($t->{type} == EOF_TOKEN) { |
} elsif ($t->{type} == EOF_TOKEN) { |
| 411 |
if (@$open_rules > 1) { |
if (@$open_rules > 1) { |
| 412 |
$onerror->(type => 'block not closed', |
$onerror->(type => 'block not closed', |
| 413 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 414 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 415 |
token => $t); |
token => $t); |
| 416 |
} |
} |
| 438 |
redo S; |
redo S; |
| 439 |
} else { |
} else { |
| 440 |
$onerror->(type => 'no declaration block', |
$onerror->(type => 'no declaration block', |
| 441 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 442 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 443 |
token => $t); |
token => $t); |
| 444 |
|
|
| 485 |
# |
# |
| 486 |
} else { |
} else { |
| 487 |
$onerror->(type => 'priority syntax error', |
$onerror->(type => 'priority syntax error', |
| 488 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 489 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 490 |
token => $t); |
token => $t); |
| 491 |
|
|
| 504 |
redo S; |
redo S; |
| 505 |
} |
} |
| 506 |
} else { |
} else { |
| 507 |
$onerror->(type => 'property not supported', |
$onerror->(type => 'unknown property', |
| 508 |
level => $self->{unsupported_level}, |
level => $self->{level}->{uncertain}, |
| 509 |
token => $prop_name_t, value => $prop_name, |
token => $prop_name_t, value => $prop_name, |
| 510 |
uri => \$self->{href}); |
uri => \$self->{href}); |
| 511 |
|
|
| 515 |
} |
} |
| 516 |
} else { |
} else { |
| 517 |
$onerror->(type => 'no property colon', |
$onerror->(type => 'no property colon', |
| 518 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 519 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 520 |
token => $t); |
token => $t); |
| 521 |
|
|
| 535 |
#redo S; |
#redo S; |
| 536 |
} elsif ($t->{type} == EOF_TOKEN) { |
} elsif ($t->{type} == EOF_TOKEN) { |
| 537 |
$onerror->(type => 'block not closed', |
$onerror->(type => 'block not closed', |
| 538 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 539 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 540 |
token => $t); |
token => $t); |
| 541 |
## Reprocess. |
## Reprocess. |
| 544 |
} else { |
} else { |
| 545 |
if ($prop_value) { |
if ($prop_value) { |
| 546 |
$onerror->(type => 'no property semicolon', |
$onerror->(type => 'no property semicolon', |
| 547 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 548 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 549 |
token => $t); |
token => $t); |
| 550 |
} else { |
} else { |
| 551 |
$onerror->(type => 'no property name', |
$onerror->(type => 'no property name', |
| 552 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 553 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 554 |
token => $t); |
token => $t); |
| 555 |
} |
} |
| 1081 |
} |
} |
| 1082 |
} |
} |
| 1083 |
|
|
| 1084 |
$onerror->(type => 'syntax error:color', |
$onerror->(type => 'CSS syntax error', text => 'color', |
| 1085 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 1086 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 1087 |
token => $t); |
token => $t); |
| 1088 |
|
|
| 1451 |
} |
} |
| 1452 |
} |
} |
| 1453 |
|
|
| 1454 |
$onerror->(type => "syntax error:'".$prop_name."'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 1455 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 1456 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 1457 |
token => $t); |
token => $t); |
| 1458 |
return ($t, undef); |
return ($t, undef); |
| 2023 |
} |
} |
| 2024 |
} |
} |
| 2025 |
|
|
| 2026 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 2027 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 2028 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 2029 |
token => $t); |
token => $t); |
| 2030 |
return ($t, undef); |
return ($t, undef); |
| 2069 |
} |
} |
| 2070 |
} |
} |
| 2071 |
|
|
| 2072 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 2073 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 2074 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 2075 |
token => $t); |
token => $t); |
| 2076 |
return ($t, undef); |
return ($t, undef); |
| 2115 |
} |
} |
| 2116 |
} |
} |
| 2117 |
|
|
| 2118 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 2119 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 2120 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 2121 |
token => $t); |
token => $t); |
| 2122 |
return ($t, undef); |
return ($t, undef); |
| 2172 |
} |
} |
| 2173 |
} |
} |
| 2174 |
|
|
| 2175 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 2176 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 2177 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 2178 |
token => $t); |
token => $t); |
| 2179 |
return ($t, undef); |
return ($t, undef); |
| 2262 |
## for the support of 'border-top' property (and similar ones). |
## for the support of 'border-top' property (and similar ones). |
| 2263 |
} |
} |
| 2264 |
|
|
| 2265 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 2266 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 2267 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 2268 |
token => $t); |
token => $t); |
| 2269 |
return ($t, undef); |
return ($t, undef); |
| 2309 |
} |
} |
| 2310 |
} |
} |
| 2311 |
|
|
| 2312 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 2313 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 2314 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 2315 |
token => $t); |
token => $t); |
| 2316 |
return ($t, undef); |
return ($t, undef); |
| 2978 |
} |
} |
| 2979 |
} |
} |
| 2980 |
|
|
| 2981 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 2982 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 2983 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 2984 |
token => $t); |
token => $t); |
| 2985 |
return ($t, undef); |
return ($t, undef); |
| 3322 |
} |
} |
| 3323 |
} |
} |
| 3324 |
|
|
| 3325 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 3326 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 3327 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 3328 |
token => $t); |
token => $t); |
| 3329 |
return ($t, undef); |
return ($t, undef); |
| 3390 |
# $t = $tt->get_next_token; |
# $t = $tt->get_next_token; |
| 3391 |
# if ($t->{type} == EOF_TOKEN) { |
# if ($t->{type} == EOF_TOKEN) { |
| 3392 |
# $onerror->(type => 'uri not closed', |
# $onerror->(type => 'uri not closed', |
| 3393 |
# level => $self->{must_level}, |
# level => $self->{level}->{must}, |
| 3394 |
# uri => \$self->{href}, |
# uri => \$self->{href}, |
| 3395 |
# token => $t); |
# token => $t); |
| 3396 |
# |
# |
| 3398 |
# } |
# } |
| 3399 |
} |
} |
| 3400 |
|
|
| 3401 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 3402 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 3403 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 3404 |
token => $t); |
token => $t); |
| 3405 |
return ($t, undef); |
return ($t, undef); |
| 3745 |
} elsif (not $may_be_generic or length $font_name) { |
} elsif (not $may_be_generic or length $font_name) { |
| 3746 |
push @prop_value, ['STRING', $font_name]; |
push @prop_value, ['STRING', $font_name]; |
| 3747 |
} else { |
} else { |
| 3748 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 3749 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 3750 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 3751 |
token => $t); |
token => $t); |
| 3752 |
return ($t, undef); |
return ($t, undef); |
| 3795 |
} elsif ($v eq 'inherit' and @prop_value == 1) { |
} elsif ($v eq 'inherit' and @prop_value == 1) { |
| 3796 |
return ($t, {$prop_name => ['INHERIT']}); |
return ($t, {$prop_name => ['INHERIT']}); |
| 3797 |
} else { |
} else { |
| 3798 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 3799 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 3800 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 3801 |
token => $t); |
token => $t); |
| 3802 |
return ($t, undef); |
return ($t, undef); |
| 3805 |
push @prop_value, ['URI', $t->{value}, \($self->{base_uri})]; |
push @prop_value, ['URI', $t->{value}, \($self->{base_uri})]; |
| 3806 |
$t = $tt->get_next_token; |
$t = $tt->get_next_token; |
| 3807 |
} else { |
} else { |
| 3808 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 3809 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 3810 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 3811 |
token => $t); |
token => $t); |
| 3812 |
return ($t, undef); |
return ($t, undef); |
| 3881 |
$prop_value{'border-left-style'} = $prop_value{'border-right-style'}; |
$prop_value{'border-left-style'} = $prop_value{'border-right-style'}; |
| 3882 |
return ($t, \%prop_value); |
return ($t, \%prop_value); |
| 3883 |
} else { |
} else { |
| 3884 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 3885 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 3886 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 3887 |
token => $t); |
token => $t); |
| 3888 |
return ($t, undef); |
return ($t, undef); |
| 3891 |
$prop_value{'border-bottom-style'} = $prop_value{'border-top-style'}; |
$prop_value{'border-bottom-style'} = $prop_value{'border-top-style'}; |
| 3892 |
$prop_value{'border-left-style'} = $prop_value{'border-right-style'}; |
$prop_value{'border-left-style'} = $prop_value{'border-right-style'}; |
| 3893 |
} else { |
} else { |
| 3894 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 3895 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 3896 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 3897 |
token => $t); |
token => $t); |
| 3898 |
return ($t, undef); |
return ($t, undef); |
| 3906 |
$self->{prop_value}->{'border-right-style'}->{$prop_value}) { |
$self->{prop_value}->{'border-right-style'}->{$prop_value}) { |
| 3907 |
$prop_value{'border-right-style'} = ["KEYWORD", $prop_value]; |
$prop_value{'border-right-style'} = ["KEYWORD", $prop_value]; |
| 3908 |
} else { |
} else { |
| 3909 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 3910 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 3911 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 3912 |
token => $t); |
token => $t); |
| 3913 |
return ($t, undef); |
return ($t, undef); |
| 3922 |
$self->{prop_value}->{'border-bottom-style'}->{$prop_value}) { |
$self->{prop_value}->{'border-bottom-style'}->{$prop_value}) { |
| 3923 |
$prop_value{'border-bottom-style'} = ["KEYWORD", $prop_value]; |
$prop_value{'border-bottom-style'} = ["KEYWORD", $prop_value]; |
| 3924 |
} else { |
} else { |
| 3925 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 3926 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 3927 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 3928 |
token => $t); |
token => $t); |
| 3929 |
return ($t, undef); |
return ($t, undef); |
| 3937 |
$self->{prop_value}->{'border-left-style'}->{$prop_value}) { |
$self->{prop_value}->{'border-left-style'}->{$prop_value}) { |
| 3938 |
$prop_value{'border-left-style'} = ["KEYWORD", $prop_value]; |
$prop_value{'border-left-style'} = ["KEYWORD", $prop_value]; |
| 3939 |
} else { |
} else { |
| 3940 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 3941 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 3942 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 3943 |
token => $t); |
token => $t); |
| 3944 |
return ($t, undef); |
return ($t, undef); |
| 4014 |
if (not defined $pv) { |
if (not defined $pv) { |
| 4015 |
return ($t, undef); |
return ($t, undef); |
| 4016 |
} elsif ($pv->{'border-color'}->[0] eq 'INHERIT') { |
} elsif ($pv->{'border-color'}->[0] eq 'INHERIT') { |
| 4017 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4018 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4019 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4020 |
token => $t); |
token => $t); |
| 4021 |
return ($t, undef); |
return ($t, undef); |
| 4033 |
if (not defined $pv) { |
if (not defined $pv) { |
| 4034 |
return ($t, undef); |
return ($t, undef); |
| 4035 |
} elsif ($pv->{'border-color'}->[0] eq 'INHERIT') { |
} elsif ($pv->{'border-color'}->[0] eq 'INHERIT') { |
| 4036 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4037 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4038 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4039 |
token => $t); |
token => $t); |
| 4040 |
return ($t, undef); |
return ($t, undef); |
| 4051 |
if (not defined $pv) { |
if (not defined $pv) { |
| 4052 |
return ($t, undef); |
return ($t, undef); |
| 4053 |
} elsif ($pv->{'border-color'}->[0] eq 'INHERIT') { |
} elsif ($pv->{'border-color'}->[0] eq 'INHERIT') { |
| 4054 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4055 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4056 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4057 |
token => $t); |
token => $t); |
| 4058 |
return ($t, undef); |
return ($t, undef); |
| 4133 |
if (defined $pv) { |
if (defined $pv) { |
| 4134 |
$prop_value{$prop_name.'-style'} = $pv->{$prop_name.'-style'}; |
$prop_value{$prop_name.'-style'} = $pv->{$prop_name.'-style'}; |
| 4135 |
} else { |
} else { |
| 4136 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4137 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4138 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4139 |
token => $t); |
token => $t); |
| 4140 |
return ($t, undef); |
return ($t, undef); |
| 4170 |
}->{$t->{type}}; |
}->{$t->{type}}; |
| 4171 |
if (defined $pv) { |
if (defined $pv) { |
| 4172 |
if ($pv->{$prop_name.'-color'}->[0] eq 'INHERIT') { |
if ($pv->{$prop_name.'-color'}->[0] eq 'INHERIT') { |
| 4173 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4174 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4175 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4176 |
token => $t); |
token => $t); |
| 4177 |
} else { |
} else { |
| 4191 |
}->{$t->{type}}; |
}->{$t->{type}}; |
| 4192 |
if (defined $pv) { |
if (defined $pv) { |
| 4193 |
if ($pv->{$prop_name.'-width'}->[0] eq 'INHERIT') { |
if ($pv->{$prop_name.'-width'}->[0] eq 'INHERIT') { |
| 4194 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4195 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4196 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4197 |
token => $t); |
token => $t); |
| 4198 |
} else { |
} else { |
| 4401 |
if ($length_unit->{$unit}) { |
if ($length_unit->{$unit}) { |
| 4402 |
$prop_value{'margin-top'} = ['DIMENSION', $value, $unit]; |
$prop_value{'margin-top'} = ['DIMENSION', $value, $unit]; |
| 4403 |
} else { |
} else { |
| 4404 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4405 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4406 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4407 |
token => $t); |
token => $t); |
| 4408 |
return ($t, undef); |
return ($t, undef); |
| 4428 |
$prop_value{'margin-left'} = $prop_value{'margin-right'}; |
$prop_value{'margin-left'} = $prop_value{'margin-right'}; |
| 4429 |
return ($t, \%prop_value); |
return ($t, \%prop_value); |
| 4430 |
} else { |
} else { |
| 4431 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4432 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4433 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4434 |
token => $t); |
token => $t); |
| 4435 |
return ($t, undef); |
return ($t, undef); |
| 4436 |
} |
} |
| 4437 |
} else { |
} else { |
| 4438 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4439 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4440 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4441 |
token => $t); |
token => $t); |
| 4442 |
return ($t, undef); |
return ($t, undef); |
| 4464 |
if ($length_unit->{$unit}) { |
if ($length_unit->{$unit}) { |
| 4465 |
$prop_value{'margin-right'} = ['DIMENSION', $value, $unit]; |
$prop_value{'margin-right'} = ['DIMENSION', $value, $unit]; |
| 4466 |
} else { |
} else { |
| 4467 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4468 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4469 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4470 |
token => $t); |
token => $t); |
| 4471 |
return ($t, undef); |
return ($t, undef); |
| 4485 |
if ($prop_value eq 'auto') { |
if ($prop_value eq 'auto') { |
| 4486 |
$prop_value{'margin-right'} = ['KEYWORD', $prop_value]; |
$prop_value{'margin-right'} = ['KEYWORD', $prop_value]; |
| 4487 |
} else { |
} else { |
| 4488 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4489 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4490 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4491 |
token => $t); |
token => $t); |
| 4492 |
return ($t, undef); |
return ($t, undef); |
| 4493 |
} |
} |
| 4494 |
} else { |
} else { |
| 4495 |
if ($has_sign) { |
if ($has_sign) { |
| 4496 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4497 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4498 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4499 |
token => $t); |
token => $t); |
| 4500 |
return ($t, undef); |
return ($t, undef); |
| 4522 |
if ($length_unit->{$unit}) { |
if ($length_unit->{$unit}) { |
| 4523 |
$prop_value{'margin-bottom'} = ['DIMENSION', $value, $unit]; |
$prop_value{'margin-bottom'} = ['DIMENSION', $value, $unit]; |
| 4524 |
} else { |
} else { |
| 4525 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4526 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4527 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4528 |
token => $t); |
token => $t); |
| 4529 |
return ($t, undef); |
return ($t, undef); |
| 4543 |
if ($prop_value eq 'auto') { |
if ($prop_value eq 'auto') { |
| 4544 |
$prop_value{'margin-bottom'} = ['KEYWORD', $prop_value]; |
$prop_value{'margin-bottom'} = ['KEYWORD', $prop_value]; |
| 4545 |
} else { |
} else { |
| 4546 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4547 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4548 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4549 |
token => $t); |
token => $t); |
| 4550 |
return ($t, undef); |
return ($t, undef); |
| 4551 |
} |
} |
| 4552 |
} else { |
} else { |
| 4553 |
if ($has_sign) { |
if ($has_sign) { |
| 4554 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4555 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4556 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4557 |
token => $t); |
token => $t); |
| 4558 |
return ($t, undef); |
return ($t, undef); |
| 4579 |
if ($length_unit->{$unit}) { |
if ($length_unit->{$unit}) { |
| 4580 |
$prop_value{'margin-left'} = ['DIMENSION', $value, $unit]; |
$prop_value{'margin-left'} = ['DIMENSION', $value, $unit]; |
| 4581 |
} else { |
} else { |
| 4582 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4583 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4584 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4585 |
token => $t); |
token => $t); |
| 4586 |
return ($t, undef); |
return ($t, undef); |
| 4600 |
if ($prop_value eq 'auto') { |
if ($prop_value eq 'auto') { |
| 4601 |
$prop_value{'margin-left'} = ['KEYWORD', $prop_value]; |
$prop_value{'margin-left'} = ['KEYWORD', $prop_value]; |
| 4602 |
} else { |
} else { |
| 4603 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4604 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4605 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4606 |
token => $t); |
token => $t); |
| 4607 |
return ($t, undef); |
return ($t, undef); |
| 4608 |
} |
} |
| 4609 |
} else { |
} else { |
| 4610 |
if ($has_sign) { |
if ($has_sign) { |
| 4611 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4612 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4613 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4614 |
token => $t); |
token => $t); |
| 4615 |
return ($t, undef); |
return ($t, undef); |
| 4644 |
if ($length_unit->{$unit} and $value >= 0) { |
if ($length_unit->{$unit} and $value >= 0) { |
| 4645 |
$prop_value{'padding-top'} = ['DIMENSION', $value, $unit]; |
$prop_value{'padding-top'} = ['DIMENSION', $value, $unit]; |
| 4646 |
} else { |
} else { |
| 4647 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4648 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4649 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4650 |
token => $t); |
token => $t); |
| 4651 |
return ($t, undef); |
return ($t, undef); |
| 4655 |
$t = $tt->get_next_token; |
$t = $tt->get_next_token; |
| 4656 |
$prop_value{'padding-top'} = ['PERCENTAGE', $value]; |
$prop_value{'padding-top'} = ['PERCENTAGE', $value]; |
| 4657 |
unless ($value >= 0) { |
unless ($value >= 0) { |
| 4658 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4659 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4660 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4661 |
token => $t); |
token => $t); |
| 4662 |
return ($t, undef); |
return ($t, undef); |
| 4667 |
$t = $tt->get_next_token; |
$t = $tt->get_next_token; |
| 4668 |
$prop_value{'padding-top'} = ['DIMENSION', $value, 'px']; |
$prop_value{'padding-top'} = ['DIMENSION', $value, 'px']; |
| 4669 |
unless ($value >= 0) { |
unless ($value >= 0) { |
| 4670 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4671 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4672 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4673 |
token => $t); |
token => $t); |
| 4674 |
return ($t, undef); |
return ($t, undef); |
| 4683 |
$prop_value{'padding-left'} = $prop_value{'padding-right'}; |
$prop_value{'padding-left'} = $prop_value{'padding-right'}; |
| 4684 |
return ($t, \%prop_value); |
return ($t, \%prop_value); |
| 4685 |
} else { |
} else { |
| 4686 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4687 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4688 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4689 |
token => $t); |
token => $t); |
| 4690 |
return ($t, undef); |
return ($t, undef); |
| 4691 |
} |
} |
| 4692 |
} else { |
} else { |
| 4693 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4694 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4695 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4696 |
token => $t); |
token => $t); |
| 4697 |
return ($t, undef); |
return ($t, undef); |
| 4714 |
if ($length_unit->{$unit} and $value >= 0) { |
if ($length_unit->{$unit} and $value >= 0) { |
| 4715 |
$prop_value{'padding-right'} = ['DIMENSION', $value, $unit]; |
$prop_value{'padding-right'} = ['DIMENSION', $value, $unit]; |
| 4716 |
} else { |
} else { |
| 4717 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4718 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4719 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4720 |
token => $t); |
token => $t); |
| 4721 |
return ($t, undef); |
return ($t, undef); |
| 4725 |
$t = $tt->get_next_token; |
$t = $tt->get_next_token; |
| 4726 |
$prop_value{'padding-right'} = ['PERCENTAGE', $value]; |
$prop_value{'padding-right'} = ['PERCENTAGE', $value]; |
| 4727 |
unless ($value >= 0) { |
unless ($value >= 0) { |
| 4728 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4729 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4730 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4731 |
token => $t); |
token => $t); |
| 4732 |
return ($t, undef); |
return ($t, undef); |
| 4737 |
$t = $tt->get_next_token; |
$t = $tt->get_next_token; |
| 4738 |
$prop_value{'padding-right'} = ['DIMENSION', $value, 'px']; |
$prop_value{'padding-right'} = ['DIMENSION', $value, 'px']; |
| 4739 |
unless ($value >= 0) { |
unless ($value >= 0) { |
| 4740 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4741 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4742 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4743 |
token => $t); |
token => $t); |
| 4744 |
return ($t, undef); |
return ($t, undef); |
| 4745 |
} |
} |
| 4746 |
} else { |
} else { |
| 4747 |
if ($sign < 0) { |
if ($sign < 0) { |
| 4748 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4749 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4750 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4751 |
token => $t); |
token => $t); |
| 4752 |
return ($t, undef); |
return ($t, undef); |
| 4769 |
if ($length_unit->{$unit} and $value >= 0) { |
if ($length_unit->{$unit} and $value >= 0) { |
| 4770 |
$prop_value{'padding-bottom'} = ['DIMENSION', $value, $unit]; |
$prop_value{'padding-bottom'} = ['DIMENSION', $value, $unit]; |
| 4771 |
} else { |
} else { |
| 4772 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4773 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4774 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4775 |
token => $t); |
token => $t); |
| 4776 |
return ($t, undef); |
return ($t, undef); |
| 4780 |
$t = $tt->get_next_token; |
$t = $tt->get_next_token; |
| 4781 |
$prop_value{'padding-bottom'} = ['PERCENTAGE', $value]; |
$prop_value{'padding-bottom'} = ['PERCENTAGE', $value]; |
| 4782 |
unless ($value >= 0) { |
unless ($value >= 0) { |
| 4783 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4784 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4785 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4786 |
token => $t); |
token => $t); |
| 4787 |
return ($t, undef); |
return ($t, undef); |
| 4792 |
$t = $tt->get_next_token; |
$t = $tt->get_next_token; |
| 4793 |
$prop_value{'padding-bottom'} = ['DIMENSION', $value, 'px']; |
$prop_value{'padding-bottom'} = ['DIMENSION', $value, 'px']; |
| 4794 |
unless ($value >= 0) { |
unless ($value >= 0) { |
| 4795 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4796 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4797 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4798 |
token => $t); |
token => $t); |
| 4799 |
return ($t, undef); |
return ($t, undef); |
| 4800 |
} |
} |
| 4801 |
} else { |
} else { |
| 4802 |
if ($sign < 0) { |
if ($sign < 0) { |
| 4803 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4804 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4805 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4806 |
token => $t); |
token => $t); |
| 4807 |
return ($t, undef); |
return ($t, undef); |
| 4823 |
if ($length_unit->{$unit} and $value >= 0) { |
if ($length_unit->{$unit} and $value >= 0) { |
| 4824 |
$prop_value{'padding-left'} = ['DIMENSION', $value, $unit]; |
$prop_value{'padding-left'} = ['DIMENSION', $value, $unit]; |
| 4825 |
} else { |
} else { |
| 4826 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4827 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4828 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4829 |
token => $t); |
token => $t); |
| 4830 |
return ($t, undef); |
return ($t, undef); |
| 4834 |
$t = $tt->get_next_token; |
$t = $tt->get_next_token; |
| 4835 |
$prop_value{'padding-left'} = ['PERCENTAGE', $value]; |
$prop_value{'padding-left'} = ['PERCENTAGE', $value]; |
| 4836 |
unless ($value >= 0) { |
unless ($value >= 0) { |
| 4837 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4838 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4839 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4840 |
token => $t); |
token => $t); |
| 4841 |
return ($t, undef); |
return ($t, undef); |
| 4846 |
$t = $tt->get_next_token; |
$t = $tt->get_next_token; |
| 4847 |
$prop_value{'padding-left'} = ['DIMENSION', $value, 'px']; |
$prop_value{'padding-left'} = ['DIMENSION', $value, 'px']; |
| 4848 |
unless ($value >= 0) { |
unless ($value >= 0) { |
| 4849 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4850 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4851 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4852 |
token => $t); |
token => $t); |
| 4853 |
return ($t, undef); |
return ($t, undef); |
| 4854 |
} |
} |
| 4855 |
} else { |
} else { |
| 4856 |
if ($sign < 0) { |
if ($sign < 0) { |
| 4857 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4858 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4859 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4860 |
token => $t); |
token => $t); |
| 4861 |
return ($t, undef); |
return ($t, undef); |
| 4894 |
$t = $tt->get_next_token; |
$t = $tt->get_next_token; |
| 4895 |
$prop_value{'-manakai-border-spacing-x'} = ['DIMENSION', $value, $unit]; |
$prop_value{'-manakai-border-spacing-x'} = ['DIMENSION', $value, $unit]; |
| 4896 |
} else { |
} else { |
| 4897 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4898 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4899 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4900 |
token => $t); |
token => $t); |
| 4901 |
return ($t, undef); |
return ($t, undef); |
| 4907 |
if ($value >= 0) { |
if ($value >= 0) { |
| 4908 |
$t = $tt->get_next_token; |
$t = $tt->get_next_token; |
| 4909 |
} else { |
} else { |
| 4910 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4911 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4912 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4913 |
token => $t); |
token => $t); |
| 4914 |
return ($t, undef); |
return ($t, undef); |
| 4922 |
= $prop_value{'-manakai-border-spacing-x'}; |
= $prop_value{'-manakai-border-spacing-x'}; |
| 4923 |
return ($t, \%prop_value); |
return ($t, \%prop_value); |
| 4924 |
} else { |
} else { |
| 4925 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4926 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4927 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4928 |
token => $t); |
token => $t); |
| 4929 |
return ($t, undef); |
return ($t, undef); |
| 4930 |
} |
} |
| 4931 |
} else { |
} else { |
| 4932 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4933 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4934 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4935 |
token => $t); |
token => $t); |
| 4936 |
return ($t, undef); |
return ($t, undef); |
| 4957 |
$t = $tt->get_next_token; |
$t = $tt->get_next_token; |
| 4958 |
$prop_value{'-manakai-border-spacing-y'} = ['DIMENSION', $value, $unit]; |
$prop_value{'-manakai-border-spacing-y'} = ['DIMENSION', $value, $unit]; |
| 4959 |
} else { |
} else { |
| 4960 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4961 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4962 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4963 |
token => $t); |
token => $t); |
| 4964 |
return ($t, undef); |
return ($t, undef); |
| 4970 |
if ($value >= 0) { |
if ($value >= 0) { |
| 4971 |
$t = $tt->get_next_token; |
$t = $tt->get_next_token; |
| 4972 |
} else { |
} else { |
| 4973 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4974 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4975 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4976 |
token => $t); |
token => $t); |
| 4977 |
return ($t, undef); |
return ($t, undef); |
| 4978 |
} |
} |
| 4979 |
} else { |
} else { |
| 4980 |
if ($has_sign) { |
if ($has_sign) { |
| 4981 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 4982 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 4983 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 4984 |
token => $t); |
token => $t); |
| 4985 |
return ($t, undef); |
return ($t, undef); |
| 5023 |
$prop_value{'background-position-x'} = ['DIMENSION', $value, $unit]; |
$prop_value{'background-position-x'} = ['DIMENSION', $value, $unit]; |
| 5024 |
$prop_value{'background-position-y'} = ['PERCENTAGE', 50]; |
$prop_value{'background-position-y'} = ['PERCENTAGE', 50]; |
| 5025 |
} else { |
} else { |
| 5026 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 5027 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 5028 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 5029 |
token => $t); |
token => $t); |
| 5030 |
return ($t, undef); |
return ($t, undef); |
| 5084 |
$prop_value{'background-position-y'} = ['INHERIT']; |
$prop_value{'background-position-y'} = ['INHERIT']; |
| 5085 |
return ($t, \%prop_value); |
return ($t, \%prop_value); |
| 5086 |
} else { |
} else { |
| 5087 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 5088 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 5089 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 5090 |
token => $t); |
token => $t); |
| 5091 |
return ($t, undef); |
return ($t, undef); |
| 5092 |
} |
} |
| 5093 |
} else { |
} else { |
| 5094 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 5095 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 5096 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 5097 |
token => $t); |
token => $t); |
| 5098 |
return ($t, undef); |
return ($t, undef); |
| 5117 |
$t = $tt->get_next_token; |
$t = $tt->get_next_token; |
| 5118 |
$prop_value{'background-position-y'} = ['DIMENSION', $value, $unit]; |
$prop_value{'background-position-y'} = ['DIMENSION', $value, $unit]; |
| 5119 |
} else { |
} else { |
| 5120 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 5121 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 5122 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 5123 |
token => $t); |
token => $t); |
| 5124 |
return ($t, undef); |
return ($t, undef); |
| 5140 |
} |
} |
| 5141 |
} else { |
} else { |
| 5142 |
if ($has_sign) { |
if ($has_sign) { |
| 5143 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 5144 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 5145 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 5146 |
token => $t); |
token => $t); |
| 5147 |
return ($t, undef); |
return ($t, undef); |
| 5267 |
$prop_value{'background-position-y'} |
$prop_value{'background-position-y'} |
| 5268 |
= ['DIMENSION', $value, $unit]; |
= ['DIMENSION', $value, $unit]; |
| 5269 |
} else { |
} else { |
| 5270 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 5271 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 5272 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 5273 |
token => $t); |
token => $t); |
| 5274 |
return ($t, undef); |
return ($t, undef); |
| 5283 |
$t = $tt->get_next_token; |
$t = $tt->get_next_token; |
| 5284 |
$prop_value{'background-position-y'} = ['DIMENSION', $value, 'px']; |
$prop_value{'background-position-y'} = ['DIMENSION', $value, 'px']; |
| 5285 |
} elsif ($has_sign) { |
} elsif ($has_sign) { |
| 5286 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 5287 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 5288 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 5289 |
token => $t); |
token => $t); |
| 5290 |
return ($t, undef); |
return ($t, undef); |
| 5338 |
$prop_value{'background-position-x'} |
$prop_value{'background-position-x'} |
| 5339 |
= ['DIMENSION', $value, $unit]; |
= ['DIMENSION', $value, $unit]; |
| 5340 |
} else { |
} else { |
| 5341 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 5342 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 5343 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 5344 |
token => $t); |
token => $t); |
| 5345 |
return ($t, undef); |
return ($t, undef); |
| 5379 |
$prop_value{'background-position-y'} |
$prop_value{'background-position-y'} |
| 5380 |
= ['DIMENSION', $value, $unit]; |
= ['DIMENSION', $value, $unit]; |
| 5381 |
} else { |
} else { |
| 5382 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 5383 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 5384 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 5385 |
token => $t); |
token => $t); |
| 5386 |
return ($t, undef); |
return ($t, undef); |
| 5405 |
} else { |
} else { |
| 5406 |
$prop_value{'background-position-y'} = ['PERCENTAGE', 50]; |
$prop_value{'background-position-y'} = ['PERCENTAGE', 50]; |
| 5407 |
if ($has_sign) { |
if ($has_sign) { |
| 5408 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 5409 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 5410 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 5411 |
token => $t); |
token => $t); |
| 5412 |
return ($t, undef); |
return ($t, undef); |
| 5422 |
if (keys %prop_value and not $has_sign) { |
if (keys %prop_value and not $has_sign) { |
| 5423 |
last B; |
last B; |
| 5424 |
} else { |
} else { |
| 5425 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 5426 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 5427 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 5428 |
token => $t); |
token => $t); |
| 5429 |
return ($t, undef); |
return ($t, undef); |
| 5501 |
if (keys %prop_value) { |
if (keys %prop_value) { |
| 5502 |
last A; |
last A; |
| 5503 |
} else { |
} else { |
| 5504 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 5505 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 5506 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 5507 |
token => $t); |
token => $t); |
| 5508 |
return ($t, undef); |
return ($t, undef); |
| 5532 |
## NOTE: <'font-size'> or invalid |
## NOTE: <'font-size'> or invalid |
| 5533 |
last A; |
last A; |
| 5534 |
} else { |
} else { |
| 5535 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 5536 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 5537 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 5538 |
token => $t); |
token => $t); |
| 5539 |
return ($t, undef); |
return ($t, undef); |
| 5553 |
->($self, 'font', $tt, $t, $onerror); |
->($self, 'font', $tt, $t, $onerror); |
| 5554 |
return ($t, undef) unless defined $pv; |
return ($t, undef) unless defined $pv; |
| 5555 |
if ($pv->{font}->[0] eq 'INHERIT') { |
if ($pv->{font}->[0] eq 'INHERIT') { |
| 5556 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 5557 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 5558 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 5559 |
token => $t); |
token => $t); |
| 5560 |
return ($t, undef); |
return ($t, undef); |
| 5569 |
->($self, 'font', $tt, $t, $onerror); |
->($self, 'font', $tt, $t, $onerror); |
| 5570 |
return ($t, undef) unless defined $pv; |
return ($t, undef) unless defined $pv; |
| 5571 |
if ($pv->{font}->[0] eq 'INHERIT') { |
if ($pv->{font}->[0] eq 'INHERIT') { |
| 5572 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 5573 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 5574 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 5575 |
token => $t); |
token => $t); |
| 5576 |
return ($t, undef); |
return ($t, undef); |
| 5662 |
$prop_value{'border-top-width'} = ['DIMENSION', $value, $unit]; |
$prop_value{'border-top-width'} = ['DIMENSION', $value, $unit]; |
| 5663 |
$t = $tt->get_next_token; |
$t = $tt->get_next_token; |
| 5664 |
} else { |
} else { |
| 5665 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 5666 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 5667 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 5668 |
token => $t); |
token => $t); |
| 5669 |
return ($t, undef); |
return ($t, undef); |
| 5675 |
$prop_value{'border-top-width'} = ['DIMENSION', $value, 'px']; |
$prop_value{'border-top-width'} = ['DIMENSION', $value, 'px']; |
| 5676 |
$t = $tt->get_next_token; |
$t = $tt->get_next_token; |
| 5677 |
} else { |
} else { |
| 5678 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 5679 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 5680 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 5681 |
token => $t); |
token => $t); |
| 5682 |
return ($t, undef); |
return ($t, undef); |
| 5694 |
$prop_value{'border-left-width'} = $prop_value{'border-right-width'}; |
$prop_value{'border-left-width'} = $prop_value{'border-right-width'}; |
| 5695 |
return ($t, \%prop_value); |
return ($t, \%prop_value); |
| 5696 |
} else { |
} else { |
| 5697 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 5698 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 5699 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 5700 |
token => $t); |
token => $t); |
| 5701 |
return ($t, undef); |
return ($t, undef); |
| 5702 |
} |
} |
| 5703 |
} else { |
} else { |
| 5704 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 5705 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 5706 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 5707 |
token => $t); |
token => $t); |
| 5708 |
return ($t, undef); |
return ($t, undef); |
| 5732 |
$t = $tt->get_next_token; |
$t = $tt->get_next_token; |
| 5733 |
$prop_value{'border-right-width'} = ['DIMENSION', $value, $unit]; |
$prop_value{'border-right-width'} = ['DIMENSION', $value, $unit]; |
| 5734 |
} else { |
} else { |
| 5735 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 5736 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 5737 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 5738 |
token => $t); |
token => $t); |
| 5739 |
return ($t, undef); |
return ($t, undef); |
| 5745 |
$t = $tt->get_next_token; |
$t = $tt->get_next_token; |
| 5746 |
$prop_value{'border-right-width'} = ['DIMENSION', $value, 'px']; |
$prop_value{'border-right-width'} = ['DIMENSION', $value, 'px']; |
| 5747 |
} else { |
} else { |
| 5748 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 5749 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 5750 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 5751 |
token => $t); |
token => $t); |
| 5752 |
return ($t, undef); |
return ($t, undef); |
| 5759 |
} |
} |
| 5760 |
} else { |
} else { |
| 5761 |
if ($has_sign) { |
if ($has_sign) { |
| 5762 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 5763 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 5764 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 5765 |
token => $t); |
token => $t); |
| 5766 |
return ($t, undef); |
return ($t, undef); |
| 5790 |
$t = $tt->get_next_token; |
$t = $tt->get_next_token; |
| 5791 |
$prop_value{'border-bottom-width'} = ['DIMENSION', $value, $unit]; |
$prop_value{'border-bottom-width'} = ['DIMENSION', $value, $unit]; |
| 5792 |
} else { |
} else { |
| 5793 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 5794 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 5795 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 5796 |
token => $t); |
token => $t); |
| 5797 |
return ($t, undef); |
return ($t, undef); |
| 5803 |
$t = $tt->get_next_token; |
$t = $tt->get_next_token; |
| 5804 |
$prop_value{'border-bottom-width'} = ['DIMENSION', $value, 'px']; |
$prop_value{'border-bottom-width'} = ['DIMENSION', $value, 'px']; |
| 5805 |
} else { |
} else { |
| 5806 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 5807 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 5808 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 5809 |
token => $t); |
token => $t); |
| 5810 |
return ($t, undef); |
return ($t, undef); |
| 5817 |
} |
} |
| 5818 |
} else { |
} else { |
| 5819 |
if ($has_sign) { |
if ($has_sign) { |
| 5820 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 5821 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 5822 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 5823 |
token => $t); |
token => $t); |
| 5824 |
return ($t, undef); |
return ($t, undef); |
| 5847 |
$t = $tt->get_next_token; |
$t = $tt->get_next_token; |
| 5848 |
$prop_value{'border-left-width'} = ['DIMENSION', $value, $unit]; |
$prop_value{'border-left-width'} = ['DIMENSION', $value, $unit]; |
| 5849 |
} else { |
} else { |
| 5850 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 5851 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 5852 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 5853 |
token => $t); |
token => $t); |
| 5854 |
return ($t, undef); |
return ($t, undef); |
| 5860 |
$t = $tt->get_next_token; |
$t = $tt->get_next_token; |
| 5861 |
$prop_value{'border-left-width'} = ['DIMENSION', $value, 'px']; |
$prop_value{'border-left-width'} = ['DIMENSION', $value, 'px']; |
| 5862 |
} else { |
} else { |
| 5863 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 5864 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 5865 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 5866 |
token => $t); |
token => $t); |
| 5867 |
return ($t, undef); |
return ($t, undef); |
| 5874 |
} |
} |
| 5875 |
} else { |
} else { |
| 5876 |
if ($has_sign) { |
if ($has_sign) { |
| 5877 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 5878 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 5879 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 5880 |
token => $t); |
token => $t); |
| 5881 |
return ($t, undef); |
return ($t, undef); |
| 5939 |
$none++; |
$none++; |
| 5940 |
} elsif ($Prop->{'list-style-type'}->{keyword}->{$prop_value}) { |
} elsif ($Prop->{'list-style-type'}->{keyword}->{$prop_value}) { |
| 5941 |
if (exists $prop_value{'list-style-type'}) { |
if (exists $prop_value{'list-style-type'}) { |
| 5942 |
$onerror->(type => "duplication:'list-style-type'", |
$onerror->(type => 'CSS duplication', text => "'list-style-type'", |
| 5943 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 5944 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 5945 |
token => $t); |
token => $t); |
| 5946 |
return ($t, undef); |
return ($t, undef); |
| 5949 |
} |
} |
| 5950 |
} elsif ($Prop->{'list-style-position'}->{keyword}->{$prop_value}) { |
} elsif ($Prop->{'list-style-position'}->{keyword}->{$prop_value}) { |
| 5951 |
if (exists $prop_value{'list-style-position'}) { |
if (exists $prop_value{'list-style-position'}) { |
| 5952 |
$onerror->(type => "duplication:'list-style-position'", |
$onerror->(type => 'CSS duplication', |
| 5953 |
level => $self->{must_level}, |
text => "'list-style-position'", |
| 5954 |
|
level => $self->{level}->{must}, |
| 5955 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 5956 |
token => $t); |
token => $t); |
| 5957 |
return ($t, undef); |
return ($t, undef); |
| 5965 |
last F; |
last F; |
| 5966 |
} else { |
} else { |
| 5967 |
if ($f == 1) { |
if ($f == 1) { |
| 5968 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 5969 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 5970 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 5971 |
token => $t); |
token => $t); |
| 5972 |
return ($t, undef); |
return ($t, undef); |
| 5976 |
} |
} |
| 5977 |
} elsif ($t->{type} == URI_TOKEN) { |
} elsif ($t->{type} == URI_TOKEN) { |
| 5978 |
if (exists $prop_value{'list-style-image'}) { |
if (exists $prop_value{'list-style-image'}) { |
| 5979 |
$onerror->(type => "duplication:'list-style-image'", |
$onerror->(type => 'CSS duplication', text => "'list-style-image'", |
| 5980 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 5981 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 5982 |
token => $t); |
token => $t); |
| 5983 |
return ($t, undef); |
return ($t, undef); |
| 5984 |
} |
} |
| 5988 |
$t = $tt->get_next_token; |
$t = $tt->get_next_token; |
| 5989 |
} else { |
} else { |
| 5990 |
if ($f == 1) { |
if ($f == 1) { |
| 5991 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 5992 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 5993 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 5994 |
token => $t); |
token => $t); |
| 5995 |
return ($t, undef); |
return ($t, undef); |
| 6005 |
if ($none == 1) { |
if ($none == 1) { |
| 6006 |
if (exists $prop_value{'list-style-type'}) { |
if (exists $prop_value{'list-style-type'}) { |
| 6007 |
if (exists $prop_value{'list-style-image'}) { |
if (exists $prop_value{'list-style-image'}) { |
| 6008 |
$onerror->(type => "duplication:'list-style-image'", |
$onerror->(type => 'CSS duplication', text => "'list-style-image'", |
| 6009 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 6010 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 6011 |
token => $t); |
token => $t); |
| 6012 |
return ($t, undef); |
return ($t, undef); |
| 6013 |
} else { |
} else { |
| 6020 |
} |
} |
| 6021 |
} elsif ($none == 2) { |
} elsif ($none == 2) { |
| 6022 |
if (exists $prop_value{'list-style-type'}) { |
if (exists $prop_value{'list-style-type'}) { |
| 6023 |
$onerror->(type => "duplication:'list-style-type'", |
$onerror->(type => 'CSS duplication', text => "'list-style-type'", |
| 6024 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 6025 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 6026 |
token => $t); |
token => $t); |
| 6027 |
return ($t, undef); |
return ($t, undef); |
| 6028 |
} |
} |
| 6029 |
if (exists $prop_value{'list-style-image'}) { |
if (exists $prop_value{'list-style-image'}) { |
| 6030 |
$onerror->(type => "duplication:'list-style-image'", |
$onerror->(type => 'CSS duplication', text => "'list-style-image'", |
| 6031 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 6032 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 6033 |
token => $t); |
token => $t); |
| 6034 |
return ($t, undef); |
return ($t, undef); |
| 6035 |
} |
} |
| 6037 |
$prop_value{'list-style-type'} = ['KEYWORD', 'none']; |
$prop_value{'list-style-type'} = ['KEYWORD', 'none']; |
| 6038 |
$prop_value{'list-style-image'} = ['KEYWORD', 'none']; |
$prop_value{'list-style-image'} = ['KEYWORD', 'none']; |
| 6039 |
} elsif ($none == 3) { |
} elsif ($none == 3) { |
| 6040 |
$onerror->(type => "duplication:'list-style-type'", |
$onerror->(type => 'CSS duplication', text => "'list-style-type'", |
| 6041 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 6042 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 6043 |
token => $t); |
token => $t); |
| 6044 |
return ($t, undef); |
return ($t, undef); |
| 6045 |
} |
} |
| 6106 |
$self->{prop_value}->{$prop_name}->{$v}) { |
$self->{prop_value}->{$prop_name}->{$v}) { |
| 6107 |
$value->[4] = 1; |
$value->[4] = 1; |
| 6108 |
} else { |
} else { |
| 6109 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 6110 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 6111 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 6112 |
token => $t); |
token => $t); |
| 6113 |
return ($t, undef); |
return ($t, undef); |
| 6193 |
redo A; |
redo A; |
| 6194 |
} |
} |
| 6195 |
|
|
| 6196 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 6197 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 6198 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 6199 |
token => $t); |
token => $t); |
| 6200 |
return ($t, undef); |
return ($t, undef); |
| 6270 |
my $uri = $self->{lookup_namespace_uri}->($pfx); |
my $uri = $self->{lookup_namespace_uri}->($pfx); |
| 6271 |
unless (defined $uri) { |
unless (defined $uri) { |
| 6272 |
$self->{onerror}->(type => 'namespace prefix:not declared', |
$self->{onerror}->(type => 'namespace prefix:not declared', |
| 6273 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 6274 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 6275 |
token => $t_pfx, |
token => $t_pfx, |
| 6276 |
value => $pfx); |
value => $pfx); |
| 6373 |
redo A; |
redo A; |
| 6374 |
} # A |
} # A |
| 6375 |
|
|
| 6376 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 6377 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 6378 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 6379 |
token => $t); |
token => $t); |
| 6380 |
return ($t, undef); |
return ($t, undef); |
| 6418 |
push @v, [$value, int $t->{number}]; |
push @v, [$value, int $t->{number}]; |
| 6419 |
$t = $tt->get_next_token; |
$t = $tt->get_next_token; |
| 6420 |
} else { |
} else { |
| 6421 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 6422 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 6423 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 6424 |
token => $t); |
token => $t); |
| 6425 |
return ($t, undef); |
return ($t, undef); |
| 6430 |
push @v, [$value, -int $t->{number}]; |
push @v, [$value, -int $t->{number}]; |
| 6431 |
$t = $tt->get_next_token; |
$t = $tt->get_next_token; |
| 6432 |
} else { |
} else { |
| 6433 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 6434 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 6435 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 6436 |
token => $t); |
token => $t); |
| 6437 |
return ($t, undef); |
return ($t, undef); |
| 6447 |
} |
} |
| 6448 |
$t = $tt->get_next_token while $t->{type} == S_TOKEN; |
$t = $tt->get_next_token while $t->{type} == S_TOKEN; |
| 6449 |
} else { |
} else { |
| 6450 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 6451 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 6452 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 6453 |
token => $t); |
token => $t); |
| 6454 |
return ($t, undef); |
return ($t, undef); |
| 6491 |
} |
} |
| 6492 |
} # A |
} # A |
| 6493 |
|
|
| 6494 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 6495 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 6496 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 6497 |
token => $t); |
token => $t); |
| 6498 |
return ($t, undef); |
return ($t, undef); |
| 6550 |
$t = $tt->get_next_token; |
$t = $tt->get_next_token; |
| 6551 |
push @$prop_value, ['DIMENSION', $value, $unit]; |
push @$prop_value, ['DIMENSION', $value, $unit]; |
| 6552 |
} else { |
} else { |
| 6553 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 6554 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 6555 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 6556 |
token => $t); |
token => $t); |
| 6557 |
return ($t, undef); |
return ($t, undef); |
| 6571 |
} |
} |
| 6572 |
} else { |
} else { |
| 6573 |
if ($has_sign) { |
if ($has_sign) { |
| 6574 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 6575 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 6576 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 6577 |
token => $t); |
token => $t); |
| 6578 |
return ($t, undef); |
return ($t, undef); |
| 6606 |
} |
} |
| 6607 |
} |
} |
| 6608 |
|
|
| 6609 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 6610 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 6611 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 6612 |
token => $t); |
token => $t); |
| 6613 |
return ($t, undef); |
return ($t, undef); |
| 6674 |
} |
} |
| 6675 |
} |
} |
| 6676 |
|
|
| 6677 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 6678 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 6679 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 6680 |
token => $t); |
token => $t); |
| 6681 |
return ($t, undef); |
return ($t, undef); |
| 6727 |
$t = $tt->get_next_token; |
$t = $tt->get_next_token; |
| 6728 |
push @$prop_value, ['DIMENSION', $value, $unit]; |
push @$prop_value, ['DIMENSION', $value, $unit]; |
| 6729 |
} else { |
} else { |
| 6730 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 6731 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 6732 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 6733 |
token => $t); |
token => $t); |
| 6734 |
return ($t, undef); |
return ($t, undef); |
| 6755 |
} |
} |
| 6756 |
} # A |
} # A |
| 6757 |
|
|
| 6758 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 6759 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 6760 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 6761 |
token => $t); |
token => $t); |
| 6762 |
return ($t, undef); |
return ($t, undef); |
| 6799 |
} |
} |
| 6800 |
} |
} |
| 6801 |
|
|
| 6802 |
$onerror->(type => "syntax error:'$prop_name'", |
$onerror->(type => 'CSS syntax error', text => qq['$prop_name'], |
| 6803 |
level => $self->{must_level}, |
level => $self->{level}->{must}, |
| 6804 |
uri => \$self->{href}, |
uri => \$self->{href}, |
| 6805 |
token => $t); |
token => $t); |
| 6806 |
return ($t, undef); |
return ($t, undef); |