*** empty log message ***
[m17n/m17n-lib.git] / src / m17n.h
1 /* m17n.h -- header file for the SHELL API of the m17n library.
2    Copyright (C) 2003, 2004
3      National Institute of Advanced Industrial Science and Technology (AIST)
4      Registration Number H15PRO112
5
6    This file is part of the m17n library.
7
8    The m17n library is free software; you can redistribute it and/or
9    modify it under the terms of the GNU Lesser General Public License
10    as published by the Free Software Foundation; either version 2.1 of
11    the License, or (at your option) any later version.
12
13    The m17n library is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16    Lesser General Public License for more details.
17
18    You should have received a copy of the GNU Lesser General Public
19    License along with the m17n library; if not, write to the Free
20    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
21    02111-1307, USA.  */
22
23 #ifndef _M17N_H_
24 #define _M17N_H_
25
26 #include <stdio.h>
27 #include <stdlib.h>
28 #include <time.h>
29
30 #ifndef _M17N_CORE_H_
31 #include <m17n-core.h>
32 #endif
33
34 #ifdef __cplusplus
35 extern "C"
36 {
37 #endif
38
39 extern void m17n_init (void);
40 #undef M17N_INIT
41 #define M17N_INIT() m17n_init ()
42
43 extern void m17n_fini (void);
44 #undef M17N_FINI
45 #define M17N_FINI() m17n_fini ()
46
47 /***en @defgroup m17nShell SHELL API */
48 /***ja @defgroup m17nShell ¥·¥§¥ë API */
49 /*=*/
50
51 /*
52  *  (11) Functions related to the m17n database
53  */
54 /*=*/
55
56 /*** @ingroup m17nShell */
57 /***en @defgroup m17nDatabase Database */
58 /***ja @defgroup m17nDatabase ¥Ç¡¼¥¿¥Ù¡¼¥¹ */
59 /*=*/
60
61 /* Directory of an application specific databases.  */
62 extern char *mdatabase_dir;
63 /*=*/
64 /***
65     @ingroup m17nDatabase  */ 
66 /***en
67     @brief Type of database.
68
69     The type #MDatabase is for a database object.  Its internal
70     structure is concealed from an application program.  */
71 /***ja 
72     @brief ¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î·¿Àë¸À.
73
74     #MDatabase ·¿¤Ï¥Ç¡¼¥¿¥Ù¡¼¥¹¥ª¥Ö¥¸¥§¥¯¥ÈÍѤι½Â¤ÂΤǤ¢¤ë¡£ÆâÉô¹½Â¤
75     ¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£
76     */
77
78 typedef struct MDatabase MDatabase;
79
80 /*=*/
81
82 /* Look for a data.  */
83 extern MDatabase *mdatabase_find (MSymbol tag1, MSymbol tag2,
84                                   MSymbol tag3, MSymbol tag4);
85
86 extern MPlist *mdatabase_list (MSymbol tag0, MSymbol tag1,
87                                MSymbol tag2, MSymbol tag3);
88
89 /* Load a data.  */
90 void *mdatabase_load (MDatabase *mdb);
91
92 /* Get tags of a data.  */
93 extern MSymbol *mdatabase_tag (MDatabase *mdb);
94
95 /* Define a data.  */
96 extern MDatabase *mdatabase_define (MSymbol tag1, MSymbol tag2,
97                                     MSymbol tag3, MSymbol tag4,
98                                     void *(*loader) (MSymbol *, void *),
99                                     void *extra_info);
100
101 /*=*/
102 /* (S2) Charset staffs */
103 /*=*/
104
105 /*** @ingroup m17nShell */
106 /***en @defgroup m17nCharset Charset */
107 /***ja @defgroup m17nCharset Ê¸»ú¥»¥Ã¥È */
108 /*=*/
109 #define MCHAR_INVALID_CODE 0xFFFFFFFF
110
111 /* Predefined charsets */ 
112 extern MSymbol Mcharset_ascii;
113 extern MSymbol Mcharset_iso_8859_1;
114 extern MSymbol Mcharset_unicode;
115 extern MSymbol Mcharset_m17n;
116 extern MSymbol Mcharset_binary;
117
118 /* Predefined keys for mchar_define_charset ().  */ 
119 extern MSymbol Mmethod;
120 extern MSymbol Mdimension;
121 extern MSymbol Mmin_range;
122 extern MSymbol Mmax_range;
123 extern MSymbol Mmin_code;
124 extern MSymbol Mmax_code;
125 extern MSymbol Mascii_compatible;
126 extern MSymbol Mfinal_byte;
127 extern MSymbol Mrevision;
128 extern MSymbol Mmin_char;
129 extern MSymbol Mmapfile;
130 extern MSymbol Mparents;
131 extern MSymbol Msubset_offset;
132 extern MSymbol Mdefine_coding;
133 extern MSymbol Maliases;
134
135 /* Methods of a charset.  */
136 extern MSymbol Moffset;
137 extern MSymbol Mmap;
138 extern MSymbol Munify;
139 extern MSymbol Msubset;
140 extern MSymbol Msuperset;
141
142 /* etc. */
143 extern MSymbol Mcharset;
144
145 extern MSymbol mchar_define_charset (const char *name, MPlist *plist);
146
147 extern MSymbol mchar_resolve_charset (MSymbol symbol);
148
149 extern int mchar_list_charset (MSymbol **symbols);
150
151 extern int mchar_decode (MSymbol charset_name, unsigned code);
152
153 extern unsigned mchar_encode (MSymbol charset_name, int c);
154
155 extern int mchar_map_charset (MSymbol charset_name,
156                               void (*func) (int from, int to, void *arg),
157                               void *func_arg);
158
159 /*=*/
160
161 /* (S3) code conversion */
162 /*=*/
163 /*** @ingroup m17nShell */
164 /***en @defgroup m17nConv Code Conversion */
165 /***ja @defgroup m17nConv ¥³¡¼¥ÉÊÑ´¹ */
166 /*=*/
167
168 /* Predefined coding systems */
169 extern MSymbol Mcoding_us_ascii;
170 extern MSymbol Mcoding_iso_8859_1;
171 extern MSymbol Mcoding_utf_8;
172 extern MSymbol Mcoding_utf_8_full;
173 extern MSymbol Mcoding_utf_16;
174 extern MSymbol Mcoding_utf_16be;
175 extern MSymbol Mcoding_utf_16le;
176 extern MSymbol Mcoding_utf_32;
177 extern MSymbol Mcoding_utf_32be;
178 extern MSymbol Mcoding_utf_32le;
179 extern MSymbol Mcoding_sjis;
180
181 /* Parameter keys for mconv_define_coding ().  */
182 extern MSymbol Mtype;
183 extern MSymbol Mcharsets;
184 extern MSymbol Mflags;
185 extern MSymbol Mdesignation;
186 extern MSymbol Minvocation;
187 extern MSymbol Mcode_unit;
188 extern MSymbol Mbom;
189 extern MSymbol Mlittle_endian;
190
191 /* Symbols representing coding system type.  */
192 extern MSymbol Mutf;
193 extern MSymbol Miso_2022;
194
195 /* Symbols appearing in the value of Mfrag parameter.  */
196 extern MSymbol Mreset_at_eol;
197 extern MSymbol Mreset_at_cntl;
198 extern MSymbol Meight_bit;
199 extern MSymbol Mlong_form;
200 extern MSymbol Mdesignation_g0;
201 extern MSymbol Mdesignation_g1;
202 extern MSymbol Mdesignation_ctext;
203 extern MSymbol Mdesignation_ctext_ext;
204 extern MSymbol Mlocking_shift;
205 extern MSymbol Msingle_shift;
206 extern MSymbol Msingle_shift_7;
207 extern MSymbol Meuc_tw_shift;
208 extern MSymbol Miso_6429;
209 extern MSymbol Mrevision_number;
210 extern MSymbol Mfull_support;
211
212 /* etc */
213 extern MSymbol Mcoding;
214 extern MSymbol Mmaybe;
215
216 /*** @ingroup m17nConv */
217 /***en
218     @brief Codes that represent the result of code conversion.
219
220     One of these values is set in @c MConverter-\>result.   */
221
222 /***ja
223     @brief ¥³¡¼¥ÉÊÑ´¹¤Î·ë²Ì¤ò¼¨¤¹¥³¡¼¥É.
224
225     ¤³¤ì¤é¤ÎÃͤΤ¦¤Á°ì¤Ä¤¬ @c MConverter-\>result ¤ËÀßÄꤵ¤ì¤ë¡£  */
226
227 enum MConversionResult
228   {
229     /***en Code conversion is successful. */
230     /***ja ¥³¡¼¥ÉÊÑ´¹¤ÏÀ®¸ù. */
231     MCONVERSION_RESULT_SUCCESS,
232
233     /***en On decoding, the source contains an invalid byte. */
234     /***ja ¥Ç¥³¡¼¥É»þ¡¢¥½¡¼¥¹¤ËÉÔÀµ¤Ê¥Ð¥¤¥È¤¬´Þ¤Þ¤ì¤Æ¤¤¤ë. */
235     MCONVERSION_RESULT_INVALID_BYTE,
236
237     /***en On encoding, the source contains a character that cannot be
238         encoded by the specified coding system. */
239     /***ja ¥¨¥ó¥³¡¼¥É»þ¡¢»ØÄê¤Î¥³¡¼¥É·Ï¤Ç¥¨¥ó¥³¡¼¥É¤Ç¤­¤Ê¤¤Ê¸»ú¤¬¥½¡¼
240         ¥¹¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ë. */
241     MCONVERSION_RESULT_INVALID_CHAR,
242
243     /***en On decoding, the source ends with an incomplete byte sequence. */
244     /***ja ¥Ç¥³¡¼¥É»þ¡¢ÉÔ´°Á´¤Ê¥Ð¥¤¥ÈÎó¤Ç¥½¡¼¥¹¤¬½ª¤ï¤Ã¤Æ¤¤¤ë¡£*/
245     MCONVERSION_RESULT_INSUFFICIENT_SRC,
246
247     /***en On encoding, the destination is too short to store the result. */
248     /***ja ¥¨¥ó¥³¡¼¥É»þ¡¢·ë²Ì¤ò³ÊǼ¤¹¤ëÎΰ褬û¤«¤¹¤®¤ë¡£ */
249     MCONVERSION_RESULT_INSUFFICIENT_DST,
250
251     /***en An I/O error occurred in the conversion.  */
252     /***ja ¥³¡¼¥ÉÊÑ´¹Ãæ¤Ë I/O ¥¨¥é¡¼¤¬µ¯¤³¤Ã¤¿¡£  */
253     MCONVERSION_RESULT_IO_ERROR
254   };
255 /*=*/
256
257 /*** @ingroup m17nConv */
258 /***en
259     @brief Structure to be used in code conversion.
260
261     Structure to be used in code conversion.  The first three members
262     are to control the conversion.  */
263
264 /***ja
265     @brief ¥³¡¼¥ÉÊÑ´¹¤ËÍѤ¤¤é¤ì¤ë¹½Â¤ÂÎ.
266
267     ¥³¡¼¥ÉÊÑ´¹¤ËÍѤ¤¤é¤ì¤ë¹½Â¤ÂΡ£ºÇ½é¤Î£³¤Ä¤Î¥á¥ó¥Ð¤ÏÊÑ´¹¤òÀ©¸æ¤¹¤ë¡£
268
269     @latexonly \IPAlabel{MConverter} @endlatexonly  
270 */
271
272 typedef struct
273 {
274   /***en
275       Set the value to nonzero if the conversion should be lenient.
276       By default, the conversion is strict (i.e. not lenient).
277
278       If the conversion is strict, the converter stops at the first
279       invalid byte (on decoding) or at the first character not
280       supported by the coding system (on encoding).  If this happens,
281       @c MConverter-\>result is set to @c
282       MCONVERSION_RESULT_INVALID_BYTE or @c
283       MCONVERSION_RESULT_INVALID_CHAR accordingly.
284
285       If the conversion is lenient, on decoding, an invalid byte is
286       kept per se, and on encoding, an invalid character is replaced
287       with "<U+XXXX>" (if the character is a Unicode character) or
288       with "<M+XXXXXX>" (otherwise).  */
289
290   /***ja 
291       ¸·Ì©¤ÊÊÑ´¹¤¬É¬ÍפǤʤ¤¾ì¹ç¤ËÃͤò 0 °Ê³°¤Ë¤¹¤ë¡£¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢
292       ÊÑ´¹¤Ï¸·Ì©¤Ç¤¢¤ë¡£
293
294       ÊÑ´¹¤¬¸·Ì©¤È¤Ï¡¢¥Ç¥³¡¼¥É¤ÎºÝ¤Ë¤ÏºÇ½é¤ÎÉÔÀµ¤Ê¥Ð¥¤¥È¤Ç¥³¥ó¥Ð¡¼¥¿
295       ¤¬»ß¤Þ¤ë¤³¤È¡¢¥¨¥ó¥³¡¼¥É¤ÎºÝ¤Ë¤ÏÊÑ´¹¤µ¤ì¤ë¥³¡¼¥É·Ï¤Ç¥µ¥Ý¡¼¥È¤µ
296       ¤ì¤Ê¤¤ºÇ½é¤Îʸ»ú¤Ç¥³¥ó¥Ð¡¼¥¿¤¬»ß¤Þ¤ë¤³¤È¤ò»Ø¤¹¡£¤³¤ì¤é¤Î¾ì¹ç¡¢
297       @c MConverter-\>result ¤Ï¤½¤ì¤¾¤ì @c
298       MCONVERSION_RESULT_INVALID_BYTE ¤«@c
299       MCONVERSION_RESULT_INVALID_CHAR ¤È¤Ê¤ë¡£
300
301       ÊÑ´¹¤¬¸·Ì©¤Ç¤Ê¤¤¾ì¹ç¤Ë¤Ï¡¢¥Ç¥³¡¼¥É¤ÎºÝ¤ÎÉÔÀµ¤Ê¥Ð¥¤¥È¤Ï¤½¤Î¥Ð¥¤¥È
302       ¤Î¤Þ¤Þ»Ä¤ë¡£¤Þ¤¿¥¨¥ó¥³¡¼¥É¤ÎºÝ¤Ë¤Ï¡¢ÉÔÀµ¤Êʸ»ú¤Ï Unicode Ê¸»ú¤Î
303       ¾ì¹ç¤Ë¤Ï "<U+XXXX>" ¤Ë¡¢¤½¤¦¤Ç¤Ê¤¤¾ì¹ç¤Ë¤Ï "<M+XXXXXX>" ¤ËÃÖ¤­´¹
304       ¤¨¤é¤ì¤ë¡£  */
305
306   int lenient;
307
308   /***en
309       Set the value to nonzero before decoding or encoding the last
310       block of the byte sequence or the character sequence
311       respectively.  The value influences the conversion as below.
312
313       On decoding, in the case that the last few bytes are too short
314       to form a valid byte sequence:
315
316         If the value is nonzero, the conversion terminates by error
317         (MCONVERSION_RESULT_INVALID_BYTE) at the first byte of the
318         sequence.
319
320         If the value is zero, the conversion terminates successfully.
321         Those bytes are stored in the converter as carryover and are
322         prepended to the byte sequence of the further conversion.
323
324       On encoding, in the case that the coding system is context
325       dependent:
326
327         If the value is nonzero, the conversion may produce a byte
328         sequence at the end to reset the context to the initial state
329         even if the source characters are zero.
330
331         If the value is zero, the conversion never produce such a byte
332         sequence at the end.  */
333
334 /***ja 
335
336      ¥Ð¥¤¥ÈÎó¤Î½ªÃ¼¤Î¥Ö¥í¥Ã¥¯¤ò¥Ç¥³¡¼¥É¤¹¤ëºÝ¡¢¤Þ¤¿¤Ïʸ»úÎó¤Î½ªÃ¼¤Î¥Ö
337      ¥í¥Ã¥¯¤ò¥¨¥ó¥³¡¼¥É¤¹¤ëºÝ¤Ï¡¢Ãͤò 0 °Ê³°¤Ë¤¹¤ë¡£¤³¤ÎÃͤϰʲ¼¤Î¤è¤¦
338      ¤ËÊÑ´¹¤Ë±Æ¶Á¤¹¤ë¡£
339
340      ¥Ç¥³¡¼¥Ç¥£¥ó¥°¤ÎºÝ¤ËºÇ¸å¤Î¿ô¥Ð¥¤¥È¤¬Àµ¤·¤¤¥Ð¥¤¥È¥·¡¼¥¯¥¨¥ó¥¹¤ò·Á
341      À®¤¹¤ë¤Ë¤Ïû¤¹¤®¤ë¾ì¹ç¡§
342
343        Ãͤ¬ 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢ÊÑ´¹¤Ï¤½¤Î¥·¡¼¥¯¥¨¥ó¥¹¤ÎºÇ½é¤Î¥Ð¥¤¥È¤Ë¤ª¤¤¤Æ¡¢
344        ¥¨¥é¡¼ (MCONVERSION_RESULT_INVALID_BYTE) ¤Ç½ª¤ë¡£
345
346        Ãͤ¬ 0 ¤Ê¤é¤Ð¡¢ÊÑ´¹¤ÏÀ®¸ù¤·¤Æ½ª¤ë¡£ÌäÂê¤Î¿ô¥Ð¥¤¥È¤Ï¥­¥ã¥ê¡¼¥ª¡¼
347        ¥Ð¤È¤·¤Æ¥³¥ó¥Ð¡¼¥¿¤ËÊÝ»ý¤µ¤ì¡¢Â³¤­¤ÎÊÑ´¹¤ò¹Ô¤¦ºÝ¤ËÊÑ´¹¤¹¤ë¥Ð¥¤
348        ¥ÈÎó¤ÎÁ°¤ËÉÕ¤±¤é¤ì¤ë¡£
349
350      ¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤ÎºÝ¤Ë¥³¡¼¥É·Ï¤¬Ê¸Ì®°Í¸¤Î¾ì¹ç¡¢
351
352        Ãͤ¬ 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢¥³¥ó¥Æ¥­¥¹¥È¤òºÇ½é¤ËÌ᤹¤¿¤á¤Î¥Ð¥¤¥ÈÎ󤬥½¡¼
353        ¥¹¤Îʸ»ú¤È¤«¤«¤ï¤ê¤Ê¤¯ÊÑ´¹¤Î·ë²ÌÀ¸À®¤µ¤ì¤ë¤³¤È¤¬¤¢¤ë¡£
354
355        Ãͤ¬ 0 ¤Ê¤é¤Ð¡¢¤½¤Î¤è¤¦¤Ê¥Ð¥¤¥ÈÎó¤ÏÀ¸À®¤µ¤ì¤Ê¤¤¡£
356
357          */
358
359   int last_block;
360
361   /***en
362       If the value is nonzero, it specifies at most how many
363       characters to convert.  */
364   /***ja
365       0 ¤Ç¤Ê¤±¤ì¤Ð¡¢ÊÑ´¹¤µ¤ì¤ëºÇÂç¤Îʸ»ú¿ô¤ò»ØÄꤹ¤ë¡£
366       */
367
368   unsigned at_most;
369
370   /***en
371       The following three members are to report the result of the
372       conversion.  */
373   /***ja
374       °Ê²¼¤Î£³¤Ä¤Î¥á¥ó¥Ð¤ÏÊÑ´¹¤Î·ë²Ì¤òÊó¹ð¤¹¤ë¡£  */
375
376   /***en
377       Number of characters most recently decoded or encoded. */
378   /***ja
379       ºÇ¶á¤Ë¥Ç¥³¡¼¥É/¥¨¥ó¥³¡¼¥É¤µ¤ì¤¿Ê¸»ú¿ô¡£ */
380
381   int nchars;
382
383   /***en
384       Number of bytes recently decoded or encoded. */
385
386   /***ja
387       ºÇ¶á¤Ë¥Ç¥³¡¼¥É/¥¨¥ó¥³¡¼¥É¤µ¤ì¤¿¥Ð¥¤¥È¿ô¡£ */
388
389   int nbytes;
390
391   /***en
392       Result code of the conversion. */
393
394   /***ja
395       ¥³¡¼¥ÉÊÑ´¹¤Î·ë²Ì¤ò¼¨¤¹¥³¡¼¥É¡£ */
396
397   enum MConversionResult result;
398
399   /***en
400       Various information about the status of code conversion.  The
401       contents depend on the type of coding system.  It is assured
402       that @c status is aligned so that any type of casting is safe
403       and at least 256 bytes of memory space can be used.  */
404
405   /***ja
406       ¥³¡¼¥ÉÊÑ´¹¤Î¾õ¶·¤Ë´Ø¤¹¤ë¼ï¡¹¤Î¾ðÊó¡£ÆâÍƤϥ³¡¼¥É·Ï¤Î¥¿¥¤¥×¤Ë¤è¤Ã
407       ¤Æ°Û¤Ê¤ë¡£@c status ¤Ï¤É¤Î¤è¤¦¤Ê·¿¤Ø¤Î¥­¥ã¥¹¥È¤ËÂФ·¤Æ¤â°ÂÁ´¤Ê¤è
408       ¤¦¤Ë¥á¥â¥ê¥¢¥é¥¤¥ó¤µ¤ì¤Æ¤ª¤ê¡¢¤Þ¤¿ºÇÄã256¥Ð¥¤¥È¤Î¥á¥â¥êÎΰ褬»È
409       ¤¨¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤ë¡£  */
410
411   union {
412     void *ptr;
413     double dbl;
414     char c[256];
415   } status;
416
417   /***en
418       This member is for internally use only.  An application program
419       should never touch it.  */
420   /***ja ¤³¤Î¥á¥ó¥Ð¤ÏÆâÉôŪ¤Ë»ÈÍѤµ¤ì¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤Ï¿¨
421       ¤ì¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£ */
422   void *internal_info;
423 } MConverter;
424 /*=*/
425
426 /*** @ingroup m17nConv */
427 /***en 
428     @brief Types of coding system.  */
429 /***ja 
430     @brief ¥³¡¼¥É·Ï¤Î¥¿¥¤¥×.  */
431
432 enum MCodingType
433   {
434     /***en
435         A coding system of this type supports charsets directly.
436         The dimension of each charset defines the length of bytes to
437         represent a single character of the charset, and a byte
438         sequence directly represents the code-point of a character.
439
440         The m17n library provides the default decoding and encoding
441         routines of this type.  */
442
443     /***ja
444         ¤³¤Î¥¿¥¤¥×¤Î¥³¡¼¥É·Ï¤Ïʸ»ú¥»¥Ã¥È¤òľÀÜ¥µ¥Ý¡¼¥È¤¹¤ë¡£³Æʸ»ú¥»¥Ã
445         ¥È¤Î¼¡¸µ¤È¤Ï¡¢¤½¤Îʸ»ú¥»¥Ã¥È¤Ç°ìʸ»ú¤òɽ¸½¤¹¤ë¤¿¤á¤ËɬÍפʥХ¤
446         ¥È¿ô¤Ç¤¢¤ê¡¢¥Ð¥¤¥ÈÎó¤Ïʸ»ú¤Î¥³¡¼¥É¥Ý¥¤¥ó¥È¤òľÀÜɽ¤ï¤¹¡£
447
448         m17n ¥é¥¤¥Ö¥é¥ê¤Ï¤³¤Î¥¿¥¤¥×ÍѤΥǥե©¥ë¥È¤Î¥¨¥ó¥³¡¼¥É¡¿¥Ç¥³¡¼
449         ¥É¥ë¡¼¥Æ¥£¥ó¤òÄ󶡤¹¤ë¡£  */
450
451     MCODING_TYPE_CHARSET,
452
453     /***en
454         A coding system of this type supports byte sequences of a
455         UTF (UTF-8, UTF-16, UTF-32) like structure.
456
457         The m17n library provides the default decoding and encoding
458         routines of this type.  */
459
460     /***ja
461         ¤³¤Î¥¿¥¤¥×¤Î¥³¡¼¥É·Ï¤Ï¡¢UTF ·Ï (UTF-8, UTF-16, UTF-32) ¤Î¥Ð¥¤
462         ¥ÈÎó¤ò¥µ¥Ý¡¼¥È¤¹¤ë¡£
463
464         m17n ¥é¥¤¥Ö¥é¥ê¤Ï¤³¤Î¥¿¥¤¥×ÍѤΥǥե©¥ë¥È¤Î¥¨¥ó¥³¡¼¥É¡¿¥Ç¥³¡¼
465         ¥É¥ë¡¼¥Æ¥£¥ó¤òÄ󶡤¹¤ë¡£  */
466
467     MCODING_TYPE_UTF,
468
469     /***en
470         A coding system of this type supports byte sequences of an
471         ISO-2022 like structure.  The details of each structure are
472         specified by @c MCodingInfoISO2022 .
473
474         The m17n library provides decoding and encoding routines of
475         this type.  */
476
477     /***ja 
478         ¤³¤Î¥¿¥¤¥×¤Î¥³¡¼¥É·Ï¤Ï¡¢ISO-2022 ·Ï¤Î¥Ð¥¤¥ÈÎó¤ò¥µ¥Ý¡¼¥È¤¹¤ë¡£
479         ³Æ¥³¡¼¥É·Ï¤Î¹½Â¤¤Î¾ÜºÙ¤Ï @c MCodingInfoISO2022 ¤Ç»ØÄꤵ¤ì¤ë¡£
480
481         m17n ¥é¥¤¥Ö¥é¥ê¤Ï¤³¤Î¥¿¥¤¥×ÍѤΥǥե©¥ë¥È¤Î¥¨¥ó¥³¡¼¥É¡¿¥Ç¥³¡¼
482         ¥É¥ë¡¼¥Æ¥£¥ó¤òÄ󶡤¹¤ë¡£  */
483
484     MCODING_TYPE_ISO_2022,
485
486     /***en
487         A coding system of this type is for byte sequences of
488         miscellaneous structures.
489
490         The m17n library does not provide decoding and encoding
491         routines of this type.  They must be provided by the
492         application program.  */
493
494     /***ja
495         ¤³¤Î¥¿¥¤¥×¤Î¥³¡¼¥É·Ï¤Ï¡¢¤½¤Î¾¤Î¹½Â¤¤Î¥Ð¥¤¥ÈÎó¤Î¤¿¤á¤Î¤â¤Î¤Ç¤¢
496         ¤ë¡£
497
498         m17n ¥é¥¤¥Ö¥é¥ê¤Ï¤³¤Î¥¿¥¤¥×ÍѤΥ¨¥ó¥³¡¼¥É¡¿¥Ç¥³¡¼¥É¥ë¡¼¥Æ¥£¥ó
499         ¤òÄ󶡤·¤Ê¤¤¤Î¤Ç¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¦¤Ç½àÈ÷¤¹
500         ¤ëɬÍפ¬¤¢¤ë¡£  */
501
502     MCODING_TYPE_MISC
503   };
504 /*=*/
505
506 /*** @ingroup m17nConv */
507 /***en 
508     @brief  Bit-masks to specify the detail of coding system whose type is MCODING_TYPE_ISO_2022.  */
509 /***ja 
510     @brief MCODING_TYPE_ISO_2022 ¥¿¥¤¥×¤Î¥³¡¼¥É·Ï¤Î¾ÜºÙ¤òɽ¤ï¤¹¥Ó¥Ã¥È¥Þ¥¹¥¯.  */
511
512 enum MCodingFlagISO2022
513   {
514     /***en
515         On encoding, reset the invocation and designation status to
516         initial at end of line.  */
517     /***ja ¥¨¥ó¥³¡¼¥É¤ÎºÝ¡¢¹ÔËö¤Ç¸Æ¤Ó½Ð¤· (invocation) ¤È»Ø¼¨
518         (designation) ¤Î¾õÂÖ¤ò½é´üÃͤËÌ᤹¡£   */
519     MCODING_ISO_RESET_AT_EOL =          0x1,
520
521     /***en
522         On encoding, reset the invocation and designation status to
523         initial before any control codes.  */
524     /***ja
525         ¥¨¥ó¥³¡¼¥É¤ÎºÝ¡¢¤¹¤Ù¤Æ¤ÎÀ©¸æʸ»ú¤ÎÁ°¤Ç¡¢¸Æ¤Ó½Ð¤·
526         (invocation) ¤È»Ø¼¨ (designation) ¤Î¾õÂÖ¤ò½é´üÃͤËÌ᤹¡£        */
527     MCODING_ISO_RESET_AT_CNTL =         0x2,
528
529     /***en
530         Use the right graphic plane.  */
531     /***ja
532         ¿Þ·Áʸ»ú½¸¹ç¤Î±¦Â¦¤ò»È¤¦¡£  */
533     MCODING_ISO_EIGHT_BIT =             0x4,
534
535     /***en
536         Use the non-standard 4 bytes format for designation sequence
537         for charsets JISX0208.1978, GB2312, and JISX0208.1983.  */
538     /***ja
539         JISX0208.1978, GB2312, JISX0208.1983 ¤Îʸ»ú½¸¹ç¤ËÂФ¹¤ë»Ø¼¨¥·¡¼
540         ¥¯¥¨¥ó¥¹¤È¤·¤Æ¡¢Èóɸ½à¤Î4¥Ð¥¤¥È·Á¼°¤òÍѤ¤¤ë¡£ */
541
542     MCODING_ISO_LONG_FORM =             0x8,
543
544     /***en
545         On encoding, unless explicitly specified, designate charsets
546         to G0.  */
547     /***ja 
548         ¥¨¥ó¥³¡¼¥É¤ÎºÝ¡¢Æä˻ØÄꤵ¤ì¤Ê¤¤¸Â¤ê¡¢Ê¸»ú½¸¹ç¤ò G0 ¤Ë»Ø¼¨
549         ¤¹¤ë¡£*/
550     MCODING_ISO_DESIGNATION_G0 =                0x10,
551
552     /***en
553         On encoding, unless explicitly specified, designate charsets
554         except for ASCII to G1.  */
555     /***ja
556         ¥¨¥ó¥³¡¼¥É¤ÎºÝ¡¢Æä˻ØÄꤵ¤ì¤Ê¤¤¸Â¤ê¡¢ASCII °Ê³°¤Îʸ»ú½¸¹ç¤ò G1 
557         ¤Ë»Ø¼¨¤¹¤ë¡£*/
558     MCODING_ISO_DESIGNATION_G1 =                0x20,
559
560     /***en
561         On encoding, unless explicitly specified, designate 94-chars
562         charsets to G0, 96-chars charsets to G1.  */
563     /***ja
564         ¥¨¥ó¥³¡¼¥É¤ÎºÝ¡¢Æä˻ØÄꤵ¤ì¤Ê¤¤¸Â¤ê¡¢94ʸ»ú½¸¹ç¤ò G0 
565         ¤Ë¡¢96ʸ»ú½¸¹ç¤ò G1 ¤Ë»Ø¼¨¤¹¤ë¡£*/
566     MCODING_ISO_DESIGNATION_CTEXT =     0x40,
567
568     /***en
569         On encoding, encode such charsets not conforming to ISO-2022
570         by ESC % / ..., and encode non-supported Unicode characters by
571         ESC % G ... ESC % @@ .  On decoding, handle those escape
572         sequences.  */
573     /***ja
574         ¥¨¥ó¥³¡¼¥É¤ÎºÝ¡¢ISO-2022 ¤Ë¹çÃפ·¤Ê¤¤Ê¸»ú½¸¹ç¤ò ESC % / ... ¤Ç¥¨
575         ¥ó¥³¡¼¥É¤¹¤ë¡£¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤ Unicode Ê¸»ú¤Ï ESC % G ...
576         ESC % @@ ¤Ç¥¨¥ó¥³¡¼¥É¤¹¤ë¡£
577         ¥Ç¥³¡¼¥É¤ÎºÝ¡¢¤³¤ì¤é¤Î¥¨¥¹¥±¡¼¥×¡¦¥·¡¼¥±¥ó¥¹¤ò²ò¼á¤¹¤ë¡£  */
578     MCODING_ISO_DESIGNATION_CTEXT_EXT = 0x80,
579
580     /***en
581         Use locking shift.  */
582     /***ja
583         ¥í¥Ã¥­¥ó¥°¥·¥Õ¥È¤ò»È¤¦¡£  */
584     MCODING_ISO_LOCKING_SHIFT = 0x100,
585
586     /***en
587         Use single shift (SS2 (0x8E or ESC N), SS3 (0x8F or ESC O)).  */
588     /***ja
589         ¥·¥ó¥°¥ë¥·¥Õ¥È (SS2 (0x8E or ESC N), SS3 (0x8F or ESC O)) ¤ò»È¤¦¡£  */
590     MCODING_ISO_SINGLE_SHIFT =  0x200,
591
592     /***en
593         Use 7-bit single shift 2 (SS2 (0x19)).  */
594     /***ja
595         7¥Ó¥Ã¥È¥·¥ó¥°¥ë¥·¥Õ¥È 2 (SS2 (0x19)) ¤ò»È¤¦¡£  */
596     MCODING_ISO_SINGLE_SHIFT_7 =        0x400,
597
598     /***en
599         Use EUC-TW like special shifting.  */
600     /***ja
601         EUC-TW É÷¤ÎÆÃÊ̤ʥ·¥Õ¥È¤ò»È¤¦¡£  */
602     MCODING_ISO_EUC_TW_SHIFT =  0x800,
603
604     /***en
605         Use ISO-6429 escape sequences to indicate direction.
606         Not yet implemented.  */
607     /***ja
608         ISO-6429 ¤Î¥¨¥¹¥±¡¼¥×¥·¡¼¥¯¥¨¥ó¥¹¤ÇÊý¸þ¤ò»Ø¼¨¤¹¤ë¡£Ì¤¼ÂÁõ¡£ */
609     MCODING_ISO_ISO6429 =               0x1000,
610
611     /***en
612         On encoding, if a charset has revision number, produce escape
613         sequences to specify the number.  */
614     /***ja
615         ¥¨¥ó¥³¡¼¥É¤ÎºÝ¡¢Ê¸»ú¥»¥Ã¥È¤Ë revision number ¤¬¤¢¤ì¤Ð¤½
616         ¤ì¤òɽ¤ï¤¹¥¨¥¹¥±¡¼¥×¥·¡¼¥¯¥¨¥ó¥¹¤òÀ¸À®¤¹¤ë¡£        */
617     MCODING_ISO_REVISION_NUMBER =       0x2000,
618
619     /***en
620         Support all ISO-2022 charsets.  */
621     /***ja
622         ISO-2022 ¤ÎÁ´Ê¸»ú½¸¹ç¤ò¥µ¥Ý¡¼¥È¤¹¤ë¡£  */
623     MCODING_ISO_FULL_SUPPORT =          0x3000,
624
625     MCODING_ISO_FLAG_MAX
626   };
627 /*=*/
628
629 /*** @ingroup m17nConv */
630 /***en
631     @brief Structure for a coding system of type #MCODING_TYPE_ISO_2022.
632
633     Structure for extra information about a coding system of type
634     MCODING_TYPE_ISO_2022.  */
635
636 /***ja 
637     @brief #MCODING_TYPE_ISO_2022 ¥¿¥¤¥×¤Î¥³¡¼¥É·Ï¤ÇɬÍפÊÉղþðÊóÍѹ½Â¤ÂÎ.
638
639     MCODING_TYPE_ISO_2022 ¥¿¥¤¥×¤Î¥³¡¼¥É·Ï¤ÇɬÍפÊÉղþðÊóÍѤòÊÝ»ý¤¹¤ë
640     ¤¿¤á¤Î¹½Â¤ÂΡ£
641
642     @latexonly \IPAlabel{MCodingInfoISO2022} @endlatexonly  */
643
644 typedef struct
645 {
646   /***en
647       Table of numbers of an ISO2022 code extension element invoked
648       to each graphic plane (Graphic Left and Graphic Right).  -1
649       means no code extension element is invoked to that plane.  */
650
651   /***ja
652       ³Æ¿Þ·Áʸ»úÎΰè (Graphic Left ¤È Graphic Right) ¤Ë¸Æ¤Ó½Ð¤µ¤ì¤Æ¤¤
653       ¤ë¡¢ISO2022 Éä¹ç³ÈÄ¥Í×ÁǤÎÈÖ¹æ¤Î¥Æ¡¼¥Ö¥ë¡£-1 ¤Ï¤½¤ÎÎΰè¤Ë¤É¤ÎÉä
654       ¹ç³ÈÄ¥Í×ÁǤâ¸Æ¤Ó½Ð¤µ¤ì¤Æ¤¤¤Ê¤¤¤³¤È¤ò¼¨¤¹¡£   */
655
656   int initial_invocation[2];
657
658   /***en
659       Table of code extension elements.  The Nth element corresponds
660       to the Nth charset in $CHARSET_NAMES, which is an argument given
661       to the mconv_define_coding () function.
662
663       If an element value is 0..3, it specifies a graphic register
664       number to designate the corresponds charset.  In addition, the
665       charset is initially designated to that graphic register.
666
667       If the value is -4..-1, it specifies a graphic register number
668       0..3 respectively to designate the corresponds charset.
669       Initially, the charset is not designated to any graphic
670       register.  */
671
672   /***ja
673       Éä¹ç³ÈÄ¥Í×ÁǤΥơ¼¥Ö¥ë¡£NÈÖÌܤÎÍ×ÁǤϡ¢$CHARSET_NAMES ¤Î N ÈÖÌÜ
674       ¤Îʸ»ú¥»¥Ã¥È¤ËÂбþ¤¹¤ë¡£$CHARSET_NAMES ¤Ï´Ø¿ô 
675       mconv_define_coding () ¤Î°ú¿ô¤È¤Ê¤ë¡£
676
677       Ãͤ¬ 0..3 ¤À¤Ã¤¿¤é¡¢Âбþ¤¹¤ëʸ»ú¥»¥Ã¥È¤ò G0..G3 ¤Î¤½¤ì¤¾¤ì¤Ë»Ø¼¨
678       ¤¹¤ë¤³¤È¡¢½é´ü¾õÂ֤Ǥ¹¤Ç¤Ë G0..G3 ¤Ë»Ø¼¨¤µ¤ì¤Æ¤¤¤ë¤³¤È¤ò°ÕÌ£¤¹
679       ¤ë¡£
680
681       Ãͤ¬ -4..-1 ¤À¤Ã¤¿¤é¡¢Âбþ¤¹¤ëʸ»ú¥»¥Ã¥È¤ò G0..G3 ¤Î¤½¤ì¤¾¤ì¤Ë»Ø
682        ¼¨¤¹¤ë¤¬¡¢½é´ü¾õÂ֤ǤϤɤ³¤Ë¤â»Ø¼¨¤µ¤ì¤Æ¤¤¤Ê¤¤¤³¤È¤ò°ÕÌ£¤¹¤ë¡£
683         */
684
685   char designations[32];
686
687   /***en
688       Bitwise OR of @c enum @c MCodingFlagISO2022 .  */
689
690   /***ja
691       @c enum @c MCodingFlagISO2022 ¤Î¥Ó¥Ã¥Èñ°Ì¤Ç¤ÎÏÀÍý OR  */
692
693   unsigned flags;
694
695 } MCodingInfoISO2022;
696 /*=*/
697
698 /*** @ingroup m17nConv */
699 /***en
700     @brief Structure for extra information about a coding system of type #MCODING_TYPE_UTF.
701     */
702
703 /***ja
704     @brief #MCODING_TYPE_UTF ¥¿¥¤¥×¤Î¥³¡¼¥É·Ï¤ÇɬÍפÊÉղþðÊóÍѤι½Â¤ÂÎ.
705
706     @latexonly \IPApage{MCodingInfoUTF} @endlatexonly
707
708     @latexonly \IPAlabel{MCodingInfoUTF} @endlatexonly  */
709
710 typedef struct
711 {
712   /***en
713       Specify bits of a code unit.  The value must be 8, 16, or 32.  */
714   /***ja
715       ¥³¡¼¥ÉĹ¡Ê¥Ó¥Ã¥È¿ô¡Ë¡£ÃͤϠ8, 16, 32 ¤Î¤¤¤º¤ì¤«¡£  */
716   int code_unit_bits;
717
718   /***en
719       Specify how to handle the heading BOM (byte order mark).  The
720       value must be 0, 1, or 2.  The meanings are as follows:
721
722       0: On decoding, check the first two byte.  If they are BOM,
723       decide endian by them. If not, decide endian by the member @c
724       endian.  On encoding, produce byte sequence according to
725       @c endian with heading BOM.
726
727       1: On decoding, do not handle the first two bytes as BOM, and
728       decide endian by @c endian.  On encoding, produce byte sequence
729       according to @c endian without BOM.
730
731       2: On decoding, handle the first two bytes as BOM and decide
732       ending by them.  On encoding, produce byte sequence according to
733       @c endian with heading BOM.
734
735       If <code_unit_bits> is 8, the value has no meaning.  */
736
737   /***ja
738       ÀèƬ¤Î BOM (¥Ð¥¤¥È¥ª¡¼¥À¡¼¥Þ¡¼¥¯) ¤Î¼è¤ê°·¤¤¤ò»ØÄꤹ¤ë¡£ÃͤϠ0,
739       1, 2 ¤Î¤¤¤º¤ì¤«¤Ç¤¢¤ê¡¢¤½¤ì¤¾¤ì¤Î°ÕÌ£¤Ï°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ë¡£
740
741       0: ¥Ç¥³¡¼¥É¤ÎºÝ¤ËºÇ½é¤Î 2 ¥Ð¥¤¥È¤òÄ´¤Ù¤ë¡£¤â¤·¤½¤ì¤¬ BOM ¤Ç¤¢¤ì
742       ¤Ð¡¢¥¨¥ó¥Ç¥£¥¢¥ó¤ò¤½¤ì¤ÇȽÄꤹ¤ë¡£¤½¤¦¤Ç¤Ê¤±¤ì¤Ð¡¢¥á¥ó¥Ð @c
743       endian ¤Ë½¾¤Ã¤Æ¥¨¥ó¥Ç¥£¥¢¥ó¤ò·èÄꤹ¤ë¡£¥¨¥ó¥³¡¼¥É¤ÎºÝ¤Ë¤Ï @c
744       endian ¤Ë½¾¤Ã¤¿¥Ð¥¤¥ÈÎó¤òÀèƬ¤Ë BOM ÉÕ¤ÇÀ¸À®¤¹¤ë¡£
745
746       1: ¥Ç¥³¡¼¥É¤ÎºÝ¡¢ºÇ½é¤Î 2 ¥Ð¥¤¥È¤ò BOM ¤È¤·¤Æ°·¤ï¤º¡¢¥¨¥ó¥Ç¥£¥¢
747       ¥ó¤Ï @c endian ¤ÇȽÄꤹ¤ë¡£¥¨¥ó¥³¡¼¥É¤ÎºÝ¤Ë¤Ï¡¢BOM ¤ò½ÐÎϤ»¤º¡¢
748       @c endian ¤Ë±þ¤¸¤¿¥Ð¥¤¥ÈÎó¤òÀ¸À®¤¹¤ë¡£
749
750       2: ¥Ç¥³¡¼¥É¤ÎºÝ¤ËºÇ½é¤Î2¥Ð¥¤¥È¤ò BOM¤È¤·¤Æ°·¤¤¡¢¤½¤ì¤Ë½¾¤Ã¤Æ¥¨¥ó
751       ¥Ç¥£¥¢¥ó¤òȽÄꤹ¤ë¡£¥¨¥ó¥³¡¼¥É¤ÎºÝ¤Ë¤Ï @c endian ¤Ë±þ¤¸¤¿¥Ð¥¤¥È
752       Îó¤òÀèƬ¤Ë BOM ÉÕ¤­¤ÇÀ¸À®¤¹¤ë¡£  */
753   int bom;
754
755   /***en
756       Specify the endian type.  The value must be 0 or 1.  0 means
757       little endian, and 1 means big endian.
758
759       If <code_unit_bits> is 8, the value has no meaning.  */
760   /***ja
761       ¥¨¥ó¥Ç¥£¥¢¥ó¤Î¥¿¥¤¥×¤ò»ØÄꤹ¤ë¡£ÃͤϠ0 ¤« 1 ¤Ç¤¢¤ê¡¢0 ¤Ê¤é¤Ð¥ê¥È
762       ¥ë¥¨¥ó¥Ç¥£¥¢¥ó¡¢1 ¤Ê¤é¤Ð¥Ó¥Ã¥°¥¨¥ó¥Ç¥£¥¢¥ó¤Ç¤¢¤ë¡£
763
764       <code_unit_bits> ¤¬ 8 ¤Î¾ì¹ç¤Ë¤Ï¡¢¤³¤ÎÃͤϰÕÌ£¤ò»ý¤¿¤Ê¤¤¡£
765   */
766   int endian;
767 } MCodingInfoUTF;
768 /*=*/
769
770 extern MSymbol mconv_define_coding (const char *name, MPlist *plist,
771                                     int (*resetter) (MConverter *),
772                                     int (*decoder) (const unsigned char *, int,
773                                                     MText *, MConverter *),
774                                     int (*encoder) (MText *, int, int,
775                                                     unsigned char *, int,
776                                                     MConverter *),
777                                     void *extra_info);
778
779 extern MSymbol mconv_resolve_coding (MSymbol symbol);
780
781 extern int mconv_list_codings (MSymbol **symbols);
782
783 extern MConverter *mconv_buffer_converter (MSymbol coding, unsigned char *buf,
784                                            int n);
785
786 extern MConverter *mconv_stream_converter (MSymbol coding, FILE *fp);
787
788 extern int mconv_reset_converter (MConverter *converter);
789
790 extern void mconv_free_converter (MConverter *converter);
791
792 extern MConverter *mconv_rebind_buffer (MConverter *converter,
793                                         unsigned char *buf, int n);
794
795 extern MConverter *mconv_rebind_stream (MConverter *converter, FILE *fp);
796
797 extern MText *mconv_decode (MConverter *converter, MText *mt);
798
799 MText *mconv_decode_buffer (MSymbol name, unsigned char *buf, int n);
800
801 MText *mconv_decode_stream (MSymbol name, FILE *fp);   
802
803 extern int mconv_encode (MConverter *converter, MText *mt);
804
805 extern int mconv_encode_range (MConverter *converter, MText *mt,
806                                int from, int to);
807
808 extern int mconv_encode_buffer (MSymbol name, MText *mt,
809                                 unsigned char *buf, int n);
810
811 extern int mconv_encode_stream (MSymbol name, MText *mt, FILE *fp);
812
813 extern int mconv_getc (MConverter *converter);
814
815 extern int mconv_ungetc (MConverter *converter, int c);
816
817 extern int mconv_putc (MConverter *converter, int c);
818
819 extern MText *mconv_gets (MConverter *converter, MText *mt);
820
821 /* (S4) Locale related functions corresponding to libc functions */
822 /*=*/
823 /*** @ingroup m17nShell */
824 /***en @defgroup m17nLocale Locale */
825 /***ja @defgroup m17nLocale ¥í¥±¡¼¥ë */
826 /*=*/
827
828 /*** @ingroup m17nLocale */
829 /***en
830     @brief @c struct @c MLocale.
831
832     The structure @c MLocale is used to hold information about name,
833     language, territory, modifier, codeset, and the corresponding
834     coding system of locales.
835
836     The contents of this structure are implementation dependent.  Its
837     internal structure is concealed from application programs.  */
838
839 /***ja
840     @brief @c MLocale ¹½Â¤ÂÎ.
841
842     @c MLocale ¹½Â¤ÂΤϡ¢¥í¥±¡¼¥ë¤Î̾Á°¡¢¸À¸ì¡¢ÃÏ°è¡¢¥â¥Ç¥£¥Õ¥¡¥¤¥¢¡¢
843     ¥³¡¼¥É¥»¥Ã¥È¡¢¤ª¤è¤ÓÂбþ¤¹¤ë¥³¡¼¥É·Ï¤Ë´Ø¤¹¤ë¾ðÊó¤òÊÝ»ý¤¹¤ë¤¿¤á¤ËÍÑ
844     ¤¤¤é¤ì¤ë¡£
845
846     ¤³¤Î¹½Â¤ÂΤÎÆâÍƤϼÂÁõ¤Ë°Í¸¤¹¤ë¡£ ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í
847     ¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£  */
848
849 /***
850     @seealso
851     mlocale_get_prop () */
852
853 typedef struct MLocale MLocale;
854
855 /*=*/
856
857 extern MSymbol Mlanguage;
858 extern MSymbol Mterritory;
859 extern MSymbol Mmodifier;
860 extern MSymbol Mcodeset;
861
862 extern MLocale *mlocale_set (int category, const char *locale);
863
864 extern MSymbol mlocale_get_prop (MLocale *locale, MSymbol key);
865
866 extern int mtext_ftime (MText *mt, const char *format, const struct tm *tm,
867                         MLocale *locale);
868
869 extern MText *mtext_getenv (const char *name);
870
871 extern int mtext_putenv (MText *mt);
872
873 extern int mtext_coll (MText *mt1, MText *mt2);
874
875 /*
876  *  (9) Miscellaneous functions of libc level (not yet implemented)
877  */
878
879 /*
880 extern int mtext_width (MText *mt, int n);
881 extern MText *mtext_tolower (MText *mt);
882 extern MText *mtext_toupper (MText *mt);
883 */
884
885 /*
886  *  (10) Input method
887  */
888 /*=*/
889 /*** @ingroup m17nShell */
890 /***en @defgroup m17nInputMethod Input Method (basic) */
891 /***ja @defgroup m17nInputMethod ÆþÎϥ᥽¥Ã¥É (´ðËÜÉôʬ) */
892 /*=*/
893
894 /*** @addtogroup m17nInputMethod 
895      @{ */
896
897 /* Struct forward declaration.  */
898 typedef struct MInputMethod MInputMethod;
899 typedef struct MInputContext MInputContext;
900
901 /***en
902     @brief Type of input method callback functions.
903
904     This is the type of callback functions called from input method
905     drivers.  #IC is a pointer to an input context, #COMMAND is a name
906     of callback for which the function is called.   */
907 /***ja
908     @brief ÆþÎϥ᥽¥Ã¥É¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô¤Î·¿Àë¸À.
909
910     ÆþÎϥ᥽¥Ã¥É¤«¤é¸Æ¤Ð¤ì¤ë¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô¤Î·¿¤Ç¤¢¤ë¡£#IC ¤ÏÆþÎÏ¥³¥ó
911     ¥Æ¥¯¥¹¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¡¢#COMMAND ¤Ï´Ø¿ô¤¬¸Æ¤Ð¤ì¤ë¥³¡¼¥ë¥Ð¥Ã¥¯¤Î̾Á°
912     ¤Ç¤¢¤ë¡£  */
913
914 typedef void (*MInputCallbackFunc) (MInputContext *ic, MSymbol command);
915 /*=*/
916
917 /***en
918     @brief Structure of input method driver.
919
920     The type @c MInputDriver is the structure of an input method driver that
921     contains several functions to handle an input method.  */
922
923 /***ja
924     @brief ÆþÎϥɥ饤¥ÐÍѹ½Â¤ÂÎ.
925
926     @c MInputDriver ¤Ï¡¢ÆþÎϥ᥽¥Ã¥É¤ò¼è¤ê°·¤¦´Ø¿ô¤ò´Þ¤àÆþÎϥ᥽¥Ã¥É¥É
927     ¥é¥¤¥Ð¤Î¹½Â¤ÂΤη¿¤Ç¤¢¤ë¡£  */
928
929 typedef struct MInputDriver
930 {
931   /***en
932       @brief Open an input method.
933
934       This function opens the input method $IM.  It is called from the
935       function minput_open_im () after all member of $IM but <info>
936       set.  If opening $IM succeeds, it returns 0.  Otherwise, it
937       returns -1.  The function can setup $IM->info to keep various
938       information that is referred by the other driver functions.  */
939
940   /***ja
941       @brief ÆþÎϥ᥽¥Ã¥É¤ò¥ª¡¼¥×¥ó¤¹¤ë.
942
943       ¤³¤Î´Ø¿ô¤Ï¡¢ÆþÎϥ᥽¥Ã¥É $IM ¤ò¥ª¡¼¥×¥ó¤¹¤ë¡£$IM ¤Î <info> °Ê³°
944       ¤ÎÁ´¥á¥ó¥Ð¡¼¤¬¥»¥Ã¥È¤µ¤ì¤¿¸å¤Ç¡¢´Ø¿ô minput_open_im () ¤«¤é¸Æ¤Ð
945       ¤ì¤ë¡£$IM ¤ò¥ª¡¼¥×¥ó¤Ç¤­¤ì¤Ð 0 ¤ò¡¢¤Ç¤­¤Ê¤±¤ì¤Ð -1¤òÊÖ¤¹¡£¤³¤Î´Ø
946       ¿ô¤Ï $IM->info ¤òÀßÄꤷ¤Æ¡¢Â¾¤Î¥É¥é¥¤¥Ð´Ø¿ô¤«¤é»²¾È¤µ¤ì¤ë¾ðÊó¤ò
947       ÊÝ»ý¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£
948       */
949
950   int (*open_im) (MInputMethod *im);
951
952   /***en
953       @brief Close an input method.
954
955       This function closes the input method $IM.  It is called from
956       the function minput_close_im ().  It frees all memory allocated
957       for $IM->info (if any) after finishing all the tasks of closing
958       the input method.  But, the other members of $IM should not be
959       touched.  */
960
961   /***ja
962       @brief ÆþÎϥ᥽¥Ã¥É¤ò¥¯¥í¡¼¥º¤¹¤ë.
963
964       ¤³¤Î´Ø¿ô¤Ï¡¢ÆþÎϥ᥽¥Ã¥É $IM ¤ò¥¯¥í¡¼¥º¤¹¤ë¡£´Ø¿ô 
965       minput_close_im () ¤«¤é¸Æ¤Ð¤ì¤ë¡£ÆþÎϥ᥽¥Ã¥É¤Î¥¯¥í¡¼¥º¤¬¤¹¤Ù¤Æ
966       ½ªÎ»¤·¤¿»þÅÀ¤Ç¡¢$IM->info ¤Ë³ä¤êÅö¤Æ¤é¤ì¤Æ¤¤¤ë¥á¥â¥ê¤ò(¤¢¤ì¤Ð)¤¹
967       ¤Ù¤Æ³«Êü¤¹¤ë¡£¤¿¤À¤·¡¢$IM ¤Î¾¤Î¥á¥ó¥Ð¤Ë±Æ¶Á¤òÍ¿¤¨¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
968         */
969
970   void (*close_im) (MInputMethod *im);
971
972   /***en
973       @brief Create an input context.
974
975       This function creates the input context $IC.  It is called from
976       the function minput_create_ic () after all members of $IC but
977       <info> are set.  If creating $IC succeeds, it returns 0.
978       Otherwise, it returns -1.  The function can setup $IC->info to
979       keep various information that is referred by the other driver
980       functions.  */
981
982   /***ja
983       @brief ÆþÎÏ¥³¥ó¥Æ¥¯¥¹¥È¤òÀ¸À®¤¹¤ë.
984
985       ¤³¤Î´Ø¿ô¤ÏÆþÎÏ¥³¥ó¥Æ¥¯¥¹¥È $IC ¤òÀ¸À®¤¹¤ë¡£$IC ¤Î <info> °Ê³°¤Î
986       Á´¥á¥ó¥Ð¡¼¤¬¥»¥Ã¥È¤µ¤ì¤¿¸å¤Ç¡¢´Ø¿ô minput_create_ic () ¤«¤é¸Æ¤Ð
987       ¤ì¤ë¡£$IC ¤òÀ¸À®¤Ç¤­¤ì¤Ð 0 ¤ò¡¢¤Ç¤­¤Ê¤±¤ì¤Ð -1 ¤òÊÖ¤¹¡£¤³¤Î´Ø¿ô
988       ¤Ï $IC->info ¤òÀßÄꤷ¤Æ¡¢Â¾¤Î¥É¥é¥¤¥Ð´Ø¿ô¤«¤é»²¾È¤µ¤ì¤ë¾ðÊó¤òÊÝ
989       »ý¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£  */
990
991
992   int (*create_ic) (MInputContext *ic);
993
994   /***en
995       @brief Destroy an input context.
996
997       This function is called from the function minput_destroy_ic ()
998       and destroys the input context $IC.  It frees all memory
999       allocated for $IC->info (if any) after finishing all the tasks
1000       of destroying the input method.  But, the other members of $IC
1001       should not be touched.  */
1002
1003   /***ja
1004       @brief ÆþÎÏ¥³¥ó¥Æ¥¯¥¹¥È¤òÇ˲õ¤¹¤ë.
1005
1006       ´Ø¿ô minput_destroy_ic () ¤«¤é¸Æ¤Ð¤ì¡¢ÆþÎÏ¥³¥ó¥Æ¥¯¥¹¥È $IC ¤òÇË
1007       ²õ¤¹¤ë¡£ÆþÎÏ¥³¥ó¥Æ¥¯¥¹¥È¤ÎÇ˲õ¤¬¤¹¤Ù¤Æ½ªÎ»¤·¤¿»þÅÀ¤Ç¡¢$IC->info 
1008       ¤Ë³ä¤êÅö¤Æ¤é¤ì¤Æ¤¤¤ë¥á¥â¥ê¤ò(¤¢¤ì¤Ð)¤¹¤Ù¤Æ³«Êü¤¹¤ë¡£¤¿¤À¤·¡¢$IC 
1009       ¤Î¾¤Î¥á¥ó¥Ð¤Ë±Æ¶Á¤òÍ¿¤¨¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£  */
1010
1011   void (*destroy_ic) (MInputContext *ic);
1012
1013   /***en
1014       @brief Filter an input key.
1015
1016       This function is called from the function minput_filter () and
1017       filters an input key.  $KEY and $ARG are the same as what given
1018       to minput_filter ().
1019
1020       The task of the function is to handle $KEY, update the internal
1021       state of $IC.  If $KEY is absorbed by the input method and no
1022       text is produced, it returns 1.  Otherwise, it returns 0.
1023
1024       It may update $IC->status, $IC->preedit, $IC->cursor_pos,
1025       $IC->ncandidates, $IC->candidates, and $IC->produced if that is
1026       necessary for the member <callback>.
1027
1028       The meaning of $ARG depends on the input method river.  See the
1029       documentation of @c minput_default_driver and @c
1030       minput_gui_driver for instance.  */
1031
1032   /***ja
1033       @brief ÆþÎÏ¥­¡¼¤ò¥Õ¥£¥ë¥¿¤¹¤ë.
1034
1035       ´Ø¿ô minput_filter () ¤«¤é¸Æ¤Ð¤ì¡¢ÆþÎÏ¥­¡¼¤ò¥Õ¥£¥ë¥¿¤¹¤ë¡£°ú¿ô 
1036       $KEY, $ARG ¤Ï´Ø¿ô minput_filter () ¤Î¤â¤Î¤ÈƱ¤¸¡£
1037
1038       ¤³¤Î´Ø¿ô¤Ï $KEY ¤ò½èÍý¤·¡¢$IC ¤ÎÆâÉô¾õÂÖ¤ò¹¹¿·¤¹¤ë¡£ $KEY ¤¬ÆþÎÏ
1039       ¥á¥½¥Ã¥É¤ËµÛ¼ý¤µ¤ì¤Æ¥Æ¥­¥¹¥È¤¬À¸À®¤µ¤ì¤Ê¤«¤Ã¤¿¾ì¹ç¤Ë¤Ï¡¢ 1 ¤òÊÖ
1040       ¤¹¡£¤½¤¦¤Ç¤Ê¤±¤ì¤Ð 0 ¤òÊÖ¤¹¡£
1041
1042       ¥á¥ó¥Ð <callback> ¤ËɬÍפǤ¢¤ì¤Ð¡¢$IC->status, $IC->preedit,
1043       $IC->cursor_pos, $IC->ncandidates, $IC->candidates,
1044       $IC->produced ¤ò¹¹¿·¤Ç¤­¤ë¡£
1045
1046       $ARG ¤Î°ÕÌ£¤ÏÆþÎϥ᥽¥Ã¥É¥É¥é¥¤¥Ð¤Ë°Í¸¤¹¤ë¡£Îã¤Ï @c
1047       minput_default_driver ¤Þ¤¿¤Ï @c minput_gui_driver ¤ÎÀâÌÀ¤ò»²¾È¤Î
1048       ¤³¤È¡£ */
1049
1050   int (*filter) (MInputContext *ic, MSymbol key, void *arg);
1051
1052   /***en
1053       @brief  Lookup a produced text in an input context.
1054
1055       It is called from the function minput_lookup () and looks up a
1056       produced text in the input context $IC.  This function
1057       concatenate a text produced by the input key $KEY (if any) to
1058       M-text $MT.  If $KEY was correctly handled by the input method
1059       of $IC, it returns 0.  Otherwise, it returns 1.
1060
1061       The meaning of $ARG depends on the input method driver.  See the
1062       documentation of @c minput_default_driver and @c
1063       minput_gui_driver for instance.  */
1064
1065   /***ja
1066       @brief ÆþÎÏ¥³¥ó¥Æ¥¯¥¹¥È¤ÇÀ¸À®¤µ¤ì¤ë¥Æ¥­¥¹¥È¤Î³ÍÆÀ.
1067
1068       ´Ø¿ô minput_lookup () ¤«¤é¸Æ¤Ð¤ì¡¢ÆþÎÏ¥³¥ó¥Æ¥¯¥¹¥È $IC ¤ÇÀ¸À®¤µ
1069       ¤ì¤ë¥Æ¥­¥¹¥È¤ò¸¡º÷¤¹¤ë¡£ÆþÎÏ¥­¡¼ $KEY ¤Ë¤è¤Ã¤ÆÀ¸À®¤µ¤ì¤ë¥Æ¥­¥¹¥È
1070       ¤¬¤¢¤ì¤Ð¡¢M-text $MT ¤ËÄɲ乤롣 $KEY ¤¬ÆþÎϥ᥽¥Ã¥É $IC ¤Ë¤è¤Ã
1071       ¤ÆÀµ¤·¤¯½èÍý¤µ¤ì¤ì¤Ð 0 ¤òÊÖ¤¹¡£¤½¤¦¤Ç¤Ê¤±¤ì¤Ð 1 ¤òÊÖ¤¹¡£
1072
1073       $ARG ¤Î°ÕÌ£¤ÏÆþÎϥ᥽¥Ã¥É¥É¥é¥¤¥Ð¤Ë°Í¸¤¹¤ë¡£Îã¤Ï @c
1074       minput_default_driver ¤Þ¤¿¤Ï @c minput_gui_driver ¤ÎÀâÌÀ¤ò»²¾È¤Î
1075       ¤³¤È¡£ */
1076
1077   int (*lookup) (MInputContext *ic, MSymbol key, void *arg, MText *mt);
1078
1079   /***en
1080       @brief List of callback functions.
1081
1082       List of callback functions.  Keys are one of
1083       #Minput_preedit_start, #Minput_preedit_draw,
1084       #Minput_preedit_done, #Minput_status_start, #Minput_status_draw,
1085       #Minput_status_done, #Minput_candidates_start,
1086       #Minput_candidates_draw, #Minput_candidates_done,
1087       #Minput_set_spot, #Minput_toggle, #Minput_reset.
1088       Values are functions of type #MInputCallbackFunc.  */
1089   /***ja
1090       @brief ¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô¤Î¥ê¥¹¥È.
1091
1092       ¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô¤Î¥ê¥¹¥È¡£¥­¡¼¤Ï¼¡¤Î¤¤¤º¤ì¤«¡£
1093       #Minput_preedit_start, #Minput_preedit_draw,
1094       #Minput_preedit_done, #Minput_status_start, #Minput_status_draw,
1095       #Minput_status_done, #Minput_candidates_start,
1096       #Minput_candidates_draw, #Minput_candidates_done,
1097       #Minput_set_spot, #Minput_toggle, #Minput_reset¡£ 
1098       ÃͤÏ#MInputCallbackFunc ·¿¤Î´Ø¿ô¡£  */
1099   MPlist *callback_list;
1100
1101 } MInputDriver;
1102 /*=*/
1103
1104 extern MInputDriver minput_default_driver;
1105
1106 extern MSymbol Minput_driver;
1107
1108 extern MInputDriver *minput_driver;
1109
1110 /** Symbols for callback commands.  */
1111 extern MSymbol Minput_preedit_start;
1112 extern MSymbol Minput_preedit_draw;
1113 extern MSymbol Minput_preedit_done;
1114 extern MSymbol Minput_status_start;
1115 extern MSymbol Minput_status_draw;
1116 extern MSymbol Minput_status_done;
1117 extern MSymbol Minput_candidates_start;
1118 extern MSymbol Minput_candidates_draw;
1119 extern MSymbol Minput_candidates_done;
1120 extern MSymbol Minput_set_spot;
1121 extern MSymbol Minput_toggle;
1122 extern MSymbol Minput_reset;
1123
1124 /***en
1125     @brief Structure of input method.
1126
1127     The type @c MInputMethod is the structure of input method
1128     objects.  */
1129 /***ja
1130     @brief ÆþÎϥ᥽¥Ã¥É¤Î¹½Â¤ÂÎ.
1131
1132     @c MInputMethod ¤Ï¡¢ÆþÎϥ᥽¥Ã¥É¥ª¥Ö¥¸¥§¥¯¥ÈÍѤι½Â¤ÂΤη¿¤Ç¤¢¤ë¡£  */
1133
1134 struct MInputMethod
1135 {
1136   /***en Which language this input method is for.  The value is @c
1137       Mnil if the input method is foreign.  */
1138   /***ja ¤É¤Î¸À¸ìÍѤÎÆþÎϥ᥽¥Ã¥É¤«¡£ÆþÎϥ᥽¥Ã¥É¤¬³°Éô¤Î¤â¤Î¤Ç¤¢¤ë¾ì
1139       ¹ç¤Ë¤ÏÃͤȤ·¤Æ @c Mnil ¤ò»ý¤Ä¡£  */
1140   MSymbol language;
1141
1142   /***en Name of the input method.  If the input method is foreign, it
1143       must has a property of key @c Minput_driver and the value must be a
1144       pointer to a proper input method driver.  */
1145   /***ja ÆþÎϥ᥽¥Ã¥É¤Î̾Á°¡£³°Éô¥á¥½¥Ã¥É¤Ç¤¢¤ë¾ì¹ç¤Ë¤Ï¡¢@c
1146       Minput_driver ¤ò¥­¡¼¤È¤¹¤ë¥×¥í¥Ñ¥Æ¥£¤ò»ý¤Á¡¢¤½¤ÎÃͤÏŬÀÚ¤ÊÆþÎÏ¥á
1147       ¥½¥Ã¥É¥É¥é¥¤¥Ð¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£*/
1148   MSymbol name;
1149
1150   /***en Input method driver of the input method.  */
1151   /***ja ¤½¤ÎÆþÎϥ᥽¥Ã¥ÉÍѤÎÆþÎϥ᥽¥Ã¥É¥É¥é¥¤¥Ð¡£  */
1152   MInputDriver driver;
1153
1154   /***en The argument given to minput_open_im (). */
1155   /***ja minput_open_im () ¤ËÅϤµ¤ì¤ë°ú¿ô¡£  */
1156   void *arg;
1157
1158   /***en Pointer to extra information that <driver>.open_im ()
1159       setups. */
1160   /***ja <driver>.open_im () ¤¬ÀßÄꤹ¤ëÄɲþðÊó¤Ø¤Î¥Ý¥¤¥ó¥¿¡£ */
1161   void *info;
1162 };
1163
1164 /*=*/
1165
1166 /***en
1167     @brief Structure of input context.
1168
1169     The type @c MInputContext is the structure of input context
1170     objects.  */
1171
1172 /***ja
1173     @brief ÆþÎÏ¥³¥ó¥Æ¥¯¥¹¥ÈÍѹ½Â¤ÂÎ.
1174
1175     @c MInputContext ¤Ï¡¢ÆþÎÏ¥³¥ó¥Æ¥¯¥¹¥È¥ª¥Ö¥¸¥§¥¯¥ÈÍѤι½Â¤ÂΤη¿¤Ç
1176     ¤¢¤ë¡£  */
1177
1178 struct MInputContext
1179 {
1180   /***en Backward pointer to the input method.  It is set up be the
1181       function minput_create_ic ().  */
1182   /***ja ÆþÎϥ᥽¥Ã¥É¤Ø¤ÎµÕ¥Ý¥¤¥ó¥¿¡£´Ø¿ô minput_create_ic () ¤Ë¤è¤Ã¤Æ
1183       ÀßÄꤵ¤ì¤ë¡£  */ 
1184   MInputMethod *im;
1185
1186   /***en M-text produced by the input method.  It is set up by the
1187       function minput_lookup () .  */
1188   /***ja ÆþÎϥ᥽¥Ã¥É¤Ë¤è¤Ã¤ÆÀ¸À®¤µ¤ì¤ë M-text¡£´Ø¿ô minput_lookup () 
1189       ¤Ë¤è¤Ã¤ÆÀßÄꤵ¤ì¤ë¡£  */
1190   MText *produced;
1191
1192   /***en Argument given to the function minput_create_im (). */
1193   /***ja ´Ø¿ô minput_create_ic () ¤ËÅϤµ¤ì¤ë°ú¿ô¡£ */
1194   void *arg;
1195
1196   /***en Flag telling whether the input context is currently active or
1197       inactive.  The value is set to 1 (active) when the input context
1198       is created.  It can be toggled by the function minput_toggle
1199       ().  */
1200   /***ja ÆþÎÏ¥³¥ó¥Æ¥¯¥¹¥È¤¬¥¢¥¯¥Æ¥£¥Ö¤«¤É¤¦¤«¤ò¼¨¤¹¥Õ¥é¥°¡£ÆþÎÏ¥³¥ó¥Æ
1201       ¥¯¥¹¥È¤¬À¸À®¤µ¤ì¤¿»þÅÀ¤Ç¤ÏÃͤϠ1 ¡Ê¥¢¥¯¥Æ¥£¥Ö¡Ë¤Ç¤¢¤ê¡¢´Ø¿ô 
1202       minput_toggle () ¤Ë¤è¤Ã¤Æ¥È¥°¥ë¤µ¤ì¤ë¡£  */
1203   int active;
1204
1205
1206   /***en Spot location and size of the input context.  */
1207   /***ja ÆþÎÏ¥³¥ó¥Æ¥¯¥¹¥È¤Î¥¹¥Ý¥Ã¥È¤Î°ÌÃÖ¤ÈÂ礭¤µ.  */
1208   struct {
1209     /***en X and Y coordinate of the spot.  */
1210     /***ja ¥¹¥Ý¥Ã¥È¤Î X, Y ºÂɸ.  */
1211     int x, y;
1212
1213     /***en Ascent and descent pixels of the line of the spot.  */
1214     /***ja ¥¹¥Ý¥Ã¥È¤Î¥¢¥»¥ó¥È¤È¥Ç¥£¥»¥ó¥È¤Î¥Ô¥¯¥»¥ë¿ô.  */
1215     int ascent, descent;
1216
1217     /***en Font size for preedit text in 1/10 point.  */
1218     /***ja preedit ¥Æ¥­¥¹¥ÈÍѤΥե©¥ó¥È¥µ¥¤¥º (1/10 ¥Ý¥¤¥ó¥Èñ°Ì).  */
1219     int fontsize;
1220
1221     /***en M-text at the spot, or NULL.  */
1222     /***ja ¥¹¥Ý¥Ã¥È¾å¤Î M-text¡¢¤Þ¤¿¤Ï NULL.  */
1223     MText *mt;
1224
1225     /***en Character position in <mt> at the spot.  */
1226     /***ja <mt> ¤Ë¤ª¤±¤ë¥¹¥Ý¥Ã¥È¤Îʸ»ú°ÌÃÖ.  */
1227     int pos;
1228   } spot;
1229
1230   /***en The usage of the following members depends on the input
1231       method driver.  The descriptions below are for the driver of an
1232       internal input method.  They are set by the function
1233       <im>->driver.filter ().  */
1234   /***ja °Ê²¼¤Î¥á¥ó¥Ð¤Î»ÈÍÑË¡¤ÏÆþÎϥ᥽¥Ã¥É¥É¥é¥¤¥Ð¤Ë¤è¤Ã¤Æ°Û¤Ê¤ë¡£°Ê
1235       ²¼¤ÎÀâÌÀ¤Ï¡¢ÆâÉôÆþÎϥ᥽¥Ã¥ÉÍѤÎÆþÎϥɥ饤¥Ð¤ËÂФ¹¤ë¤â¤Î¤Ç¤¢¤ë¡£
1236       ¤³¤ì¤é¤Ï´Ø¿ô <im>->driver.filter () ¤Ë¤è¤Ã¤ÆÀßÄꤵ¤ì¤ë¡£  */
1237
1238   /***en Pointer to extra information that <im>->driver.create_ic ()
1239       setups.  It is used to record the internal state of the input
1240       context.  */
1241   /***ja <im>->driver.create_ic () ¤¬ÀßÄꤹ¤ëÄɲþðÊó¤Ø¤Î¥Ý¥¤¥ó¥¿¡£Æþ
1242       ÎÏ¥³¥ó¥Æ¥¯¥¹¥È¤ÎÆâÉô¾õÂÖ¤òµ­Ï¿¤¹¤ë¤¿¤á¤ËÍѤ¤¤é¤ì¤ë¡£ */
1243   void *info;
1244
1245   /***en M-text describing the current status of the input
1246       context.  */
1247   /***ja ÆþÎÏ¥³¥ó¥Æ¥¯¥¹¥È¤Î¸½ºß¤Î¾õ¶·¤òɽ¤¹ M-text  */
1248   MText *status;
1249
1250   /***en The function <im>->driver.filter () sets the value to 1 when
1251       it changes <status>.  */
1252   /***ja ´Ø¿ô <im>->driver.filter () ¤Ï¡¢<status> ¤òÊѤ¨¤¿»þ¤³¤ÎÃͤò 1 
1253       ¤ËÀßÄꤹ¤ë¡£  */
1254   int status_changed;
1255
1256   /***en M-text containing the current preedit text.  The function
1257       <im>->driver.filter () sets the value.  */
1258   /***ja ¸½ºß¤Î preedit ¥Æ¥­¥¹¥È¤ò´Þ¤à M-text¡£´Ø¿ô 
1259       <im>->driver.filter () ¤¬¤³¤ÎÃͤòÀßÄꤹ¤ë¡£  */ 
1260   MText *preedit;
1261
1262   /***en The function <im>->driver.filter () sets the value to 1 when
1263       it changes <preedit>.  */
1264   /***ja ´Ø¿ô <im>->driver.filter () ¤Ï¡¢<preedit> ¤òÊѤ¨¤¿»þ¤³¤ÎÃͤò 
1265       1 ¤ËÀßÄꤹ¤ë¡£  */
1266   int preedit_changed;
1267
1268   /***en Cursor position of <preedit>.  */
1269   /***ja <preedit>¤Î¥«¡¼¥½¥ë°ÌÃÖ  */
1270   int cursor_pos;
1271
1272   int cursor_pos_changed;
1273
1274   /***en Array of the current candidate texts.  */
1275   /***ja ¸½ºß¤Î¥Æ¥­¥¹¥È¸õÊä¤ÎÇÛÎó.  */
1276   MPlist *candidate_list;
1277   int candidate_index;
1278   int candidate_from, candidate_to;
1279   int candidate_show;
1280
1281   /***en The function <im>->driver.filter () sets the value to 1 when
1282       it changes one of the above members.  */
1283   /***ja ´Ø¿ô <im>->driver.filter () ¤Ï¡¢¾åµ­¤Î¥á¥ó¥Ð¤Î£±¤Ä¤òÊѤ¨¤¿»þ
1284       ¤³¤ÎÃͤò 1 ¤ËÀßÄꤹ¤ë¡£  */
1285   int candidates_changed;
1286
1287   MPlist *plist;
1288 };
1289
1290 /*=*/
1291
1292 extern MInputMethod *minput_open_im (MSymbol language, MSymbol name,
1293                                      void *arg);
1294
1295 /*=*/
1296
1297 extern void minput_close_im (MInputMethod *im);
1298
1299 extern MInputContext *minput_create_ic (MInputMethod *im, void *arg);
1300
1301 extern void minput_destroy_ic (MInputContext *ic);
1302
1303 extern int minput_filter (MInputContext *ic, MSymbol key, void *arg);
1304
1305 extern int minput_lookup (MInputContext *ic, MSymbol key, void *arg,
1306                           MText *mt);
1307
1308 extern void minput_set_spot (MInputContext *ic, int x, int y,
1309                              int ascent, int descent, int fontsize,
1310                              MText *mt, int pos);
1311
1312 extern void minput_toggle (MInputContext *ic);
1313
1314 extern void minput_reset_ic (MInputContext *ic);
1315 /*=*/
1316 /***     @} */
1317
1318 extern MInputMethod *mdebug_dump_im (MInputMethod *im, int indent);
1319
1320
1321 #ifdef __cplusplus
1322 }
1323 #endif
1324
1325 #endif /* _M17N_H_ */
1326
1327 /*
1328   Local Variables:
1329   coding: euc-japan
1330   End:
1331 */