Seditio Source
Root |
./othercms/phpBB3/vendor/s9e/text-formatter/src/Configurator/TemplateNormalizations/MinifyXPathExpressions.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
DOMAttr;
use
s9e\TextFormatter\Configurator\Helpers\AVTHelper;
use
s9e\TextFormatter\Configurator\Helpers\XPathHelper;

class
MinifyXPathExpressions extends AbstractNormalization
{
   
/**
    * {@inheritdoc}
    */
   
protected $queries = ['//@*[contains(., " ") or contains(., ")")]'];

   
/**
    * {@inheritdoc}
    */
   
protected function normalizeAttribute(DOMAttr $attribute)
    {
       
$element = $attribute->parentNode;
        if (!
$this->isXsl($element))
        {
           
// Replace XPath expressions in non-XSL elements
           
$this->replaceAVT($attribute);
        }
        elseif (
in_array($attribute->nodeName, ['match', 'select', 'test'], true))
        {
           
// Replace the content of match, select and test attributes of an XSL element
           
$expr = XPathHelper::minify($attribute->nodeValue);
           
$element->setAttribute($attribute->nodeName, $expr);
        }
    }

   
/**
    * Minify XPath expressions in given attribute
    *
    * @param  DOMAttr $attribute
    * @return void
    */
   
protected function replaceAVT(DOMAttr $attribute)
    {
       
AVTHelper::replace(
           
$attribute,
            function (
$token)
            {
                if (
$token[0] === 'expression')
                {
                   
$token[1] = XPathHelper::minify($token[1]);
                }

                return
$token;
            }
        );
    }
}