Seditio Source
Root |
./othercms/phpBB3/vendor/s9e/text-formatter/src/Configurator/TemplateNormalizations/InlineElements.php
<?php

/**
* @package   s9e\TextFormatter
* @copyright Copyright (c) 2010-2021 The s9e authors
* @license   http://www.opensource.org/licenses/mit-license.php The MIT License
*/
namespace s9e\TextFormatter\Configurator\TemplateNormalizations;

use
DOMElement;
use
DOMException;

/**
* Inline the elements declarations of a template
*
* Will replace
*     <xsl:element name="div"><xsl:apply-templates/></xsl:element>
* with
*     <div><xsl:apply-templates/></div>
*/
class InlineElements extends AbstractNormalization
{
   
/**
    * {@inheritdoc}
    */
   
protected $queries = ['//xsl:element'];

   
/**
    * {@inheritdoc}
    */
   
protected function normalizeElement(DOMElement $element)
    {
       
$elName = $element->getAttribute('name');
       
$dom    = $this->ownerDocument;

        try
        {
           
// Create the new static element
           
$newElement = ($element->hasAttribute('namespace'))
                        ?
$dom->createElementNS($element->getAttribute('namespace'), $elName)
                        :
$dom->createElement($elName);
        }
        catch (
DOMException $e)
        {
           
// Ignore this element if an exception got thrown
           
return;
        }

       
// Replace the old <xsl:element/> with it. We do it now so that libxml doesn't have to
        // redeclare the XSL namespace
       
$element->parentNode->replaceChild($newElement, $element);

       
// One by one and in order, we move the nodes from the old element to the new one
       
while ($element->firstChild)
        {
           
$newElement->appendChild($element->removeChild($element->firstChild));
        }
    }
}