package CSS::Style; $VERSION = 1.02; use strict; use warnings; use overload '""' => 'to_string'; # create a new CSS::Style object sub new { my $class = shift; my $self = bless {}, $class; $self->{options} = shift; $self->{selectors} = []; $self->{properties} = []; $self->{adaptor} = $self->{options}->{adaptor} || 'CSS::Adaptor'; return $self; } sub add_selector { my $self = shift; my $selector = shift; push @{$self->{selectors}}, $selector; $selector->set_adaptor($self->{adaptor}); } sub add_property { my $self = shift; my $property = shift; push @{$self->{properties}}, $property; $property->set_adaptor($self->{adaptor}); } sub set_adaptor { my $self = shift; my $adaptor = shift; # set adaptor $self->{adaptor} = $adaptor; # recurse adaptor $_->set_adaptor($adaptor) for(@{$self->{selectors}}); $_->set_adaptor($adaptor) for(@{$self->{properties}}); } sub selectors { my $self = shift; eval "use $self->{adaptor}"; my $adaptor_obj = new $self->{adaptor}; return $adaptor_obj->output_selectors($self->{selectors}); } sub properties { my $self = shift; eval "use $self->{adaptor}"; my $adaptor_obj = new $self->{adaptor}; return $adaptor_obj->output_properties($self->{properties}); } sub to_string { my $self = shift; eval "use $self->{adaptor}"; my $adaptor_obj = new $self->{adaptor}; return $adaptor_obj->output_rule($self); } sub get_property_by_name { my ($self, $prop_name) = @_; for my $prop (@{$self->{properties}}){ if ($prop->{property} eq $prop_name){ return $prop; } } return 0; } 1; __END__ =head1 NAME CSS::Style - A ruleset in a CSS object tree =head1 SYNOPSIS use CSS; =head1 DESCRIPTION This module represents a ruleset in a CSS object tree. Read the CSS.pm pod for information about the CSS object tree. =head1 METHODS =head2 CONSTRUCTORS =over 4 =item C or C This constructor returns a new C object, with an optional hash of options. adaptor adaptor to use for serialization =back =head2 ACCESSORS =over 4 =item C This method adds a selector to the selector list for the object. C<$selector> is a reference to a CSS::Selector object. =item C This method adds a selector to the property list for the object. C<$property> is a reference to a CSS::Property object. =item C This method sets the current adaptor for the object. =item C This method is used to serialize the ruleset's selectors, using the current adaptor. It returns a string which come from the adaptor's C method. =item C This method is used to serialize the ruleset's properties, using the current adaptor. It returns a string which come from the adaptor's C method. =item C This method is used to serialize the ruleset, using the current adaptor. It returns a string which comes from the adaptor's output_rules() method. =item C Returns the first CSS::Property object with the specified name. Returns zero on failure. =back =head1 AUTHOR Copyright (C) 2003-2004, Cal Henderson =head1 SEE ALSO L, http://www.w3.org/TR/REC-CSS1 =cut