var utils = require('../utils') , nodes = require('../nodes') , Compiler = require('../visitor/compiler'); /** * Return a `Literal` with the given `fmt`, and * variable number of arguments. * * @param {String} fmt * @param {Node} ... * @return {Literal} * @api public */ (module.exports = function s(fmt){ fmt = utils.unwrap(fmt).nodes[0]; utils.assertString(fmt); var self = this , str = fmt.string , args = arguments , i = 1; // format str = str.replace(/%(s|d)/g, function(_, specifier){ var arg = args[i++] || nodes.null; switch (specifier) { case 's': return new Compiler(arg, self.options).compile(); case 'd': arg = utils.unwrap(arg).first; if ('unit' != arg.nodeName) throw new Error('%d requires a unit'); return arg.val; } }); return new nodes.Literal(str); }).raw = true;