Minify_CSS_Compressor::_process PHP Method

_process() protected method

Minify a CSS string
protected _process ( string $css ) : string
$css string
return string
    protected function _process($css)
    {
        $css = str_replace("\r\n", "\n", $css);
        // preserve empty comment after '>'
        // http://www.webdevout.net/css-hacks#in_css-selectors
        $css = preg_replace('@>/\\*\\s*\\*/@', '>/*keep*/', $css);
        // preserve empty comment between property and value
        // http://css-discuss.incutio.com/?page=BoxModelHack
        $css = preg_replace('@/\\*\\s*\\*/\\s*:@', '/*keep*/:', $css);
        $css = preg_replace('@:\\s*/\\*\\s*\\*/@', ':/*keep*/', $css);
        // apply callback to all valid comments (and strip out surrounding ws
        $pattern = '@\\s*/\\*([\\s\\S]*?)\\*/\\s*@';
        $css = preg_replace_callback($pattern, array($this, '_commentCB'), $css);
        // remove ws around { } and last semicolon in declaration block
        $css = preg_replace('/\\s*{\\s*/', '{', $css);
        $css = preg_replace('/;?\\s*}\\s*/', '}', $css);
        // remove ws surrounding semicolons
        $css = preg_replace('/\\s*;\\s*/', ';', $css);
        // remove ws around urls
        $pattern = '/
                url\\(      # url(
                \\s*
                ([^\\)]+?)  # 1 = the URL (really just a bunch of non right parenthesis)
                \\s*
                \\)         # )
            /x';
        $css = preg_replace($pattern, 'url($1)', $css);
        // remove ws between rules and colons
        $pattern = '/
                \\s*
                ([{;])              # 1 = beginning of block or rule separator
                \\s*
                ([\\*_]?[\\w\\-]+)  # 2 = property (and maybe IE filter)
                \\s*
                :
                \\s*
                (\\b|[#\'"-])        # 3 = first character of a value
            /x';
        $css = preg_replace($pattern, '$1$2:$3', $css);
        // remove ws in selectors
        $pattern = '/
                (?:              # non-capture
                    \\s*
                    [^~>+,\\s]+  # selector part
                    \\s*
                    [,>+~]       # combinators
                )+
                \\s*
                [^~>+,\\s]+      # selector part
                {                # open declaration block
            /x';
        $css = preg_replace_callback($pattern, array($this, '_selectorsCB'), $css);
        // minimize hex colors
        $pattern = '/([^=])#([a-f\\d])\\2([a-f\\d])\\3([a-f\\d])\\4([\\s;\\}])/i';
        $css = preg_replace($pattern, '$1#$2$3$4$5', $css);
        // remove spaces between font families
        $pattern = '/font-family:([^;}]+)([;}])/';
        $css = preg_replace_callback($pattern, array($this, '_fontFamilyCB'), $css);
        $css = preg_replace('/@import\\s+url/', '@import url', $css);
        // replace any ws involving newlines with a single newline
        $css = preg_replace('/[ \\t]*\\n+\\s*/', "\n", $css);
        // separate common descendent selectors w/ newlines (to limit line lengths)
        $pattern = '/([\\w#\\.\\*]+)\\s+([\\w#\\.\\*]+){/';
        $css = preg_replace($pattern, "\$1\n\$2{", $css);
        // Use newline after 1st numeric value (to limit line lengths).
        $pattern = '/
            ((?:padding|margin|border|outline):\\d+(?:px|em)?) # 1 = prop : 1st numeric value
            \\s+
            /x';
        $css = preg_replace($pattern, "\$1\n", $css);
        // prevent triggering IE6 bug: http://www.crankygeek.com/ie6pebug/
        $css = preg_replace('/:first-l(etter|ine)\\{/', ':first-l$1 {', $css);
        return trim($css);
    }

Usage Example

 protected function _process($css)
 {
     $css = parent::_process($css);
     $css = preg_replace('`\\s*`', '', $css);
     $css = preg_replace('`;}`', '}', $css);
     return $css;
 }
All Usage Examples Of Minify_CSS_Compressor::_process