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
6 This file is part of the m17n library.
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.
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.
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
32 * Header file for m17n library.
35 /* (C1) Introduction */
37 /***en @defgroup m17nIntro Introduction */
38 /***ja @defgroup m17nIntro ¤Ï¤¸¤á¤Ë */
41 #define M17NLIB_MAJOR_VERSION 1
42 #define M17NLIB_MINOR_VERSION 1
43 #define M17NLIB_PATCH_LEVEL 0
44 #define M17NLIB_VERSION_NAME "1.1.0"
46 extern void m17n_init_core (void);
47 #define M17N_INIT() m17n_init_core ()
48 extern void m17n_fini_core (void);
49 #define M17N_FINI() m17n_fini_core ()
53 /*** @addtogroup m17nIntro */
57 @brief Enumeration for the status of the m17n library.
59 The enum #MTextFormat is used as a return value of the function
63 @brief m17n ¥é¥¤¥Ö¥é¥ê¤Î¾õÂÖ¤ò¼¨¤¹Îóµó·¿.
65 Îóµó·¿ #MTextFormat ¤Ï´Ø¿ô m17n_status () ¤ÎÌá¤êÃͤȤ·¤ÆÍѤ¤¤é¤ì¤ë¡£ */
69 /***en No modules is initialized, and all modules are finalized. */
71 /***en Only the modules in CORE API are initialized. */
72 M17N_CORE_INITIALIZED,
73 /***en Only the modules in CORE and SHELL APIs are initialized. */
74 M17N_SHELL_INITIALIZED,
75 /***en All modules are initialized. */
82 extern enum M17NStatus m17n_status (void);
84 /***en @defgroup m17nCore CORE API */
85 /***ja @defgroup m17nCore ¥³¥¢ API */
87 /*** @ingroup m17nCore */
88 /***en @defgroup m17nObject Managed Object */
89 /***ja @defgroup m17nObject ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È */
92 /*** @ingroup m17nObject */
94 @brief The first member of a managed object.
96 When an application program defines a new structure for managed
97 objects, its first member must be of the type @c struct
98 #M17NObjectHead. Its contents are used by the m17n library, and
99 application programs should never touch them. */
101 @brief ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤ÎºÇ½é¤Î¥á¥ó¥Ð.
103 ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤¬¿·¤·¤¤¹½Â¤ÂΤò´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤È¤·¤Æ
104 ÄêµÁ¤¹¤ëºÝ¤Ë¤Ï¡¢ºÇ½é¤Î¥á¥ó¥Ð¤Ï @c #M17NObjectHead ¹½Â¤Âη¿¤Ç¤Ê¤¯
105 ¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£@c #M17NObjectHead ¤ÎÆâÍÆ¤Ï m17n ¥é¥¤¥Ö¥é¥ê¤¬»ÈÍѤ¹
106 ¤ë¤Î¤Ç¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤Ï¿¨¤ì¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
116 /* Return a newly allocated managed object. */
117 extern void *m17n_object_setup (int size, void (*freer) (void *));
119 /* Increment the reference count of managed object OBJECT. */
120 extern int m17n_object_ref (void *object);
122 /* Decrement the reference count of managed object OBJECT. */
123 extern int m17n_object_unref (void *object);
127 /* (C2) Symbol handling */
129 /*** @ingroup m17nCore */
130 /***en @defgroup m17nSymbol Symbol */
131 /***ja @defgroup m17nSymbol ¥·¥ó¥Ü¥ë */
135 @ingroup m17nSymbol */
137 @brief Type of symbols.
139 The type #MSymbol is for a @e symbol object. Its internal
140 structure is concealed from application programs. */
143 @brief ¥·¥ó¥Ü¥ë¤Î·¿Àë¸À.
145 #MSymbol ¤Ï¥·¥ó¥Ü¥ë¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ç¤¢¤ë¡£ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç
146 ¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£ */
148 typedef struct MSymbolStruct *MSymbol;
152 /* Predefined symbols. */
155 extern MSymbol Mstring;
156 extern MSymbol Msymbol;
157 extern MSymbol Mtext;
159 /* Return a symbol of name NAME. */
160 extern MSymbol msymbol (const char *name);
162 /* Return a managing key of name NAME. */
163 extern MSymbol msymbol_as_managing_key (const char *name);
165 /* Return a symbol of name NAME if it already exists. */
166 extern MSymbol msymbol_exist (const char *name);
168 /* Return the name of SYMBOL. */
169 extern char *msymbol_name (MSymbol symbol);
171 /* Give SYMBOL KEY property with value VALUE. */
172 extern int msymbol_put (MSymbol symbol, MSymbol key, void *val);
174 /*** Return KEY property value of SYMBOL. */
175 extern void *msymbol_get (MSymbol symbol, MSymbol key);
178 * (2-1) Property List
181 /*** @ingroup m17nCore */
182 /***en @defgroup m17nPlist Property List */
183 /***ja @defgroup m17nPlist ¥×¥í¥Ñ¥Æ¥£¥ê¥¹¥È */
187 @ingroup m17nPlist */
189 @brief Type of property list objects.
191 The type #MPlist is for a @e property @e list object. Its internal
192 structure is concealed from application programs. */
195 @brief ¥×¥í¥Ñ¥Æ¥£¥ê¥¹¥È¡¦¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿Àë¸À.
197 #MPlist ¤Ï @e ¥×¥í¥Ñ¥Æ¥£¥ê¥¹¥È (Property list) ¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ç¤¢¤ë¡£
198 ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£ */
200 typedef struct MPlist MPlist;
204 extern MSymbol Mplist, Minteger;
206 extern MPlist *mplist ();
208 extern MPlist *mplist_copy (MPlist *plist);
210 extern MPlist *mplist_add (MPlist *plist, MSymbol key, void *val);
212 extern MPlist *mplist_push (MPlist *plist, MSymbol key, void *val);
214 extern void *mplist_pop (MPlist *plist);
216 extern MPlist *mplist_put (MPlist *plist, MSymbol key, void *val);
218 extern void *mplist_get (MPlist *plist, MSymbol key);
220 extern MPlist *mplist_find_by_key (MPlist *plist, MSymbol key);
222 extern MPlist *mplist_find_by_value (MPlist *plist, void *val);
224 extern MPlist *mplist_next (MPlist *plist);
226 extern MPlist *mplist_set (MPlist *plist, MSymbol key, void *val);
228 extern int mplist_length (MPlist *plist);
230 extern MSymbol mplist_key (MPlist *plist);
232 extern void *mplist_value (MPlist *plist);
234 /* (S1) Characters */
237 /*** @ingroup m17nCore */
238 /***en @defgroup m17nCharacter Character */
239 /***ja @defgroup m17nCharacter ʸ»ú */
242 #define MCHAR_MAX 0x3FFFFF
243 /*#define MCHAR_MAX 0x7FFFFFFF*/
245 extern MSymbol Mscript;
246 extern MSymbol Mname;
247 extern MSymbol Mcategory;
248 extern MSymbol Mcombining_class;
249 extern MSymbol Mbidi_category;
250 extern MSymbol Msimple_case_folding;
251 extern MSymbol Mcomplicated_case_folding;
253 extern MSymbol mchar_define_property (const char *name, MSymbol type);
255 extern void *mchar_get_prop (int c, MSymbol key);
257 extern int mchar_put_prop (int c, MSymbol key, void *val);
259 /* (C3) Handling chartable */
261 /*** @ingroup m17nCore */
262 /***en @defgroup m17nChartable Chartable */
263 /***ja @defgroup m17nChartable ʸ»ú¥Æ¡¼¥Ö¥ë */
265 extern MSymbol Mchar_table;
268 @ingroup m17nChartable */
270 @brief Type of chartables.
272 The type #MCharTable is for a @e chartable objects. Its
273 internal structure is concealed from application programs. */
276 @brief ʸ»ú¥Æ¡¼¥Ö¥ë¤Î·¿Àë¸À.
278 #MCharTable ¤Ï @e ʸ»ú¥Æ¡¼¥Ö¥ë (chartable) ¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ç¤¢¤ë¡£
279 ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£ */
281 typedef struct MCharTable MCharTable;
284 extern MCharTable *mchartable (MSymbol key, void *default_value);
286 extern void *mchartable_lookup (MCharTable *table, int c);
288 extern int mchartable_set (MCharTable *table, int c, void *val);
290 extern int mchartable_set_range (MCharTable *table, int from, int to,
293 extern int mchartable_map (MCharTable *table, void *ignore,
294 void (*func) (int from, int to,
295 void *val, void *arg),
298 extern void mchartable_range (MCharTable *table, int *from, int *to);
301 * (5) Handling M-text.
302 * "M" of M-text stands for:
308 /*** @ingroup m17nCore */
309 /***en @defgroup m17nMtext M-text */
310 /***ja @defgroup m17nMtext M-text */
314 * (5-1) M-text basics
317 /*** @ingroup m17nMtext */
319 @brief Type of @e M-texts.
321 The type #MText is for an @e M-text object. Its internal
322 structure is concealed from application programs. */
325 @brief @e MText ¤Î·¿Àë¸À.
327 #Mtext ¤Ï @e M-text ¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ç¤¢¤ë¡£
328 ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£
330 @latexonly \IPAlabel{MText} @endlatexonly
331 @latexonly \IPAlabel{MText->MPlist} @endlatexonly */
333 typedef struct MText MText;
337 extern MText *mtext ();
342 @brief Enumeration for specifying the format of an M-text.
344 The enum #MTextFormat is used as an argument of the
345 mtext_from_data () function to specify the format of data from
346 which an M-text is created. */
349 @brief M-text ¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤ò»ØÄꤹ¤ëÎóµó·¿.
351 Îóµó·¿ #MTextFormat ¤Ï
352 ´Ø¿ô mtext_from_data () ¤Î°ú¿ô¤È¤·¤ÆÍѤ¤¤é¤ì¡¢
353 M-text ¤òÀ¸À®¤¹¤ë¸µ¤È¤Ê¤ë¥Ç¡¼¥¿¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤ò»ØÄꤹ¤ë¡£ */
357 MTEXT_FORMAT_US_ASCII,
359 MTEXT_FORMAT_UTF_16LE,
360 MTEXT_FORMAT_UTF_16BE,
361 MTEXT_FORMAT_UTF_32LE,
362 MTEXT_FORMAT_UTF_32BE,
367 extern const enum MTextFormat MTEXT_FORMAT_UTF_16;
368 extern const enum MTextFormat MTEXT_FORMAT_UTF_32;
372 extern MText *mtext_from_data (const void *data, int nitems,
373 enum MTextFormat format);
379 * (5-2) Functions to manipulate M-texts. They correspond to string
380 * manipulating functions in libc.
381 * In the following functions, mtext_XXX() corresponds to strXXX().
384 extern int mtext_len (MText *mt);
386 extern int mtext_ref_char (MText *mt, int pos);
388 extern int mtext_set_char (MText *mt, int pos, int c);
390 extern MText *mtext_copy (MText *mt1, int pos, MText *mt2, int from, int to);
392 extern int mtext_compare (MText *mt1, int from1, int to1,
393 MText *mt2, int from2, int to2);
395 extern int mtext_case_compare (MText *mt1, int from1, int to1,
396 MText *mt2, int from2, int to2);
398 extern int mtext_character (MText *mt, int from, int to, int c);
400 extern int mtext_del (MText *mt, int from, int to);
402 extern int mtext_ins (MText *mt1, int pos, MText *mt2);
404 extern int mtext_ins_char (MText *mt, int pos, int c, int n);
406 extern MText *mtext_cat_char (MText *mt, int c);
408 extern MText *mtext_duplicate (MText *mt, int from, int to);
410 extern MText *mtext_dup (MText *mt);
412 extern MText *mtext_cat (MText *mt1, MText *mt2);
414 extern MText *mtext_ncat (MText *mt1, MText *mt2, int n);
416 extern MText *mtext_cpy (MText *mt1, MText *mt2);
418 extern MText *mtext_ncpy (MText *mt1, MText *mt2, int n);
420 extern int mtext_chr (MText *mt, int c);
422 extern int mtext_rchr (MText *mt, int c);
424 extern int mtext_cmp (MText *mt1, MText *mt2);
426 extern int mtext_ncmp (MText *mt1, MText *mt2, int n);
428 extern int mtext_spn (MText *mt1, MText *mt2);
430 extern int mtext_cspn (MText *mt1, MText *mt2);
432 extern int mtext_pbrk (MText *mt1, MText *mt2);
434 extern int mtext_text (MText *mt1, int pos, MText *mt2);
436 extern int mtext_search (MText *mt1, int from, int to, MText *mt2);
438 extern MText *mtext_tok (MText *mt, MText *delim, int *pos);
440 extern int mtext_casecmp (MText *mt1, MText *mt2);
442 extern int mtext_ncasecmp (MText *mt1, MText *mt2, int n);
444 /*** @ingroup m17nPlist */
445 extern MPlist *mplist_deserialize (MText *mt);
448 * (5-3) Text properties
451 /*** @ingroup m17nCore */
452 /***en @defgroup m17nTextProperty Text Property */
453 /***ja @defgroup m17nTextProperty ¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£ */
455 /*** @ingroup m17nTextProperty */
457 @brief Flag bits to control text property.
459 The mtext_property () funciton accepts logical OR of these flag
460 bits as an argument. They control the behaviour of the created
461 text property as described in the documentation of each flag
465 @brief ¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤òÀ©¸æ¤¹¤ë¥Õ¥é¥°¥Ó¥Ã¥È.
467 ´Ø¿ô mtext_property () ¤Ï°Ê²¼¤Î¥Õ¥é¥°¥Ó¥Ã¥È¤ÎÏÀÍý OR ¤ò°ú¿ô¤È¤·¤Æ
468 ¤È¤ë¤³¤È¤¬¤Ç¤¤ë¡£¥Õ¥é¥°¥Ó¥Ã¥È¤ÏÀ¸À®¤µ¤ì¤¿¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Î¿¶Éñ
469 ¤¤¤òÀ©¸æ¤¹¤ë¡£¾ÜºÙ¤Ï³Æ¥Õ¥é¥°¥Ó¥Ã¥È¤ÎÀâÌÀ¤ò»²¾È¡£*/
471 enum MTextPropertyControl
473 /***en If this flag bit is on, an M-text inserted at the start
474 position or at the middle of the text property inherits the
476 /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Î»Ï¤Þ¤ëÅÀ¤¢
477 ¤ë¤¤¤ÏÃæ´Ö¤ËÁÞÆþ¤µ¤ì¤¿ M-text ¤Ï¤³¤Î¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤ò·Ñ¾µ¤¹¤ë¡£
479 MTEXTPROP_FRONT_STICKY = 0x01,
481 /***en If this flag bit is on, an M-text inserted at the end
482 position or at the middle of the text property inherits the
484 /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Î½ª¤ï¤ëÅÀ¤¢
485 ¤ë¤¤¤ÏÃæ´Ö¤ËÁÞÆþ¤µ¤ì¤¿ M-text ¤Ï¤³¤Î¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤ò·Ñ¾µ¤¹¤ë¡£
487 MTEXTPROP_REAR_STICKY = 0x02,
489 /***en If this flag bit is on, the text property is removed if a
490 text in its region is modified. */
491 /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤ÎÈÏ°ÏÆâ¤Î
492 ¥Æ¥¥¹¥È¤¬Êѹ¹¤µ¤ì¤¿¾ì¹ç¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Ï¼è¤ê½ü¤«¤ì¤ë¡£ */
493 MTEXTPROP_VOLATILE_WEAK = 0x04,
495 /***en If this flag bit is on, the text property is removed if a
496 text or the other text property in its region is modified. */
497 /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤ÎÈÏ°ÏÆâ¤Î
498 ¥Æ¥¥¹¥È¤¢¤ë¤¤¤ÏÊ̤Υƥ¥¹¥È¥×¥í¥Ñ¥Æ¥£¤¬Êѹ¹¤µ¤ì¤¿¾ì¹ç¤³¤Î¥Æ¥
499 ¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Ï¼è¤ê½ü¤«¤ì¤ë¡£*/
500 MTEXTPROP_VOLATILE_STRONG = 0x08,
502 /***en If this flag bit is on, the text property is not
503 automatically merged with the others. */
504 /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Ï¾¤Î¥×¥í¥Ñ
505 ¥Æ¥£¤È¼«Æ°Åª¤Ë¤Ï¥Þ¡¼¥¸¤µ¤ì¤Ê¤¤¡£ */
506 MTEXTPROP_NO_MERGE = 0x10,
508 MTEXTPROP_CONTROL_MAX = 0x1F
512 extern MSymbol Mtext_prop_serializer;
513 extern MSymbol Mtext_prop_deserializer;
516 /*** @ingroup m17nTextProperty */
518 @brief Type of serializer functions.
520 This is the type of serializer functions. If the key of a symbol
521 property is #Msymbol_prop_serializer, the value must be of this
524 @seealso Mtext_prop_serialize (), Mtext_prop_serializer
527 @brief ¥·¥ê¥¢¥é¥¤¥¶´Ø¿ô¤Î·¿Àë¸À.
529 ¥·¥ê¥¢¥é¥¤¥¶´Ø¿ô¤Î·¿¤Ç¤¢¤ë¡£ ¤¢¤ë¥·¥ó¥Ü¥ë¤Î¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤¬ @c
530 #Msymbol_prop_serializer ¤Ç¤¢¤ë¤È¤¡¢ ÃͤϤ³¤Î·¿¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
532 @seealso Mtext_prop_serialize (), Mtext_prop_serializer
535 typedef MPlist *(*MTextPropSerializeFunc) (void *val);
537 /*** @ingroup m17nTextProperty */
539 @brief Type of deserializer functions.
541 This is the type of deserializer functions. If the key of a
542 symbol property is #Msymbol_prop_deserializer, the value must be
545 @seealso Mtext_prop_deserialize (), Mtext_prop_deserializer
548 @brief ¥Ç¥·¥ê¥¢¥é¥¤¥¶´Ø¿ô¤Î·¿Àë¸À.
550 ¥Ç¥·¥ê¥¢¥é¥¤¥¶´Ø¿ô¤Î·¿¤Ç¤¢¤ë¡£ ¤¢¤ë¥·¥ó¥Ü¥ë¤Î¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤¬ @c
551 #Msymbol_prop_deserializer ¤Ç¤¢¤ë¤È¤¡¢ ÃͤϤ³¤Î·¿¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
553 @seealso Mtext_prop_deserialize (), Mtext_prop_deserializer
555 typedef void *(*MTextPropDeserializeFunc) (MPlist *plist);
557 extern void *mtext_get_prop (MText *mt, int pos, MSymbol key);
559 extern int mtext_get_prop_values (MText *mt, int pos, MSymbol key,
560 void **values, int num);
562 extern int mtext_get_prop_keys (MText *mt, int pos, MSymbol **keys);
564 extern int mtext_put_prop (MText *mt, int from, int to,
565 MSymbol key, void *val);
567 extern int mtext_put_prop_values (MText *mt, int from, int to,
568 MSymbol key, void **values, int num);
570 extern int mtext_push_prop (MText *mt, int from, int to,
571 MSymbol key, void *val);
573 extern int mtext_pop_prop (MText *mt, int from, int to,
576 extern int mtext_change_prop (MText *mt, int from, int to,
578 int (*func) (int, void ***, int *));
580 extern int mtext_prop_range (MText *mt, MSymbol key, int pos,
581 int *from, int *to, int deeper);
584 typedef struct MTextProperty MTextProperty;
588 extern MTextProperty *mtext_property (MSymbol key, void *val,
591 extern MText *mtext_property_mtext (MTextProperty *prop);
593 extern MSymbol mtext_property_key (MTextProperty *prop);
595 extern void *mtext_property_value (MTextProperty *prop);
597 extern int mtext_property_start (MTextProperty *prop);
599 extern int mtext_property_end (MTextProperty *prop);
601 extern MTextProperty *mtext_get_property (MText *mt, int pos, MSymbol key);
603 extern int mtext_get_properties (MText *mt, int pos, MSymbol key,
604 MTextProperty **props, int num);
606 extern int mtext_attach_property (MText *mt, int from, int to,
607 MTextProperty *prop);
609 extern int mtext_detach_property (MTextProperty *prop);
611 extern int mtext_push_property (MText *mt, int from, int to,
612 MTextProperty *prop);
614 extern MText *mtext_serialize (MText *mt, int from, int to,
615 MPlist *property_list);
617 extern MText *mtext_deserialize (MText *mt);
623 #endif /* _M17N_CORE_H_ */