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); }
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); }
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); }
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(); }
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; }
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(); } }
internal static unsafe partial ResultCode GetCalendarInfo(string localeName, CalendarId calendarId, CalendarDataType calendarDataType, char *result, int resultCapacity);
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)); }
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 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); }
// 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)); }
internal static extern bool EnumCalendarInfo(EnumCalendarInfoCallback callback, string localeName, CalendarId calendarId, CalendarDataType calendarDataType, IntPtr context);
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); }
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))); }
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(); } }
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; }
// 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(
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; }
// 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);
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; }