PhpCss\Parser\PseudoClass::parse PHP Method

parse() public method

public parse ( )
    public function parse()
    {
        $token = $this->read(Scanner\Token::PSEUDO_CLASS);
        $name = substr($token->content, 1);
        if ($mode = $this->getParameterMode($name)) {
            if ($mode == self::PARAMETER_NONE) {
                return new Ast\Selector\Simple\PseudoClass($name);
            }
            $this->read(Scanner\Token::PARENTHESES_START);
            $this->ignore(Scanner\Token::WHITESPACE);
            switch ($mode) {
                case self::PARAMETER_IDENTIFIER:
                    $parameterToken = $this->read(Scanner\Token::IDENTIFIER);
                    $class = new Ast\Selector\Simple\PseudoClass\Language($parameterToken->content);
                    break;
                case self::PARAMETER_POSITION:
                    $parameterToken = $this->read(array(Scanner\Token::IDENTIFIER, Scanner\Token::NUMBER, Scanner\Token::PSEUDO_CLASS_POSITION));
                    $class = new Ast\Selector\Simple\PseudoClass($name, $this->createPseudoClassPosition($parameterToken->content));
                    break;
                case self::PARAMETER_SIMPLE_SELECTOR:
                    $parameterToken = $this->lookahead(array(Scanner\Token::IDENTIFIER, Scanner\Token::ID_SELECTOR, Scanner\Token::CLASS_SELECTOR, Scanner\Token::PSEUDO_CLASS, Scanner\Token::PSEUDO_ELEMENT, Scanner\Token::ATTRIBUTE_SELECTOR_START));
                    switch ($parameterToken->type) {
                        case Scanner\Token::IDENTIFIER:
                        case Scanner\Token::ID_SELECTOR:
                        case Scanner\Token::CLASS_SELECTOR:
                            $this->read($parameterToken->type);
                            $parameter = $this->createSelector($parameterToken);
                            break;
                        case Scanner\Token::PSEUDO_CLASS:
                            if ($parameterToken->content == ':not') {
                                throw new \LogicException('not not allowed in not - @todo implement exception');
                            }
                            $parameter = $this->delegate(PseudoClass::CLASS);
                            break;
                        case Scanner\Token::PSEUDO_ELEMENT:
                            $this->read($parameterToken->type);
                            $parameter = $this->createPseudoElement($parameterToken);
                            break;
                        case Scanner\Token::ATTRIBUTE_SELECTOR_START:
                            $this->read($parameterToken->type);
                            $parameter = $this->delegate(Attribute::CLASS);
                            break;
                        default:
                            $parameter = NULL;
                    }
                    $class = new Ast\Selector\Simple\PseudoClass($name, $parameter);
                    break;
                default:
                    $class = NULL;
            }
            $this->ignore(Scanner\Token::WHITESPACE);
            $this->read(Scanner\Token::PARENTHESES_END);
            return $class;
        }
        throw new PhpCss\Exception\UnknownPseudoClass($token);
    }