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., 51 Franklin Street, Fifth Floor,
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 function 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 ¤Ç¥ê¥ó¥¯¤µ¤ì¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
157 m17n ¥Ç¡¼¥¿¥Ù¡¼¥¹¤òÍøÍѤ¹¤ë¥â¥¸¥å¡¼¥ë¡Ê¥³¡¼¥ÉÊÑ´¹¡¢Ê¸»ú¥×¥í¥Ñ¥Æ¥£Åù¡Ë
158 ¤òÄ󶡤¹¤ë¡£¥â¥¸¥å¡¼¥ë¤Ï¥Ç¡¼¥¿¥Ù¡¼¥¹¤«¤éɬÍפ˱þ¤¸¤Æ¿Íͤʥǡ¼¥¿¤ò¥í¡¼¥É¤¹¤ë¡£
159 ÍøÍѤ¹¤ë¤¿¤á¤Ë¤Ï¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤Ï <m17n<EM></EM>.h> ¤ò include
160 ¤·¡¢ -lm17n-core -lm17n ¤Ç¥ê¥ó¥¯¤µ¤ì¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
162 ¤³¤Î API ¤ò»ÈÍѤ¹¤ëºÝ¤Ë¤Ï¥³¥¢ API ¤â»ÈÍѤǤ¤ë¡£
166 M-text ¤ò¥°¥é¥Õ¥£¥Ã¥¯¥Ç¥Ð¥¤¥¹¾å¤Çɽ¼¨¤·¤¿¤êÆþÎϤ·¤¿¤ê¤¹¤ë¤È¤¤¤Ã¤¿¡¢¥°¥é¥Õ¥£¥Ã¥¯¥æ¡¼¥¶¥¤¥ó¥¿¥Õ¥§¡¼¥¹¥â¥¸¥å¡¼¥ë¤òÄ󶡤¹¤ë¡£
167 API ¼«ÂΤϥ°¥é¥Õ¥£¥Ã¥¯¥Ç¥Ð¥¤¥¹¤È¤ÏÆÈΩ¤Ç¤¢¤ë¤¬¡¢Â¿¤¯¤Î´Ø¿ô¤ÏÆÃÄê¤Î¥°¥é¥Õ¥£¥Ã¥¯¥Ç¥Ð¥¤¥¹¾å¤ËºîÀ®¤µ¤ì¤¿
168 MFrame ¤ò°ú¿ô¤Ë¼è¤ë¡£¸½»þÅÀ¤Ç¤Ï¡¢¥Ì¥ë¥Ç¥Ð¥¤¥¹¡¢X ¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¡¢
169 GD ¥é¥¤¥Ö¥é¥ê¤Î¥¤¥á¡¼¥¸¡ÊgdImagePtr¡Ë¡¢¤¬¥°¥é¥Õ¥£¥Ã¥¯¥Ç¥Ð¥¤¥¹¤È¤·¤Æ¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ë¡£
171 ¥Ì¥ë¥Ç¥Ð¥¤¥¹¾å¤Ç¤Ïɽ¼¨¤âÆþÎϤâ¤Ç¤¤Ê¤¤¡Ê¤¿¤À¤·¤¿¤È¤¨¤Ð
172 mdraw_glyph_list () ¤Ê¤É¤Î´Ø¿ô¤Ï»ÈÍѲÄǽ¡Ë¡£
174 X ¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¾å¤Ç¤Ï¤¹¤Ù¤Æ¤Î GUI API ¤¬»ÈÍѤǤ¤ë¡£
176 GD ¥é¥¤¥Ö¥é¥ê¤Î¥¤¥á¡¼¥¸¾å¤Ç¤Ï¡¢ÉÁ²èÍѤΠAPI ¤Ï¤¹¤Ù¤Æ»ÈÍѤǤ¤ë¤¬ÆþÎϤϤǤ¤Ê¤¤¡£
178 ¤³¤Î¥Ç¥Ð¥¤¥¹¤ò»ÈÍѤ¹¤ë¤¿¤á¤Ë¤Ï¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤Ï
179 <m17n-gui<EM></EM>.h> ¤ò include ¤·¡¢-lm17n-core -lm17n -lm17n-gui
180 ¤Ç¥ê¥ó¥¯¤µ¤ì¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
182 ¤³¤Î API ¤ò»ÈÍѤ¹¤ëºÝ¤Ë¤Ï¡¢¥³¥¢ API ¤È¥·¥§¥ë API ¤â»ÈÍѤǤ¤ë¡£
186 ¥¨¥é¡¼½èÍý¡¢¥Ç¥Ð¥Ã¥°ÍѤΤ½¤Î¾¤Î´Ø¿ô¤òÄ󶡤¹¤ë¡£¤³¤Î API
187 ¤Ï¤½¤ì¤À¤±¤Ç¤Ï»ÈÍѤǤ¤º¡¢¾åµ¤Î¾¤Î¤â¤Î¤È¶¦¤Ë»È¤¦¡£ÍøÍѤ¹¤ë¤¿¤á¤Ë¤Ï¡¢¾åµ¤Î¤¤¤º¤ì¤«¤Î
188 include ¥Õ¥¡¥¤¥ë¤Ë²Ã¤¨¤Æ¡¢ <m17n-misc<EM></EM>.h> ¤ò include ¤·¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
192 @ref m17n-config "m17n-config(1)" Àá¤â»²¾È¡£
196 m17n ¥é¥¤¥Ö¥é¥ê¤Ï¼¡¤Î´Ä¶ÊÑ¿ô¤ò¹Íθ¤¹¤ë¡£
201 m17n ¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î¥Ç¡¼¥¿¤ò´Þ¤à¥Ç¥£¥ì¥¯¥È¥ê¤Î̾Á°¡£¾ÜºÙ¤Ï @ref
206 "MDEBUG_" ¤Ç»Ï¤Þ¤ë̾Á°¤ò»ý¤Ä´Ä¶ÊÑ¿ô¤Ï¥Ç¥Ð¥Ã¥°¾ðÊó¤òÀ©¸æ¤¹¤ë¡£¾ÜºÙ¤Ï @ref m17nDebug »²¾È¡£
210 @em API @em ¤Î̿̾µ¬Â§ ¥³¥Þ¥ó¥É
212 ¥é¥¤¥Ö¥é¥ê¤Ï¡¢´Ø¿ô¡¢ÊÑ¿ô¡¢¥Þ¥¯¥í¡¢·¿¤ò export ¤¹¤ë¡£¤½¤ì¤é¤Ï'm'
213 ¤Þ¤¿¤Ï 'M' ¤Î¤¢¤È¤Ë¥ª¥Ö¥¸¥§¥¯¥È̾("symbol" ¤ä "plist" ¤Ê¤É¡£¤¿¤À¤·
214 "mtext" ¥ª¥Ö¥¸¥§¥¯¥È¤Ï¤Ï¤¸¤á¤Î 'm' ¤Î½ÅÊ£¤òÈò¤±¤ë¤¿¤á "text"
215 ¤òÍѤ¤¤ë¡£) ¤Þ¤¿¤Ï¥â¥¸¥å¡¼¥ë̾(draw, input ¤Ê¤É) ¤ò³¤±¤¿¤â¤Î¤Ç¤¢¤ë¡£
219 <li> ´Ø¿ô -- mobject () ¤Þ¤¿¤Ï mobject_xxx ()
221 'm' ¤Î¤¢¤È¤Ë¾®Ê¸»ú¤Ç¥ª¥Ö¥¸¥§¥¯¥È̾¤¬Â³¤¯¡£¤¿¤È¤¨¤Ð¡¢msymbol (),
222 mtext_ref_char (), mdraw_text () ¤Ê¤É¡£
224 <li> ¥·¥ó¥Ü¥ë¤Ç¤Ê¤¤ÊÑ¿ô -- mobject, ¤Þ¤¿¤Ï mobject_xxx
226 ´Ø¿ô¤ÈƱ¤¸Ì¿Ì¾µ¬Â§¤Ë½¾¤¦¡£(¤¿¤È¤¨¤Ð mface_large)
228 <li> ¥·¥ó¥Ü¥ëÊÑ¿ô -- Mname
230 MSymbol ·¿ÊÑ¿ô¤Ï¡¢'M' ¤Î¸å¤Ë̾Á°¤¬Â³¤¯¡£¤¿¤È¤¨¤Ð Mlanguage (̾Á°¤Ï
231 "language"), Miso_2022 (̾Á°¤Ï"iso-2022")¤Ê¤É¡£
233 <li> ¥Þ¥¯¥í -- MOBJECT_XXX
235 'M' ¤Î¸å¤ËÂçʸ»ú¤Ç¥ª¥Ö¥¸¥§¥¯¥È̾¤¬Â³¤¯¡£
237 <li> ¥¿¥¤¥× -- MObject ¤Þ¤¿¤Ï MObjectXxx
239 'M' ¤Î¸å¤ËÂçʸ»ú¤Ç»Ï¤á¤Æ¥ª¥Ö¥¸¥§¥¯¥È̾¤ò¤¬Â³¤¯¡£ (¤¿¤È¤¨¤Ð
240 MConverter, MInputDriver)
249 The #M17NLIB_MAJOR_VERSION macro gives the major version number
250 of the m17n library. */
252 ¥Þ¥¯¥í #M17NLIB_MAJOR_VERSION ¤Ï m17n
253 ¥é¥¤¥Ö¥é¥ê¤Î¥á¥¸¥ã¡¼¥Ð¡¼¥¸¥ç¥óÈÖ¹æ¤òÍ¿¤¨¤ë¡£ */
255 #define M17NLIB_MAJOR_VERSION
260 The #M17NLIB_MINOR_VERSION macro gives the minor version number
261 of the m17n library. */
264 ¥Þ¥¯¥í #M17NLIB_MINOR_VERSION ¤Ï m17n
265 ¥é¥¤¥Ö¥é¥ê¤Î¥Þ¥¤¥Ê¡¼¥Ð¡¼¥¸¥ç¥óÈÖ¹æ¤òÍ¿¤¨¤ë¡£ */
267 #define M17NLIB_MINOR_VERSION
272 The #M17NLIB_PATCH_LEVEL macro gives the patch level number
273 of the m17n library. */
276 ¥Þ¥¯¥í #M17NLIB_PATCH_LEVEL ¤Ï m17n
277 ¥é¥¤¥Ö¥é¥ê¤Î¥Ñ¥Ã¥Á¥ì¥Ù¥ëÈÖ¹æ¤òÍ¿¤¨¤ë¡£ */
279 #define M17NLIB_PATCH_LEVEL
284 The #M17NLIB_VERSION_NAME macro gives the version name of the
285 m17n library as a string. */
288 ¥Þ¥¯¥í #M17NLIB_VERSION_NAME ¤Ï m17n
289 ¥é¥¤¥Ö¥é¥ê¤Î¥Ð¡¼¥¸¥ç¥ó̾¤òʸ»úÎó¤È¤·¤ÆÍ¿¤¨¤ë¡£ */
291 #define M17NLIB_VERSION_NAME
296 @brief Initialize the m17n library.
298 The macro M17N_INIT () initializes the m17n library. This macro
299 must be called before any m17n functions are used.
301 It is safe to call this macro multiple times, but in that case,
302 the macro M17N_FINI () must be called the same times to free the
305 If the initialization was successful, the external variable
306 #merror_code is set to 0. Otherwise it is set to -1.
309 M17N_FINI (), m17n_status () */
312 @brief m17n ¥é¥¤¥Ö¥é¥ê¤ò½é´ü²½¤¹¤ë.
314 ¥Þ¥¯¥í M17N_INIT () ¤Ï m17n ¥é¥¤¥Ö¥é¥ê¤ò½é´ü²½¤¹¤ë¡£m17n
315 ¤Î´Ø¿ô¤òÍøÍѤ¹¤ëÁ°¤Ë¡¢¤³¤Î¥Þ¥¯¥í¤ò¤Þ¤º¸Æ¤Ð¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
317 ¤³¤Î¥Þ¥¯¥í¤òÊ£¿ô²ó¸Æ¤ó¤Ç¤â°ÂÁ´¤Ç¤¢¤ë¤¬¡¢¤½¤Î¾ì¹ç¥á¥â¥ê¤ò²òÊü¤¹¤ë¤¿¤á¤Ë¥Þ¥¯¥í
318 M17N_FINI () ¤òƱ¤¸²ó¿ô¸Æ¤ÖɬÍפ¬¤¢¤ë¡£
320 ³°ÉôÊÑ¿ô #merror_code ¤Ï¡¢½é´ü²½¤¬À®¸ù¤¹¤ì¤Ð 0 ¤Ë¡¢¤½¤¦¤Ç¤Ê¤±¤ì¤Ð
324 M17N_FINI (), m17n_status () */
331 @brief Finalize the m17n library.
333 The macro M17N_FINI () finalizes the m17n library. It frees all the
334 memory area used by the m17n library. Once this macro is
335 called, no m17n functions should be used until the
336 macro M17N_INIT () is called again.
338 If the macro M17N_INIT () was called N times, the Nth call of this
339 macro actually free the memory.
342 M17N_INIT (), m17n_status () */
344 @brief m17n ¥é¥¤¥Ö¥é¥ê¤ò½ªÎ»¤¹¤ë.
346 ¥Þ¥¯¥í M17N_FINI () ¤Ï m17n ¥é¥¤¥Ö¥é¥ê¤ò½ªÎ»¤¹¤ë¡£m17n
347 ¥é¥¤¥Ö¥é¥ê¤¬»È¤Ã¤¿Á´¤Æ¤Î¥á¥â¥êÎΰè¤Ï²òÊü¤µ¤ì¤ë¡£°ìÅÙ¤³¤Î¥Þ¥¯¥í¤¬¸Æ¤Ð¤ì¤¿¤é¡¢¥Þ¥¯¥í
348 M17N_INIT () ¤¬ºÆÅٸƤФì¤ë¤Þ¤Ç m17n ´Ø¿ô¤Ï»È¤¦¤Ù¤¤Ç¤Ê¤¤¡£
350 ¥Þ¥¯¥í M17N_INIT () ¤¬ N ²ó¸Æ¤Ð¤ì¤Æ¤¤¤¿¾ì¹ç¤Ë¤Ï¡¢¤³¤Î¥Þ¥¯¥í¤¬ N
351 ²ó¸Æ¤Ð¤ì¤Æ½é¤á¤Æ¥á¥â¥ê¤¬²òÊü¤µ¤ì¤ë¡£
354 M17N_INIT (), m17n_status () */
357 #endif /* FOR_DOXYGEN */
362 #if !defined (FOR_DOXYGEN) || defined (DOXYGEN_INTERNAL_MODULE)
363 /*** @addtogroup m17nInternal
370 #include <sys/time.h>
371 #include <sys/resource.h>
374 #include "m17n-core.h"
375 #include "m17n-misc.h"
376 #include "internal.h"
380 default_error_handler (enum MErrorCode err)
385 static struct timeval time_stack[16];
386 static int time_stack_index;
388 static M17NObjectArray *object_array_root;
391 report_object_array ()
393 fprintf (stderr, "%16s %7s %7s %7s\n",
394 "object", "created", "freed", "alive");
395 fprintf (stderr, "%16s %7s %7s %7s\n",
396 "------", "-------", "-----", "-----");
397 for (; object_array_root; object_array_root = object_array_root->next)
399 M17NObjectArray *array = object_array_root;
401 fprintf (stderr, "%16s %7d %7d %7d\n", array->name,
402 array->used, array->used - array->count, array->count);
405 free (array->objects);
406 array->count = array->used = 0;
415 int m17n__core_initialized;
416 int m17n__shell_initialized;
417 int m17n__gui_initialized;
419 int mdebug__flags[MDEBUG_MAX];
420 FILE *mdebug__output;
427 gettimeofday (time_stack + time_stack_index++, &tz);
437 mdebug__print_time ()
443 gettimeofday (&tv, &tz);
444 diff = ((tv.tv_sec - time_stack[time_stack_index - 1].tv_sec) * 1000000
445 + (tv.tv_usec - time_stack[time_stack_index - 1].tv_usec));
446 fprintf (stderr, "%8ld ms.", diff);
447 time_stack[time_stack_index - 1] = tv;
451 SET_DEBUG_FLAG (char *env_name, enum MDebugFlag flag)
453 char *env_value = getenv (env_name);
457 int int_value = atoi (env_value);
459 if (flag == MDEBUG_ALL)
462 for (i = 0; i < MDEBUG_MAX; i++)
463 mdebug__flags[i] = int_value;
466 mdebug__flags[flag] = int_value;
471 mdebug__add_object_array (M17NObjectArray *array, char *name)
475 array->next = object_array_root;
476 object_array_root = array;
481 mdebug__register_object (M17NObjectArray *array, void *object)
483 if (array->used == 0)
484 MLIST_INIT1 (array, objects, 256);
486 MLIST_APPEND1 (array, objects, object, MERROR_OBJECT);
490 mdebug__unregister_object (M17NObjectArray *array, void *object)
493 if (array->count >= 0)
497 for (i = array->used - 1; i >= 0 && array->objects[i] != object; i--);
500 if (i == array->used - 1)
502 array->objects[i] = NULL;
514 /* The following two are actually not exposed to a user but concealed
515 by the macro M17N_INIT (). */
518 m17n_init_core (void)
520 int mdebug_flag = MDEBUG_INIT;
522 merror_code = MERROR_NONE;
523 if (m17n__core_initialized++)
526 m17n_memory_full_handler = default_error_handler;
528 SET_DEBUG_FLAG ("MDEBUG_ALL", MDEBUG_ALL);
529 SET_DEBUG_FLAG ("MDEBUG_INIT", MDEBUG_INIT);
530 SET_DEBUG_FLAG ("MDEBUG_FINI", MDEBUG_FINI);
531 SET_DEBUG_FLAG ("MDEBUG_CHARSET", MDEBUG_CHARSET);
532 SET_DEBUG_FLAG ("MDEBUG_CODING", MDEBUG_CODING);
533 SET_DEBUG_FLAG ("MDEBUG_DATABASE", MDEBUG_DATABASE);
534 SET_DEBUG_FLAG ("MDEBUG_FONT", MDEBUG_FONT);
535 SET_DEBUG_FLAG ("MDEBUG_FONT_FLT", MDEBUG_FONT_FLT);
536 SET_DEBUG_FLAG ("MDEBUG_FONT_OTF", MDEBUG_FONT_OTF);
537 SET_DEBUG_FLAG ("MDEBUG_INPUT", MDEBUG_INPUT);
539 char *env_value = getenv ("MDEBUG_OUTPUT_FILE");
541 mdebug__output = NULL;
544 if (strcmp (env_value, "stdout"))
545 mdebug__output = stdout;
547 mdebug__output = fopen (env_value, "a");
549 if (! mdebug__output)
550 mdebug__output = stderr;
555 if (msymbol__init () < 0)
557 MDEBUG_PRINT_TIME ("INIT", (stderr, " to initialize symbol module."));
558 if (mplist__init () < 0)
560 MDEBUG_PRINT_TIME ("INIT", (stderr, " to initialize plist module."));
561 if (mchar__init () < 0)
563 MDEBUG_PRINT_TIME ("INIT", (stderr, " to initialize character module."));
564 if (mchartable__init () < 0)
566 MDEBUG_PRINT_TIME ("INIT", (stderr, " to initialize chartable module."));
567 if (mtext__init () < 0 || mtext__prop_init () < 0)
569 MDEBUG_PRINT_TIME ("INIT", (stderr, " to initialize mtext module."));
570 if (mdatabase__init () < 0)
572 MDEBUG_PRINT_TIME ("INIT", (stderr, " to initialize database module."));
575 bindtextdomain ("m17n-lib", GETTEXTDIR);
576 bindtextdomain ("m17n-db", GETTEXTDIR);
577 bindtextdomain ("m17n-contrib", GETTEXTDIR);
578 bind_textdomain_codeset ("m17n-lib", "UTF-8");
579 bind_textdomain_codeset ("m17n-db", "UTF-8");
580 bind_textdomain_codeset ("m17n-contrib", "UTF-8");
585 MDEBUG_PRINT_TIME ("INIT", (stderr, " to initialize the core modules."));
590 m17n_fini_core (void)
592 int mdebug_flag = MDEBUG_FINI;
594 if (m17n__core_initialized == 0
595 || --m17n__core_initialized > 0)
601 MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize chartable module."));
603 MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize mtext module."));
605 MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize symbol module."));
607 MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize plist module."));
608 /* We must call this after the aboves because it frees interval
611 MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize textprop module."));
613 MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize the core modules."));
615 if (mdebug__flags[MDEBUG_FINI])
616 report_object_array ();
617 msymbol__free_table ();
618 if (mdebug__output != stderr)
619 fclose (mdebug__output);
623 #endif /* !FOR_DOXYGEN || DOXYGEN_INTERNAL_MODULE */
626 /*** @addtogroup m17nIntro */
632 @brief Report which part of the m17n library is initialized.
634 The m17n_status () function returns one of these values depending
635 on which part of the m17n library is initialized:
637 #M17N_NOT_INITIALIZED, #M17N_CORE_INITIALIZED,
638 #M17N_SHELL_INITIALIZED, #M17N_GUI_INITIALIZED */
641 @brief m17n ¥é¥¤¥Ö¥é¥ê¤Î¤É¤ÎÉôʬ¤¬½é´ü²½¤µ¤ì¤¿¤«Êó¹ð¤¹¤ë.
643 ´Ø¿ô m17n_status () ¤Ï
644 m17n ¥é¥¤¥Ö¥é¥ê¤Î¤É¤ÎÉôʬ¤¬½é´ü²½¤µ¤ì¤¿¤«¤Ë±þ¤¸¤Æ¡¢°Ê²¼¤ÎÃͤΤ¤¤º¤ì¤«¤òÊÖ¤¹¡£
646 #M17N_NOT_INITIALIZED, #M17N_CORE_INITIALIZED,
647 #M17N_SHELL_INITIALIZED, #M17N_GUI_INITIALIZED */
652 return (m17n__gui_initialized ? M17N_GUI_INITIALIZED
653 : m17n__shell_initialized ? M17N_SHELL_INITIALIZED
654 : m17n__core_initialized ? M17N_CORE_INITIALIZED
655 : M17N_NOT_INITIALIZED);
662 @addtogroup m17nObject
663 @brief Managed objects are objects managed by the reference count.
665 There are some types of m17n objects that are managed by their
666 reference count. Those objects are called @e managed @e objects.
667 When created, the reference count of a managed object is
668 initialized to one. The m17n_object_ref () function increments
669 the reference count of a managed object by one, and the
670 m17n_object_unref () function decrements by one. A managed
671 object is automatically freed when its reference count becomes
674 A property whose key is a managing key can have only a managed
675 object as its value. Some functions, for instance msymbol_put ()
676 and mplist_put (), pay special attention to such a property.
678 In addition to the predefined managed object types, users can
679 define their own managed object types. See the documentation of
680 the m17n_object () for more details. */
682 @addtogroup m17nObject
683 @brief ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤È¤Ï»²¾È¿ô¤Ë¤è¤Ã¤Æ´ÉÍý¤µ¤ì¤Æ¤¤¤ë¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¢¤ë.
685 m17n ¥ª¥Ö¥¸¥§¥¯¥È¤Î¤¢¤ë·¿¤Î¤â¤Î¤Ï¡¢»²¾È¿ô¤Ë¤è¤Ã¤Æ´ÉÍý¤µ¤ì¤Æ¤¤¤ë¡£
686 ¤½¤ì¤é¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ï @e ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È ¤È¸Æ¤Ð¤ì¤ë¡£À¸À®¤µ¤ì¤¿»þÅÀ¤Ç¤Î»²¾È¿ô¤Ï
687 1 ¤Ë½é´ü²½¤µ¤ì¤Æ¤¤¤ë¡£´Ø¿ô m17n_object_ref () ¤Ï´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤Î»²¾È¿ô¤ò
688 1 Áý¤ä¤·¡¢´Ø¿ôm17n_object_unref () ¤Ï 1 ¸º¤é¤¹¡£»²¾È¿ô¤¬
689 0 ¤Ë¤Ê¤Ã¤¿´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤Ï¼«Æ°Åª¤Ë²òÊü¤µ¤ì¤ë¡£
691 ¥¡¼¤¬´ÉÍý¥¡¼¤Ç¤¢¤ë¥×¥í¥Ñ¥Æ¥£¤Ï¡¢ÃͤȤ·¤Æ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤À¤±¤ò¼è¤ë¡£
692 ´Ø¿ô msymbol_put () ¤ä mplist_put () ¤Ê¤É¤Ï¤½¤ì¤é¤Î¥×¥í¥Ñ¥Æ¥£¤òÆÃÊÌ°·¤¤¤¹¤ë¡£
694 ÄêµÁºÑ¤ß´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¥¿¥¤¥×¤Î¾¤Ë¡¢¥æ¡¼¥¶¤ÏɬÍפʴÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¥¿¥¤¥×¤ò¼«Ê¬¤ÇÄêµÁ¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£¾ÜºÙ¤Ï
695 m17n_object () ¤ÎÀâÌÀ¤ò»²¾È¡£ */
700 @brief Allocate a managed object.
702 The m17n_object () function allocates a new managed object of
703 $SIZE bytes and sets its reference count to 1. $FREER is the
704 function that is used to free the object when the reference count
705 becomes 0. If $FREER is NULL, the object is freed by the free ()
708 The heading bytes of the allocated object is occupied by
709 #M17NObjectHead. That area is reserved for the m17n library and
710 application programs should never touch it.
713 This function returns a newly allocated object.
716 This function never fails. */
719 @brief ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤ò³ä¤êÅö¤Æ¤ë.
721 ´Ø¿ô m17n_object () ¤Ï$SIZE ¥Ð¥¤¥È¤Î¿·¤·¤¤´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤ò³ä¤êÅö¤Æ¡¢¤½¤Î»²¾È¿ô¤ò
722 1 ¤È¤¹¤ë¡£ $FREER ¤Ï»²¾È¿ô¤¬ 0
723 ¤Ë¤Ê¤Ã¤¿ºÝ¤Ë¤½¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ò²òÊü¤¹¤ë¤¿¤á¤ËÍѤ¤¤é¤ì¤ë´Ø¿ô¤Ç¤¢¤ë¡£$FREER
724 ¤¬ NULL¤Ê¤é¤Ð¡¢¥ª¥Ö¥¸¥§¥¯¥È¤Ï´Ø¿ô free () ¤Ë¤è¤Ã¤Æ²òÊü¤µ¤ì¤ë¡£
726 ³ä¤êÅö¤Æ¤é¤ì¤¿¥ª¥Ö¥¸¥§¥¯¥ÈËÁƬ¤Î¥Ð¥¤¥È¤Ï¡¢#M17NObjectHead
727 ¤¬Àê¤á¤ë¡£¤³¤ÎÎΰè¤Ï m17n ¥é¥¤¥Ö¥é¥ê¤¬»ÈÍѤ¹¤ë¤Î¤Ç¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤Ï¿¨¤ì¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
730 ¤³¤Î´Ø¿ô¤Ï¿·¤·¤¯³ä¤êÅö¤Æ¤é¤ì¤¿¥ª¥Ö¥¸¥§¥¯¥È¤òÊÖ¤¹¡£
733 ¤³¤Î´Ø¿ô¤Ï¼ºÇÔ¤·¤Ê¤¤¡£ */
746 free (((MYStruct *) obj)->mem2);
751 my_func (MText *mt, MSymbol key, int num, char *str)
753 MYStruct *st = m17n_object (sizeof (MYStruct), my_freer);
756 st->mem2 = strdup (str);
757 /* KEY must be a managing key. */
758 mtext_put_prop (mt, 0, mtext_len (mt), key, st);
759 /* This sets the reference count of ST back to 1. */
760 m17n_object_unref (st);
765 m17n_object (int size, void (*freer) (void *))
767 M17NObject *obj = malloc (size);
770 obj->ref_count_extended = 0;
772 obj->u.freer = freer;
779 @brief Increment the reference count of a managed object.
781 The m17n_object_ref () function increments the reference count of
782 the managed object pointed to by $OBJECT.
785 This function returns the resulting reference count if it fits in
786 a 16-bit unsigned integer (i.e. less than 0x10000). Otherwise, it
790 This function never fails. */
792 @brief ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤Î»²¾È¿ô¤ò 1 Áý¤ä¤¹.
794 ´Ø¿ô m17n_object_ref () ¤Ï $OBJECT
795 ¤Ç»Ø¤µ¤ì¤ë´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤Î»²¾È¿ô¤ò 1 Áý¤ä¤¹¡£
798 ¤³¤Î´Ø¿ô¤Ï¡¢Áý¤ä¤·¤¿»²¾È¿ô¤¬ 16 ¥Ó¥Ã¥È¤ÎÉä¹æ̵¤·À°¿ôÃÍ(¤¹¤Ê¤ï¤Á
799 0x10000 ̤Ëþ)¤Ë¤ª¤µ¤Þ¤ì¤Ð¡¢¤½¤ì¤òÊÖ¤¹¡£¤½¤¦¤Ç¤Ê¤±¤ì¤Ð -1 ¤òÊÖ¤¹¡£
802 ¤³¤Î´Ø¿ô¤Ï¼ºÇÔ¤·¤Ê¤¤¡£ */
805 m17n_object_ref (void *object)
807 M17NObject *obj = (M17NObject *) object;
808 M17NObjectRecord *record;
811 if (! obj->ref_count_extended)
813 if (++obj->ref_count)
814 return (int) obj->ref_count;
815 MSTRUCT_MALLOC (record, MERROR_OBJECT);
816 record->freer = obj->u.freer;
817 MLIST_INIT1 (record, counts, 1);
818 MLIST_APPEND1 (record, counts, 0, MERROR_OBJECT);
819 obj->u.record = record;
820 obj->ref_count_extended = 1;
823 record = obj->u.record;
825 count = record->counts;
826 while (*count == 0xFFFFFFFF)
829 if (*count == 0xFFFFFFFF)
830 MLIST_APPEND1 (record, counts, 0, MERROR_OBJECT);
837 @brief Decrement the reference count of a managed object.
839 The m17n_object_unref () function decrements the reference count
840 of the managed object pointed to by $OBJECT. When the reference
841 count becomes zero, the object is freed by its freer function.
844 This function returns the resulting reference count if it fits in
845 a 16-bit unsigned integer (i.e. less than 0x10000). Otherwise, it
846 returns -1. Thus, the return value zero means that $OBJECT is
850 This function never fails. */
852 @brief ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤Î»²¾È¿ô¤ò 1 ¸º¤é¤¹.
854 ´Ø¿ô m17n_object_unref () ¤Ï $OBJECT ¤Ç»Ø¤µ¤ì¤ë´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤Î»²¾È¿ô¤ò
855 1 ¸º¤é¤¹¡£»²¾È¿ô¤¬ 0 ¤Ë¤Ê¤ì¤Ð¡¢¥ª¥Ö¥¸¥§¥¯¥È¤Ï²òÊü´Ø¿ô¤Ë¤è¤Ã¤Æ²òÊü¤µ¤ì¤ë¡£
858 ¤³¤Î´Ø¿ô¤Ï¡¢¸º¤é¤·¤¿»²¾È¿ô¤¬ 16 ¥Ó¥Ã¥È¤ÎÉä¹æ̵¤·À°¿ôÃÍ(¤¹¤Ê¤ï¤Á
859 0x10000 ̤Ëþ)¤Ë¤ª¤µ¤Þ¤ì¤Ð¡¢¤½¤ì¤òÊÖ¤¹¡£¤½¤¦¤Ç¤Ê¤±¤ì¤Ð -1
860 ¤òÊÖ¤¹¡£¤Ä¤Þ¤ê¡¢0 ¤¬Ê֤äÆÍ褿¾ì¹ç¤Ï$OBJECT ¤Ï²òÊü¤µ¤ì¤Æ¤¤¤ë¡£
863 ¤³¤Î´Ø¿ô¤Ï¼ºÇÔ¤·¤Ê¤¤¡£ */
865 m17n_object_unref (void *object)
867 M17NObject *obj = (M17NObject *) object;
868 M17NObjectRecord *record;
871 if (! obj->ref_count_extended)
873 if (! --obj->ref_count)
876 (obj->u.freer) (object);
881 return (int) obj->ref_count;
884 record = obj->u.record;
885 count = record->counts;
887 *(count++) = 0xFFFFFFFF;
889 if (! record->counts[0])
891 obj->ref_count_extended = 0;
893 obj->u.freer = record->freer;
894 MLIST_FREE1 (record, counts);
905 @addtogroup m17nError Error handling
906 @brief Error handling of the m17n library.
908 There are two types of errors that may happen in a function of
911 The first type is argument errors. When a library function is
912 called with invalid arguments, it returns a value that indicates
913 error and at the same time sets the external variable #merror_code
914 to a non-zero integer.
916 The second type is memory allocation errors. When the required
917 amount of memory is not available on the system, m17n library
918 functions call a function pointed to by the external variable @c
919 m17n_memory_full_handler. The default value of the variable is a
920 pointer to the default_error_handle () function, which just calls
921 <tt> exit ()</tt>. */
924 @addtogroup m17nError ¥¨¥é¡¼½èÍý
925 @brief m17n ¥é¥¤¥Ö¥é¥ê¤Î¥¨¥é¡¼½èÍý.
927 m17n ¥é¥¤¥Ö¥é¥ê¤Î´Ø¿ô¤Ç¤Ï¡¢£²¤Ä¤Î¼ïÎà¤Î¥¨¥é¡¼¤¬µ¯¤³¤êÆÀ¤ë¡£
929 °ì¤Ä¤Ï°ú¿ô¤Î¥¨¥é¡¼¤Ç¤¢¤ë¡£
930 ¥é¥¤¥Ö¥é¥ê¤Î´Ø¿ô¤¬ÂÅÅö¤Ç¤Ê¤¤°ú¿ô¤È¤È¤â¤Ë¸Æ¤Ð¤ì¤¿¾ì¹ç¡¢¤½¤Î´Ø¿ô¤Ï¥¨¥é¡¼¤ò°ÕÌ£¤¹¤ëÃͤòÊÖ¤·¡¢Æ±»þ¤Ë³°ÉôÊÑ¿ô
931 #merror_code ¤Ë¥¼¥í¤Ç¤Ê¤¤À°¿ô¤ò¥»¥Ã¥È¤¹¤ë¡£
933 ¤â¤¦°ì¤Ä¤Î¼ïÎà¤Ï¥á¥â¥ê³äÅö¤Æ¥¨¥é¡¼¤Ç¤¢¤ë¡£
934 ¥·¥¹¥Æ¥à¤¬É¬ÍפÊÎ̤Υá¥â¥ê¤ò³äÅö¤Æ¤ë¤³¤È¤¬¤Ç¤¤Ê¤¤¾ì¹ç¡¢¥é¥¤¥Ö¥é¥ê´Ø¿ô¤Ï³°ÉôÊÑ¿ô
935 @c m17n_memory_full_handler ¤¬»Ø¤¹´Ø¿ô¤ò¸Æ¤Ö¡£¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢´Ø¿ô
936 default_error_handle () ¤ò»Ø¤·¤Æ¤ª¤ê¡¢¤³¤Î´Ø¿ô¤Ïñ¤Ë <tt>exit
945 @brief External variable to hold error code of the m17n library.
947 The external variable #merror_code holds an error code of the
948 m17n library. When a library function is called with an invalid
949 argument, it sets this variable to one of @c enum #MErrorCode.
951 This variable initially has the value 0. */
954 @brief m17n ¥é¥¤¥Ö¥é¥ê¤Î¥¨¥é¡¼¥³¡¼¥É¤òÊÝ»ý¤¹¤ë³°ÉôÊÑ¿ô.
956 ³°ÉôÊÑ¿ô #merror_code ¤Ï¡¢m17n ¥é¥¤¥Ö¥é¥ê¤Î¥¨¥é¡¼¥³¡¼¥É¤òÊÝ»ý¤¹¤ë¡£
957 ¥é¥¤¥Ö¥é¥ê´Ø¿ô¤¬ÂÅÅö¤Ç¤Ê¤¤°ú¿ô¤È¤È¤â¤Ë¸Æ¤Ð¤ì¤¿ºÝ¤Ë¤Ï¡¢¤³¤ÎÊÑ¿ô¤ò
958 @c enum #MErrorCode ¤Î°ì¤Ä¤Ë¥»¥Ã¥È¤¹¤ë¡£
960 ¤³¤ÎÊÑ¿ô¤Î½é´üÃÍ¤Ï 0 ¤Ç¤¢¤ë¡£ */
967 @brief Memory allocation error handler.
969 The external variable #m17n_memory_full_handler holds a pointer
970 to the function to call when a library function failed to allocate
971 memory. $ERR is one of @c enum #MErrorCode indicating in which
972 function the error occurred.
974 This variable initially points a function that simply calls the
975 <tt>exit </tt>() function with $ERR as an argument.
977 An application program that needs a different error handling can
978 change this variable to point a proper function. */
981 @brief ¥á¥â¥ê³äÅö¤Æ¥¨¥é¡¼¥Ï¥ó¥É¥é.
983 ÊÑ¿ô #m17n_memory_full_handler
984 ¤Ï¡¢¥é¥¤¥Ö¥é¥ê´Ø¿ô¤¬¥á¥â¥ê³äÅö¤Æ¤Ë¼ºÇÔ¤·¤¿ºÝ¤Ë¸Æ¤Ö¤Ù¤´Ø¿ô¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£
985 $ERR ¤Ï @c enum #MErrorCode
986 ¤Î¤¦¤Á¤Î¤¤¤º¤ì¤«¤Ç¤¢¤ê¡¢¤É¤Î¥é¥¤¥Ö¥é¥ê´Ø¿ô¤Ç¥¨¥é¡¼¤¬µ¯¤Ã¤¿¤«¤ò¼¨¤¹¡£
990 ½é´üÀßÄê¤Ç¤Ï¡¢¤³¤ÎÊÑ¿ô¤Ïñ¤Ë <tt>exit ()</tt> ¤ò $ERR
991 ¤ò°ú¿ô¤È¤·¤Æ¸Æ¤Ö´Ø¿ô¤ò»Ø¤·¤Æ¤¤¤ë¡£
993 ¤³¤ì¤È¤Ï°Û¤Ê¤ë¥¨¥é¡¼½èÍý¤òɬÍפȤ¹¤ë¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ï¡¢¤³¤ÎÊÑ¿ô¤òŬÅö¤Ê´Ø¿ô¤ËÀßÄꤹ¤ë¤³¤È¤Ç¡¢ÌÜŪ¤òãÀ®¤Ç¤¤ë¡£ */
995 void (*m17n_memory_full_handler) (enum MErrorCode err);
1002 @addtogroup m17nDebug
1003 @brief Support for m17n library users to debug their programs.
1005 The m17n library provides the following facilities to support the
1006 library users to debug their programs.
1010 <li> Environment variables to control printing of various
1015 <li> MDEBUG_INIT -- If set to 1, print information about the
1016 library initialization on the call of M17N_INIT ().
1018 <li> MDEBUG_FINI -- If set to 1, print counts of objects that are
1019 not yet freed on the call of M17N_FINI ().
1021 <li> MDEBUG_CHARSET -- If set to 1, print information about
1022 charsets being loaded from the m17n database.
1024 <li> MDEBUG_CODING -- If set to 1, print information about coding
1025 systems being loaded from the m17n database.
1027 <li> MDEBUG_DATABASE -- If set to 1, print information about
1028 data being loaded from the m17n database.
1030 <li> MDEBUG_FONT -- If set to 1, print information about fonts
1031 being selected and opened.
1033 <li> MDEBUG_FONT_FLT -- If set to 1, print information about which
1034 command of Font Layout Table are being executed.
1036 <li> MDEBUG_FONT_OTF -- If set to 1, print information about which
1037 feature of OpenType Layout Table are being executed.
1039 <li> MDEBUG_INPUT -- If set to 1, print information about how an
1040 input method is running.
1042 <li> MDEBUG_ALL -- Setting this variable to 1 is equivalent to
1043 setting all the above variables to 1.
1047 <li> Functions to print various objects in a human readable way.
1048 See the documentation of mdebug_dump_XXXX () functions.
1050 <li> The hook function called on an error. See the documentation
1056 @addtogroup m17nDebug
1057 @brief m17n ¥é¥¤¥Ö¥é¥ê¥æ¡¼¥¶¤Î¤¿¤á¤Î¥×¥í¥°¥é¥à¥Ç¥Ð¥Ã¥°¥µ¥Ý¡¼¥È.
1059 m17n ¥é¥¤¥Ö¥é¥ê¤Ï¡¢¤½¤Î¥æ¡¼¥¶¤¬¼«Ê¬¤Î¥×¥í¥°¥é¥à¤ò¥Ç¥Ð¥Ã¥°¤¹¤ë¤¿¤á¤Ë¡¢°Ê²¼¤Îµ¡Ç½¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ë¡£
1063 <li> ¤µ¤Þ¤¶¤Þ¤Ê¾ðÊó¤Î¥×¥ê¥ó¥È¤òÀ©¸æ¤¹¤ë´Ä¶ÊÑ¿ô¡£
1067 <li> MDEBUG_INIT -- 1 ¤Ê¤é¤Ð¡¢M17N_INIT ()
1068 ¤¬¸Æ¤Ð¤ì¤¿»þÅÀ¤Ç¡¢¥é¥¤¥Ö¥é¥ê¤Î½é´ü²½¤Ë´Ø¤¹¤ë¾ðÊó¤ò¥×¥ê¥ó¥È¤¹¤ë¡£
1070 <li> MDEBUG_FINI -- 1 ¤Ê¤é¤Ð¡¢M17N_FINI ()
1071 ¤¬¸Æ¤Ð¤ì¤¿»þÅÀ¤Ç¡¢¤Þ¤À²òÊü¤µ¤ì¤Æ¤¤¤Ê¤¤¥ª¥Ö¥¸¥§¥¯¥È¤Î»²¾È¿ô¤ò¥×¥ê¥ó¥È¤¹¤ë¡£
1073 <li> MDEBUG_CHARSET -- 1 ¤Ê¤é¤Ð¡¢m17n
1074 ¥Ç¡¼¥¿¥Ù¡¼¥¹¤«¤é¥í¡¼¥É¤µ¤ì¤¿Ê¸»ú¥»¥Ã¥È¤Ë¤Ä¤¤¤Æ¤Î¾ðÊó¤ò¥×¥ê¥ó¥È¤¹¤ë¡£
1076 <li> MDEBUG_CODING -- 1 ¤Ê¤é¤Ð¡¢m17n
1077 ¥Ç¡¼¥¿¥Ù¡¼¥¹¤«¤é¥í¡¼¥É¤µ¤ì¤¿¥³¡¼¥É·Ï¤Ë¤Ä¤¤¤Æ¤Î¾ðÊó¤ò¥×¥ê¥ó¥È¤¹¤ë¡£
1079 <li> MDEBUG_DATABASE -- 1 ¤Ê¤é¤Ð¡¢m17n
1080 ¥Ç¡¼¥¿¥Ù¡¼¥¹¤«¤é¥í¡¼¥É¤µ¤ì¤¿¥Ç¡¼¥¿¤Ë¤Ä¤¤¤Æ¤Î¾ðÊó¤ò¥×¥ê¥ó¥È¤¹¤ë¡£
1082 <li> MDEBUG_FONT -- 1 ¤Ê¤é¤Ð¡¢ÁªÂò¤µ¤ì¤Æ¥ª¡¼¥×¥ó¤µ¤ì¤¿¥Õ¥©¥ó¥È¤Ë¤Ä¤¤¤Æ¤Î¾ðÊó¤ò¥×¥ê¥ó¥È¤¹¤ë¡£
1084 <li> MDEBUG_FONT_FLT -- 1 ¤Ê¤é¤Ð¡¢Font Layout Table
1085 ¤Î¤É¤Î¥³¥Þ¥ó¥É¤¬¼Â¹ÔÃ椫¤Ë¤Ä¤¤¤Æ¤Î¤ò¥×¥ê¥ó¥È¤¹¤ë¡£
1087 <li> MDEBUG_FONT_OTF -- 1 ¤Ê¤é¤Ð¡¢OpenType Layout Table
1088 ¤Î¤É¤Î°À¤¬¼Â¹ÔÃ椫¤Ë¤Ä¤¤¤Æ¤Î¤ò¥×¥ê¥ó¥È¤¹¤ë¡£
1090 <li> MDEBUG_INPUT -- 1 ¤Ê¤é¤Ð¡¢¼Â¹ÔÃæ¤ÎÆþÎϥ᥽¥Ã¥É¤Î¾õÂÖ¤ËÉÕ¤¤¤Æ¤Î¾ðÊó¤ò¥×¥ê¥ó¥È¤¹¤ë¡£
1092 <li> MDEBUG_ALL -- 1 ¤Ê¤é¤Ð¡¢¾åµ¤¹¤Ù¤Æ¤ÎÊÑ¿ô¤ò 1
1093 ¤Ë¤·¤¿¤Î¤ÈƱ¤¸¸ú²Ì¤ò»ý¤Ä¡£
1097 <li> ¼ï¡¹¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ò¿Í´Ö¤Ë²ÄÆɤʷÁ¤Ç¥×¥ê¥ó¥È¤¹¤ë´Ø¿ô¡£¾ÜºÙ¤Ï´Ø¿ô
1098 mdebug_dump_XXXX () ¤ÎÀâÌÀ»²¾È¡£
1100 <li> ¥¨¥é¡¼È¯À¸»þ¤Ë¸Æ¤Ð¤ì¤ë¥Õ¥Ã¥¯´Ø¿ô¡£mdebug_hook () ¤ÎÀâÌÀ»²¾È¡£
1110 @brief Hook function called on an error.
1112 The mdebug_hook () function is called when an error happens. It
1113 returns -1 without doing anything. It is useful to set a break
1114 point on this function in a debugger. */
1116 @brief ¥¨¥é¡¼¤ÎºÝ¤Ë¸Æ¤Ð¤ì¤ë¥Õ¥Ã¥¯´Ø¿ô.
1118 ´Ø¿ô mdebug_hook () ¤Ï¥¨¥é¡¼¤¬µ¯¤³¤Ã¤¿ºÝ¤Ë¸Æ¤Ð¤ì¡¢²¿¤â¤»¤º¤Ë-1
1119 ¤òÊÖ¤¹¡£¥Ç¥Ð¥Ã¥¬Æâ¤Ç¥Ö¥ì¡¼¥¯¥Ý¥¤¥ó¥È¤òÀßÄꤹ¤ë¤¿¤á¤ËÍѤ¤¤ë¤³¤È¤¬¤Ç¤¤ë¡£