protected function pseudoFilter()
    {
        if (!$this->match("/^\:/")) {
            return false;
        }

        if (!list($name) = $this->is("identifier")) {
            throw new TextParserException("Invalid identifier", $this);
        }

        $filter = Arr::get($this->_pseudoFilters, $name, null);
        if ($filter === null) {
            throw new TextParserException("Unknown pseudo-filter", $this);
        }

        $input = "";
        if ($this->eq("(")) {
            if (!$input = $this->is($filter["entity"])) {
                throw new TextParserException("Invalid input", $this);
            }

            if (is_array($input)) {
                $input = $input[0];
            }

            if (!$this->eq(")")) {
                throw new TextParserException("Invalid expression", $this);
            }
        }

        $pseudoFilter = CssParserFilterPseudoFactory::getInstance(
            $filter["classname"], $input, $filter["user_def_function"]
        );

        return $pseudoFilter;
    }