calls); $this->writeCall(['quote_end', [], $last_call[2]]); $this->process(); $this->callWriter->finalise(); unset($this->callWriter); } /** @inheritdoc */ public function process() { $quoteDepth = 1; foreach ($this->calls as $call) { switch ($call[0]) { /** @noinspection PhpMissingBreakStatementInspection */ case 'quote_start': $this->quoteCalls[] = ['quote_open', [], $call[2]]; // fallthrough case 'quote_newline': $quoteLength = $this->getDepth($call[1][0]); if ($quoteLength > $quoteDepth) { $quoteDiff = $quoteLength - $quoteDepth; for ($i = 1; $i <= $quoteDiff; $i++) { $this->quoteCalls[] = ['quote_open', [], $call[2]]; } } elseif ($quoteLength < $quoteDepth) { $quoteDiff = $quoteDepth - $quoteLength; for ($i = 1; $i <= $quoteDiff; $i++) { $this->quoteCalls[] = ['quote_close', [], $call[2]]; } } elseif ($call[0] != 'quote_start') { $this->quoteCalls[] = ['linebreak', [], $call[2]]; } $quoteDepth = $quoteLength; break; case 'quote_end': if ($quoteDepth > 1) { $quoteDiff = $quoteDepth - 1; for ($i = 1; $i <= $quoteDiff; $i++) { $this->quoteCalls[] = ['quote_close', [], $call[2]]; } } $this->quoteCalls[] = ['quote_close', [], $call[2]]; $this->callWriter->writeCalls($this->quoteCalls); break; default: $this->quoteCalls[] = $call; break; } } return $this->callWriter; } /** * @param string $marker * @return int */ protected function getDepth($marker) { preg_match('/>{1,}/', $marker, $matches); $quoteLength = strlen($matches[0]); return $quoteLength; } }