config.process = function(raw) { return grunt.util.recurse(raw, function(value) { // If the value is not a string, return it. if (typeof value !== 'string') { return value; } // If possible, access the specified property via config.get, in case it // doesn't refer to a string, but instead refers to an object or array. var matches = value.match(propStringTmplRe); var result; if (matches) { result = config.get(matches[1]); // If the result retrieved from the config data wasn't null or undefined, // return it. if (result != null) { return result; } } // Process the string as a template. return grunt.template.process(value, {data: config.data}); }); };