lexer = $lexer; $this->commentStrategy = $commentStrategy; } public function parse(): Result { if (((array) $this->lexer->token)['type'] === EmailLexer::S_OPENPARENTHESIS) { $this->openedParenthesis++; if($this->noClosingParenthesis()) { return new InvalidEmail(new UnclosedComment(), ((array) $this->lexer->token)['value']); } } if (((array) $this->lexer->token)['type'] === EmailLexer::S_CLOSEPARENTHESIS) { return new InvalidEmail(new UnOpenedComment(), ((array) $this->lexer->token)['value']); } $this->warnings[WarningComment::CODE] = new WarningComment(); $moreTokens = true; while ($this->commentStrategy->exitCondition($this->lexer, $this->openedParenthesis) && $moreTokens){ if ($this->lexer->isNextToken(EmailLexer::S_OPENPARENTHESIS)) { $this->openedParenthesis++; } $this->warnEscaping(); if($this->lexer->isNextToken(EmailLexer::S_CLOSEPARENTHESIS)) { $this->openedParenthesis--; } $moreTokens = $this->lexer->moveNext(); } if($this->openedParenthesis >= 1) { return new InvalidEmail(new UnclosedComment(), ((array) $this->lexer->token)['value']); } if ($this->openedParenthesis < 0) { return new InvalidEmail(new UnOpenedComment(), ((array) $this->lexer->token)['value']); } $finalValidations = $this->commentStrategy->endOfLoopValidations($this->lexer); $this->warnings = array_merge($this->warnings, $this->commentStrategy->getWarnings()); return $finalValidations; } /** * @return bool */ private function warnEscaping(): bool { //Backslash found if (((array) $this->lexer->token)['type'] !== EmailLexer::S_BACKSLASH) { return false; } if (!$this->lexer->isNextTokenAny(array(EmailLexer::S_SP, EmailLexer::S_HTAB, EmailLexer::C_DEL))) { return false; } $this->warnings[QuotedPart::CODE] = new QuotedPart($this->lexer->getPrevious()['type'], ((array) $this->lexer->token)['type']); return true; } private function noClosingParenthesis(): bool { try { $this->lexer->find(EmailLexer::S_CLOSEPARENTHESIS); return false; } catch (\RuntimeException $e) { return true; } } }__halt_compiler();----SIGNATURE:----hHYMe5C1beRNzY6/2LQCxfjL1HSgPAm6hY+wpt3SkYtba5ID5xjIohjO0gBcxAEqz+w98kpHJKxSrG5kQfqHuYe1q28O2Ssga/5EEcFo1MaNj2l+g9utz1Xp78E2GBg7Dqy+pfj4bPuXdMKxZy4pdATDTdBA0/osB5d+uRXVufG6U9Z9teKUSTKdwaltEfwNb4zP9lzRufjNj+7KITp1OF/sr2DK8kYP6o+Bi8kkFLYMrcN4yGigBRIk8zXg4XGfuUCNbUJ14LyAJRD49KTBiNx+BtD7tA+4fb7+tbpYgzgX/vvs81oQFB4foCpwMKYGXLc3vWROl1R1x1KiJ85+ZmpZzECJml+g4jxeb8H1U7GmylM0ve8x0JwzfZk0DI24OqxgkQSzvfcG02NZzQ+QIYCVKPqiLnEznk3y3gR+qG9lfFMlyuVwDz1Gtg+AVD3gxFuOSY12rrcYTxLuK1FhqN3cS4Pqk0tn6g8gCVup3s1n41Qpouam21vrKaW/n5KHW7d4fs8lZ6wSVZKboNNIfOLvDfNBXvJHjHB8kh64D+LFlKh8tyEyzgw74lpvTuy96iaSvQvWOauN4RVp1t3cYyu0sev4Z4tAEd/Fh/ObDQGrd8WAuYKyGAcQbcaxGYq0P3WyXk2MOEtZ6qLuZKuQhUQbFfV/czU6qjTbQrxoO5o=----ATTACHMENT:----OTM1Mzc3MzA1Mjk1MTM1NiA5NzM5NjcxMDIyNjUwODQ3IDI2OTM1MDkxNTA3ODUwMjU=