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

class
MinifyInlineCSS extends AbstractNormalization
{
   
/**
    * {@inheritdoc}
    */
   
protected $queries = ['//*[namespace-uri() != $XSL]/@style'];

   
/**
    * {@inheritdoc}
    */
   
protected function normalizeAttribute(DOMAttr $attribute)
    {
       
$css = $attribute->nodeValue;

       
// Only minify if the value does not contain any XPath expression that's not an attribute
       
if (!preg_match('(\\{(?!@\\w+\\}))', $css))
        {
           
$attribute->nodeValue = $this->minify($css);
        }
    }

   
/**
    * Minify a CSS string
    *
    * @param  string $css Original CSS
    * @return string      Minified CSS
    */
   
protected function minify($css)
    {
       
$css = trim($css, " \n\t;");
       
$css = preg_replace('(\\s*([,:;])\\s*)', '$1', $css);
       
$css = preg_replace_callback(
           
'((?<=[\\s:])#[0-9a-f]{3,6})i',
            function (
$m)
            {
                return
strtolower($m[0]);
            },
           
$css
       
);
       
$css = preg_replace('((?<=[\\s:])#([0-9a-f])\\1([0-9a-f])\\2([0-9a-f])\\3)', '#$1$2$3', $css);
       
$css = preg_replace('((?<=[\\s:])#f00\\b)', 'red', $css);
       
$css = preg_replace('((?<=[\\s:])0px\\b)', '0', $css);

        return
$css;
    }
}