*** empty log message ***
[m17n/m17n-test.git] / imsim.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <m17n.h>
5
6 int
7 main (int argc, char **argv)
8 {
9   MSymbol utf_8;
10   MInputMethod *im;
11   MInputContext *ic;
12   char buf[256];
13
14   if (argc < 3)
15     {
16       fprintf (stderr, "Usage: imsim LANG NAME\n");
17       exit (1);
18     }
19
20   M17N_INIT ();
21   utf_8 = msymbol ("utf-8");
22   im = minput_open_im (msymbol (argv[1]), msymbol (argv[2]), NULL);
23   if (! im)
24     {
25       fprintf (stderr, "Can't open input metdhod: (%s %s)\n",
26                argv[1], argv[2]);
27       exit (1);
28     }
29   ic = minput_create_ic (im, NULL);
30   if (! ic)
31     {
32       fprintf (stderr, "Can't create input context: (%s %s)\n",
33                argv[1], argv[2]);
34       exit (1);
35     }
36
37
38   while (fgets (buf, 256, stdin))
39     {
40       int len = strlen (buf);
41       char convbuf[1024];
42       int keylen, i;
43       char keyname[2];
44       MText *mt = mtext ();
45
46       if (buf[len - 1] == '\n')
47         buf[--len] = '\0';
48       for (keylen = 0; keylen < len; keylen++)
49         if (buf[keylen] == '\t')
50           break;
51       if (keylen == len)
52         {
53           fprintf (stderr, "Invalid input line: %s\n", buf);
54           exit (1);
55         }
56       keyname[1] = '\0';
57       for (i = 0; i < keylen; i++)
58         {
59           MSymbol key;
60
61           keyname[0] = buf[i];
62           key = msymbol (keyname);
63           if (minput_filter (ic, key, NULL))
64             continue;
65           if (minput_lookup (ic, key, NULL, mt) < 0)
66             mtext_cat_char (mt, buf[i]);
67         }
68       minput_filter (ic, Mnil, NULL);
69       minput_lookup (ic, Mnil, NULL, mt);
70       len = mconv_encode_buffer (utf_8, mt, (unsigned char *) convbuf, 1024);
71       convbuf[len] = '\0';
72       if (strcmp (buf + keylen + 1, convbuf))
73         {
74           buf[keylen] = '\0';
75           printf ("%s => %s (!= %s)\n", buf, convbuf, buf + keylen + 1);
76         }
77       m17n_object_unref (mt);
78     }
79
80   minput_destroy_ic (ic);
81   minput_close_im (im);
82   M17N_FINI ();
83   exit (0);
84 }