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,
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 3
50 #define M17NLIB_PATCH_LEVEL 5
51 #define M17NLIB_VERSION_NAME "1.3.5"
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 /***ja @defgroup m17nCore ¥³¥¢ API */
95 /*** @ingroup m17nCore */
96 /***en @defgroup m17nObject Managed Object */
97 /***ja @defgroup m17nObject ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È */
100 /*** @ingroup m17nObject */
102 @brief The first member of a managed object.
104 When an application program defines a new structure for managed
105 objects, its first member must be of the type @c struct
106 #M17NObjectHead. Its contents are used by the m17n library, and
107 application programs should never touch them. */
109 @brief ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤ÎºÇ½é¤Î¥á¥ó¥Ð.
111 ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤¬¿·¤·¤¤¹½Â¤ÂΤò´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤È¤·¤ÆÄêµÁ¤¹¤ëºÝ¤Ë¤Ï¡¢ºÇ½é¤Î¥á¥ó¥Ð¤Ï
112 @c #M17NObjectHead ¹½Â¤Âη¿¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
113 @c #M17NObjectHead ¤ÎÆâÍÆ¤Ï m17n
114 ¥é¥¤¥Ö¥é¥ê¤¬»ÈÍѤ¹¤ë¤Î¤Ç¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤Ï¿¨¤ì¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£ */
123 /* Return a newly allocated managed object. */
124 extern void *m17n_object (int size, void (*freer) (void *));
126 /* Increment the reference count of managed object OBJECT. */
127 extern int m17n_object_ref (void *object);
129 /* Decrement the reference count of managed object OBJECT. */
130 extern int m17n_object_unref (void *object);
132 /*** @ingroup m17nCore */
134 @brief Generic function type.
136 #M17NFunc is a generic function type for setting a function
137 pointer as a value of #MSymbol property or #MPlist. */
142 #M17NFunc ¤ÏÈÆ´Ø¿ô·¿¤Ç¤¢¤ê¡¢´Ø¿ô¥Ý¥¤¥ó¥¿¤ò #MSymbol ¥×¥í¥Ñ¥Æ¥£¤ä
143 #MPlist ¤ÎÃͤȤ·¤ÆÀßÄꤹ¤ëºÝÍѤ¤¤ë¡£ */
148 msymbol_put_func (), msymbol_get_func (),
149 mplist_put_func (), mplist_get_func (). */
151 typedef void (*M17NFunc) (void);
155 /*** @ingroup m17nCore */
157 @brief Wrapper for a generic function type.
159 The macro M17N_FUNC () casts a function to the type #M17NFunc. */
162 @brief ÈÆ´Ø¿ô·¿¤Ø¤Î¥é¥Ã¥Ñ.
164 ¥Þ¥¯¥í M17N_FUNC () ¤Ï´Ø¿ô¤ò #M17NFunc ·¿¤Ø¥¥ã¥¹¥È¤¹¤ë¡£ */
167 #define M17N_FUNC(func) ((M17NFunc) (func))
171 /* (C2) Symbol handling */
173 /*** @ingroup m17nCore */
174 /***en @defgroup m17nSymbol Symbol */
175 /***ja @defgroup m17nSymbol ¥·¥ó¥Ü¥ë */
179 @ingroup m17nSymbol */
181 @brief Type of symbols.
183 The type #MSymbol is for a @e symbol object. Its internal
184 structure is concealed from application programs. */
187 @brief ¥·¥ó¥Ü¥ë¤Î·¿Àë¸À.
189 #MSymbol ¤Ï @e ¥·¥ó¥Ü¥ë (symbol) ¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ç¤¢¤ë¡£
190 ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£ */
192 typedef struct MSymbolStruct *MSymbol;
196 /* Predefined symbols. */
199 extern MSymbol Mstring;
200 extern MSymbol Msymbol;
201 extern MSymbol Mtext;
202 extern MSymbol Mcharset;
204 /* Return a symbol of name NAME. */
205 extern MSymbol msymbol (const char *name);
207 /* Return a managing key of name NAME. */
208 extern MSymbol msymbol_as_managing_key (const char *name);
210 /* Check if SYMBOL is a managing key. */
211 extern int msymbol_is_managing_key (MSymbol symbol);
213 /* Return a symbol of name NAME if it already exists. */
214 extern MSymbol msymbol_exist (const char *name);
216 /* Return the name of SYMBOL. */
217 extern char *msymbol_name (MSymbol symbol);
219 /* Give SYMBOL KEY property with value VALUE. */
220 extern int msymbol_put (MSymbol symbol, MSymbol key, void *val);
222 /*** Return KEY property value of SYMBOL. */
223 extern void *msymbol_get (MSymbol symbol, MSymbol key);
225 extern int msymbol_put_func (MSymbol symbol, MSymbol key, M17NFunc func);
227 extern M17NFunc msymbol_get_func (MSymbol symbol, MSymbol key);
230 * (2-1) Property List
233 /*** @ingroup m17nCore */
234 /***en @defgroup m17nPlist Property List */
235 /***ja @defgroup m17nPlist ¥×¥í¥Ñ¥Æ¥£¥ê¥¹¥È */
239 @ingroup m17nPlist */
241 @brief Type of property list objects.
243 The type #MPlist is for a @e property @e list object. Its internal
244 structure is concealed from application programs. */
247 @brief ¥×¥í¥Ñ¥Æ¥£¥ê¥¹¥È¡¦¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿Àë¸À.
249 #MPlist ¤Ï @e ¥×¥í¥Ñ¥Æ¥£¥ê¥¹¥È (Property list) ¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ç¤¢¤ë¡£
250 ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£ */
252 typedef struct MPlist MPlist;
256 extern MSymbol Mplist, Minteger;
258 extern MPlist *mplist ();
260 extern MPlist *mplist_copy (MPlist *plist);
262 extern MPlist *mplist_add (MPlist *plist, MSymbol key, void *val);
264 extern MPlist *mplist_push (MPlist *plist, MSymbol key, void *val);
266 extern void *mplist_pop (MPlist *plist);
268 extern MPlist *mplist_put (MPlist *plist, MSymbol key, void *val);
270 extern void *mplist_get (MPlist *plist, MSymbol key);
272 extern MPlist *mplist_put_func (MPlist *plist, MSymbol key, M17NFunc func);
274 extern M17NFunc mplist_get_func (MPlist *plist, MSymbol key);
276 extern MPlist *mplist_find_by_key (MPlist *plist, MSymbol key);
278 extern MPlist *mplist_find_by_value (MPlist *plist, void *val);
280 extern MPlist *mplist_next (MPlist *plist);
282 extern MPlist *mplist_set (MPlist *plist, MSymbol key, void *val);
284 extern int mplist_length (MPlist *plist);
286 extern MSymbol mplist_key (MPlist *plist);
288 extern void *mplist_value (MPlist *plist);
290 /* (S1) Characters */
293 /*** @ingroup m17nCore */
294 /***en @defgroup m17nCharacter Character */
295 /***ja @defgroup m17nCharacter ʸ»ú */
298 #if !defined (FOR_DOXYGEN) || defined (DOXYGEN_INTERNAL_MODULE)
299 #define MCHAR_MAX 0x3FFFFF
300 /*#define MCHAR_MAX 0x7FFFFFFF*/
303 extern MSymbol Mscript;
304 extern MSymbol Mname;
305 extern MSymbol Mcategory;
306 extern MSymbol Mcombining_class;
307 extern MSymbol Mbidi_category;
308 extern MSymbol Msimple_case_folding;
309 extern MSymbol Mcomplicated_case_folding;
311 extern MSymbol mchar_define_property (const char *name, MSymbol type);
313 extern void *mchar_get_prop (int c, MSymbol key);
315 extern int mchar_put_prop (int c, MSymbol key, void *val);
317 /* (C3) Handling chartable */
319 /*** @ingroup m17nCore */
320 /***en @defgroup m17nChartable Chartable */
321 /***ja @defgroup m17nChartable ʸ»ú¥Æ¡¼¥Ö¥ë */
323 extern MSymbol Mchar_table;
326 @ingroup m17nChartable */
328 @brief Type of chartables.
330 The type #MCharTable is for a @e chartable objects. Its
331 internal structure is concealed from application programs. */
334 @brief ʸ»ú¥Æ¡¼¥Ö¥ë¤Î·¿Àë¸À.
336 #MCharTable ¤Ï @e ʸ»ú¥Æ¡¼¥Ö¥ë (chartable) ¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ç¤¢¤ë¡£
337 ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£ */
339 typedef struct MCharTable MCharTable;
342 extern MCharTable *mchartable (MSymbol key, void *default_value);
344 extern int mchartable_min_char (MCharTable *table);
346 extern int mchartable_max_char (MCharTable *table);
348 extern void *mchartable_lookup (MCharTable *table, int c);
350 extern int mchartable_set (MCharTable *table, int c, void *val);
352 extern int mchartable_set_range (MCharTable *table, int from, int to,
355 extern int mchartable_map (MCharTable *table, void *ignore,
356 void (*func) (int, int, void *, void *),
359 extern void mchartable_range (MCharTable *table, int *from, int *to);
361 extern MCharTable *mchar_get_prop_table (MSymbol key, MSymbol *type);
364 * (5) Handling M-text.
365 * "M" of M-text stands for:
371 /*** @ingroup m17nCore */
372 /***en @defgroup m17nMtext M-text */
373 /***ja @defgroup m17nMtext M-text */
377 * (5-1) M-text basics
380 /*** @ingroup m17nMtext */
382 @brief Type of @e M-texts.
384 The type #MText is for an @e M-text object. Its internal
385 structure is concealed from application programs. */
388 @brief @e MText ¤Î·¿Àë¸À.
390 #Mtext ¤Ï @e M-text ¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ç¤¢¤ë¡£
391 ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£
393 @latexonly \IPAlabel{MText} @endlatexonly
394 @latexonly \IPAlabel{MText->MPlist} @endlatexonly */
396 typedef struct MText MText;
400 /*** @ingroup m17nMtext */
402 @brief Enumeration for specifying the format of an M-text.
404 The enum #MTextFormat is used as an argument of the
405 mtext_from_data () function to specify the format of data from
406 which an M-text is created. */
409 @brief M-text ¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤ò»ØÄꤹ¤ëÎóµó·¿.
411 Îóµó·¿ #MTextFormat ¤Ï´Ø¿ô
412 mtext_from_data () ¤Î°ú¿ô¤È¤·¤ÆÍѤ¤¤é¤ì¡¢
413 M-text ¤òÀ¸À®¤¹¤ë¸µ¤È¤Ê¤ë¥Ç¡¼¥¿¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤ò»ØÄꤹ¤ë¡£ */
417 MTEXT_FORMAT_US_ASCII,
419 MTEXT_FORMAT_UTF_16LE,
420 MTEXT_FORMAT_UTF_16BE,
421 MTEXT_FORMAT_UTF_32LE,
422 MTEXT_FORMAT_UTF_32BE,
427 extern MText *mtext ();
429 extern void *mtext_data (MText *mt, enum MTextFormat *fmt, int *nunits,
430 int *pos_idx, int *unit_idx);
434 /***en @name Variables: Default Endian of UTF-16 and UTF-32 */
435 /***ja @name ÊÑ¿ô: UTF-16 ¤È UTF-32 ¤Î¥Ç¥Õ¥©¥ë¥È¤Î¥¨¥ó¥Ç¥£¥¢¥ó */
439 /*** @ingroup m17nMtext */
441 @brief Variable of value MTEXT_FORMAT_UTF_16LE or MTEXT_FORMAT_UTF_16BE.
443 The global variable #MTEXT_FORMAT_UTF_16 is initialized to
444 #MTEXT_FORMAT_UTF_16LE on a "Little Endian" system (storing words
445 with the least significant byte first), and to
446 #MTEXT_FORMAT_UTF_16BE on a "Big Endian" system (storing words
447 with the most significant byte first). */
450 @brief Ãͤ¬ MTEXT_FORMAT_UTF_16LE ¤« MTEXT_FORMAT_UTF_16BE ¤Ç¤¢¤ëÊÑ¿ô
452 Âç°èÊÑ¿ô #MTEXT_FORMAT_UTF_16 ¤Ï¥ê¥È¥ë¡¦¥¨¥ó¥Ç¥£¥¢¥ó¡¦¥·¥¹¥Æ¥à
453 ¡Ê¥ï¡¼¥É¤ò LSB (Least Significant Byte) ¤òÀè¤Ë¤·¤Æ³ÊǼ¡Ë¾å¤Ç¤Ï
454 #MTEXT_FORMAT_UTF_16LE ¤Ë½é´ü²½¤µ¤ì¡¢¥Ó¥Ã¥°¡¦¥¨¥ó¥Ç¥£¥¢¥ó¡¦¥·¥¹¥Æ¥à
455 ¡Ê¥ï¡¼¥É¤ò MSB (Most Significant Byte) ¤òÀè¤Ë¤·¤Æ³ÊǼ¡Ë¾å¤Ç¤Ï
456 #MTEXT_FORMAT_UTF_16BE ¤Ë½é´ü²½¤µ¤ì¤ë¡£ */
460 mtext_from_data () */
462 extern const enum MTextFormat MTEXT_FORMAT_UTF_16;
465 /*** @ingroup m17nMtext */
467 @brief Variable of value MTEXT_FORMAT_UTF_32LE or MTEXT_FORMAT_UTF_32BE.
469 The global variable #MTEXT_FORMAT_UTF_32 is initialized to
470 #MTEXT_FORMAT_UTF_32LE on a "Little Endian" system (storing words
471 with the least significant byte first), and to
472 #MTEXT_FORMAT_UTF_32BE on a "Big Endian" system (storing
473 words with the most significant byte first). */
476 @brief Ãͤ¬ MTEXT_FORMAT_UTF_32LE ¤« MTEXT_FORMAT_UTF_32BE ¤Ç¤¢¤ëÊÑ¿ô
478 Âç°èÊÑ¿ô #MTEXT_FORMAT_UTF_32 ¤Ï¥ê¥È¥ë¡¦¥¨¥ó¥Ç¥£¥¢¥ó¡¦¥·¥¹¥Æ¥à
479 ¡Ê¥ï¡¼¥É¤ò LSB (Least Significant Byte) ¤òÀè¤Ë¤·¤Æ³ÊǼ¡Ë¾å¤Ç¤Ï
480 #MTEXT_FORMAT_UTF_32LE ¤Ë½é´ü²½¤µ¤ì¡¢¥Ó¥Ã¥°¡¦¥¨¥ó¥Ç¥£¥¢¥ó¡¦¥·¥¹¥Æ¥à
481 ¡Ê¥ï¡¼¥É¤ò MSB (Most Significant Byte) ¤òÀè¤Ë¤·¤Æ³ÊǼ¡Ë¾å¤Ç¤Ï
482 #MTEXT_FORMAT_UTF_32BE ¤Ë½é´ü²½¤µ¤ì¤ë¡£ */
486 mtext_from_data () */
488 extern const int MTEXT_FORMAT_UTF_32;
494 extern MText *mtext_from_data (const void *data, int nitems,
495 enum MTextFormat format);
500 extern MSymbol Mlanguage;
503 * (5-2) Functions to manipulate M-texts. They correspond to string
504 * manipulating functions in libc.
505 * In the following functions, mtext_XXX() corresponds to strXXX().
508 extern int mtext_len (MText *mt);
510 extern int mtext_ref_char (MText *mt, int pos);
512 extern int mtext_set_char (MText *mt, int pos, int c);
514 extern MText *mtext_copy (MText *mt1, int pos, MText *mt2, int from, int to);
516 extern int mtext_compare (MText *mt1, int from1, int to1,
517 MText *mt2, int from2, int to2);
519 extern int mtext_case_compare (MText *mt1, int from1, int to1,
520 MText *mt2, int from2, int to2);
522 extern int mtext_character (MText *mt, int from, int to, int c);
524 extern int mtext_del (MText *mt, int from, int to);
526 extern int mtext_ins (MText *mt1, int pos, MText *mt2);
528 extern int mtext_insert (MText *mt1, int pos, MText *mt2, int from, int to);
530 extern int mtext_ins_char (MText *mt, int pos, int c, int n);
532 extern int mtext_replace (MText *mt1, int from1, int to1,
533 MText *mt2, int from2, int to2);
535 extern MText *mtext_cat_char (MText *mt, int c);
537 extern MText *mtext_duplicate (MText *mt, int from, int to);
539 extern MText *mtext_dup (MText *mt);
541 extern MText *mtext_cat (MText *mt1, MText *mt2);
543 extern MText *mtext_ncat (MText *mt1, MText *mt2, int n);
545 extern MText *mtext_cpy (MText *mt1, MText *mt2);
547 extern MText *mtext_ncpy (MText *mt1, MText *mt2, int n);
549 extern int mtext_chr (MText *mt, int c);
551 extern int mtext_rchr (MText *mt, int c);
553 extern int mtext_cmp (MText *mt1, MText *mt2);
555 extern int mtext_ncmp (MText *mt1, MText *mt2, int n);
557 extern int mtext_spn (MText *mt1, MText *mt2);
559 extern int mtext_cspn (MText *mt1, MText *mt2);
561 extern int mtext_pbrk (MText *mt1, MText *mt2);
563 extern int mtext_text (MText *mt1, int pos, MText *mt2);
565 extern int mtext_search (MText *mt1, int from, int to, MText *mt2);
567 extern MText *mtext_tok (MText *mt, MText *delim, int *pos);
569 extern int mtext_casecmp (MText *mt1, MText *mt2);
571 extern int mtext_ncasecmp (MText *mt1, MText *mt2, int n);
573 extern int mtext_lowercase (MText *mt);
575 extern int mtext_titlecase (MText *mt);
577 extern int mtext_uppercase (MText *mt);
580 @brief Enumeration for specifying a set of line breaking option.
582 The enum #MTextLineBreakOption is to control the line breaking
583 algorithm of the function mtext_line_break () by specifying
584 logical-or of the members in the arg @e option. */
586 enum MTextLineBreakOption
588 /***en Specify the legacy support for space character as base for
589 combining marks. See the section 8.3 of UAX#14. */
591 /***en Specify to use space characters for line breaking Korean
593 MTEXT_LBO_KOREAN_SP = 2,
594 /***en Specify to treat characters of ambiguous line-breaking
595 class as of ideographic line-breaking class. */
596 MTEXT_LBO_AI_AS_ID = 4,
600 extern int mtext_line_break (MText *mt, int pos, int option, int *after);
602 /*** @ingroup m17nPlist */
603 extern MPlist *mplist_deserialize (MText *mt);
606 * (5-3) Text properties
609 /*** @ingroup m17nCore */
610 /***en @defgroup m17nTextProperty Text Property */
611 /***ja @defgroup m17nTextProperty ¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£ */
613 /*** @ingroup m17nTextProperty */
615 @brief Flag bits to control text property.
617 The mtext_property () function accepts logical OR of these flag
618 bits as an argument. They control the behaviour of the created
619 text property as described in the documentation of each flag
623 @brief ¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤òÀ©¸æ¤¹¤ë¥Õ¥é¥°¥Ó¥Ã¥È.
625 ´Ø¿ô mtext_property () ¤Ï°Ê²¼¤Î¥Õ¥é¥°¥Ó¥Ã¥È¤ÎÏÀÍý
626 OR ¤ò°ú¿ô¤È¤·¤Æ¤È¤ë¤³¤È¤¬¤Ç¤¤ë¡£
627 ¥Õ¥é¥°¥Ó¥Ã¥È¤ÏÀ¸À®¤µ¤ì¤¿¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Î¿¶Éñ¤¤¤òÀ©¸æ¤¹¤ë¡£
628 ¾ÜºÙ¤Ï³Æ¥Õ¥é¥°¥Ó¥Ã¥È¤ÎÀâÌÀ¤ò»²¾È¡£*/
630 enum MTextPropertyControl
632 /***en If this flag bit is on, an M-text inserted at the start
633 position or at the middle of the text property inherits the
635 /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Î»Ï¤Þ¤ëÅÀ¤¢¤ë¤¤¤ÏÃæ´Ö¤ËÁÞÆþ¤µ¤ì¤¿
636 M-text ¤Ï¤³¤Î¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤ò·Ñ¾µ¤¹¤ë¡£
638 MTEXTPROP_FRONT_STICKY = 0x01,
640 /***en If this flag bit is on, an M-text inserted at the end
641 position or at the middle of the text property inherits the
643 /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Î½ª¤ï¤ëÅÀ¤¢¤ë¤¤¤ÏÃæ´Ö¤ËÁÞÆþ¤µ¤ì¤¿
644 M-text ¤Ï¤³¤Î¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤ò·Ñ¾µ¤¹¤ë¡£
646 MTEXTPROP_REAR_STICKY = 0x02,
648 /***en If this flag bit is on, the text property is removed if a
649 text in its region is modified. */
650 /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤ÎÈÏ°ÏÆâ¤Î¥Æ¥¥¹¥È¤¬Êѹ¹¤µ¤ì¤¿¾ì¹ç¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Ï¼è¤ê½ü¤«¤ì¤ë¡£ */
651 MTEXTPROP_VOLATILE_WEAK = 0x04,
653 /***en If this flag bit is on, the text property is removed if a
654 text or the other text property in its region is modified. */
655 /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤ÎÈÏ°ÏÆâ¤Î¥Æ¥¥¹¥È¤¢¤ë¤¤¤ÏÊ̤Υƥ¥¹¥È¥×¥í¥Ñ¥Æ¥£¤¬Êѹ¹¤µ¤ì¤¿¾ì¹ç¤³¤Î¥Æ¥
656 ¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Ï¼è¤ê½ü¤«¤ì¤ë¡£*/
657 MTEXTPROP_VOLATILE_STRONG = 0x08,
659 /***en If this flag bit is on, the text property is not
660 automatically merged with the others. */
661 /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Ï¾¤Î¥×¥í¥Ñ¥Æ¥£¤È¼«Æ°Åª¤Ë¤Ï¥Þ¡¼¥¸¤µ¤ì¤Ê¤¤¡£ */
662 MTEXTPROP_NO_MERGE = 0x10,
664 MTEXTPROP_CONTROL_MAX = 0x1F
668 extern MSymbol Mtext_prop_serializer;
669 extern MSymbol Mtext_prop_deserializer;
672 /*** @ingroup m17nTextProperty */
674 @brief Type of serializer functions.
676 This is the type of serializer functions. If the key of a symbol
677 property is #Mtext_prop_serializer, the value must be of this
681 mtext_serialize (), #Mtext_prop_serializer
684 @brief ¥·¥ê¥¢¥é¥¤¥¶´Ø¿ô¤Î·¿Àë¸À.
686 ¥·¥ê¥¢¥é¥¤¥¶´Ø¿ô¤Î·¿¤Ç¤¢¤ë¡£ ¤¢¤ë¥·¥ó¥Ü¥ë¤Î¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤¬ @c
687 #Mtext_prop_serializer ¤Ç¤¢¤ë¤È¤¡¢ ÃͤϤ³¤Î·¿¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
690 mtext_serialize (), #Mtext_prop_serializer
693 typedef MPlist *(*MTextPropSerializeFunc) (void *val);
695 /*** @ingroup m17nTextProperty */
697 @brief Type of deserializer functions.
699 This is the type of deserializer functions. If the key of a
700 symbol property is #Mtext_prop_deserializer, the value must be of
704 mtext_deserialize (), #Mtext_prop_deserializer
707 @brief ¥Ç¥·¥ê¥¢¥é¥¤¥¶´Ø¿ô¤Î·¿Àë¸À.
709 ¥Ç¥·¥ê¥¢¥é¥¤¥¶´Ø¿ô¤Î·¿¤Ç¤¢¤ë¡£ ¤¢¤ë¥·¥ó¥Ü¥ë¤Î¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤¬ @c
710 #Msymbol_prop_deserializer ¤Ç¤¢¤ë¤È¤¡¢ ÃͤϤ³¤Î·¿¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
713 Mtext_prop_deserialize (), Mtext_prop_deserializer
715 typedef void *(*MTextPropDeserializeFunc) (MPlist *plist);
717 extern void *mtext_get_prop (MText *mt, int pos, MSymbol key);
719 extern int mtext_get_prop_values (MText *mt, int pos, MSymbol key,
720 void **values, int num);
722 extern int mtext_get_prop_keys (MText *mt, int pos, MSymbol **keys);
724 extern int mtext_put_prop (MText *mt, int from, int to,
725 MSymbol key, void *val);
727 extern int mtext_put_prop_values (MText *mt, int from, int to,
728 MSymbol key, void **values, int num);
730 extern int mtext_push_prop (MText *mt, int from, int to,
731 MSymbol key, void *val);
733 extern int mtext_pop_prop (MText *mt, int from, int to,
736 extern int mtext_prop_range (MText *mt, MSymbol key, int pos,
737 int *from, int *to, int deeper);
741 @ingroup m17nTextProperty */
743 @brief Type of text properties.
745 The type #MTextProperty is for a @e text @e property objects. Its
746 internal structure is concealed from application programs. */
748 @brief @c ¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Î·¿Àë¸À.
750 #MTextProperty ¤Ï @e ¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£ ¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ç¤¢¤ë¡£
751 ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£ */
753 typedef struct MTextProperty MTextProperty;
757 extern MTextProperty *mtext_property (MSymbol key, void *val,
760 extern MText *mtext_property_mtext (MTextProperty *prop);
762 extern MSymbol mtext_property_key (MTextProperty *prop);
764 extern void *mtext_property_value (MTextProperty *prop);
766 extern int mtext_property_start (MTextProperty *prop);
768 extern int mtext_property_end (MTextProperty *prop);
770 extern MTextProperty *mtext_get_property (MText *mt, int pos, MSymbol key);
772 extern int mtext_get_properties (MText *mt, int pos, MSymbol key,
773 MTextProperty **props, int num);
775 extern int mtext_attach_property (MText *mt, int from, int to,
776 MTextProperty *prop);
778 extern int mtext_detach_property (MTextProperty *prop);
780 extern int mtext_push_property (MText *mt, int from, int to,
781 MTextProperty *prop);
783 extern MText *mtext_serialize (MText *mt, int from, int to,
784 MPlist *property_list);
786 extern MText *mtext_deserialize (MText *mt);
788 /*** @ingroup m17nCore */
789 /***en @defgroup m17nDatabase Database */
790 /***ja @defgroup m17nDatabase ¥Ç¡¼¥¿¥Ù¡¼¥¹ */
793 /* Directory of an application specific databases. */
794 extern char *mdatabase_dir;
797 @ingroup m17nDatabase */
799 @brief Type of database.
801 The type #MDatabase is for a database object. Its internal
802 structure is concealed from an application program. */
804 @brief ¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î·¿Àë¸À.
806 #MDatabase ·¿¤Ï¥Ç¡¼¥¿¥Ù¡¼¥¹¥ª¥Ö¥¸¥§¥¯¥ÈÍѤι½Â¤ÂΤǤ¢¤ë¡£
807 ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£
810 typedef struct MDatabase MDatabase;
814 /* Look for a data. */
815 extern MDatabase *mdatabase_find (MSymbol tag1, MSymbol tag2,
816 MSymbol tag3, MSymbol tag4);
818 extern MPlist *mdatabase_list (MSymbol tag0, MSymbol tag1,
819 MSymbol tag2, MSymbol tag3);
822 void *mdatabase_load (MDatabase *mdb);
824 /* Get tags of a data. */
825 extern MSymbol *mdatabase_tag (MDatabase *mdb);
828 extern MDatabase *mdatabase_define (MSymbol tag1, MSymbol tag2,
829 MSymbol tag3, MSymbol tag4,
830 void *(*loader) (MSymbol *, void *),
835 #endif /* _M17N_CORE_H_ */