Exemplo n.º 1
0
        public static string Formatted(string str, List <string> argsLabelsArg, List <object> argsObjectsArg)
        {
            if (str.NullOrEmpty())
            {
                return(str);
            }
            bool          flag;
            StringBuilder stringBuilder;
            StringBuilder stringBuilder2;
            StringBuilder stringBuilder3;
            StringBuilder stringBuilder4;
            StringBuilder stringBuilder5;
            List <string> list;
            List <object> list2;

            if (GrammarResolverSimple.working)
            {
                flag           = false;
                stringBuilder  = new StringBuilder();
                stringBuilder2 = new StringBuilder();
                stringBuilder3 = new StringBuilder();
                stringBuilder4 = new StringBuilder();
                stringBuilder5 = new StringBuilder();
                list           = argsLabelsArg.ToList <string>();
                list2          = argsObjectsArg.ToList <object>();
            }
            else
            {
                flag           = true;
                stringBuilder  = GrammarResolverSimple.tmpResultBuffer;
                stringBuilder2 = GrammarResolverSimple.tmpSymbolBuffer;
                stringBuilder3 = GrammarResolverSimple.tmpSymbolBuffer_objectLabel;
                stringBuilder4 = GrammarResolverSimple.tmpSymbolBuffer_subSymbol;
                stringBuilder5 = GrammarResolverSimple.tmpSymbolBuffer_args;
                list           = GrammarResolverSimple.tmpArgsLabels;
                list.Clear();
                list.AddRange(argsLabelsArg);
                list2 = GrammarResolverSimple.tmpArgsObjects;
                list2.Clear();
                list2.AddRange(argsObjectsArg);
            }
            if (flag)
            {
                GrammarResolverSimple.working = true;
            }
            string result;

            try
            {
                stringBuilder.Length = 0;
                for (int i = 0; i < str.Length; i++)
                {
                    char c = str[i];
                    if (c == '{')
                    {
                        stringBuilder2.Length = 0;
                        stringBuilder3.Length = 0;
                        stringBuilder4.Length = 0;
                        stringBuilder5.Length = 0;
                        bool flag2 = false;
                        bool flag3 = false;
                        bool flag4 = false;
                        i++;
                        bool flag5 = i < str.Length && str[i] == '{';
                        while (i < str.Length)
                        {
                            char c2 = str[i];
                            if (c2 == '}')
                            {
                                flag2 = true;
                                break;
                            }
                            stringBuilder2.Append(c2);
                            if (c2 == '_' && !flag3)
                            {
                                flag3 = true;
                            }
                            else if (c2 == '?' && !flag4)
                            {
                                flag4 = true;
                            }
                            else if (flag4)
                            {
                                stringBuilder5.Append(c2);
                            }
                            else if (flag3)
                            {
                                stringBuilder4.Append(c2);
                            }
                            else
                            {
                                stringBuilder3.Append(c2);
                            }
                            i++;
                        }
                        if (!flag2)
                        {
                            Log.ErrorOnce("Could not find matching '}' in \"" + str + "\".", str.GetHashCode() ^ 194857261, false);
                        }
                        else if (flag5)
                        {
                            stringBuilder.Append(stringBuilder2);
                        }
                        else
                        {
                            if (flag4)
                            {
                                while (stringBuilder4.Length != 0 && stringBuilder4[stringBuilder4.Length - 1] == ' ')
                                {
                                    stringBuilder4.Length--;
                                }
                            }
                            string text  = stringBuilder3.ToString();
                            bool   flag6 = false;
                            int    num   = -1;
                            if (int.TryParse(text, out num))
                            {
                                string value;
                                if (num >= 0 && num < list2.Count && GrammarResolverSimple.TryResolveSymbol(list2[num], stringBuilder4.ToString(), stringBuilder5.ToString(), out value, str))
                                {
                                    flag6 = true;
                                    stringBuilder.Append(value);
                                }
                            }
                            else
                            {
                                for (int j = 0; j < list.Count; j++)
                                {
                                    if (list[j] == text)
                                    {
                                        string value2;
                                        if (GrammarResolverSimple.TryResolveSymbol(list2[j], stringBuilder4.ToString(), stringBuilder5.ToString(), out value2, str))
                                        {
                                            flag6 = true;
                                            stringBuilder.Append(value2);
                                        }
                                        break;
                                    }
                                }
                            }
                            if (!flag6)
                            {
                                Log.ErrorOnce(string.Concat(new object[]
                                {
                                    "Could not resolve symbol \"",
                                    stringBuilder2,
                                    "\" for string \"",
                                    str,
                                    "\"."
                                }), str.GetHashCode() ^ stringBuilder2.ToString().GetHashCode() ^ 879654654, false);
                            }
                        }
                    }
                    else
                    {
                        stringBuilder.Append(c);
                    }
                }
                string text2 = GenText.CapitalizeSentences(stringBuilder.ToString(), str[0] == '{');
                text2  = Find.ActiveLanguageWorker.PostProcessedKeyedTranslation(text2);
                result = text2;
            }
            finally
            {
                if (flag)
                {
                    GrammarResolverSimple.working = false;
                }
            }
            return(result);
        }
