1<?php 2// $Header: /cvsroot/html2ps/css.rules.inc.php,v 1.10 2007/03/23 18:33:34 Konstantin Exp $ 3 4class CSSRule { 5 var $selector; 6 var $body; 7 var $baseurl; 8 var $order; 9 10 var $specificity; 11 var $pseudoelement; 12 13 function apply(&$root, &$state, &$pipeline) { 14 $pipeline->push_base_url($this->baseurl); 15 $this->body->apply($state); 16 $pipeline->pop_base_url(); 17 } 18 19 function add_property($property) { 20 $this->body->add_property($property); 21 } 22 23 function CSSRule($rule, &$pipeline) { 24 $this->selector = $rule[0]; 25 $this->body = $rule[1]->copy(); 26 $this->baseurl = $rule[2]; 27 $this->order = $rule[3]; 28 29 $this->specificity = css_selector_specificity($this->selector); 30 $this->pseudoelement = css_find_pseudoelement($this->selector); 31 } 32 33 function set_property($key, $value, &$pipeline) { 34 $this->body->set_property_value($key, $value); 35 } 36 37 function &get_property($key) { 38 return $this->body->get_property_value($key); 39 } 40 41 function get_order() { return $this->order; } 42 function get_pseudoelement() { return $this->pseudoelement; } 43 function get_selector() { return $this->selector; } 44 function get_specificity() { return $this->specificity; } 45 46 function match($root) { 47 return match_selector($this->selector, $root); 48 } 49} 50 51function rule_get_selector(&$rule) { return $rule[0]; }; 52 53function cmp_rules($r1, $r2) { 54 $a = css_selector_specificity($r1[0]); 55 $b = css_selector_specificity($r2[0]); 56 57 for ($i=0; $i<=2; $i++) { 58 if ($a[$i] != $b[$i]) { return ($a[$i] < $b[$i]) ? -1 : 1; }; 59 }; 60 61 // If specificity of selectors is equal, use rules natural order in stylesheet 62 63 return $r1[3] < $r2[3] ? -1 : 1; 64} 65 66function cmp_rule_objs($r1, $r2) { 67 $a = $r1->get_specificity(); 68 $b = $r2->get_specificity(); 69 70 for ($i=0; $i<=2; $i++) { 71 if ($a[$i] != $b[$i]) { return ($a[$i] < $b[$i]) ? -1 : 1; }; 72 }; 73 74 // If specificity of selectors is equal, use rules natural order in stylesheet 75 76 return $r1->get_order() < $r2->get_order() ? -1 : 1; 77} 78 79?>