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 CSSRule($selector, $body, $baseurl, $order) { $this->selector = $selector; $this->body =& $body; $this->baseurl = $baseurl; $this->order = $order; $this->specificity = css_selector_specificity($this->selector); $this->pseudoelement = css_find_pseudoelement($this->selector); }
function CSSRule($rule, &$pipeline) { $this->selector = $rule[0]; $this->body = $rule[1]; $this->baseurl = $rule[2]; $this->order = $rule[3]; // Pre-parse property values foreach (array_keys($this->body) as $key) { $handler =& get_css_handler($key); if ($handler) { $value = $this->parse_important($key, $this->body[$key]); $pipeline->push_base_url($this->baseurl); $this->body[$key] = $handler->parse($value, $pipeline); $pipeline->pop_base_url(); } } $this->specificity = css_selector_specificity($this->selector); $this->pseudoelement = css_find_pseudoelement($this->selector); }
function css_selector_specificity($selector) { switch ($selector[0]) { case SELECTOR_ID: return array(1, 0, 0); case SELECTOR_CLASS: return array(0, 1, 0); case SELECTOR_TAG: return array(0, 0, 1); case SELECTOR_TAG_CLASS: return array(0, 1, 1); case SELECTOR_SEQUENCE: $specificity = array(0, 0, 0); foreach ($selector[1] as $subselector) { $s = css_selector_specificity($subselector); $specificity = array($specificity[0] + $s[0], $specificity[1] + $s[1], $specificity[2] + $s[2]); } return $specificity; case SELECTOR_PARENT: return css_selector_specificity($selector[1]); case SELECTOR_PARENT_LOW_PRIORITY: return array(-1, -1, -1); case SELECTOR_DIRECT_PARENT: return css_selector_specificity($selector[1]); case SELECTOR_ATTR: return array(0, 1, 0); case SELECTOR_ATTR_VALUE: return array(0, 1, 0); case SELECTOR_ATTR_VALUE_WORD: return array(0, 1, 0); case SELECTOR_PSEUDOCLASS_LINK: return array(0, 1, 0); case SELECTOR_PSEUDOCLASS_LINK_LOW_PRIORITY: return array(0, 0, 0); case SELECTOR_PSEUDOELEMENT_BEFORE: return array(0, 0, 0); case SELECTOR_PSEUDOELEMENT_AFTER: return array(0, 0, 0); case SELECTOR_LANGUAGE: return array(0, 1, 0); case SELECTOR_ANY: return array(0, 1, 0); default: die("Bad selector while calculating selector specificity:" . $selector[0]); } }