Exemplo n.º 2
0
        public static TaggedString Formatted(TaggedString str, List <string> argsLabelsArg, List <object> argsObjectsArg)
        {
            if (str.NullOrEmpty())
            {
                return(str);
            }
            bool          flag;
            StringBuilder stringBuilder;
            StringBuilder stringBuilder2;
            StringBuilder stringBuilder3;
            StringBuilder stringBuilder4;
            StringBuilder stringBuilder5;
            List <string> list;
            List <object> list2;

            if (working)
            {
                flag           = false;
                stringBuilder  = new StringBuilder();
                stringBuilder2 = new StringBuilder();
                stringBuilder3 = new StringBuilder();
                stringBuilder4 = new StringBuilder();
                stringBuilder5 = new StringBuilder();
                list           = argsLabelsArg.ToList();
                list2          = argsObjectsArg.ToList();
            }
            else
            {
                flag           = true;
                stringBuilder  = tmpResultBuffer;
                stringBuilder2 = tmpSymbolBuffer;
                stringBuilder3 = tmpSymbolBuffer_objectLabel;
                stringBuilder4 = tmpSymbolBuffer_subSymbol;
                stringBuilder5 = tmpSymbolBuffer_args;
                list           = tmpArgsLabels;
                list.Clear();
                list.AddRange(argsLabelsArg);
                list2 = tmpArgsObjects;
                list2.Clear();
                list2.AddRange(argsObjectsArg);
            }
            if (flag)
            {
                working = true;
            }
            try
            {
                stringBuilder.Length = 0;
                for (int i = 0; i < str.Length; i++)
                {
                    char c = str[i];
                    if (c == '{')
                    {
                        stringBuilder2.Length = 0;
                        stringBuilder3.Length = 0;
                        stringBuilder4.Length = 0;
                        stringBuilder5.Length = 0;
                        bool flag2 = false;
                        bool flag3 = false;
                        bool flag4 = false;
                        i++;
                        bool flag5 = i < str.Length && str[i] == '{';
                        for (; i < str.Length; i++)
                        {
                            char c2 = str[i];
                            if (c2 == '}')
                            {
                                flag2 = true;
                                break;
                            }
                            stringBuilder2.Append(c2);
                            if (c2 == '_' && !flag3)
                            {
                                flag3 = true;
                            }
                            else if (c2 == '?' && !flag4)
                            {
                                flag4 = true;
                            }
                            else if (flag4)
                            {
                                stringBuilder5.Append(c2);
                            }
                            else if (flag3)
                            {
                                stringBuilder4.Append(c2);
                            }
                            else
                            {
                                stringBuilder3.Append(c2);
                            }
                        }
                        if (!flag2)
                        {
                            Log.ErrorOnce("Could not find matching '}' in \"" + str + "\".", str.GetHashCode() ^ 0xB9D492D);
                            continue;
                        }
                        if (flag5)
                        {
                            stringBuilder.Append(stringBuilder2);
                            continue;
                        }
                        if (flag4)
                        {
                            while (stringBuilder4.Length != 0 && stringBuilder4[stringBuilder4.Length - 1] == ' ')
                            {
                                stringBuilder4.Length--;
                            }
                        }
                        string text   = stringBuilder3.ToString();
                        bool   flag6  = false;
                        int    result = -1;
                        if (int.TryParse(text, out result))
                        {
                            if (result >= 0 && result < list2.Count && TryResolveSymbol(list2[result], stringBuilder4.ToString(), stringBuilder5.ToString(), out var resolvedStr, str))
                            {
                                flag6 = true;
                                stringBuilder.Append(resolvedStr.RawText);
                            }
                        }
                        else
                        {
                            for (int j = 0; j < list.Count; j++)
                            {
                                if (list[j] == text)
                                {
                                    if (TryResolveSymbol(list2[j], stringBuilder4.ToString(), stringBuilder5.ToString(), out var resolvedStr2, str))
                                    {
                                        flag6 = true;
                                        stringBuilder.Append(resolvedStr2.RawText);
                                    }
                                    break;
                                }
                            }
                        }
                        if (!flag6)
                        {
                            Log.ErrorOnce(string.Concat("Could not resolve symbol \"", stringBuilder2, "\" for string \"") + str + "\".", str.GetHashCode() ^ stringBuilder2.ToString().GetHashCode() ^ 0x346E76FE);
                        }
                    }
                    else
                    {
                        stringBuilder.Append(c);
                    }
                }
                string translation = GenText.CapitalizeSentences(stringBuilder.ToString(), capitalizeFirstSentence: false);
                translation = Find.ActiveLanguageWorker.PostProcessedKeyedTranslation(translation);
                return(translation);
            }
            finally
            {
                if (flag)
                {
                    working = false;
                }
            }
        }