Skip to content

Instantly share code, notes, and snippets.

@Buildstarted
Created April 1, 2014 18:13
Show Gist options
  • Save Buildstarted/9919766 to your computer and use it in GitHub Desktop.
Save Buildstarted/9919766 to your computer and use it in GitHub Desktop.
function stringFormat (formatString)
{
var builder = [];
var st = 0;
var j = 0;
for (var i = 0; i < formatString.length; i++)
{
switch (st)
{
case 0:
{
switch (formatString[i])
{
case "{":
st = 1;
builder.push(formatString.substr(j, i - j));
j = i + 1;
break;
case "}":
st = 2;
builder.push(formatString.substr(j, i - j));
j = i + 1;
break;
default:
st = 0;
break;
}
break;
}
case 1:
{
switch (formatString[i])
{
case "{":
builder.push("{");
j = i + 1;
st = 0;
break;
case "0":
case "1":
case "2":
case "3":
case "4":
case "5":
case "6":
case "7":
case "8":
case "9":
st = 3;
break;
default:
console.error("stringFormat: Pattern error processing string", formatString, "at index", i);
return null;
}
break;
}
case 2:
{
switch (formatString[i])
{
case "}":
builder.push("}");
j = i + 1;
st = 0;
break;
default:
console.error("stringFormat: Pattern error processing string", formatString, "at index", i);
return null;
}
break;
}
case 3:
{
switch (formatString[i])
{
case "0":
case "1":
case "2":
case "3":
case "4":
case "5":
case "6":
case "7":
case "8":
case "9":
st = 3;
break;
case "}":
{
var d = formatString.substr(j, i - j);
var n = parseInt(d);
if (n + 1 >= arguments.length)
{
console.error("stringFormat: The parameter {" + n + "} was not provided. Format string:", formatString);
return null;
}
builder.push(arguments[n + 1]);
st = 0;
j = i + 1;
break;
}
default:
console.error("stringFormat: Pattern error processing string", formatString, "at index", i);
return null;
}
break;
}
}
}
if (i > j)
{
builder.push(formatString.substr(j, i - j));
}
return builder.join("");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment