/**
  * Combines sources and minifies the result.
  *
  * @return string
  */
 protected static function _combineMinify()
 {
     $type = self::$_options['contentType'];
     // ease readability
     // when combining scripts, make sure all statements separated and
     // trailing single line comment is terminated
     $implodeSeparator = $type === self::TYPE_JS ? "\n;" : '';
     // allow the user to pass a particular array of options to each
     // minifier (designated by type). source objects may still override
     // these
     $defaultOptions = isset(self::$_options['minifierOptions'][$type]) ? self::$_options['minifierOptions'][$type] : array();
     // if minifier not set, default is no minification. source objects
     // may still override this
     $defaultMinifier = isset(self::$_options['minifiers'][$type]) ? self::$_options['minifiers'][$type] : false;
     if (Diglin_Minify_Source::haveNoMinifyPrefs(self::$_controller->sources)) {
         // all source have same options/minifier, better performance
         // to combine, then minify once
         foreach (self::$_controller->sources as $source) {
             $pieces[] = $source->getContent();
         }
         $content = implode($implodeSeparator, $pieces);
         if ($defaultMinifier) {
             self::$_controller->loadMinifier($defaultMinifier);
             $content = call_user_func($defaultMinifier, $content, $defaultOptions);
         }
     } else {
         // minify each source with its own options and minifier, then combine
         foreach (self::$_controller->sources as $source) {
             // allow the source to override our minifier and options
             $minifier = null !== $source->minifier ? $source->minifier : $defaultMinifier;
             $options = null !== $source->minifyOptions ? array_merge($defaultOptions, $source->minifyOptions) : $defaultOptions;
             if ($minifier) {
                 self::$_controller->loadMinifier($minifier);
                 // get source content and minify it
                 $pieces[] = call_user_func($minifier, $source->getContent(), $options);
             } else {
                 $pieces[] = $source->getContent();
             }
         }
         $content = implode($implodeSeparator, $pieces);
     }
     if ($type === self::TYPE_CSS && false !== strpos($content, '@import')) {
         $content = self::_handleCssImports($content);
     }
     // do any post-processing (esp. for editing build URIs)
     if (self::$_options['postprocessorRequire']) {
         #require_once self::$_options['postprocessorRequire'];
     }
     if (self::$_options['postprocessor']) {
         $content = call_user_func(self::$_options['postprocessor'], $content, $type);
     }
     return $content;
 }