Merge pull request #283 from robwilkens/master
[mono.git] / tools / locale-builder / CultureInfoEntry.cs
1 //
2 // Mono.Tools.LocaleBuilder.CultureInfoEntry
3 //
4 // Author(s):
5 //  Jackson Harper (jackson@ximian.com)
6 //
7 // (C) 2004 Novell, Inc (http://www.novell.com)
8 //
9
10
11 using System;
12 using System.Text;
13 using System.Collections.Generic;
14 using System.Globalization;
15
16 namespace Mono.Tools.LocaleBuilder
17 {
18         public class CultureInfoEntry : Entry
19         {
20                 string language;
21
22                 public string Script;
23                 public string Territory;
24
25                 public string EnglishName;
26                 public string DisplayName;
27                 public string NativeName;
28                 public string ThreeLetterWindowsLanguageName;
29                 public string TwoLetterISOLanguageName;
30                 public string ThreeLetterISOLanguageName;
31                 public string LCID;
32                 public string ParentLcid;
33                 public string SpecificLcid;
34                 public RegionInfoEntry RegionInfoEntry;
35                 public DateTimeFormatEntry DateTimeFormatEntry;
36                 public NumberFormatEntry NumberFormatEntry;
37                 public TextInfoEntry TextInfoEntry;
38                 public int DateTimeIndex;
39                 public int NumberIndex;
40                 public string NativeCurrencyName;
41                 public string NativeTerritoryName;
42                 public string[] NativeCalendarNames = new string[Constants.NUM_CALENDARS];
43
44                 public CalendarType CalendarType;
45                 public GregorianCalendarTypes GregorianCalendarType;
46
47                 public List<CultureInfoEntry> Children = new List<CultureInfoEntry> ();
48
49                 public int Row;
50
51                 public CultureInfoEntry ()
52                 {
53                         DateTimeFormatEntry = new DateTimeFormatEntry ();
54                         NumberFormatEntry = new NumberFormatEntry ();
55                 }
56
57                 public string Language {
58                         get {
59                                 return language;
60                         }
61                         set {
62                                 language = value;
63                         }
64                 }
65
66                 public bool HasMissingLocale { get; set; }
67
68                 public string OriginalName { get; set; }
69
70                 public CultureInfoEntry Parent { get; set; }
71
72                 public string Name {
73                         get {
74                                 string s = language;
75                                 if (Script != null)
76                                         s = s + "-" + Script;
77                                 if (Territory != null)
78                                         s = s + "-" + Territory;
79
80                                 return s;
81                         }
82                 }
83
84                 public string GetExportName ()
85                 {
86                         return OriginalName.Replace ('_', '-');
87                 }
88
89                 public override string ToString ()
90                 {
91                         StringBuilder builder = new StringBuilder ();
92                         AppendTableRow (builder);
93                         return builder.ToString ();
94                 }
95
96                 public void AppendTableRow (StringBuilder builder)
97                 {
98                         builder.Append ("\t{");
99                         builder.Append (LCID).Append (", ");
100                         builder.Append (ParentLcid).Append (", ");
101
102                         int calendar_type = (int) CalendarType;
103                         calendar_type <<= 8;
104                         if (CalendarType == CalendarType.Gregorian)
105                                 calendar_type |= (int) GregorianCalendarType;
106
107                         builder.Append (calendar_type).Append (", ");
108                         builder.Append (RegionInfoEntry == null ? -1 : RegionInfoEntry.Index).Append (", ");
109                         builder.Append (EncodeStringIdx (GetExportName ())).Append (", ");
110                         builder.Append (EncodeStringIdx (EnglishName)).Append (", ");
111                         builder.Append (EncodeStringIdx (NativeName)).Append (", ");
112                         builder.Append (EncodeStringIdx (ThreeLetterWindowsLanguageName)).Append (", ");
113                         builder.Append (EncodeStringIdx (ThreeLetterISOLanguageName)).Append (", ");
114                         builder.Append (EncodeStringIdx (TwoLetterISOLanguageName)).Append (", ");
115                         builder.Append (EncodeStringIdx (Territory)).Append (", ");
116                         AppendNames (builder, NativeCalendarNames).Append (", ");
117                         builder.Append (DateTimeFormatEntry.Row).Append (", ");
118                         builder.Append (NumberFormatEntry.Row).Append (", ");
119                         builder.Append (TextInfoEntry.ToString ());
120                         builder.Append ('}');
121                 }
122
123                 private string ValuesString (int[] values)
124                 {
125                         StringBuilder builder = new StringBuilder ();
126                         builder.Append ('{');
127                         for (int i = 0; i < values.Length; i++) {
128                                 builder.Append (values[i].ToString ());
129                                 if (i + 1 < values.Length)
130                                         builder.Append (", ");
131                         }
132                         builder.Append ("}");
133                         return builder.ToString ();
134                 }
135         }
136
137 }
138