2009-01-22 Atsushi Enomoto <atsushi@ximian.com>
[mono.git] / tools / locale-builder / Driver.cs
index 3f851f17f59dd1042a3f881496f63ac0faf781c2..52586043f241713ffeb53948ee225b67cc290485 100644 (file)
@@ -523,6 +523,8 @@ namespace Mono.Tools.LocaleBuilder {
                                                df.MonthNames.Clear ();
                                        df.MonthNames.Add (ni2.Current.Value);
                                }
+                               if (df.MonthNames.Count == 12)
+                                       df.MonthNames.Add (String.Empty);
 
                                ni2 = (XPathNodeIterator) ni.Current.Evaluate ("dayNames/day");
                                while (ni2.MoveNext ()) {
@@ -544,6 +546,8 @@ namespace Mono.Tools.LocaleBuilder {
                                                df.AbbreviatedMonthNames.Clear ();
                                        df.AbbreviatedMonthNames.Add (ni2.Current.Value);
                                }
+                               if (df.AbbreviatedMonthNames.Count == 12)
+                                       df.AbbreviatedMonthNames.Add (String.Empty);
 
                                ni2 = (XPathNodeIterator) ni.Current.Evaluate ("dateFormats/dateFormatLength");
                                while (ni2.MoveNext ()) {
@@ -639,8 +643,8 @@ namespace Mono.Tools.LocaleBuilder {
 
                                ni2 = (XPathNodeIterator) ni.Current.Evaluate ("dateTimeFormats/dateTimeFormatLength/dateTimeFormat/pattern");
                                if (ni2.MoveNext ())
-                                       df.FullDateTimePattern = String.Format (ni2.Current.ToString (),
-                                                       df.LongTimePattern, df.LongDatePattern);
+                                       df.RawFullDateTimePattern = ni2.Current.ToString ();/*String.Format (ni2.Current.ToString (),
+                                                       df.LongTimePattern, df.LongDatePattern);*/
 
                                XPathNodeIterator am = ni.Current.SelectChildren ("am", "");
                                if (am.MoveNext ())
@@ -1071,7 +1075,7 @@ namespace Mono.Tools.LocaleBuilder {
                        }
                 }
 
-                static string control_chars = "ghmsftz";
+                static string control_chars = "eghmsftz";
 
                 // HACK: We are trying to build year_month and month_day patterns from the full pattern.
                 private void ParseFullDateFormat (DateTimeFormatEntry df, string full)
@@ -1081,8 +1085,9 @@ namespace Mono.Tools.LocaleBuilder {
                         string year_month = String.Empty;
                         bool in_month_data = false;
                         bool in_year_data = false;
-                        int month_end = 0;
-                        int year_end = 0;
+                       int day_start = 0, day_end = 0;
+                        int month_start = 0, month_end = 0;
+                        int year_start = 0, year_end = 0;
                        bool inquote = false;
                         
                         for (int i = 0; i < full.Length; i++) {
@@ -1092,18 +1097,24 @@ namespace Mono.Tools.LocaleBuilder {
                                         year_month += c;
                                         in_year_data = true;
                                         in_month_data = true;
-                                        month_end = month_day.Length;
+                                       if (month_start == 0)
+                                               month_start = i;
+                                        month_end = i;
                                         year_end = year_month.Length;
                                 } else if (!inquote && Char.ToLower (c) == 'd') {
                                         month_day += c;
                                         in_month_data = true;
                                         in_year_data = false;
-                                        month_end = month_day.Length;
+                                       if (day_start == 0)
+                                               day_start = i;
+                                        day_end = i;
                                 } else if (!inquote && Char.ToLower (c) == 'y') {
                                         year_month += c;
                                         in_year_data = true;
                                         in_month_data = false;
-                                        year_end = year_month.Length;
+                                       if (year_start == 0)
+                                               year_start = i;
+                                        year_end = i;
                                 } else if (!inquote && control_chars.IndexOf (Char.ToLower (c)) >= 0) {
                                         in_year_data = false;
                                         in_month_data = false;
@@ -1120,15 +1131,35 @@ namespace Mono.Tools.LocaleBuilder {
                         }
 
                         if (month_day != String.Empty) {
-                                month_day = month_day.Substring (0, month_end);
-                                df.MonthDayPattern = month_day;
+                                //month_day = month_day.Substring (0, month_end);
+                                df.MonthDayPattern = TrimPattern (month_day);
                         }
                         if (year_month != String.Empty) {
-                                year_month = year_month.Substring (0, year_end);
-                                df.YearMonthPattern = year_month;
+                                //year_month = year_month.Substring (0, year_end);
+                                df.YearMonthPattern = TrimPattern (year_month);
                         }
                 }
 
+               string TrimPattern (string p)
+               {
+                       int idx = 0;
+                       p = p.Trim ().TrimEnd (',');
+                       idx = p.LastIndexOf ("' de '"); // spanish dates
+                       if (idx > 0)
+                               p = p.Substring (0, idx);
+                       idx = p.LastIndexOf ("' ta '"); // finnish
+                       if (idx > 0)
+                               p = p.Substring (0, idx);
+                       idx = p.LastIndexOf ("'ren'"); // euskara
+                       if (idx > 0)
+                               p = p.Replace ("'ren'", "").Trim ();
+                       idx = p.LastIndexOf ("'a'"); // estonian
+                       if (idx > 0)
+                               p = p.Substring (0, idx);
+
+                       return p.Replace ("'ta '", "'ta'"); // finnish
+               }
+
                 private class LcidComparer : IComparer {
 
                         public int Compare (object a, object b)
@@ -1147,7 +1178,7 @@ namespace Mono.Tools.LocaleBuilder {
                                 CultureInfoEntry aa = (CultureInfoEntry) a;
                                 CultureInfoEntry bb = (CultureInfoEntry) b;
 
-                                return aa.Name.ToLower ().CompareTo (bb.Name.ToLower ());
+                                return String.CompareOrdinal(aa.Name.ToLower (), bb.Name.ToLower ());
                         }
                 }