/** * @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); }
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); } } } }