Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. DomainLiteral.php

function DomainLiteral::parse

Overrides PartParser::parse

File

vendor/egulias/email-validator/src/Parser/DomainLiteral.php, line 35

Class

DomainLiteral

Namespace

Egulias\EmailValidator\Parser

Code

public function parse() : Result {
    $this->addTagWarnings();
    $IPv6TAG = false;
    $addressLiteral = '';
    do {
        if ($this->lexer->current
            ->isA(EmailLexer::C_NUL)) {
            return new InvalidEmail(new ExpectingDTEXT(), $this->lexer->current->value);
        }
        $this->addObsoleteWarnings();
        if ($this->lexer
            ->isNextTokenAny(array(
            EmailLexer::S_OPENBRACKET,
            EmailLexer::S_OPENBRACKET,
        ))) {
            return new InvalidEmail(new ExpectingDTEXT(), $this->lexer->current->value);
        }
        if ($this->lexer
            ->isNextTokenAny(array(
            EmailLexer::S_HTAB,
            EmailLexer::S_SP,
            EmailLexer::CRLF,
        ))) {
            $this->warnings[CFWSWithFWS::CODE] = new CFWSWithFWS();
            $this->parseFWS();
        }
        if ($this->lexer
            ->isNextToken(EmailLexer::S_CR)) {
            return new InvalidEmail(new CRNoLF(), $this->lexer->current->value);
        }
        if ($this->lexer->current
            ->isA(EmailLexer::S_BACKSLASH)) {
            return new InvalidEmail(new UnusualElements($this->lexer->current->value), $this->lexer->current->value);
        }
        if ($this->lexer->current
            ->isA(EmailLexer::S_IPV6TAG)) {
            $IPv6TAG = true;
        }
        if ($this->lexer->current
            ->isA(EmailLexer::S_CLOSEBRACKET)) {
            break;
        }
        $addressLiteral .= $this->lexer->current->value;
    } while ($this->lexer
        ->moveNext());
    
    //Encapsulate
    $addressLiteral = str_replace('[', '', $addressLiteral);
    $isAddressLiteralIPv4 = $this->checkIPV4Tag($addressLiteral);
    if (!$isAddressLiteralIPv4) {
        return new ValidEmail();
    }
    $addressLiteral = $this->convertIPv4ToIPv6($addressLiteral);
    if (!$IPv6TAG) {
        $this->warnings[WarningDomainLiteral::CODE] = new WarningDomainLiteral();
        return new ValidEmail();
    }
    $this->warnings[AddressLiteral::CODE] = new AddressLiteral();
    $this->checkIPV6Tag($addressLiteral);
    return new ValidEmail();
}
RSS feed
Powered by Drupal