/[suikacvs]/markup/html/whatpm/Whatpm/ContentChecker.pm
Suika

Diff of /markup/html/whatpm/Whatpm/ContentChecker.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.55 by wakaba, Sat Feb 9 11:58:16 2008 UTC revision 1.56 by wakaba, Sun Feb 10 04:09:57 2008 UTC
# Line 205  my $HTMLTransparentElements = { Line 205  my $HTMLTransparentElements = {
205    
206  our $Element = {};  our $Element = {};
207    
208  sub check_document ($$$) {  sub check_document ($$$;$) {
209    my ($self, $doc, $onerror) = @_;    my ($self, $doc, $onerror, $onsubdoc) = @_;
210    $self = bless {}, $self unless ref $self;    $self = bless {}, $self unless ref $self;
211    $self->{onerror} = $onerror;    $self->{onerror} = $onerror;
212      $self->{onsubdoc} = $onsubdoc || sub {
213        warn "A subdocument is not conformance-checked";
214      };
215    
216    $self->{must_level} = 'm';    $self->{must_level} = 'm';
217    $self->{fact_level} = 'f';    $self->{fact_level} = 'f';
# Line 255  sub check_document ($$$) { Line 258  sub check_document ($$$) {
258    ## TODO: Check for other items other than document element    ## TODO: Check for other items other than document element
259    ## (second (errorous) element, text nodes, PI nodes, doctype nodes)    ## (second (errorous) element, text nodes, PI nodes, doctype nodes)
260    
261    my $return = $self->check_element ($docel, $onerror);    my $return = $self->check_element ($docel, $onerror, $onsubdoc);
262    
263    ## TODO: Test for these checks are necessary.    ## TODO: Test for these checks are necessary.
264    my $charset_name = $doc->input_encoding;    my $charset_name = $doc->input_encoding;
# Line 310  sub check_document ($$$) { Line 313  sub check_document ($$$) {
313    return $return;    return $return;
314  } # check_document  } # check_document
315    
316  sub check_element ($$$) {  sub check_element ($$$;$) {
317    my ($self, $el, $onerror) = @_;    my ($self, $el, $onerror, $onsubdoc) = @_;
318    $self = bless {}, $self unless ref $self;    $self = bless {}, $self unless ref $self;
319    $self->{onerror} = $onerror;    $self->{onerror} = $onerror;
320      $self->{onsubdoc} = $onsubdoc || sub {
321        warn "A subdocument is not conformance-checked";
322      };
323    
324    $self->{must_level} = 'm';    $self->{must_level} = 'm';
325    $self->{fact_level} = 'f';    $self->{fact_level} = 'f';
# Line 543  sub _check_get_children ($$$) { Line 549  sub _check_get_children ($$$) {
549    return ($sib, $new_todos);    return ($sib, $new_todos);
550  } # _check_get_children  } # _check_get_children
551    
 sub _get_css_parser ($) {  
   my $self = shift;  
   
   return $self->{css_parser} if $self->{css_parser};  
   
   require Whatpm::CSS::Parser;  
   my $p = Whatpm::CSS::Parser->new;  
   
 #  if ($parse_mode eq 'q') {  
 #    $p->{unitless_px} = 1;  
 #    $p->{hashless_color} = 1;  
 #  }  
   
   $p->{prop}->{$_} = 1 for qw/  
     background background-attachment background-color background-image  
     background-position background-position-x background-position-y  
     background-repeat border border-bottom border-bottom-color  
     border-bottom-style border-bottom-width border-collapse border-color  
     border-left border-left-color  
     border-left-style border-left-width border-right border-right-color  
     border-right-style border-right-width  
     border-spacing -manakai-border-spacing-x -manakai-border-spacing-y  
     border-style border-top border-top-color border-top-style border-top-width  
     border-width bottom  
     caption-side clear clip color content counter-increment counter-reset  
     cursor direction display empty-cells float font  
     font-family font-size font-size-adjust font-stretch  
     font-style font-variant font-weight height left  
     letter-spacing line-height  
     list-style list-style-image list-style-position list-style-type  
     margin margin-bottom margin-left margin-right margin-top marker-offset  
     marks max-height max-width min-height min-width opacity -moz-opacity  
     orphans outline outline-color outline-style outline-width overflow  
     overflow-x overflow-y  
     padding padding-bottom padding-left padding-right padding-top  
     page page-break-after page-break-before page-break-inside  
     position quotes right size table-layout  
     text-align text-decoration text-indent text-transform  
     top unicode-bidi vertical-align visibility white-space width widows  
     word-spacing z-index  
   /;  
   $p->{prop_value}->{display}->{$_} = 1 for qw/  
     block clip inline inline-block inline-table list-item none  
     table table-caption table-cell table-column table-column-group  
     table-header-group table-footer-group table-row table-row-group  
     compact marker  
   /;  
   $p->{prop_value}->{position}->{$_} = 1 for qw/  
     absolute fixed relative static  
   /;  
   $p->{prop_value}->{float}->{$_} = 1 for qw/  
     left right none  
   /;  
   $p->{prop_value}->{clear}->{$_} = 1 for qw/  
     left right none both  
   /;  
   $p->{prop_value}->{direction}->{ltr} = 1;  
   $p->{prop_value}->{direction}->{rtl} = 1;  
   $p->{prop_value}->{marks}->{crop} = 1;  
   $p->{prop_value}->{marks}->{cross} = 1;  
   $p->{prop_value}->{'unicode-bidi'}->{$_} = 1 for qw/  
     normal bidi-override embed  
   /;  
   for my $prop_name (qw/overflow overflow-x overflow-y/) {  
     $p->{prop_value}->{$prop_name}->{$_} = 1 for qw/  
       visible hidden scroll auto -webkit-marquee -moz-hidden-unscrollable  
     /;  
   }  
   $p->{prop_value}->{visibility}->{$_} = 1 for qw/  
     visible hidden collapse  
   /;  
   $p->{prop_value}->{'list-style-type'}->{$_} = 1 for qw/  
     disc circle square decimal decimal-leading-zero  
     lower-roman upper-roman lower-greek lower-latin  
     upper-latin armenian georgian lower-alpha upper-alpha none  
     hebrew cjk-ideographic hiragana katakana hiragana-iroha  
     katakana-iroha  
   /;  
   $p->{prop_value}->{'list-style-position'}->{outside} = 1;  
   $p->{prop_value}->{'list-style-position'}->{inside} = 1;  
   $p->{prop_value}->{'page-break-before'}->{$_} = 1 for qw/  
     auto always avoid left right  
   /;  
   $p->{prop_value}->{'page-break-after'}->{$_} = 1 for qw/  
     auto always avoid left right  
   /;  
   $p->{prop_value}->{'page-break-inside'}->{auto} = 1;  
   $p->{prop_value}->{'page-break-inside'}->{avoid} = 1;  
   $p->{prop_value}->{'background-repeat'}->{$_} = 1 for qw/  
     repeat repeat-x repeat-y no-repeat  
   /;  
   $p->{prop_value}->{'background-attachment'}->{scroll} = 1;  
   $p->{prop_value}->{'background-attachment'}->{fixed} = 1;  
   $p->{prop_value}->{'font-size'}->{$_} = 1 for qw/  
     xx-small x-small small medium large x-large xx-large  
     -manakai-xxx-large -webkit-xxx-large  
     larger smaller  
   /;  
   $p->{prop_value}->{'font-style'}->{normal} = 1;  
   $p->{prop_value}->{'font-style'}->{italic} = 1;  
   $p->{prop_value}->{'font-style'}->{oblique} = 1;  
   $p->{prop_value}->{'font-variant'}->{normal} = 1;  
   $p->{prop_value}->{'font-variant'}->{'small-caps'} = 1;  
   $p->{prop_value}->{'font-stretch'}->{$_} = 1 for  
       qw/normal wider narrower ultra-condensed extra-condensed  
         condensed semi-condensed semi-expanded expanded  
         extra-expanded ultra-expanded/;  
   $p->{prop_value}->{'text-align'}->{$_} = 1 for qw/  
     left right center justify begin end  
   /;  
   $p->{prop_value}->{'text-transform'}->{$_} = 1 for qw/  
     capitalize uppercase lowercase none  
   /;  
   $p->{prop_value}->{'white-space'}->{$_} = 1 for qw/  
     normal pre nowrap pre-line pre-wrap  
   /;  
   $p->{prop_value}->{'text-decoration'}->{$_} = 1 for qw/  
     none blink underline overline line-through  
   /;  
   $p->{prop_value}->{'caption-side'}->{$_} = 1 for qw/  
     top bottom left right  
   /;  
   $p->{prop_value}->{'table-layout'}->{auto} = 1;  
   $p->{prop_value}->{'table-layout'}->{fixed} = 1;  
   $p->{prop_value}->{'border-collapse'}->{collapase} = 1;  
   $p->{prop_value}->{'border-collapse'}->{separate} = 1;  
   $p->{prop_value}->{'empty-cells'}->{show} = 1;  
   $p->{prop_value}->{'empty-cells'}->{hide} = 1;  
   $p->{prop_value}->{cursor}->{$_} = 1 for qw/  
     auto crosshair default pointer move e-resize ne-resize nw-resize n-resize  
     se-resize sw-resize s-resize w-resize text wait help progress  
   /;  
   for my $prop (qw/border-top-style border-left-style  
                    border-bottom-style border-right-style outline-style/) {  
     $p->{prop_value}->{$prop}->{$_} = 1 for qw/  
       none hidden dotted dashed solid double groove ridge inset outset  
     /;  
   }  
   for my $prop (qw/color background-color  
                    border-bottom-color border-left-color border-right-color  
                    border-top-color border-color/) {  
     $p->{prop_value}->{$prop}->{transparent} = 1;  
     $p->{prop_value}->{$prop}->{flavor} = 1;  
     $p->{prop_value}->{$prop}->{'-manakai-default'} = 1;  
   }  
   $p->{prop_value}->{'outline-color'}->{invert} = 1;  
   $p->{prop_value}->{'outline-color'}->{'-manakai-invert-or-currentcolor'} = 1;  
   $p->{pseudo_class}->{$_} = 1 for qw/  
     active checked disabled empty enabled first-child first-of-type  
     focus hover indeterminate last-child last-of-type link only-child  
     only-of-type root target visited  
     lang nth-child nth-last-child nth-of-type nth-last-of-type not  
     -manakai-contains -manakai-current  
   /;  
   $p->{pseudo_element}->{$_} = 1 for qw/  
     after before first-letter first-line  
   /;  
   
   return $self->{css_parser} = $p;  
 } # _get_css_parser  
   
552  =head1 LICENSE  =head1 LICENSE
553    
554  Copyright 2007 Wakaba <w@suika.fam.cx>  Copyright 2007-2008 Wakaba <w@suika.fam.cx>
555    
556  This library is free software; you can redistribute it  This library is free software; you can redistribute it
557  and/or modify it under the same terms as Perl itself.  and/or modify it under the same terms as Perl itself.

Legend:
Removed from v.1.55  
changed lines
  Added in v.1.56

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24