tasks/lib/css.js
function(files, config, catalog, env) {
		var grunt = env.grunt;
		var that = this;

		files.forEach(function(f) {
			var file = utils.fileInfo(f.dest, config);
			grunt.log.write('Processing ' + file.catalogPath.cyan);
			var src = f.src.map(function(src) {
				return utils.fileInfo(src, {cwd: config.srcWebroot});
			});

			file.content = src.map(function(src) {
				return that.processFile(src, config, catalog, env).content;
			}).join('');
			
			if (
				!config.force 
				&& file.catalogPath in catalog 
				&& catalog[file.catalogPath].hash === file.hash 
				&& fs.existsSync(file.absPath)) {
					grunt.log.writeln(' [skip]'.grey);
					return;
			}

			// save result
			grunt.log.writeln(' [save]'.green);
			grunt.file.write(file.absPath, file.content);
			catalog[file.catalogPath] = {
				hash: file.hash,
				date: utils.timestamp(),
				versioned: file.versionedUrl(config),
				files: src.map(function(f) {
					return {
						file: f.catalogPath,
						hash: f.hash,
						versioned: f.versionedUrl(config)
					};
				})
			};
		});
	}
function(files, config, catalog, env) {
		var grunt = env.grunt;
		var that = this;

		files.forEach(function(f) {
			var file = utils.fileInfo(f.dest, config);
			grunt.log.write('Processing ' + file.catalogPath.cyan);
			var src = f.src.map(function(src) {
				return utils.fileInfo(src, {cwd: config.srcWebroot});
			});

			file.content = src.map(function(src) {
				return that.processFile(src, config, catalog, env).content;
			}).join('');
			
			if (
				!config.force 
				&& file.catalogPath in catalog 
				&& catalog[file.catalogPath].hash === file.hash 
				&& fs.existsSync(file.absPath)) {
					grunt.log.writeln(' [skip]'.grey);
					return;
			}

			// save result
			grunt.log.writeln(' [save]'.green);
			grunt.file.write(file.absPath, file.content);
			catalog[file.catalogPath] = {
				hash: file.hash,
				date: utils.timestamp(),
				versioned: file.versionedUrl(config),
				files: src.map(function(f) {
					return {
						file: f.catalogPath,
						hash: f.hash,
						versioned: f.versionedUrl(config)
					};
				})
			};
		});
	}
function ( files , config , catalog , env ) { var grunt = env . grunt ; var that = this ; files . forEach ( function ( f ) { var file = utils . fileInfo ( f . dest , config ) ; grunt . log . write ( 'Processing ' + file . catalogPath . cyan ) ; var src = f . src . map ( function ( src ) { return utils . fileInfo ( src , { cwd : config . srcWebroot } ) ; } ) ; file . content = src . map ( function ( src ) { return that . processFile ( src , config , catalog , env ) . content ; } ) . join ( '' ) ; if ( ! config . force && file . catalogPath in catalog && catalog [ file . catalogPath ] . hash === file . hash && fs . existsSync ( file . absPath ) ) { grunt . log . writeln ( ' [skip]' . grey ) ; return ; } // save result grunt . log . writeln ( ' [save]' . green ) ; grunt . file . write ( file . absPath , file . content ) ; catalog [ file . catalogPath ] = { hash : file . hash , date : utils . timestamp ( ) , versioned : file . versionedUrl ( config ) , files : src . map ( function ( f ) { return { file : f . catalogPath , hash : f . hash , versioned : f . versionedUrl ( config ) } ; } ) } ; } ) ; }
Processes given CSS files
@param  {Array} files    Normalized Grunt task file list
@param  {Object} config  Current task config
@param  {Object} catalog Output catalog
@param  {Object} env     Task environment (`grunt` and `task` properties)
@return {Object}         Updated catalog
Processes given CSS files