From 6256b82d62fbfe09fe37f717a66657ef9558abce Mon Sep 17 00:00:00 2001 From: monojenkins Date: Tue, 3 Sep 2019 16:33:48 -0400 Subject: [2019-02] [corlib] Add hack for Hebrew calendar data (#16645) * [corlib] Add hack for Hebrew calendar data * Fix month names for the Hebrew calendar * [csproj] Update project files --- mcs/class/corlib/ReferenceSources/CalendarData.cs | 42 ++++++++++++++++++++++- mcs/class/corlib/corlib.csproj | 2 +- mcs/class/corlib/corlib.dll.sources | 2 +- 3 files changed, 43 insertions(+), 3 deletions(-) diff --git a/mcs/class/corlib/ReferenceSources/CalendarData.cs b/mcs/class/corlib/ReferenceSources/CalendarData.cs index 37ded82917e..5947c04cb56 100644 --- a/mcs/class/corlib/ReferenceSources/CalendarData.cs +++ b/mcs/class/corlib/ReferenceSources/CalendarData.cs @@ -34,6 +34,36 @@ namespace System.Globalization [StructLayout (LayoutKind.Sequential)] partial class CalendarData { + private static string[] HEBREW_MONTH_NAMES = new[] { + "\u05EA\u05E9\u05E8\u05D9", + "\u05D7\u05E9\u05D5\u05DF", + "\u05DB\u05E1\u05DC\u05D5", + "\u05D8\u05D1\u05EA", + "\u05E9\u05D1\u05D8", + "\u05D0\u05D3\u05E8", + "\u05D0\u05D3\u05E8\u0020\u05D1", + "\u05E0\u05D9\u05E1\u05DF", + "\u05D0\u05D9\u05D9\u05E8", + "\u05E1\u05D9\u05D5\u05DF", + "\u05EA\u05DE\u05D5\u05D6", + "\u05D0\u05D1", + "\u05D0\u05DC\u05D5\u05DC" }; + + private static string[] HEBREW_LEAP_MONTH_NAMES = new[] { + "\u05EA\u05E9\u05E8\u05D9", + "\u05D7\u05E9\u05D5\u05DF", + "\u05DB\u05E1\u05DC\u05D5", + "\u05D8\u05D1\u05EA", + "\u05E9\u05D1\u05D8", + "\u05D0\u05D3\u05E8\u0020\u05D0", + "\u05D0\u05D3\u05E8\u0020\u05D1", + "\u05E0\u05D9\u05E1\u05DF", + "\u05D0\u05D9\u05D9\u05E8", + "\u05E1\u05D9\u05D5\u05DF", + "\u05EA\u05DE\u05D5\u05D6", + "\u05D0\u05D1", + "\u05D0\u05DC\u05D5\u05DC" }; + public static int nativeGetTwoDigitYearMax (int calID) { // -1 mean OS does not override default BCL max year @@ -43,7 +73,17 @@ namespace System.Globalization static bool nativeGetCalendarData (CalendarData data, string localeName, int calendarId) { // TODO: Convert calendar-id to mono runtime calendar-id when it's used - return data.fill_calendar_data (localeName.ToLowerInvariant (), calendarId); + if (data.fill_calendar_data (localeName.ToLowerInvariant (), calendarId)) { + if ((CalendarId)calendarId == CalendarId.HEBREW) { + // HACK: Generate leap month names because the native code does not do it + // and tests would fail to round-trip dates on leap years. + // https://github.com/mono/mono/issues/16623 + data.saMonthNames = HEBREW_MONTH_NAMES; + data.saLeapYearMonthNames = HEBREW_LEAP_MONTH_NAMES; + } + return true; + } + return false; } [MethodImplAttribute (MethodImplOptions.InternalCall)] diff --git a/mcs/class/corlib/corlib.csproj b/mcs/class/corlib/corlib.csproj index 416442cdce9..6b0639f6784 100644 --- a/mcs/class/corlib/corlib.csproj +++ b/mcs/class/corlib/corlib.csproj @@ -331,6 +331,7 @@ + @@ -1058,7 +1059,6 @@ - diff --git a/mcs/class/corlib/corlib.dll.sources b/mcs/class/corlib/corlib.dll.sources index a609aea2561..527c9692c70 100644 --- a/mcs/class/corlib/corlib.dll.sources +++ b/mcs/class/corlib/corlib.dll.sources @@ -1103,7 +1103,7 @@ ReferenceSources/AppContextDefaultValues.cs ../referencesource/mscorlib/system/globalization/gregoriancalendarhelper.cs ../referencesource/mscorlib/system/globalization/gregoriancalendartypes.cs ../referencesource/mscorlib/system/globalization/hebrewcalendar.cs -../referencesource/mscorlib/system/globalization/hebrewnumber.cs +../../../external/corefx/src/Common/src/CoreLib/System/Globalization/HebrewNumber.cs ../referencesource/mscorlib/system/globalization/hijricalendar.cs ../referencesource/mscorlib/system/globalization/japanesecalendar.cs ../referencesource/mscorlib/system/globalization/japaneselunisolarcalendar.cs -- cgit v1.2.3