private void InnerMinify(IAsset asset, CssCleaner cssCleaner)
        {
            string newContent;
            string assetUrl = asset.Url;

            try
            {
                newContent = cssCleaner.Clean(asset.Content, assetUrl);
            }
            catch (CssCleaningException e)
            {
                throw new AssetMinificationException(
                          string.Format(CoreStrings.Minifiers_MinificationSyntaxError,
                                        CODE_TYPE, assetUrl, MINIFIER_NAME, e.Message));
            }
            catch (Exception e)
            {
                throw new AssetMinificationException(
                          string.Format(CoreStrings.Minifiers_MinificationFailed,
                                        CODE_TYPE, assetUrl, MINIFIER_NAME, e.Message), e);
            }

            asset.Content  = newContent;
            asset.Minified = true;
        }
        /// <summary>
        /// Produces a code minifiction of CSS assets by using Clean-css
        /// </summary>
        /// <param name="assets">Set of CSS assets</param>
        /// <returns>Set of CSS assets with minified text content</returns>
        public IList <IAsset> Minify(IList <IAsset> assets)
        {
            if (assets == null)
            {
                throw new ArgumentNullException(
                          nameof(assets),
                          string.Format(CoreStrings.Common_ArgumentIsNull, nameof(assets))
                          );
            }

            if (assets.Count == 0)
            {
                return(assets);
            }

            var assetsToProcessing = assets.Where(a => a.IsStylesheet && !a.Minified).ToList();

            if (assetsToProcessing.Count == 0)
            {
                return(assets);
            }

            CleaningOptions options = CreateCleaningOptions();

            using (var cssCleaner = new CssCleaner(_createJsEngineInstance, options))
            {
                foreach (var asset in assetsToProcessing)
                {
                    InnerMinify(asset, cssCleaner);
                }
            }

            return(assets);
        }
        /// <summary>
        /// Produces a code minifiction of CSS asset by using Clean-css
        /// </summary>
        /// <param name="asset">CSS asset</param>
        /// <returns>CSS asset with minified text content</returns>
        public IAsset Minify(IAsset asset)
        {
            if (asset == null)
            {
                throw new ArgumentException(CoreStrings.Common_ValueIsEmpty, "asset");
            }

            if (asset.Minified)
            {
                return(asset);
            }

            CleaningOptions options = CreateCleaningOptions();

            using (var cssCleaner = new CssCleaner(_createJsEngineInstance, options))
            {
                InnerMinify(asset, cssCleaner);
            }

            return(asset);
        }
        /// <summary>
        /// Produces a code minifiction of CSS asset by using Clean-css
        /// </summary>
        /// <param name="asset">CSS asset</param>
        /// <returns>CSS asset with minified text content</returns>
        public IAsset Minify(IAsset asset)
        {
            if (asset == null)
            {
                throw new ArgumentNullException(
                          nameof(asset),
                          string.Format(CoreStrings.Common_ArgumentIsNull, nameof(asset))
                          );
            }

            if (asset.Minified)
            {
                return(asset);
            }

            CleaningOptions options = CreateCleaningOptions();

            using (var cssCleaner = new CssCleaner(_createJsEngineInstance, options))
            {
                InnerMinify(asset, cssCleaner);
            }

            return(asset);
        }
		private void InnerMinify(IAsset asset, CssCleaner cssCleaner)
		{
			string newContent;
			string assetUrl = asset.Url;

			try
			{
				newContent = cssCleaner.Clean(asset.Content, assetUrl);
			}
			catch (CssCleaningException e)
			{
				throw new AssetMinificationException(
					string.Format(CoreStrings.Minifiers_MinificationSyntaxError,
						CODE_TYPE, assetUrl, MINIFIER_NAME, e.Message));
			}
			catch (Exception e)
			{
				throw new AssetMinificationException(
					string.Format(CoreStrings.Minifiers_MinificationFailed,
						CODE_TYPE, assetUrl, MINIFIER_NAME, e.Message), e);
			}

			asset.Content = newContent;
			asset.Minified = true;
		}
		/// <summary>
		/// Produces a code minifiction of CSS-assets by using Clean-css
		/// </summary>
		/// <param name="assets">Set of CSS-assets</param>
		/// <returns>Set of CSS-assets with minified text content</returns>
		public IList<IAsset> Minify(IList<IAsset> assets)
		{
			if (assets == null)
			{
				throw new ArgumentException(CoreStrings.Common_ValueIsEmpty, "assets");
			}

			if (assets.Count == 0)
			{
				return assets;
			}

			var assetsToProcessing = assets.Where(a => a.IsStylesheet && !a.Minified).ToList();
			if (assetsToProcessing.Count == 0)
			{
				return assets;
			}

			CleaningOptions options = CreateCleaningOptions();

			using (var cssCleaner = new CssCleaner(_createJsEngineInstance, options))
			{
				foreach (var asset in assetsToProcessing)
				{
					InnerMinify(asset, cssCleaner);
				}
			}

			return assets;
		}
		/// <summary>
		/// Produces a code minifiction of CSS-asset by using Clean-css
		/// </summary>
		/// <param name="asset">CSS-asset</param>
		/// <returns>CSS-asset with minified text content</returns>
		public IAsset Minify(IAsset asset)
		{
			if (asset == null)
			{
				throw new ArgumentException(CoreStrings.Common_ValueIsEmpty, "asset");
			}

			if (asset.Minified)
			{
				return asset;
			}

			CleaningOptions options = CreateCleaningOptions();

			using (var cssCleaner = new CssCleaner(_createJsEngineInstance, options))
			{
				InnerMinify(asset, cssCleaner);
			}

			return asset;
		}