2 // DateTimeFormatEntry.cs
5 // Jackson Harper (jackson@ximian.com)
6 // Marek Safar <marek.safar@gmail.com>
8 // (C) 2004, Novell, Inc (http://www.novell.com)
9 // Copyright (C) 2012 Xamarin Inc (http://www.xamarin.com)
11 // Permission is hereby granted, free of charge, to any person obtaining
12 // a copy of this software and associated documentation files (the
13 // "Software"), to deal in the Software without restriction, including
14 // without limitation the rights to use, copy, modify, merge, publish,
15 // distribute, sublicense, and/or sell copies of the Software, and to
16 // permit persons to whom the Software is furnished to do so, subject to
17 // the following conditions:
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
33 using System.Collections.Generic;
35 namespace Mono.Tools.LocaleBuilder
37 public class DateTimeFormatEntry : Entry
39 public string NativeCalendarName;
40 public string[] AbbreviatedDayNames = new string[Constants.NUM_DAYS];
41 // Input data are mostly missing for abbreviated month but datetime 'MMM' parse depends on them
42 // we pre-fill them the most common ones
43 public string[] AbbreviatedMonthGenitiveNames = new string[Constants.NUM_MONTHS] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", null };
44 public string[] AbbreviatedMonthNames = new string[Constants.NUM_MONTHS] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", null };
45 public string AMDesignator;
46 public int? CalendarWeekRule;
47 public string DateSeparator;
48 public string[] DayNames = new string[Constants.NUM_DAYS];
49 public int? FirstDayOfWeek;
50 public string RawFullDateTimePattern;
51 public string LongDatePattern;
52 public string LongTimePattern;
53 public string MonthDayPattern;
54 public string[] MonthGenitiveNames = new string[Constants.NUM_MONTHS];
55 public string[] MonthNames = new string[Constants.NUM_MONTHS];
56 public string PMDesignator;
57 public string ShortDatePattern;
58 public string ShortTimePattern;
59 public string TimeSeparator;
60 public string YearMonthPattern;
61 public string[] ShortDatePatterns = new string[Constants.NUM_SHORT_DATE_PATTERNS];
62 public string[] LongDatePatterns = new string[Constants.NUM_LONG_DATE_PATTERNS];
63 public string[] ShortTimePatterns = new string[Constants.NUM_SHORT_TIME_PATTERNS];
64 public string[] LongTimePatterns = new string[Constants.NUM_LONG_TIME_PATTERNS];
65 public string[] ShortestDayNames = new string[Constants.NUM_DAYS];
69 public void AppendTableRow (StringBuilder builder)
71 builder.Append ("\t{");
72 builder.Append (EncodeStringIdx (LongDatePattern) + ", ");
73 builder.Append (EncodeStringIdx (ShortDatePattern) + ", ");
75 builder.Append (EncodeStringIdx (LongTimePattern) + ", ");
76 builder.Append (EncodeStringIdx (ShortTimePattern) + ", ");
78 builder.Append (EncodeStringIdx (YearMonthPattern) + ", ");
79 builder.Append (EncodeStringIdx (MonthDayPattern) + ", ");
81 builder.Append (EncodeStringIdx (AMDesignator) + ", ");
82 builder.Append (EncodeStringIdx (PMDesignator) + ", ");
84 AppendNames (builder, DayNames).Append (", ");
85 AppendNames (builder, AbbreviatedDayNames).Append (", ");
86 AppendNames (builder, ShortestDayNames).Append (", ");
88 AppendNames (builder, MonthNames).Append (", ");
89 AppendNames (builder, MonthGenitiveNames).Append (", ");
90 AppendNames (builder, AbbreviatedMonthNames).Append (", ");
91 AppendNames (builder, AbbreviatedMonthGenitiveNames).Append (", ");
94 builder.Append ((CalendarWeekRule ?? 0) + ", ");
95 builder.Append ((FirstDayOfWeek ?? 0) + ", ");
97 builder.Append (EncodeStringIdx (DateSeparator) + ", ");
98 builder.Append (EncodeStringIdx (TimeSeparator) + ", ");
100 AppendPatterns (builder, ShortDatePatterns);
101 builder.Append (',');
102 AppendPatterns (builder, LongDatePatterns);
103 builder.Append (',');
104 AppendPatterns (builder, ShortTimePatterns);
105 builder.Append (',');
106 AppendPatterns (builder, LongTimePatterns);
108 builder.Append ('}');
111 private void AppendPatterns (StringBuilder builder, IList<string> patterns)
113 builder.Append ('{');
114 for (int i = 0; i < patterns.Count; i++) {
116 builder.Append (',');
118 string s = EncodeStringIdx (patterns[i]);
121 if (patterns.Count == 0)
122 builder.Append ('0');
123 builder.Append ('}');
126 public override string ToString ()
128 StringBuilder builder = new StringBuilder ();
129 AppendTableRow (builder);
130 return builder.ToString ();