8 public StreamWriter writer;
10 static readonly string ns = "Mono.Globalization";
11 static readonly string path = "MonoCultures.cs";
15 this.writer = new StreamWriter (path);
16 this.document = new XmlDocument ();
19 public void WriteStartNamespaceDecl ()
21 writer.Write ("namespace {0} {{\n", ns);
24 public void WriteEndNamespaceDecl ()
29 public void WriteStartClassDef (string class_name, string base_class)
31 writer.Write ("\tclass {0} : {1}\n\t{{\n", class_name, base_class);
34 public void WriteEndClassDef ()
36 writer.Write ("\t}\n\n");
39 public void WriteStartMethod (string method)
41 writer.Write ("\t\tvoid {0} ()\n\t\t{{\n", method);
44 public void WriteEndMethod ()
46 writer.Write ("\t\t}\n");
49 public void WriteConstructor (string name)
51 writer.Write ("\t\tprivate {0} () : base (0) {{}}\n", name);
54 public void WriteStartConstructor (string class_name)
56 writer.Write ("\t\tpublic {0} ()\n\t\t{{\n", class_name);
59 public void WriteEndConstructor ()
61 writer.Write ("\t\t}\n");
64 public void WriteMember (string member)
66 string expression = String.Format ("/CultureInfo/{0}", member);
67 XmlNode result = document.SelectSingleNode (expression);
71 WriteMember (member, result);
74 public void WriteMember (string member, XmlNode node)
78 if (member.EndsWith ("Name") || member.EndsWith ("Separator") ||
79 member.EndsWith ("Symbol") || member.EndsWith ("Sign"))
81 value = String.Format ("\"{0}\"", node.InnerXml);
83 value = node.InnerXml;
85 writer.Write ("\t\t\t{0} = {1};\n", member, value);
88 public void WriteCalendar ()
90 string expression = String.Format ("/CultureInfo/Calendar");
91 XmlNode result = document.SelectSingleNode (expression);
93 writer.Write ("\t\t\tCalendar = new {0} ();\n", result.InnerXml);
96 public void WriteCompareInfo ()
98 XmlNode compare_info_lcid = document.SelectSingleNode ("/CultureInfo/CompareInfo/@LCID");
99 WriteMember ("CompareInfo_LCID", compare_info_lcid);
102 public void WriteTextInfo ()
104 XmlNode info = document.SelectSingleNode ("/CultureInfo/TextInfo");
106 WriteMember ("TextInfo_ANSICodePage", info.SelectSingleNode ("ANSICodePage"));
107 WriteMember ("TextInfo_EBCDICCodePage", info.SelectSingleNode ("EBCDICCodePage"));
108 WriteMember ("TextInfo_MacCodePage", info.SelectSingleNode ("MacCodePage"));
109 WriteMember ("TextInfo_OEMCodePage", info.SelectSingleNode ("OEMCodePage"));
110 WriteMember ("TextInfo_ListSeparator", info.SelectSingleNode ("ListSeparator"));
113 public string WriteArray (XmlNode node)
115 string value = String.Format ("new int [{0}] {{", node.ChildNodes.Count);
117 foreach (XmlNode n in node.ChildNodes)
118 value += n.InnerText;
120 value = value + " }";
125 public string WriteString (XmlNode node)
127 return "\"" + node.InnerText + "\"";
130 public void WriteNumberFormatInfo ()
132 XmlNode info = document.SelectSingleNode ("/CultureInfo/NumberFormat");
137 string number_format =
139 @"NumberFormat = new System.Globalization.NumberFormatInfo (
140 {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9},
141 {10}, {11}, {12}, {13}, {14}, {15}, {16}, {17}, {18}, {19}, {20},
143 info.SelectSingleNode ("CurrencyDecimalDigits").InnerXml,
144 WriteString (info.SelectSingleNode ("CurrencyDecimalSeparator")),
145 WriteString (info.SelectSingleNode ("CurrencyGroupSeparator")),
146 WriteArray (info.SelectSingleNode ("CurrencyGroupSizes")),
147 info.SelectSingleNode ("CurrencyNegativePattern").InnerXml,
148 info.SelectSingleNode ("CurrencyPositivePattern").InnerXml,
149 WriteString (info.SelectSingleNode ("CurrencySymbol")),
150 WriteString (info.SelectSingleNode ("NaNSymbol")),
151 WriteString (info.SelectSingleNode ("NegativeInfinitySymbol")),
152 WriteString (info.SelectSingleNode ("NegativeSign")),
153 info.SelectSingleNode ("NumberDecimalDigits").InnerXml,
154 WriteString (info.SelectSingleNode ("NumberDecimalSeparator")),
155 WriteArray (info.SelectSingleNode ("NumberGroupSizes")),
156 info.SelectSingleNode ("NumberNegativePattern").InnerXml,
157 info.SelectSingleNode ("PercentDecimalDigits").InnerXml,
158 WriteString (info.SelectSingleNode ("PercentDecimalSeparator")),
159 WriteString (info.SelectSingleNode ("PercentGroupSeparator")),
160 WriteArray (info.SelectSingleNode ("PercentGroupSizes")),
161 info.SelectSingleNode ("PercentNegativePattern").InnerXml,
162 info.SelectSingleNode ("PercentPositivePattern").InnerXml,
163 WriteString (info.SelectSingleNode ("PercentSymbol")),
164 WriteString (info.SelectSingleNode ("PerMilleSymbol")),
165 WriteString (info.SelectSingleNode ("PositiveInfinitySymbol")),
166 WriteString (info.SelectSingleNode ("PositiveSign")));
168 writer.Write ("\t\t\t" + number_format + "\n");
171 public void WriteParent ()
173 string expression = String.Format ("/CultureInfo/Parent");
174 XmlNode result = document.SelectSingleNode (expression);
179 WriteMember ("ParentName", result);
182 public void WriteComment (string comment)
184 writer.Write ("\t\t// {0}\n", comment);
187 public void Load (string file)
189 document.Load (file);
194 WriteStartClassDef (ClassName, "System.Globalization.CultureInfo.MonoCulture");
196 WriteStartConstructor (ClassName);
199 WriteMember ("EnglishName");
200 WriteMember ("LCID");
201 WriteMember ("Name");
202 WriteMember ("NativeName");
204 WriteMember ("ThreeLetterISOLanguageName");
205 WriteMember ("ThreeLetterWindowsLanguageName");
206 WriteMember ("TwoLetterISOLanguageName");
209 WriteNumberFormatInfo ();
211 WriteEndConstructor ();
216 public string ClassName {
218 string culture = document.SelectSingleNode ("/CultureInfo/LCID").InnerText;
219 return String.Format ("MonoCulture__{0}", culture);
228 ClassWriter w = new ClassWriter ();
229 w.WriteStartNamespaceDecl ();
230 w.WriteStartClassDef ("MonoCultureInfo", "System.Globalization.CultureInfo");
231 w.WriteComment ("This should never be invoked");
232 w.WriteConstructor ("MonoCultureInfo");
234 foreach (string file in Directory.GetFiles ("./Data", "*.xml")) {
235 Console.WriteLine (file);
240 w.WriteEndClassDef ();
241 w.WriteEndNamespaceDecl ();
244 Console.WriteLine ("Done");