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