1 /* m17n-core.h -- header file for the CORE API of the m17n library.
2 Copyright (C) 2003, 2004, 2005, 2006
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., 51 Franklin Street, Fifth Floor,
32 * Header file for m17n library.
35 /* (C1) Introduction */
37 /***en @defgroup m17nIntro Introduction */
38 /***ja @defgroup m17nIntro ¤Ï¤¸¤á¤Ë */
41 #if !defined (FOR_DOXYGEN) || defined (DOXYGEN_INTERNAL_MODULE)
43 #define M17NLIB_MAJOR_VERSION 1
44 #define M17NLIB_MINOR_VERSION 3
45 #define M17NLIB_PATCH_LEVEL 5
46 #define M17NLIB_VERSION_NAME "1.3.5"
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 ()
57 /*** @ingroup m17nIntro */
59 @brief Enumeration for the status of the m17n library.
61 The enum #M17NStatus is used as a return value of the function
65 @brief m17n ¥é¥¤¥Ö¥é¥ê¤Î¾õÂÖ¤ò¼¨¤¹Îóµó·¿.
67 Îóµó·¿ #M17NStatus ¤Ï´Ø¿ô m17n_status () ¤ÎÌá¤êÃͤȤ·¤ÆÍѤ¤¤é¤ì¤ë¡£ */
71 /***en No modules is initialized, and all modules are finalized. */
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. */
83 extern enum M17NStatus m17n_status (void);
85 /***en @defgroup m17nCore CORE API */
86 /***ja @defgroup m17nCore ¥³¥¢ API */
88 /*** @ingroup m17nCore */
89 /***en @defgroup m17nObject Managed Object */
90 /***ja @defgroup m17nObject ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È */
93 /*** @ingroup m17nObject */
95 @brief The first member of a managed object.
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. */
102 @brief ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤ÎºÇ½é¤Î¥á¥ó¥Ð.
104 ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤¬¿·¤·¤¤¹½Â¤ÂΤò´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤È¤·¤ÆÄêµÁ¤¹¤ëºÝ¤Ë¤Ï¡¢ºÇ½é¤Î¥á¥ó¥Ð¤Ï
105 @c #M17NObjectHead ¹½Â¤Âη¿¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
106 @c #M17NObjectHead ¤ÎÆâÍÆ¤Ï m17n
107 ¥é¥¤¥Ö¥é¥ê¤¬»ÈÍѤ¹¤ë¤Î¤Ç¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤Ï¿¨¤ì¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£ */
116 /* Return a newly allocated managed object. */
117 extern void *m17n_object (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);
125 /*** @ingroup m17nCore */
127 @brief Generic function type.
129 #M17NFunc is a generic function type for setting a function
130 pointer as a value of #MSymbol property or #MPlist. */
135 #M17NFunc ¤ÏÈÆ´Ø¿ô·¿¤Ç¤¢¤ê¡¢´Ø¿ô¥Ý¥¤¥ó¥¿¤ò #MSymbol ¥×¥í¥Ñ¥Æ¥£¤ä
136 #MPlist ¤ÎÃͤȤ·¤ÆÀßÄꤹ¤ëºÝÍѤ¤¤ë¡£ */
141 msymbol_put_func (), msymbol_get_func (),
142 mplist_put_func (), mplist_get_func (). */
144 typedef void (*M17NFunc) (void);
148 /*** @ingroup m17nCore */
150 @brief Wrapper for a generic function type.
152 The macro M17N_FUNC () casts a function to the type #M17NFunc. */
155 @brief ÈÆ´Ø¿ô·¿¤Ø¤Î¥é¥Ã¥Ñ.
157 ¥Þ¥¯¥í M17N_FUNC () ¤Ï´Ø¿ô¤ò #M17NFunc ·¿¤Ø¥¥ã¥¹¥È¤¹¤ë¡£ */
160 #define M17N_FUNC(func) ((M17NFunc) (func))
164 /* (C2) Symbol handling */
166 /*** @ingroup m17nCore */
167 /***en @defgroup m17nSymbol Symbol */
168 /***ja @defgroup m17nSymbol ¥·¥ó¥Ü¥ë */
172 @ingroup m17nSymbol */
174 @brief Type of symbols.
176 The type #MSymbol is for a @e symbol object. Its internal
177 structure is concealed from application programs. */
180 @brief ¥·¥ó¥Ü¥ë¤Î·¿Àë¸À.
182 #MSymbol ¤Ï @e ¥·¥ó¥Ü¥ë (symbol) ¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ç¤¢¤ë¡£
183 ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£ */
185 typedef struct MSymbolStruct *MSymbol;
189 /* Predefined symbols. */
192 extern MSymbol Mstring;
193 extern MSymbol Msymbol;
194 extern MSymbol Mtext;
196 /* Return a symbol of name NAME. */
197 extern MSymbol msymbol (const char *name);
199 /* Return a managing key of name NAME. */
200 extern MSymbol msymbol_as_managing_key (const char *name);
202 /* Check if SYMBOL is a managing key. */
203 extern int msymbol_is_managing_key (MSymbol symbol);
205 /* Return a symbol of name NAME if it already exists. */
206 extern MSymbol msymbol_exist (const char *name);
208 /* Return the name of SYMBOL. */
209 extern char *msymbol_name (MSymbol symbol);
211 /* Give SYMBOL KEY property with value VALUE. */
212 extern int msymbol_put (MSymbol symbol, MSymbol key, void *val);
214 /*** Return KEY property value of SYMBOL. */
215 extern void *msymbol_get (MSymbol symbol, MSymbol key);
217 extern int msymbol_put_func (MSymbol symbol, MSymbol key, M17NFunc func);
219 extern M17NFunc msymbol_get_func (MSymbol symbol, MSymbol key);
222 * (2-1) Property List
225 /*** @ingroup m17nCore */
226 /***en @defgroup m17nPlist Property List */
227 /***ja @defgroup m17nPlist ¥×¥í¥Ñ¥Æ¥£¥ê¥¹¥È */
231 @ingroup m17nPlist */
233 @brief Type of property list objects.
235 The type #MPlist is for a @e property @e list object. Its internal
236 structure is concealed from application programs. */
239 @brief ¥×¥í¥Ñ¥Æ¥£¥ê¥¹¥È¡¦¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿Àë¸À.
241 #MPlist ¤Ï @e ¥×¥í¥Ñ¥Æ¥£¥ê¥¹¥È (Property list) ¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ç¤¢¤ë¡£
242 ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£ */
244 typedef struct MPlist MPlist;
248 extern MSymbol Mplist, Minteger;
250 extern MPlist *mplist ();
252 extern MPlist *mplist_copy (MPlist *plist);
254 extern MPlist *mplist_add (MPlist *plist, MSymbol key, void *val);
256 extern MPlist *mplist_push (MPlist *plist, MSymbol key, void *val);
258 extern void *mplist_pop (MPlist *plist);
260 extern MPlist *mplist_put (MPlist *plist, MSymbol key, void *val);
262 extern void *mplist_get (MPlist *plist, MSymbol key);
264 extern MPlist *mplist_put_func (MPlist *plist, MSymbol key, M17NFunc func);
266 extern M17NFunc mplist_get_func (MPlist *plist, MSymbol key);
268 extern MPlist *mplist_find_by_key (MPlist *plist, MSymbol key);
270 extern MPlist *mplist_find_by_value (MPlist *plist, void *val);
272 extern MPlist *mplist_next (MPlist *plist);
274 extern MPlist *mplist_set (MPlist *plist, MSymbol key, void *val);
276 extern int mplist_length (MPlist *plist);
278 extern MSymbol mplist_key (MPlist *plist);
280 extern void *mplist_value (MPlist *plist);
282 /* (S1) Characters */
285 /*** @ingroup m17nCore */
286 /***en @defgroup m17nCharacter Character */
287 /***ja @defgroup m17nCharacter ʸ»ú */
290 #if !defined (FOR_DOXYGEN) || defined (DOXYGEN_INTERNAL_MODULE)
291 #define MCHAR_MAX 0x3FFFFF
292 /*#define MCHAR_MAX 0x7FFFFFFF*/
295 extern MSymbol Mscript;
296 extern MSymbol Mname;
297 extern MSymbol Mcategory;
298 extern MSymbol Mcombining_class;
299 extern MSymbol Mbidi_category;
300 extern MSymbol Msimple_case_folding;
301 extern MSymbol Mcomplicated_case_folding;
303 extern MSymbol mchar_define_property (const char *name, MSymbol type);
305 extern void *mchar_get_prop (int c, MSymbol key);
307 extern int mchar_put_prop (int c, MSymbol key, void *val);
309 /* (C3) Handling chartable */
311 /*** @ingroup m17nCore */
312 /***en @defgroup m17nChartable Chartable */
313 /***ja @defgroup m17nChartable ʸ»ú¥Æ¡¼¥Ö¥ë */
315 extern MSymbol Mchar_table;
318 @ingroup m17nChartable */
320 @brief Type of chartables.
322 The type #MCharTable is for a @e chartable objects. Its
323 internal structure is concealed from application programs. */
326 @brief ʸ»ú¥Æ¡¼¥Ö¥ë¤Î·¿Àë¸À.
328 #MCharTable ¤Ï @e ʸ»ú¥Æ¡¼¥Ö¥ë (chartable) ¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ç¤¢¤ë¡£
329 ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£ */
331 typedef struct MCharTable MCharTable;
334 extern MCharTable *mchartable (MSymbol key, void *default_value);
336 extern void *mchartable_lookup (MCharTable *table, int c);
338 extern int mchartable_set (MCharTable *table, int c, void *val);
340 extern int mchartable_set_range (MCharTable *table, int from, int to,
343 extern int mchartable_map (MCharTable *table, void *ignore,
344 void (*func) (int, int, void *, void *),
347 extern void mchartable_range (MCharTable *table, int *from, int *to);
349 extern MCharTable *mchar_get_prop_table (MSymbol key, MSymbol *type);
352 * (5) Handling M-text.
353 * "M" of M-text stands for:
359 /*** @ingroup m17nCore */
360 /***en @defgroup m17nMtext M-text */
361 /***ja @defgroup m17nMtext M-text */
365 * (5-1) M-text basics
368 /*** @ingroup m17nMtext */
370 @brief Type of @e M-texts.
372 The type #MText is for an @e M-text object. Its internal
373 structure is concealed from application programs. */
376 @brief @e MText ¤Î·¿Àë¸À.
378 #Mtext ¤Ï @e M-text ¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ç¤¢¤ë¡£
379 ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£
381 @latexonly \IPAlabel{MText} @endlatexonly
382 @latexonly \IPAlabel{MText->MPlist} @endlatexonly */
384 typedef struct MText MText;
388 /*** @ingroup m17nMtext */
390 @brief Enumeration for specifying the format of an M-text.
392 The enum #MTextFormat is used as an argument of the
393 mtext_from_data () function to specify the format of data from
394 which an M-text is created. */
397 @brief M-text ¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤ò»ØÄꤹ¤ëÎóµó·¿.
399 Îóµó·¿ #MTextFormat ¤Ï´Ø¿ô
400 mtext_from_data () ¤Î°ú¿ô¤È¤·¤ÆÍѤ¤¤é¤ì¡¢
401 M-text ¤òÀ¸À®¤¹¤ë¸µ¤È¤Ê¤ë¥Ç¡¼¥¿¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤ò»ØÄꤹ¤ë¡£ */
405 MTEXT_FORMAT_US_ASCII,
407 MTEXT_FORMAT_UTF_16LE,
408 MTEXT_FORMAT_UTF_16BE,
409 MTEXT_FORMAT_UTF_32LE,
410 MTEXT_FORMAT_UTF_32BE,
415 extern MText *mtext ();
417 extern void *mtext_data (MText *mt, enum MTextFormat *fmt, int *nunits,
418 int *pos_idx, int *unit_idx);
422 /***en @name Variables: Default Endian of UTF-16 and UTF-32 */
423 /***ja @name ÊÑ¿ô: UTF-16 ¤È UTF-32 ¤Î¥Ç¥Õ¥©¥ë¥È¤Î¥¨¥ó¥Ç¥£¥¢¥ó */
427 /*** @ingroup m17nMtext */
429 @brief Variable of value MTEXT_FORMAT_UTF_16LE or MTEXT_FORMAT_UTF_16BE.
431 The global variable #MTEXT_FORMAT_UTF_16 is initialized to
432 #MTEXT_FORMAT_UTF_16LE on a "Little Endian" system (storing words
433 with the least significant byte first), and to
434 #MTEXT_FORMAT_UTF_16BE on a "Big Endian" system (storing words
435 with the most significant byte first). */
438 @brief Ãͤ¬ MTEXT_FORMAT_UTF_16LE ¤« MTEXT_FORMAT_UTF_16BE ¤Ç¤¢¤ëÊÑ¿ô
440 Âç°èÊÑ¿ô #MTEXT_FORMAT_UTF_16 ¤Ï¥ê¥È¥ë¡¦¥¨¥ó¥Ç¥£¥¢¥ó¡¦¥·¥¹¥Æ¥à
441 ¡Ê¥ï¡¼¥É¤ò LSB (Least Significant Byte) ¤òÀè¤Ë¤·¤Æ³ÊǼ¡Ë¾å¤Ç¤Ï
442 #MTEXT_FORMAT_UTF_16LE ¤Ë½é´ü²½¤µ¤ì¡¢¥Ó¥Ã¥°¡¦¥¨¥ó¥Ç¥£¥¢¥ó¡¦¥·¥¹¥Æ¥à
443 ¡Ê¥ï¡¼¥É¤ò MSB (Most Significant Byte) ¤òÀè¤Ë¤·¤Æ³ÊǼ¡Ë¾å¤Ç¤Ï
444 #MTEXT_FORMAT_UTF_16BE ¤Ë½é´ü²½¤µ¤ì¤ë¡£ */
448 mtext_from_data () */
450 extern const enum MTextFormat MTEXT_FORMAT_UTF_16;
453 /*** @ingroup m17nMtext */
455 @brief Variable of value MTEXT_FORMAT_UTF_32LE or MTEXT_FORMAT_UTF_32BE.
457 The global variable #MTEXT_FORMAT_UTF_32 is initialized to
458 #MTEXT_FORMAT_UTF_32LE on a "Little Endian" system (storing words
459 with the least significant byte first), and to
460 #MTEXT_FORMAT_UTF_32BE on a "Big Endian" system (storing
461 words with the most significant byte first). */
464 @brief Ãͤ¬ MTEXT_FORMAT_UTF_32LE ¤« MTEXT_FORMAT_UTF_32BE ¤Ç¤¢¤ëÊÑ¿ô
466 Âç°èÊÑ¿ô #MTEXT_FORMAT_UTF_32 ¤Ï¥ê¥È¥ë¡¦¥¨¥ó¥Ç¥£¥¢¥ó¡¦¥·¥¹¥Æ¥à
467 ¡Ê¥ï¡¼¥É¤ò LSB (Least Significant Byte) ¤òÀè¤Ë¤·¤Æ³ÊǼ¡Ë¾å¤Ç¤Ï
468 #MTEXT_FORMAT_UTF_32LE ¤Ë½é´ü²½¤µ¤ì¡¢¥Ó¥Ã¥°¡¦¥¨¥ó¥Ç¥£¥¢¥ó¡¦¥·¥¹¥Æ¥à
469 ¡Ê¥ï¡¼¥É¤ò MSB (Most Significant Byte) ¤òÀè¤Ë¤·¤Æ³ÊǼ¡Ë¾å¤Ç¤Ï
470 #MTEXT_FORMAT_UTF_32BE ¤Ë½é´ü²½¤µ¤ì¤ë¡£ */
474 mtext_from_data () */
476 extern const int MTEXT_FORMAT_UTF_32;
482 extern MText *mtext_from_data (const void *data, int nitems,
483 enum MTextFormat format);
488 extern MSymbol Mlanguage;
491 * (5-2) Functions to manipulate M-texts. They correspond to string
492 * manipulating functions in libc.
493 * In the following functions, mtext_XXX() corresponds to strXXX().
496 extern int mtext_len (MText *mt);
498 extern int mtext_ref_char (MText *mt, int pos);
500 extern int mtext_set_char (MText *mt, int pos, int c);
502 extern MText *mtext_copy (MText *mt1, int pos, MText *mt2, int from, int to);
504 extern int mtext_compare (MText *mt1, int from1, int to1,
505 MText *mt2, int from2, int to2);
507 extern int mtext_case_compare (MText *mt1, int from1, int to1,
508 MText *mt2, int from2, int to2);
510 extern int mtext_character (MText *mt, int from, int to, int c);
512 extern int mtext_del (MText *mt, int from, int to);
514 extern int mtext_ins (MText *mt1, int pos, MText *mt2);
516 extern int mtext_insert (MText *mt1, int pos, MText *mt2, int from, int to);
518 extern int mtext_ins_char (MText *mt, int pos, int c, int n);
520 extern int mtext_replace (MText *mt1, int from1, int to1,
521 MText *mt2, int from2, int to2);
523 extern MText *mtext_cat_char (MText *mt, int c);
525 extern MText *mtext_duplicate (MText *mt, int from, int to);
527 extern MText *mtext_dup (MText *mt);
529 extern MText *mtext_cat (MText *mt1, MText *mt2);
531 extern MText *mtext_ncat (MText *mt1, MText *mt2, int n);
533 extern MText *mtext_cpy (MText *mt1, MText *mt2);
535 extern MText *mtext_ncpy (MText *mt1, MText *mt2, int n);
537 extern int mtext_chr (MText *mt, int c);
539 extern int mtext_rchr (MText *mt, int c);
541 extern int mtext_cmp (MText *mt1, MText *mt2);
543 extern int mtext_ncmp (MText *mt1, MText *mt2, int n);
545 extern int mtext_spn (MText *mt1, MText *mt2);
547 extern int mtext_cspn (MText *mt1, MText *mt2);
549 extern int mtext_pbrk (MText *mt1, MText *mt2);
551 extern int mtext_text (MText *mt1, int pos, MText *mt2);
553 extern int mtext_search (MText *mt1, int from, int to, MText *mt2);
555 extern MText *mtext_tok (MText *mt, MText *delim, int *pos);
557 extern int mtext_casecmp (MText *mt1, MText *mt2);
559 extern int mtext_ncasecmp (MText *mt1, MText *mt2, int n);
561 extern int mtext_lowercase (MText *mt);
563 extern int mtext_titlecase (MText *mt);
565 extern int mtext_uppercase (MText *mt);
568 @brief Enumeration for specifying a set of line breaking option.
570 The enum #MTextLineBreakOption is to control the line breaking
571 algorithm of the function mtext_line_break () by specifying
572 logical-or of the members in the arg @e option. */
574 enum MTextLineBreakOption
576 /***en Specify the legacy support for space character as base for
577 combining marks. See the section 8.3 of UAX#14. */
579 /***en Specify to use space characters for line breaking Korean
581 MTEXT_LBO_KOREAN_SP = 2,
582 /***en Specify to treat characters of ambiguous line-breaking
583 class as of ideographic line-breaking class. */
584 MTEXT_LBO_AI_AS_ID = 4,
588 extern int mtext_line_break (MText *mt, int pos, int option, int *after);
590 /*** @ingroup m17nPlist */
591 extern MPlist *mplist_deserialize (MText *mt);
594 * (5-3) Text properties
597 /*** @ingroup m17nCore */
598 /***en @defgroup m17nTextProperty Text Property */
599 /***ja @defgroup m17nTextProperty ¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£ */
601 /*** @ingroup m17nTextProperty */
603 @brief Flag bits to control text property.
605 The mtext_property () function accepts logical OR of these flag
606 bits as an argument. They control the behaviour of the created
607 text property as described in the documentation of each flag
611 @brief ¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤òÀ©¸æ¤¹¤ë¥Õ¥é¥°¥Ó¥Ã¥È.
613 ´Ø¿ô mtext_property () ¤Ï°Ê²¼¤Î¥Õ¥é¥°¥Ó¥Ã¥È¤ÎÏÀÍý
614 OR ¤ò°ú¿ô¤È¤·¤Æ¤È¤ë¤³¤È¤¬¤Ç¤¤ë¡£
615 ¥Õ¥é¥°¥Ó¥Ã¥È¤ÏÀ¸À®¤µ¤ì¤¿¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Î¿¶Éñ¤¤¤òÀ©¸æ¤¹¤ë¡£
616 ¾ÜºÙ¤Ï³Æ¥Õ¥é¥°¥Ó¥Ã¥È¤ÎÀâÌÀ¤ò»²¾È¡£*/
618 enum MTextPropertyControl
620 /***en If this flag bit is on, an M-text inserted at the start
621 position or at the middle of the text property inherits the
623 /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Î»Ï¤Þ¤ëÅÀ¤¢¤ë¤¤¤ÏÃæ´Ö¤ËÁÞÆþ¤µ¤ì¤¿
624 M-text ¤Ï¤³¤Î¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤ò·Ñ¾µ¤¹¤ë¡£
626 MTEXTPROP_FRONT_STICKY = 0x01,
628 /***en If this flag bit is on, an M-text inserted at the end
629 position or at the middle of the text property inherits the
631 /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Î½ª¤ï¤ëÅÀ¤¢¤ë¤¤¤ÏÃæ´Ö¤ËÁÞÆþ¤µ¤ì¤¿
632 M-text ¤Ï¤³¤Î¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤ò·Ñ¾µ¤¹¤ë¡£
634 MTEXTPROP_REAR_STICKY = 0x02,
636 /***en If this flag bit is on, the text property is removed if a
637 text in its region is modified. */
638 /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤ÎÈÏ°ÏÆâ¤Î¥Æ¥¥¹¥È¤¬Êѹ¹¤µ¤ì¤¿¾ì¹ç¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Ï¼è¤ê½ü¤«¤ì¤ë¡£ */
639 MTEXTPROP_VOLATILE_WEAK = 0x04,
641 /***en If this flag bit is on, the text property is removed if a
642 text or the other text property in its region is modified. */
643 /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤ÎÈÏ°ÏÆâ¤Î¥Æ¥¥¹¥È¤¢¤ë¤¤¤ÏÊ̤Υƥ¥¹¥È¥×¥í¥Ñ¥Æ¥£¤¬Êѹ¹¤µ¤ì¤¿¾ì¹ç¤³¤Î¥Æ¥
644 ¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Ï¼è¤ê½ü¤«¤ì¤ë¡£*/
645 MTEXTPROP_VOLATILE_STRONG = 0x08,
647 /***en If this flag bit is on, the text property is not
648 automatically merged with the others. */
649 /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Ï¾¤Î¥×¥í¥Ñ¥Æ¥£¤È¼«Æ°Åª¤Ë¤Ï¥Þ¡¼¥¸¤µ¤ì¤Ê¤¤¡£ */
650 MTEXTPROP_NO_MERGE = 0x10,
652 MTEXTPROP_CONTROL_MAX = 0x1F
656 extern MSymbol Mtext_prop_serializer;
657 extern MSymbol Mtext_prop_deserializer;
660 /*** @ingroup m17nTextProperty */
662 @brief Type of serializer functions.
664 This is the type of serializer functions. If the key of a symbol
665 property is #Mtext_prop_serializer, the value must be of this
669 mtext_serialize (), #Mtext_prop_serializer
672 @brief ¥·¥ê¥¢¥é¥¤¥¶´Ø¿ô¤Î·¿Àë¸À.
674 ¥·¥ê¥¢¥é¥¤¥¶´Ø¿ô¤Î·¿¤Ç¤¢¤ë¡£ ¤¢¤ë¥·¥ó¥Ü¥ë¤Î¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤¬ @c
675 #Mtext_prop_serializer ¤Ç¤¢¤ë¤È¤¡¢ ÃͤϤ³¤Î·¿¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
678 mtext_serialize (), #Mtext_prop_serializer
681 typedef MPlist *(*MTextPropSerializeFunc) (void *val);
683 /*** @ingroup m17nTextProperty */
685 @brief Type of deserializer functions.
687 This is the type of deserializer functions. If the key of a
688 symbol property is #Mtext_prop_deserializer, the value must be of
692 mtext_deserialize (), #Mtext_prop_deserializer
695 @brief ¥Ç¥·¥ê¥¢¥é¥¤¥¶´Ø¿ô¤Î·¿Àë¸À.
697 ¥Ç¥·¥ê¥¢¥é¥¤¥¶´Ø¿ô¤Î·¿¤Ç¤¢¤ë¡£ ¤¢¤ë¥·¥ó¥Ü¥ë¤Î¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤¬ @c
698 #Msymbol_prop_deserializer ¤Ç¤¢¤ë¤È¤¡¢ ÃͤϤ³¤Î·¿¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
701 Mtext_prop_deserialize (), Mtext_prop_deserializer
703 typedef void *(*MTextPropDeserializeFunc) (MPlist *plist);
705 extern void *mtext_get_prop (MText *mt, int pos, MSymbol key);
707 extern int mtext_get_prop_values (MText *mt, int pos, MSymbol key,
708 void **values, int num);
710 extern int mtext_get_prop_keys (MText *mt, int pos, MSymbol **keys);
712 extern int mtext_put_prop (MText *mt, int from, int to,
713 MSymbol key, void *val);
715 extern int mtext_put_prop_values (MText *mt, int from, int to,
716 MSymbol key, void **values, int num);
718 extern int mtext_push_prop (MText *mt, int from, int to,
719 MSymbol key, void *val);
721 extern int mtext_pop_prop (MText *mt, int from, int to,
724 extern int mtext_prop_range (MText *mt, MSymbol key, int pos,
725 int *from, int *to, int deeper);
729 @ingroup m17nTextProperty */
731 @brief Type of text properties.
733 The type #MTextProperty is for a @e text @e property objects. Its
734 internal structure is concealed from application programs. */
736 @brief @c ¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Î·¿Àë¸À.
738 #MTextProperty ¤Ï @e ¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£ ¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ç¤¢¤ë¡£
739 ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£ */
741 typedef struct MTextProperty MTextProperty;
745 extern MTextProperty *mtext_property (MSymbol key, void *val,
748 extern MText *mtext_property_mtext (MTextProperty *prop);
750 extern MSymbol mtext_property_key (MTextProperty *prop);
752 extern void *mtext_property_value (MTextProperty *prop);
754 extern int mtext_property_start (MTextProperty *prop);
756 extern int mtext_property_end (MTextProperty *prop);
758 extern MTextProperty *mtext_get_property (MText *mt, int pos, MSymbol key);
760 extern int mtext_get_properties (MText *mt, int pos, MSymbol key,
761 MTextProperty **props, int num);
763 extern int mtext_attach_property (MText *mt, int from, int to,
764 MTextProperty *prop);
766 extern int mtext_detach_property (MTextProperty *prop);
768 extern int mtext_push_property (MText *mt, int from, int to,
769 MTextProperty *prop);
771 extern MText *mtext_serialize (MText *mt, int from, int to,
772 MPlist *property_list);
774 extern MText *mtext_deserialize (MText *mt);
780 #endif /* _M17N_CORE_H_ */