public static string Format(string message, params object[] args)
{
StringBuilder sb = new StringBuilder ();
bool inQuote = false;
bool inPlaceholder = false;
int argStartPos = 0;
List<string> placeholderArgs = new List<string> (3);
for (int n=0; n<message.Length; n++) {
char c = message[n];
if (c == '\'') {
if (!inQuote)
inQuote = true;
else if (n > 0 && message [n-1] == '\'') {
inQuote = false;
}
else {
inQuote = false;
continue;
}
}
else if (c == '{' && !inQuote) {
inPlaceholder = true;
argStartPos = n + 1;
continue;
}
else if (c == '}' && !inQuote && inPlaceholder) {
inPlaceholder = false;
placeholderArgs.Add (message.Substring (argStartPos, n - argStartPos));
AddFormatted (sb, placeholderArgs, args);
placeholderArgs.Clear ();
continue;
}
else if (c == ',' && inPlaceholder) {
placeholderArgs.Add (message.Substring (argStartPos, n - argStartPos));
argStartPos = n + 1;
continue;
}
else if (inPlaceholder)
continue;
sb.Append (c);
}
return sb.ToString ();
}