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 ()
51 /***en @defgroup m17nCore CORE API */
52 /***ja @defgroup m17nCore ¥³¥¢ API */
54 /*** @ingroup m17nCore */
55 /***en @defgroup m17nObject Managed Object */
56 /***ja @defgroup m17nObject ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È */
59 /*** @ingroup m17nObject */
61 @brief The first member of a managed object.
63 When an application program defines a new structure for managed
64 objects, its first member must be of the type @c struct
65 #M17NObjectHead. Its contents are used by the m17n library, and
66 application programs should never touch them. */
68 @brief ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤ÎºÇ½é¤Î¥á¥ó¥Ð.
70 ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤¬¿·¤·¤¤¹½Â¤ÂΤò´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤È¤·¤Æ
71 ÄêµÁ¤¹¤ëºÝ¤Ë¤Ï¡¢ºÇ½é¤Î¥á¥ó¥Ð¤Ï @c #M17NObjectHead ¹½Â¤Âη¿¤Ç¤Ê¤¯
72 ¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£@c #M17NObjectHead ¤ÎÆâÍÆ¤Ï m17n ¥é¥¤¥Ö¥é¥ê¤¬»ÈÍѤ¹
73 ¤ë¤Î¤Ç¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤Ï¿¨¤ì¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
83 /* Return a newly allocated managed object. */
84 extern void *m17n_object_setup (int size, void (*freer) (void *));
86 /* Increment the reference count of managed object OBJECT. */
87 extern int m17n_object_ref (void *object);
89 /* Decrement the reference count of managed object OBJECT. */
90 extern int m17n_object_unref (void *object);
94 /* (C2) Symbol handling */
96 /*** @ingroup m17nCore */
97 /***en @defgroup m17nSymbol Symbol */
98 /***ja @defgroup m17nSymbol ¥·¥ó¥Ü¥ë */
102 @ingroup m17nSymbol */
104 @brief Type of symbols.
106 The type #MSymbol is for a @e symbol object. Its internal
107 structure is concealed from application programs. */
110 @brief ¥·¥ó¥Ü¥ë¤Î·¿Àë¸À.
112 #MSymbol ¤Ï¥·¥ó¥Ü¥ë¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ç¤¢¤ë¡£ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç
113 ¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£ */
115 typedef struct MSymbolStruct *MSymbol;
119 /* Predefined symbols. */
122 extern MSymbol Mstring;
123 extern MSymbol Msymbol;
124 extern MSymbol Mtext;
126 /* Return a symbol of name NAME. */
127 extern MSymbol msymbol (const char *name);
129 /* Return a managing key of name NAME. */
130 extern MSymbol msymbol_as_managing_key (const char *name);
132 /* Return a symbol of name NAME if it already exists. */
133 extern MSymbol msymbol_exist (const char *name);
135 /* Return the name of SYMBOL. */
136 extern char *msymbol_name (MSymbol symbol);
138 /* Give SYMBOL KEY property with value VALUE. */
139 extern int msymbol_put (MSymbol symbol, MSymbol key, void *val);
141 /*** Return KEY property value of SYMBOL. */
142 extern void *msymbol_get (MSymbol symbol, MSymbol key);
145 * (2-1) Property List
148 /*** @ingroup m17nCore */
149 /***en @defgroup m17nPlist Property List */
150 /***ja @defgroup m17nPlist ¥×¥í¥Ñ¥Æ¥£¥ê¥¹¥È */
154 @ingroup m17nPlist */
156 @brief Type of property list objects.
158 The type #MPlist is for a @e property @e list object. Its internal
159 structure is concealed from application programs. */
162 @brief ¥×¥í¥Ñ¥Æ¥£¥ê¥¹¥È¡¦¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿Àë¸À.
164 #MPlist ¤Ï @e ¥×¥í¥Ñ¥Æ¥£¥ê¥¹¥È (Property list) ¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ç¤¢¤ë¡£
165 ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£ */
167 typedef struct MPlist MPlist;
171 extern MSymbol Mplist, Minteger;
173 extern MPlist *mplist ();
175 extern MPlist *mplist_copy (MPlist *plist);
177 extern MPlist *mplist_add (MPlist *plist, MSymbol key, void *val);
179 extern MPlist *mplist_push (MPlist *plist, MSymbol key, void *val);
181 extern void *mplist_pop (MPlist *plist);
183 extern MPlist *mplist_put (MPlist *plist, MSymbol key, void *val);
185 extern void *mplist_get (MPlist *plist, MSymbol key);
187 extern MPlist *mplist_find_by_key (MPlist *plist, MSymbol key);
189 extern MPlist *mplist_find_by_value (MPlist *plist, void *val);
191 extern MPlist *mplist_next (MPlist *plist);
193 extern MPlist *mplist_set (MPlist *plist, MSymbol key, void *val);
195 extern int mplist_length (MPlist *plist);
197 extern MSymbol mplist_key (MPlist *plist);
199 extern void *mplist_value (MPlist *plist);
201 /* (S1) Characters */
204 /*** @ingroup m17nCore */
205 /***en @defgroup m17nCharacter Character */
206 /***ja @defgroup m17nCharacter ʸ»ú */
209 #define MCHAR_MAX 0x3FFFFF
210 /*#define MCHAR_MAX 0x7FFFFFFF*/
212 extern MSymbol Mscript;
213 extern MSymbol Mname;
214 extern MSymbol Mcategory;
215 extern MSymbol Mcombining_class;
216 extern MSymbol Mbidi_category;
217 extern MSymbol Msimple_case_folding;
218 extern MSymbol Mcomplicated_case_folding;
220 extern MSymbol mchar_define_property (const char *name, MSymbol type);
222 extern void *mchar_get_prop (int c, MSymbol key);
224 extern int mchar_put_prop (int c, MSymbol key, void *val);
226 /* (C3) Handling chartable */
228 /*** @ingroup m17nCore */
229 /***en @defgroup m17nChartable Chartable */
230 /***ja @defgroup m17nChartable ʸ»ú¥Æ¡¼¥Ö¥ë */
232 extern MSymbol Mchar_table;
235 @ingroup m17nChartable */
237 @brief Type of chartables.
239 The type #MCharTable is for a @e chartable objects. Its
240 internal structure is concealed from application programs. */
243 @brief ʸ»ú¥Æ¡¼¥Ö¥ë¤Î·¿Àë¸À.
245 #MCharTable ¤Ï @e ʸ»ú¥Æ¡¼¥Ö¥ë (chartable) ¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ç¤¢¤ë¡£
246 ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£ */
248 typedef struct MCharTable MCharTable;
251 extern MCharTable *mchartable (MSymbol key, void *default_value);
253 extern void *mchartable_lookup (MCharTable *table, int c);
255 extern int mchartable_set (MCharTable *table, int c, void *val);
257 extern int mchartable_set_range (MCharTable *table, int from, int to,
260 extern int mchartable_map (MCharTable *table, void *ignore,
261 void (*func) (int from, int to,
262 void *val, void *arg),
265 extern void mchartable_range (MCharTable *table, int *from, int *to);
268 * (5) Handling M-text.
269 * "M" of M-text stands for:
275 /*** @ingroup m17nCore */
276 /***en @defgroup m17nMtext M-text */
277 /***ja @defgroup m17nMtext M-text */
281 * (5-1) M-text basics
284 /*** @ingroup m17nMtext */
286 @brief Type of @e M-texts.
288 The type #MText is for an @e M-text object. Its internal
289 structure is concealed from application programs. */
292 @brief @e MText ¤Î·¿Àë¸À.
294 #Mtext ¤Ï @e M-text ¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ç¤¢¤ë¡£
295 ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£
297 @latexonly \IPAlabel{MText} @endlatexonly
298 @latexonly \IPAlabel{MText->MPlist} @endlatexonly */
300 typedef struct MText MText;
304 extern MText *mtext ();
309 @brief Enumeration for specifying the format of an M-text.
311 The enum #MTextFormat is used as an argument of the
312 mtext_from_data () function to specify the format of data from
313 which an M-text is created. */
316 @brief M-text ¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤ò»ØÄꤹ¤ëÎóµó·¿.
318 Îóµó·¿ #MTextFormat ¤Ï
319 ´Ø¿ô mtext_from_data () ¤Î°ú¿ô¤È¤·¤ÆÍѤ¤¤é¤ì¡¢
320 M-text ¤òÀ¸À®¤¹¤ë¸µ¤È¤Ê¤ë¥Ç¡¼¥¿¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤ò»ØÄꤹ¤ë¡£ */
324 MTEXT_FORMAT_US_ASCII,
326 MTEXT_FORMAT_UTF_16LE,
327 MTEXT_FORMAT_UTF_16BE,
328 MTEXT_FORMAT_UTF_32LE,
329 MTEXT_FORMAT_UTF_32BE,
334 extern const enum MTextFormat MTEXT_FORMAT_UTF_16;
335 extern const enum MTextFormat MTEXT_FORMAT_UTF_32;
339 extern MText *mtext_from_data (const void *data, int nitems,
340 enum MTextFormat format);
346 * (5-2) Functions to manipulate M-texts. They correspond to string
347 * manipulating functions in libc.
348 * In the following functions, mtext_XXX() corresponds to strXXX().
351 extern int mtext_len (MText *mt);
353 extern int mtext_ref_char (MText *mt, int pos);
355 extern int mtext_set_char (MText *mt, int pos, int c);
357 extern MText *mtext_copy (MText *mt1, int pos, MText *mt2, int from, int to);
359 extern int mtext_compare (MText *mt1, int from1, int to1,
360 MText *mt2, int from2, int to2);
362 extern int mtext_case_compare (MText *mt1, int from1, int to1,
363 MText *mt2, int from2, int to2);
365 extern int mtext_character (MText *mt, int from, int to, int c);
367 extern int mtext_del (MText *mt, int from, int to);
369 extern int mtext_ins (MText *mt1, int pos, MText *mt2);
371 extern int mtext_ins_char (MText *mt, int pos, int c, int n);
373 extern MText *mtext_cat_char (MText *mt, int c);
375 extern MText *mtext_duplicate (MText *mt, int from, int to);
377 extern MText *mtext_dup (MText *mt);
379 extern MText *mtext_cat (MText *mt1, MText *mt2);
381 extern MText *mtext_ncat (MText *mt1, MText *mt2, int n);
383 extern MText *mtext_cpy (MText *mt1, MText *mt2);
385 extern MText *mtext_ncpy (MText *mt1, MText *mt2, int n);
387 extern int mtext_chr (MText *mt, int c);
389 extern int mtext_rchr (MText *mt, int c);
391 extern int mtext_cmp (MText *mt1, MText *mt2);
393 extern int mtext_ncmp (MText *mt1, MText *mt2, int n);
395 extern int mtext_spn (MText *mt1, MText *mt2);
397 extern int mtext_cspn (MText *mt1, MText *mt2);
399 extern int mtext_pbrk (MText *mt1, MText *mt2);
401 extern int mtext_text (MText *mt1, int pos, MText *mt2);
403 extern int mtext_search (MText *mt1, int from, int to, MText *mt2);
405 extern MText *mtext_tok (MText *mt, MText *delim, int *pos);
407 extern int mtext_casecmp (MText *mt1, MText *mt2);
409 extern int mtext_ncasecmp (MText *mt1, MText *mt2, int n);
411 /*** @ingroup m17nPlist */
412 extern MPlist *mplist_deserialize (MText *mt);
415 * (5-3) Text properties
418 /*** @ingroup m17nCore */
419 /***en @defgroup m17nTextProperty Text Property */
420 /***ja @defgroup m17nTextProperty ¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£ */
422 /*** @ingroup m17nTextProperty */
424 @brief Flag bits to control text property.
426 The mtext_property () funciton accepts logical OR of these flag
427 bits as an argument. They control the behaviour of the created
428 text property as described in the documentation of each flag
432 @brief ¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤òÀ©¸æ¤¹¤ë¥Õ¥é¥°¥Ó¥Ã¥È.
434 ´Ø¿ô mtext_property () ¤Ï°Ê²¼¤Î¥Õ¥é¥°¥Ó¥Ã¥È¤ÎÏÀÍý OR ¤ò°ú¿ô¤È¤·¤Æ
435 ¤È¤ë¤³¤È¤¬¤Ç¤¤ë¡£¥Õ¥é¥°¥Ó¥Ã¥È¤ÏÀ¸À®¤µ¤ì¤¿¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Î¿¶Éñ
436 ¤¤¤òÀ©¸æ¤¹¤ë¡£¾ÜºÙ¤Ï³Æ¥Õ¥é¥°¥Ó¥Ã¥È¤ÎÀâÌÀ¤ò»²¾È¡£*/
438 enum MTextPropertyControl
440 /***en If this flag bit is on, an M-text inserted at the start
441 position or at the middle of the text property inherits the
443 /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Î»Ï¤Þ¤ëÅÀ¤¢
444 ¤ë¤¤¤ÏÃæ´Ö¤ËÁÞÆþ¤µ¤ì¤¿ M-text ¤Ï¤³¤Î¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤ò·Ñ¾µ¤¹¤ë¡£
446 MTEXTPROP_FRONT_STICKY = 0x01,
448 /***en If this flag bit is on, an M-text inserted at the end
449 position or at the middle of the text property inherits the
451 /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Î½ª¤ï¤ëÅÀ¤¢
452 ¤ë¤¤¤ÏÃæ´Ö¤ËÁÞÆþ¤µ¤ì¤¿ M-text ¤Ï¤³¤Î¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤ò·Ñ¾µ¤¹¤ë¡£
454 MTEXTPROP_REAR_STICKY = 0x02,
456 /***en If this flag bit is on, the text property is removed if a
457 text in its region is modified. */
458 /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤ÎÈÏ°ÏÆâ¤Î
459 ¥Æ¥¥¹¥È¤¬Êѹ¹¤µ¤ì¤¿¾ì¹ç¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Ï¼è¤ê½ü¤«¤ì¤ë¡£ */
460 MTEXTPROP_VOLATILE_WEAK = 0x04,
462 /***en If this flag bit is on, the text property is removed if a
463 text or the other text property in its region is modified. */
464 /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤ÎÈÏ°ÏÆâ¤Î
465 ¥Æ¥¥¹¥È¤¢¤ë¤¤¤ÏÊ̤Υƥ¥¹¥È¥×¥í¥Ñ¥Æ¥£¤¬Êѹ¹¤µ¤ì¤¿¾ì¹ç¤³¤Î¥Æ¥
466 ¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Ï¼è¤ê½ü¤«¤ì¤ë¡£*/
467 MTEXTPROP_VOLATILE_STRONG = 0x08,
469 /***en If this flag bit is on, the text property is not
470 automatically merged with the others. */
471 /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Ï¾¤Î¥×¥í¥Ñ
472 ¥Æ¥£¤È¼«Æ°Åª¤Ë¤Ï¥Þ¡¼¥¸¤µ¤ì¤Ê¤¤¡£ */
473 MTEXTPROP_NO_MERGE = 0x10,
475 MTEXTPROP_CONTROL_MAX = 0x1F
479 extern MSymbol Mtext_prop_serializer;
480 extern MSymbol Mtext_prop_deserializer;
483 /*** @ingroup m17nTextProperty */
485 @brief Type of serializer functions.
487 This is the type of serializer functions. If the key of a symbol
488 property is #Msymbol_prop_serializer, the value must be of this
491 @seealso Mtext_prop_serialize (), Mtext_prop_serializer
494 @brief ¥·¥ê¥¢¥é¥¤¥¶´Ø¿ô¤Î·¿Àë¸À.
496 ¥·¥ê¥¢¥é¥¤¥¶´Ø¿ô¤Î·¿¤Ç¤¢¤ë¡£ ¤¢¤ë¥·¥ó¥Ü¥ë¤Î¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤¬ @c
497 #Msymbol_prop_serializer ¤Ç¤¢¤ë¤È¤¡¢ ÃͤϤ³¤Î·¿¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
499 @seealso Mtext_prop_serialize (), Mtext_prop_serializer
502 typedef MPlist *(*MTextPropSerializeFunc) (void *val);
504 /*** @ingroup m17nTextProperty */
506 @brief Type of deserializer functions.
508 This is the type of deserializer functions. If the key of a
509 symbol property is #Msymbol_prop_deserializer, the value must be
512 @seealso Mtext_prop_deserialize (), Mtext_prop_deserializer
515 @brief ¥Ç¥·¥ê¥¢¥é¥¤¥¶´Ø¿ô¤Î·¿Àë¸À.
517 ¥Ç¥·¥ê¥¢¥é¥¤¥¶´Ø¿ô¤Î·¿¤Ç¤¢¤ë¡£ ¤¢¤ë¥·¥ó¥Ü¥ë¤Î¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤¬ @c
518 #Msymbol_prop_deserializer ¤Ç¤¢¤ë¤È¤¡¢ ÃͤϤ³¤Î·¿¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
520 @seealso Mtext_prop_deserialize (), Mtext_prop_deserializer
522 typedef void *(*MTextPropDeserializeFunc) (MPlist *plist);
524 extern void *mtext_get_prop (MText *mt, int pos, MSymbol key);
526 extern int mtext_get_prop_values (MText *mt, int pos, MSymbol key,
527 void **values, int num);
529 extern int mtext_get_prop_keys (MText *mt, int pos, MSymbol **keys);
531 extern int mtext_put_prop (MText *mt, int from, int to,
532 MSymbol key, void *val);
534 extern int mtext_put_prop_values (MText *mt, int from, int to,
535 MSymbol key, void **values, int num);
537 extern int mtext_push_prop (MText *mt, int from, int to,
538 MSymbol key, void *val);
540 extern int mtext_pop_prop (MText *mt, int from, int to,
543 extern int mtext_change_prop (MText *mt, int from, int to,
545 int (*func) (int, void ***, int *));
547 extern int mtext_prop_range (MText *mt, MSymbol key, int pos,
548 int *from, int *to, int deeper);
551 typedef struct MTextProperty MTextProperty;
555 extern MTextProperty *mtext_property (MSymbol key, void *val,
558 extern MText *mtext_property_mtext (MTextProperty *prop);
560 extern MSymbol mtext_property_key (MTextProperty *prop);
562 extern void *mtext_property_value (MTextProperty *prop);
564 extern int mtext_property_start (MTextProperty *prop);
566 extern int mtext_property_end (MTextProperty *prop);
568 extern MTextProperty *mtext_get_property (MText *mt, int pos, MSymbol key);
570 extern int mtext_get_properties (MText *mt, int pos, MSymbol key,
571 MTextProperty **props, int num);
573 extern int mtext_attach_property (MText *mt, int from, int to,
574 MTextProperty *prop);
576 extern int mtext_detach_property (MTextProperty *prop);
578 extern int mtext_push_property (MText *mt, int from, int to,
579 MTextProperty *prop);
581 extern MText *mtext_serialize (MText *mt, int from, int to,
582 MPlist *property_list);
584 extern MText *mtext_deserialize (MText *mt);
590 #endif /* _M17N_CORE_H_ */