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

Breadcrumb

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

function Scanner::reconsumeCurrentTokenAsRegexp

Tries to reconsume the current token as a regexp if possible

Return value

Token|null

File

vendor/mck89/peast/lib/Peast/Syntax/Scanner.php, line 1018

Class

Scanner
Base class for scanners.

Namespace

Peast\Syntax

Code

public function reconsumeCurrentTokenAsRegexp() {
    $token = $this->currentToken ?: $this->getToken();
    $value = $token ? $token->value : null;
    
    //Check if the token starts with "/"
    if (!$value || $value[0] !== "/") {
        return null;
    }
    
    //Reset the scanner position to the token's start position
    $startPosition = $token->location->start;
    $this->setScanPosition($startPosition);
    $buffer = "/";
    $this->index++;
    $this->column++;
    $inClass = false;
    while (true) {
        
        //In a characters class the delimiter "/" is allowed without escape,
        
        //so the characters class must be closed before closing the regexp
        $stops = $inClass ? array(
            "]",
        ) : array(
            "/",
            "[",
        );
        $tempBuffer = $this->consumeUntil($stops);
        if ($tempBuffer === null) {
            if ($inClass) {
                $this->error("Unterminated character class in regexp");
            }
            else {
                $this->error("Unterminated regexp");
            }
        }
        $buffer .= $tempBuffer[0];
        if ($tempBuffer[1] === "/") {
            break;
        }
        else {
            $inClass = $tempBuffer[1] === "[";
        }
    }
    
    //Flags
    while (($char = $this->charAt()) !== null) {
        $lower = strtolower($char);
        if ($lower >= "a" && $lower <= "z") {
            $buffer .= $char;
            $this->index++;
            $this->column++;
        }
        else {
            break;
        }
    }
    
    //If next token has already been parsed and it's a bracket exclude it
    
    //from the count of open brackets
    if ($this->nextToken) {
        $nextVal = $this->nextToken->value;
        if (isset($this->brackets[$nextVal]) && isset($this->openBrackets[$nextVal])) {
            if ($this->brackets[$nextVal]) {
                $this->openBrackets[$nextVal]++;
            }
            else {
                $this->openBrackets[$nextVal]--;
            }
        }
        $this->nextToken = null;
    }
    
    //If comments handling is enabled, get the comments associated with the
    
    //current token
    $comments = $this->comments ? $this->commentsForCurrentToken() : null;
    
    //Replace the current token with a regexp token
    $token = new Token(Token::TYPE_REGULAR_EXPRESSION, $buffer);
    $token->location->start = $startPosition;
    $token->location->end = $this->getPosition(true);
    $this->currentToken = $token;
    if ($comments) {
        
        //Attach the comments to the new current token
        $this->commentsForCurrentToken($comments);
    }
    return $this->currentToken;
}

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal