| Current Path : /home/balossw/www/temp/common/modules/javascript/js/ |
| Current File : /home/balossw/www/temp/common/modules/javascript/js/utils.string.js |
/*---------------------------------------------------------------------------
File name ............ common/js/utils.string.js
Author ............... Antoine Lemoine
Creation date ........ 02.09.2009
Modification date .... 02.09.2009
---------------------------------------------------------------------------*/
function sprintf()
{
if (!arguments || arguments.length<1 || !RegExp) { return null; }
var fullstring = arguments[0];
var regex = /([^%]*)%('.|0|\x20)?(-)?(\d+)?(\.\d+)?(%|b|c|d|u|f|o|s|x|X)(.*)/;
var result = [], substitution_counter = 0;
while (result = regex.exec(fullstring))
{
var prefixe = result[1];
var padding_char = result[2] ? (result[2].substr(0,1)=="'" ? prefixe.substr(1,1) : result[2]) : '';
var justify = result[3] && result[3]==="-" ? false : true;
var min_length = result[4] ? parseInt(result[4]) : -1;
var precision = result[5] && result[6]=='f' ? parseInt(result[5].substring(1)) : -1;
var type = result[6];
var suffixe = result[7];
var padding = '';
if (type=='%')
{
substitution='%';
}
else
{
substitution_counter++;
if (substitution_counter>=arguments.length)
{
alert('Error : not enough arguments ('+(arguments.length-1)+', excluding the string) in function sprintf call');
}
var param = arguments[substitution_counter];
var substitution = param;
switch (type)
{
case 'b': substitution = parseInt(param).toString(2); break;
case 'c': substitution = String.fromCharCode(parseInt(param)); break;
case 'd': substitution = parseInt(param) ? parseInt(param) : 0; break;
case 'u': substitution = Math.abs(param); break;
case 'f': substitution = (precision>-1) ? Math.round(parseFloat(param)*Math.pow(10,precision))/Math.pow(10,precision) : parseFloat(param); break;
case 'o': substitution = parseInt(param).toString(8); break;
case 's': substitution = param; break;
case 'x': substitution = (''+parseInt(param).toString(16)).toLowerCase(); break;
case 'X': substitution = (''+parseInt(param).toString(16)).toUpperCase(); break;
}
var padding_char_count = min_length-substitution.toString().length;
if (padding_char_count>0)
{
var tmp_array = new Array(padding_char_count+1);
padding = tmp_array.join(padding_char ? padding_char : ' ');
}
}
fullstring = prefixe + padding + substitution + suffixe;
}
return fullstring;
}