public static void Encode(string dump_file, string data_name, string h_file)
        {
            PagedTableEncoder.IData data;

            using (TextReader r = new StreamReader(dump_file))
                data = ParseDump(r);

            Language l = Language.C;

            if (h_file.EndsWith(".cs"))
            {
                l = Language.CSharp;
            }

            PagedTableEncoder pte = new PagedTableEncoder(8, 8, 16, true, "DISABLE_ASTRAL", l);

            pte.Process(data, "astral_index");

            using (TextWriter w = new StreamWriter(h_file)) {
                w.WriteLine("/*");
                w.WriteLine(" * The {0}* tables below are automatically generated", data_name);
                w.WriteLine(" * by create-category-table(.cs), available in the mcs");
                w.WriteLine(" * sources.  DO NOT EDIT!");
                w.WriteLine(" */");
                w.WriteLine();

                pte.WriteDefinitions(l, data_name, w);
            }
        }
		public static void Encode (string dump_file, string data_name, string h_file)
		{
			PagedTableEncoder.IData data;

			using (TextReader r = new StreamReader (dump_file))
				data = ParseDump (r);

			PagedTableEncoder pte = new PagedTableEncoder (8, 8, 16, true, "DISABLE_ASTRAL");
			pte.Process (data, "astral_index");

			using (TextWriter w = new StreamWriter (h_file)) {
				w.WriteLine ("/*");
				w.WriteLine (" * The {0}* tables below are automatically generated", data_name);
				w.WriteLine (" * by create-category-table(.cs), available in the mcs");
				w.WriteLine (" * sources.  DO NOT EDIT!");
				w.WriteLine (" */");
				w.WriteLine ();

				pte.WriteDefinitions (Language.C, data_name, w);
			}
		}
		public static void Dump (PagedTableEncoder.IData source, TextWriter w)
		{
			w.WriteLine ("{0}", source.Count);

			for (int cp = 0; cp <= MaxCodePoint; cp++) {
				byte cc = (byte) source [cp];

				if (cc != 0)
					w.WriteLine ("{0} {1}", cp, cc);
			}
		}