Esempio n. 1
0
        private static bool EnumMonthNames(string localeName, CalendarId calendarId, CalendarDataType dataType, out string[] monthNames, ref string leapHebrewMonthName)
        {
            monthNames = null;

            EnumCalendarsData callbackContext = new EnumCalendarsData();

            callbackContext.Results = new List <string>();
            bool result = EnumCalendarInfo(localeName, calendarId, dataType, ref callbackContext);

            if (result)
            {
                // the month-name arrays are expected to have 13 elements.  If ICU only returns 12, add an
                // extra empty string to fill the array.
                if (callbackContext.Results.Count == 12)
                {
                    callbackContext.Results.Add(string.Empty);
                }

                if (callbackContext.Results.Count > 13)
                {
                    Debug.Assert(calendarId == CalendarId.HEBREW && callbackContext.Results.Count == 14);

                    if (calendarId == CalendarId.HEBREW)
                    {
                        leapHebrewMonthName = callbackContext.Results[13];
                    }
                    callbackContext.Results.RemoveRange(13, callbackContext.Results.Count - 13);
                }

                monthNames = callbackContext.Results.ToArray();
            }

            return(result);
        }
Esempio n. 2
0
        private static bool EnumEraNames(string localeName, CalendarId calendarId, CalendarDataType dataType, out string[]?eraNames)
        {
            bool result = EnumCalendarInfo(localeName, calendarId, dataType, out eraNames);

            // .NET expects that only the Japanese calendars have more than 1 era.
            // So for other calendars, only return the latest era.
            if (calendarId != CalendarId.JAPAN && calendarId != CalendarId.JAPANESELUNISOLAR && eraNames?.Length > 0)
            {
                string[] latestEraName = new string[] { eraNames ![eraNames.Length - 1] };
        private static bool EnumMonthNames(string localeName, CalendarId calendarId, CalendarDataType dataType, out string[] monthNames)
        {
            monthNames = null;

            CallbackContext callbackContext = new CallbackContext();
            bool            result          = EnumCalendarInfo(localeName, calendarId, dataType, callbackContext);

            if (result)
            {
                // the month-name arrays are expected to have 13 elements.  If ICU only returns 12, add an
                // extra empty string to fill the array.
                if (callbackContext.Results.Count == 12)
                {
                    callbackContext.Results.Add(string.Empty);
                }

                monthNames = callbackContext.Results.ToArray();
            }

            return(result);
        }
Esempio n. 4
0
 private static bool GetCalendarInfo(string localeName, CalendarId calendarId, CalendarDataType dataType, out string calendarString)
 {
     return Interop.CallStringMethod(
         (locale, calId, type, stringBuilder) =>
             Interop.GlobalizationInterop.GetCalendarInfo(
                 locale,
                 calId,
                 type,
                 stringBuilder,
                 stringBuilder.Capacity),
         localeName,
         calendarId,
         dataType,
         out calendarString);
 }
Esempio n. 5
0
        public unsafe static bool GetCalendarInfo(string localeName, object calendarId, CalendarDataType aDataType, out string calendarString)
        {
            switch (aDataType)
            {
            case CalendarDataType.Uninitialized:
                break;

            case CalendarDataType.NativeName:
                break;

            case CalendarDataType.MonthDay:
                break;

            case CalendarDataType.ShortDates:
                break;

            case CalendarDataType.LongDates:
                break;

            case CalendarDataType.YearMonths:
                break;

            case CalendarDataType.DayNames:
                break;

            case CalendarDataType.AbbrevDayNames:
                break;

            case CalendarDataType.MonthNames:
                break;

            case CalendarDataType.AbbrevMonthNames:
                break;

            case CalendarDataType.SuperShortDayNames:
                break;

            case CalendarDataType.MonthGenitiveNames:
                break;

            case CalendarDataType.AbbrevMonthGenitiveNames:
                break;

            case CalendarDataType.EraNames:
                break;

            case CalendarDataType.AbbrevEraNames:
                break;

            default:
                break;
            }
            Debugger.DoSendNumber((int)aDataType);
            throw new NotImplementedException();
        }
Esempio n. 6
0
        internal static bool EnumCalendarInfo(string localeName, CalendarId calendarId, CalendarDataType dataType, out string[] calendarData)
        {
            calendarData = null;

            CallbackContext callbackContext = new CallbackContext();
            bool result = EnumCalendarInfo(localeName, calendarId, dataType, callbackContext);
            if (result)
            {
                calendarData = callbackContext.Results.ToArray();
            }

            return result;
        }
Esempio n. 7
0
 private static bool EnumCalendarInfo(string localeName, CalendarId calendarId, CalendarDataType dataType, CallbackContext callbackContext)
 {
     GCHandle context = GCHandle.Alloc(callbackContext);
     try
     {
         return Interop.GlobalizationInterop.EnumCalendarInfo(EnumCalendarInfoCallback, localeName, calendarId, dataType, (IntPtr)context);
     }
     finally
     {
         context.Free();
     }
 }
Esempio n. 8
0
 internal static unsafe partial ResultCode GetCalendarInfo(string localeName, CalendarId calendarId, CalendarDataType calendarDataType, char *result, int resultCapacity);
Esempio n. 9
0
 internal static extern ResultCode GetCalendarInfo(string localeName, CalendarId calendarId, CalendarDataType calendarDataType, [Out] StringBuilder result, int resultCapacity);
        internal static bool EnumCalendarInfo(string localeName, CalendarId calendarId, CalendarDataType dataType, out string[] calendarData)
        {
            calendarData = null;

            CallbackContext callbackContext = new CallbackContext();
            bool            result          = EnumCalendarInfo(localeName, calendarId, dataType, callbackContext);

            if (result)
            {
                calendarData = callbackContext.Results.ToArray();
            }

            return(result);
        }
        // PAL Layer ends here

        private static bool GetCalendarInfo(string localeName, CalendarId calendarId, CalendarDataType dataType, out string calendarString)
        {
            Debug.Assert(!GlobalizationMode.Invariant);

            return(Interop.CallStringMethod(
                       (locale, calId, type, stringBuilder) =>
                       Interop.GlobalizationInterop.GetCalendarInfo(
                           locale,
                           calId,
                           type,
                           stringBuilder,
                           stringBuilder.Capacity),
                       localeName,
                       calendarId,
                       dataType,
                       out calendarString));
        }
 internal static extern ResultCode GetCalendarInfo(string localeName, CalendarId calendarId, CalendarDataType calendarDataType, [Out] StringBuilder result, int resultCapacity);
        private static bool EnumDatePatterns(string localeName, CalendarId calendarId, CalendarDataType dataType, out string[] datePatterns)
        {
            datePatterns = null;

            CallbackContext callbackContext = new CallbackContext();

            callbackContext.DisallowDuplicates = true;
            bool result = EnumCalendarInfo(localeName, calendarId, dataType, callbackContext);

            if (result)
            {
                List <string> datePatternsList = callbackContext.Results;

                datePatterns = new string[datePatternsList.Count];
                for (int i = 0; i < datePatternsList.Count; i++)
                {
                    datePatterns[i] = NormalizeDatePattern(datePatternsList[i]);
                }
            }

            return(result);
        }
Esempio n. 14
0
        private static bool EnumDatePatterns(string localeName, CalendarId calendarId, CalendarDataType dataType, out string[]?datePatterns)
        {
            datePatterns = null;

            EnumCalendarsData callbackContext = default;

            callbackContext.Results            = new List <string>();
            callbackContext.DisallowDuplicates = true;
            bool result = EnumCalendarInfo(localeName, calendarId, dataType, ref callbackContext);

            if (result)
            {
                List <string> datePatternsList = callbackContext.Results;

                for (int i = 0; i < datePatternsList.Count; i++)
                {
                    datePatternsList[i] = NormalizeDatePattern(datePatternsList[i]);
                }

                if (dataType == CalendarDataType.ShortDates)
                {
                    FixDefaultShortDatePattern(datePatternsList);
                }

                datePatterns = datePatternsList.ToArray();
            }

            return(result);
        }
Esempio n. 15
0
        // PAL Layer ends here

        private static unsafe bool GetCalendarInfo(string localeName, CalendarId calendarId, CalendarDataType dataType, out string?calendarString)
        {
            Debug.Assert(!GlobalizationMode.Invariant);

            return(Interop.CallStringMethod(
                       (buffer, locale, id, type) =>
            {
                fixed(char *bufferPtr = buffer)
                {
                    return Interop.Globalization.GetCalendarInfo(locale, id, type, bufferPtr, buffer.Length);
                }
            },
                       localeName,
                       calendarId,
                       dataType,
                       out calendarString));
        }
Esempio n. 16
0
 internal static extern bool EnumCalendarInfo(EnumCalendarInfoCallback callback, string localeName, CalendarId calendarId, CalendarDataType calendarDataType, IntPtr context);
Esempio n. 17
0
        private static bool GetCalendarInfo(string localeName, CalendarId calendarId, CalendarDataType dataType, out string calendarString)
        {
            calendarString = null;

            const int initialStringSize = 80;
            const int maxDoubleAttempts = 5;

            for (int i = 0; i < maxDoubleAttempts; i++)
            {
                StringBuilder stringBuilder = StringBuilderCache.Acquire((int)(initialStringSize * Math.Pow(2, i)));

                CalendarDataResult result = Interop.GlobalizationInterop.GetCalendarInfo(
                    localeName,
                    calendarId,
                    dataType,
                    stringBuilder,
                    stringBuilder.Capacity);

                if (result == CalendarDataResult.Success)
                {
                    calendarString = StringBuilderCache.GetStringAndRelease(stringBuilder);
                    return(true);
                }
                else
                {
                    StringBuilderCache.Release(stringBuilder);

                    if (result != CalendarDataResult.InsufficentBuffer)
                    {
                        return(false);
                    }

                    // else, it is an InsufficentBuffer error, so loop and increase the string size
                }
            }

            return(false);
        }
 internal static extern bool EnumCalendarInfo(EnumCalendarInfoCallback callback, string localeName, CalendarId calendarId, CalendarDataType calendarDataType, IntPtr context);
Esempio n. 19
0
 private static unsafe bool EnumCalendarInfo(string localeName, CalendarId calendarId, CalendarDataType dataType, ref EnumCalendarsData callbackContext)
 {
     return(Interop.Globalization.EnumCalendarInfo(EnumCalendarInfoCallback, localeName, calendarId, dataType, (IntPtr)Unsafe.AsPointer(ref callbackContext)));
 }
Esempio n. 20
0
        private static bool EnumDatePatterns(string localeName, CalendarId calendarId, CalendarDataType dataType, out string[] datePatterns)
        {
            datePatterns = null;

            CallbackContext callbackContext = new CallbackContext();
            callbackContext.DisallowDuplicates = true;
            bool result = EnumCalendarInfo(localeName, calendarId, dataType, callbackContext);
            if (result)
            {
                List<string> datePatternsList = callbackContext.Results;

                datePatterns = new string[datePatternsList.Count];
                for (int i = 0; i < datePatternsList.Count; i++)
                {
                    datePatterns[i] = NormalizeDatePattern(datePatternsList[i]);
                }
            }

            return result;
        }
        private static bool EnumCalendarInfo(string localeName, CalendarId calendarId, CalendarDataType dataType, CallbackContext callbackContext)
        {
            GCHandle context = GCHandle.Alloc(callbackContext);

            try
            {
                return(Interop.GlobalizationInterop.EnumCalendarInfo(EnumCalendarInfoCallback, localeName, calendarId, dataType, (IntPtr)context));
            }
            finally
            {
                context.Free();
            }
        }
Esempio n. 22
0
        private static bool EnumMonthNames(string localeName, CalendarId calendarId, CalendarDataType dataType, out string[] monthNames)
        {
            monthNames = null;

            CallbackContext callbackContext = new CallbackContext();
            bool result = EnumCalendarInfo(localeName, calendarId, dataType, callbackContext);
            if (result)
            {
                // the month-name arrays are expected to have 13 elements.  If ICU only returns 12, add an
                // extra empty string to fill the array.
                if (callbackContext.Results.Count == 12)
                {
                    callbackContext.Results.Add(string.Empty);
                }

                monthNames = callbackContext.Results.ToArray();
            }

            return result;
        }
Esempio n. 23
0
        // PAL Layer ends here

        private static unsafe bool GetCalendarInfo(string localeName, CalendarId calendarId, CalendarDataType dataType, out string?calendarString)
        {
            Debug.Assert(!GlobalizationMode.Invariant);

            return(Interop.CallStringMethod(
Esempio n. 24
0
        private static bool EnumEraNames(string localeName, CalendarId calendarId, CalendarDataType dataType, out string[] eraNames)
        {
            bool result = EnumCalendarInfo(localeName, calendarId, dataType, out eraNames);

            // .NET expects that only the Japanese calendars have more than 1 era.
            // So for other calendars, only return the latest era.
            if (calendarId != CalendarId.JAPAN && calendarId != CalendarId.JAPANESELUNISOLAR && eraNames.Length > 0)
            {
                string[] latestEraName = new string[] { eraNames[eraNames.Length - 1] };
                eraNames = latestEraName;
            }

            return result;
        }
Esempio n. 25
0
 // We skip the following DllImport because of 'Parsing function pointer types in signatures is not supported.' for some targeted
 // platforms (for example, WASM build).
 private static unsafe partial bool EnumCalendarInfo(IntPtr callback, string localeName, CalendarId calendarId, CalendarDataType calendarDataType, IntPtr context);
Esempio n. 26
0
        private static bool GetCalendarInfo(string localeName, CalendarId calendarId, CalendarDataType dataType, out string calendarString)
        {
            calendarString = null;

            const int initialStringSize = 80;
            const int maxDoubleAttempts = 5;

            for (int i = 0; i < maxDoubleAttempts; i++)
            {
                StringBuilder stringBuilder = StringBuilderCache.Acquire((int)(initialStringSize * Math.Pow(2, i)));

                CalendarDataResult result = Interop.GlobalizationInterop.GetCalendarInfo(
                    localeName,
                    calendarId,
                    dataType,
                    stringBuilder,
                    stringBuilder.Capacity);

                if (result == CalendarDataResult.Success)
                {
                    calendarString = StringBuilderCache.GetStringAndRelease(stringBuilder);
                    return true;
                }
                else
                {
                    StringBuilderCache.Release(stringBuilder);

                    if (result != CalendarDataResult.InsufficentBuffer)
                    {
                        return false;
                    }

                    // else, it is an InsufficentBuffer error, so loop and increase the string size
                }
            }

            return false;
        }