public function parse($input = null, $offset = null, $limit = null, $conditions = null) {
        if (is_null($input)) {
            $input = $this->file;
        }

        if (empty($input)) {
            return false;
        }

        $this->init($offset, $limit, $conditions);

        if (strlen($input) <= PHP_MAXPATHLEN && is_readable($input)) {
            $this->file = $input;
            $this->data = $this->parse_file();
        } else {
            $this->file = null;
            $this->file_data = &$input;
            $this->data = $this->parse_string();
        }

        return $this->data !== false;
    }