Seditio Source
Root |
./othercms/phpBB3/vendor/s9e/text-formatter/src/Configurator/TemplateNormalizations/NormalizeElementNames.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;

class
NormalizeElementNames extends AbstractNormalization
{
   
/**
    * {@inheritdoc}
    */
   
protected $queries = [
       
'//*[namespace-uri() != $XSL]',
       
'//xsl:element[not(contains(@name, "{"))]'
   
];

   
/**
    * {@inheritdoc}
    */
   
protected function normalizeElement(DOMElement $element)
    {
        if (
$this->isXsl($element, 'element'))
        {
           
$this->replaceXslElement($element);
        }
        else
        {
           
$this->replaceElement($element);
        }
    }

   
/**
    * Normalize and replace a non-XSL element if applicable
    *
    * @param  DOMElement $element
    * @return void
    */
   
protected function replaceElement(DOMElement $element)
    {
       
$elName = $this->lowercase($element->localName);
        if (
$elName === $element->localName)
        {
            return;
        }

       
// Create a new element with the correct name
       
$newElement = (is_null($element->namespaceURI))
                    ?
$this->ownerDocument->createElement($elName)
                    :
$this->ownerDocument->createElementNS($element->namespaceURI, $elName);

       
// Move every child to the new element
       
while ($element->firstChild)
        {
           
$newElement->appendChild($element->removeChild($element->firstChild));
        }

       
// Copy attributes to the new node
       
foreach ($element->attributes as $attribute)
        {
           
$newElement->setAttributeNS(
               
$attribute->namespaceURI,
               
$attribute->nodeName,
               
$attribute->value
           
);
        }

       
// Replace the old element with the new one
       
$element->parentNode->replaceChild($newElement, $element);
    }

   
/**
    * Normalize the name used in a xsl:element
    *
    * @param  DOMElement $element
    * @return void
    */
   
protected function replaceXslElement(DOMElement $element)
    {
       
$elName = $this->lowercase($element->getAttribute('name'));
       
$element->setAttribute('name', $elName);
    }
}