private static string SimpleTranslateNumber(string numberValue, int numeralShape, char numberDecimalSeparator) { if (numeralShape >= 0 && numeralShape <= 14) { char[] array = new char[numberValue.Length]; for (int i = 0; i < numberValue.Length; i++) { char c = numberValue[i]; if (c != numberDecimalSeparator) { array[i] = FormatDigitReplacement.SimpleDigitFromNumeralShape(c, numeralShape); } else { array[i] = c; } } return(new string(array)); } return(numberValue); }
public static string FormatNumeralVariant(string number, int numeralVariant, CultureInfo numeralLanguage, string numberDecimalSeparator, out bool numberTranslated) { numberTranslated = true; if (number != null && !(number == string.Empty)) { int numeralShape = FormatDigitReplacement.GetNumeralShape(numeralVariant, numeralLanguage); if (numeralShape == 0) { numberTranslated = false; return(number); } char numberDecimalSeparator2 = '.'; if (numberDecimalSeparator != null && numberDecimalSeparator != string.Empty) { numberDecimalSeparator2 = numberDecimalSeparator[0]; } if (numeralVariant >= 4) { return(FormatDigitReplacement.ComplexTranslateNumber(number, numeralShape, numberDecimalSeparator2, numeralVariant - 4)); } return(FormatDigitReplacement.SimpleTranslateNumber(number, numeralShape, numberDecimalSeparator2)); } return(number); }
private static string ComplexTranslateNumber(string number, int numeralShape, char numberDecimalSeparator, int numVariant) { if (numeralShape >= 15 && numeralShape <= 27) { int num = 0; int num2 = 0; int num3 = 0; char[] array = new char[2 * number.Length]; int num4 = 0; int num5 = 0; bool flag = false; bool flag2 = false; bool flag3 = false; bool flag4 = false; uint[][] array2 = null; if (numeralShape <= 17) { array2 = FormatDigitReplacement.DBNum_Japanese; } else if (numeralShape <= 20) { flag2 = true; array2 = FormatDigitReplacement.DBNum_SimplChinese; } else if (numeralShape <= 23) { flag2 = true; array2 = FormatDigitReplacement.DBNum_TradChinese; } else { array2 = FormatDigitReplacement.DBNum_Korean; if (numVariant == 0 || numVariant == 3) { flag4 = true; } } if (numVariant == 1) { flag4 = true; } while (num < number.Length && (number[num] < '0' || number[num] > '9')) { array[num2] = number[num]; num++; num2++; } for (int i = num; i < number.Length && number[i] != numberDecimalSeparator; i++) { if (number[i] >= '0' && number[i] <= '9') { num3++; } } if (num3 > 12) { if (num3 > 16) { while (12 < num3) { FormatDigitReplacement.SkipNonDigits(number, ref num); array[num2] = (char)array2[number[num] - 48][numVariant]; num++; num2++; num3--; } } else { num5 = 16; num4 = 12; do { if (num5 > num3) { num5--; num4--; } else { FormatDigitReplacement.SkipNonDigits(number, ref num); if (number[num] != '0') { if (flag2 || flag4 || number[num] > '1' || num5 % 4 == 1) { if (flag2 && flag) { array[num2] = (char)array2[0][numVariant]; num2++; flag = false; } array[num2] = (char)array2[number[num] - 48][numVariant]; num2++; } if (num4 >= 10) { array[num2] = (char)array2[num4][numVariant]; num2++; } } else { flag = true; } num5--; num4--; num3--; num++; } }while (num5 > 12); } array[num2] = (char)array2[15][numVariant]; num2++; } num5 = 12; do { num4 = 12; flag3 = false; flag = false; do { if (num5 > num3) { num5--; num4--; } else { FormatDigitReplacement.SkipNonDigits(number, ref num); if (number[num] != '0' || num2 == 0) { if (flag2 || flag4 || number[num] > '1' || num5 % 4 == 1) { if (flag2 && flag) { array[num2] = (char)array2[0][numVariant]; num2++; flag = false; } array[num2] = (char)array2[number[num] - 48][numVariant]; num2++; } if (num4 >= 10) { array[num2] = (char)array2[num4][numVariant]; num2++; } flag3 = true; } else { flag = true; } num5--; num4--; num3--; num++; } }while (num5 % 4 > 0); if (flag3 && num3 / 4 > 0) { switch (num3) { case 8: array[num2] = (char)array2[14][numVariant]; num2++; break; case 4: array[num2] = (char)array2[13][numVariant]; num2++; break; } } }while (num3 > 0); if (num < number.Length && number[num] == numberDecimalSeparator) { array[num2] = number[num]; num++; num2++; while (num < number.Length) { if (number[num] < '0' || number[num] > '9') { array[num2] = number[num]; } else { array[num2] = (char)array2[number[num] - 48][numVariant]; } num++; num2++; } } string text = new string(array); char[] trimChars = new char[1]; return(text.TrimEnd(trimChars)); } return(number); }
public string FormatValue(object value, string formatString, TypeCode typeCode, bool addDateTimeOffsetSuffix) { CultureInfo cultureInfo = null; string text = null; bool flag = false; bool flag2 = false; bool flag3 = false; int languageState = 0; bool flag4 = false; string text2 = null; Calendar calendar = null; bool flag5 = false; try { if (this.m_styleClass != null) { if (formatString == null) { this.m_styleClass.GetStyleAttribute(this.m_objectType, this.m_objectName, "Format", this.m_context, ref this.m_sharedFormatSettings, out formatString); } languageState = this.m_styleClass.GetStyleAttribute(this.m_objectType, this.m_objectName, "Language", this.m_context, ref this.m_sharedFormatSettings, out text); if (!this.GetCulture(text, ref cultureInfo, ref flag2, ref languageState)) { text2 = RPRes.rsExpressionErrorValue; flag5 = true; } if (!flag5 && typeCode == TypeCode.DateTime && !this.m_calendarValidated) { this.CreateAndValidateCalendar(languageState, cultureInfo); } } if (!flag5 && cultureInfo != null && this.m_formattingCalendar != null) { if (flag2) { if (cultureInfo.DateTimeFormat.IsReadOnly) { cultureInfo = (CultureInfo)cultureInfo.Clone(); flag3 = true; } else { calendar = cultureInfo.DateTimeFormat.Calendar; } } cultureInfo.DateTimeFormat.Calendar = this.m_formattingCalendar; } if (!flag5 && formatString != null && value is IFormattable) { try { if (cultureInfo == null) { cultureInfo = Thread.CurrentThread.CurrentCulture; flag2 = true; } if (ReportProcessing.CompareWithInvariantCulture(formatString, "x", true) == 0) { flag4 = true; } text2 = ((IFormattable)value).ToString(formatString, cultureInfo); if (addDateTimeOffsetSuffix) { text2 += " +0".ToString(cultureInfo); } } catch (Exception ex) { text2 = RPRes.rsExpressionErrorValue; this.m_context.ErrorContext.Register(ProcessingErrorCode.rsInvalidFormatString, Severity.Warning, this.m_objectType, this.m_objectName, "Format", ex.Message); } flag5 = true; } CultureInfo cultureInfo2; if (!flag5) { cultureInfo2 = null; if (!flag2 && cultureInfo != null) { goto IL_01be; } if (flag3) { goto IL_01be; } text2 = value.ToString(); } goto end_IL_001a; IL_01be: cultureInfo2 = Thread.CurrentThread.CurrentCulture; Thread.CurrentThread.CurrentCulture = cultureInfo; try { text2 = value.ToString(); } finally { if (cultureInfo2 != null) { Thread.CurrentThread.CurrentCulture = cultureInfo2; } } end_IL_001a :; } finally { if (flag2 && calendar != null) { Global.Tracer.Assert(!Thread.CurrentThread.CurrentCulture.DateTimeFormat.IsReadOnly, "(!System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.IsReadOnly)"); Thread.CurrentThread.CurrentCulture.DateTimeFormat.Calendar = calendar; } } if (!flag4 && this.m_styleClass != null) { switch (typeCode) { case TypeCode.SByte: case TypeCode.Byte: case TypeCode.Int16: case TypeCode.UInt16: case TypeCode.Int32: case TypeCode.UInt32: case TypeCode.Int64: case TypeCode.UInt64: case TypeCode.Single: case TypeCode.Double: case TypeCode.Decimal: flag = true; break; } if (flag) { int num = 1; this.m_styleClass.GetStyleAttribute(this.m_objectType, this.m_objectName, "NumeralVariant", this.m_context, ref this.m_sharedFormatSettings, out num); if (num > 2) { CultureInfo cultureInfo3 = cultureInfo; if (cultureInfo3 == null) { cultureInfo3 = Thread.CurrentThread.CurrentCulture; } string numberDecimalSeparator = cultureInfo3.NumberFormat.NumberDecimalSeparator; this.m_styleClass.GetStyleAttribute(this.m_objectType, this.m_objectName, "NumeralLanguage", this.m_context, ref this.m_sharedFormatSettings, out text); if (text != null) { cultureInfo = new CultureInfo(text, false); } else if (cultureInfo == null) { cultureInfo = cultureInfo3; } bool flag6 = true; text2 = FormatDigitReplacement.FormatNumeralVariant(text2, num, cultureInfo, numberDecimalSeparator, out flag6); if (!flag6) { this.m_context.ErrorContext.Register(ProcessingErrorCode.rsInvalidNumeralVariantForLanguage, Severity.Warning, this.m_objectType, this.m_objectName, "NumeralVariant", num.ToString(CultureInfo.InvariantCulture), cultureInfo.Name); } } } } return(text2); }