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