/**
  * Execute the minification rule.
  *
  * @param \ArjanSchouten\HtmlMinifier\MinifyContext $context
  *
  * @return \ArjanSchouten\HtmlMinifier\MinifyContext
  */
 public function process(MinifyContext $context)
 {
     return $context->setContents(preg_replace_callback('/
             (\\s*' . Constants::ATTRIBUTE_NAME_REGEX . '\\s*)     # Match the attribute name
             =\\s*                                            # Match the equal sign with optional whitespaces
             (["\'])                                         # Match quotes and capture for backreferencing
             \\s*                                             # Strange but possible to have a whitespace in an attribute
             \\2                                              # Backreference to the matched quote
             \\s*
         /x', function ($match) {
         if ($this->isBooleanAttribute($match[1])) {
             return Html::isLastAttribute($match[0]) ? $match[1] : $match[1] . ' ';
         }
         return Html::hasSurroundingAttributes($match[0]) ? ' ' : '';
     }, $context->getContents()));
 }
 /**
  * Remove the attribute from the element.
  *
  * @param string $element
  * @param string $attribute
  *
  * @return string
  */
 protected function removeAttribute($element, $attribute)
 {
     $replacement = Html::hasSurroundingAttributes($attribute) ? ' ' : '';
     return str_replace($attribute, $replacement, $element);
 }