1 /* m17n-core.h -- header file for the CORE API of the m17n library.
2 Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009
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,
27 #define M17N_BEGIN_HEADER extern "C" {
28 #define M17N_END_HEADER }
30 #define M17N_BEGIN_HEADER /* do nothing */
31 #define M17N_END_HEADER /* do nothing */
37 * Header file for m17n library.
40 /* (C1) Introduction */
42 /***en @defgroup m17nIntro Introduction */
43 /***ja @defgroup m17nIntro ¤Ï¤¸¤á¤Ë */
46 #if !defined (FOR_DOXYGEN) || defined (DOXYGEN_INTERNAL_MODULE)
48 #define M17NLIB_MAJOR_VERSION 1
49 #define M17NLIB_MINOR_VERSION 5
50 #define M17NLIB_PATCH_LEVEL 4
51 #define M17NLIB_VERSION_NAME "1.5.4"
53 extern void m17n_init_core (void);
54 #define M17N_INIT() m17n_init_core ()
55 extern void m17n_fini_core (void);
56 #define M17N_FINI() m17n_fini_core ()
58 extern int merror_code;
64 /*** @ingroup m17nIntro */
66 @brief Enumeration for the status of the m17n library.
68 The enum #M17NStatus is used as a return value of the function
72 @brief m17n ¥é¥¤¥Ö¥é¥ê¤Î¾õÂÖ¤ò¼¨¤¹Îóµó·¿.
74 Îóµó·¿ #M17NStatus ¤Ï´Ø¿ô m17n_status () ¤ÎÌá¤êÃͤȤ·¤ÆÍѤ¤¤é¤ì¤ë¡£ */
78 /***en No modules is initialized, and all modules are finalized. */
80 /***en Only the modules in CORE API are initialized. */
81 M17N_CORE_INITIALIZED,
82 /***en Only the modules in CORE and SHELL APIs are initialized. */
83 M17N_SHELL_INITIALIZED,
84 /***en All modules are initialized. */
90 extern enum M17NStatus m17n_status (void);
92 /***en @defgroup m17nCore CORE API
93 @brief API provided by libm17n-core.so */
94 /***ja @defgroup m17nCore ¥³¥¢ API
95 @brief libm17n-core.so ¤¬Ä󶡤¹¤ë API */
97 /*** @ingroup m17nCore */
98 /***en @defgroup m17nObject Managed Object
99 @brief Objects managed by the reference count */
100 /***ja @defgroup m17nObject ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È
101 @brief »²¾È²ó¿ô¤Ç´ÉÍý¤µ¤ì¤ë¥ª¥Ö¥¸¥§¥¯¥È */
104 /*** @ingroup m17nObject */
106 @brief The first member of a managed object.
108 When an application program defines a new structure for managed
109 objects, its first member must be of the type @c struct
110 #M17NObjectHead. Its contents are used by the m17n library, and
111 application programs should never touch them. */
113 @brief ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤ÎºÇ½é¤Î¥á¥ó¥Ð.
115 ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤¬¿·¤·¤¤¹½Â¤ÂΤò´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤È¤·¤ÆÄêµÁ¤¹¤ëºÝ¤Ë¤Ï¡¢ºÇ½é¤Î¥á¥ó¥Ð¤Ï
116 @c #M17NObjectHead ¹½Â¤Âη¿¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
117 @c #M17NObjectHead ¤ÎÆâÍÆ¤Ï m17n
118 ¥é¥¤¥Ö¥é¥ê¤¬»ÈÍѤ¹¤ë¤Î¤Ç¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤Ï¿¨¤ì¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£ */
127 /* Return a newly allocated managed object. */
128 extern void *m17n_object (int size, void (*freer) (void *));
130 /* Increment the reference count of managed object OBJECT. */
131 extern int m17n_object_ref (void *object);
133 /* Decrement the reference count of managed object OBJECT. */
134 extern int m17n_object_unref (void *object);
136 /*** @ingroup m17nCore */
138 @brief Generic function type.
140 #M17NFunc is a generic function type for setting a function
141 pointer as a value of #MSymbol property or #MPlist. */
146 #M17NFunc ¤ÏÈÆ´Ø¿ô·¿¤Ç¤¢¤ê¡¢´Ø¿ô¥Ý¥¤¥ó¥¿¤ò #MSymbol ¥×¥í¥Ñ¥Æ¥£¤ä
147 #MPlist ¤ÎÃͤȤ·¤ÆÀßÄꤹ¤ëºÝÍѤ¤¤ë¡£ */
152 msymbol_put_func (), msymbol_get_func (),
153 mplist_put_func (), mplist_get_func (). */
155 typedef void (*M17NFunc) (void);
159 /*** @ingroup m17nCore */
161 @brief Wrapper for a generic function type.
163 The macro M17N_FUNC () casts a function to the type #M17NFunc. */
166 @brief ÈÆ´Ø¿ô·¿¤Ø¤Î¥é¥Ã¥Ñ.
168 ¥Þ¥¯¥í M17N_FUNC () ¤Ï´Ø¿ô¤ò #M17NFunc ·¿¤Ø¥¥ã¥¹¥È¤¹¤ë¡£ */
171 #define M17N_FUNC(func) ((M17NFunc) (func))
175 /* (C2) Symbol handling */
177 /*** @ingroup m17nCore */
178 /***en @defgroup m17nSymbol Symbol */
179 /***ja @defgroup m17nSymbol ¥·¥ó¥Ü¥ë */
183 @ingroup m17nSymbol */
185 @brief Type of symbols.
187 The type #MSymbol is for a @e symbol object. Its internal
188 structure is concealed from application programs. */
191 @brief ¥·¥ó¥Ü¥ë¤Î·¿Àë¸À.
193 #MSymbol ¤Ï @e ¥·¥ó¥Ü¥ë (symbol) ¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ç¤¢¤ë¡£
194 ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£ */
196 typedef struct MSymbolStruct *MSymbol;
200 /* Predefined symbols. */
203 extern MSymbol Mstring;
204 extern MSymbol Msymbol;
205 extern MSymbol Mtext;
206 extern MSymbol Mcharset;
208 /* Return a symbol of name NAME. */
209 extern MSymbol msymbol (const char *name);
211 /* Return a managing key of name NAME. */
212 extern MSymbol msymbol_as_managing_key (const char *name);
214 /* Check if SYMBOL is a managing key. */
215 extern int msymbol_is_managing_key (MSymbol symbol);
217 /* Return a symbol of name NAME if it already exists. */
218 extern MSymbol msymbol_exist (const char *name);
220 /* Return the name of SYMBOL. */
221 extern char *msymbol_name (MSymbol symbol);
223 /* Give SYMBOL KEY property with value VALUE. */
224 extern int msymbol_put (MSymbol symbol, MSymbol key, void *val);
226 /*** Return KEY property value of SYMBOL. */
227 extern void *msymbol_get (MSymbol symbol, MSymbol key);
229 extern int msymbol_put_func (MSymbol symbol, MSymbol key, M17NFunc func);
231 extern M17NFunc msymbol_get_func (MSymbol symbol, MSymbol key);
234 * (2-1) Property List
237 /*** @ingroup m17nCore */
238 /***en @defgroup m17nPlist Property List */
239 /***ja @defgroup m17nPlist ¥×¥í¥Ñ¥Æ¥£¥ê¥¹¥È */
243 @ingroup m17nPlist */
245 @brief Type of property list objects.
247 The type #MPlist is for a @e property @e list object. Its internal
248 structure is concealed from application programs. */
251 @brief ¥×¥í¥Ñ¥Æ¥£¥ê¥¹¥È¡¦¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿Àë¸À.
253 #MPlist ¤Ï @e ¥×¥í¥Ñ¥Æ¥£¥ê¥¹¥È (Property list) ¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ç¤¢¤ë¡£
254 ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£ */
256 typedef struct MPlist MPlist;
260 extern MSymbol Mplist, Minteger;
262 extern MPlist *mplist ();
264 extern MPlist *mplist_copy (MPlist *plist);
266 extern MPlist *mplist_add (MPlist *plist, MSymbol key, void *val);
268 extern MPlist *mplist_push (MPlist *plist, MSymbol key, void *val);
270 extern void *mplist_pop (MPlist *plist);
272 extern MPlist *mplist_put (MPlist *plist, MSymbol key, void *val);
274 extern void *mplist_get (MPlist *plist, MSymbol key);
276 extern MPlist *mplist_put_func (MPlist *plist, MSymbol key, M17NFunc func);
278 extern M17NFunc mplist_get_func (MPlist *plist, MSymbol key);
280 extern MPlist *mplist_find_by_key (MPlist *plist, MSymbol key);
282 extern MPlist *mplist_find_by_value (MPlist *plist, void *val);
284 extern MPlist *mplist_next (MPlist *plist);
286 extern MPlist *mplist_set (MPlist *plist, MSymbol key, void *val);
288 extern int mplist_length (MPlist *plist);
290 extern MSymbol mplist_key (MPlist *plist);
292 extern void *mplist_value (MPlist *plist);
294 /* (S1) Characters */
297 /*** @ingroup m17nCore */
298 /***en @defgroup m17nCharacter Character */
299 /***ja @defgroup m17nCharacter ʸ»ú */
302 #if !defined (FOR_DOXYGEN) || defined (DOXYGEN_INTERNAL_MODULE)
303 #define MCHAR_MAX 0x3FFFFF
304 /*#define MCHAR_MAX 0x7FFFFFFF*/
307 extern MSymbol Mscript;
308 extern MSymbol Mname;
309 extern MSymbol Mcategory;
310 extern MSymbol Mcombining_class;
311 extern MSymbol Mbidi_category;
312 extern MSymbol Msimple_case_folding;
313 extern MSymbol Mcomplicated_case_folding;
314 extern MSymbol Mcased, Msoft_dotted, Mcase_mapping;
315 extern MSymbol Mblock;
317 extern MSymbol mchar_define_property (const char *name, MSymbol type);
319 extern void *mchar_get_prop (int c, MSymbol key);
321 extern int mchar_put_prop (int c, MSymbol key, void *val);
323 /* (C3) Handling chartable */
325 /*** @ingroup m17nCore */
326 /***en @defgroup m17nChartable Chartable */
327 /***ja @defgroup m17nChartable ʸ»ú¥Æ¡¼¥Ö¥ë */
329 extern MSymbol Mchar_table;
332 @ingroup m17nChartable */
334 @brief Type of chartables.
336 The type #MCharTable is for a @e chartable objects. Its
337 internal structure is concealed from application programs. */
340 @brief ʸ»ú¥Æ¡¼¥Ö¥ë¤Î·¿Àë¸À.
342 #MCharTable ¤Ï @e ʸ»ú¥Æ¡¼¥Ö¥ë (chartable) ¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ç¤¢¤ë¡£
343 ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£ */
345 typedef struct MCharTable MCharTable;
348 extern MCharTable *mchartable (MSymbol key, void *default_value);
350 extern int mchartable_min_char (MCharTable *table);
352 extern int mchartable_max_char (MCharTable *table);
354 extern void *mchartable_lookup (MCharTable *table, int c);
356 extern int mchartable_set (MCharTable *table, int c, void *val);
358 extern int mchartable_set_range (MCharTable *table, int from, int to,
361 extern int mchartable_map (MCharTable *table, void *ignore,
362 void (*func) (int, int, void *, void *),
365 extern void mchartable_range (MCharTable *table, int *from, int *to);
367 extern MCharTable *mchar_get_prop_table (MSymbol key, MSymbol *type);
370 * (5) Handling M-text.
371 * "M" of M-text stands for:
377 /*** @ingroup m17nCore */
378 /***en @defgroup m17nMtext M-text */
379 /***ja @defgroup m17nMtext M-text */
383 * (5-1) M-text basics
386 /*** @ingroup m17nMtext */
388 @brief Type of @e M-texts.
390 The type #MText is for an @e M-text object. Its internal
391 structure is concealed from application programs. */
394 @brief @e MText ¤Î·¿Àë¸À.
396 #Mtext ¤Ï @e M-text ¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ç¤¢¤ë¡£
397 ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£
399 @latexonly \IPAlabel{MText} @endlatexonly
400 @latexonly \IPAlabel{MText->MPlist} @endlatexonly */
402 typedef struct MText MText;
406 /*** @ingroup m17nMtext */
408 @brief Enumeration for specifying the format of an M-text.
410 The enum #MTextFormat is used as an argument of the
411 mtext_from_data () function to specify the format of data from
412 which an M-text is created. */
415 @brief M-text ¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤ò»ØÄꤹ¤ëÎóµó·¿.
417 Îóµó·¿ #MTextFormat ¤Ï´Ø¿ô
418 mtext_from_data () ¤Î°ú¿ô¤È¤·¤ÆÍѤ¤¤é¤ì¡¢
419 M-text ¤òÀ¸À®¤¹¤ë¸µ¤È¤Ê¤ë¥Ç¡¼¥¿¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤ò»ØÄꤹ¤ë¡£ */
423 MTEXT_FORMAT_US_ASCII,
425 MTEXT_FORMAT_UTF_16LE,
426 MTEXT_FORMAT_UTF_16BE,
427 MTEXT_FORMAT_UTF_32LE,
428 MTEXT_FORMAT_UTF_32BE,
433 extern MText *mtext ();
435 extern void *mtext_data (MText *mt, enum MTextFormat *fmt, int *nunits,
436 int *pos_idx, int *unit_idx);
440 /***en @name Variables: Default Endian of UTF-16 and UTF-32 */
441 /***ja @name ÊÑ¿ô: UTF-16 ¤È UTF-32 ¤Î¥Ç¥Õ¥©¥ë¥È¤Î¥¨¥ó¥Ç¥£¥¢¥ó */
445 /*** @ingroup m17nMtext */
447 @brief Variable of value MTEXT_FORMAT_UTF_16LE or MTEXT_FORMAT_UTF_16BE.
449 The global variable #MTEXT_FORMAT_UTF_16 is initialized to
450 #MTEXT_FORMAT_UTF_16LE on a "Little Endian" system (storing words
451 with the least significant byte first), and to
452 #MTEXT_FORMAT_UTF_16BE on a "Big Endian" system (storing words
453 with the most significant byte first). */
456 @brief Ãͤ¬ MTEXT_FORMAT_UTF_16LE ¤« MTEXT_FORMAT_UTF_16BE ¤Ç¤¢¤ëÊÑ¿ô
458 Âç°èÊÑ¿ô #MTEXT_FORMAT_UTF_16 ¤Ï¥ê¥È¥ë¡¦¥¨¥ó¥Ç¥£¥¢¥ó¡¦¥·¥¹¥Æ¥à
459 ¡Ê¥ï¡¼¥É¤ò LSB (Least Significant Byte) ¤òÀè¤Ë¤·¤Æ³ÊǼ¡Ë¾å¤Ç¤Ï
460 #MTEXT_FORMAT_UTF_16LE ¤Ë½é´ü²½¤µ¤ì¡¢¥Ó¥Ã¥°¡¦¥¨¥ó¥Ç¥£¥¢¥ó¡¦¥·¥¹¥Æ¥à
461 ¡Ê¥ï¡¼¥É¤ò MSB (Most Significant Byte) ¤òÀè¤Ë¤·¤Æ³ÊǼ¡Ë¾å¤Ç¤Ï
462 #MTEXT_FORMAT_UTF_16BE ¤Ë½é´ü²½¤µ¤ì¤ë¡£ */
466 mtext_from_data () */
468 extern const enum MTextFormat MTEXT_FORMAT_UTF_16;
471 /*** @ingroup m17nMtext */
473 @brief Variable of value MTEXT_FORMAT_UTF_32LE or MTEXT_FORMAT_UTF_32BE.
475 The global variable #MTEXT_FORMAT_UTF_32 is initialized to
476 #MTEXT_FORMAT_UTF_32LE on a "Little Endian" system (storing words
477 with the least significant byte first), and to
478 #MTEXT_FORMAT_UTF_32BE on a "Big Endian" system (storing
479 words with the most significant byte first). */
482 @brief Ãͤ¬ MTEXT_FORMAT_UTF_32LE ¤« MTEXT_FORMAT_UTF_32BE ¤Ç¤¢¤ëÊÑ¿ô
484 Âç°èÊÑ¿ô #MTEXT_FORMAT_UTF_32 ¤Ï¥ê¥È¥ë¡¦¥¨¥ó¥Ç¥£¥¢¥ó¡¦¥·¥¹¥Æ¥à
485 ¡Ê¥ï¡¼¥É¤ò LSB (Least Significant Byte) ¤òÀè¤Ë¤·¤Æ³ÊǼ¡Ë¾å¤Ç¤Ï
486 #MTEXT_FORMAT_UTF_32LE ¤Ë½é´ü²½¤µ¤ì¡¢¥Ó¥Ã¥°¡¦¥¨¥ó¥Ç¥£¥¢¥ó¡¦¥·¥¹¥Æ¥à
487 ¡Ê¥ï¡¼¥É¤ò MSB (Most Significant Byte) ¤òÀè¤Ë¤·¤Æ³ÊǼ¡Ë¾å¤Ç¤Ï
488 #MTEXT_FORMAT_UTF_32BE ¤Ë½é´ü²½¤µ¤ì¤ë¡£ */
492 mtext_from_data () */
494 extern const int MTEXT_FORMAT_UTF_32;
500 extern MText *mtext_from_data (const void *data, int nitems,
501 enum MTextFormat format);
506 extern MSymbol Mlanguage;
509 * (5-2) Functions to manipulate M-texts. They correspond to string
510 * manipulating functions in libc.
511 * In the following functions, mtext_XXX() corresponds to strXXX().
514 extern int mtext_len (MText *mt);
516 extern int mtext_ref_char (MText *mt, int pos);
518 extern int mtext_set_char (MText *mt, int pos, int c);
520 extern MText *mtext_copy (MText *mt1, int pos, MText *mt2, int from, int to);
522 extern int mtext_compare (MText *mt1, int from1, int to1,
523 MText *mt2, int from2, int to2);
525 extern int mtext_case_compare (MText *mt1, int from1, int to1,
526 MText *mt2, int from2, int to2);
528 extern int mtext_character (MText *mt, int from, int to, int c);
530 extern int mtext_del (MText *mt, int from, int to);
532 extern int mtext_ins (MText *mt1, int pos, MText *mt2);
534 extern int mtext_insert (MText *mt1, int pos, MText *mt2, int from, int to);
536 extern int mtext_ins_char (MText *mt, int pos, int c, int n);
538 extern int mtext_replace (MText *mt1, int from1, int to1,
539 MText *mt2, int from2, int to2);
541 extern MText *mtext_cat_char (MText *mt, int c);
543 extern MText *mtext_duplicate (MText *mt, int from, int to);
545 extern MText *mtext_dup (MText *mt);
547 extern MText *mtext_cat (MText *mt1, MText *mt2);
549 extern MText *mtext_ncat (MText *mt1, MText *mt2, int n);
551 extern MText *mtext_cpy (MText *mt1, MText *mt2);
553 extern MText *mtext_ncpy (MText *mt1, MText *mt2, int n);
555 extern int mtext_chr (MText *mt, int c);
557 extern int mtext_rchr (MText *mt, int c);
559 extern int mtext_cmp (MText *mt1, MText *mt2);
561 extern int mtext_ncmp (MText *mt1, MText *mt2, int n);
563 extern int mtext_spn (MText *mt1, MText *mt2);
565 extern int mtext_cspn (MText *mt1, MText *mt2);
567 extern int mtext_pbrk (MText *mt1, MText *mt2);
569 extern int mtext_text (MText *mt1, int pos, MText *mt2);
571 extern int mtext_search (MText *mt1, int from, int to, MText *mt2);
573 extern MText *mtext_tok (MText *mt, MText *delim, int *pos);
575 extern int mtext_casecmp (MText *mt1, MText *mt2);
577 extern int mtext_ncasecmp (MText *mt1, MText *mt2, int n);
579 extern int mtext_lowercase (MText *mt);
581 extern int mtext_titlecase (MText *mt);
583 extern int mtext_uppercase (MText *mt);
586 @brief Enumeration for specifying a set of line breaking option.
588 The enum #MTextLineBreakOption is to control the line breaking
589 algorithm of the function mtext_line_break () by specifying
590 logical-or of the members in the arg @e option. */
592 enum MTextLineBreakOption
594 /***en Specify the legacy support for space character as base for
595 combining marks. See the section 8.3 of UAX#14. */
597 /***en Specify to use space characters for line breaking Korean
599 MTEXT_LBO_KOREAN_SP = 2,
600 /***en Specify to treat characters of ambiguous line-breaking
601 class as of ideographic line-breaking class. */
602 MTEXT_LBO_AI_AS_ID = 4,
606 extern int mtext_line_break (MText *mt, int pos, int option, int *after);
608 /*** @ingroup m17nPlist */
609 extern MPlist *mplist_deserialize (MText *mt);
612 * (5-3) Text properties
615 /*** @ingroup m17nCore */
616 /***en @defgroup m17nTextProperty Text Property */
617 /***ja @defgroup m17nTextProperty ¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£ */
619 /*** @ingroup m17nTextProperty */
621 @brief Flag bits to control text property.
623 The mtext_property () function accepts logical OR of these flag
624 bits as an argument. They control the behaviour of the created
625 text property as described in the documentation of each flag
629 @brief ¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤òÀ©¸æ¤¹¤ë¥Õ¥é¥°¥Ó¥Ã¥È.
631 ´Ø¿ô mtext_property () ¤Ï°Ê²¼¤Î¥Õ¥é¥°¥Ó¥Ã¥È¤ÎÏÀÍý
632 OR ¤ò°ú¿ô¤È¤·¤Æ¤È¤ë¤³¤È¤¬¤Ç¤¤ë¡£
633 ¥Õ¥é¥°¥Ó¥Ã¥È¤ÏÀ¸À®¤µ¤ì¤¿¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Î¿¶Éñ¤¤¤òÀ©¸æ¤¹¤ë¡£
634 ¾ÜºÙ¤Ï³Æ¥Õ¥é¥°¥Ó¥Ã¥È¤ÎÀâÌÀ¤ò»²¾È¡£*/
636 enum MTextPropertyControl
638 /***en If this flag bit is on, an M-text inserted at the start
639 position or at the middle of the text property inherits the
641 /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Î»Ï¤Þ¤ëÅÀ¤¢¤ë¤¤¤ÏÃæ´Ö¤ËÁÞÆþ¤µ¤ì¤¿
642 M-text ¤Ï¤³¤Î¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤ò·Ñ¾µ¤¹¤ë¡£
644 MTEXTPROP_FRONT_STICKY = 0x01,
646 /***en If this flag bit is on, an M-text inserted at the end
647 position or at the middle of the text property inherits the
649 /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Î½ª¤ï¤ëÅÀ¤¢¤ë¤¤¤ÏÃæ´Ö¤ËÁÞÆþ¤µ¤ì¤¿
650 M-text ¤Ï¤³¤Î¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤ò·Ñ¾µ¤¹¤ë¡£
652 MTEXTPROP_REAR_STICKY = 0x02,
654 /***en If this flag bit is on, the text property is removed if a
655 text in its region is modified. */
656 /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤ÎÈÏ°ÏÆâ¤Î¥Æ¥¥¹¥È¤¬Êѹ¹¤µ¤ì¤¿¾ì¹ç¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Ï¼è¤ê½ü¤«¤ì¤ë¡£ */
657 MTEXTPROP_VOLATILE_WEAK = 0x04,
659 /***en If this flag bit is on, the text property is removed if a
660 text or the other text property in its region is modified. */
661 /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤ÎÈÏ°ÏÆâ¤Î¥Æ¥¥¹¥È¤¢¤ë¤¤¤ÏÊ̤Υƥ¥¹¥È¥×¥í¥Ñ¥Æ¥£¤¬Êѹ¹¤µ¤ì¤¿¾ì¹ç¤³¤Î¥Æ¥
662 ¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Ï¼è¤ê½ü¤«¤ì¤ë¡£*/
663 MTEXTPROP_VOLATILE_STRONG = 0x08,
665 /***en If this flag bit is on, the text property is not
666 automatically merged with the others. */
667 /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Ï¾¤Î¥×¥í¥Ñ¥Æ¥£¤È¼«Æ°Åª¤Ë¤Ï¥Þ¡¼¥¸¤µ¤ì¤Ê¤¤¡£ */
668 MTEXTPROP_NO_MERGE = 0x10,
670 MTEXTPROP_CONTROL_MAX = 0x1F
674 extern MSymbol Mtext_prop_serializer;
675 extern MSymbol Mtext_prop_deserializer;
678 /*** @ingroup m17nTextProperty */
680 @brief Type of serializer functions.
682 This is the type of serializer functions. If the key of a symbol
683 property is #Mtext_prop_serializer, the value must be of this
687 mtext_serialize (), #Mtext_prop_serializer
690 @brief ¥·¥ê¥¢¥é¥¤¥¶´Ø¿ô¤Î·¿Àë¸À.
692 ¥·¥ê¥¢¥é¥¤¥¶´Ø¿ô¤Î·¿¤Ç¤¢¤ë¡£ ¤¢¤ë¥·¥ó¥Ü¥ë¤Î¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤¬ @c
693 #Mtext_prop_serializer ¤Ç¤¢¤ë¤È¤¡¢ ÃͤϤ³¤Î·¿¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
696 mtext_serialize (), #Mtext_prop_serializer
699 typedef MPlist *(*MTextPropSerializeFunc) (void *val);
701 /*** @ingroup m17nTextProperty */
703 @brief Type of deserializer functions.
705 This is the type of deserializer functions. If the key of a
706 symbol property is #Mtext_prop_deserializer, the value must be of
710 mtext_deserialize (), #Mtext_prop_deserializer
713 @brief ¥Ç¥·¥ê¥¢¥é¥¤¥¶´Ø¿ô¤Î·¿Àë¸À.
715 ¥Ç¥·¥ê¥¢¥é¥¤¥¶´Ø¿ô¤Î·¿¤Ç¤¢¤ë¡£ ¤¢¤ë¥·¥ó¥Ü¥ë¤Î¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤¬ @c
716 #Msymbol_prop_deserializer ¤Ç¤¢¤ë¤È¤¡¢ ÃͤϤ³¤Î·¿¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
719 Mtext_prop_deserialize (), Mtext_prop_deserializer
721 typedef void *(*MTextPropDeserializeFunc) (MPlist *plist);
723 extern void *mtext_get_prop (MText *mt, int pos, MSymbol key);
725 extern int mtext_get_prop_values (MText *mt, int pos, MSymbol key,
726 void **values, int num);
728 extern int mtext_get_prop_keys (MText *mt, int pos, MSymbol **keys);
730 extern int mtext_put_prop (MText *mt, int from, int to,
731 MSymbol key, void *val);
733 extern int mtext_put_prop_values (MText *mt, int from, int to,
734 MSymbol key, void **values, int num);
736 extern int mtext_push_prop (MText *mt, int from, int to,
737 MSymbol key, void *val);
739 extern int mtext_pop_prop (MText *mt, int from, int to,
742 extern int mtext_prop_range (MText *mt, MSymbol key, int pos,
743 int *from, int *to, int deeper);
747 @ingroup m17nTextProperty */
749 @brief Type of text properties.
751 The type #MTextProperty is for a @e text @e property objects. Its
752 internal structure is concealed from application programs. */
754 @brief @c ¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Î·¿Àë¸À.
756 #MTextProperty ¤Ï @e ¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£ ¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ç¤¢¤ë¡£
757 ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£ */
759 typedef struct MTextProperty MTextProperty;
763 extern MTextProperty *mtext_property (MSymbol key, void *val,
766 extern MText *mtext_property_mtext (MTextProperty *prop);
768 extern MSymbol mtext_property_key (MTextProperty *prop);
770 extern void *mtext_property_value (MTextProperty *prop);
772 extern int mtext_property_start (MTextProperty *prop);
774 extern int mtext_property_end (MTextProperty *prop);
776 extern MTextProperty *mtext_get_property (MText *mt, int pos, MSymbol key);
778 extern int mtext_get_properties (MText *mt, int pos, MSymbol key,
779 MTextProperty **props, int num);
781 extern int mtext_attach_property (MText *mt, int from, int to,
782 MTextProperty *prop);
784 extern int mtext_detach_property (MTextProperty *prop);
786 extern int mtext_push_property (MText *mt, int from, int to,
787 MTextProperty *prop);
789 extern MText *mtext_serialize (MText *mt, int from, int to,
790 MPlist *property_list);
792 extern MText *mtext_deserialize (MText *mt);
794 /*** @ingroup m17nCore */
795 /***en @defgroup m17nDatabase Database */
796 /***ja @defgroup m17nDatabase ¥Ç¡¼¥¿¥Ù¡¼¥¹ */
799 /* Directory of an application specific databases. */
800 extern char *mdatabase_dir;
803 @ingroup m17nDatabase */
805 @brief Type of database.
807 The type #MDatabase is for a database object. Its internal
808 structure is concealed from an application program. */
810 @brief ¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î·¿Àë¸À.
812 #MDatabase ·¿¤Ï¥Ç¡¼¥¿¥Ù¡¼¥¹¥ª¥Ö¥¸¥§¥¯¥ÈÍѤι½Â¤ÂΤǤ¢¤ë¡£
813 ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£
816 typedef struct MDatabase MDatabase;
820 /* Look for a data. */
821 extern MDatabase *mdatabase_find (MSymbol tag1, MSymbol tag2,
822 MSymbol tag3, MSymbol tag4);
824 extern MPlist *mdatabase_list (MSymbol tag0, MSymbol tag1,
825 MSymbol tag2, MSymbol tag3);
828 void *mdatabase_load (MDatabase *mdb);
830 /* Get tags of a data. */
831 extern MSymbol *mdatabase_tag (MDatabase *mdb);
834 extern MDatabase *mdatabase_define (MSymbol tag1, MSymbol tag2,
835 MSymbol tag3, MSymbol tag4,
836 void *(*loader) (MSymbol *, void *),
841 #endif /* _M17N_CORE_H_ */