*** empty log message ***
[m17n/m17n-lib.git] / src / m17n-core.h
1 /* m17n-core.h -- header file for the CORE API of the m17n library.
2    Copyright (C) 2003, 2004
3      National Institute of Advanced Industrial Science and Technology (AIST)
4      Registration Number H15PRO112
5
6    This file is part of the m17n library.
7
8    The m17n library is free software; you can redistribute it and/or
9    modify it under the terms of the GNU Lesser General Public License
10    as published by the Free Software Foundation; either version 2.1 of
11    the License, or (at your option) any later version.
12
13    The m17n library is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16    Lesser General Public License for more details.
17
18    You should have received a copy of the GNU Lesser General Public
19    License along with the m17n library; if not, write to the Free
20    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
21    02111-1307, USA.  */
22
23 #ifndef _M17N_CORE_H_
24 #define _M17N_CORE_H_
25
26 #ifdef __cplusplus
27 extern "C"
28 {
29 #endif
30
31 /*
32  * Header file for m17n library.
33  */
34
35 /* (C1) Introduction */
36
37 /***en @defgroup m17nIntro Introduction  */
38 /***ja @defgroup m17nIntro ¤Ï¤¸¤á¤Ë  */
39 /*=*/
40
41 #if !defined (FOR_DOXYGEN) || defined (DOXYGEN_INTERNAL_MODULE)
42
43 #define M17NLIB_MAJOR_VERSION 1
44 #define M17NLIB_MINOR_VERSION 2
45 #define M17NLIB_PATCH_LEVEL 0
46 #define M17NLIB_VERSION_NAME "1.2.0"
47
48 extern void m17n_init_core (void);
49 #define M17N_INIT() m17n_init_core ()
50 extern void m17n_fini_core (void);
51 #define M17N_FINI() m17n_fini_core ()
52
53 #endif
54
55 /*=*/
56
57 /*** @ingroup m17nIntro */
58 /***en
59     @brief Enumeration for the status of the m17n library.
60
61     The enum #M17NStatus is used as a return value of the function
62     m17n_status ().  */
63
64 /***ja
65     @brief  m17n ¥é¥¤¥Ö¥é¥ê¤Î¾õÂÖ¤ò¼¨¤¹Îóµó·¿.
66
67     Îóµó·¿ #M17NStatus ¤Ï´Ø¿ô m17n_status () ¤ÎÌá¤êÃͤȤ·¤ÆÍѤ¤¤é¤ì¤ë¡£ */
68
69 enum M17NStatus
70   {
71     /***en No modules is initialized, and all modules are finalized.  */
72     M17N_NOT_INITIALIZED, 
73     /***en Only the modules in CORE API are initialized.  */
74     M17N_CORE_INITIALIZED,
75     /***en Only the modules in CORE and SHELL APIs are initialized.  */
76     M17N_SHELL_INITIALIZED, 
77     /***en All modules are initialized.  */
78     M17N_GUI_INITIALIZED
79   };
80
81 /*=*/
82
83 extern enum M17NStatus m17n_status (void);
84
85 /***en @defgroup m17nCore CORE API  */
86 /***ja @defgroup m17nCore ¥³¥¢ API */
87 /*=*/
88 /*** @ingroup m17nCore */
89 /***en @defgroup m17nObject Managed Object */
90 /***ja @defgroup m17nObject ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È */
91 /*=*/
92
93 /*** @ingroup m17nObject  */
94 /***en
95     @brief The first member of a managed object.
96
97     When an application program defines a new structure for managed
98     objects, its first member must be of the type @c struct
99     #M17NObjectHead.  Its contents are used by the m17n library, and
100     application programs should never touch them.  */
101 /***ja
102     @brief ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤ÎºÇ½é¤Î¥á¥ó¥Ð.
103
104     ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤¬¿·¤·¤¤¹½Â¤ÂΤò´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤È¤·¤ÆÄêµÁ¤¹¤ëºÝ¤Ë¤Ï¡¢ºÇ½é¤Î¥á¥ó¥Ð¤Ï 
105     @c #M17NObjectHead ¹½Â¤Âη¿¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
106     @c #M17NObjectHead ¤ÎÆâÍƤϠm17n 
107     ¥é¥¤¥Ö¥é¥ê¤¬»ÈÍѤ¹¤ë¤Î¤Ç¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤Ï¿¨¤ì¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£    */
108
109 typedef struct
110 {
111   void *filler[2];
112 } M17NObjectHead;
113
114 /*=*/
115
116 /* Return a newly allocated managed object.  */
117 extern void *m17n_object (int size, void (*freer) (void *));
118
119 /* Increment the reference count of managed object OBJECT.  */
120 extern int m17n_object_ref (void *object);
121
122 /* Decrement the reference count of managed object OBJECT.  */
123 extern int m17n_object_unref (void *object);
124
125 /*=*/
126
127 /* (C2) Symbol handling */
128
129 /*** @ingroup m17nCore */
130 /***en @defgroup m17nSymbol Symbol  */
131 /***ja @defgroup m17nSymbol ¥·¥ó¥Ü¥ë */
132 /*=*/
133
134 /***
135     @ingroup m17nSymbol */
136 /***en
137     @brief Type of symbols.
138
139     The type #MSymbol is for a @e symbol object.  Its internal
140     structure is concealed from application programs.  */
141
142 /***ja
143     @brief ¥·¥ó¥Ü¥ë¤Î·¿Àë¸À.
144
145     #MSymbol ¤Ï @e ¥·¥ó¥Ü¥ë (symbol) ¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ç¤¢¤ë¡£
146     ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£  */
147
148 typedef struct MSymbolStruct *MSymbol;
149
150 /*=*/
151
152 /* Predefined symbols. */ 
153 extern MSymbol Mnil;
154 extern MSymbol Mt;
155 extern MSymbol Mstring;
156 extern MSymbol Msymbol;
157 extern MSymbol Mtext;
158
159 /* Return a symbol of name NAME.  */
160 extern MSymbol msymbol (const char *name);
161
162 /* Return a managing key of name NAME.  */
163 extern MSymbol msymbol_as_managing_key (const char *name);
164
165 /* Return a symbol of name NAME if it already exists.  */
166 extern MSymbol msymbol_exist (const char *name);
167
168 /* Return the name of SYMBOL.  */
169 extern char *msymbol_name (MSymbol symbol);
170
171 /* Give SYMBOL KEY property with value VALUE.  */
172 extern int msymbol_put (MSymbol symbol, MSymbol key, void *val);
173
174 /*** Return KEY property value of SYMBOL.  */
175 extern void *msymbol_get (MSymbol symbol, MSymbol key);
176
177 /* 
178  *  (2-1) Property List
179  */
180 /*=*/
181 /*** @ingroup m17nCore */
182 /***en @defgroup m17nPlist Property List */
183 /***ja @defgroup m17nPlist ¥×¥í¥Ñ¥Æ¥£¥ê¥¹¥È */
184 /*=*/
185
186 /***
187     @ingroup m17nPlist */ 
188 /***en
189     @brief Type of property list objects.
190
191     The type #MPlist is for a @e property @e list object.  Its internal
192     structure is concealed from application programs.  */
193
194 /***ja
195     @brief ¥×¥í¥Ñ¥Æ¥£¥ê¥¹¥È¡¦¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿Àë¸À.
196
197     #MPlist ¤Ï @e ¥×¥í¥Ñ¥Æ¥£¥ê¥¹¥È (Property list) ¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ç¤¢¤ë¡£
198     ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£  */
199
200 typedef struct MPlist MPlist;
201
202 /*=*/
203
204 extern MSymbol Mplist, Minteger;
205
206 extern MPlist *mplist ();
207
208 extern MPlist *mplist_copy (MPlist *plist);
209
210 extern MPlist *mplist_add (MPlist *plist, MSymbol key, void *val);
211
212 extern MPlist *mplist_push (MPlist *plist, MSymbol key, void *val);
213
214 extern void *mplist_pop (MPlist *plist);
215
216 extern MPlist *mplist_put (MPlist *plist, MSymbol key, void *val);
217
218 extern void *mplist_get (MPlist *plist, MSymbol key);
219
220 extern MPlist *mplist_find_by_key (MPlist *plist, MSymbol key);
221
222 extern MPlist *mplist_find_by_value (MPlist *plist, void *val);
223
224 extern MPlist *mplist_next (MPlist *plist);
225
226 extern MPlist *mplist_set (MPlist *plist, MSymbol key, void *val);
227
228 extern int mplist_length (MPlist *plist);
229
230 extern MSymbol mplist_key (MPlist *plist);
231
232 extern void *mplist_value (MPlist *plist);
233
234 /* (S1) Characters */
235
236 /*=*/
237 /*** @ingroup m17nCore */
238 /***en @defgroup m17nCharacter Character */
239 /***ja @defgroup m17nCharacter Ê¸»ú */
240 /*=*/
241
242 #if !defined (FOR_DOXYGEN) || defined (DOXYGEN_INTERNAL_MODULE)
243 #define MCHAR_MAX 0x3FFFFF
244 /*#define MCHAR_MAX 0x7FFFFFFF*/
245 #endif
246
247 extern MSymbol Mscript;
248 extern MSymbol Mname;
249 extern MSymbol Mcategory;
250 extern MSymbol Mcombining_class;
251 extern MSymbol Mbidi_category;
252 extern MSymbol Msimple_case_folding;
253 extern MSymbol Mcomplicated_case_folding;
254
255 extern MSymbol mchar_define_property (const char *name, MSymbol type);
256
257 extern void *mchar_get_prop (int c, MSymbol key);
258
259 extern int mchar_put_prop (int c, MSymbol key, void *val);
260
261 /* (C3) Handling chartable */
262
263 /*** @ingroup m17nCore */
264 /***en @defgroup m17nChartable Chartable */
265 /***ja @defgroup m17nChartable Ê¸»ú¥Æ¡¼¥Ö¥ë */
266 /*=*/
267 extern MSymbol Mchar_table;
268
269 /***
270     @ingroup m17nChartable */
271 /***en
272     @brief Type of chartables.
273
274     The type #MCharTable is for a @e chartable objects.  Its
275     internal structure is concealed from application programs.  */
276
277 /***ja
278     @brief Ê¸»ú¥Æ¡¼¥Ö¥ë¤Î·¿Àë¸À.
279
280     #MCharTable ¤Ï @e Ê¸»ú¥Æ¡¼¥Ö¥ë (chartable) ¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ç¤¢¤ë¡£
281     ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£  */
282
283 typedef struct MCharTable MCharTable;
284 /*=*/
285
286 extern MCharTable *mchartable (MSymbol key, void *default_value);
287
288 extern void *mchartable_lookup (MCharTable *table, int c);
289
290 extern int mchartable_set (MCharTable *table, int c, void *val);
291
292 extern int mchartable_set_range (MCharTable *table, int from, int to,
293                                  void *val);
294
295 extern int mchartable_map (MCharTable *table, void *ignore,
296                            void (*func) (int, int, void *, void *), 
297                            void *func_arg);
298
299 extern void mchartable_range (MCharTable *table, int *from, int *to);
300
301 /*
302  *  (5) Handling M-text.
303  *      "M" of M-text stands for:
304  *      o Multilingual
305  *      o Metamorphic
306  *      o More than string
307  */
308
309 /*** @ingroup m17nCore */
310 /***en @defgroup m17nMtext M-text */
311 /***ja @defgroup m17nMtext M-text */
312 /*=*/
313
314 /*
315  * (5-1) M-text basics
316  */
317 /*=*/
318 /*** @ingroup m17nMtext */
319 /***en
320     @brief Type of @e M-texts.
321
322     The type #MText is for an @e M-text object.  Its internal
323     structure is concealed from application programs.  */
324
325 /***ja
326     @brief @e MText ¤Î·¿Àë¸À.
327
328     #Mtext ¤Ï @e M-text ¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ç¤¢¤ë¡£
329     ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£ 
330
331     @latexonly \IPAlabel{MText} @endlatexonly
332     @latexonly \IPAlabel{MText->MPlist} @endlatexonly  */
333
334 typedef struct MText MText;
335
336 /*=*/
337
338 /*** @ingroup m17nMtext */
339 /***en
340     @brief Enumeration for specifying the format of an M-text.
341
342     The enum #MTextFormat is used as an argument of the
343     mtext_from_data () function to specify the format of data from
344     which an M-text is created.  */
345
346 /***ja
347     @brief M-text ¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤ò»ØÄꤹ¤ëÎóµó·¿.
348
349     Îóµó·¿ #MTextFormat ¤Ï´Ø¿ô
350     mtext_from_data () ¤Î°ú¿ô¤È¤·¤ÆÍѤ¤¤é¤ì¡¢
351     M-text ¤òÀ¸À®¤¹¤ë¸µ¤È¤Ê¤ë¥Ç¡¼¥¿¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤ò»ØÄꤹ¤ë¡£  */
352
353 enum MTextFormat
354   {
355     MTEXT_FORMAT_US_ASCII,
356     MTEXT_FORMAT_UTF_8,
357     MTEXT_FORMAT_UTF_16LE,
358     MTEXT_FORMAT_UTF_16BE,
359     MTEXT_FORMAT_UTF_32LE,
360     MTEXT_FORMAT_UTF_32BE,
361     MTEXT_FORMAT_MAX
362   };
363 /*=*/
364
365 extern MText *mtext ();
366
367 /*=*/
368
369 /***en @name Variables: Default Endian of UTF-16 and UTF-32 */
370 /***ja @name ÊÑ¿ô: UTF-16 ¤È UTF-32 ¤Î¥Ç¥Õ¥©¥ë¥È¤Î¥¨¥ó¥Ç¥£¥¢¥ó */
371 /*** @{ */
372 /*=*/
373
374 /*** @ingroup m17nMtext */
375 /***en
376     @brief Variable of value MTEXT_FORMAT_UTF_16LE or MTEXT_FORMAT_UTF_16BE.
377
378     The global variable #MTEXT_FORMAT_UTF_16 is initialized to
379     #MTEXT_FORMAT_UTF_16LE on a "Little Endian" system (storing words
380     with the least significant byte first), and to
381     #MTEXT_FORMAT_UTF_16BE on a "Big Endian" system (storing words
382     with the most significant byte first).  */
383
384 /***ja
385     @brief Ãͤ¬ MTEXT_FORMAT_UTF_16LE ¤« MTEXT_FORMAT_UTF_16BE ¤Ç¤¢¤ëÊÑ¿ô
386
387     Âç°èÊÑ¿ô #MTEXT_FORMAT_UTF_16 ¤Ï¥ê¥È¥ë¡¦¥¨¥ó¥Ç¥£¥¢¥ó¡¦¥·¥¹¥Æ¥à
388     ¡Ê¥ï¡¼¥É¤ò LSB (Least Significant Byte) ¤òÀè¤Ë¤·¤Æ³ÊǼ¡Ë¾å¤Ç¤Ï
389     #MTEXT_FORMAT_UTF_16LE ¤Ë½é´ü²½¤µ¤ì¡¢¥Ó¥Ã¥°¡¦¥¨¥ó¥Ç¥£¥¢¥ó¡¦¥·¥¹¥Æ¥à
390     ¡Ê¥ï¡¼¥É¤ò MSB (Most Significant Byte) ¤òÀè¤Ë¤·¤Æ³ÊǼ¡Ë¾å¤Ç¤Ï
391     #MTEXT_FORMAT_UTF_16BE ¤Ë½é´ü²½¤µ¤ì¤ë¡£  */
392
393 /***
394     @seealso
395     mtext_from_data ()  */
396
397 extern const int MTEXT_FORMAT_UTF_16;
398 /*=*/
399
400 /*** @ingroup m17nMtext */
401 /***en
402     @brief Variable of value MTEXT_FORMAT_UTF_32LE or MTEXT_FORMAT_UTF_32BE.
403
404     The global variable #MTEXT_FORMAT_UTF_32 is initialized to
405     #MTEXT_FORMAT_UTF_32LE on a "Little Endian" system (storing words
406     with the least significant byte first), and to
407     #MTEXT_FORMAT_UTF_32BE on a "Big Endian" system (storing
408     words with the most significant byte first).  */
409
410 /***ja
411     @brief Ãͤ¬ MTEXT_FORMAT_UTF_32LE ¤« MTEXT_FORMAT_UTF_32BE ¤Ç¤¢¤ëÊÑ¿ô
412
413     Âç°èÊÑ¿ô #MTEXT_FORMAT_UTF_32 ¤Ï¥ê¥È¥ë¡¦¥¨¥ó¥Ç¥£¥¢¥ó¡¦¥·¥¹¥Æ¥à
414     ¡Ê¥ï¡¼¥É¤ò LSB (Least Significant Byte) ¤òÀè¤Ë¤·¤Æ³ÊǼ¡Ë¾å¤Ç¤Ï
415     #MTEXT_FORMAT_UTF_32LE ¤Ë½é´ü²½¤µ¤ì¡¢¥Ó¥Ã¥°¡¦¥¨¥ó¥Ç¥£¥¢¥ó¡¦¥·¥¹¥Æ¥à
416     ¡Ê¥ï¡¼¥É¤ò MSB (Most Significant Byte) ¤òÀè¤Ë¤·¤Æ³ÊǼ¡Ë¾å¤Ç¤Ï
417     #MTEXT_FORMAT_UTF_32BE ¤Ë½é´ü²½¤µ¤ì¤ë¡£  */
418
419 /***
420     @seealso
421     mtext_from_data ()  */
422
423 extern const int MTEXT_FORMAT_UTF_32;
424
425 /*=*/
426 /*** @} */
427 /*=*/
428
429 extern MText *mtext_from_data (const void *data, int nitems,
430                                enum MTextFormat format);
431
432 /*=*/
433 /*** @} */
434
435 /*
436  *  (5-2) Functions to manipulate M-texts.  They correspond to string
437  *   manipulating functions in libc.
438  *   In the following functions, mtext_XXX() corresponds to strXXX().
439  */
440
441 extern int mtext_len (MText *mt);
442
443 extern int mtext_ref_char (MText *mt, int pos);
444
445 extern int mtext_set_char (MText *mt, int pos, int c);
446
447 extern MText *mtext_copy (MText *mt1, int pos, MText *mt2, int from, int to);
448
449 extern int mtext_compare (MText *mt1, int from1, int to1,
450                           MText *mt2, int from2, int to2);
451
452 extern int mtext_case_compare (MText *mt1, int from1, int to1,
453                                MText *mt2, int from2, int to2);
454
455 extern int mtext_character (MText *mt, int from, int to, int c);
456
457 extern int mtext_del (MText *mt, int from, int to);
458
459 extern int mtext_ins (MText *mt1, int pos, MText *mt2);
460
461 extern int mtext_ins_char (MText *mt, int pos, int c, int n);
462
463 extern MText *mtext_cat_char (MText *mt, int c);
464
465 extern MText *mtext_duplicate (MText *mt, int from, int to);
466
467 extern MText *mtext_dup (MText *mt);
468
469 extern MText *mtext_cat (MText *mt1, MText *mt2);
470
471 extern MText *mtext_ncat (MText *mt1, MText *mt2, int n);
472
473 extern MText *mtext_cpy (MText *mt1, MText *mt2);
474
475 extern MText *mtext_ncpy (MText *mt1, MText *mt2, int n);
476
477 extern int mtext_chr (MText *mt, int c);
478
479 extern int mtext_rchr (MText *mt, int c);
480
481 extern int mtext_cmp (MText *mt1, MText *mt2);
482
483 extern int mtext_ncmp (MText *mt1, MText *mt2, int n);
484
485 extern int mtext_spn (MText *mt1, MText *mt2);
486
487 extern int mtext_cspn (MText *mt1, MText *mt2);
488
489 extern int mtext_pbrk (MText *mt1, MText *mt2);
490
491 extern int mtext_text (MText *mt1, int pos, MText *mt2);
492
493 extern int mtext_search (MText *mt1, int from, int to, MText *mt2);
494
495 extern MText *mtext_tok (MText *mt, MText *delim, int *pos);
496
497 extern int mtext_casecmp (MText *mt1, MText *mt2);
498
499 extern int mtext_ncasecmp (MText *mt1, MText *mt2, int n);
500
501 /*** @ingroup m17nPlist */
502 extern MPlist *mplist_deserialize (MText *mt);
503
504 /*
505  * (5-3) Text properties
506  */
507 /*=*/
508 /*** @ingroup m17nCore */
509 /***en @defgroup m17nTextProperty Text Property */
510 /***ja @defgroup m17nTextProperty ¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£ */
511 /*=*/
512 /*** @ingroup m17nTextProperty */
513 /***en
514     @brief Flag bits to control text property.
515
516     The mtext_property () funciton accepts logical OR of these flag
517     bits as an argument.  They control the behaviour of the created
518     text property as described in the documentation of each flag
519     bit.  */
520
521 /***ja
522     @brief ¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤òÀ©¸æ¤¹¤ë¥Õ¥é¥°¥Ó¥Ã¥È.
523
524     ´Ø¿ô mtext_property () ¤Ï°Ê²¼¤Î¥Õ¥é¥°¥Ó¥Ã¥È¤ÎÏÀÍý
525     OR ¤ò°ú¿ô¤È¤·¤Æ¤È¤ë¤³¤È¤¬¤Ç¤­¤ë¡£
526     ¥Õ¥é¥°¥Ó¥Ã¥È¤ÏÀ¸À®¤µ¤ì¤¿¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Î¿¶Éñ¤¤¤òÀ©¸æ¤¹¤ë¡£
527     ¾ÜºÙ¤Ï³Æ¥Õ¥é¥°¥Ó¥Ã¥È¤ÎÀâÌÀ¤ò»²¾È¡£*/
528
529 enum MTextPropertyControl
530   {
531     /***en If this flag bit is on, an M-text inserted at the start
532         position or at the middle of the text property inherits the
533         text property.  */
534     /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Î»Ï¤Þ¤ëÅÀ¤¢¤ë¤¤¤ÏÃæ´Ö¤ËÁÞÆþ¤µ¤ì¤¿
535         M-text ¤Ï¤³¤Î¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤ò·Ñ¾µ¤¹¤ë¡£
536         */
537     MTEXTPROP_FRONT_STICKY = 0x01,
538
539     /***en If this flag bit is on, an M-text inserted at the end
540         position or at the middle of the text property inherits the
541         text property.  */
542     /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Î½ª¤ï¤ëÅÀ¤¢¤ë¤¤¤ÏÃæ´Ö¤ËÁÞÆþ¤µ¤ì¤¿
543         M-text ¤Ï¤³¤Î¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤ò·Ñ¾µ¤¹¤ë¡£
544         */
545     MTEXTPROP_REAR_STICKY = 0x02,
546
547     /***en If this flag bit is on, the text property is removed if a
548         text in its region is modified.  */
549     /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤ÎÈÏ°ÏÆâ¤Î¥Æ¥­¥¹¥È¤¬Êѹ¹¤µ¤ì¤¿¾ì¹ç¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Ï¼è¤ê½ü¤«¤ì¤ë¡£  */
550     MTEXTPROP_VOLATILE_WEAK = 0x04,
551
552     /***en If this flag bit is on, the text property is removed if a
553         text or the other text property in its region is modified.  */
554     /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤ÎÈÏ°ÏÆâ¤Î¥Æ¥­¥¹¥È¤¢¤ë¤¤¤ÏÊ̤Υƥ­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤¬Êѹ¹¤µ¤ì¤¿¾ì¹ç¤³¤Î¥Æ¥­
555         ¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Ï¼è¤ê½ü¤«¤ì¤ë¡£*/
556     MTEXTPROP_VOLATILE_STRONG = 0x08,
557
558     /***en If this flag bit is on, the text property is not
559         automatically merged with the others.  */
560     /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Ï¾¤Î¥×¥í¥Ñ¥Æ¥£¤È¼«Æ°Åª¤Ë¤Ï¥Þ¡¼¥¸¤µ¤ì¤Ê¤¤¡£ */
561     MTEXTPROP_NO_MERGE = 0x10,
562
563     MTEXTPROP_CONTROL_MAX = 0x1F
564   };
565
566 /*=*/
567 extern MSymbol Mtext_prop_serializer;
568 extern MSymbol Mtext_prop_deserializer;
569
570
571 /*** @ingroup m17nTextProperty */
572 /***en
573     @brief Type of serializer functions.
574
575     This is the type of serializer functions.  If the key of a symbol
576     property is #Mtext_prop_serializer, the value must be of this
577     type.
578
579     @seealso
580     mtext_serialize (), #Mtext_prop_serializer
581 */
582 /***ja
583     @brief ¥·¥ê¥¢¥é¥¤¥¶´Ø¿ô¤Î·¿Àë¸À.
584
585     ¥·¥ê¥¢¥é¥¤¥¶´Ø¿ô¤Î·¿¤Ç¤¢¤ë¡£ ¤¢¤ë¥·¥ó¥Ü¥ë¤Î¥×¥í¥Ñ¥Æ¥£¤Î¥­¡¼¤¬ @c
586     #Mtext_prop_serializer ¤Ç¤¢¤ë¤È¤­¡¢ ÃͤϤ³¤Î·¿¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
587
588     @seealso
589     mtext_serialize (), #Mtext_prop_serializer
590 */
591
592 typedef MPlist *(*MTextPropSerializeFunc) (void *val);
593
594 /*** @ingroup m17nTextProperty */
595 /***en
596     @brief Type of deserializer functions.
597
598     This is the type of deserializer functions.  If the key of a
599     symbol property is #Mtext_prop_deserializer, the value must be of
600     this type.
601
602     @seealso
603     mtext_deserialize (), #Mtext_prop_deserializer
604 */
605 /***ja
606     @brief ¥Ç¥·¥ê¥¢¥é¥¤¥¶´Ø¿ô¤Î·¿Àë¸À.
607
608     ¥Ç¥·¥ê¥¢¥é¥¤¥¶´Ø¿ô¤Î·¿¤Ç¤¢¤ë¡£ ¤¢¤ë¥·¥ó¥Ü¥ë¤Î¥×¥í¥Ñ¥Æ¥£¤Î¥­¡¼¤¬ @c
609     #Msymbol_prop_deserializer ¤Ç¤¢¤ë¤È¤­¡¢ ÃͤϤ³¤Î·¿¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
610
611     @seealso
612     Mtext_prop_deserialize (), Mtext_prop_deserializer
613 */
614 typedef void *(*MTextPropDeserializeFunc) (MPlist *plist);
615
616 extern void *mtext_get_prop (MText *mt, int pos, MSymbol key);
617
618 extern int mtext_get_prop_values (MText *mt, int pos, MSymbol key,
619                                   void **values, int num);
620
621 extern int mtext_get_prop_keys (MText *mt, int pos, MSymbol **keys);
622
623 extern int mtext_put_prop (MText *mt, int from, int to,
624                            MSymbol key, void *val);
625
626 extern int mtext_put_prop_values (MText *mt, int from, int to,
627                                   MSymbol key, void **values, int num);
628
629 extern int mtext_push_prop (MText *mt, int from, int to,
630                             MSymbol key, void *val);
631
632 extern int mtext_pop_prop (MText *mt, int from, int to,
633                            MSymbol key);
634
635 extern int mtext_prop_range (MText *mt, MSymbol key, int pos,
636                              int *from, int *to, int deeper);
637
638 /*=*/
639 /***
640     @ingroup m17nTextProperty */
641 /***en
642     @brief Type of text properties.
643
644     The type #MTextProperty is for a @e text @e property objects.  Its
645     internal structure is concealed from application programs.  */
646 /***ja
647     @brief @c ¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Î·¿Àë¸À.
648
649     #MTextProperty ¤Ï @e ¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£ ¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ç¤¢¤ë¡£
650     ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£  */
651
652 typedef struct MTextProperty MTextProperty;
653
654 /*=*/
655
656 extern MTextProperty *mtext_property (MSymbol key, void *val,
657                                       int control_bits);
658
659 extern MText *mtext_property_mtext (MTextProperty *prop);
660
661 extern MSymbol mtext_property_key (MTextProperty *prop);
662
663 extern void *mtext_property_value (MTextProperty *prop);
664
665 extern int mtext_property_start (MTextProperty *prop);
666
667 extern int mtext_property_end (MTextProperty *prop);
668
669 extern MTextProperty *mtext_get_property (MText *mt, int pos, MSymbol key);
670
671 extern int mtext_get_properties (MText *mt, int pos, MSymbol key,
672                                  MTextProperty **props, int num);
673
674 extern int mtext_attach_property (MText *mt, int from, int to,
675                                   MTextProperty *prop);
676
677 extern int mtext_detach_property (MTextProperty *prop);
678
679 extern int mtext_push_property (MText *mt, int from, int to,
680                                 MTextProperty *prop);
681
682 extern MText *mtext_serialize (MText *mt, int from, int to,
683                                MPlist *property_list);
684
685 extern MText *mtext_deserialize (MText *mt);
686
687 #ifdef __cplusplus
688 }
689 #endif
690
691 #endif /* _M17N_CORE_H_ */
692
693 /*
694   Local Variables:
695   coding: euc-japan
696   End:
697 */