Subversion-Projekte lars-tiefland.laravel_shop

Revision

Revision 148 | Details | Vergleich mit vorheriger | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
148 lars 1
<?php
2
 
3
namespace Egulias\EmailValidator;
4
 
5
use Egulias\EmailValidator\Result\Result;
6
use Egulias\EmailValidator\Result\ValidEmail;
7
use Egulias\EmailValidator\Result\InvalidEmail;
8
use Egulias\EmailValidator\Result\Reason\ExpectingATEXT;
9
 
10
abstract class Parser
11
{
12
    /**
13
     * @var Warning\Warning[]
14
     */
15
    protected $warnings = [];
16
 
17
    /**
18
     * @var EmailLexer
19
     */
20
    protected $lexer;
21
 
22
    /**
23
     * id-left "@" id-right
24
     */
150 lars 25
    abstract protected function parseRightFromAt(): Result;
26
    abstract protected function parseLeftFromAt(): Result;
27
    abstract protected function preLeftParsing(): Result;
148 lars 28
 
29
 
30
    public function __construct(EmailLexer $lexer)
31
    {
150 lars 32
        $this->lexer = $lexer;
148 lars 33
    }
34
 
150 lars 35
    public function parse(string $str): Result
148 lars 36
    {
37
        $this->lexer->setInput($str);
38
 
39
        if ($this->lexer->hasInvalidTokens()) {
150 lars 40
            return new InvalidEmail(new ExpectingATEXT("Invalid tokens found"), $this->lexer->current->value);
148 lars 41
        }
42
 
43
        $preParsingResult = $this->preLeftParsing();
44
        if ($preParsingResult->isInvalid()) {
45
            return $preParsingResult;
46
        }
47
 
48
        $localPartResult = $this->parseLeftFromAt();
49
 
50
        if ($localPartResult->isInvalid()) {
51
            return $localPartResult;
52
        }
53
 
150 lars 54
        $domainPartResult = $this->parseRightFromAt();
148 lars 55
 
56
        if ($domainPartResult->isInvalid()) {
57
            return $domainPartResult;
58
        }
59
 
60
        return new ValidEmail();
61
    }
62
 
63
    /**
64
     * @return Warning\Warning[]
65
     */
150 lars 66
    public function getWarnings(): array
148 lars 67
    {
68
        return $this->warnings;
69
    }
70
 
150 lars 71
    protected function hasAtToken(): bool
148 lars 72
    {
73
        $this->lexer->moveNext();
74
        $this->lexer->moveNext();
75
 
150 lars 76
        return !$this->lexer->current->isA(EmailLexer::S_AT);
148 lars 77
    }
78
}