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<EM></EM>.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<EM></EM>.h> and be linked by
46 When you use this API, CORE API is also available.
50 It provides GUI modules such as drawing and inputting M-texts on a
51 graphic device. The API itself is independent on a graphic device
52 but most functions require an argument MFrame which is created for
53 a specific type of graphic device. Currently, a null device, X
54 Window System, and an image date (gdImagePtr) of GD library are
55 supported as a graphic device.
57 On a frame of the null device, you can't draw text nor use an
58 input method (but, for instance, the funciton mdraw_glyph_list ()
61 On a frame of the X Window System, you can use the whole GUI API.
63 On a frame of GD library, you can use all drawing API but can't
66 To use this device, an application program must include
67 <m17n-gui<EM></EM>.h> and be linked by -lm17n-core -lm17n
70 When you use this API, CORE and SHELL API are also available.
74 It provides miscellaneous functions to support error handling and
75 debugging. This API cannot be used by itself, but with one or
76 more APIs listed above. To use the API, an application program
77 must include <m17n-misc<EM></EM>.h> in addition to one of a header
82 See also the section @ref m17n-config "m17n-config(1)".
84 <em>ENVIRONMENT VARIABLE</em>
86 The m17n library pays attention to these environment variables.
91 Name of a directory that contains data of the m17n database. See
92 @ref m17nDatabase for more details.
96 Environment variables whose name start by "MDEBUG_" controls
97 printing of debug information. See @ref m17nDebug for more
102 <em>API NAMING CONVENTION</em>
104 The library exports functions, variables, macros, and types. All
105 of them start by the letter 'm' or 'M' followed by an object name
106 (e.g. "symbol" and "plist", but "mtext" object is given the name
107 "text" to avoid double 'm' at the head) or a module name
112 <li> functions -- mobject () or mobject_xxx ()
114 They start with 'm' followed by lower case object name. For
115 example, msymbol (), mtext_ref_char (), mdraw_text ().
117 <li> non-symbol variables -- mobject, or mobject_xxx
119 The naming convention is the same as functions (e.g. mface_large).
121 <li> symbol variables -- Mname
123 Variables of type MSymbol start with 'M' followed by their names
124 (e.g. Mlanguage (name is "language"), Miso_2022 (name is
127 <li> macros -- MOBJECT_XXX
129 They start by 'M' followed by upper case object names.
131 <li> types -- MObject or MObjectXxx
133 They start by 'M' followed by capitalized object names (e.g.
134 MConverter, MInputDriver).
141 @addtogroup m17nIntro
142 @brief m17n ¥é¥¤¥Ö¥é¥ê ¥¤¥ó¥È¥í¥À¥¯¥·¥ç¥ó.
146 m17n ¥é¥¤¥Ö¥é¥ê¤Î API ¤Ï°Ê²¼¤Î£´¼ï¤ËʬÎव¤ì¤Æ¤¤¤ë¡£
151 M-text ¤ò°·¤¦¤¿¤á¤Î´ðËÜŪ¤Ê¥â¥¸¥å¡¼¥ë¤òÄ󶡤¹¤ë¡£¤³¤ÎʬÎà¤Î API ¤Ï
152 m17n ¥Ç¡¼¥¿¥Ù¡¼¥¹¤òɬÍפȤ·¤Ê¤¤¡£ÍøÍѤ¹¤ë¤¿¤á¤Ë¤Ï¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó
153 ¥×¥í¥°¥é¥à¤Ï<m17n-core<EM></EM>.h> ¤ò include ¤·¡¢ -lm17n-core ¤Ç¥ê
154 ¥ó¥¯¤µ¤ì¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
158 m17n ¥Ç¡¼¥¿¥Ù¡¼¥¹¤òÍøÍѤ¹¤ë¥â¥¸¥å¡¼¥ë¡Ê¥³¡¼¥ÉÊÑ´¹¡¢Ê¸»ú¥×¥í¥Ñ¥Æ¥£
159 Åù¡Ë¤òÄ󶡤¹¤ë¡£¥â¥¸¥å¡¼¥ë¤Ï¥Ç¡¼¥¿¥Ù¡¼¥¹¤«¤éɬÍפ˱þ¤¸¤Æ¿Íͤʥǡ¼
160 ¥¿¤ò¥í¡¼¥É¤¹¤ë¡£ÍøÍѤ¹¤ë¤¿¤á¤Ë¤Ï¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤Ï
161 <m17n<EM></EM>.h> ¤ò include ¤·¡¢ -lm17n-core -lm17n ¤Ç¥ê¥ó¥¯¤µ¤ì¤Ê
164 ¤³¤Î API ¤ò»ÈÍѤ¹¤ëºÝ¤Ë¤Ï¥³¥¢ API ¤â»ÈÍѤǤ¤ë¡£
168 M-texts ¤ò¥°¥é¥Õ¥£¥Ã¥¯¥Ç¥Ð¥¤¥¹¾å¤Çɽ¼¨¤·¤¿¤êÆþÎϤ·¤¿¤ê¤¹¤ë¤È¤¤¤Ã¤¿¡¢
169 ¥°¥é¥Õ¥£¥Ã¥¯¥æ¡¼¥¶¥¤¥ó¥¿¥Õ¥§¡¼¥¹¥â¥¸¥å¡¼¥ë¤òÄ󶡤¹¤ë¡£API ¼«ÂΤϥ°
170 ¥é¥Õ¥£¥Ã¥¯¥Ç¥Ð¥¤¥¹¤È¤ÏÆÈΩ¤Ç¤¢¤ë¤¬¡¢Â¿¤¯¤Î´Ø¿ô¤ÏÆÃÄê¤Î¥°¥é¥Õ¥£¥Ã¥¯
171 ¥Ç¥Ð¥¤¥¹¾å¤ËºîÀ®¤µ¤ì¤¿ MFrame ¤ò°ú¿ô¤Ë¼è¤ë¡£¸½»þÅÀ¤Ç¤Ï¡¢¥Ì¥ë¥Ç¥Ð¥¤
172 ¥¹¡¢X ¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¡¢GD ¥é¥¤¥Ö¥é¥ê¤Î¥¤¥á¡¼¥¸¡ÊgdImagePtr¡Ë¡¢¤¬
173 ¥°¥é¥Õ¥£¥Ã¥¯¥Ç¥Ð¥¤¥¹¤È¤·¤Æ¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ë¡£
175 ¥Ì¥ë¥Ç¥Ð¥¤¥¹¾å¤Ç¤Ïɽ¼¨¤âÆþÎϤâ¤Ç¤¤Ê¤¤¡Ê¤¿¤À¤·¤¿¤È¤¨¤Ð
176 mdraw_glyph_list () ¤Ê¤É¤Î´Ø¿ô¤Ï»ÈÍѲÄǽ¡Ë¡£
178 X ¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¾å¤Ç¤Ï¤¹¤Ù¤Æ¤Î GUI API ¤¬»È¤¨¤ë¡£
180 GD ¥é¥¤¥Ö¥é¥ê¤Î¥¤¥á¡¼¥¸¾å¤Ç¤Ï¡¢ÉÁ²èÍѤΠAPI ¤Ï¤¹¤Ù¤Æ»È¤¨¤ë¤¬ÆþÎϤÏ
183 ¤³¤Î¥Ç¥Ð¥¤¥¹¤ò»ÈÍѤ¹¤ë¤¿¤á¤Ë¤Ï¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤Ï
184 <m17n-gui<EM></EM>.h> ¤ò include ¤·¡¢-lm17n-core -lm17n -lm17n-gui
185 ¤Ç¥ê¥ó¥¯¤µ¤ì¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
187 ¤³¤Î API ¤ò»ÈÍѤ¹¤ëºÝ¤Ë¤Ï¡¢¥³¥¢ API ¤È¥·¥§¥ë API ¤â»ÈÍѤǤ¤ë¡£
191 ¥¨¥é¡¼½èÍý¡¢¥Ç¥Ð¥Ã¥°ÍѤΤ½¤Î¾¤Î´Ø¿ô¤òÄ󶡤¹¤ë¡£¤³¤Î API ¤Ï¤½¤ì¤À¤±
192 ¤Ç¤Ï»ÈÍѤǤ¤º¡¢¾åµ¤Î¾¤Î¤â¤Î¤È¶¦¤Ë»È¤¦¡£ÍøÍѤ¹¤ë¤¿¤á¤Ë¤Ï¡¢¾åµ¤Î
193 ¤¤¤º¤ì¤«¤Î include ¥Õ¥¡¥¤¥ë¤Ë²Ã¤¨¤Æ¡¢ <m17n-misc<EM></EM>.h> ¤ò
194 include ¤·¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
198 @ref m17n-config "m17n-config(1)" Àá¤â»²¾È¡£
202 m17n ¥é¥¤¥Ö¥é¥ê¤Ï¼¡¤Î´Ä¶ÊÑ¿ô¤ò¹Íθ¤¹¤ë¡£
207 m17n ¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î¥Ç¡¼¥¿¤ò´Þ¤à¥Ç¥£¥ì¥¯¥È¥ê¤Î̾Á°¡£¾ÜºÙ¤Ï@ref
212 "MDEBUG_" ¤Ç»Ï¤Þ¤ë̾Á°¤ò»ý¤Ä´Ä¶ÊÑ¿ô¤Ï¥Ç¥Ð¥Ã¥°¾ðÊó¤òÀ©¸æ¤¹¤ë¡£¾ÜºÙ
213 ¤Ï@ref m17nDebug »²¾È¡£
217 @em API @em ¤Î̿̾µ¬Â§ ¥³¥Þ¥ó¥É
219 ¥é¥¤¥Ö¥é¥ê¤Ï¡¢´Ø¿ô¡¢ÊÑ¿ô¡¢¥Þ¥¯¥í¡¢·¿¤ò export ¤¹¤ë¡£¤½¤ì¤é¤Ï'm' ¤Þ
220 ¤¿¤Ï 'M' ¤Î¤¢¤È¤Ë¥ª¥Ö¥¸¥§¥¯¥È̾("symbol" ¤ä "plist" ¤Ê¤É¡£¤¿¤À¤·
221 "mtext" ¥ª¥Ö¥¸¥§¥¯¥È¤Ï¤Ï¤¸¤á¤Î 'm' ¤Î½ÅÊ£¤òÈò¤±¤ë¤¿¤á "text" ¤òÍÑ
222 ¤¤¤ë¡£) ¤Þ¤¿¤Ï¥â¥¸¥å¡¼¥ë̾(draw, input ¤Ê¤É) ¤ò³¤±¤¿¤â¤Î¤Ç¤¢¤ë¡£
226 <li> ´Ø¿ô -- mobject () ¤Þ¤¿¤Ï mobject_xxx ()
228 'm' ¤Î¤¢¤È¤Ë¾®Ê¸»ú¤Ç¥ª¥Ö¥¸¥§¥¯¥È̾¤¬Â³¤¯¡£¤¿¤È¤¨¤Ð¡¢msymbol (),
229 mtext_ref_char (), mdraw_text () ¤Ê¤É¡£
231 <li> ¥·¥ó¥Ü¥ë¤Ç¤Ê¤¤ÊÑ¿ô -- mobject, ¤Þ¤¿¤Ï mobject_xxx
233 ´Ø¿ô¤ÈƱ¤¸Ì¿Ì¾µ¬Â§¤Ë½¾¤¦¡£(¤¿¤È¤¨¤Ð mface_large)
235 <li> ¥·¥ó¥Ü¥ëÊÑ¿ô -- Mname
237 MSymbol ·¿ÊÑ¿ô¤Ï¡¢'M' ¤Î¸å¤Ë̾Á°¤¬Â³¤¯¡£¤¿¤È¤¨¤Ð Mlanguage (̾Á°¤Ï
238 "language"), Miso_2022 (̾Á°¤Ï"iso-2022")¤Ê¤É¡£
240 <li> ¥Þ¥¯¥í -- MOBJECT_XXX
242 'M' ¤Î¸å¤ËÂçʸ»ú¤Ç¥ª¥Ö¥¸¥§¥¯¥È̾¤¬Â³¤¯¡£
244 <li> ¥¿¥¤¥× -- MObject ¤Þ¤¿¤Ï MObjectXxx
246 'M' ¤Î¸å¤ËÂçʸ»ú¤Ç»Ï¤á¤Æ¥ª¥Ö¥¸¥§¥¯¥È̾¤ò¤¬Â³¤¯¡£ (¤¿¤È¤¨¤Ð
247 MConverter, MInputDriver)
256 The #M17NLIB_MAJOR_VERSION macro gives the major version number
257 of the m17n library. */
260 ¥Þ¥¯¥í #M17NLIB_MAJOR_VERSION ¤Ï m17n ¥é¥¤¥Ö¥é¥ê¤Î¥á¥¸¥ã¡¼¥Ð¡¼¥¸¥ç
263 #define M17NLIB_MAJOR_VERSION
268 The #M17NLIB_MINOR_VERSION macro gives the minor version number
269 of the m17n library. */
272 ¥Þ¥¯¥í #M17NLIB_MINOR_VERSION ¤Ï m17n ¥é¥¤¥Ö¥é¥ê¤Î¥Þ¥¤¥Ê¡¼¥Ð¡¼¥¸¥ç
275 #define M17NLIB_MINOR_VERSION
280 The #M17NLIB_PATCH_LEVEL macro gives the patch level number
281 of the m17n library. */
284 ¥Þ¥¯¥í #M17NLIB_PATCH_LEVEL ¤Ï m17n ¥é¥¤¥Ö¥é¥ê¤Î¥Ñ¥Ã¥Á¥ì¥Ù¥ëÈÖ¹æ¤ò
287 #define M17NLIB_PATCH_LEVEL
292 The #M17NLIB_VERSION_NAME macro gives the version name of the
293 m17n library as a string. */
296 ¥Þ¥¯¥í #M17NLIB_VERSION_NAME ¤Ï m17n ¥é¥¤¥Ö¥é¥ê¤Î¥Ð¡¼¥¸¥ç¥ó̾¤ò
297 ʸ»úÎó¤È¤·¤ÆÍ¿¤¨¤ë¡£ */
299 #define M17NLIB_VERSION_NAME
304 @brief Initialize the m17n library.
306 The macro M17N_INIT () initializes the m17n library. This macro
307 must be called before any m17n functions are used.
309 It is safe to call this macro multiple times, but in that case,
310 the macro M17N_FINI () must be called the same times to free the
313 If the initialization was successful, the external variable
314 #merror_code is set to 0. Otherwise it is set to -1.
317 M17N_FINI (), m17n_status () */
320 @brief m17n ¥é¥¤¥Ö¥é¥ê¤ò½é´ü²½¤¹¤ë.
322 ¥Þ¥¯¥í M17N_INIT () ¤Ï m17n ¥é¥¤¥Ö¥é¥ê¤ò½é´ü²½¤¹¤ë¡£m17n ¤Î´Ø¿ô¤ò
323 ÍøÍѤ¹¤ëÁ°¤Ë¡¢¤³¤Î¥Þ¥¯¥í¤ò¤Þ¤º¸Æ¤Ð¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
325 ¤³¤Î¥Þ¥¯¥í¤òÊ£¿ô²ó¸Æ¤ó¤Ç¤â°ÂÁ´¤Ç¤¢¤ë¤¬¡¢¤½¤Î¾ì¹ç¥á¥â¥ê¤ò²òÊü¤¹¤ë¤¿
326 ¤á¤Ë¥Þ¥¯¥í M17N_FINI () ¤òƱ¤¸²ó¿ô¸Æ¤ÖɬÍפ¬¤¢¤ë¡£
328 ³°ÉôÊÑ¿ô #merror_code ¤Ï¡¢½é´ü²½¤¬À®¸ù¤¹¤ì¤Ð 0 ¤Ë¡¢¤½¤¦¤Ç¤Ê¤±¤ì¤Ð
332 M17N_FINI (), m17n_status () */
339 @brief Finalize the m17n library.
341 The macro M17N_FINI () finalizes the m17n library. It frees all the
342 memory area used by the m17n library. Once this macro is
343 called, no m17n functions should be used until the
344 macro M17N_INIT () is called again.
346 If the macro M17N_INIT () was called N times, the Nth call of this
347 macro actually free the memory.
350 M17N_INIT (), m17n_status () */
352 @brief m17n ¥é¥¤¥Ö¥é¥ê¤ò½ªÎ»¤¹¤ë.
354 ¥Þ¥¯¥í M17N_FINI () ¤Ï m17n ¥é¥¤¥Ö¥é¥ê¤ò½ªÎ»¤¹¤ë¡£m17n ¥é¥¤¥Ö¥é¥ê
355 ¤¬»È¤Ã¤¿Á´¤Æ¤Î¥á¥â¥êÎΰè¤Ï²òÊü¤µ¤ì¤ë¡£°ìÅÙ¤³¤Î¥Þ¥¯¥í¤¬¸Æ¤Ð¤ì¤¿¤é¡¢
356 ¥Þ¥¯¥í M17N_INIT () ¤¬ºÆÅٸƤФì¤ë¤Þ¤Ç m17n ´Ø¿ô¤Ï»È¤¦¤Ù¤¤Ç¤Ê¤¤¡£
358 ¥Þ¥¯¥í M17N_INIT () ¤¬ N ²ó¸Æ¤Ð¤ì¤Æ¤¤¤¿¾ì¹ç¤Ë¤Ï¡¢¤³¤Î¥Þ¥¯¥í¤¬ N ²ó
359 ¸Æ¤Ð¤ì¤Æ½é¤á¤Æ¥á¥â¥ê¤¬²òÊü¤µ¤ì¤ë¡£
362 M17N_INIT (), m17n_status () */
365 #endif /* FOR_DOXYGEN */
370 #if !defined (FOR_DOXYGEN) || defined (DOXYGEN_INTERNAL_MODULE)
371 /*** @addtogroup m17nInternal
377 #include <sys/time.h>
378 #include <sys/resource.h>
381 #include "m17n-core.h"
382 #include "m17n-misc.h"
383 #include "internal.h"
386 default_error_handler (enum MErrorCode err)
391 static struct timeval time_stack[16];
392 static int time_stack_index;
394 static int report_header_printed;
399 int m17n__core_initialized;
400 int m17n__shell_initialized;
401 int m17n__gui_initialized;
404 mdebug__report_object (char *name, M17NObjectArray *array)
406 if (! (mdebug__flag & MDEBUG_FINI))
408 if (! report_header_printed)
410 fprintf (stderr, "%16s %7s %7s %7s\n",
411 "object", "created", "freed", "alive");
412 fprintf (stderr, "%16s %7s %7s %7s\n",
413 "------", "-------", "-----", "-----");
414 report_header_printed = 1;
416 fprintf (stderr, "%16s %7d %7d %7d\n", name,
417 array->used, array->used - array->count, array->count);
420 free (array->objects);
421 array->count = array->used = 0;
426 void *(*mdatabase__finder) (MSymbol tag1, MSymbol tag2,
427 MSymbol tag3, MSymbol tag4);
428 void *(*mdatabase__loader) (void *);
437 gettimeofday (time_stack + time_stack_index++, &tz);
447 mdebug__print_time ()
453 gettimeofday (&tv, &tz);
454 diff = ((tv.tv_sec - time_stack[time_stack_index - 1].tv_sec) * 1000000
455 + (tv.tv_usec - time_stack[time_stack_index - 1].tv_usec));
456 fprintf (stderr, "%8ld ms.", diff);
457 time_stack[time_stack_index - 1] = tv;
460 #define SET_DEBUG_FLAG(env_name, mask) \
462 char *env_value = getenv (env_name); \
464 if (env_value && env_value[0] == '1') \
465 mdebug__flag |= (mask); \
470 mdebug__register_object (M17NObjectArray *array, void *object)
472 if (array->used == 0)
473 MLIST_INIT1 (array, objects, 256);
475 MLIST_APPEND1 (array, objects, object, MERROR_OBJECT);
479 mdebug__unregister_object (M17NObjectArray *array, void *object)
482 if (array->count >= 0)
486 while (i < array->used && array->objects[i] != object) i++;
488 array->objects[i] = NULL;
499 /* The following two are actually not exposed to a user but concealed
500 by the macro M17N_INIT (). */
503 m17n_init_core (void)
505 int mdebug_mask = MDEBUG_INIT;
507 if (m17n__core_initialized++)
510 merror_code = MERROR_NONE;
511 m17n_memory_full_handler = default_error_handler;
514 SET_DEBUG_FLAG ("MDEBUG_INIT", MDEBUG_INIT);
515 SET_DEBUG_FLAG ("MDEBUG_FINI", MDEBUG_FINI);
516 SET_DEBUG_FLAG ("MDEBUG_CHARSET", MDEBUG_CHARSET);
517 SET_DEBUG_FLAG ("MDEBUG_CODING", MDEBUG_CODING);
518 SET_DEBUG_FLAG ("MDEBUG_DATABASE", MDEBUG_DATABASE);
519 SET_DEBUG_FLAG ("MDEBUG_FONT", MDEBUG_FONT);
520 SET_DEBUG_FLAG ("MDEBUG_FONT_FLT", MDEBUG_FONT_FLT);
521 SET_DEBUG_FLAG ("MDEBUG_FONT_OTF", MDEBUG_FONT_OTF);
522 SET_DEBUG_FLAG ("MDEBUG_INPUT", MDEBUG_INPUT);
526 if (msymbol__init () < 0)
528 MDEBUG_PRINT_TIME ("INIT", (stderr, " to initialize symbol module."));
529 if (mplist__init () < 0)
531 MDEBUG_PRINT_TIME ("INIT", (stderr, " to initialize plist module."));
532 if (mtext__init () < 0)
534 if (mtext__prop_init () < 0)
536 MDEBUG_PRINT_TIME ("INIT", (stderr, " to initialize mtext module."));
537 if (mchartable__init () < 0)
539 MDEBUG_PRINT_TIME ("INIT", (stderr, " to initialize chartable module."));
541 mdatabase__finder = NULL;
542 mdatabase__loader = NULL;
546 MDEBUG_PRINT_TIME ("INIT", (stderr, " to initialize the core modules."));
551 m17n_fini_core (void)
553 int mdebug_mask = MDEBUG_FINI;
555 if (m17n__core_initialized == 0
556 || --m17n__core_initialized > 0)
561 MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize chartable module."));
563 MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize textprop module."));
565 MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize mtext module."));
567 MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize symbol module."));
569 MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize plist module."));
572 MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize the core modules."));
574 report_header_printed = 0;
578 #endif /* !FOR_DOXYGEN || DOXYGEN_INTERNAL_MODULE */
581 /*** @addtogroup m17nIntro */
587 @brief Report which part of the m17n library is initialized.
589 The m17n_status () function returns one of these values depending
590 on which part of the m17n library is initialized:
592 #M17N_NOT_INITIALIZED, #M17N_CORE_INITIALIZED,
593 #M17N_SHELL_INITIALIZED, #M17N_GUI_INITIALIZED */
596 @brief m17n ¥é¥¤¥Ö¥é¥ê¤Î¤É¤ÎÉôʬ¤¬½é´ü²½¤µ¤ì¤¿¤«Êó¹ð¤¹¤ë.
598 ´Ø¿ô m17n_status () ¤Ïm17n ¥é¥¤¥Ö¥é¥ê¤Î¤É¤ÎÉôʬ¤¬½é´ü²½¤µ¤ì¤¿¤«¤Ë
599 ±þ¤¸¤Æ¡¢°Ê²¼¤ÎÃͤΤ¤¤º¤ì¤«¤òÊÖ¤¹¡£
601 #M17N_NOT_INITIALIZED, #M17N_CORE_INITIALIZED,
602 #M17N_SHELL_INITIALIZED, #M17N_GUI_INITIALIZED */
607 return (m17n__gui_initialized ? M17N_GUI_INITIALIZED
608 : m17n__shell_initialized ? M17N_SHELL_INITIALIZED
609 : m17n__core_initialized ? M17N_CORE_INITIALIZED
610 : M17N_NOT_INITIALIZED);
617 @addtogroup m17nObject
618 @brief Managed objects are objects managed by the reference count.
620 There are some types of m17n objects that are managed by their
621 reference count. Those objects are called @e managed @e objects.
622 When created, the reference count of a managed object is
623 initialized to one. The m17n_object_ref () function increments
624 the reference count of a managed object by one, and the
625 m17n_object_unref () function decrements by one. A managed
626 object is automatically freed when its reference count becomes
629 A property whose key is a managing key can have only a managed
630 object as its value. Such functions as msymbol_put () and
631 mplist_put () pay special attention to such a property.
633 In addition to the predefined managed object types, users can
634 define their own managed object types. See the documentation of
635 the m17n_object () for more details. */
637 @addtogroup m17nObject
638 @brief ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤È¤Ï»²¾È¿ô¤Ë¤è¤Ã¤Æ´ÉÍý¤µ¤ì¤Æ¤¤¤ë¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¢¤ë.
640 m17n ¥ª¥Ö¥¸¥§¥¯¥È¤Î¤¢¤ë·¿¤Î¤â¤Î¤Ï¡¢»²¾È¿ô¤Ë¤è¤Ã¤Æ´ÉÍý¤µ¤ì¤Æ¤¤¤ë¡£
641 ¤½¤ì¤é¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ï @e ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È ¤È¸Æ¤Ð¤ì¤ë¡£À¸À®¤µ¤ì
642 ¤¿»þÅÀ¤Ç¤Î»²¾È¿ô¤Ï 0 ¤Ë½é´ü²½¤µ¤ì¤Æ¤¤¤ë¡£´Ø¿ô m17n_object_ref ()
643 ¤Ï´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤Î»²¾È¿ô¤ò 1 Áý¤ä¤·¡¢´Ø¿ôm17n_object_unref ()
644 ¤Ï 1 ¸º¤é¤¹¡£»²¾È¿ô¤¬ 0 ¤Ë¤Ê¤Ã¤¿´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤Ï¼«Æ°Åª¤Ë²òÊü¤µ
647 ¥¡¼¤¬´ÉÍý¥¡¼¤Ç¤¢¤ë¥×¥í¥Ñ¥Æ¥£¤Ï¡¢ÃͤȤ·¤Æ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤À¤±¤ò
648 ¼è¤ë¡£´Ø¿ô msymbol_put () ¤ä mplist_put () ¤Ê¤É¤Ï¤½¤ì¤é¤Î¥×¥í¥Ñ¥Æ¥£
651 ÄêµÁºÑ¤ß´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¥¿¥¤¥×¤Î¾¤Ë¡¢¥æ¡¼¥¶¤ÏɬÍפʴÉÍý²¼¥ª¥Ö¥¸¥§
652 ¥¯¥È¥¿¥¤¥×¤ò¼«Ê¬¤ÇÄêµÁ¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£¾ÜºÙ¤Ïm17n_object () ¤ÎÀâ
658 @brief Allocate a managed object.
660 The m17n_object () function allocates a new managed object of
661 $SIZE bytes and sets its reference count to 1. $FREER is the
662 function that is used to free the object when the reference count
663 becomes 0. If $FREER is NULL, the object is freed by the free ()
666 The heading bytes of the allocated object is occupied by
667 #M17NObjectHead. That area is reserved for the m17n library and
668 application programs should never touch it.
671 This function returns a newly allocated object.
674 This function never fails. */
677 @brief ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤ò³ä¤êÅö¤Æ¤ë.
679 ´Ø¿ô m17n_object () ¤Ï$SIZE ¥Ð¥¤¥È¤Î¿·¤·¤¤´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤ò³ä¤ê
680 Åö¤Æ¡¢¤½¤Î»²¾È¿ô¤ò 1 ¤È¤¹¤ë¡£ $FREER ¤Ï»²¾È¿ô¤¬ 0 ¤Ë¤Ê¤Ã¤¿ºÝ¤Ë¤½¤Î
681 ¥ª¥Ö¥¸¥§¥¯¥È¤ò²òÊü¤¹¤ë¤¿¤á¤ËÍѤ¤¤é¤ì¤ë´Ø¿ô¤Ç¤¢¤ë¡£$FREER ¤¬ NULL¤Ê
682 ¤é¤Ð¡¢¥ª¥Ö¥¸¥§¥¯¥È¤Ï´Ø¿ô free () ¤Ë¤è¤Ã¤Æ²òÊü¤µ¤ì¤ë¡£
684 ³ä¤êÅö¤Æ¤é¤ì¤¿¥ª¥Ö¥¸¥§¥¯¥ÈËÁƬ¤Î¥Ð¥¤¥È¤Ï¡¢#M17NObjectHead ¤¬Àê¤á¤ë¡£
685 ¤³¤ÎÎΰè¤Ï m17n ¥é¥¤¥Ö¥é¥ê¤¬»ÈÍѤ¹¤ë¤Î¤Ç¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é
686 ¥à¤Ï¿¨¤ì¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
689 ¤³¤Î´Ø¿ô¤Ï¿·¤·¤¯³ä¤êÅö¤Æ¤é¤ì¤¿¥ª¥Ö¥¸¥§¥¯¥È¤òÊÖ¤¹¡£
692 ¤³¤Î´Ø¿ô¤Ï¼ºÇÔ¤·¤Ê¤¤¡£ */
705 free (((MYStruct *) obj)->mem2);
710 my_func (MText *mt, MSymbol key, int num, char *str)
712 MYStruct *st = m17n_object (sizeof (MYStruct), my_freer);
715 st->mem2 = strdup (str);
716 /* KEY must be a managing key. */
717 mtext_put_prop (mt, 0, mtext_len (mt), key, st);
718 /* This sets the reference count of ST back to 1. */
719 m17n_object_unref (st);
724 m17n_object (int size, void (*freer) (void *))
726 M17NObject *obj = malloc (size);
729 obj->u.freer = freer;
736 @brief Increment the reference count of a managed object.
738 The m17n_object_ref () function increments the reference count of
739 the managed object pointed to by $OBJECT.
742 This function returns the resulting reference count if it fits in
743 a 16-bit unsigned integer (i.e. less than 0x10000). Otherwise, it
747 This function never fails. */
749 @brief ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤Î»²¾È¿ô¤ò 1 Áý¤ä¤¹.
751 ´Ø¿ô m17n_object_ref () ¤Ï $OBJECT ¤Ç»Ø¤µ¤ì¤ë´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤Î
755 ¤³¤Î´Ø¿ô¤Ï¡¢Áý¤ä¤·¤¿»²¾È¿ô¤¬ 16 ¥Ó¥Ã¥È¤ÎÉä¹æ̵¤·À°¿ôÃÍ(¤¹¤Ê¤ï¤Á
756 0x10000 ̤Ëþ)¤Ë¤ª¤µ¤Þ¤ì¤Ð¡¢¤½¤ì¤òÊÖ¤¹¡£¤½¤¦¤Ç¤Ê¤±¤ì¤Ð -1 ¤òÊÖ¤¹¡£
759 ¤³¤Î´Ø¿ô¤Ï¼ºÇÔ¤·¤Ê¤¤¡£ */
762 m17n_object_ref (void *object)
764 M17NObject *obj = (M17NObject *) object;
765 M17NObjectRecord *record;
768 if (! obj->ref_count_extended)
770 if (++obj->ref_count)
771 return (int) obj->ref_count;
772 MSTRUCT_MALLOC (record, MERROR_OBJECT);
773 record->freer = obj->u.freer;
774 MLIST_INIT1 (record, counts, 1);
775 MLIST_APPEND1 (record, counts, 0, MERROR_OBJECT);
776 obj->u.record = record;
777 obj->ref_count_extended = 1;
780 record = obj->u.record;
782 count = record->counts;
783 while (*count == 0xFFFFFFFF)
786 if (*count == 0xFFFFFFFF)
787 MLIST_APPEND1 (record, counts, 0, MERROR_OBJECT);
794 @brief Decrement the reference count of a managed object.
796 The m17n_object_unref () function decrements the reference count
797 of the managed object pointed to by $OBJECT. When the reference
798 count becomes zero, the object is freed by its freer function.
801 This function returns the resulting reference count if it fits in
802 a 16-bit unsigned integer (i.e. less than 0x10000). Otherwise, it
803 returns -1. Thus, the return value zero means that $OBJECT is
807 This function never fails. */
809 @brief ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤Î»²¾È¿ô¤ò 1 ¸º¤é¤¹.
811 ´Ø¿ô m17n_object_unref () ¤Ï $OBJECT ¤Ç»Ø¤µ¤ì¤ë´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È
812 ¤Î»²¾È¿ô¤ò 1 ¸º¤é¤¹¡£»²¾È¿ô¤¬ 0 ¤Ë¤Ê¤ì¤Ð¡¢¥ª¥Ö¥¸¥§¥¯¥È¤Ï²òÊü´Ø¿ô¤Ë
816 ¤³¤Î´Ø¿ô¤Ï¡¢¸º¤é¤·¤¿»²¾È¿ô¤¬ 16 ¥Ó¥Ã¥È¤ÎÉä¹æ̵¤·À°¿ôÃÍ(¤¹¤Ê¤ï¤Á
817 0x10000 ̤Ëþ)¤Ë¤ª¤µ¤Þ¤ì¤Ð¡¢¤½¤ì¤òÊÖ¤¹¡£¤½¤¦¤Ç¤Ê¤±¤ì¤Ð -1 ¤òÊÖ¤¹¡£
818 ¤Ä¤Þ¤ê¡¢0 ¤¬Ê֤äÆÍ褿¾ì¹ç¤Ï$OBJECT ¤Ï²òÊü¤µ¤ì¤Æ¤¤¤ë¡£
821 ¤³¤Î´Ø¿ô¤Ï¼ºÇÔ¤·¤Ê¤¤¡£ */
823 m17n_object_unref (void *object)
825 M17NObject *obj = (M17NObject *) object;
826 M17NObjectRecord *record;
829 if (! obj->ref_count_extended)
831 if (! --obj->ref_count)
834 (obj->u.freer) (object);
839 return (int) obj->ref_count;
842 record = obj->u.record;
843 count = record->counts;
845 *(count++) = 0xFFFFFFFF;
847 if (! record->counts[0])
849 obj->ref_count_extended = 0;
851 obj->u.freer = record->freer;
852 MLIST_FREE1 (record, counts);
863 @addtogroup m17nError Error handling
864 @brief Error handling of the m17n library.
866 There are two types of errors that may happen in a function of
869 The first type is argument errors. When a library function is
870 called with invalid arguments, it returns a value that indicates
871 error and at the same time sets the external variable #merror_code
872 to a non-zero integer.
874 The second type is memory allocation errors. When the required
875 amount of memory is not available on the system, m17n library
876 functions call a function pointed to by the external variable @c
877 m17n_memory_full_handler. The default value of the variable is a
878 pointer to the default_error_handle () function, which just calls
879 <tt> exit ()</tt>. */
882 @addtogroup m17nError ¥¨¥é¡¼½èÍý
883 @brief m17n ¥é¥¤¥Ö¥é¥ê¤Î¥¨¥é¡¼½èÍý.
885 m17n ¥é¥¤¥Ö¥é¥ê¤Î´Ø¿ô¤Ç¤Ï¡¢£²¤Ä¤Î¼ïÎà¤Î¥¨¥é¡¼¤¬µ¯¤³¤êÆÀ¤ë¡£
887 °ì¤Ä¤Ï°ú¿ô¤Î¥¨¥é¡¼¤Ç¤¢¤ë¡£¥é¥¤¥Ö¥é¥ê¤Î´Ø¿ô¤¬ÂÅÅö¤Ç¤Ê¤¤°ú¿ô¤È¤È¤â¤Ë
888 ¸Æ¤Ð¤ì¤¿¾ì¹ç¡¢¤½¤Î´Ø¿ô¤Ï¥¨¥é¡¼¤ò°ÕÌ£¤¹¤ëÃͤòÊÖ¤·¡¢Æ±»þ¤Ë³°ÉôÊÑ¿ô
889 #merror_code ¤Ë¥¼¥í¤Ç¤Ê¤¤À°¿ô¤ò¥»¥Ã¥È¤¹¤ë¡£
891 ¤â¤¦°ì¤Ä¤Î¼ïÎà¤Ï¥á¥â¥ê³äÅö¤Æ¥¨¥é¡¼¤Ç¤¢¤ë¡£¥·¥¹¥Æ¥à¤¬É¬ÍפÊÎ̤Υá¥â
892 ¥ê¤ò³äÅö¤Æ¤ë¤³¤È¤¬¤Ç¤¤Ê¤¤¾ì¹ç¡¢¥é¥¤¥Ö¥é¥ê´Ø¿ô¤Ï³°ÉôÊÑ¿ô @c
893 m17n_memory_full_handler ¤¬»Ø¤¹´Ø¿ô¤ò¸Æ¤Ö¡£¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢´Ø¿ô
894 default_error_handle () ¤ò»Ø¤·¤Æ¤ª¤ê¡¢¤³¤Î´Ø¿ô¤Ïñ¤Ë <tt>exit
903 @brief External variable to hold error code of the m17n library.
905 The external variable #merror_code holds an error code of the
906 m17n library. When a library function is called with an invalid
907 argument, it sets this variable to one of @c enum #MErrorCode.
909 This variable initially has the value 0. */
912 @brief m17n ¥é¥¤¥Ö¥é¥ê¤Î¥¨¥é¡¼¥³¡¼¥É¤òÊÝ»ý¤¹¤ë³°ÉôÊÑ¿ô.
914 ³°ÉôÊÑ¿ô #merror_code ¤Ï¡¢m17n ¥é¥¤¥Ö¥é¥ê¤Î¥¨¥é¡¼¥³¡¼¥É¤òÊÝ»ý¤¹¤ë¡£
915 ¥é¥¤¥Ö¥é¥ê´Ø¿ô¤¬ÂÅÅö¤Ç¤Ê¤¤°ú¿ô¤È¤È¤â¤Ë¸Æ¤Ð¤ì¤¿ºÝ¤Ë¤Ï¡¢¤³¤ÎÊÑ¿ô¤ò
916 @c enum #MErrorCode ¤Î°ì¤Ä¤Ë¥»¥Ã¥È¤¹¤ë¡£
918 ¤³¤ÎÊÑ¿ô¤Î½é´üÃÍ¤Ï 0 ¤Ç¤¢¤ë¡£ */
925 @brief Memory allocation error handler.
927 The external variable #m17n_memory_full_handler holds a pointer
928 to the function to call when a library function failed to allocate
929 memory. $ERR is one of @c enum #MErrorCode indicating in which
930 function the error occurred.
932 This variable initially points a function that simply calls the
933 <tt>exit </tt>() function with $ERR as an argument.
935 An application program that needs a different error handling can
936 change this variable to point a proper function. */
939 @brief ¥á¥â¥ê³äÅö¤Æ¥¨¥é¡¼¥Ï¥ó¥É¥é.
941 ÊÑ¿ô #m17n_memory_full_handler ¤Ï¡¢¥é¥¤¥Ö¥é¥ê´Ø¿ô¤¬¥á¥â¥ê³äÅö¤Æ
942 ¤Ë¼ºÇÔ¤·¤¿ºÝ¤Ë¸Æ¤Ö¤Ù¤´Ø¿ô¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£$ERR ¤Ï @c enum
943 #MErrorCode ¤Î¤¤¤º¤ì¤«¤Ç¤¢¤ê¡¢¤É¤Î¥é¥¤¥Ö¥é¥ê´Ø¿ô¤Ç¥¨¥é¡¼¤¬µ¯¤Ã¤¿
948 ½é´üÀßÄê¤Ç¤Ï¡¢¤³¤ÎÊÑ¿ô¤Ïñ¤Ë <tt>exit ()</tt> ¤ò $ERR ¤ò°ú¿ô¤È¤·¤Æ
949 ¸Æ¤Ö´Ø¿ô¤ò»Ø¤·¤Æ¤¤¤ë¡£
951 ¤³¤ì¤È¤Ï°Û¤Ê¤ë¥¨¥é¡¼½èÍý¤òɬÍפȤ¹¤ë¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ï¡¢¤³¤ÎÊÑ¿ô¤ò
952 ŬÅö¤Ê´Ø¿ô¤ËÀßÄꤹ¤ë¤³¤È¤Ç¡¢ÌÜŪ¤òãÀ®¤Ç¤¤ë¡£ */
954 void (*m17n_memory_full_handler) (enum MErrorCode err);
961 @addtogroup m17nDebug
962 @brief Support for m17n library users to debug their programs.
964 The m17n library provides the following facilities to support the
965 library users to debug their programs.
969 <li> Environment variables to control printing of various
974 <li> MDEBUG_INIT -- If set to 1, print information about the
975 library initialization on the call of M17N_INIT ().
977 <li> MDEBUG_FINI -- If set to 1, print counts of objects that are
978 not yet freed on the call of M17N_FINI ().
980 <li> MDEBUG_CHARSET -- If set to 1, print information about
981 charsets being loaded from the m17n database.
983 <li> MDEBUG_CODING -- If set to 1, print information about coding
984 systems being loaded from the m17n database.
986 <li> MDEBUG_DATABASE -- If set to 1, print information about
987 data being loaded from the m17n database.
989 <li> MDEBUG_FONT -- If set to 1, print information about fonts
990 being selected and opened.
992 <li> MDEBUG_FONT_FLT -- If set to 1, print information about which
993 command of Font Layout Table are being executed.
995 <li> MDEBUG_FONT_OTF -- If set to 1, print information about which
996 feature of OpenType Layout Table are being executed.
998 <li> MDEBUG_INPUT -- If set to 1, print information about how an
999 input method is running.
1001 <li> MDEBUG_ALL -- Setting this variable to 1 is equivalent to
1002 setting all the above variables to 1.
1006 <li> Functions to print various objects in a human readable way.
1007 See the documentation of mdebug_dump_XXXX () functions.
1009 <li> The hook function called on an error. See the documentation
1015 @addtogroup m17nDebug
1016 @brief m17n ¥é¥¤¥Ö¥é¥ê¥æ¡¼¥¶¤Î¤¿¤á¤Î¥×¥í¥°¥é¥à¥Ç¥Ð¥Ã¥°¥µ¥Ý¡¼¥È.
1018 m17n ¥é¥¤¥Ö¥é¥ê¤Ï¡¢¤½¤Î¥æ¡¼¥¶¤¬¼«Ê¬¤Î¥×¥í¥°¥é¥à¤ò¥Ç¥Ð¥Ã¥°¤¹¤ë¤¿¤á
1019 ¤Ë¡¢°Ê²¼¤Îµ¡Ç½¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ë¡£
1023 <li> ¤µ¤Þ¤¶¤Þ¤Ê¾ðÊó¤Î¥×¥ê¥ó¥È¤òÀ©¸æ¤¹¤ë´Ä¶ÊÑ¿ô¡£
1027 <li> MDEBUG_INIT -- 1 ¤Ê¤é¤Ð¡¢M17N_INIT () ¤¬¸Æ¤Ð¤ì¤¿»þÅÀ¤Ç¡¢¥é¥¤
1028 ¥Ö¥é¥ê¤Î½é´ü²½¤Ë´Ø¤¹¤ë¾ðÊó¤ò¥×¥ê¥ó¥È¤¹¤ë¡£
1030 <li> MDEBUG_FINI -- 1 ¤Ê¤é¤Ð¡¢M17N_FINI () ¤¬¸Æ¤Ð¤ì¤¿»þÅÀ¤Ç¡¢¤Þ¤À
1031 ²òÊü¤µ¤ì¤Æ¤¤¤Ê¤¤¥ª¥Ö¥¸¥§¥¯¥È¤Î»²¾È¿ô¤ò¥×¥ê¥ó¥È¤¹¤ë¡£
1033 <li> MDEBUG_CHARSET -- 1 ¤Ê¤é¤Ð¡¢m17n ¥Ç¡¼¥¿¥Ù¡¼¥¹¤«¤é¥í¡¼¥É¤µ¤ì¤¿
1034 ʸ»ú¥»¥Ã¥È¤Ë¤Ä¤¤¤Æ¤Î¾ðÊó¤ò¥×¥ê¥ó¥È¤¹¤ë¡£
1036 <li> MDEBUG_CODING -- 1 ¤Ê¤é¤Ð¡¢m17n ¥Ç¡¼¥¿¥Ù¡¼¥¹¤«¤é¥í¡¼¥É¤µ¤ì¤¿
1037 ¥³¡¼¥É·Ï¤Ë¤Ä¤¤¤Æ¤Î¾ðÊó¤ò¥×¥ê¥ó¥È¤¹¤ë¡£
1039 <li> MDEBUG_DATABASE -- 1 ¤Ê¤é¤Ð¡¢m17n ¥Ç¡¼¥¿¥Ù¡¼¥¹¤«¤é¥í¡¼¥É¤µ¤ì
1040 ¤¿¥Ç¡¼¥¿¤Ë¤Ä¤¤¤Æ¤Î¾ðÊó¤ò¥×¥ê¥ó¥È¤¹¤ë¡£
1042 <li> MDEBUG_FONT -- 1 ¤Ê¤é¤Ð¡¢ÁªÂò¤µ¤ì¤Æ¥ª¡¼¥×¥ó¤µ¤ì¤¿¥Õ¥©¥ó¥È¤Ë¤Ä
1043 ¤¤¤Æ¤Î¾ðÊó¤ò¥×¥ê¥ó¥È¤¹¤ë¡£
1045 <li> MDEBUG_FONT_FLT -- 1 ¤Ê¤é¤Ð¡¢Font Layout Table ¤Î¤É¤Î¥³¥Þ¥ó¥É
1046 ¤¬¼Â¹ÔÃ椫¤Ë¤Ä¤¤¤Æ¤Î¤ò¥×¥ê¥ó¥È¤¹¤ë¡£
1048 <li> MDEBUG_FONT_OTF -- 1 ¤Ê¤é¤Ð¡¢OpenType Layout Table ¤Î¤É¤Î°À
1049 ¤¬¼Â¹ÔÃ椫¤Ë¤Ä¤¤¤Æ¤Î¤ò¥×¥ê¥ó¥È¤¹¤ë¡£
1051 <li> MDEBUG_INPUT -- 1 ¤Ê¤é¤Ð¡¢¼Â¹ÔÃæ¤ÎÆþÎϥ᥽¥Ã¥É¤Î¾õÂÖ¤ËÉÕ¤¤¤Æ
1052 ¤Î¾ðÊó¤ò¥×¥ê¥ó¥È¤¹¤ë¡£
1054 <li> MDEBUG_ALL -- 1 ¤Ê¤é¤Ð¡¢¾åµ¤¹¤Ù¤Æ¤ÎÊÑ¿ô¤ò 1 ¤Ë¤·¤¿¤Î¤ÈƱ¤¸¸ú
1059 <li> ¼ï¡¹¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ò¿Í´Ö¤Ë²ÄÆɤʷÁ¤Ç¥×¥ê¥ó¥È¤¹¤ë´Ø¿ô¡£¾ÜºÙ¤Ï
1060 ´Ø¿ô mdebug_dump_XXXX () ¤ÎÀâÌÀ»²¾È¡£
1062 <li> ¥¨¥é¡¼È¯À¸»þ¤Ë¸Æ¤Ð¤ì¤ë¥Õ¥Ã¥¯´Ø¿ô¡£mdebug_hook () ¤ÎÀâÌÀ»²¾È¡£
1072 @brief Hook function called on an error.
1074 The mdebug_hook () function is called when an error happens. It
1075 returns -1 without doing anything. It is useful to set a break
1076 point on this function in a debugger. */
1078 @brief ¥¨¥é¡¼¤ÎºÝ¤Ë¸Æ¤Ð¤ì¤ë¥Õ¥Ã¥¯´Ø¿ô.
1080 ´Ø¿ô mdebug_hook () ¤Ï¥¨¥é¡¼¤¬µ¯¤³¤Ã¤¿ºÝ¤Ë¸Æ¤Ð¤ì¡¢²¿¤â¤»¤º¤Ë-1 ¤ò
1081 ÊÖ¤¹¡£¥Ç¥Ð¥Ã¥¬Æâ¤Ç¥Ö¥ì¡¼¥¯¥Ý¥¤¥ó¥È¤òÀßÄꤹ¤ë¤¿¤á¤ËÍѤ¤¤ë¤³¤È¤¬¤Ç¤