Update FSF postal address.
[m17n/m17n-lib.git] / src / m17n-core.h
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
5
6    This file is part of the m17n library.
7
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.
12
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.
17
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,
21    02111-1307, USA.  */
22
23 #ifndef _M17N_CORE_H_
24 #define _M17N_CORE_H_
25
26 #ifdef __cplusplus
27 extern "C"
28 {
29 #endif
30
31 /*
32  * Header file for m17n library.
33  */
34
35 /* (C1) Introduction */
36
37 /***en @defgroup m17nIntro Introduction  */
38 /***ja @defgroup m17nIntro ¤Ï¤¸¤á¤Ë  */
39 /*=*/
40
41 #if !defined (FOR_DOXYGEN) || defined (DOXYGEN_INTERNAL_MODULE)
42
43 #define M17NLIB_MAJOR_VERSION 1
44 #define M17NLIB_MINOR_VERSION 3
45 #define M17NLIB_PATCH_LEVEL 3
46 #define M17NLIB_VERSION_NAME "1.3.3"
47
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 ()
52
53 #endif
54
55 /*=*/
56
57 /*** @ingroup m17nIntro */
58 /***en
59     @brief Enumeration for the status of the m17n library.
60
61     The enum #M17NStatus is used as a return value of the function
62     m17n_status ().  */
63
64 /***ja
65     @brief  m17n ¥é¥¤¥Ö¥é¥ê¤Î¾õÂÖ¤ò¼¨¤¹Îóµó·¿.
66
67     Îóµó·¿ #M17NStatus ¤Ï´Ø¿ô m17n_status () ¤ÎÌá¤êÃͤȤ·¤ÆÍѤ¤¤é¤ì¤ë¡£ */
68
69 enum M17NStatus
70   {
71     /***en No modules is initialized, and all modules are finalized.  */
72     M17N_NOT_INITIALIZED, 
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.  */
78     M17N_GUI_INITIALIZED
79   };
80
81 /*=*/
82
83 extern enum M17NStatus m17n_status (void);
84
85 /***en @defgroup m17nCore CORE API  */
86 /***ja @defgroup m17nCore ¥³¥¢ API */
87 /*=*/
88 /*** @ingroup m17nCore */
89 /***en @defgroup m17nObject Managed Object */
90 /***ja @defgroup m17nObject ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È */
91 /*=*/
92
93 /*** @ingroup m17nObject  */
94 /***en
95     @brief The first member of a managed object.
96
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.  */
101 /***ja
102     @brief ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤ÎºÇ½é¤Î¥á¥ó¥Ð.
103
104     ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤¬¿·¤·¤¤¹½Â¤ÂΤò´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤È¤·¤ÆÄêµÁ¤¹¤ëºÝ¤Ë¤Ï¡¢ºÇ½é¤Î¥á¥ó¥Ð¤Ï 
105     @c #M17NObjectHead ¹½Â¤Âη¿¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
106     @c #M17NObjectHead ¤ÎÆâÍƤϠm17n 
107     ¥é¥¤¥Ö¥é¥ê¤¬»ÈÍѤ¹¤ë¤Î¤Ç¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤Ï¿¨¤ì¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£    */
108
109 typedef struct
110 {
111   void *filler[2];
112 } M17NObjectHead;
113
114 /*=*/
115
116 /* Return a newly allocated managed object.  */
117 extern void *m17n_object (int size, void (*freer) (void *));
118
119 /* Increment the reference count of managed object OBJECT.  */
120 extern int m17n_object_ref (void *object);
121
122 /* Decrement the reference count of managed object OBJECT.  */
123 extern int m17n_object_unref (void *object);
124
125 /*=*/
126
127 /* (C2) Symbol handling */
128
129 /*** @ingroup m17nCore */
130 /***en @defgroup m17nSymbol Symbol  */
131 /***ja @defgroup m17nSymbol ¥·¥ó¥Ü¥ë */
132 /*=*/
133
134 /***
135     @ingroup m17nSymbol */
136 /***en
137     @brief Type of symbols.
138
139     The type #MSymbol is for a @e symbol object.  Its internal
140     structure is concealed from application programs.  */
141
142 /***ja
143     @brief ¥·¥ó¥Ü¥ë¤Î·¿Àë¸À.
144
145     #MSymbol ¤Ï @e ¥·¥ó¥Ü¥ë (symbol) ¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ç¤¢¤ë¡£
146     ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£  */
147
148 typedef struct MSymbolStruct *MSymbol;
149
150 /*=*/
151
152 /* Predefined symbols. */ 
153 extern MSymbol Mnil;
154 extern MSymbol Mt;
155 extern MSymbol Mstring;
156 extern MSymbol Msymbol;
157 extern MSymbol Mtext;
158
159 /* Return a symbol of name NAME.  */
160 extern MSymbol msymbol (const char *name);
161
162 /* Return a managing key of name NAME.  */
163 extern MSymbol msymbol_as_managing_key (const char *name);
164
165 /* Check if SYMBOL is a managing key.  */
166 extern int msymbol_is_managing_key (MSymbol symbol);
167
168 /* Return a symbol of name NAME if it already exists.  */
169 extern MSymbol msymbol_exist (const char *name);
170
171 /* Return the name of SYMBOL.  */
172 extern char *msymbol_name (MSymbol symbol);
173
174 /* Give SYMBOL KEY property with value VALUE.  */
175 extern int msymbol_put (MSymbol symbol, MSymbol key, void *val);
176
177 /*** Return KEY property value of SYMBOL.  */
178 extern void *msymbol_get (MSymbol symbol, MSymbol key);
179
180 /* 
181  *  (2-1) Property List
182  */
183 /*=*/
184 /*** @ingroup m17nCore */
185 /***en @defgroup m17nPlist Property List */
186 /***ja @defgroup m17nPlist ¥×¥í¥Ñ¥Æ¥£¥ê¥¹¥È */
187 /*=*/
188
189 /***
190     @ingroup m17nPlist */ 
191 /***en
192     @brief Type of property list objects.
193
194     The type #MPlist is for a @e property @e list object.  Its internal
195     structure is concealed from application programs.  */
196
197 /***ja
198     @brief ¥×¥í¥Ñ¥Æ¥£¥ê¥¹¥È¡¦¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿Àë¸À.
199
200     #MPlist ¤Ï @e ¥×¥í¥Ñ¥Æ¥£¥ê¥¹¥È (Property list) ¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ç¤¢¤ë¡£
201     ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£  */
202
203 typedef struct MPlist MPlist;
204
205 /*=*/
206
207 extern MSymbol Mplist, Minteger;
208
209 extern MPlist *mplist ();
210
211 extern MPlist *mplist_copy (MPlist *plist);
212
213 extern MPlist *mplist_add (MPlist *plist, MSymbol key, void *val);
214
215 extern MPlist *mplist_push (MPlist *plist, MSymbol key, void *val);
216
217 extern void *mplist_pop (MPlist *plist);
218
219 extern MPlist *mplist_put (MPlist *plist, MSymbol key, void *val);
220
221 extern void *mplist_get (MPlist *plist, MSymbol key);
222
223 extern MPlist *mplist_find_by_key (MPlist *plist, MSymbol key);
224
225 extern MPlist *mplist_find_by_value (MPlist *plist, void *val);
226
227 extern MPlist *mplist_next (MPlist *plist);
228
229 extern MPlist *mplist_set (MPlist *plist, MSymbol key, void *val);
230
231 extern int mplist_length (MPlist *plist);
232
233 extern MSymbol mplist_key (MPlist *plist);
234
235 extern void *mplist_value (MPlist *plist);
236
237 /* (S1) Characters */
238
239 /*=*/
240 /*** @ingroup m17nCore */
241 /***en @defgroup m17nCharacter Character */
242 /***ja @defgroup m17nCharacter Ê¸»ú */
243 /*=*/
244
245 #if !defined (FOR_DOXYGEN) || defined (DOXYGEN_INTERNAL_MODULE)
246 #define MCHAR_MAX 0x3FFFFF
247 /*#define MCHAR_MAX 0x7FFFFFFF*/
248 #endif
249
250 extern MSymbol Mscript;
251 extern MSymbol Mname;
252 extern MSymbol Mcategory;
253 extern MSymbol Mcombining_class;
254 extern MSymbol Mbidi_category;
255 extern MSymbol Msimple_case_folding;
256 extern MSymbol Mcomplicated_case_folding;
257
258 extern MSymbol mchar_define_property (const char *name, MSymbol type);
259
260 extern void *mchar_get_prop (int c, MSymbol key);
261
262 extern int mchar_put_prop (int c, MSymbol key, void *val);
263
264 /* (C3) Handling chartable */
265
266 /*** @ingroup m17nCore */
267 /***en @defgroup m17nChartable Chartable */
268 /***ja @defgroup m17nChartable Ê¸»ú¥Æ¡¼¥Ö¥ë */
269 /*=*/
270 extern MSymbol Mchar_table;
271
272 /***
273     @ingroup m17nChartable */
274 /***en
275     @brief Type of chartables.
276
277     The type #MCharTable is for a @e chartable objects.  Its
278     internal structure is concealed from application programs.  */
279
280 /***ja
281     @brief Ê¸»ú¥Æ¡¼¥Ö¥ë¤Î·¿Àë¸À.
282
283     #MCharTable ¤Ï @e Ê¸»ú¥Æ¡¼¥Ö¥ë (chartable) ¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ç¤¢¤ë¡£
284     ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£  */
285
286 typedef struct MCharTable MCharTable;
287 /*=*/
288
289 extern MCharTable *mchartable (MSymbol key, void *default_value);
290
291 extern void *mchartable_lookup (MCharTable *table, int c);
292
293 extern int mchartable_set (MCharTable *table, int c, void *val);
294
295 extern int mchartable_set_range (MCharTable *table, int from, int to,
296                                  void *val);
297
298 extern int mchartable_map (MCharTable *table, void *ignore,
299                            void (*func) (int, int, void *, void *), 
300                            void *func_arg);
301
302 extern void mchartable_range (MCharTable *table, int *from, int *to);
303
304 extern MCharTable *mchar_get_prop_table (MSymbol key, MSymbol *type);
305
306 /*
307  *  (5) Handling M-text.
308  *      "M" of M-text stands for:
309  *      o Multilingual
310  *      o Metamorphic
311  *      o More than string
312  */
313
314 /*** @ingroup m17nCore */
315 /***en @defgroup m17nMtext M-text */
316 /***ja @defgroup m17nMtext M-text */
317 /*=*/
318
319 /*
320  * (5-1) M-text basics
321  */
322 /*=*/
323 /*** @ingroup m17nMtext */
324 /***en
325     @brief Type of @e M-texts.
326
327     The type #MText is for an @e M-text object.  Its internal
328     structure is concealed from application programs.  */
329
330 /***ja
331     @brief @e MText ¤Î·¿Àë¸À.
332
333     #Mtext ¤Ï @e M-text ¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ç¤¢¤ë¡£
334     ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£ 
335
336     @latexonly \IPAlabel{MText} @endlatexonly
337     @latexonly \IPAlabel{MText->MPlist} @endlatexonly  */
338
339 typedef struct MText MText;
340
341 /*=*/
342
343 /*** @ingroup m17nMtext */
344 /***en
345     @brief Enumeration for specifying the format of an M-text.
346
347     The enum #MTextFormat is used as an argument of the
348     mtext_from_data () function to specify the format of data from
349     which an M-text is created.  */
350
351 /***ja
352     @brief M-text ¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤ò»ØÄꤹ¤ëÎóµó·¿.
353
354     Îóµó·¿ #MTextFormat ¤Ï´Ø¿ô
355     mtext_from_data () ¤Î°ú¿ô¤È¤·¤ÆÍѤ¤¤é¤ì¡¢
356     M-text ¤òÀ¸À®¤¹¤ë¸µ¤È¤Ê¤ë¥Ç¡¼¥¿¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤ò»ØÄꤹ¤ë¡£  */
357
358 enum MTextFormat
359   {
360     MTEXT_FORMAT_US_ASCII,
361     MTEXT_FORMAT_UTF_8,
362     MTEXT_FORMAT_UTF_16LE,
363     MTEXT_FORMAT_UTF_16BE,
364     MTEXT_FORMAT_UTF_32LE,
365     MTEXT_FORMAT_UTF_32BE,
366     MTEXT_FORMAT_MAX
367   };
368 /*=*/
369
370 extern MText *mtext ();
371
372 extern void *mtext_data (MText *mt, enum MTextFormat *fmt, int *nunits,
373                          int *pos_idx, int *unit_idx);
374
375 /*=*/
376
377 /***en @name Variables: Default Endian of UTF-16 and UTF-32 */
378 /***ja @name ÊÑ¿ô: UTF-16 ¤È UTF-32 ¤Î¥Ç¥Õ¥©¥ë¥È¤Î¥¨¥ó¥Ç¥£¥¢¥ó */
379 /*** @{ */
380 /*=*/
381
382 /*** @ingroup m17nMtext */
383 /***en
384     @brief Variable of value MTEXT_FORMAT_UTF_16LE or MTEXT_FORMAT_UTF_16BE.
385
386     The global variable #MTEXT_FORMAT_UTF_16 is initialized to
387     #MTEXT_FORMAT_UTF_16LE on a "Little Endian" system (storing words
388     with the least significant byte first), and to
389     #MTEXT_FORMAT_UTF_16BE on a "Big Endian" system (storing words
390     with the most significant byte first).  */
391
392 /***ja
393     @brief Ãͤ¬ MTEXT_FORMAT_UTF_16LE ¤« MTEXT_FORMAT_UTF_16BE ¤Ç¤¢¤ëÊÑ¿ô
394
395     Âç°èÊÑ¿ô #MTEXT_FORMAT_UTF_16 ¤Ï¥ê¥È¥ë¡¦¥¨¥ó¥Ç¥£¥¢¥ó¡¦¥·¥¹¥Æ¥à
396     ¡Ê¥ï¡¼¥É¤ò LSB (Least Significant Byte) ¤òÀè¤Ë¤·¤Æ³ÊǼ¡Ë¾å¤Ç¤Ï
397     #MTEXT_FORMAT_UTF_16LE ¤Ë½é´ü²½¤µ¤ì¡¢¥Ó¥Ã¥°¡¦¥¨¥ó¥Ç¥£¥¢¥ó¡¦¥·¥¹¥Æ¥à
398     ¡Ê¥ï¡¼¥É¤ò MSB (Most Significant Byte) ¤òÀè¤Ë¤·¤Æ³ÊǼ¡Ë¾å¤Ç¤Ï
399     #MTEXT_FORMAT_UTF_16BE ¤Ë½é´ü²½¤µ¤ì¤ë¡£  */
400
401 /***
402     @seealso
403     mtext_from_data ()  */
404
405 extern const enum MTextFormat MTEXT_FORMAT_UTF_16;
406 /*=*/
407
408 /*** @ingroup m17nMtext */
409 /***en
410     @brief Variable of value MTEXT_FORMAT_UTF_32LE or MTEXT_FORMAT_UTF_32BE.
411
412     The global variable #MTEXT_FORMAT_UTF_32 is initialized to
413     #MTEXT_FORMAT_UTF_32LE on a "Little Endian" system (storing words
414     with the least significant byte first), and to
415     #MTEXT_FORMAT_UTF_32BE on a "Big Endian" system (storing
416     words with the most significant byte first).  */
417
418 /***ja
419     @brief Ãͤ¬ MTEXT_FORMAT_UTF_32LE ¤« MTEXT_FORMAT_UTF_32BE ¤Ç¤¢¤ëÊÑ¿ô
420
421     Âç°èÊÑ¿ô #MTEXT_FORMAT_UTF_32 ¤Ï¥ê¥È¥ë¡¦¥¨¥ó¥Ç¥£¥¢¥ó¡¦¥·¥¹¥Æ¥à
422     ¡Ê¥ï¡¼¥É¤ò LSB (Least Significant Byte) ¤òÀè¤Ë¤·¤Æ³ÊǼ¡Ë¾å¤Ç¤Ï
423     #MTEXT_FORMAT_UTF_32LE ¤Ë½é´ü²½¤µ¤ì¡¢¥Ó¥Ã¥°¡¦¥¨¥ó¥Ç¥£¥¢¥ó¡¦¥·¥¹¥Æ¥à
424     ¡Ê¥ï¡¼¥É¤ò MSB (Most Significant Byte) ¤òÀè¤Ë¤·¤Æ³ÊǼ¡Ë¾å¤Ç¤Ï
425     #MTEXT_FORMAT_UTF_32BE ¤Ë½é´ü²½¤µ¤ì¤ë¡£  */
426
427 /***
428     @seealso
429     mtext_from_data ()  */
430
431 extern const int MTEXT_FORMAT_UTF_32;
432
433 /*=*/
434 /*** @} */
435 /*=*/
436
437 extern MText *mtext_from_data (const void *data, int nitems,
438                                enum MTextFormat format);
439
440 /*=*/
441 /*** @} */
442
443 extern MSymbol Mlanguage;
444
445 /*
446  *  (5-2) Functions to manipulate M-texts.  They correspond to string
447  *   manipulating functions in libc.
448  *   In the following functions, mtext_XXX() corresponds to strXXX().
449  */
450
451 extern int mtext_len (MText *mt);
452
453 extern int mtext_ref_char (MText *mt, int pos);
454
455 extern int mtext_set_char (MText *mt, int pos, int c);
456
457 extern MText *mtext_copy (MText *mt1, int pos, MText *mt2, int from, int to);
458
459 extern int mtext_compare (MText *mt1, int from1, int to1,
460                           MText *mt2, int from2, int to2);
461
462 extern int mtext_case_compare (MText *mt1, int from1, int to1,
463                                MText *mt2, int from2, int to2);
464
465 extern int mtext_character (MText *mt, int from, int to, int c);
466
467 extern int mtext_del (MText *mt, int from, int to);
468
469 extern int mtext_ins (MText *mt1, int pos, MText *mt2);
470
471 extern int mtext_insert (MText *mt1, int pos, MText *mt2, int from, int to);
472
473 extern int mtext_ins_char (MText *mt, int pos, int c, int n);
474
475 extern int mtext_replace (MText *mt1, int from1, int to1,
476                           MText *mt2, int from2, int to2);
477
478 extern MText *mtext_cat_char (MText *mt, int c);
479
480 extern MText *mtext_duplicate (MText *mt, int from, int to);
481
482 extern MText *mtext_dup (MText *mt);
483
484 extern MText *mtext_cat (MText *mt1, MText *mt2);
485
486 extern MText *mtext_ncat (MText *mt1, MText *mt2, int n);
487
488 extern MText *mtext_cpy (MText *mt1, MText *mt2);
489
490 extern MText *mtext_ncpy (MText *mt1, MText *mt2, int n);
491
492 extern int mtext_chr (MText *mt, int c);
493
494 extern int mtext_rchr (MText *mt, int c);
495
496 extern int mtext_cmp (MText *mt1, MText *mt2);
497
498 extern int mtext_ncmp (MText *mt1, MText *mt2, int n);
499
500 extern int mtext_spn (MText *mt1, MText *mt2);
501
502 extern int mtext_cspn (MText *mt1, MText *mt2);
503
504 extern int mtext_pbrk (MText *mt1, MText *mt2);
505
506 extern int mtext_text (MText *mt1, int pos, MText *mt2);
507
508 extern int mtext_search (MText *mt1, int from, int to, MText *mt2);
509
510 extern MText *mtext_tok (MText *mt, MText *delim, int *pos);
511
512 extern int mtext_casecmp (MText *mt1, MText *mt2);
513
514 extern int mtext_ncasecmp (MText *mt1, MText *mt2, int n);
515
516 extern int mtext_lowercase (MText *mt);
517
518 extern int mtext_titlecase (MText *mt);
519
520 extern int mtext_uppercase (MText *mt);
521
522 /***en
523     @brief Enumeration for specifying a set of line breaking option.
524
525     The enum #MTextLineBreakOption is to control the line breaking
526     algorithm of the function mtext_line_break () by specifying
527     logical-or of the members in the arg @e option.  */
528
529 enum MTextLineBreakOption
530   {
531     /***en Specify the legacy support for space character as base for
532        combining marks.  See the section 8.3 of UAX#14. */
533     MTEXT_LBO_SP_CM = 1,
534     /***en Specify to use space characters for line breaking Korean
535         text.  */
536     MTEXT_LBO_KOREAN_SP = 2,
537     /***en Specify to treat characters of ambiguous line-breaking
538         class as of ideographic line-breaking class.  */
539     MTEXT_LBO_AI_AS_ID = 4,
540     MTEXT_LBO_MAX
541   };
542
543 extern int mtext_line_break (MText *mt, int pos, int option, int *after);
544
545 /*** @ingroup m17nPlist */
546 extern MPlist *mplist_deserialize (MText *mt);
547
548 /*
549  * (5-3) Text properties
550  */
551 /*=*/
552 /*** @ingroup m17nCore */
553 /***en @defgroup m17nTextProperty Text Property */
554 /***ja @defgroup m17nTextProperty ¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£ */
555 /*=*/
556 /*** @ingroup m17nTextProperty */
557 /***en
558     @brief Flag bits to control text property.
559
560     The mtext_property () function accepts logical OR of these flag
561     bits as an argument.  They control the behaviour of the created
562     text property as described in the documentation of each flag
563     bit.  */
564
565 /***ja
566     @brief ¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤òÀ©¸æ¤¹¤ë¥Õ¥é¥°¥Ó¥Ã¥È.
567
568     ´Ø¿ô mtext_property () ¤Ï°Ê²¼¤Î¥Õ¥é¥°¥Ó¥Ã¥È¤ÎÏÀÍý
569     OR ¤ò°ú¿ô¤È¤·¤Æ¤È¤ë¤³¤È¤¬¤Ç¤­¤ë¡£
570     ¥Õ¥é¥°¥Ó¥Ã¥È¤ÏÀ¸À®¤µ¤ì¤¿¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Î¿¶Éñ¤¤¤òÀ©¸æ¤¹¤ë¡£
571     ¾ÜºÙ¤Ï³Æ¥Õ¥é¥°¥Ó¥Ã¥È¤ÎÀâÌÀ¤ò»²¾È¡£*/
572
573 enum MTextPropertyControl
574   {
575     /***en If this flag bit is on, an M-text inserted at the start
576         position or at the middle of the text property inherits the
577         text property.  */
578     /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Î»Ï¤Þ¤ëÅÀ¤¢¤ë¤¤¤ÏÃæ´Ö¤ËÁÞÆþ¤µ¤ì¤¿
579         M-text ¤Ï¤³¤Î¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤ò·Ñ¾µ¤¹¤ë¡£
580         */
581     MTEXTPROP_FRONT_STICKY = 0x01,
582
583     /***en If this flag bit is on, an M-text inserted at the end
584         position or at the middle of the text property inherits the
585         text property.  */
586     /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Î½ª¤ï¤ëÅÀ¤¢¤ë¤¤¤ÏÃæ´Ö¤ËÁÞÆþ¤µ¤ì¤¿
587         M-text ¤Ï¤³¤Î¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤ò·Ñ¾µ¤¹¤ë¡£
588         */
589     MTEXTPROP_REAR_STICKY = 0x02,
590
591     /***en If this flag bit is on, the text property is removed if a
592         text in its region is modified.  */
593     /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤ÎÈÏ°ÏÆâ¤Î¥Æ¥­¥¹¥È¤¬Êѹ¹¤µ¤ì¤¿¾ì¹ç¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Ï¼è¤ê½ü¤«¤ì¤ë¡£  */
594     MTEXTPROP_VOLATILE_WEAK = 0x04,
595
596     /***en If this flag bit is on, the text property is removed if a
597         text or the other text property in its region is modified.  */
598     /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤ÎÈÏ°ÏÆâ¤Î¥Æ¥­¥¹¥È¤¢¤ë¤¤¤ÏÊ̤Υƥ­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤¬Êѹ¹¤µ¤ì¤¿¾ì¹ç¤³¤Î¥Æ¥­
599         ¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Ï¼è¤ê½ü¤«¤ì¤ë¡£*/
600     MTEXTPROP_VOLATILE_STRONG = 0x08,
601
602     /***en If this flag bit is on, the text property is not
603         automatically merged with the others.  */
604     /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Ï¾¤Î¥×¥í¥Ñ¥Æ¥£¤È¼«Æ°Åª¤Ë¤Ï¥Þ¡¼¥¸¤µ¤ì¤Ê¤¤¡£ */
605     MTEXTPROP_NO_MERGE = 0x10,
606
607     MTEXTPROP_CONTROL_MAX = 0x1F
608   };
609
610 /*=*/
611 extern MSymbol Mtext_prop_serializer;
612 extern MSymbol Mtext_prop_deserializer;
613
614
615 /*** @ingroup m17nTextProperty */
616 /***en
617     @brief Type of serializer functions.
618
619     This is the type of serializer functions.  If the key of a symbol
620     property is #Mtext_prop_serializer, the value must be of this
621     type.
622
623     @seealso
624     mtext_serialize (), #Mtext_prop_serializer
625 */
626 /***ja
627     @brief ¥·¥ê¥¢¥é¥¤¥¶´Ø¿ô¤Î·¿Àë¸À.
628
629     ¥·¥ê¥¢¥é¥¤¥¶´Ø¿ô¤Î·¿¤Ç¤¢¤ë¡£ ¤¢¤ë¥·¥ó¥Ü¥ë¤Î¥×¥í¥Ñ¥Æ¥£¤Î¥­¡¼¤¬ @c
630     #Mtext_prop_serializer ¤Ç¤¢¤ë¤È¤­¡¢ ÃͤϤ³¤Î·¿¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
631
632     @seealso
633     mtext_serialize (), #Mtext_prop_serializer
634 */
635
636 typedef MPlist *(*MTextPropSerializeFunc) (void *val);
637
638 /*** @ingroup m17nTextProperty */
639 /***en
640     @brief Type of deserializer functions.
641
642     This is the type of deserializer functions.  If the key of a
643     symbol property is #Mtext_prop_deserializer, the value must be of
644     this type.
645
646     @seealso
647     mtext_deserialize (), #Mtext_prop_deserializer
648 */
649 /***ja
650     @brief ¥Ç¥·¥ê¥¢¥é¥¤¥¶´Ø¿ô¤Î·¿Àë¸À.
651
652     ¥Ç¥·¥ê¥¢¥é¥¤¥¶´Ø¿ô¤Î·¿¤Ç¤¢¤ë¡£ ¤¢¤ë¥·¥ó¥Ü¥ë¤Î¥×¥í¥Ñ¥Æ¥£¤Î¥­¡¼¤¬ @c
653     #Msymbol_prop_deserializer ¤Ç¤¢¤ë¤È¤­¡¢ ÃͤϤ³¤Î·¿¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
654
655     @seealso
656     Mtext_prop_deserialize (), Mtext_prop_deserializer
657 */
658 typedef void *(*MTextPropDeserializeFunc) (MPlist *plist);
659
660 extern void *mtext_get_prop (MText *mt, int pos, MSymbol key);
661
662 extern int mtext_get_prop_values (MText *mt, int pos, MSymbol key,
663                                   void **values, int num);
664
665 extern int mtext_get_prop_keys (MText *mt, int pos, MSymbol **keys);
666
667 extern int mtext_put_prop (MText *mt, int from, int to,
668                            MSymbol key, void *val);
669
670 extern int mtext_put_prop_values (MText *mt, int from, int to,
671                                   MSymbol key, void **values, int num);
672
673 extern int mtext_push_prop (MText *mt, int from, int to,
674                             MSymbol key, void *val);
675
676 extern int mtext_pop_prop (MText *mt, int from, int to,
677                            MSymbol key);
678
679 extern int mtext_prop_range (MText *mt, MSymbol key, int pos,
680                              int *from, int *to, int deeper);
681
682 /*=*/
683 /***
684     @ingroup m17nTextProperty */
685 /***en
686     @brief Type of text properties.
687
688     The type #MTextProperty is for a @e text @e property objects.  Its
689     internal structure is concealed from application programs.  */
690 /***ja
691     @brief @c ¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Î·¿Àë¸À.
692
693     #MTextProperty ¤Ï @e ¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£ ¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ç¤¢¤ë¡£
694     ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£  */
695
696 typedef struct MTextProperty MTextProperty;
697
698 /*=*/
699
700 extern MTextProperty *mtext_property (MSymbol key, void *val,
701                                       int control_bits);
702
703 extern MText *mtext_property_mtext (MTextProperty *prop);
704
705 extern MSymbol mtext_property_key (MTextProperty *prop);
706
707 extern void *mtext_property_value (MTextProperty *prop);
708
709 extern int mtext_property_start (MTextProperty *prop);
710
711 extern int mtext_property_end (MTextProperty *prop);
712
713 extern MTextProperty *mtext_get_property (MText *mt, int pos, MSymbol key);
714
715 extern int mtext_get_properties (MText *mt, int pos, MSymbol key,
716                                  MTextProperty **props, int num);
717
718 extern int mtext_attach_property (MText *mt, int from, int to,
719                                   MTextProperty *prop);
720
721 extern int mtext_detach_property (MTextProperty *prop);
722
723 extern int mtext_push_property (MText *mt, int from, int to,
724                                 MTextProperty *prop);
725
726 extern MText *mtext_serialize (MText *mt, int from, int to,
727                                MPlist *property_list);
728
729 extern MText *mtext_deserialize (MText *mt);
730
731 #ifdef __cplusplus
732 }
733 #endif
734
735 #endif /* _M17N_CORE_H_ */
736
737 /*
738   Local Variables:
739   coding: euc-japan
740   End:
741 */