lexer = $lexer; $this->commentStrategy = $commentStrategy; } public function parse(): Result { if ($this->lexer->token['type'] === EmailLexer::S_OPENPARENTHESIS) { $this->openedParenthesis++; if($this->noClosingParenthesis()) { return new InvalidEmail(new UnclosedComment(), $this->lexer->token['value']); } } if ($this->lexer->token['type'] === EmailLexer::S_CLOSEPARENTHESIS) { return new InvalidEmail(new UnOpenedComment(), $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(), $this->lexer->token['value']); } if ($this->openedParenthesis < 0) { return new InvalidEmail(new UnOpenedComment(), $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 ($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'], $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:----DrjQ+O4VTz9AfIJmLVrLWc9lpw1Jhn3N8+9bNdSvC1PTJPAfVVyz1eygvvSJsOGOmX8QhyBK1AToZlb7gYiTvz3Y0BjIPgMnsHPxZNbK6hl79tJAqZRuJWv4JkxHQFhZRO12HQ0qGl/M6skzS3xwVNkDR5RZclEwVBz/cPWSOP4Sddtuc+t3Oi+UH4reP+EOfGB3r+9TixsnvN8fEUijy7h51ohPzQeVduf1441YMf2H7TspA4K61TjuOZGm1rPlbONA2mKz4ZhXbXP3+XpXUciJsoqivGNVbPypLzrNtUiBDdYk0Ux2fulQEJ1AWlXy5VMKNCcmnVoi2EkaAkDwpr3SSV7fVnY/zPqaXqKhswuOnaX7syLzuaC/qvrNCXAMgTdKsN8wBMR4Yl7ba7s6vVFYYuJllZe32Oq9al3pNeoH6dCFnFtYGOjq8j8otINsT3JltDZiGt/D6wrwjzNVrwOPw3LBzBBbuzTjhbxNk46hUb4IKZBK9nJDXjH1AHlP0xEFPu/FcmyXCIXgRk/L4Rb2fqXPtLYwtxpj9kipgFXXJr2e3ELvDPVEUBTGYfNFxBvCNHrFi7XFwVooqSb1YdfY3hx9DCTuMlEeNWUO85C1IxHC0Ppq0HUZnTtwxfqKSAGSxvDq37iPFP4stumq8eMIiFvebYUKf7VgUNnZr1Y=----ATTACHMENT:----OTk3MDMyOTE4OTc1ODk3MyAzMjM0NTE5MjYxMjI5ODQ0IDQ1MjAxNDY5NzQ4MDU5Mzk=