public static Inline MergeArgsv2(string format, object[] arguments)
{
var args = arguments.ToList();
var ret = new Span();
bool foundLeft = false;
int tStart = 0;
var sb = new StringBuilder();
var numString = "";
var i = 0;
// Replace any instances of any players name with the goods.
foreach (var p in Player.AllExceptGlobal.OrderByDescending(x=>x.ToString().Length))
{
if (format.Contains(p.Name))
{
var ind = -1;
for (var a = 0; a < args.Count; a++)
{
if (args[a] == p)
{
ind = a;
break;
}
}
if (ind == -1)
{
ind = args.Count;
args.Add(p);
}
format = format.Replace(p.Name, "{" + ind + "}");
}
}
// Now we replace the format shit with objects like a boss.
foreach (var c in format)
{
sb.Append(c);
if (c == '{')
{
numString = "";
if (foundLeft)
{
foundLeft = false;
}
else
{
foundLeft = true;
tStart = 0;
}
}
else if (c.IsANumber() && foundLeft)
{
numString += c;
tStart++;
}
else if (c == '}')
{
if (foundLeft && numString.IsANumber())
{
// Add our current string to the ret inline
if (sb.Length > 0)
{
var str = sb.ToString();
str = str.Substring(0, str.Length - (tStart + 2));
if (str.Length > 0)
{
var il = new Run(str);
ret.Inlines.Add(il);
}
sb.Clear();
i = -1;
}
int num = int.Parse(numString);
var arg = args[num];
var card = arg as ChatCard;
if ((card != null && card.Card != null) || arg is IPlayPlayer)
{
if (arg is IPlayPlayer)
{
ret.Inlines.Add(new PlayerRun((arg as IPlayPlayer)));
}
else
{
ret.Inlines.Add(new CardRun(card));
}
}
else
sb.Append(arg == null ? "[?]" : arg.ToString());
}
foundLeft = false;
}
else
{
foundLeft = false;
}
i++;
}
if (sb.Length > 0)
{
var str = sb.ToString();
//if(tStart > 0)
// str = str.Substring(0, tStart);
var il = new Run(str);
ret.Inlines.Add(il);
sb.Clear();
}
return ret;
}