Octgn.Play.Gui.ChatControl.MergeArgsv2 C# (CSharp) Method

MergeArgsv2() public static method

public static MergeArgsv2 ( string format, object arguments ) : Inline
format string
arguments object
return System.Windows.Documents.Inline
        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;
        }