Beispiel #1
0
 // Token: 0x06000587 RID: 1415 RVA: 0x00011797 File Offset: 0x0000F997
 public FormattedFormatToken(int argumentNumber, int spacing, FormattedFormatToken.StringAlignment alignment, string formatString)
 {
     this.argumentNumber = argumentNumber;
     this.spacing        = spacing;
     this.alignment      = alignment;
     this.formatString   = formatString;
 }
Beispiel #2
0
        // Token: 0x060005A4 RID: 1444 RVA: 0x00011B3C File Offset: 0x0000FD3C
        public static StringFormatter Create(string formatString)
        {
            if (formatString == null)
            {
                throw new ArgumentNullException("formatString");
            }
            StringFormatter                stringFormatter       = new StringFormatter();
            StringBuilder                  stringBuilder         = new StringBuilder();
            FormatTokenCollection          formatTokenCollection = stringFormatter.tokens;
            Stack <ConditionalFormatToken> stack = new Stack <ConditionalFormatToken>();

            for (int i = 0; i < formatString.Length; i++)
            {
                if (formatString[i] == '}')
                {
                    throw new FormatException("Format string is invalid (contains a hanging '}' character).");
                }
                if (formatString[i] == '{')
                {
                    if (stringBuilder.Length > 0)
                    {
                        formatTokenCollection.Add(new LiteralFormatToken(stringBuilder.ToString()));
                    }
                    stringBuilder.Clear();
                    if (formatString.ElementAtOrDefault(++i) == '\'')
                    {
                        while (formatString.ElementAtOrDefault(++i) != '\'')
                        {
                            stringBuilder.Append(formatString[i]);
                            stringFormatter.minimalLength++;
                        }
                        if (formatString.ElementAtOrDefault(++i) != '}')
                        {
                            throw new FormatException("Format string is invalid (literal token is missing closing brace '}').");
                        }
                        if (formatTokenCollection.Count > 1 && formatTokenCollection[formatTokenCollection.Count - 1] is LiteralFormatToken)
                        {
                            LiteralFormatToken literalFormatToken = formatTokenCollection[formatTokenCollection.Count - 1] as LiteralFormatToken;
                            LiteralFormatToken value = new LiteralFormatToken(literalFormatToken.Literal + stringBuilder.ToString());
                            formatTokenCollection[formatTokenCollection.Count - 1] = value;
                        }
                        else
                        {
                            formatTokenCollection.Add(new LiteralFormatToken(stringBuilder.ToString()));
                        }
                        stringBuilder.Clear();
                    }
                    else
                    {
                        int num    = 0;
                        int value2 = 0;
                        FormattedFormatToken.StringAlignment alignment = FormattedFormatToken.StringAlignment.RightAligned;
                        string formatString2 = "";
                        while (char.IsDigit(formatString.ElementAtOrDefault(i)))
                        {
                            stringBuilder.Append(formatString[i++]);
                        }
                        if (!int.TryParse(stringBuilder.ToString(), NumberStyles.None, CultureInfo.CurrentCulture, out num))
                        {
                            throw new FormatException("Format string is invalid (failed to parse argument index).");
                        }
                        if (num > stringFormatter.argumentCount)
                        {
                            stringFormatter.argumentCount = num;
                        }
                        if (formatString.ElementAtOrDefault(i) == '<' || formatString.ElementAtOrDefault(i) == '>')
                        {
                            stringBuilder.Clear();
                            alignment = ((formatString.ElementAtOrDefault(i) == '<') ? FormattedFormatToken.StringAlignment.LeftAligned : FormattedFormatToken.StringAlignment.RightAligned);
                            while (char.IsDigit(formatString.ElementAtOrDefault(i)))
                            {
                                stringBuilder.Append(formatString[i++]);
                            }
                            if (!int.TryParse(stringBuilder.ToString(), NumberStyles.None, CultureInfo.CurrentCulture, out value2))
                            {
                                throw new FormatException("Format string is invalid (failed to parse spacing argument).");
                            }
                        }
                        if (formatString.ElementAtOrDefault(i) == ':')
                        {
                            stringBuilder.Clear();
                            while (formatString.ElementAtOrDefault(i) != '}')
                            {
                                stringBuilder.Append(formatString[i++]);
                            }
                            if (stringBuilder.Length <= 0)
                            {
                                throw new FormatException("Format string is invalid (missing argument format string).");
                            }
                            formatString2 = stringBuilder.ToString();
                        }
                        if (formatString.ElementAtOrDefault(i) != '}')
                        {
                            throw new FormatException("Format string is invalid (formatted token is missing closing brace '}').");
                        }
                        formatTokenCollection.Add(new FormattedFormatToken(num, System.Math.Abs(value2), alignment, formatString2));
                        stringBuilder.Clear();
                    }
                }
                else if (formatString[i] == ']')
                {
                    if (formatTokenCollection.IsGlobalScope)
                    {
                        throw new FormatException("Format string is invalid (contains a hanging ']' character).");
                    }
                    if (stringBuilder.Length > 0)
                    {
                        formatTokenCollection.Add(new LiteralFormatToken(stringBuilder.ToString()));
                    }
                    stringBuilder.Clear();
                    formatTokenCollection = formatTokenCollection.Parent;
                    stack.Pop();
                }
                else if (formatString[i] == ':' && !formatTokenCollection.IsGlobalScope)
                {
                    ConditionalFormatToken conditionalFormatToken = stack.Peek();
                    if (formatTokenCollection == conditionalFormatToken.FalseTokens)
                    {
                        throw new FormatException("Format string is invalid (conditional token contains more than one false scope).");
                    }
                    if (stringBuilder.Length > 0)
                    {
                        formatTokenCollection.Add(new LiteralFormatToken(stringBuilder.ToString()));
                    }
                    stringBuilder.Clear();
                    formatTokenCollection = conditionalFormatToken.FalseTokens;
                    i++;
                }
                else if (formatString[i] == '[')
                {
                    if (stringBuilder.Length > 0)
                    {
                        formatTokenCollection.Add(new LiteralFormatToken(stringBuilder.ToString()));
                    }
                    stringBuilder.Clear();
                    bool inverted = false;
                    int  num2     = 0;
                    if (formatString[++i] == '!')
                    {
                        inverted = true;
                        i++;
                    }
                    while (char.IsDigit(formatString.ElementAtOrDefault(i)))
                    {
                        stringBuilder.Append(formatString[i++]);
                    }
                    if (!int.TryParse(stringBuilder.ToString(), NumberStyles.None, CultureInfo.CurrentCulture, out num2))
                    {
                        throw new FormatException("Format string is invalid (failed to parse argument index).");
                    }
                    if (num2 > stringFormatter.argumentCount)
                    {
                        stringFormatter.argumentCount = num2;
                    }
                    if (formatString.ElementAtOrDefault(i) != '?')
                    {
                        throw new FormatException("Format string is invalid (missing true-scope identifier '?').");
                    }
                    ConditionalFormatToken conditionalFormatToken2 = new ConditionalFormatToken(num2, inverted, formatTokenCollection);
                    formatTokenCollection.Add(conditionalFormatToken2);
                    formatTokenCollection = conditionalFormatToken2.TrueTokens;
                    stack.Push(conditionalFormatToken2);
                    stringBuilder.Clear();
                }
                else
                {
                    stringBuilder.Append(formatString[i]);
                    stringFormatter.minimalLength++;
                }
            }
            return(stringFormatter);
        }