1 /* m17n-core.c -- body of the CORE API.
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
25 @brief Introduction to the m17n library.
29 The API of the m17n library is divided into these four.
34 It provides basic modules to handle M-texts. They do not require
35 the m17n database. To use this API, an application program must
36 include <m17n-core.h> and be linked by -lm17n-core.
40 It provides modules that utilize the m17n database (code
41 conversion, character property, etc). They load various kinds of
42 data from the database on demand. To use this API, an application
43 program must include <m17n.h> and be linked by -lm17n-core -lm17n.
45 When you use this API, CORE API is also available.
49 It provides GUI modules such as drawing and inputting M-texts on a
50 graphic device. The API itself is independent on a graphic device
51 but most functions require an argument MFrame which is created for
52 a specific type of graphic device. Currently, a null device, X
53 Window System, and an image date (gdImagePtr) of GD library are
54 supported as a graphic device.
56 On a frame of the null device, you can't draw text nor use an
57 input method (but, for instance, the funciton mdraw_glyph_list ()
60 On a frame of the X Window System, you can use the whole GUI API.
62 On a frame of GD library, you can use all drawing API but can't
65 To use this device, an application program must include
66 <m17n-gui.h> and be linked by -lm17n-core -lm17n -lm17n-gui.
68 When you use this API, CORE and SHELL API are also available.
72 It provides miscellaneous functions to support error handling and
73 debugging. This API cannot be used by itself, but with one or
74 more APIs listed above. To use the API, an application program
75 must include <m17n-misc.h> in addition to one of a header file
80 See also the section @ref m17n-config "m17n-config(1)".
82 <em>ENVIRONMENT VARIABLE</em>
84 The m17n library pays attention to these environment variables.
89 Name of a directory that contains data of the m17n database. See
90 @ref m17nDatabase for more details.
94 Environment variables whose name start by "MDEBUG_" controls
95 printing of debug information. See @ref m17nDebug for more
100 <em>API NAMING CONVENTION</em>
102 The library exports functions, variables, macros, and types. All
103 of them start by the letter 'm' or 'M' followed by an object name
104 (e.g. "symbol" and "plist", but "mtext" object is given the name
105 "text" to avoid double 'm' at the head) or a module name
110 <li> functions -- mobject () or mobject_xxx ()
112 They start with 'm' followed by lower case object name. For
113 example, msymbol (), mtext_ref_char (), mdraw_text ().
115 <li> non-symbol variables -- mobject, or mobject_xxx
117 The naming convention is the same as functions (e.g. mface_large).
119 <li> symbol variables -- Mname
121 Variables of type MSymbol start with 'M' followed by their names
122 (e.g. Mlanguage (name is "language"), Miso_2022 (name is
125 <li> macros -- MOBJECT_XXX
127 They start by 'M' followed by upper case object names.
129 <li> types -- MObject or MObjectXxx
131 They start by 'M' followed by capitalized object names (e.g.
132 MConverter, MInputDriver).
139 @addtogroup m17nIntro
140 @brief m17n ¥é¥¤¥Ö¥é¥ê ¥¤¥ó¥È¥í¥À¥¯¥·¥ç¥ó.
144 m17n ¥é¥¤¥Ö¥é¥ê¤Î API ¤Ï°Ê²¼¤Î£´¼ï¤ËʬÎव¤ì¤Æ¤¤¤ë¡£
149 M-text ¤ò°·¤¦¤¿¤á¤Î´ðËÜŪ¤Ê¥â¥¸¥å¡¼¥ë¤òÄ󶡤¹¤ë¡£¤³¤ÎʬÎà¤Î API ¤Ï
150 m17n ¥Ç¡¼¥¿¥Ù¡¼¥¹¤òɬÍפȤ·¤Ê¤¤¡£ÍøÍѤ¹¤ë¤¿¤á¤Ë¤Ï¡¢¥¢¥×¥ê¥±¡¼¥·¥ç
151 ¥ó¥×¥í¥°¥é¥à¤Ï<m17n-core.h> ¤ò include ¤·¡¢ -lm17n-core ¤Ç¥ê¥ó¥¯¤µ
156 m17n ¥Ç¡¼¥¿¥Ù¡¼¥¹¤òÍøÍѤ¹¤ë¥â¥¸¥å¡¼¥ë¡Ê¥³¡¼¥ÉÊÑ´¹¡¢Ê¸»ú¥×¥í¥Ñ¥Æ¥£
157 Åù¡Ë¤òÄ󶡤¹¤ë¡£¥â¥¸¥å¡¼¥ë¤Ï¥Ç¡¼¥¿¥Ù¡¼¥¹¤«¤éɬÍפ˱þ¤¸¤Æ¿Íͤʥǡ¼
158 ¥¿¤ò¥í¡¼¥É¤¹¤ë¡£ÍøÍѤ¹¤ë¤¿¤á¤Ë¤Ï¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤Ï
159 <m17n.h> ¤ò include ¤·¡¢ -lm17n-core -lm17n ¤Ç¥ê¥ó¥¯¤µ¤ì¤Ê¤¯¤Æ¤Ï¤Ê
162 ¤³¤Î API ¤ò»ÈÍѤ¹¤ëºÝ¤Ë¤Ï¥³¥¢ API ¤â»ÈÍѤǤ¤ë¡£
166 M-texts ¤ò¥°¥é¥Õ¥£¥Ã¥¯¥Ç¥Ð¥¤¥¹¾å¤Çɽ¼¨¤·¤¿¤êÆþÎϤ·¤¿¤ê¤¹¤ë¤È¤¤¤Ã¤¿¡¢
167 ¥°¥é¥Õ¥£¥Ã¥¯¥æ¡¼¥¶¥¤¥ó¥¿¥Õ¥§¡¼¥¹¥â¥¸¥å¡¼¥ë¤òÄ󶡤¹¤ë¡£API ¼«ÂΤϥ°
168 ¥é¥Õ¥£¥Ã¥¯¥Ç¥Ð¥¤¥¹¤È¤ÏÆÈΩ¤Ç¤¢¤ë¤¬¡¢Â¿¤¯¤Î´Ø¿ô¤ÏÆÃÄê¤Î¥°¥é¥Õ¥£¥Ã¥¯
169 ¥Ç¥Ð¥¤¥¹¾å¤ËºîÀ®¤µ¤ì¤¿ MFrame ¤ò°ú¿ô¤Ë¼è¤ë¡£¸½»þÅÀ¤Ç¤Ï¡¢¥Ì¥ë¥Ç¥Ð¥¤
170 ¥¹¡¢X ¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¡¢GD ¥é¥¤¥Ö¥é¥ê¤Î¥¤¥á¡¼¥¸¡ÊgdImagePtr¡Ë¡¢¤¬
171 ¥°¥é¥Õ¥£¥Ã¥¯¥Ç¥Ð¥¤¥¹¤È¤·¤Æ¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ë¡£
173 ¥Ì¥ë¥Ç¥Ð¥¤¥¹¾å¤Ç¤Ïɽ¼¨¤âÆþÎϤâ¤Ç¤¤Ê¤¤¡Ê¤¿¤À¤·¤¿¤È¤¨¤Ð
174 mdraw_glyph_list () ¤Ê¤É¤Î´Ø¿ô¤Ï»ÈÍѲÄǽ¡Ë¡£
176 X ¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¾å¤Ç¤Ï¤¹¤Ù¤Æ¤Î GUI API ¤¬»È¤¨¤ë¡£
178 GD ¥é¥¤¥Ö¥é¥ê¤Î¥¤¥á¡¼¥¸¾å¤Ç¤Ï¡¢ÉÁ²èÍѤΠAPI ¤Ï¤¹¤Ù¤Æ»È¤¨¤ë¤¬ÆþÎϤÏ
181 ¤³¤Î¥Ç¥Ð¥¤¥¹¤ò»ÈÍѤ¹¤ë¤¿¤á¤Ë¤Ï¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤Ï
182 <m17n-gui.h> ¤ò include ¤·¡¢-lm17n-core -lm17n -lm17n-gui ¤Ç¥ê¥ó¥¯
183 ¤µ¤ì¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
185 ¤³¤Î API ¤ò»ÈÍѤ¹¤ëºÝ¤Ë¤Ï¡¢¥³¥¢ API ¤È¥·¥§¥ë API ¤â»ÈÍѤǤ¤ë¡£
189 ¥¨¥é¡¼½èÍý¡¢¥Ç¥Ð¥Ã¥°ÍѤΤ½¤Î¾¤Î´Ø¿ô¤òÄ󶡤¹¤ë¡£¤³¤Î API ¤Ï¤½¤ì¤À¤±
190 ¤Ç¤Ï»ÈÍѤǤ¤º¡¢¾åµ¤Î¾¤Î¤â¤Î¤È¶¦¤Ë»È¤¦¡£ÍøÍѤ¹¤ë¤¿¤á¤Ë¤Ï¡¢¾åµ¤Î
191 ¤¤¤º¤ì¤«¤Î include ¥Õ¥¡¥¤¥ë¤Ë²Ã¤¨¤Æ¡¢ <m17n-misc.h> ¤ò include ¤·¤Ê
196 @ref m17n-config "m17n-config(1)" Àá¤â»²¾È¡£
200 m17n ¥é¥¤¥Ö¥é¥ê¤Ï¼¡¤Î´Ä¶ÊÑ¿ô¤ò¹Íθ¤¹¤ë¡£
205 m17n ¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î¥Ç¡¼¥¿¤ò´Þ¤à¥Ç¥£¥ì¥¯¥È¥ê¤Î̾Á°¡£¾ÜºÙ¤Ï@ref
210 "MDEBUG_" ¤Ç»Ï¤Þ¤ë̾Á°¤ò»ý¤Ä´Ä¶ÊÑ¿ô¤Ï¥Ç¥Ð¥Ã¥°¾ðÊó¤òÀ©¸æ¤¹¤ë¡£¾ÜºÙ
211 ¤Ï@ref m17nDebug »²¾È¡£
215 @em API @em ¤Î̿̾µ¬Â§ ¥³¥Þ¥ó¥É
217 ¥é¥¤¥Ö¥é¥ê¤Ï¡¢´Ø¿ô¡¢ÊÑ¿ô¡¢¥Þ¥¯¥í¡¢·¿¤ò export ¤¹¤ë¡£¤½¤ì¤é¤Ï'm' ¤Þ
218 ¤¿¤Ï 'M' ¤Î¤¢¤È¤Ë¥ª¥Ö¥¸¥§¥¯¥È̾("symbol" ¤ä "plist" ¤Ê¤É¡£¤¿¤À¤·
219 "mtext" ¥ª¥Ö¥¸¥§¥¯¥È¤Ï¤Ï¤¸¤á¤Î 'm' ¤Î½ÅÊ£¤òÈò¤±¤ë¤¿¤á "text" ¤òÍÑ
220 ¤¤¤ë¡£) ¤Þ¤¿¤Ï¥â¥¸¥å¡¼¥ë̾(draw, input ¤Ê¤É) ¤ò³¤±¤¿¤â¤Î¤Ç¤¢¤ë¡£
224 <li> ´Ø¿ô -- mobject () ¤Þ¤¿¤Ï mobject_xxx ()
226 'm' ¤Î¤¢¤È¤Ë¾®Ê¸»ú¤Ç¥ª¥Ö¥¸¥§¥¯¥È̾¤¬Â³¤¯¡£¤¿¤È¤¨¤Ð¡¢msymbol (),
227 mtext_ref_char (), mdraw_text () ¤Ê¤É¡£
229 <li> ¥·¥ó¥Ü¥ë¤Ç¤Ê¤¤ÊÑ¿ô -- mobject, ¤Þ¤¿¤Ï mobject_xxx
231 ´Ø¿ô¤ÈƱ¤¸Ì¿Ì¾µ¬Â§¤Ë½¾¤¦¡£(¤¿¤È¤¨¤Ð mface_large)
233 <li> ¥·¥ó¥Ü¥ëÊÑ¿ô -- Mname
235 MSymbol ·¿ÊÑ¿ô¤Ï¡¢'M' ¤Î¸å¤Ë̾Á°¤¬Â³¤¯¡£¤¿¤È¤¨¤Ð Mlanguage (̾Á°¤Ï
236 "language"), Miso_2022 (̾Á°¤Ï"iso-2022")¤Ê¤É¡£
238 <li> ¥Þ¥¯¥í -- MOBJECT_XXX
240 'M' ¤Î¸å¤ËÂçʸ»ú¤Ç¥ª¥Ö¥¸¥§¥¯¥È̾¤¬Â³¤¯¡£
242 <li> ¥¿¥¤¥× -- MObject ¤Þ¤¿¤Ï MObjectXxx
244 'M' ¤Î¸å¤ËÂçʸ»ú¤Ç»Ï¤á¤Æ¥ª¥Ö¥¸¥§¥¯¥È̾¤ò¤¬Â³¤¯¡£ (¤¿¤È¤¨¤Ð
245 MConverter, MInputDriver)
254 The #M17NLIB_MAJOR_VERSION macro gives the major version number
255 of the m17n library. */
258 ¥Þ¥¯¥í #M17NLIB_MAJOR_VERSION ¤Ï m17n ¥é¥¤¥Ö¥é¥ê¤Î¥á¥¸¥ã¡¼¥Ð¡¼¥¸¥ç
261 #define M17NLIB_MAJOR_VERSION
266 The #M17NLIB_MINOR_VERSION macro gives the minor version number
267 of the m17n library. */
270 ¥Þ¥¯¥í #M17NLIB_MINOR_VERSION ¤Ï m17n ¥é¥¤¥Ö¥é¥ê¤Î¥Þ¥¤¥Ê¡¼¥Ð¡¼¥¸¥ç
273 #define M17NLIB_MINOR_VERSION
278 The #M17NLIB_PATCH_LEVEL macro gives the patch level number
279 of the m17n library. */
282 ¥Þ¥¯¥í #M17NLIB_PATCH_LEVEL ¤Ï m17n ¥é¥¤¥Ö¥é¥ê¤Î¥Ñ¥Ã¥Á¥ì¥Ù¥ëÈÖ¹æ¤ò
285 #define M17NLIB_PATCH_LEVEL
290 The #M17NLIB_VERSION_NAME macro gives the version name of the
291 m17n library as a string. */
294 ¥Þ¥¯¥í #M17NLIB_VERSION_NAME ¤Ï m17n ¥é¥¤¥Ö¥é¥ê¤Î¥Ð¡¼¥¸¥ç¥ó̾¤ò
295 ʸ»úÎó¤È¤·¤ÆÍ¿¤¨¤ë¡£ */
297 #define M17NLIB_VERSION_NAME
302 @brief Initialize the m17n library.
304 The macro M17N_INIT () initializes the m17n library. This macro
305 must be called before any m17n functions are used.
307 It is safe to call this macro multiple times, but in that case,
308 the macro M17N_FINI () must be called the same times to free the
311 If the initialization was successful, the external variable
312 #merror_code is set to 0. Otherwise it is set to -1.
315 M17N_FINI (), m17n_status () */
318 @brief m17n ¥é¥¤¥Ö¥é¥ê¤ò½é´ü²½¤¹¤ë.
320 ¥Þ¥¯¥í M17N_INIT () ¤Ï m17n ¥é¥¤¥Ö¥é¥ê¤ò½é´ü²½¤¹¤ë¡£m17n ¤Î´Ø¿ô¤ò
321 ÍøÍѤ¹¤ëÁ°¤Ë¡¢¤³¤Î¥Þ¥¯¥í¤ò¤Þ¤º¸Æ¤Ð¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
323 ¤³¤Î¥Þ¥¯¥í¤òÊ£¿ô²ó¸Æ¤ó¤Ç¤â°ÂÁ´¤Ç¤¢¤ë¤¬¡¢¤½¤Î¾ì¹ç¥á¥â¥ê¤ò²òÊü¤¹¤ë¤¿
324 ¤á¤Ë¥Þ¥¯¥í M17N_FINI () ¤òƱ¤¸²ó¿ô¸Æ¤ÖɬÍפ¬¤¢¤ë¡£
326 ³°ÉôÊÑ¿ô #merror_code ¤Ï¡¢½é´ü²½¤¬À®¸ù¤¹¤ì¤Ð 0 ¤Ë¡¢¤½¤¦¤Ç¤Ê¤±¤ì¤Ð
330 M17N_FINI (), m17n_status () */
337 @brief Finalize the m17n library.
339 The macro M17N_FINI () finalizes the m17n library. It frees all the
340 memory area used by the m17n library. Once this macro is
341 called, no m17n functions should be used until the
342 macro M17N_INIT () is called again.
344 If the macro M17N_INIT () was called N times, the Nth call of this
345 macro actually free the memory.
348 M17N_INIT (), m17n_status () */
350 @brief m17n ¥é¥¤¥Ö¥é¥ê¤ò½ªÎ»¤¹¤ë.
352 ¥Þ¥¯¥í M17N_FINI () ¤Ï m17n ¥é¥¤¥Ö¥é¥ê¤ò½ªÎ»¤¹¤ë¡£m17n ¥é¥¤¥Ö¥é¥ê
353 ¤¬»È¤Ã¤¿Á´¤Æ¤Î¥á¥â¥êÎΰè¤Ï²òÊü¤µ¤ì¤ë¡£°ìÅÙ¤³¤Î¥Þ¥¯¥í¤¬¸Æ¤Ð¤ì¤¿¤é¡¢
354 ¥Þ¥¯¥í M17N_INIT () ¤¬ºÆÅٸƤФì¤ë¤Þ¤Ç m17n ´Ø¿ô¤Ï»È¤¦¤Ù¤¤Ç¤Ê¤¤¡£
356 ¥Þ¥¯¥í M17N_INIT () ¤¬ N ²ó¸Æ¤Ð¤ì¤Æ¤¤¤¿¾ì¹ç¤Ë¤Ï¡¢¤³¤Î¥Þ¥¯¥í¤¬ N ²ó
357 ¸Æ¤Ð¤ì¤Æ½é¤á¤Æ¥á¥â¥ê¤¬²òÊü¤µ¤ì¤ë¡£
360 M17N_INIT (), m17n_status () */
363 #endif /* FOR_DOXYGEN */
368 #if !defined (FOR_DOXYGEN) || defined (DOXYGEN_INTERNAL_MODULE)
369 /*** @addtogroup m17nInternal
375 #include <sys/time.h>
376 #include <sys/resource.h>
379 #include "m17n-core.h"
380 #include "m17n-misc.h"
381 #include "internal.h"
384 default_error_handler (enum MErrorCode err)
389 static struct timeval time_stack[16];
390 static int time_stack_index;
392 static int report_header_printed;
397 int m17n__core_initialized;
398 int m17n__shell_initialized;
399 int m17n__gui_initialized;
402 mdebug__report_object (char *name, M17NObjectArray *array)
404 if (! (mdebug__flag & MDEBUG_FINI))
406 if (! report_header_printed)
408 fprintf (stderr, "%16s %7s %7s %7s\n",
409 "object", "created", "freed", "alive");
410 fprintf (stderr, "%16s %7s %7s %7s\n",
411 "------", "-------", "-----", "-----");
412 report_header_printed = 1;
414 fprintf (stderr, "%16s %7d %7d %7d\n", name,
415 array->used, array->used - array->count, array->count);
418 free (array->objects);
419 array->count = array->used = 0;
424 void *(*mdatabase__finder) (MSymbol tag1, MSymbol tag2,
425 MSymbol tag3, MSymbol tag4);
426 void *(*mdatabase__loader) (void *);
435 gettimeofday (time_stack + time_stack_index++, &tz);
445 mdebug__print_time ()
451 gettimeofday (&tv, &tz);
452 diff = ((tv.tv_sec - time_stack[time_stack_index - 1].tv_sec) * 1000000
453 + (tv.tv_usec - time_stack[time_stack_index - 1].tv_usec));
454 fprintf (stderr, "%8ld ms.", diff);
455 time_stack[time_stack_index - 1] = tv;
458 #define SET_DEBUG_FLAG(env_name, mask) \
460 char *env_value = getenv (env_name); \
462 if (env_value && env_value[0] == '1') \
463 mdebug__flag |= (mask); \
468 mdebug__register_object (M17NObjectArray *array, void *object)
470 if (array->used == 0)
471 MLIST_INIT1 (array, objects, 256);
473 MLIST_APPEND1 (array, objects, object, MERROR_OBJECT);
477 mdebug__unregister_object (M17NObjectArray *array, void *object)
480 if (array->count >= 0)
484 while (i < array->used && array->objects[i] != object) i++;
486 array->objects[i] = NULL;
497 /* The following two are actually not exposed to a user but concealed
498 by the macro M17N_INIT (). */
501 m17n_init_core (void)
503 int mdebug_mask = MDEBUG_INIT;
505 if (m17n__core_initialized++)
508 merror_code = MERROR_NONE;
509 m17n_memory_full_handler = default_error_handler;
512 SET_DEBUG_FLAG ("MDEBUG_INIT", MDEBUG_INIT);
513 SET_DEBUG_FLAG ("MDEBUG_FINI", MDEBUG_FINI);
514 SET_DEBUG_FLAG ("MDEBUG_CHARSET", MDEBUG_CHARSET);
515 SET_DEBUG_FLAG ("MDEBUG_CODING", MDEBUG_CODING);
516 SET_DEBUG_FLAG ("MDEBUG_DATABASE", MDEBUG_DATABASE);
517 SET_DEBUG_FLAG ("MDEBUG_FONT", MDEBUG_FONT);
518 SET_DEBUG_FLAG ("MDEBUG_FONT_FLT", MDEBUG_FONT_FLT);
519 SET_DEBUG_FLAG ("MDEBUG_FONT_OTF", MDEBUG_FONT_OTF);
520 SET_DEBUG_FLAG ("MDEBUG_INPUT", MDEBUG_INPUT);
524 if (msymbol__init () < 0)
526 MDEBUG_PRINT_TIME ("INIT", (stderr, " to initialize symbol module."));
527 if (mplist__init () < 0)
529 MDEBUG_PRINT_TIME ("INIT", (stderr, " to initialize plist module."));
530 if (mtext__init () < 0)
532 if (mtext__prop_init () < 0)
534 MDEBUG_PRINT_TIME ("INIT", (stderr, " to initialize mtext module."));
535 if (mchartable__init () < 0)
537 MDEBUG_PRINT_TIME ("INIT", (stderr, " to initialize chartable module."));
539 mdatabase__finder = NULL;
540 mdatabase__loader = NULL;
544 MDEBUG_PRINT_TIME ("INIT", (stderr, " to initialize the core modules."));
549 m17n_fini_core (void)
551 int mdebug_mask = MDEBUG_FINI;
553 if (m17n__core_initialized == 0
554 || --m17n__core_initialized > 0)
559 MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize chartable module."));
561 MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize textprop module."));
563 MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize mtext module."));
565 MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize symbol module."));
567 MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize plist module."));
570 MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize the core modules."));
572 report_header_printed = 0;
576 #endif /* !FOR_DOXYGEN || DOXYGEN_INTERNAL_MODULE */
579 /*** @addtogroup m17nIntro */
585 @brief Report which part of the m17n library is initialized.
587 The m17n_status () function returns one of these values depending
588 on which part of the m17n library is initialized:
590 #M17N_NOT_INITIALIZED, #M17N_CORE_INITIALIZED,
591 #M17N_SHELL_INITIALIZED, #M17N_GUI_INITIALIZED */
594 @brief m17n ¥é¥¤¥Ö¥é¥ê¤Î¤É¤ÎÉôʬ¤¬½é´ü²½¤µ¤ì¤¿¤«Êó¹ð¤¹¤ë.
596 ´Ø¿ô m17n_status () ¤Ïm17n ¥é¥¤¥Ö¥é¥ê¤Î¤É¤ÎÉôʬ¤¬½é´ü²½¤µ¤ì¤¿¤«¤Ë
597 ±þ¤¸¤Æ¡¢°Ê²¼¤ÎÃͤΤ¤¤º¤ì¤«¤òÊÖ¤¹¡£
599 #M17N_NOT_INITIALIZED, #M17N_CORE_INITIALIZED,
600 #M17N_SHELL_INITIALIZED, #M17N_GUI_INITIALIZED */
605 return (m17n__gui_initialized ? M17N_GUI_INITIALIZED
606 : m17n__shell_initialized ? M17N_SHELL_INITIALIZED
607 : m17n__core_initialized ? M17N_CORE_INITIALIZED
608 : M17N_NOT_INITIALIZED);
615 @addtogroup m17nObject
616 @brief Managed objects are objects managed by the reference count.
618 There are some types of m17n objects that are managed by their
619 reference count. Those objects are called @e managed @e objects.
620 When created, the reference count of a managed object is
621 initialized to one. The m17n_object_ref () function increments
622 the reference count of a managed object by one, and the
623 m17n_object_unref () function decrements by one. A managed
624 object is automatically freed when its reference count becomes
627 A property whose key is a managing key can have only a managed
628 object as its value. Such functions as msymbol_put () and
629 mplist_put () pay special attention to such a property.
631 In addition to the predefined managed object types, users can
632 define their own managed object types. See the documentation of
633 the m17n_object () for more details. */
635 @addtogroup m17nObject
636 @brief ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤È¤Ï»²¾È¿ô¤Ë¤è¤Ã¤Æ´ÉÍý¤µ¤ì¤Æ¤¤¤ë¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¢¤ë.
638 m17n ¥ª¥Ö¥¸¥§¥¯¥È¤Î¤¢¤ë·¿¤Î¤â¤Î¤Ï¡¢»²¾È¿ô¤Ë¤è¤Ã¤Æ´ÉÍý¤µ¤ì¤Æ¤¤¤ë¡£
639 ¤½¤ì¤é¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ï @e ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È ¤È¸Æ¤Ð¤ì¤ë¡£À¸À®¤µ¤ì
640 ¤¿»þÅÀ¤Ç¤Î»²¾È¿ô¤Ï 0 ¤Ë½é´ü²½¤µ¤ì¤Æ¤¤¤ë¡£´Ø¿ô m17n_object_ref ()
641 ¤Ï´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤Î»²¾È¿ô¤ò 1 Áý¤ä¤·¡¢´Ø¿ôm17n_object_unref ()
642 ¤Ï 1 ¸º¤é¤¹¡£»²¾È¿ô¤¬ 0 ¤Ë¤Ê¤Ã¤¿´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤Ï¼«Æ°Åª¤Ë²òÊü¤µ
645 ¥¡¼¤¬´ÉÍý¥¡¼¤Ç¤¢¤ë¥×¥í¥Ñ¥Æ¥£¤Ï¡¢ÃͤȤ·¤Æ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤À¤±¤ò
646 ¼è¤ë¡£´Ø¿ô msymbol_put () ¤ä mplist_put () ¤Ê¤É¤Ï¤½¤ì¤é¤Î¥×¥í¥Ñ¥Æ¥£
649 ÄêµÁºÑ¤ß´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¥¿¥¤¥×¤Î¾¤Ë¡¢¥æ¡¼¥¶¤ÏɬÍפʴÉÍý²¼¥ª¥Ö¥¸¥§
650 ¥¯¥È¥¿¥¤¥×¤ò¼«Ê¬¤ÇÄêµÁ¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£¾ÜºÙ¤Ïm17n_object () ¤ÎÀâ
656 @brief Allocate a managed object.
658 The m17n_object () function allocates a new managed object of
659 $SIZE bytes and sets its reference count to 1. $FREER is the
660 function that is used to free the object when the reference count
661 becomes 0. If $FREER is NULL, the object is freed by the free ()
664 The heading bytes of the allocated object is occupied by
665 #M17NObjectHead. That area is reserved for the m17n library and
666 application programs should never touch it.
669 This function returns a newly allocated object.
672 This function never fails. */
675 @brief ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤ò³ä¤êÅö¤Æ¤ë.
677 ´Ø¿ô m17n_object () ¤Ï$SIZE ¥Ð¥¤¥È¤Î¿·¤·¤¤´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤ò³ä¤ê
678 Åö¤Æ¡¢¤½¤Î»²¾È¿ô¤ò 1 ¤È¤¹¤ë¡£ $FREER ¤Ï»²¾È¿ô¤¬ 0 ¤Ë¤Ê¤Ã¤¿ºÝ¤Ë¤½¤Î
679 ¥ª¥Ö¥¸¥§¥¯¥È¤ò²òÊü¤¹¤ë¤¿¤á¤ËÍѤ¤¤é¤ì¤ë´Ø¿ô¤Ç¤¢¤ë¡£$FREER ¤¬ NULL¤Ê
680 ¤é¤Ð¡¢¥ª¥Ö¥¸¥§¥¯¥È¤Ï´Ø¿ô free () ¤Ë¤è¤Ã¤Æ²òÊü¤µ¤ì¤ë¡£
682 ³ä¤êÅö¤Æ¤é¤ì¤¿¥ª¥Ö¥¸¥§¥¯¥ÈËÁƬ¤Î¥Ð¥¤¥È¤Ï¡¢#M17NObjectHead ¤¬Àê¤á¤ë¡£
683 ¤³¤ÎÎΰè¤Ï m17n ¥é¥¤¥Ö¥é¥ê¤¬»ÈÍѤ¹¤ë¤Î¤Ç¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é
684 ¥à¤Ï¿¨¤ì¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
687 ¤³¤Î´Ø¿ô¤Ï¿·¤·¤¯³ä¤êÅö¤Æ¤é¤ì¤¿¥ª¥Ö¥¸¥§¥¯¥È¤òÊÖ¤¹¡£
690 ¤³¤Î´Ø¿ô¤Ï¼ºÇÔ¤·¤Ê¤¤¡£ */
703 free (((MYStruct *) obj)->mem2);
708 my_func (MText *mt, MSymbol key, int num, char *str)
710 MYStruct *st = m17n_object (sizeof (MYStruct), my_freer);
713 st->mem2 = strdup (str);
714 /* KEY must be a managing key. */
715 mtext_put_prop (mt, 0, mtext_len (mt), key, st);
716 /* This sets the reference count of ST back to 1. */
717 m17n_object_unref (st);
722 m17n_object (int size, void (*freer) (void *))
724 M17NObject *obj = malloc (size);
727 obj->u.freer = freer;
734 @brief Increment the reference count of a managed object.
736 The m17n_object_ref () function increments the reference count of
737 the managed object pointed to by $OBJECT.
740 This function returns the resulting reference count if it fits in
741 a 16-bit unsigned integer (i.e. less than 0x10000). Otherwise, it
745 This function never fails. */
747 @brief ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤Î»²¾È¿ô¤ò 1 Áý¤ä¤¹.
749 ´Ø¿ô m17n_object_ref () ¤Ï $OBJECT ¤Ç»Ø¤µ¤ì¤ë´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤Î
753 ¤³¤Î´Ø¿ô¤Ï¡¢Áý¤ä¤·¤¿»²¾È¿ô¤¬ 16 ¥Ó¥Ã¥È¤ÎÉä¹æ̵¤·À°¿ôÃÍ(¤¹¤Ê¤ï¤Á
754 0x10000 ̤Ëþ)¤Ë¤ª¤µ¤Þ¤ì¤Ð¡¢¤½¤ì¤òÊÖ¤¹¡£¤½¤¦¤Ç¤Ê¤±¤ì¤Ð -1 ¤òÊÖ¤¹¡£
757 ¤³¤Î´Ø¿ô¤Ï¼ºÇÔ¤·¤Ê¤¤¡£ */
760 m17n_object_ref (void *object)
762 M17NObject *obj = (M17NObject *) object;
763 M17NObjectRecord *record;
766 if (! obj->ref_count_extended)
768 if (++obj->ref_count)
769 return (int) obj->ref_count;
770 MSTRUCT_MALLOC (record, MERROR_OBJECT);
771 record->freer = obj->u.freer;
772 MLIST_INIT1 (record, counts, 1);
773 MLIST_APPEND1 (record, counts, 0, MERROR_OBJECT);
774 obj->u.record = record;
775 obj->ref_count_extended = 1;
778 record = obj->u.record;
780 count = record->counts;
781 while (*count == 0xFFFFFFFF)
784 if (*count == 0xFFFFFFFF)
785 MLIST_APPEND1 (record, counts, 0, MERROR_OBJECT);
792 @brief Decrement the reference count of a managed object.
794 The m17n_object_unref () function decrements the reference count
795 of the managed object pointed to by $OBJECT. When the reference
796 count becomes zero, the object is freed by its freer function.
799 This function returns the resulting reference count if it fits in
800 a 16-bit unsigned integer (i.e. less than 0x10000). Otherwise, it
801 returns -1. Thus, the return value zero means that $OBJECT is
805 This function never fails. */
807 @brief ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤Î»²¾È¿ô¤ò 1 ¸º¤é¤¹.
809 ´Ø¿ô m17n_object_unref () ¤Ï $OBJECT ¤Ç»Ø¤µ¤ì¤ë´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È
810 ¤Î»²¾È¿ô¤ò 1 ¸º¤é¤¹¡£»²¾È¿ô¤¬ 0 ¤Ë¤Ê¤ì¤Ð¡¢¥ª¥Ö¥¸¥§¥¯¥È¤Ï²òÊü´Ø¿ô¤Ë
814 ¤³¤Î´Ø¿ô¤Ï¡¢¸º¤é¤·¤¿»²¾È¿ô¤¬ 16 ¥Ó¥Ã¥È¤ÎÉä¹æ̵¤·À°¿ôÃÍ(¤¹¤Ê¤ï¤Á
815 0x10000 ̤Ëþ)¤Ë¤ª¤µ¤Þ¤ì¤Ð¡¢¤½¤ì¤òÊÖ¤¹¡£¤½¤¦¤Ç¤Ê¤±¤ì¤Ð -1 ¤òÊÖ¤¹¡£
816 ¤Ä¤Þ¤ê¡¢0 ¤¬Ê֤äÆÍ褿¾ì¹ç¤Ï$OBJECT ¤Ï²òÊü¤µ¤ì¤Æ¤¤¤ë¡£
819 ¤³¤Î´Ø¿ô¤Ï¼ºÇÔ¤·¤Ê¤¤¡£ */
821 m17n_object_unref (void *object)
823 M17NObject *obj = (M17NObject *) object;
824 M17NObjectRecord *record;
827 if (! obj->ref_count_extended)
829 if (! --obj->ref_count)
832 (obj->u.freer) (object);
837 return (int) obj->ref_count;
840 record = obj->u.record;
841 count = record->counts;
843 *(count++) = 0xFFFFFFFF;
845 if (! record->counts[0])
847 obj->ref_count_extended = 0;
849 obj->u.freer = record->freer;
850 MLIST_FREE1 (record, counts);
861 @addtogroup m17nError Error handling
862 @brief Error handling of the m17n library.
864 There are two types of errors that may happen in a function of
867 The first type is argument errors. When a library function is
868 called with invalid arguments, it returns a value that indicates
869 error and at the same time sets the external variable #merror_code
870 to a non-zero integer.
872 The second type is memory allocation errors. When the required
873 amount of memory is not available on the system, m17n library
874 functions call a function pointed to by the external variable @c
875 m17n_memory_full_handler. The default value of the variable is a
876 pointer to the default_error_handle () function, which just calls
877 <tt> exit ()</tt>. */
880 @addtogroup m17nError ¥¨¥é¡¼½èÍý
881 @brief m17n ¥é¥¤¥Ö¥é¥ê¤Î¥¨¥é¡¼½èÍý.
883 m17n ¥é¥¤¥Ö¥é¥ê¤Î´Ø¿ô¤Ç¤Ï¡¢£²¤Ä¤Î¼ïÎà¤Î¥¨¥é¡¼¤¬µ¯¤³¤êÆÀ¤ë¡£
885 °ì¤Ä¤Ï°ú¿ô¤Î¥¨¥é¡¼¤Ç¤¢¤ë¡£¥é¥¤¥Ö¥é¥ê¤Î´Ø¿ô¤¬ÂÅÅö¤Ç¤Ê¤¤°ú¿ô¤È¤È¤â¤Ë
886 ¸Æ¤Ð¤ì¤¿¾ì¹ç¡¢¤½¤Î´Ø¿ô¤Ï¥¨¥é¡¼¤ò°ÕÌ£¤¹¤ëÃͤòÊÖ¤·¡¢Æ±»þ¤Ë³°ÉôÊÑ¿ô
887 #merror_code ¤Ë¥¼¥í¤Ç¤Ê¤¤À°¿ô¤ò¥»¥Ã¥È¤¹¤ë¡£
889 ¤â¤¦°ì¤Ä¤Î¼ïÎà¤Ï¥á¥â¥ê³äÅö¤Æ¥¨¥é¡¼¤Ç¤¢¤ë¡£¥·¥¹¥Æ¥à¤¬É¬ÍפÊÎ̤Υá¥â
890 ¥ê¤ò³äÅö¤Æ¤ë¤³¤È¤¬¤Ç¤¤Ê¤¤¾ì¹ç¡¢¥é¥¤¥Ö¥é¥ê´Ø¿ô¤Ï³°ÉôÊÑ¿ô @c
891 m17n_memory_full_handler ¤¬»Ø¤¹´Ø¿ô¤ò¸Æ¤Ö¡£¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢´Ø¿ô
892 default_error_handle () ¤ò»Ø¤·¤Æ¤ª¤ê¡¢¤³¤Î´Ø¿ô¤Ïñ¤Ë <tt>exit
901 @brief External variable to hold error code of the m17n library.
903 The external variable #merror_code holds an error code of the
904 m17n library. When a library function is called with an invalid
905 argument, it sets this variable to one of @c enum #MErrorCode.
907 This variable initially has the value 0. */
910 @brief m17n ¥é¥¤¥Ö¥é¥ê¤Î¥¨¥é¡¼¥³¡¼¥É¤òÊÝ»ý¤¹¤ë³°ÉôÊÑ¿ô.
912 ³°ÉôÊÑ¿ô #merror_code ¤Ï¡¢m17n ¥é¥¤¥Ö¥é¥ê¤Î¥¨¥é¡¼¥³¡¼¥É¤òÊÝ»ý¤¹¤ë¡£
913 ¥é¥¤¥Ö¥é¥ê´Ø¿ô¤¬ÂÅÅö¤Ç¤Ê¤¤°ú¿ô¤È¤È¤â¤Ë¸Æ¤Ð¤ì¤¿ºÝ¤Ë¤Ï¡¢¤³¤ÎÊÑ¿ô¤ò
914 @c enum #MErrorCode ¤Î°ì¤Ä¤Ë¥»¥Ã¥È¤¹¤ë¡£
916 ¤³¤ÎÊÑ¿ô¤Î½é´üÃÍ¤Ï 0 ¤Ç¤¢¤ë¡£ */
923 @brief Memory allocation error handler.
925 The external variable #m17n_memory_full_handler holds a pointer
926 to the function to call when a library function failed to allocate
927 memory. $ERR is one of @c enum #MErrorCode indicating in which
928 function the error occurred.
930 This variable initially points a function that simply calls the
931 <tt>exit </tt>() function with $ERR as an argument.
933 An application program that needs a different error handling can
934 change this variable to point a proper function. */
937 @brief ¥á¥â¥ê³äÅö¤Æ¥¨¥é¡¼¥Ï¥ó¥É¥é.
939 ÊÑ¿ô #m17n_memory_full_handler ¤Ï¡¢¥é¥¤¥Ö¥é¥ê´Ø¿ô¤¬¥á¥â¥ê³äÅö¤Æ
940 ¤Ë¼ºÇÔ¤·¤¿ºÝ¤Ë¸Æ¤Ö¤Ù¤´Ø¿ô¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£$ERR ¤Ï @c enum
941 #MErrorCode ¤Î¤¤¤º¤ì¤«¤Ç¤¢¤ê¡¢¤É¤Î¥é¥¤¥Ö¥é¥ê´Ø¿ô¤Ç¥¨¥é¡¼¤¬µ¯¤Ã¤¿
946 ½é´üÀßÄê¤Ç¤Ï¡¢¤³¤ÎÊÑ¿ô¤Ïñ¤Ë <tt>exit ()</tt> ¤ò $ERR ¤ò°ú¿ô¤È¤·¤Æ
947 ¸Æ¤Ö´Ø¿ô¤ò»Ø¤·¤Æ¤¤¤ë¡£
949 ¤³¤ì¤È¤Ï°Û¤Ê¤ë¥¨¥é¡¼½èÍý¤òɬÍפȤ¹¤ë¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ï¡¢¤³¤ÎÊÑ¿ô¤ò
950 ŬÅö¤Ê´Ø¿ô¤ËÀßÄꤹ¤ë¤³¤È¤Ç¡¢ÌÜŪ¤òãÀ®¤Ç¤¤ë¡£ */
952 void (*m17n_memory_full_handler) (enum MErrorCode err);
959 @addtogroup m17nDebug
960 @brief Support for m17n library users to debug their programs.
962 The m17n library provides the following facilities to support the
963 library users to debug their programs.
967 <li> Environment variables to control printing of various
972 <li> MDEBUG_INIT -- If set to 1, print information about the
973 library initialization on the call of M17N_INIT ().
975 <li> MDEBUG_FINI -- If set to 1, print counts of objects that are
976 not yet freed on the call of M17N_FINI ().
978 <li> MDEBUG_CHARSET -- If set to 1, print information about
979 charsets being loaded from the m17n database.
981 <li> MDEBUG_CODING -- If set to 1, print information about coding
982 systems being loaded from the m17n database.
984 <li> MDEBUG_DATABASE -- If set to 1, print information about
985 data being loaded from the m17n database.
987 <li> MDEBUG_FONT -- If set to 1, print information about fonts
988 being selected and opened.
990 <li> MDEBUG_FONT_FLT -- If set to 1, print information about which
991 command of Font Layout Table are being executed.
993 <li> MDEBUG_FONT_OTF -- If set to 1, print information about which
994 feature of OpenType Layout Table are being executed.
996 <li> MDEBUG_INPUT -- If set to 1, print information about how an
997 input method is running.
999 <li> MDEBUG_ALL -- Setting this variable to 1 is equivalent to
1000 setting all the above variables to 1.
1004 <li> Functions to print various objects in a human readable way.
1005 See the documentation of mdebug_dump_XXXX () functions.
1007 <li> The hook function called on an error. See the documentation
1013 @addtogroup m17nDebug
1014 @brief m17n ¥é¥¤¥Ö¥é¥ê¥æ¡¼¥¶¤Î¤¿¤á¤Î¥×¥í¥°¥é¥à¥Ç¥Ð¥Ã¥°¥µ¥Ý¡¼¥È.
1016 m17n ¥é¥¤¥Ö¥é¥ê¤Ï¡¢¤½¤Î¥æ¡¼¥¶¤¬¼«Ê¬¤Î¥×¥í¥°¥é¥à¤ò¥Ç¥Ð¥Ã¥°¤¹¤ë¤¿¤á
1017 ¤Ë¡¢°Ê²¼¤Îµ¡Ç½¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ë¡£
1021 <li> ¤µ¤Þ¤¶¤Þ¤Ê¾ðÊó¤Î¥×¥ê¥ó¥È¤òÀ©¸æ¤¹¤ë´Ä¶ÊÑ¿ô¡£
1025 <li> MDEBUG_INIT -- 1 ¤Ê¤é¤Ð¡¢M17N_INIT () ¤¬¸Æ¤Ð¤ì¤¿»þÅÀ¤Ç¡¢¥é¥¤
1026 ¥Ö¥é¥ê¤Î½é´ü²½¤Ë´Ø¤¹¤ë¾ðÊó¤ò¥×¥ê¥ó¥È¤¹¤ë¡£
1028 <li> MDEBUG_FINI -- 1 ¤Ê¤é¤Ð¡¢M17N_FINI () ¤¬¸Æ¤Ð¤ì¤¿»þÅÀ¤Ç¡¢¤Þ¤À
1029 ²òÊü¤µ¤ì¤Æ¤¤¤Ê¤¤¥ª¥Ö¥¸¥§¥¯¥È¤Î»²¾È¿ô¤ò¥×¥ê¥ó¥È¤¹¤ë¡£
1031 <li> MDEBUG_CHARSET -- 1 ¤Ê¤é¤Ð¡¢m17n ¥Ç¡¼¥¿¥Ù¡¼¥¹¤«¤é¥í¡¼¥É¤µ¤ì¤¿
1032 ʸ»ú¥»¥Ã¥È¤Ë¤Ä¤¤¤Æ¤Î¾ðÊó¤ò¥×¥ê¥ó¥È¤¹¤ë¡£
1034 <li> MDEBUG_CODING -- 1 ¤Ê¤é¤Ð¡¢m17n ¥Ç¡¼¥¿¥Ù¡¼¥¹¤«¤é¥í¡¼¥É¤µ¤ì¤¿
1035 ¥³¡¼¥É·Ï¤Ë¤Ä¤¤¤Æ¤Î¾ðÊó¤ò¥×¥ê¥ó¥È¤¹¤ë¡£
1037 <li> MDEBUG_DATABASE -- 1 ¤Ê¤é¤Ð¡¢m17n ¥Ç¡¼¥¿¥Ù¡¼¥¹¤«¤é¥í¡¼¥É¤µ¤ì
1038 ¤¿¥Ç¡¼¥¿¤Ë¤Ä¤¤¤Æ¤Î¾ðÊó¤ò¥×¥ê¥ó¥È¤¹¤ë¡£
1040 <li> MDEBUG_FONT -- 1 ¤Ê¤é¤Ð¡¢ÁªÂò¤µ¤ì¤Æ¥ª¡¼¥×¥ó¤µ¤ì¤¿¥Õ¥©¥ó¥È¤Ë¤Ä
1041 ¤¤¤Æ¤Î¾ðÊó¤ò¥×¥ê¥ó¥È¤¹¤ë¡£
1043 <li> MDEBUG_FONT_FLT -- 1 ¤Ê¤é¤Ð¡¢Font Layout Table ¤Î¤É¤Î¥³¥Þ¥ó¥É
1044 ¤¬¼Â¹ÔÃ椫¤Ë¤Ä¤¤¤Æ¤Î¤ò¥×¥ê¥ó¥È¤¹¤ë¡£
1046 <li> MDEBUG_FONT_OTF -- 1 ¤Ê¤é¤Ð¡¢OpenType Layout Table ¤Î¤É¤Î°À
1047 ¤¬¼Â¹ÔÃ椫¤Ë¤Ä¤¤¤Æ¤Î¤ò¥×¥ê¥ó¥È¤¹¤ë¡£
1049 <li> MDEBUG_INPUT -- 1 ¤Ê¤é¤Ð¡¢¼Â¹ÔÃæ¤ÎÆþÎϥ᥽¥Ã¥É¤Î¾õÂÖ¤ËÉÕ¤¤¤Æ
1050 ¤Î¾ðÊó¤ò¥×¥ê¥ó¥È¤¹¤ë¡£
1052 <li> MDEBUG_ALL -- 1 ¤Ê¤é¤Ð¡¢¾åµ¤¹¤Ù¤Æ¤ÎÊÑ¿ô¤ò 1 ¤Ë¤·¤¿¤Î¤ÈƱ¤¸¸ú
1057 <li> ¼ï¡¹¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ò¿Í´Ö¤Ë²ÄÆɤʷÁ¤Ç¥×¥ê¥ó¥È¤¹¤ë´Ø¿ô¡£¾ÜºÙ¤Ï
1058 ´Ø¿ô mdebug_dump_XXXX () ¤ÎÀâÌÀ»²¾È¡£
1060 <li> ¥¨¥é¡¼È¯À¸»þ¤Ë¸Æ¤Ð¤ì¤ë¥Õ¥Ã¥¯´Ø¿ô¡£mdebug_hook () ¤ÎÀâÌÀ»²¾È¡£
1070 @brief Hook function called on an error.
1072 The mdebug_hook () function is called when an error happens. It
1073 returns -1 without doing anything. It is useful to set a break
1074 point on this function in a debugger. */
1076 @brief ¥¨¥é¡¼¤ÎºÝ¤Ë¸Æ¤Ð¤ì¤ë¥Õ¥Ã¥¯´Ø¿ô.
1078 ´Ø¿ô mdebug_hook () ¤Ï¥¨¥é¡¼¤¬µ¯¤³¤Ã¤¿ºÝ¤Ë¸Æ¤Ð¤ì¡¢²¿¤â¤»¤º¤Ë-1 ¤ò
1079 ÊÖ¤¹¡£¥Ç¥Ð¥Ã¥¬Æâ¤Ç¥Ö¥ì¡¼¥¯¥Ý¥¤¥ó¥È¤òÀßÄꤹ¤ë¤¿¤á¤ËÍѤ¤¤ë¤³¤È¤¬¤Ç¤