jquery.sprintf.js
2.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/**
* sprintf and vsprintf for jQuery
* somewhat based on http://jan.moesen.nu/code/javascript/sprintf-and-printf-in-javascript/
*
* Copyright (c) 2008 Sabin Iacob (m0n5t3r) <iacobs@m0n5t3r.info>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* @license http://www.gnu.org/licenses/gpl.html
* @project jquery.sprintf
*/
(function($){
var formats = {
'b': function(val) {return parseInt(val, 10).toString(2);},
'c': function(val) {return String.fromCharCode(parseInt(val, 10));},
'd': function(val) {return parseInt(val, 10);},
'u': function(val) {return Math.abs(val);},
'f': function(val, p) {
p = parseInt(p, 10);
val = parseFloat(val);
if(isNaN(p && val)) {
return NaN;
}
return p && val.toFixed(p) || val;
},
'o': function(val) {return parseInt(val, 10).toString(8);},
's': function(val) {return val;},
'x': function(val) {return ('' + parseInt(val, 10).toString(16)).toLowerCase();},
'X': function(val) {return ('' + parseInt(val, 10).toString(16)).toUpperCase();}
};
var re = /%(?:(\d+)?(?:\.(\d+))?|\(([^)]+)\))([%bcdufosxX])/g;
var dispatch = function(data){
if(data.length == 1 && typeof data[0] == 'object') { //python-style printf
data = data[0];
return function(match, w, p, lbl, fmt, off, str) {
return formats[fmt](data[lbl]);
};
} else { // regular, somewhat incomplete, printf
var idx = 0;
return function(match, w, p, lbl, fmt, off, str) {
if(fmt == '%') {
return '%';
}
return formats[fmt](data[idx++], p);
};
}
};
$.extend({
sprintf: function(format) {
var argv = Array.apply(null, arguments).slice(1);
return format.replace(re, dispatch(argv));
},
vsprintf: function(format, data) {
return format.replace(re, dispatch(data));
}
});
})(jQuery);