1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
-
-
- var cache = {};
-
-
-
- var TO_ESCAPE = {
- '\'': '\\\'',
- '\n': '\\n'
- };
-
-
- function populate(formatter) {
- var i, type,
- key = formatter,
- prev = 0,
- arg = 1,
- builder = 'return \'';
-
- for (i = 0; i < formatter.length; i++) {
- if (formatter[i] === '%') {
- type = formatter[i + 1];
-
- switch (type) {
- case 's':
- builder += formatter.slice(prev, i) + '\' + arguments[' + arg + '] + \'';
- prev = i + 2;
- arg++;
- break;
- case 'j':
- builder += formatter.slice(prev, i) + '\' + JSON.stringify(arguments[' + arg + ']) + \'';
- prev = i + 2;
- arg++;
- break;
- case '%':
- builder += formatter.slice(prev, i + 1);
- prev = i + 2;
- i++;
- break;
- }
-
-
- } else if (TO_ESCAPE[formatter[i]]) {
- builder += formatter.slice(prev, i) + TO_ESCAPE[formatter[i]];
- prev = i + 1;
- }
- }
-
- builder += formatter.slice(prev) + '\';';
- cache[key] = new Function(builder);
- }
-
-
-
- exports.sprintf = function(formatter, var_args) {
- if (!cache[formatter]) {
- populate(formatter);
- }
-
- return cache[formatter].apply(null, arguments);
- };
|