Example #1
0
 /**
  * @param Lexer $lexer
  * @param DOMNode $currentElement
  * @return string[]
  */
 public function replace(Lexer $lexer, DOMNode $currentElement)
 {
     $xslForEach = $currentElement->parentNode;
     if ($xslForEach instanceof DOMNode) {
         while ($this->isForEachGroupElement($xslForEach) === false && $currentElement->ownerDocument !== $xslForEach) {
             $xslForEach = $xslForEach->parentNode;
         }
     }
     if ($this->isForEachGroupElement($xslForEach) === false) {
         $lexer->seek($lexer->key() + 2);
         return ['/', 'xs:sequence', '/', '*'];
     }
     /** @var DOMElement $xslForEach */
     $groupId = $xslForEach->getAttribute('group-id');
     $resultTokens = [];
     $resultTokens[] = '$current-un-grouped-' . $groupId;
     $resultTokens[] = '[';
     $resultTokens[] = 'generate-id';
     $resultTokens[] = '(';
     $resultTokens[] = '.';
     $resultTokens[] = ')';
     $resultTokens[] = '=';
     $resultTokens[] = '$current-group-' . $groupId;
     $resultTokens[] = '//';
     $resultTokens[] = 'xsl:element-id';
     $resultTokens[] = ']';
     $lexer->seek($lexer->key() + 2);
     return $resultTokens;
 }
Example #2
0
 /**
  * @param Lexer $lexer
  * @param DOMNode $currentElement
  * @return string[]
  */
 public function replace(Lexer $lexer, DOMNode $currentElement)
 {
     $xslForEach = $currentElement->parentNode;
     if ($xslForEach instanceof DOMElement) {
         while ($this->isForEachGroupElement($xslForEach) === false && $currentElement->ownerDocument !== $xslForEach) {
             $xslForEach = $xslForEach->parentNode;
         }
     }
     if ($this->isForEachGroupElement($xslForEach) === false) {
         throw new \RuntimeException('Feature not implemented. "At other times, it will be an empty sequence."');
     }
     $groupId = $xslForEach->getAttribute('group-id');
     $resultTokens = [];
     $resultTokens[] = '$current-un-grouped-' . $groupId;
     $resultTokens[] = '[';
     $resultTokens[] = 'generate-id';
     $resultTokens[] = '(';
     $resultTokens[] = '.';
     $resultTokens[] = ')';
     $resultTokens[] = '=';
     $resultTokens[] = '$current-group-' . $groupId;
     $resultTokens[] = '//';
     $resultTokens[] = 'xsl:element-id';
     $resultTokens[] = ']';
     $lexer->seek($lexer->key() + 2);
     return $resultTokens;
 }
Example #3
0
 public function testDirectionDownOtherSeekPosition()
 {
     $lexer = new Lexer(['/', '/', '*']);
     $lexer->seek(1);
     $iterator = new MatchingIterator($lexer, '/\\//', MatchingIterator::DIRECTION_DOWN);
     $this->assertEquals(2, iterator_count($iterator));
 }
Example #4
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;
 }