push_base_url($this->baseurl); $this->body->apply($state); $pipeline->pop_base_url(); } function add_property($property) { $this->body->add_property($property); } function CSSRule($rule, &$pipeline) { $this->selector = $rule[0]; $this->body = $rule[1]->copy(); $this->baseurl = $rule[2]; $this->order = $rule[3]; $this->specificity = css_selector_specificity($this->selector); $this->pseudoelement = css_find_pseudoelement($this->selector); } function set_property($key, $value, &$pipeline) { $this->body->set_property_value($key, $value); } function &get_property($key) { return $this->body->get_property_value($key); } function get_order() { return $this->order; } function get_pseudoelement() { return $this->pseudoelement; } function get_selector() { return $this->selector; } function get_specificity() { return $this->specificity; } function match($root) { return match_selector($this->selector, $root); } } function rule_get_selector(&$rule) { return $rule[0]; }; function cmp_rules($r1, $r2) { $a = css_selector_specificity($r1[0]); $b = css_selector_specificity($r2[0]); for ($i=0; $i<=2; $i++) { if ($a[$i] != $b[$i]) { return ($a[$i] < $b[$i]) ? -1 : 1; }; }; // If specificity of selectors is equal, use rules natural order in stylesheet return $r1[3] < $r2[3] ? -1 : 1; } function cmp_rule_objs($r1, $r2) { $a = $r1->get_specificity(); $b = $r2->get_specificity(); for ($i=0; $i<=2; $i++) { if ($a[$i] != $b[$i]) { return ($a[$i] < $b[$i]) ? -1 : 1; }; }; // If specificity of selectors is equal, use rules natural order in stylesheet return $r1->get_order() < $r2->get_order() ? -1 : 1; } ?>