Captioning\Format\SubripFile::parse PHP Method

parse() public method

public parse ( )
    public function parse()
    {
        $matches = array();
        $res = preg_match($this->options['_requireStrictFileFormat'] ? self::PATTERN_STRICT : self::PATTERN_LOOSE, $this->fileContent, $matches);
        if ($res === false || $res === 0) {
            throw new \Exception($this->filename . ' is not a proper .srt file.');
        }
        $this->setLineEnding($matches[1]);
        $bom = pack('CCC', 0xef, 0xbb, 0xbf);
        $matches = explode($this->lineEnding . $this->lineEnding, trim($matches[0], $bom . $this->lineEnding));
        $subtitleOrder = 1;
        $subtitleTime = '';
        foreach ($matches as $match) {
            $subtitle = explode($this->lineEnding, $match, 3);
            $timeline = explode(' --> ', $subtitle[1]);
            $subtitleTimeStart = $timeline[0];
            $subtitleTimeEnd = $timeline[1];
            if (!$this->options['_requireStrictFileFormat']) {
                $subtitleTimeStart = $this->cleanUpTimecode($subtitleTimeStart);
                $subtitleTimeEnd = $this->cleanUpTimecode($subtitleTimeEnd);
            }
            $passedValidation = true;
            if ($subtitle[0] != $subtitleOrder++) {
                $errorMsg = 'Invalid subtitle order index: ' . $subtitle[0];
                $passedValidation = false;
            } elseif (!$this->validateTimelines($subtitleTimeStart, $subtitleTimeEnd, !$this->options['_requireStrictFileFormat'])) {
                $errorMsg = 'Ending time invalid: ' . $subtitleTimeEnd;
                $passedValidation = false;
            } elseif ($this->options['_requireStrictFileFormat'] && !$this->validateTimelines($subtitleTime, $subtitleTimeStart, true)) {
                $errorMsg = 'Starting time invalid: ' . $subtitleTimeStart;
                $passedValidation = false;
            }
            if (!$passedValidation) {
                throw new \Exception($this->filename . " is not a proper .srt file. ({$subtitleTimeStart} --> {$subtitleTimeEnd}: {$errorMsg})");
            }
            $subtitleTime = $subtitleTimeEnd;
            $cue = new SubripCue($timeline[0], $timeline[1], $subtitle[2]);
            $cue->setLineEnding($this->lineEnding);
            $this->addCue($cue);
        }
        return $this;
    }