// Token: 0x060021BE RID: 8638 RVA: 0x000A86EC File Offset: 0x000A68EC
        private ArrayList TokenizeAttributes(string args, int lineNumber, int linePosition, Type extensionType)
        {
            if (extensionType == typeof(MarkupExtensionParser.UnknownMarkupExtension))
            {
                return(null);
            }
            int num = 0;

            ParameterInfo[] array = this.FindLongestConstructor(extensionType, out num);
            Dictionary <string, SpecialBracketCharacters> dictionary = this._parserContext.InitBracketCharacterCacheForType(extensionType);
            Stack <char>             stack                    = new Stack <char>();
            int                      num2                     = 0;
            bool                     flag                     = array != null && num > 0;
            bool                     flag2                    = false;
            ArrayList                arrayList                = null;
            int                      length                   = args.Length;
            bool                     flag3                    = false;
            bool                     flag4                    = false;
            bool                     flag5                    = false;
            bool                     flag6                    = false;
            char                     c                        = '\'';
            int                      num3                     = 0;
            StringBuilder            stringBuilder            = null;
            SpecialBracketCharacters specialBracketCharacters = null;

            if (flag && dictionary != null)
            {
                string text = (num > 0) ? array[num2].Name : null;
                if (!string.IsNullOrEmpty(text))
                {
                    specialBracketCharacters = this.GetBracketCharacterForProperty(text, dictionary);
                }
            }
            int num4 = 0;

            while (num4 < length && !flag6)
            {
                if (!flag4 && args[num4] == '\\')
                {
                    flag4 = true;
                }
                else
                {
                    if (!flag5 && !char.IsWhiteSpace(args[num4]))
                    {
                        flag5 = true;
                    }
                    if (flag3 || num3 > 0 || flag5)
                    {
                        if (stringBuilder == null)
                        {
                            stringBuilder = new StringBuilder(length);
                            arrayList     = new ArrayList(1);
                        }
                        if (flag4)
                        {
                            stringBuilder.Append('\\');
                            stringBuilder.Append(args[num4]);
                            flag4 = false;
                        }
                        else if (flag3 || num3 > 0)
                        {
                            if (flag3 && args[num4] == c)
                            {
                                flag3 = false;
                                flag5 = false;
                                MarkupExtensionParser.AddToTokenList(arrayList, stringBuilder, false);
                            }
                            else
                            {
                                if (num3 > 0 && args[num4] == '}')
                                {
                                    num3--;
                                }
                                else if (args[num4] == '{')
                                {
                                    num3++;
                                }
                                stringBuilder.Append(args[num4]);
                            }
                        }
                        else if (flag2)
                        {
                            stringBuilder.Append(args[num4]);
                            if (specialBracketCharacters.StartsEscapeSequence(args[num4]))
                            {
                                stack.Push(args[num4]);
                            }
                            else if (specialBracketCharacters.EndsEscapeSequence(args[num4]))
                            {
                                if (specialBracketCharacters.Match(stack.Peek(), args[num4]))
                                {
                                    stack.Pop();
                                }
                                else
                                {
                                    this.ThrowException("ParserMarkupExtensionInvalidClosingBracketCharacers", args[num4].ToString(), lineNumber, linePosition);
                                }
                            }
                            if (stack.Count == 0)
                            {
                                flag2 = false;
                            }
                        }
                        else
                        {
                            char c2 = args[num4];
                            if (c2 <= ',')
                            {
                                if (c2 == '"' || c2 == '\'')
                                {
                                    if (stringBuilder.Length != 0)
                                    {
                                        this.ThrowException("ParserMarkupExtensionNoQuotesInName", args, lineNumber, linePosition);
                                    }
                                    flag3 = true;
                                    c     = args[num4];
                                    goto IL_441;
                                }
                                if (c2 != ',')
                                {
                                    goto IL_405;
                                }
                            }
                            else if (c2 != '=')
                            {
                                if (c2 == '{')
                                {
                                    num3++;
                                    stringBuilder.Append(args[num4]);
                                    goto IL_441;
                                }
                                if (c2 != '}')
                                {
                                    goto IL_405;
                                }
                                flag6 = true;
                                if (stringBuilder == null)
                                {
                                    goto IL_441;
                                }
                                if (stringBuilder.Length > 0)
                                {
                                    MarkupExtensionParser.AddToTokenList(arrayList, stringBuilder, true);
                                    goto IL_441;
                                }
                                if (arrayList.Count > 0 && arrayList[arrayList.Count - 1] is char)
                                {
                                    this.ThrowException("ParserMarkupExtensionBadDelimiter", args, lineNumber, linePosition);
                                    goto IL_441;
                                }
                                goto IL_441;
                            }
                            if (flag && args[num4] == ',')
                            {
                                flag = (++num2 < num);
                                if (flag)
                                {
                                    string text = array[num2].Name;
                                    specialBracketCharacters = this.GetBracketCharacterForProperty(text, dictionary);
                                }
                            }
                            if (stringBuilder != null && stringBuilder.Length > 0)
                            {
                                MarkupExtensionParser.AddToTokenList(arrayList, stringBuilder, true);
                                if (stack.Count != 0)
                                {
                                    this.ThrowException("ParserMarkupExtensionMalformedBracketCharacers", stack.Peek().ToString(), lineNumber, linePosition);
                                }
                            }
                            else if (arrayList.Count == 0)
                            {
                                this.ThrowException("ParserMarkupExtensionDelimiterBeforeFirstAttribute", args, lineNumber, linePosition);
                            }
                            else if (arrayList[arrayList.Count - 1] is char)
                            {
                                this.ThrowException("ParserMarkupExtensionBadDelimiter", args, lineNumber, linePosition);
                            }
                            if (args[num4] == '=')
                            {
                                flag = false;
                                string text = (string)arrayList[arrayList.Count - 1];
                                specialBracketCharacters = this.GetBracketCharacterForProperty(text, dictionary);
                            }
                            arrayList.Add(args[num4]);
                            flag5 = false;
                            goto IL_441;
IL_405:
                            if (specialBracketCharacters != null && specialBracketCharacters.StartsEscapeSequence(args[num4]))
                            {
                                stack.Clear();
                                stack.Push(args[num4]);
                                flag2 = true;
                            }
                            stringBuilder.Append(args[num4]);
                        }
                    }
                }
IL_441:
                num4++;
            }
            if (!flag6)
            {
                this.ThrowException("ParserMarkupExtensionNoEndCurlie", "}", lineNumber, linePosition);
            }
            else if (num4 < length)
            {
                this.ThrowException("ParserMarkupExtensionTrailingGarbage", "}", args.Substring(num4, length - num4), lineNumber, linePosition);
            }
            return(arrayList);
        }