fix for different results message
[mono.git] / mcs / class / Mono.Globalization / write-source.cs
index b1f6315fcceffb47de914bc594350935c76deb3b..9e504dbda3b19b266502777bf023cba661fc9a67 100644 (file)
@@ -5,20 +5,15 @@ using System.Xml;
 
 class ClassWriter {
 
-        StreamWriter writer;
+        public StreamWriter writer;
         XmlDocument document;
         static readonly string ns = "Mono.Globalization";
+        static readonly string path = "MonoCultures.cs";
 
-        public ClassWriter (string filename)
+        public ClassWriter ()
         {
-                string path = Path.GetFileName (filename);
-                path = Path.ChangeExtension (path, "cs");
-                path = Path.Combine ("src", path);
-
                 this.writer = new StreamWriter (path);
                 this.document = new XmlDocument ();
-
-                document.Load (filename);
         }
 
         public void WriteStartNamespaceDecl ()
@@ -31,19 +26,34 @@ class ClassWriter {
                 writer.Write ("}");
         }
 
-        public void WriteStartClassDef (string class_name)
+        public void WriteStartClassDef (string class_name, string base_class)
         {
-                writer.Write ("\tpublic class {0} : MonoCulture\n\t{{\n", class_name);
+                writer.Write ("\tclass {0} : {1}\n\t{{\n", class_name, base_class);
         }
 
         public void WriteEndClassDef ()
         {
-                writer.Write ("\t}\n");
+                writer.Write ("\t}\n\n");
+        }
+
+        public void WriteStartMethod (string method)
+        {
+                writer.Write ("\t\tvoid {0} ()\n\t\t{{\n", method);
+        }
+
+        public void WriteEndMethod ()
+        {
+                writer.Write ("\t\t}\n");
+        }
+
+        public void WriteConstructor (string name)
+        {
+                writer.Write ("\t\tprivate {0} () : base (0) {{}}\n", name);
         }
 
         public void WriteStartConstructor (string class_name)
         {
-                writer.Write ("\t\tstatic {0} ()\n\t\t{{\n", class_name);
+                writer.Write ("\t\tpublic {0} ()\n\t\t{{\n", class_name);
         }
 
         public void WriteEndConstructor ()
@@ -51,25 +61,31 @@ class ClassWriter {
                 writer.Write ("\t\t}\n");
         }
 
-        public void SetMember (string member)
+        public void WriteMember (string member)
         {
                 string expression = String.Format ("/CultureInfo/{0}", member);
                 XmlNode result = document.SelectSingleNode (expression);
                 if (result == null)
                         return;
 
-                SetMember (member, result.InnerXml);
+                WriteMember (member, result);
         }
 
-        public void SetMember (string member, string value)
+        public void WriteMember (string member, XmlNode node)
         {
-                if (member.EndsWith ("Name"))
-                        value = String.Format ("\"{0}\"", value);
+                string value;
+
+                if (member.EndsWith ("Name") || member.EndsWith ("Separator") || 
+                        member.EndsWith ("Symbol") || member.EndsWith ("Sign")) 
+
+                        value = String.Format ("\"{0}\"", node.InnerXml);
+                else
+                        value = node.InnerXml;
 
                 writer.Write ("\t\t\t{0} = {1};\n", member, value);
         }
 
-        public void SetCalendar ()
+        public void WriteCalendar ()
         {
                 string expression = String.Format ("/CultureInfo/Calendar");
                 XmlNode result = document.SelectSingleNode (expression);
@@ -77,7 +93,82 @@ class ClassWriter {
                 writer.Write ("\t\t\tCalendar = new {0} ();\n", result.InnerXml);
         }
 
-        public void SetParent ()
+        public void WriteCompareInfo ()
+        {
+                XmlNode compare_info_lcid = document.SelectSingleNode ("/CultureInfo/CompareInfo/@LCID");
+                WriteMember ("CompareInfo_LCID", compare_info_lcid);
+        }
+        
+        public void WriteTextInfo ()
+        {
+                XmlNode info = document.SelectSingleNode ("/CultureInfo/TextInfo");
+                
+                WriteMember ("TextInfo_ANSICodePage", info.SelectSingleNode ("ANSICodePage"));
+                WriteMember ("TextInfo_EBCDICCodePage", info.SelectSingleNode ("EBCDICCodePage"));
+                WriteMember ("TextInfo_MacCodePage", info.SelectSingleNode ("MacCodePage"));
+                WriteMember ("TextInfo_OEMCodePage", info.SelectSingleNode ("OEMCodePage"));
+                WriteMember ("TextInfo_ListSeparator", info.SelectSingleNode ("ListSeparator"));
+        }
+
+        public string WriteArray (XmlNode node)
+        {
+                string value = String.Format ("new int [{0}] {{", node.ChildNodes.Count);
+
+                foreach (XmlNode n in node.ChildNodes)
+                        value += n.InnerText;
+                
+                value = value + " }";
+
+                return value;
+        }
+
+        public string WriteString (XmlNode node)
+        {
+                return "\"" + node.InnerText + "\"";
+        }
+
+        public void WriteNumberFormatInfo ()
+        {
+                XmlNode info = document.SelectSingleNode ("/CultureInfo/NumberFormat");
+                
+                if (info == null)
+                        return;
+                
+                string number_format = 
+                        String.Format (
+                        @"NumberFormat = new System.Globalization.NumberFormatInfo (
+                                {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, 
+                                {10}, {11}, {12}, {13}, {14}, {15}, {16}, {17}, {18}, {19}, {20},
+                                {21}, {22}, {23});",
+                                info.SelectSingleNode ("CurrencyDecimalDigits").InnerXml,
+                                WriteString (info.SelectSingleNode ("CurrencyDecimalSeparator")),
+                                WriteString (info.SelectSingleNode ("CurrencyGroupSeparator")),
+                                WriteArray (info.SelectSingleNode ("CurrencyGroupSizes")),
+                                info.SelectSingleNode ("CurrencyNegativePattern").InnerXml,
+                                info.SelectSingleNode ("CurrencyPositivePattern").InnerXml,
+                                WriteString (info.SelectSingleNode ("CurrencySymbol")), 
+                                WriteString (info.SelectSingleNode ("NaNSymbol")), 
+                                WriteString (info.SelectSingleNode ("NegativeInfinitySymbol")),
+                                WriteString (info.SelectSingleNode ("NegativeSign")),
+                                info.SelectSingleNode ("NumberDecimalDigits").InnerXml, 
+                                WriteString (info.SelectSingleNode ("NumberDecimalSeparator")),
+                                WriteArray (info.SelectSingleNode ("NumberGroupSizes")),
+                                info.SelectSingleNode ("NumberNegativePattern").InnerXml, 
+                                info.SelectSingleNode ("PercentDecimalDigits").InnerXml,
+                                WriteString (info.SelectSingleNode ("PercentDecimalSeparator")), 
+                                WriteString (info.SelectSingleNode ("PercentGroupSeparator")), 
+                                WriteArray (info.SelectSingleNode ("PercentGroupSizes")), 
+                                info.SelectSingleNode ("PercentNegativePattern").InnerXml, 
+                                info.SelectSingleNode ("PercentPositivePattern").InnerXml,
+                                WriteString (info.SelectSingleNode ("PercentSymbol")), 
+                                WriteString (info.SelectSingleNode ("PerMilleSymbol")), 
+                                WriteString (info.SelectSingleNode ("PositiveInfinitySymbol")), 
+                                WriteString (info.SelectSingleNode ("PositiveSign")));
+                
+                writer.Write ("\t\t\t" + number_format + "\n");
+        }
+
+        public void WriteParent ()
         {
                 string expression = String.Format ("/CultureInfo/Parent");
                 XmlNode result = document.SelectSingleNode (expression);
@@ -85,41 +176,47 @@ class ClassWriter {
                 if (result == null)
                         return;
 
-                writer.Write (String.Format ("\t\t\tParent = System.Globalization.CultureInfo.CreateSpecificCulture (\"{0}\");\n", result.InnerXml));
+                WriteMember ("ParentName", result);
         }
 
         public void WriteComment (string comment)
         {
-                writer.Write ("\t\t\t// {0}\n", comment);
+                writer.Write ("\t\t// {0}\n", comment);
+        }
+
+        public void Load (string file)
+        {
+                document.Load (file);
         }
 
         public void Write ()
         {
-                WriteStartNamespaceDecl ();
-                WriteStartClassDef (ClassName);
+                WriteStartClassDef (ClassName, "System.Globalization.CultureInfo.MonoCulture");
+
                 WriteStartConstructor (ClassName);
 
-                SetCalendar ();
-                SetMember ("EnglishName");
-                SetMember ("LCID");
-                SetMember ("Name");
-                SetMember ("NativeName");
-                SetParent ();
-                SetMember ("ThreeLetterISOLanguageName");
-                SetMember ("TwoLetterISOLanguageName");
+                WriteCalendar ();
+                WriteMember ("EnglishName");
+                WriteMember ("LCID");
+                WriteMember ("Name");
+                WriteMember ("NativeName");
+                WriteParent ();
+                WriteMember ("ThreeLetterISOLanguageName");
+                WriteMember ("ThreeLetterWindowsLanguageName"); 
+                WriteMember ("TwoLetterISOLanguageName");
+                WriteTextInfo ();
+                WriteCompareInfo ();
+                WriteNumberFormatInfo ();
 
                 WriteEndConstructor ();
                 WriteEndClassDef ();
-                WriteEndNamespaceDecl ();
-
-                Console.WriteLine ("Writing {0}", ClassName);
                 writer.Flush ();
         }
 
         public string ClassName {
                 get {
-                        string culture =  document.SelectSingleNode ("/CultureInfo/@name").InnerText;
-                        return String.Format ("MonoCulture__{0}", culture.Replace ("-", "_"));
+                        string culture =  document.SelectSingleNode ("/CultureInfo/LCID").InnerText;
+                        return String.Format ("MonoCulture__{0}", culture);
                 }
         }
 }
@@ -128,11 +225,22 @@ class Driver {
         static void Main ()
         {
                 int i = 0;
-                ClassWriter w;
+                ClassWriter w = new ClassWriter ();
+                w.WriteStartNamespaceDecl ();
+                w.WriteStartClassDef ("MonoCultureInfo", "System.Globalization.CultureInfo");
+                w.WriteComment ("This should never be invoked");
+                w.WriteConstructor ("MonoCultureInfo");
 
                 foreach (string file in Directory.GetFiles ("./Data", "*.xml")) {
-                        w = new ClassWriter (file);
+                        Console.WriteLine (file);
+                        w.Load (file);
                         w.Write ();
                 }
+
+                w.WriteEndClassDef ();
+                w.WriteEndNamespaceDecl ();
+
+                w.writer.Flush ();
+                Console.WriteLine ("Done");
         }
 }