Exemplo n.º 1
0
 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);
 }
Exemplo n.º 2
0
 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);
 }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }