Javascript sprintf
JAVASCRIPT:
-
//////////////////////////////////////////////////////////////////////////////
-
// sprintf function for javascript
-
function sprintf() {
-
if (!arguments || arguments.length <1 ||!RegExp) { return; }
-
var str = arguments[0];
-
var re = /([^%]*)%('.|0|\x20)?(-)?(\d+)?(\.\d+)?(%|b|c|d|u|f|o|s|x|X)(.*)/;
-
var a = b = [], numSubstitutions = 0, numMatches = 0;
-
while (a = re.exec(str)) {
-
var leftpart = a[1], pPad = a[2], pJustify = a[3], pMinLength = a[4];
-
var pPrecision = a[5], pType = a[6], rightPart = a[7]; numMatches++;
-
if (pType == '%') {
-
subst = '%';
-
} else {
-
numSubstitutions++;
-
if (numSubstitutions>= arguments.length) {
-
alert('Error! Not enough function arguments (' +
-
(arguments.length - 1) + ', excluding the string)\n' +
-
'for the number of substitution parameters in string (' +
-
numSubstitutions + ' so far).');
-
}
-
var param = arguments[numSubstitutions];
-
var pad = '';
-
if (pPad && pPad.substr(0,1) == "'") {
-
pad = leftpart.substr(1,1);
-
} else if (pPad) {
-
pad = pPad;
-
}
-
var justifyRight = true;
-
if (pJustify && pJustify === "-") justifyRight = false;
-
var minLength = -1;
-
if (pMinLength) minLength = parseInt(pMinLength);
-
var precision = -1;
-
if (pPrecision && pType == 'f') {
-
precision = parseInt(pPrecision.substring(1));
-
}
-
var subst = param;
-
switch (pType) {
-
case 'b': subst = parseInt(param).toString(2); break;
-
case 'c': subst = String.fromCharCode(parseInt(param)); break;
-
case 'd': subst = parseInt(param)? parseInt(param) : 0; break;
-
case 'u': subst = Math.abs(param); break;
-
case 'f': subst = (precision> -1)?
-
Math.round(parseFloat(param) * Math.pow(10, precision)) /
-
Math.pow(10, precision) : parseFloat(param); break;
-
case 'o': subst = parseInt(param).toString(8); break;
-
case 's': subst = param; break;
-
case 'x': subst = ('' +
-
parseInt(param).toString(16)).toLowerCase(); break;
-
case 'X': subst = ('' +
-
parseInt(param).toString(16)).toUpperCase(); break;
-
}
-
var padLeft = minLength - subst.toString().length;
-
if (padLeft> 0) {
-
var arrTmp = new Array(padLeft+1);
-
var padding = arrTmp.join(pad?pad:" ");
-
} else {
-
var padding = ""; } }
-
str = leftpart + padding + subst + rightPart;
-
}
-
return str;
-
}
JAVASCRIPT:
-
function str_repeat(i, m) { for (var o = []; m> 0; o[--m] = i); return(o.join('')); }
-
-
function sprintf () {
-
var i = 0, a, f = arguments[i++], o = [], m, p, c, x;
-
while (f) {
-
if (m = /^[^\x25]+/.exec(f)) o.push(m[0]);
-
else if (m = /^\x25{2}/.exec(f)) o.push('%');
-
else if (m = /^\x25(?:(\d+)\$)?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(f)) {
-
if (((a = arguments[m[1] || i++]) == null) || (a == undefined)) throw("Too few arguments.");
-
if (/[^s]/.test(m[7]) && (typeof(a) != 'number'))
-
throw("Expecting number but found " + typeof(a));
-
switch (m[7]) {
-
case 'b': a = a.toString(2); break;
-
case 'c': a = String.fromCharCode(a); break;
-
case 'd': a = parseInt(a); break;
-
case 'e': a = m[6] ? a.toExponential(m[6]) : a.toExponential(); break;
-
case 'f': a = m[6] ? parseFloat(a).toFixed(m[6]) : parseFloat(a); break;
-
case 'o': a = a.toString(8); break;
-
case 's': a = ((a = String(a)) && m[6] ? a.substring(0, m[6]) : a); break;
-
case 'u': a = Math.abs(a); break;
-
case 'x': a = a.toString(16); break;
-
case 'X': a = a.toString(16).toUpperCase(); break;
-
}
-
a = (/[def]/.test(m[7]) && m[2] && a> 0 ? '+' + a : a);
-
c = m[3] ? m[3] == '0' ? '0' : m[3].charAt(1) : ' ';
-
x = m[5] - String(a).length;
-
p = m[5] ? str_repeat(c, x) : '';
-
o.push(m[4] ? a + p : p + a);
-
}
-
else throw ("Huh ?!");
-
f = f.substring(m[0].length);
-
}
-
return o.join('');
-
}
Categories: Malo mešano