You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
881 B
37 lines
881 B
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;
|
|
|