/[suikacvs]/markup/html/whatpm/Whatpm/CSS/Cascade.pm
Suika

Diff of /markup/html/whatpm/Whatpm/CSS/Cascade.pm

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

revision 1.7 by wakaba, Wed Jan 2 07:39:21 2008 UTC revision 1.10 by wakaba, Sun Jan 6 14:15:36 2008 UTC
# Line 10  use Scalar::Util qw/refaddr/; Line 10  use Scalar::Util qw/refaddr/;
10  sub new ($$) {  sub new ($$) {
11    my $self = bless {style_sheets => []}, shift;    my $self = bless {style_sheets => []}, shift;
12    $self->{document} = shift;    $self->{document} = shift;
13    
14      ## Device dependent font size parameters
15      my @scale = (3/5, 3/4, 8/9, 1, 6/5, 3/2, 2/1, 3/1); ## From css3-fonts
16      $self->{font_size}->[$_] = 16 * $scale[$_] for 0..$#scale;
17      ## TODO: Provide better default
18      $self->{get_smaller_font_size} = sub ($$) {
19        #my ($self, $original_px) = @_;
20        return $_[1] / 1.1;
21      };
22      ## TODO: Provide better default
23      $self->{get_larger_font_size} = sub ($$) {
24        #my ($self, $original_px) = @_;
25        return $_[1] * 1.1;
26      };
27      ## $self->{has_invert}: Should be same as
28      ##     $parser->{prop_value}->{'outline-color'}->{invert}.
29    
30    return $self;    return $self;
31  } # new  } # new
32    
# Line 113  sub get_specified_value ($$$) { Line 130  sub get_specified_value ($$$) {
130    ## TODO: Remove {specified_value} caching, once we implement most    ## TODO: Remove {specified_value} caching, once we implement most
131    ## of CSS 2.1 properties and confirm that it makes almost non sence    ## of CSS 2.1 properties and confirm that it makes almost non sence
132    ## because of its duplication with {computed_value} caching.    ## because of its duplication with {computed_value} caching.
133      
134      ## NOTE: |top| computation refers |bottom| and vice versa.
135      ## |left| does |right| and vice versa.
136    
137    my $eid = refaddr $element;    my $eid = refaddr $element;
138    unless (exists $self->{specified_value}->{$eid}->{$prop_name}) {    unless (exists $self->{specified_value}->{$eid}->{$prop_name}) {
139      my $cascaded = $self->get_cascaded_value ($element, $prop_name);      my $cascaded = $self->get_cascaded_value ($element, $prop_name);
# Line 146  sub get_specified_value ($$$) { Line 166  sub get_specified_value ($$$) {
166    return $self->{specified_value}->{$eid}->{$prop_name};    return $self->{specified_value}->{$eid}->{$prop_name};
167  } # get_specified_value  } # get_specified_value
168    
169    sub get_specified_value_no_inherit ($$$) {
170      my ($self, $element, $prop_name) = @_;
171    
172      my $specified = $self->get_specified_value ($element, $prop_name);
173      if (defined $specified and $specified->[0] eq 'INHERIT') {
174        ## ISSUE: CSS 2.1 does not say to resolve computed value of the parent.
175        ## However, it is necessary for some cases (see
176        ## <http://suika.fam.cx/gate/2005/sw/inherit>).  In addition,
177        ## the initial value is not a computed value for some properties.
178        my $parent_element = $element->manakai_parent_element;
179        if (defined $parent_element) {
180          $specified = $self->get_computed_value ($parent_element, $prop_name);
181        } else {
182          my $prop_def = $Whatpm::CSS::Parser::Prop->{$prop_name};
183          $specified = $prop_def->{initial};
184        }
185        ## NOTE: Because of this handling, {compute} codes must be
186        ## idempotent.
187      }
188      return $specified;
189    } # get_specified_value_no_inherit
190    
191  sub get_computed_value ($$$) {  sub get_computed_value ($$$) {
192    my ($self, $element, $prop_name) = @_;    my ($self, $element, $prop_name) = @_;
193    
# Line 153  sub get_computed_value ($$$) { Line 195  sub get_computed_value ($$$) {
195    unless (exists $self->{computed_value}->{$eid}->{$prop_name}) {    unless (exists $self->{computed_value}->{$eid}->{$prop_name}) {
196      my $prop_def = $Whatpm::CSS::Parser::Prop->{$prop_name};      my $prop_def = $Whatpm::CSS::Parser::Prop->{$prop_name};
197      if (defined $prop_def) {      if (defined $prop_def) {
198        my $specified = $self->get_specified_value ($element, $prop_name);        if ($prop_def->{compute_multiple}) {
199        if (defined $specified and $specified->[0] eq 'INHERIT') {          $prop_def->{compute_multiple}->($self, $element, $eid, $prop_name);
200          ## ISSUE: CSS 2.1 does not say to resolve computed value of the parent.        } else {
201          ## However, it is necessary for some cases (see          my $specified = $self->get_specified_value_no_inherit
202          ## <http://suika.fam.cx/gate/2005/sw/inherit>).  In addition,              ($element, $prop_name);
203          ## the initial value is not a computed value for some properties.          $self->{computed_value}->{$eid}->{$prop_name}
204          my $parent_element = $element->manakai_parent_element;              = $prop_def->{compute}->($self, $element, $prop_name, $specified);
         if (defined $parent_element) {  
           $specified = $self->get_computed_value ($parent_element, $prop_name);  
         } else {  
           $specified = $prop_def->{compute}->($self, $element, $prop_name,  
                                               $prop_def->{initial});  
         }  
         ## NOTE: Because of this handling, {compute} codes must be  
         ## idempotent.  
205        }        }
         
       $self->{computed_value}->{$eid}->{$prop_name}  
           = $prop_def->{compute}->($self, $element, $prop_name, $specified);  
206      } else {      } else {
207        $self->{computed_value}->{$eid}->{$prop_name} = undef;        $self->{computed_value}->{$eid}->{$prop_name} = undef;
208      }      }

Legend:
Removed from v.1.7  
changed lines
  Added in v.1.10

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24