*** empty log message ***
[m17n/m17n-test.git] / conv-by-im.c
1 #include <stdio.h>
2 #include <m17n.h>
3
4 int
5 main (int argc, char **argv)
6 {
7   MSymbol imname;
8   char filename[256];
9   MText *mt;
10   MSymbol utf_8, key;
11   MInputMethod *im;
12   MInputContext *ic;
13   int c;
14   char byte[2];
15
16   M17N_INIT ();
17
18   if (argc < 2)
19     {
20       fprintf (stderr, "Usage: %s CONVERTER-NAME\n", argv[0]);
21       exit (1);
22     }
23   imname = msymbol (argv[1]);
24   sprintf (filename, "%s.cnv", argv[1]);
25   mdatabase_define (msymbol ("input-method"), Mt, imname, Mnil,
26                     NULL, filename);
27   im = minput_open_im (Mt, imname, NULL);
28   if (! im)
29     {
30       fprintf (stderr, "IM-Open failed: %s\n", argv[1]);
31       exit (1);
32     }
33   ic = minput_create_ic (im, NULL);
34   if (! ic)
35     {
36       fprintf (stderr, "IC-Create failed: %s\n", argv[1]);
37       exit (1);
38     }
39   byte[1] = '\0';
40   mt = mtext ();
41   utf_8 = msymbol ("utf-8");
42   while ((c = getchar ()) != EOF)
43     {
44       byte[0] = c;
45       key = msymbol (byte);
46       if (minput_filter (ic, key, NULL) == 0)
47         {
48           if (minput_lookup (ic, key, NULL, mt) < 0)
49             {
50               fflush (stdout);
51               fprintf (stderr, "Filtering `0x%02X' failed\n", c);
52               exit (1);
53             }
54           mconv_encode_stream (msymbol ("utf-8"), mt, stdout);
55           mtext_del (mt, 0, mtext_len (mt));
56         }
57     }      
58   minput_destroy_ic (ic);
59   minput_close_im (im);
60   m17n_object_unref (mt);
61   M17N_FINI ();
62   exit (0);
63 }