New test.
[mono.git] / mcs / class / I18N / tools / table_to.cs
1 /**
2  * Create a table from Unicode to CHARSET.
3  *
4  * @author Bruno Haible
5  */
6
7 using System; /* String, Console */
8 using System.Text; /* Encoding */
9
10 public class table_to {
11   static String toHexString1 (int i) {
12     return new String(new char[] { "0123456789ABCDEF".get_Chars(i) });
13   }
14   static String toHexString2 (int i) {
15     return  toHexString1((i>>4)&0x0f)
16            +toHexString1(i&0x0f);
17   }
18   static String toHexString4 (int i) {
19     return  toHexString1((i>>12)&0x0f)
20            +toHexString1((i>>8)&0x0f)
21            +toHexString1((i>>4)&0x0f)
22            +toHexString1(i&0x0f);
23   }
24   public static int Main (String[] args) {
25     try {
26       if (args.Length != 1) {
27         Console.Error.WriteLine("Usage: mono table_to charset");
28         return 1;
29       }
30       String charset = args[0];
31       Encoding encoding;
32       try {
33         encoding = Encoding.GetEncoding(charset);
34       } catch (NotSupportedException e) {
35         Console.Error.WriteLine("no converter for "+charset);
36         return 1;
37       }
38       byte[] qmark = encoding.GetBytes(new char[] { (char)0x003f });
39       for (int i = 0; i < 0x110000; i++) {
40         char[] inp =
41           (i < 0x10000
42            ? new char[] { (char)i }
43            : new char[] { (char)(0xd800 + ((i - 0x10000) >> 10)),
44                           (char)(0xdc00 + ((i - 0x10000) & 0x3ff)) });
45         byte[] outp = encoding.GetBytes(inp);
46         if (!(((outp.Length >= qmark.Length
47                 && outp[0] == qmark[0]
48                 && (qmark.Length < 2 || outp[1] == qmark[1])
49                 && (qmark.Length < 3 || outp[2] == qmark[2])
50                 && (qmark.Length < 4 || outp[3] == qmark[3]))
51                || (outp.Length >= 1 && outp[0] == 0x3f))
52               && !(i == 0x003f))) {
53           Console.Out.Write("0x");
54           for (int j = 0; j < outp.Length; j++)
55             Console.Out.Write(toHexString2(outp[j]));
56           Console.Out.WriteLine("\t0x" + (i<0x10000 ? toHexString4(i) : ((Int32)i).ToString("X")));
57         }
58       }
59     } catch (Exception e) {
60       Console.Error.WriteLine(e);
61       Console.Error.WriteLine(e.StackTrace);
62       return 1;
63     }
64     return 0;
65   }
66 }