Esempio n. 1
0
 /**
  * @inherit
  */
 protected function insertTemplateLogic(array $arguments, \DOMElement $node)
 {
     $template = $node->ownerDocument;
     $listName = $this->tag->getRelativePath();
     // find existing or initiate new table row template
     if ($this->isListItemTemplateExist($listName, $template) === false) {
         $rowTemplate = $template->createElementNS(Processor::XSL_NS, 'xsl:template');
         $rowTemplate->setAttribute('name', $listName);
         // find row node
         $rowNode = XMLHelper::parentUntil('w:p', $node);
         // call-template for each row
         $foreachNode = $template->createElementNS(Processor::XSL_NS, 'xsl:for-each');
         $foreachNode->setAttribute('select', '/' . Processor::VALUE_NODE . '/' . $listName . '/item');
         $callTemplateNode = $template->createElementNS(Processor::XSL_NS, 'xsl:call-template');
         $callTemplateNode->setAttribute('name', $listName);
         $foreachNode->appendChild($callTemplateNode);
         // insert call-template before moving
         $rowNode->parentNode->insertBefore($foreachNode, $rowNode);
         // move node into row template
         $rowTemplate->appendChild($rowNode);
         $template->documentElement->appendChild($rowTemplate);
     }
     // FIXME пофиксить повторное использование функции
     Processor::insertTemplateLogic($this->tag->getTextContent(), '.', $node);
 }
Esempio n. 2
0
 private function searchAndReplace(\DOMNodeList $nodeList, DocumentInterface $document)
 {
     $lexer = new Lexer($this->brackets);
     $mapper = new TagMapper();
     /** @var $node \DOMElement */
     foreach ($nodeList as $node) {
         $decodedValue = utf8_decode($node->nodeValue);
         $lexer->setInput($decodedValue);
         while ($tag = $mapper->parse($lexer)) {
             foreach ($tag->getFunctions() as $function) {
                 $expression = $document->getExpression($function['function'], $tag);
                 $expression->execute($function['arguments'], $node);
             }
             // insert simple value-of
             if ($tag->hasFunctions() === false) {
                 $absolutePath = '/' . Processor::VALUE_NODE . '/' . $tag->getXmlPath();
                 Processor::insertTemplateLogic($tag->getTextContent(), $absolutePath, $node);
             }
         }
     }
 }