CSSmin.php 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\Code\Minifier\Adapter\Css;
  7. use tubalmartin\CssMin\Minifier as CssMinLibrary;
  8. use Magento\Framework\Code\Minifier\AdapterInterface;
  9. /**
  10. * Adapter for CSSmin library
  11. */
  12. class CSSmin implements AdapterInterface
  13. {
  14. /**
  15. * 'pcre.recursion_limit' value for CSSMin minification
  16. */
  17. const PCRE_RECURSION_LIMIT = 1000;
  18. /**
  19. * @var CssMinLibrary
  20. */
  21. protected $cssMinifier;
  22. /**
  23. * @param CssMinLibrary $cssMinifier
  24. * @SuppressWarnings(PHPMD.UnusedFormalParameter)
  25. */
  26. public function __construct(CssMinLibrary $cssMinifier)
  27. {
  28. // TODO: set $cssMinifier in constructor once MAGETWO-51176 is resolved.
  29. }
  30. /**
  31. * Get CSS Minifier
  32. *
  33. * @return CssMinLibrary
  34. */
  35. private function getCssMin()
  36. {
  37. if (!($this->cssMinifier instanceof CssMinLibrary)) {
  38. $this->cssMinifier = new CssMinLibrary(false);
  39. }
  40. return $this->cssMinifier;
  41. }
  42. /**
  43. * Minify css file content
  44. *
  45. * @param string $content
  46. * @return string
  47. */
  48. public function minify($content)
  49. {
  50. $pcreRecursionLimit = ini_get('pcre.recursion_limit');
  51. ini_set('pcre.recursion_limit', self::PCRE_RECURSION_LIMIT);
  52. $result = $this->getCssMin()->run($content);
  53. ini_set('pcre.recursion_limit', $pcreRecursionLimit);
  54. return $result;
  55. }
  56. }