internal static string Format(object value, ref Formatter formatter, Microsoft.ReportingServices.ReportIntermediateFormat.Style reportItemStyle, Microsoft.ReportingServices.ReportIntermediateFormat.Style reportElementStyle, OnDemandProcessingContext context, ObjectType objectType, string objectName)
        {
            if (formatter == null)
            {
                formatter = new Formatter(reportItemStyle, context, objectType, objectName);
            }
            TypeCode typeCode             = Type.GetTypeCode(value.GetType());
            bool     sharedFormatSettings = false;
            string   styleStringValue     = "";

            reportElementStyle?.GetStyleAttribute(objectType, objectName, "Format", context, ref sharedFormatSettings, out styleStringValue);
            return(formatter.FormatValue(value, styleStringValue, typeCode));
        }
        internal string FormatValue(object value, string formatString, TypeCode typeCode, bool addDateTimeOffsetSuffix)
        {
            CultureInfo formattingCulture = null;
            string      styleStringValue  = null;
            bool        flag            = false;
            bool        isThreadCulture = false;
            bool        flag2           = false;
            int         num             = 0;
            bool        flag3           = false;
            string      text            = null;
            Calendar    calendar        = null;
            bool        flag4           = false;

            try
            {
                if (m_styleClass != null)
                {
                    if (formatString == null)
                    {
                        m_styleClass.GetStyleAttribute(m_objectType, m_objectName, "Format", m_context, ref m_sharedFormatSettings, out formatString);
                    }
                    num = m_styleClass.GetStyleAttribute(m_objectType, m_objectName, "Language", m_context, ref m_sharedFormatSettings, out styleStringValue);
                    if (!GetCulture(styleStringValue, ref formattingCulture, ref isThreadCulture, ref num))
                    {
                        text  = RPRes.rsExpressionErrorValue;
                        flag4 = true;
                    }
                    if (!flag4 && typeCode == TypeCode.DateTime && !m_calendarValidated)
                    {
                        CreateAndValidateCalendar(num, formattingCulture);
                    }
                }
                if (!flag4 && formattingCulture != null && m_formattingCalendar != null)
                {
                    if (isThreadCulture)
                    {
                        if (formattingCulture.DateTimeFormat.IsReadOnly)
                        {
                            formattingCulture = (CultureInfo)formattingCulture.Clone();
                            flag2             = true;
                        }
                        else
                        {
                            calendar = formattingCulture.DateTimeFormat.Calendar;
                        }
                    }
                    formattingCulture.DateTimeFormat.Calendar = m_formattingCalendar;
                }
                if (!flag4 && formatString != null && value is IFormattable)
                {
                    try
                    {
                        if (formattingCulture == null)
                        {
                            formattingCulture = Thread.CurrentThread.CurrentCulture;
                            isThreadCulture   = true;
                        }
                        if (ReportProcessing.CompareWithInvariantCulture(formatString, "x", ignoreCase: true) == 0)
                        {
                            flag3 = true;
                        }
                        text = ((IFormattable)value).ToString(formatString, formattingCulture);
                        if (addDateTimeOffsetSuffix)
                        {
                            text += " +0".ToString(formattingCulture);
                        }
                    }
                    catch (Exception ex)
                    {
                        text = RPRes.rsExpressionErrorValue;
                        m_context.ErrorContext.Register(ProcessingErrorCode.rsInvalidFormatString, Severity.Warning, m_objectType, m_objectName, "Format", ex.Message);
                    }
                    flag4 = true;
                }
                if (!flag4)
                {
                    CultureInfo cultureInfo = null;
                    if ((!isThreadCulture && formattingCulture != null) || flag2)
                    {
                        cultureInfo = Thread.CurrentThread.CurrentCulture;
                        Thread.CurrentThread.CurrentCulture = formattingCulture;
                        try
                        {
                            text = value.ToString();
                        }
                        finally
                        {
                            if (cultureInfo != null)
                            {
                                Thread.CurrentThread.CurrentCulture = cultureInfo;
                            }
                        }
                    }
                    else
                    {
                        text = value.ToString();
                    }
                }
            }
            finally
            {
                if (isThreadCulture && calendar != null)
                {
                    Global.Tracer.Assert(!Thread.CurrentThread.CurrentCulture.DateTimeFormat.IsReadOnly, "(!System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.IsReadOnly)");
                    Thread.CurrentThread.CurrentCulture.DateTimeFormat.Calendar = calendar;
                }
            }
            if (!flag3 && m_styleClass != null)
            {
                if ((uint)(typeCode - 5) <= 10u)
                {
                    flag = true;
                }
                if (flag)
                {
                    int styleIntValue = 1;
                    m_styleClass.GetStyleAttribute(m_objectType, m_objectName, "NumeralVariant", m_context, ref m_sharedFormatSettings, out styleIntValue);
                    if (styleIntValue > 2)
                    {
                        CultureInfo cultureInfo2 = formattingCulture;
                        if (cultureInfo2 == null)
                        {
                            cultureInfo2 = Thread.CurrentThread.CurrentCulture;
                        }
                        string numberDecimalSeparator = cultureInfo2.NumberFormat.NumberDecimalSeparator;
                        m_styleClass.GetStyleAttribute(m_objectType, m_objectName, "NumeralLanguage", m_context, ref m_sharedFormatSettings, out styleStringValue);
                        if (styleStringValue != null)
                        {
                            formattingCulture = new CultureInfo(styleStringValue, useUserOverride: false);
                        }
                        else if (formattingCulture == null)
                        {
                            formattingCulture = cultureInfo2;
                        }
                        bool numberTranslated = true;
                        text = FormatDigitReplacement.FormatNumeralVariant(text, styleIntValue, formattingCulture, numberDecimalSeparator, out numberTranslated);
                        if (!numberTranslated)
                        {
                            m_context.ErrorContext.Register(ProcessingErrorCode.rsInvalidNumeralVariantForLanguage, Severity.Warning, m_objectType, m_objectName, "NumeralVariant", styleIntValue.ToString(CultureInfo.InvariantCulture), formattingCulture.Name);
                        }
                    }
                }
            }
            return(text);
        }