Example #1
0
 /**
  * @param Lexer $lexer
  * @return bool
  */
 public function supports(Lexer $lexer)
 {
     if ($lexer->current() !== '(') {
         return false;
     }
     if ($lexer->key() > 0) {
         $whiteSpaceOrOpeningParenthesis = new MatchingIterator($lexer, '/\\s|\\(/', MatchingIterator::DIRECTION_DOWN);
         for ($i = 0, $j = 2; $i < $j; $i++) {
             if ($whiteSpaceOrOpeningParenthesis->valid() === false) {
                 return false;
             }
             if ($whiteSpaceOrOpeningParenthesis->key() < $lexer->key() - $i) {
                 return false;
             }
             $whiteSpaceOrOpeningParenthesis->next();
         }
     }
     $key = $lexer->key() + 1;
     $commaFound = false;
     while ($nextToken = $lexer->peek($key)) {
         if ($nextToken === '(') {
             return false;
         }
         if ($nextToken === ',') {
             $commaFound = true;
         }
         if ($nextToken === ')') {
             return $commaFound;
         }
         $key++;
     }
     return false;
 }
Example #2
0
 public function testOtherSeekPosition()
 {
     $lexer = new Lexer(['/', '/', '*']);
     $lexer->seek(1);
     $iterator = new MatchingIterator($lexer, '/\\//');
     $results = [1];
     $index = 0;
     while ($iterator->valid()) {
         $this->assertEquals('/', $iterator->current());
         $this->assertEquals($results[$index], $iterator->key());
         $index++;
         $iterator->next();
     }
     $this->assertEquals(1, iterator_count($iterator));
 }