123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- ;(function() {
-
- var namespace;
-
- if (typeof module !== 'undefined') {
- namespace = module.exports = format;
- }
-
- else {
-
- namespace = (function(){ return this || (1,eval)('this') }());
- }
- namespace.format = format;
- namespace.vsprintf = vsprintf;
- if (typeof console !== 'undefined' && typeof console.log === 'function') {
- namespace.printf = printf;
- }
- function printf(/* ... */) {
- console.log(format.apply(null, arguments));
- }
- function vsprintf(fmt, replacements) {
- return format.apply(null, [fmt].concat(replacements));
- }
- function format(fmt) {
- var argIndex = 1
- , args = [].slice.call(arguments)
- , i = 0
- , n = fmt.length
- , result = ''
- , c
- , escaped = false
- , arg
- , tmp
- , leadingZero = false
- , precision
- , nextArg = function() { return args[argIndex++]; }
- , slurpNumber = function() {
- var digits = '';
- while (/\d/.test(fmt[i])) {
- digits += fmt[i++];
- c = fmt[i];
- }
- return digits.length > 0 ? parseInt(digits) : null;
- }
- ;
- for (; i < n; ++i) {
- c = fmt[i];
- if (escaped) {
- escaped = false;
- if (c == '.') {
- leadingZero = false;
- c = fmt[++i];
- }
- else if (c == '0' && fmt[i + 1] == '.') {
- leadingZero = true;
- i += 2;
- c = fmt[i];
- }
- else {
- leadingZero = true;
- }
- precision = slurpNumber();
- switch (c) {
- case 'b':
- result += parseInt(nextArg(), 10).toString(2);
- break;
- case 'c':
- arg = nextArg();
- if (typeof arg === 'string' || arg instanceof String)
- result += arg;
- else
- result += String.fromCharCode(parseInt(arg, 10));
- break;
- case 'd':
- result += parseInt(nextArg(), 10);
- break;
- case 'f':
- tmp = String(parseFloat(nextArg()).toFixed(precision || 6));
- result += leadingZero ? tmp : tmp.replace(/^0/, '');
- break;
- case 'j':
- result += JSON.stringify(nextArg());
- break;
- case 'o':
- result += '0' + parseInt(nextArg(), 10).toString(8);
- break;
- case 's':
- result += nextArg();
- break;
- case 'x':
- result += '0x' + parseInt(nextArg(), 10).toString(16);
- break;
- case 'X':
- result += '0x' + parseInt(nextArg(), 10).toString(16).toUpperCase();
- break;
- default:
- result += c;
- break;
- }
- } else if (c === '%') {
- escaped = true;
- } else {
- result += c;
- }
- }
- return result;
- }
- }());
|