| 1234 |
check_attrs => sub { |
check_attrs => sub { |
| 1235 |
my ($self, $item, $element_state) = @_; |
my ($self, $item, $element_state) = @_; |
| 1236 |
$GetHTMLAttrsChecker->({ |
$GetHTMLAttrsChecker->({ |
| 1237 |
|
## TODO: HTML4 |charset| |
| 1238 |
href => $HTMLURIAttrChecker, |
href => $HTMLURIAttrChecker, |
| 1239 |
rel => sub { $HTMLLinkTypesAttrChecker->(0, $item, @_) }, |
rel => sub { $HTMLLinkTypesAttrChecker->(0, $item, @_) }, |
| 1240 |
|
## TODO: HTML4 |rev| |
| 1241 |
media => $HTMLMQAttrChecker, |
media => $HTMLMQAttrChecker, |
| 1242 |
hreflang => $HTMLLanguageTagAttrChecker, |
hreflang => $HTMLLanguageTagAttrChecker, |
| 1243 |
|
target => $HTMLTargetAttrChecker, |
| 1244 |
type => $HTMLIMTAttrChecker, |
type => $HTMLIMTAttrChecker, |
| 1245 |
## NOTE: Though |title| has special semantics, |
## NOTE: Though |title| has special semantics, |
| 1246 |
## syntactically same as the |title| as global attribute. |
## syntactically same as the |title| as global attribute. |
| 1798 |
$Element->{$HTML_NS}->{hr} = { |
$Element->{$HTML_NS}->{hr} = { |
| 1799 |
%HTMLEmptyChecker, |
%HTMLEmptyChecker, |
| 1800 |
status => FEATURE_HTML5_DEFAULT | FEATURE_M12N10_REC, |
status => FEATURE_HTML5_DEFAULT | FEATURE_M12N10_REC, |
| 1801 |
check_attrs => $GetHTMLAttrsChecker->({}, { |
check_attrs => $GetHTMLAttrsChecker->({ |
| 1802 |
|
## TODO: HTML4 |align|, |noshade|, |size|, |width| |
| 1803 |
|
}, { |
| 1804 |
%HTMLAttrStatus, |
%HTMLAttrStatus, |
| 1805 |
%HTMLM12NCommonAttrStatus, |
%HTMLM12NCommonAttrStatus, |
| 1806 |
align => FEATURE_M12N10_REC_DEPRECATED, |
align => FEATURE_M12N10_REC_DEPRECATED, |
| 2141 |
if ($attr_ns eq '') { |
if ($attr_ns eq '') { |
| 2142 |
$checker = { |
$checker = { |
| 2143 |
accesskey => $HTMLAccesskeyAttrChecker, |
accesskey => $HTMLAccesskeyAttrChecker, |
| 2144 |
|
## TODO: HTML4 |charset| |
| 2145 |
|
## TODO: HTML4 |coords| |
| 2146 |
target => $HTMLTargetAttrChecker, |
target => $HTMLTargetAttrChecker, |
| 2147 |
href => $HTMLURIAttrChecker, |
href => $HTMLURIAttrChecker, |
| 2148 |
ping => $HTMLSpaceURIsAttrChecker, |
ping => $HTMLSpaceURIsAttrChecker, |
| 2149 |
rel => sub { $HTMLLinkTypesAttrChecker->(1, $item, @_) }, |
rel => sub { $HTMLLinkTypesAttrChecker->(1, $item, @_) }, |
| 2150 |
|
## TODO: HTML4 |rev| |
| 2151 |
|
## TODO: HTML4 |shape| |
| 2152 |
media => $HTMLMQAttrChecker, |
media => $HTMLMQAttrChecker, |
| 2153 |
|
## TODO: HTML4/XHTML1 |name| |
| 2154 |
hreflang => $HTMLLanguageTagAttrChecker, |
hreflang => $HTMLLanguageTagAttrChecker, |
| 2155 |
type => $HTMLIMTAttrChecker, |
type => $HTMLIMTAttrChecker, |
| 2156 |
}->{$attr_ln}; |
}->{$attr_ln}; |
| 2837 |
check_attrs => sub { |
check_attrs => sub { |
| 2838 |
my ($self, $item, $element_state) = @_; |
my ($self, $item, $element_state) = @_; |
| 2839 |
$GetHTMLAttrsChecker->({ |
$GetHTMLAttrsChecker->({ |
| 2840 |
|
align => $GetHTMLEnumeratedAttrChecker->({ |
| 2841 |
|
bottom => 1, middle => 1, top => 1, left => 1, right => 1, |
| 2842 |
|
}), |
| 2843 |
alt => sub { }, ## NOTE: No syntactical requirement |
alt => sub { }, ## NOTE: No syntactical requirement |
| 2844 |
|
border => $GetHTMLNonNegativeIntegerAttrChecker->(sub { 1 }), |
| 2845 |
src => $HTMLURIAttrChecker, |
src => $HTMLURIAttrChecker, |
| 2846 |
usemap => $HTMLUsemapAttrChecker, |
usemap => $HTMLUsemapAttrChecker, |
| 2847 |
|
hspace => $GetHTMLNonNegativeIntegerAttrChecker->(sub { 1 }), |
| 2848 |
ismap => sub { |
ismap => sub { |
| 2849 |
my ($self, $attr, $parent_item) = @_; |
my ($self, $attr, $parent_item) = @_; |
| 2850 |
if (not $self->{flag}->{in_a_href}) { |
if (not $self->{flag}->{in_a_href}) { |
| 2854 |
} |
} |
| 2855 |
$GetHTMLBooleanAttrChecker->('ismap')->($self, $attr, $parent_item); |
$GetHTMLBooleanAttrChecker->('ismap')->($self, $attr, $parent_item); |
| 2856 |
}, |
}, |
| 2857 |
|
longdesc => $HTMLURIAttrChecker, |
| 2858 |
|
## TODO: HTML4 |name| |
| 2859 |
## TODO: height |
## TODO: height |
| 2860 |
|
vspace => $GetHTMLNonNegativeIntegerAttrChecker->(sub { 1 }), |
| 2861 |
## TODO: width |
## TODO: width |
| 2862 |
}, { |
}, { |
| 2863 |
%HTMLAttrStatus, |
%HTMLAttrStatus, |
| 2993 |
check_attrs => sub { |
check_attrs => sub { |
| 2994 |
my ($self, $item, $element_state) = @_; |
my ($self, $item, $element_state) = @_; |
| 2995 |
$GetHTMLAttrsChecker->({ |
$GetHTMLAttrsChecker->({ |
| 2996 |
|
align => $GetHTMLEnumeratedAttrChecker->({ |
| 2997 |
|
bottom => 1, middle => 1, top => 1, left => 1, right => 1, |
| 2998 |
|
}), |
| 2999 |
|
archive => $HTMLSpaceURIsAttrChecker, |
| 3000 |
|
## TODO: Relative to @codebase |
| 3001 |
|
border => $GetHTMLNonNegativeIntegerAttrChecker->(sub { 1 }), |
| 3002 |
|
classid => $HTMLURIAttrChecker, |
| 3003 |
|
codebase => $HTMLURIAttrChecker, |
| 3004 |
|
codetype => $HTMLIMTAttrChecker, |
| 3005 |
|
## TODO: "RECOMMENDED when |classid| is specified" [HTML4] |
| 3006 |
data => $HTMLURIAttrChecker, |
data => $HTMLURIAttrChecker, |
| 3007 |
|
declare => $GetHTMLBooleanAttrChecker->('declare'), |
| 3008 |
|
## NOTE: "The object MUST be instantiated by a subsequent OBJECT ..." |
| 3009 |
|
## [HTML4] but we don't know how to test this. |
| 3010 |
|
hspace => $GetHTMLNonNegativeIntegerAttrChecker->(sub { 1 }), |
| 3011 |
|
## TODO: HTML4 |name| |
| 3012 |
|
standby => sub {}, ## NOTE: %Text; in HTML4 |
| 3013 |
type => $HTMLIMTAttrChecker, |
type => $HTMLIMTAttrChecker, |
| 3014 |
usemap => $HTMLUsemapAttrChecker, |
usemap => $HTMLUsemapAttrChecker, |
| 3015 |
|
vspace => $GetHTMLNonNegativeIntegerAttrChecker->(sub { 1 }), |
| 3016 |
## TODO: width |
## TODO: width |
| 3017 |
## TODO: height |
## TODO: height |
| 3018 |
}, { |
}, { |
| 3106 |
my ($self, $item, $element_state) = @_; |
my ($self, $item, $element_state) = @_; |
| 3107 |
$GetHTMLAttrsChecker->({ |
$GetHTMLAttrsChecker->({ |
| 3108 |
name => sub { }, |
name => sub { }, |
| 3109 |
|
type => $HTMLIMTAttrChecker, |
| 3110 |
value => sub { }, |
value => sub { }, |
| 3111 |
|
valuetype => $GetHTMLEnumeratedAttrChecker->({ |
| 3112 |
|
data => 1, ref => 1, object => 1, |
| 3113 |
|
}), |
| 3114 |
}, { |
}, { |
| 3115 |
%HTMLAttrStatus, |
%HTMLAttrStatus, |
| 3116 |
id => FEATURE_HTML5_DEFAULT | FEATURE_M12N10_REC, |
id => FEATURE_HTML5_DEFAULT | FEATURE_M12N10_REC, |
| 3127 |
$self->{onerror}->(node => $item->{node}, |
$self->{onerror}->(node => $item->{node}, |
| 3128 |
type => 'attribute missing:value'); |
type => 'attribute missing:value'); |
| 3129 |
} |
} |
|
|
|
|
$element_state->{uri_info}->{value}->{type}->{resource} = 1; |
|
| 3130 |
}, |
}, |
| 3131 |
}; |
}; |
| 3132 |
|
|
| 3295 |
$self->{map}->{$value} ||= $attr; |
$self->{map}->{$value} ||= $attr; |
| 3296 |
$has_id = 1; |
$has_id = 1; |
| 3297 |
}, |
}, |
| 3298 |
|
## TODO: HTML4 |name| |
| 3299 |
}, { |
}, { |
| 3300 |
%HTMLAttrStatus, |
%HTMLAttrStatus, |
| 3301 |
class => FEATURE_HTML5_DEFAULT | FEATURE_M12N10_REC, |
class => FEATURE_HTML5_DEFAULT | FEATURE_M12N10_REC, |
| 3363 |
type => 'coords:syntax error'); |
type => 'coords:syntax error'); |
| 3364 |
} |
} |
| 3365 |
}, |
}, |
| 3366 |
target => $HTMLTargetAttrChecker, |
nohref => $GetHTMLBooleanAttrChecker->('nohref'), |
| 3367 |
|
target => $HTMLTargetAttrChecker, |
| 3368 |
href => $HTMLURIAttrChecker, |
href => $HTMLURIAttrChecker, |
| 3369 |
ping => $HTMLSpaceURIsAttrChecker, |
ping => $HTMLSpaceURIsAttrChecker, |
| 3370 |
rel => sub { $HTMLLinkTypesAttrChecker->(1, $item, @_) }, |
rel => sub { $HTMLLinkTypesAttrChecker->(1, $item, @_) }, |
| 3528 |
%HTMLChecker, |
%HTMLChecker, |
| 3529 |
status => FEATURE_HTML5_DEFAULT | FEATURE_M12N10_REC, |
status => FEATURE_HTML5_DEFAULT | FEATURE_M12N10_REC, |
| 3530 |
check_attrs => $GetHTMLAttrsChecker->({ |
check_attrs => $GetHTMLAttrsChecker->({ |
| 3531 |
|
## TODO: HTML4 |cellspacing|, |cellpadding| |
| 3532 |
frame => $GetHTMLEnumeratedAttrChecker->({ |
frame => $GetHTMLEnumeratedAttrChecker->({ |
| 3533 |
void => 1, above => 1, below => 1, hsides => 1, vsides => 1, |
void => 1, above => 1, below => 1, hsides => 1, vsides => 1, |
| 3534 |
lhs => 1, rhs => 1, box => 1, border => 1, |
lhs => 1, rhs => 1, box => 1, border => 1, |
| 3679 |
|
|
| 3680 |
my %cellalign = ( |
my %cellalign = ( |
| 3681 |
## HTML4 %cellhalign; |
## HTML4 %cellhalign; |
| 3682 |
|
align => $GetHTMLEnumeratedAttrChecker->({ |
| 3683 |
|
left => 1, center => 1, right => 1, justify => 1, char => 1, |
| 3684 |
|
}), |
| 3685 |
|
char => sub { |
| 3686 |
|
my ($self, $attr) = @_; |
| 3687 |
|
|
| 3688 |
|
## NOTE: "character" or |%Character;| in HTML4. |
| 3689 |
|
|
| 3690 |
|
my $value = $attr->value; |
| 3691 |
|
if (length $value != 1) { |
| 3692 |
|
$self->{onerror}->(node => $attr, type => 'char:syntax error', |
| 3693 |
|
level => $self->{fact_level}); ## TODO: type |
| 3694 |
|
} |
| 3695 |
|
}, |
| 3696 |
|
## TODO: HTML4 |charoff| |
| 3697 |
## HTML4 %cellvalign; |
## HTML4 %cellvalign; |
| 3698 |
|
valign => $GetHTMLEnumeratedAttrChecker->({ |
| 3699 |
|
top => 1, middle => 1, bottom => 1, baseline => 1, |
| 3700 |
|
}), |
| 3701 |
); |
); |
| 3702 |
|
|
| 3703 |
$Element->{$HTML_NS}->{colgroup} = { |
$Element->{$HTML_NS}->{colgroup} = { |
| 3875 |
axis => sub {}, ## NOTE: HTML4 "cdata", comma-separated |
axis => sub {}, ## NOTE: HTML4 "cdata", comma-separated |
| 3876 |
bgcolor => $HTMLColorAttrChecker, |
bgcolor => $HTMLColorAttrChecker, |
| 3877 |
colspan => $GetHTMLNonNegativeIntegerAttrChecker->(sub { shift > 0 }), |
colspan => $GetHTMLNonNegativeIntegerAttrChecker->(sub { shift > 0 }), |
| 3878 |
|
## TODO: HTML5 |headers| |
| 3879 |
nowrap => $GetHTMLBooleanAttrChecker->('nowrap'), |
nowrap => $GetHTMLBooleanAttrChecker->('nowrap'), |
| 3880 |
rowspan => $GetHTMLNonNegativeIntegerAttrChecker->(sub { shift > 0 }), |
rowspan => $GetHTMLNonNegativeIntegerAttrChecker->(sub { shift > 0 }), |
| 3881 |
scope => $GetHTMLEnumeratedAttrChecker |
scope => $GetHTMLEnumeratedAttrChecker |
| 3910 |
axis => sub {}, ## NOTE: HTML4 "cdata", comma-separated |
axis => sub {}, ## NOTE: HTML4 "cdata", comma-separated |
| 3911 |
bgcolor => $HTMLColorAttrChecker, |
bgcolor => $HTMLColorAttrChecker, |
| 3912 |
colspan => $GetHTMLNonNegativeIntegerAttrChecker->(sub { shift > 0 }), |
colspan => $GetHTMLNonNegativeIntegerAttrChecker->(sub { shift > 0 }), |
| 3913 |
|
## TODO: HTML5 |headers| |
| 3914 |
nowrap => $GetHTMLBooleanAttrChecker->('nowrap'), |
nowrap => $GetHTMLBooleanAttrChecker->('nowrap'), |
| 3915 |
rowspan => $GetHTMLNonNegativeIntegerAttrChecker->(sub { shift > 0 }), |
rowspan => $GetHTMLNonNegativeIntegerAttrChecker->(sub { shift > 0 }), |
| 3916 |
scope => $GetHTMLEnumeratedAttrChecker |
scope => $GetHTMLEnumeratedAttrChecker |
| 4416 |
%HTMLChecker, |
%HTMLChecker, |
| 4417 |
status => FEATURE_HTML5_DEFAULT | FEATURE_M12N10_REC, |
status => FEATURE_HTML5_DEFAULT | FEATURE_M12N10_REC, |
| 4418 |
check_attrs => $GetHTMLAttrsChecker->({ |
check_attrs => $GetHTMLAttrsChecker->({ |
| 4419 |
|
## TODO: HTML4 |charset| |
| 4420 |
|
## TODO: HTML4 |language| |
| 4421 |
src => $HTMLURIAttrChecker, |
src => $HTMLURIAttrChecker, |
| 4422 |
defer => $GetHTMLBooleanAttrChecker->('defer'), |
defer => $GetHTMLBooleanAttrChecker->('defer'), |
| 4423 |
async => $GetHTMLBooleanAttrChecker->('async'), |
async => $GetHTMLBooleanAttrChecker->('async'), |
| 5011 |
$Element->{$HTML_NS}->{font} = { |
$Element->{$HTML_NS}->{font} = { |
| 5012 |
%HTMLTransparentChecker, |
%HTMLTransparentChecker, |
| 5013 |
status => FEATURE_HTML5_AT_RISK | FEATURE_M12N10_REC_DEPRECATED, |
status => FEATURE_HTML5_AT_RISK | FEATURE_M12N10_REC_DEPRECATED, |
| 5014 |
check_attrs => $GetHTMLAttrsChecker->({ ## TODO |
check_attrs => $GetHTMLAttrsChecker->({ |
| 5015 |
|
## TODO: HTML4 |size|, |color|, |face| |
| 5016 |
|
## TODO: HTML5 |style| |
| 5017 |
}, { |
}, { |
| 5018 |
%HTMLAttrStatus, |
%HTMLAttrStatus, |
| 5019 |
class => FEATURE_HTML5_DEFAULT | FEATURE_M12N10_REC, |
class => FEATURE_HTML5_DEFAULT | FEATURE_M12N10_REC, |