function _layoutResolve(settings, row) {
		var getFeature = function (feature, opts) {
			if (!_ext.features[feature]) {
				_fnLog(settings, 0, 'Unknown feature: ' + feature);
			}

			return _ext.features[feature].apply(this, [settings, opts]);
		};

		var resolve = function (item) {
			var line = row[item].contents;

			for (var i = 0, ien = line.length; i < ien; i++) {
				if (!line[i]) {
					continue;
				}
				else if (typeof line[i] === 'string') {
					line[i] = getFeature(line[i], null);
				}
				else if ($.isPlainObject(line[i])) {
					// If it's an object, it just has feature and opts properties from
					// the transform in _layoutArray
					line[i] = getFeature(line[i].feature, line[i].opts);
				}
				else if (typeof line[i].node === 'function') {
					line[i] = line[i].node(settings);
				}
				else if (typeof line[i] === 'function') {
					var inst = line[i](settings);

					line[i] = typeof inst.node === 'function' ?
						inst.node() :
						inst;
				}
			}
		};

		$.each(row, function (key) {
			resolve(key);
		});
	}
Convert the contents of a row's layout object to nodes that can be inserted
into the document by a renderer. Execute functions, look up plug-ins, etc.

@param {*} settings DataTables settings object
@param {*} row Layout object for this row