Beispiel #1
0
 /**
  * @param Lexer $lexer
  * @param DOMNode $currentElement
  * @return array|\string[]
  */
 public function replace(Lexer $lexer, DOMNode $currentElement)
 {
     $resultTokens = [];
     $resultTokens[] = 'php:function';
     $resultTokens[] = '(';
     $resultTokens[] = '\'';
     $resultTokens[] = PhpCallback::class . '::callStatic';
     $resultTokens[] = '\'';
     $resultTokens[] = ',';
     $resultTokens[] = '\'';
     $resultTokens[] = static::class;
     $resultTokens[] = '\'';
     $resultTokens[] = ',';
     $resultTokens[] = '\'';
     $resultTokens[] = 'call';
     $resultTokens[] = '\'';
     $resultTokens[] = ',';
     $resultTokens[] = $lexer->peek($lexer->key() - 2);
     $resultTokens[] = ',';
     $resultTokens[] = $lexer->peek($lexer->key() + 2);
     $resultTokens[] = ')';
     $resultTokens[] = '/';
     $resultTokens[] = 'xs:sequence';
     $resultTokens[] = '/';
     $resultTokens[] = '*';
     $lexer->seek($lexer->key() + 2);
     return $resultTokens;
 }
Beispiel #2
0
 /**
  * @return void
  */
 public function next()
 {
     $this->position += $this->direction;
     $end = $this->direction === self::DIRECTION_UP ? $this->lexer->count() : 0;
     for ($i = $this->position; $this->compare($i, $end); $i += $this->direction) {
         $token = $this->lexer->peek($i);
         if (preg_match($this->regex, $token) === 1) {
             $this->position = $i;
             return;
         }
     }
     $this->position = -1;
 }
Beispiel #3
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;
 }
Beispiel #4
0
 /**
  * @param Lexer $lexer
  * @param DOMNode $currentElement
  * @return array|\string[]
  */
 public function replace(Lexer $lexer, DOMNode $currentElement)
 {
     if ($this->camelize === true) {
         $methodName = $this->convertToCamel($this->callback[1]);
     } else {
         $methodName = $this->callback[1];
     }
     $resultTokens = [];
     $resultTokens[] = 'php:function';
     $resultTokens[] = '(';
     $resultTokens[] = '\'';
     $resultTokens[] = PhpCallback::class . '::callStatic';
     $resultTokens[] = '\'';
     $resultTokens[] = ',';
     $resultTokens[] = '\'';
     $resultTokens[] = $this->callback[0];
     $resultTokens[] = '\'';
     $resultTokens[] = ',';
     $resultTokens[] = '\'';
     $resultTokens[] = $methodName;
     $resultTokens[] = '\'';
     $lexer->next();
     if ($lexer->peek($lexer->key() + 1) !== ')') {
         $resultTokens[] = ',';
     }
     return $resultTokens;
 }
Beispiel #5
0
 /**
  * @param Lexer $lexer
  * @param DOMNode $currentElement
  * @return array|\string[]
  */
 public function replace(Lexer $lexer, DOMNode $currentElement)
 {
     $resultTokens = [];
     $resultTokens[] = 'php:function';
     $resultTokens[] = '(';
     $resultTokens[] = '\'';
     $resultTokens[] = PhpCallback::class . '::call';
     $resultTokens[] = '\'';
     $resultTokens[] = ',';
     $resultTokens[] = '\'';
     $resultTokens[] = $this->name;
     $resultTokens[] = '\'';
     $lexer->next();
     if ($lexer->peek($lexer->key() + 1) !== ')') {
         $resultTokens[] = ',';
     }
     return $resultTokens;
 }
Beispiel #6
0
 /**
  * @param Lexer $lexer
  * @return bool
  */
 public function supports(Lexer $lexer)
 {
     return $lexer->current() === 'to' && preg_match('/\\s/', $lexer->peek($lexer->key() - 1)) === 1;
 }
Beispiel #7
0
 /**
  * @param Lexer $lexer
  * @return bool
  */
 public function supports(Lexer $lexer)
 {
     $nextToken = $lexer->peek($lexer->key() + 1);
     return $nextToken === '(';
 }