function detect_applicable_tag($selector) { switch (selector_get_type($selector)) { case SELECTOR_TAG: return $selector[1]; case SELECTOR_SEQUENCE: foreach ($selector[1] as $subselector) { $tag = $this->detect_applicable_tag($subselector); if ($tag) { return $tag; } } return null; default: return null; } }
function css_find_pseudoelement($selector) { $selector_type = selector_get_type($selector); switch ($selector_type) { case SELECTOR_PSEUDOELEMENT_BEFORE: case SELECTOR_PSEUDOELEMENT_AFTER: return $selector_type; case SELECTOR_SEQUENCE: foreach ($selector[1] as $subselector) { $pe = css_find_pseudoelement($subselector); if (!is_null($pe)) { return $pe; } } return null; default: return null; } }