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