protected function parseLine($line)
    {
        // Start of a new component
        if ('BEGIN:' === strtoupper(substr($line, 0, 6))) {
            if (substr($line, 6) === $this->root->name) {
                throw new ParseException('Invalid MimeDir file. Unexpected component: "'.$line.'" in document type '.$this->root->name);
            }
            $component = $this->root->createComponent(substr($line, 6), [], false);

            while (true) {
                // Reading until we hit END:
                $line = $this->readLine();
                if ('END:' === strtoupper(substr($line, 0, 4))) {
                    break;
                }
                $result = $this->parseLine($line);
                if ($result) {
                    $component->add($result);
                }
            }

            $name = strtoupper(substr($line, 4));
            if ($name !== $component->name) {
                throw new ParseException('Invalid MimeDir file. expected: "END:'.$component->name.'" got: "END:'.$name.'"');
            }

            return $component;
        } else {
            // Property reader
            $property = $this->readProperty($line);
            if (!$property) {
                // Ignored line
                return false;
            }

            return $property;
        }
    }
protected function parseLine($line)
    {
        // Start of a new component
        if ('BEGIN:' === strtoupper(substr($line, 0, 6))) {
            if (substr($line, 6) === $this->root->name) {
                throw new ParseException('Invalid MimeDir file. Unexpected component: "'.$line.'" in document type '.$this->root->name);
            }
            $component = $this->root->createComponent(substr($line, 6), [], false);

            while (true) {
                // Reading until we hit END:
                $line = $this->readLine();
                if ('END:' === strtoupper(substr($line, 0, 4))) {
                    break;
                }
                $result = $this->parseLine($line);
                if ($result) {
                    $component->add($result);
                }
            }

            $name = strtoupper(substr($line, 4));
            if ($name !== $component->name) {
                throw new ParseException('Invalid MimeDir file. expected: "END:'.$component->name.'" got: "END:'.$name.'"');
            }

            return $component;
        } else {
            // Property reader
            $property = $this->readProperty($line);
            if (!$property) {
                // Ignored line
                return false;
            }

            return $property;
        }
    }
protected function parseLine ( $ line ) { // Start of a new component if ( 'BEGIN:' === strtoupper ( substr ( $ line , 0 , 6 ) ) ) { if ( substr ( $ line , 6 ) === $ this -> root -> name ) { throw new ParseException ( 'Invalid MimeDir file. Unexpected component: "' . $ line . '" in document type ' . $ this -> root -> name ) ; } $ component = $ this -> root -> createComponent ( substr ( $ line , 6 ) , [ ] , false ) ; while ( true ) { // Reading until we hit END: $ line = $ this -> readLine ( ) ; if ( 'END:' === strtoupper ( substr ( $ line , 0 , 4 ) ) ) { break ; } $ result = $ this -> parseLine ( $ line ) ; if ( $ result ) { $ component -> add ( $ result ) ; } } $ name = strtoupper ( substr ( $ line , 4 ) ) ; if ( $ name !== $ component -> name ) { throw new ParseException ( 'Invalid MimeDir file. expected: "END:' . $ component -> name . '" got: "END:' . $ name . '"' ) ; } return $ component ; } else { // Property reader $ property = $ this -> readProperty ( $ line ) ; if ( ! $ property ) { // Ignored line return false ; } return $ property ; } }
Parses a line, and if it hits a component, it will also attempt to parse
the entire component.

@param string $line Unfolded line

@return Node
Parses a line and if it hits a component it will also attempt to parse the entire component .