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); }
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; } } }