1 /* m17n-core.c -- body of the CORE API.
2 Copyright (C) 2003, 2004, 2005, 2006, 2007
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. To use this API, an
35 application program must include <m17n-core<EM></EM>.h> and be
36 linked with -lm17n-core.
40 It provides modules for character properties, character set
41 handling, code conversion, 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 with
46 When you use this API, CORE API is also available.
50 It provides modules for text shaping using @ref mdbFLT. To use
51 this API, an application program must include <m17n<EM></EM>.h>
52 and be linked with -lm17n-core -lm17n-flt.
54 When you use this API, CORE API is also available.
58 It provides GUI modules such as drawing and inputting M-texts on a
59 graphic device. This API itself is independent of graphic
60 devices, but most functions require an argument MFrame that is
61 created for a specific type of graphic devices. The currently
62 supported graphic devices are null device, the X Window System,
63 and image data (gdImagePtr) of the GD library.
65 On a frame of a null device, you cannot draw text nor use input
66 methods. However, functions like mdraw_glyph_list (), etc. are
69 On a frame of the X Window System, you can use the whole GUI API.
71 On a frame of the GD library, you can use all drawing API but
72 cannot use input methods.
74 To use this API, an application program must include
75 <m17n-gui<EM></EM>.h> and be linked with -lm17n-core -lm17n
78 When you use this API, CORE, SHELL, and FLT APIs are also
83 It provides miscellaneous functions to support error handling and
84 debugging. This API cannot be used standalone; it must be used
85 with one or more APIs listed above. To use this API, an
86 application program must include <m17n-misc<EM></EM>.h> in
87 addition to one of the header files described above.
91 See also the section @ref m17n-config "m17n-config(1)".
93 <em>ENVIRONMENT VARIABLES</em>
95 The m17n library pays attention to the following environment
101 The name of the directory that contains data of the m17n database.
102 See @ref m17nDatabase for details.
106 Environment variables whose names start with "MDEBUG_" control
107 debug information output. See @ref m17nDebug for details.
111 <em>API NAMING CONVENTION</em>
113 The m17n library exports functions, variables, macros, and types.
114 All of them start with the letter 'm' or 'M', and are followed by
115 an object name (e.g. "symbol", "plist") or a module name
116 (e.g. draw, input). Note that the name of M-text objects start
117 with "mtext" and not with "mmtext".
121 <li> functions -- mobject () or mobject_xxx ()
123 They start with 'm' and are followed by an object name in lower
124 case. Words are separated by '_'. For example, msymbol (),
125 mtext_ref_char (), mdraw_text ().
127 <li> non-symbol variables -- mobject, or mobject_xxx
129 The naming convention is the same as functions (e.g. mface_large).
131 <li> symbol variables -- Mname
133 Variables of the type MSymbol start with 'M' and are followed by
134 their names. Words are separated by '_'. For example, Mlanguage
135 (the name is "language"), Miso_2022 (the name is "iso-2022").
137 <li> macros -- MOBJECT_XXX
139 They start with 'M' and are followed by an object name in upper
140 case. Words are separated by '_'.
142 <li> types -- MObject or MObjectXxx
144 They start with 'M' and are followed by capitalized object names.
145 Words are concatenated directly and no '_' are used. For example,
146 MConverter, MInputDriver.
153 @addtogroup m17nIntro
154 @brief m17n ¥é¥¤¥Ö¥é¥ê ¥¤¥ó¥È¥í¥À¥¯¥·¥ç¥ó.
158 m17n ¥é¥¤¥Ö¥é¥ê¤Î API ¤Ï°Ê²¼¤Î£´¼ï¤ËʬÎव¤ì¤Æ¤¤¤ë¡£
163 M-text ¤ò°·¤¦¤¿¤á¤Î´ðËÜŪ¤Ê¥â¥¸¥å¡¼¥ë¤òÄ󶡤¹¤ë¡£
164 ¤³¤Î API ¤òÍøÍѤ¹¤ë¤¿¤á¤Ë¤Ï¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤Ï
165 <m17n-core<EM></EM>.h> ¤ò include ¤·¡¢ -lm17n-core
166 ¤Ç¥ê¥ó¥¯¤µ¤ì¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
170 ʸ»ú¥×¥í¥Ñ¥Æ¥£¡¢Ê¸»ú½¸¹çÁàºî¡¢¥³¡¼¥ÉÊÑ´¹Åù¤Î¤¿¤á¤Î¥â¥¸¥å¡¼¥ë¤òÄ󶡤¹¤ë¡£
171 ¤³¤ì¤é¤Î¥â¥¸¥å¡¼¥ë¤Ï¡¢¥Ç¡¼¥¿¥Ù¡¼¥¹¤«¤éɬÍפ˱þ¤¸¤Æ¿Íͤʥǡ¼¥¿¤ò¥í¡¼¥É¤¹¤ë¡£
172 ¤³¤Î API ¤òÍøÍѤ¹¤ë¤¿¤á¤Ë¤Ï¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤Ï
173 <m17n<EM></EM>.h> ¤ò include ¤·¡¢ -lm17n-core -lm17n
174 ¤Ç¥ê¥ó¥¯¤µ¤ì¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
176 ¤³¤Î API ¤ò»ÈÍѤ¹¤ì¤Ð¡¢¥³¥¢ API ¤â¼«Æ°Åª¤Ë»ÈÍѲÄǽ¤È¤Ê¤ë¡£
180 ʸ»úÎóɽ¼¨¤Ë @ref mdbFLT ¤òÍѤ¤¤ë¥â¥¸¥å¡¼¥ë¤òÄ󶡤¹¤ë¡£¤³¤Î API
181 ¤òÍøÍѤ¹¤ë¤¿¤á¤Ë¤Ï¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤Ï <m17n<EM></EM>.h>
182 ¤ò include ¤·¡¢ -lm17n-core -lm17n-flt ¤Ç¥ê¥ó¥¯¤µ¤ì¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
184 ¤³¤Î API ¤ò»ÈÍѤ¹¤ì¤Ð¡¢¥³¥¢ API ¤â¼«Æ°Åª¤Ë»ÈÍѲÄǽ¤È¤Ê¤ë¡£
188 ¥°¥é¥Õ¥£¥Ã¥¯¥Ç¥Ð¥¤¥¹¾å¤Ç M-text ¤òɽ¼¨¤·¤¿¤êÆþÎϤ·¤¿¤ê¤¹¤ë¤¿¤á¤Î
189 GUI ¥â¥¸¥å¡¼¥ë¤òÄ󶡤¹¤ë¡£¤³¤Î API
190 ¼«ÂΤϥ°¥é¥Õ¥£¥Ã¥¯¥Ç¥Ð¥¤¥¹¤È¤ÏÆÈΩ¤Ç¤¢¤ë¤¬¡¢
191 ¿¤¯¤Î´Ø¿ô¤ÏÆÃÄê¤Î¥°¥é¥Õ¥£¥Ã¥¯¥Ç¥Ð¥¤¥¹ÍѤ˺îÀ®¤µ¤ì¤¿
192 MFrame ¤ò°ú¿ô¤Ë¼è¤ë¡£
193 ¸½»þÅÀ¤Ç¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ë¥°¥é¥Õ¥£¥Ã¥¯¥Ç¥Ð¥¤¥¹¤Ï¡¢¥Ì¥ë¥Ç¥Ð¥¤¥¹¡¢X
194 ¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¡¢¤ª¤è¤Ó GD ¥é¥¤¥Ö¥é¥ê¤Î¥¤¥á¡¼¥¸¥Ç¡¼¥¿
195 (gdImagePtr) ¤Ç¤¢¤ë¡£
197 ¥Ì¥ë¥Ç¥Ð¥¤¥¹¤Î¥Õ¥ì¡¼¥à¾å¤Ç¤Ïɽ¼¨¤âÆþÎϤâ¤Ç¤¤Ê¤¤¡£¤¿¤À¤·
198 mdraw_glyph_list () ¤Ê¤É¤Î´Ø¿ô¤Ï»ÈÍѲÄǽ¤Ç¤¢¤ë¡£
200 X ¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¤Î¥Õ¥ì¡¼¥à¾å¤Ç¤Ï¤¹¤Ù¤Æ¤Î GUI API ¤¬»ÈÍѤǤ¤ë¡£
202 GD ¥é¥¤¥Ö¥é¥ê¤Î¥Õ¥ì¡¼¥à¾å¤Ç¤Ï¡¢ÉÁ²èÍѤΠAPI
203 ¤Ï¤¹¤Ù¤Æ»ÈÍѤǤ¤ë¤¬¡¢ÆþÎϤϤǤ¤Ê¤¤¡£
205 ¤³¤Î API ¤ò»ÈÍѤ¹¤ë¤¿¤á¤Ë¤Ï¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤Ï
206 <m17n-gui<EM></EM>.h> ¤ò include ¤·¡¢-lm17n-core -lm17n -lm17n-gui
207 ¤Ç¥ê¥ó¥¯¤µ¤ì¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
209 ¤³¤Î API ¤ò»ÈÍѤ¹¤ì¤Ð¡¢¥³¥¢ API¡¢¥·¥§¥ë API¡¢¤ª¤è¤Ó FLT API
210 ¤â¼«Æ°Åª¤Ë»ÈÍѲÄǽ¤È¤Ê¤ë¡£
214 ¥¨¥é¡¼½èÍý¡¢¥Ç¥Ð¥Ã¥°ÍѤΤ½¤Î¾¤Î´Ø¿ô¤òÄ󶡤¹¤ë¡£¤³¤Î API
215 ¤Ï¤½¤ì¤À¤±¤Ç¤Ï»ÈÍѤǤ¤º¡¢¾åµ¤Î¾¤Î API
216 ¤È¶¦¤Ë»È¤¦¡£ÍøÍѤ¹¤ë¤¿¤á¤Ë¤Ï¡¢¾åµ¤Î¤¤¤º¤ì¤«¤Îinclude
217 ¥Õ¥¡¥¤¥ë¤Ë²Ã¤¨¤Æ¡¢ <m17n-misc<EM></EM>.h> ¤òinclude
222 @ref m17n-config "m17n-config(1)" Àá¤â»²¾È¡£
226 m17n ¥é¥¤¥Ö¥é¥ê¤Ï°Ê²¼¤Î´Ä¶ÊÑ¿ô¤ò»²¾È¤¹¤ë¡£
231 m17n ¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î¥Ç¡¼¥¿¤ò³ÊǼ¤·¤¿¥Ç¥£¥ì¥¯¥È¥ê¤Î̾Á°¡£¾ÜºÙ¤Ï @ref
236 "MDEBUG_" ¤Ç»Ï¤Þ¤ë̾Á°¤ò»ý¤Ä´Ä¶ÊÑ¿ô¤Ï¥Ç¥Ð¥Ã¥°¾ðÊó¤Î½ÐÎϤòÀ©¸æ¤¹¤ë¡£
237 ¾ÜºÙ¤Ï @ref m17nDebug »²¾È¡£
241 @em API @em ¤Î̿̾µ¬Â§
243 m17n ¥é¥¤¥Ö¥é¥ê¤Ï¡¢´Ø¿ô¡¢ÊÑ¿ô¡¢¥Þ¥¯¥í¡¢·¿¤ò export ¤¹¤ë¡£¤½¤ì¤é¤Ï 'm'
244 ¤Þ¤¿¤Ï 'M' ¤Î¤¢¤È¤Ë¥ª¥Ö¥¸¥§¥¯¥È̾ ("symbol"¡¢"plist" ¤Ê¤É)
245 ¤Þ¤¿¤Ï¥â¥¸¥å¡¼¥ë̾ (draw, input ¤Ê¤É) ¤ò³¤±¤¿¤â¤Î¤Ç¤¢¤ë¡£
246 M-text ¥ª¥Ö¥¸¥§¥¯¥È¤Î̾Á°¤Ï "mmtext" ¤Ç¤Ï¤Ê¤¯¤Æ "mtext"
251 <li> ´Ø¿ô -- mobject () ¤Þ¤¿¤Ï mobject_xxx ()
253 'm' ¤Î¤¢¤È¤Ë¾®Ê¸»ú¤Ç¥ª¥Ö¥¸¥§¥¯¥È̾¤¬Â³¤¯¡£Ã±¸ì´Ö¤Ï '_'
254 ¤Ç¶èÀÚ¤é¤ì¤ë¡£¤¿¤È¤¨¤Ð¡¢msymbol (),
255 mtext_ref_char (), mdraw_text () ¤Ê¤É¡£
257 <li> ¥·¥ó¥Ü¥ë¤Ç¤Ê¤¤ÊÑ¿ô -- mobject, ¤Þ¤¿¤Ï mobject_xxx
259 ´Ø¿ô¤ÈƱ¤¸Ì¿Ì¾µ¬Â§¤Ë½¾¤¦¡£¤¿¤È¤¨¤Ð mface_large ¤Ê¤É¡£
261 <li> ¥·¥ó¥Ü¥ëÊÑ¿ô -- Mname
263 MSymbol ·¿ÊÑ¿ô¤Ï¡¢'M' ¤Î¸å¤Ë̾Á°¤¬Â³¤¯¡£Ã±¸ì´Ö¤Ï '_'
264 ¤Ç¶èÀÚ¤é¤ì¤ë¡£¤¿¤È¤¨¤Ð Mlanguage (̾Á°¤Ï "language"), Miso_2022
265 (̾Á°¤Ï"iso-2022") ¤Ê¤É¡£
267 <li> ¥Þ¥¯¥í -- MOBJECT_XXX
269 'M' ¤Î¸å¤ËÂçʸ»ú¤Ç¥ª¥Ö¥¸¥§¥¯¥È̾¤¬Â³¤¯¡£Ã±¸ì´Ö¤Ï '_' ¤Ç¶èÀÚ¤é¤ì¤ë¡£
271 <li> ¥¿¥¤¥× -- MObject ¤Þ¤¿¤Ï MObjectXxx
273 'M' ¤Î¸å¤ËÂçʸ»ú¤Ç»Ï¤Þ¤ë¥ª¥Ö¥¸¥§¥¯¥È̾¤¬Â³¤¯¡£Ã±¸ì¤ÏϢ³¤·¤Æ½ñ¤«¤ì¡¢
274 '_' ¤ÏÍѤ¤¤é¤ì¤Ê¤¤¡£¤¿¤È¤¨¤Ð MConverter, MInputDriver ¤Ê¤É¡£
283 The #M17NLIB_MAJOR_VERSION macro gives the major version number
284 of the m17n library. */
286 ¥Þ¥¯¥í #M17NLIB_MAJOR_VERSION ¤Ï m17n
287 ¥é¥¤¥Ö¥é¥ê¤Î¥á¥¸¥ã¡¼¥Ð¡¼¥¸¥ç¥óÈÖ¹æ¤òÍ¿¤¨¤ë¡£ */
289 #define M17NLIB_MAJOR_VERSION
294 The #M17NLIB_MINOR_VERSION macro gives the minor version number
295 of the m17n library. */
298 ¥Þ¥¯¥í #M17NLIB_MINOR_VERSION ¤Ï m17n
299 ¥é¥¤¥Ö¥é¥ê¤Î¥Þ¥¤¥Ê¡¼¥Ð¡¼¥¸¥ç¥óÈÖ¹æ¤òÍ¿¤¨¤ë¡£ */
301 #define M17NLIB_MINOR_VERSION
306 The #M17NLIB_PATCH_LEVEL macro gives the patch level number
307 of the m17n library. */
310 ¥Þ¥¯¥í #M17NLIB_PATCH_LEVEL ¤Ï m17n
311 ¥é¥¤¥Ö¥é¥ê¤Î¥Ñ¥Ã¥Á¥ì¥Ù¥ëÈÖ¹æ¤òÍ¿¤¨¤ë¡£ */
313 #define M17NLIB_PATCH_LEVEL
318 The #M17NLIB_VERSION_NAME macro gives the version name of the
319 m17n library as a string. */
322 ¥Þ¥¯¥í #M17NLIB_VERSION_NAME ¤Ï m17n
323 ¥é¥¤¥Ö¥é¥ê¤Î¥Ð¡¼¥¸¥ç¥ó̾¤òʸ»úÎó¤È¤·¤ÆÍ¿¤¨¤ë¡£ */
325 #define M17NLIB_VERSION_NAME
330 @brief Initialize the m17n library.
332 The macro M17N_INIT () initializes the m17n library. This macro
333 must be called before any m17n functions are used.
335 It is safe to call this macro multiple times, but in that case,
336 the macro M17N_FINI () must be called the same times to free the
339 If the initialization was successful, the external variable
340 #merror_code is set to 0. Otherwise it is set to -1.
343 M17N_FINI (), m17n_status () */
346 @brief m17n ¥é¥¤¥Ö¥é¥ê¤ò½é´ü²½¤¹¤ë.
348 ¥Þ¥¯¥í M17N_INIT () ¤Ï m17n ¥é¥¤¥Ö¥é¥ê¤ò½é´ü²½¤¹¤ë¡£m17n
349 ¤Î´Ø¿ô¤òÍøÍѤ¹¤ëÁ°¤Ë¡¢¤³¤Î¥Þ¥¯¥í¤ò¤Þ¤º¸Æ¤Ð¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
351 ¤³¤Î¥Þ¥¯¥í¤òÊ£¿ô²ó¸Æ¤ó¤Ç¤â°ÂÁ´¤Ç¤¢¤ë¤¬¡¢¤½¤Î¾ì¹ç¥á¥â¥ê¤ò²òÊü¤¹¤ë¤¿¤á¤Ë¥Þ¥¯¥í
352 M17N_FINI () ¤òƱ¤¸²ó¿ô¸Æ¤ÖɬÍפ¬¤¢¤ë¡£
354 ³°ÉôÊÑ¿ô #merror_code ¤Ï¡¢½é´ü²½¤¬À®¸ù¤¹¤ì¤Ð 0 ¤Ë¡¢¤½¤¦¤Ç¤Ê¤±¤ì¤Ð
358 M17N_FINI (), m17n_status () */
365 @brief Finalize the m17n library.
367 The macro M17N_FINI () finalizes the m17n library. It frees all the
368 memory area used by the m17n library. Once this macro is
369 called, no m17n functions should be used until the
370 macro M17N_INIT () is called again.
372 If the macro M17N_INIT () was called N times, the Nth call of this
373 macro actually free the memory.
376 M17N_INIT (), m17n_status () */
378 @brief m17n ¥é¥¤¥Ö¥é¥ê¤ò½ªÎ»¤¹¤ë.
380 ¥Þ¥¯¥í M17N_FINI () ¤Ï m17n ¥é¥¤¥Ö¥é¥ê¤ò½ªÎ»¤¹¤ë¡£m17n
381 ¥é¥¤¥Ö¥é¥ê¤¬»È¤Ã¤¿Á´¤Æ¤Î¥á¥â¥êÎΰè¤Ï²òÊü¤µ¤ì¤ë¡£°ìÅÙ¤³¤Î¥Þ¥¯¥í¤¬¸Æ¤Ð¤ì¤¿¤é¡¢¥Þ¥¯¥í
382 M17N_INIT () ¤¬ºÆÅٸƤФì¤ë¤Þ¤Ç m17n ´Ø¿ô¤Ï»È¤¦¤Ù¤¤Ç¤Ê¤¤¡£
384 ¥Þ¥¯¥í M17N_INIT () ¤¬ N ²ó¸Æ¤Ð¤ì¤Æ¤¤¤¿¾ì¹ç¤Ë¤Ï¡¢¤³¤Î¥Þ¥¯¥í¤¬ N
385 ²ó¸Æ¤Ð¤ì¤Æ½é¤á¤Æ¥á¥â¥ê¤¬²òÊü¤µ¤ì¤ë¡£
388 M17N_INIT (), m17n_status () */
391 #endif /* FOR_DOXYGEN */
396 #if !defined (FOR_DOXYGEN) || defined (DOXYGEN_INTERNAL_MODULE)
397 /*** @addtogroup m17nInternal
404 #include <sys/time.h>
405 #include <sys/resource.h>
408 #include "m17n-core.h"
409 #include "m17n-misc.h"
410 #include "internal.h"
414 default_error_handler (enum MErrorCode err)
419 static struct timeval time_stack[16];
420 static int time_stack_index;
422 static M17NObjectArray *object_array_root;
425 report_object_array ()
427 fprintf (stderr, "%16s %7s %7s %7s\n",
428 "object", "created", "freed", "alive");
429 fprintf (stderr, "%16s %7s %7s %7s\n",
430 "------", "-------", "-----", "-----");
431 for (; object_array_root; object_array_root = object_array_root->next)
433 M17NObjectArray *array = object_array_root;
435 fprintf (stderr, "%16s %7d %7d %7d\n", array->name,
436 array->used, array->used - array->count, array->count);
439 free (array->objects);
440 array->count = array->used = 0;
449 int m17n__core_initialized;
450 int m17n__shell_initialized;
451 int m17n__gui_initialized;
453 int mdebug__flags[MDEBUG_MAX];
454 FILE *mdebug__output;
461 gettimeofday (time_stack + time_stack_index++, &tz);
471 mdebug__print_time ()
477 gettimeofday (&tv, &tz);
478 diff = ((tv.tv_sec - time_stack[time_stack_index - 1].tv_sec) * 1000000
479 + (tv.tv_usec - time_stack[time_stack_index - 1].tv_usec));
480 fprintf (stderr, "%8ld ms.", diff);
481 time_stack[time_stack_index - 1] = tv;
485 SET_DEBUG_FLAG (char *env_name, enum MDebugFlag flag)
487 char *env_value = getenv (env_name);
491 int int_value = atoi (env_value);
493 if (flag == MDEBUG_ALL)
496 for (i = 0; i < MDEBUG_MAX; i++)
497 mdebug__flags[i] = int_value;
500 mdebug__flags[flag] = int_value;
505 mdebug__add_object_array (M17NObjectArray *array, char *name)
509 array->next = object_array_root;
510 object_array_root = array;
515 mdebug__register_object (M17NObjectArray *array, void *object)
517 if (array->used == 0)
518 MLIST_INIT1 (array, objects, 256);
520 MLIST_APPEND1 (array, objects, object, MERROR_OBJECT);
524 mdebug__unregister_object (M17NObjectArray *array, void *object)
527 if (array->count >= 0)
531 for (i = array->used - 1; i >= 0 && array->objects[i] != object; i--);
534 if (i == array->used - 1)
536 array->objects[i] = NULL;
548 /* The following two are actually not exposed to a user but concealed
549 by the macro M17N_INIT (). */
552 m17n_init_core (void)
554 int mdebug_flag = MDEBUG_INIT;
556 merror_code = MERROR_NONE;
557 if (m17n__core_initialized++)
560 m17n_memory_full_handler = default_error_handler;
562 SET_DEBUG_FLAG ("MDEBUG_ALL", MDEBUG_ALL);
563 SET_DEBUG_FLAG ("MDEBUG_INIT", MDEBUG_INIT);
564 SET_DEBUG_FLAG ("MDEBUG_FINI", MDEBUG_FINI);
565 SET_DEBUG_FLAG ("MDEBUG_CHARSET", MDEBUG_CHARSET);
566 SET_DEBUG_FLAG ("MDEBUG_CODING", MDEBUG_CODING);
567 SET_DEBUG_FLAG ("MDEBUG_DATABASE", MDEBUG_DATABASE);
568 SET_DEBUG_FLAG ("MDEBUG_FONT", MDEBUG_FONT);
569 SET_DEBUG_FLAG ("MDEBUG_FONT_FLT", MDEBUG_FONT_FLT);
570 SET_DEBUG_FLAG ("MDEBUG_FONT_OTF", MDEBUG_FONT_OTF);
571 SET_DEBUG_FLAG ("MDEBUG_INPUT", MDEBUG_INPUT);
573 char *env_value = getenv ("MDEBUG_OUTPUT_FILE");
575 mdebug__output = NULL;
578 if (strcmp (env_value, "stdout"))
579 mdebug__output = stdout;
581 mdebug__output = fopen (env_value, "a");
583 if (! mdebug__output)
584 mdebug__output = stderr;
589 if (msymbol__init () < 0)
591 MDEBUG_PRINT_TIME ("INIT", (stderr, " to initialize symbol module."));
592 if (mplist__init () < 0)
594 MDEBUG_PRINT_TIME ("INIT", (stderr, " to initialize plist module."));
595 if (mchar__init () < 0)
597 MDEBUG_PRINT_TIME ("INIT", (stderr, " to initialize character module."));
598 if (mchartable__init () < 0)
600 MDEBUG_PRINT_TIME ("INIT", (stderr, " to initialize chartable module."));
601 if (mtext__init () < 0 || mtext__prop_init () < 0)
603 MDEBUG_PRINT_TIME ("INIT", (stderr, " to initialize mtext module."));
604 if (mdatabase__init () < 0)
606 MDEBUG_PRINT_TIME ("INIT", (stderr, " to initialize database module."));
609 bindtextdomain ("m17n-lib", GETTEXTDIR);
610 bindtextdomain ("m17n-db", GETTEXTDIR);
611 bindtextdomain ("m17n-contrib", GETTEXTDIR);
612 bind_textdomain_codeset ("m17n-lib", "UTF-8");
613 bind_textdomain_codeset ("m17n-db", "UTF-8");
614 bind_textdomain_codeset ("m17n-contrib", "UTF-8");
619 MDEBUG_PRINT_TIME ("INIT", (stderr, " to initialize the core modules."));
624 m17n_fini_core (void)
626 int mdebug_flag = MDEBUG_FINI;
628 if (m17n__core_initialized == 0
629 || --m17n__core_initialized > 0)
635 MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize chartable module."));
637 MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize mtext module."));
639 MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize symbol module."));
641 MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize plist module."));
642 /* We must call this after the aboves because it frees interval
645 MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize textprop module."));
647 MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize the core modules."));
649 if (mdebug__flags[MDEBUG_FINI])
650 report_object_array ();
651 msymbol__free_table ();
652 if (mdebug__output != stderr)
653 fclose (mdebug__output);
657 #endif /* !FOR_DOXYGEN || DOXYGEN_INTERNAL_MODULE */
660 /*** @addtogroup m17nIntro */
666 @brief Report which part of the m17n library is initialized.
668 The m17n_status () function returns one of these values depending
669 on which part of the m17n library is initialized:
671 #M17N_NOT_INITIALIZED, #M17N_CORE_INITIALIZED,
672 #M17N_SHELL_INITIALIZED, #M17N_GUI_INITIALIZED */
675 @brief m17n ¥é¥¤¥Ö¥é¥ê¤Î¤É¤ÎÉôʬ¤¬½é´ü²½¤µ¤ì¤¿¤«Êó¹ð¤¹¤ë.
677 ´Ø¿ô m17n_status () ¤Ï
678 m17n ¥é¥¤¥Ö¥é¥ê¤Î¤É¤ÎÉôʬ¤¬½é´ü²½¤µ¤ì¤¿¤«¤Ë±þ¤¸¤Æ¡¢°Ê²¼¤ÎÃͤΤ¤¤º¤ì¤«¤òÊÖ¤¹¡£
680 #M17N_NOT_INITIALIZED, #M17N_CORE_INITIALIZED,
681 #M17N_SHELL_INITIALIZED, #M17N_GUI_INITIALIZED */
686 return (m17n__gui_initialized ? M17N_GUI_INITIALIZED
687 : m17n__shell_initialized ? M17N_SHELL_INITIALIZED
688 : m17n__core_initialized ? M17N_CORE_INITIALIZED
689 : M17N_NOT_INITIALIZED);
696 @addtogroup m17nObject
697 @brief Managed objects are objects managed by the reference count.
699 There are some types of m17n objects that are managed by their
700 reference count. Those objects are called @e managed @e objects.
701 When created, the reference count of a managed object is
702 initialized to one. The m17n_object_ref () function increments
703 the reference count of a managed object by one, and the
704 m17n_object_unref () function decrements by one. A managed
705 object is automatically freed when its reference count becomes
708 A property whose key is a managing key can have only a managed
709 object as its value. Some functions, for instance msymbol_put ()
710 and mplist_put (), pay special attention to such a property.
712 In addition to the predefined managed object types, users can
713 define their own managed object types. See the documentation of
714 the m17n_object () for more details. */
716 @addtogroup m17nObject
717 @brief ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤È¤Ï»²¾È¿ô¤Ë¤è¤Ã¤Æ´ÉÍý¤µ¤ì¤Æ¤¤¤ë¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¢¤ë.
719 m17n ¥ª¥Ö¥¸¥§¥¯¥È¤Î¤¢¤ë·¿¤Î¤â¤Î¤Ï¡¢»²¾È¿ô¤Ë¤è¤Ã¤Æ´ÉÍý¤µ¤ì¤Æ¤¤¤ë¡£
720 ¤½¤ì¤é¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ï @e ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È ¤È¸Æ¤Ð¤ì¤ë¡£À¸À®¤µ¤ì¤¿»þÅÀ¤Ç¤Î»²¾È¿ô¤Ï
721 1 ¤Ë½é´ü²½¤µ¤ì¤Æ¤¤¤ë¡£´Ø¿ô m17n_object_ref () ¤Ï´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤Î»²¾È¿ô¤ò
722 1 Áý¤ä¤·¡¢´Ø¿ôm17n_object_unref () ¤Ï 1 ¸º¤é¤¹¡£»²¾È¿ô¤¬
723 0 ¤Ë¤Ê¤Ã¤¿´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤Ï¼«Æ°Åª¤Ë²òÊü¤µ¤ì¤ë¡£
725 ¥¡¼¤¬´ÉÍý¥¡¼¤Ç¤¢¤ë¥×¥í¥Ñ¥Æ¥£¤Ï¡¢ÃͤȤ·¤Æ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤À¤±¤ò¼è¤ë¡£
726 ´Ø¿ô msymbol_put () ¤ä mplist_put () ¤Ê¤É¤Ï¤½¤ì¤é¤Î¥×¥í¥Ñ¥Æ¥£¤òÆÃÊÌ°·¤¤¤¹¤ë¡£
728 ÄêµÁºÑ¤ß´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¥¿¥¤¥×¤Î¾¤Ë¡¢¥æ¡¼¥¶¤ÏɬÍפʴÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¥¿¥¤¥×¤ò¼«Ê¬¤ÇÄêµÁ¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£¾ÜºÙ¤Ï
729 m17n_object () ¤ÎÀâÌÀ¤ò»²¾È¡£ */
734 @brief Allocate a managed object.
736 The m17n_object () function allocates a new managed object of
737 $SIZE bytes and sets its reference count to 1. $FREER is the
738 function that is used to free the object when the reference count
739 becomes 0. If $FREER is NULL, the object is freed by the free ()
742 The heading bytes of the allocated object is occupied by
743 #M17NObjectHead. That area is reserved for the m17n library and
744 application programs should never touch it.
747 This function returns a newly allocated object.
750 This function never fails. */
753 @brief ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤ò³ä¤êÅö¤Æ¤ë.
755 ´Ø¿ô m17n_object () ¤Ï$SIZE ¥Ð¥¤¥È¤Î¿·¤·¤¤´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤ò³ä¤êÅö¤Æ¡¢¤½¤Î»²¾È¿ô¤ò
756 1 ¤È¤¹¤ë¡£ $FREER ¤Ï»²¾È¿ô¤¬ 0
757 ¤Ë¤Ê¤Ã¤¿ºÝ¤Ë¤½¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ò²òÊü¤¹¤ë¤¿¤á¤ËÍѤ¤¤é¤ì¤ë´Ø¿ô¤Ç¤¢¤ë¡£$FREER
758 ¤¬ NULL¤Ê¤é¤Ð¡¢¥ª¥Ö¥¸¥§¥¯¥È¤Ï´Ø¿ô free () ¤Ë¤è¤Ã¤Æ²òÊü¤µ¤ì¤ë¡£
760 ³ä¤êÅö¤Æ¤é¤ì¤¿¥ª¥Ö¥¸¥§¥¯¥ÈËÁƬ¤Î¥Ð¥¤¥È¤Ï¡¢#M17NObjectHead
761 ¤¬Àê¤á¤ë¡£¤³¤ÎÎΰè¤Ï m17n ¥é¥¤¥Ö¥é¥ê¤¬»ÈÍѤ¹¤ë¤Î¤Ç¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤Ï¿¨¤ì¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
764 ¤³¤Î´Ø¿ô¤Ï¿·¤·¤¯³ä¤êÅö¤Æ¤é¤ì¤¿¥ª¥Ö¥¸¥§¥¯¥È¤òÊÖ¤¹¡£
767 ¤³¤Î´Ø¿ô¤Ï¼ºÇÔ¤·¤Ê¤¤¡£ */
780 free (((MYStruct *) obj)->mem2);
785 my_func (MText *mt, MSymbol key, int num, char *str)
787 MYStruct *st = m17n_object (sizeof (MYStruct), my_freer);
790 st->mem2 = strdup (str);
791 /* KEY must be a managing key. */
792 mtext_put_prop (mt, 0, mtext_len (mt), key, st);
793 /* This sets the reference count of ST back to 1. */
794 m17n_object_unref (st);
799 m17n_object (int size, void (*freer) (void *))
801 M17NObject *obj = malloc (size);
804 obj->ref_count_extended = 0;
806 obj->u.freer = freer;
813 @brief Increment the reference count of a managed object.
815 The m17n_object_ref () function increments the reference count of
816 the managed object pointed to by $OBJECT.
819 This function returns the resulting reference count if it fits in
820 a 16-bit unsigned integer (i.e. less than 0x10000). Otherwise, it
824 This function never fails. */
826 @brief ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤Î»²¾È¿ô¤ò 1 Áý¤ä¤¹.
828 ´Ø¿ô m17n_object_ref () ¤Ï $OBJECT
829 ¤Ç»Ø¤µ¤ì¤ë´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤Î»²¾È¿ô¤ò 1 Áý¤ä¤¹¡£
832 ¤³¤Î´Ø¿ô¤Ï¡¢Áý¤ä¤·¤¿»²¾È¿ô¤¬ 16 ¥Ó¥Ã¥È¤ÎÉä¹æ̵¤·À°¿ôÃÍ(¤¹¤Ê¤ï¤Á
833 0x10000 ̤Ëþ)¤Ë¤ª¤µ¤Þ¤ì¤Ð¡¢¤½¤ì¤òÊÖ¤¹¡£¤½¤¦¤Ç¤Ê¤±¤ì¤Ð -1 ¤òÊÖ¤¹¡£
836 ¤³¤Î´Ø¿ô¤Ï¼ºÇÔ¤·¤Ê¤¤¡£ */
839 m17n_object_ref (void *object)
841 M17NObject *obj = (M17NObject *) object;
842 M17NObjectRecord *record;
845 if (! obj->ref_count_extended)
847 if (++obj->ref_count)
848 return (int) obj->ref_count;
849 MSTRUCT_MALLOC (record, MERROR_OBJECT);
850 record->freer = obj->u.freer;
851 MLIST_INIT1 (record, counts, 1);
852 MLIST_APPEND1 (record, counts, 0, MERROR_OBJECT);
853 obj->u.record = record;
854 obj->ref_count_extended = 1;
857 record = obj->u.record;
859 count = record->counts;
860 while (*count == 0xFFFFFFFF)
863 if (*count == 0xFFFFFFFF)
864 MLIST_APPEND1 (record, counts, 0, MERROR_OBJECT);
871 @brief Decrement the reference count of a managed object.
873 The m17n_object_unref () function decrements the reference count
874 of the managed object pointed to by $OBJECT. When the reference
875 count becomes zero, the object is freed by its freer function.
878 This function returns the resulting reference count if it fits in
879 a 16-bit unsigned integer (i.e. less than 0x10000). Otherwise, it
880 returns -1. Thus, the return value zero means that $OBJECT is
884 This function never fails. */
886 @brief ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤Î»²¾È¿ô¤ò 1 ¸º¤é¤¹.
888 ´Ø¿ô m17n_object_unref () ¤Ï $OBJECT ¤Ç»Ø¤µ¤ì¤ë´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤Î»²¾È¿ô¤ò
889 1 ¸º¤é¤¹¡£»²¾È¿ô¤¬ 0 ¤Ë¤Ê¤ì¤Ð¡¢¥ª¥Ö¥¸¥§¥¯¥È¤Ï²òÊü´Ø¿ô¤Ë¤è¤Ã¤Æ²òÊü¤µ¤ì¤ë¡£
892 ¤³¤Î´Ø¿ô¤Ï¡¢¸º¤é¤·¤¿»²¾È¿ô¤¬ 16 ¥Ó¥Ã¥È¤ÎÉä¹æ̵¤·À°¿ôÃÍ(¤¹¤Ê¤ï¤Á
893 0x10000 ̤Ëþ)¤Ë¤ª¤µ¤Þ¤ì¤Ð¡¢¤½¤ì¤òÊÖ¤¹¡£¤½¤¦¤Ç¤Ê¤±¤ì¤Ð -1
894 ¤òÊÖ¤¹¡£¤Ä¤Þ¤ê¡¢0 ¤¬Ê֤äÆÍ褿¾ì¹ç¤Ï$OBJECT ¤Ï²òÊü¤µ¤ì¤Æ¤¤¤ë¡£
897 ¤³¤Î´Ø¿ô¤Ï¼ºÇÔ¤·¤Ê¤¤¡£ */
899 m17n_object_unref (void *object)
901 M17NObject *obj = (M17NObject *) object;
902 M17NObjectRecord *record;
905 if (! obj->ref_count_extended)
907 if (! --obj->ref_count)
910 (obj->u.freer) (object);
915 return (int) obj->ref_count;
918 record = obj->u.record;
919 count = record->counts;
921 *(count++) = 0xFFFFFFFF;
923 if (! record->counts[0])
925 obj->ref_count_extended = 0;
927 obj->u.freer = record->freer;
928 MLIST_FREE1 (record, counts);
939 @addtogroup m17nError Error handling
940 @brief Error handling of the m17n library.
942 There are two types of errors that may happen in a function of
945 The first type is argument errors. When a library function is
946 called with invalid arguments, it returns a value that indicates
947 error and at the same time sets the external variable #merror_code
948 to a non-zero integer.
950 The second type is memory allocation errors. When the required
951 amount of memory is not available on the system, m17n library
952 functions call a function pointed to by the external variable @c
953 m17n_memory_full_handler. The default value of the variable is a
954 pointer to the default_error_handle () function, which just calls
955 <tt> exit ()</tt>. */
958 @addtogroup m17nError ¥¨¥é¡¼½èÍý
959 @brief m17n ¥é¥¤¥Ö¥é¥ê¤Î¥¨¥é¡¼½èÍý.
961 m17n ¥é¥¤¥Ö¥é¥ê¤Î´Ø¿ô¤Ç¤Ï¡¢£²¤Ä¤Î¼ïÎà¤Î¥¨¥é¡¼¤¬µ¯¤³¤êÆÀ¤ë¡£
963 °ì¤Ä¤Ï°ú¿ô¤Î¥¨¥é¡¼¤Ç¤¢¤ë¡£
964 ¥é¥¤¥Ö¥é¥ê¤Î´Ø¿ô¤¬ÂÅÅö¤Ç¤Ê¤¤°ú¿ô¤È¤È¤â¤Ë¸Æ¤Ð¤ì¤¿¾ì¹ç¡¢¤½¤Î´Ø¿ô¤Ï¥¨¥é¡¼¤ò°ÕÌ£¤¹¤ëÃͤòÊÖ¤·¡¢Æ±»þ¤Ë³°ÉôÊÑ¿ô
965 #merror_code ¤Ë¥¼¥í¤Ç¤Ê¤¤À°¿ô¤ò¥»¥Ã¥È¤¹¤ë¡£
967 ¤â¤¦°ì¤Ä¤Î¼ïÎà¤Ï¥á¥â¥ê³äÅö¤Æ¥¨¥é¡¼¤Ç¤¢¤ë¡£
968 ¥·¥¹¥Æ¥à¤¬É¬ÍפÊÎ̤Υá¥â¥ê¤ò³äÅö¤Æ¤ë¤³¤È¤¬¤Ç¤¤Ê¤¤¾ì¹ç¡¢¥é¥¤¥Ö¥é¥ê´Ø¿ô¤Ï³°ÉôÊÑ¿ô
969 @c m17n_memory_full_handler ¤¬»Ø¤¹´Ø¿ô¤ò¸Æ¤Ö¡£¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¡¢´Ø¿ô
970 default_error_handle () ¤ò»Ø¤·¤Æ¤ª¤ê¡¢¤³¤Î´Ø¿ô¤Ïñ¤Ë <tt>exit
979 @brief External variable to hold error code of the m17n library.
981 The external variable #merror_code holds an error code of the
982 m17n library. When a library function is called with an invalid
983 argument, it sets this variable to one of @c enum #MErrorCode.
985 This variable initially has the value 0. */
988 @brief m17n ¥é¥¤¥Ö¥é¥ê¤Î¥¨¥é¡¼¥³¡¼¥É¤òÊÝ»ý¤¹¤ë³°ÉôÊÑ¿ô.
990 ³°ÉôÊÑ¿ô #merror_code ¤Ï¡¢m17n ¥é¥¤¥Ö¥é¥ê¤Î¥¨¥é¡¼¥³¡¼¥É¤òÊÝ»ý¤¹¤ë¡£
991 ¥é¥¤¥Ö¥é¥ê´Ø¿ô¤¬ÂÅÅö¤Ç¤Ê¤¤°ú¿ô¤È¤È¤â¤Ë¸Æ¤Ð¤ì¤¿ºÝ¤Ë¤Ï¡¢¤³¤ÎÊÑ¿ô¤ò
992 @c enum #MErrorCode ¤Î°ì¤Ä¤Ë¥»¥Ã¥È¤¹¤ë¡£
994 ¤³¤ÎÊÑ¿ô¤Î½é´üÃÍ¤Ï 0 ¤Ç¤¢¤ë¡£ */
1001 @brief Memory allocation error handler.
1003 The external variable #m17n_memory_full_handler holds a pointer
1004 to the function to call when a library function failed to allocate
1005 memory. $ERR is one of @c enum #MErrorCode indicating in which
1006 function the error occurred.
1008 This variable initially points a function that simply calls the
1009 <tt>exit </tt>() function with $ERR as an argument.
1011 An application program that needs a different error handling can
1012 change this variable to point a proper function. */
1015 @brief ¥á¥â¥ê³äÅö¤Æ¥¨¥é¡¼¥Ï¥ó¥É¥é.
1017 ÊÑ¿ô #m17n_memory_full_handler
1018 ¤Ï¡¢¥é¥¤¥Ö¥é¥ê´Ø¿ô¤¬¥á¥â¥ê³äÅö¤Æ¤Ë¼ºÇÔ¤·¤¿ºÝ¤Ë¸Æ¤Ö¤Ù¤´Ø¿ô¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£
1019 $ERR ¤Ï @c enum #MErrorCode
1020 ¤Î¤¦¤Á¤Î¤¤¤º¤ì¤«¤Ç¤¢¤ê¡¢¤É¤Î¥é¥¤¥Ö¥é¥ê´Ø¿ô¤Ç¥¨¥é¡¼¤¬µ¯¤Ã¤¿¤«¤ò¼¨¤¹¡£
1024 ½é´üÀßÄê¤Ç¤Ï¡¢¤³¤ÎÊÑ¿ô¤Ïñ¤Ë <tt>exit ()</tt> ¤ò $ERR
1025 ¤ò°ú¿ô¤È¤·¤Æ¸Æ¤Ö´Ø¿ô¤ò»Ø¤·¤Æ¤¤¤ë¡£
1027 ¤³¤ì¤È¤Ï°Û¤Ê¤ë¥¨¥é¡¼½èÍý¤òɬÍפȤ¹¤ë¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ï¡¢¤³¤ÎÊÑ¿ô¤òŬÅö¤Ê´Ø¿ô¤ËÀßÄꤹ¤ë¤³¤È¤Ç¡¢ÌÜŪ¤òãÀ®¤Ç¤¤ë¡£ */
1029 void (*m17n_memory_full_handler) (enum MErrorCode err);
1036 @addtogroup m17nDebug
1037 @brief Support for m17n library users to debug their programs.
1039 The m17n library provides the following facilities to support the
1040 library users to debug their programs.
1044 <li> Environment variables to control printing of various
1049 <li> MDEBUG_INIT -- If set to 1, print information about the
1050 library initialization on the call of M17N_INIT ().
1052 <li> MDEBUG_FINI -- If set to 1, print counts of objects that are
1053 not yet freed on the call of M17N_FINI ().
1055 <li> MDEBUG_CHARSET -- If set to 1, print information about
1056 charsets being loaded from the m17n database.
1058 <li> MDEBUG_CODING -- If set to 1, print information about coding
1059 systems being loaded from the m17n database.
1061 <li> MDEBUG_DATABASE -- If set to 1, print information about
1062 data being loaded from the m17n database.
1064 <li> MDEBUG_FONT -- If set to 1, print information about fonts
1065 being selected and opened.
1067 <li> MDEBUG_FONT_FLT -- If set to 1, print information about which
1068 command of Font Layout Table are being executed.
1070 <li> MDEBUG_FONT_OTF -- If set to 1, print information about which
1071 feature of OpenType Layout Table are being executed.
1073 <li> MDEBUG_INPUT -- If set to 1, print information about how an
1074 input method is running.
1076 <li> MDEBUG_ALL -- Setting this variable to 1 is equivalent to
1077 setting all the above variables to 1.
1081 <li> Functions to print various objects in a human readable way.
1082 See the documentation of mdebug_dump_XXXX () functions.
1084 <li> The hook function called on an error. See the documentation
1090 @addtogroup m17nDebug
1091 @brief m17n ¥é¥¤¥Ö¥é¥ê¥æ¡¼¥¶¤Î¤¿¤á¤Î¥×¥í¥°¥é¥à¥Ç¥Ð¥Ã¥°¥µ¥Ý¡¼¥È.
1093 m17n ¥é¥¤¥Ö¥é¥ê¤Ï¡¢¤½¤Î¥æ¡¼¥¶¤¬¼«Ê¬¤Î¥×¥í¥°¥é¥à¤ò¥Ç¥Ð¥Ã¥°¤¹¤ë¤¿¤á¤Ë¡¢°Ê²¼¤Îµ¡Ç½¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ë¡£
1097 <li> ¤µ¤Þ¤¶¤Þ¤Ê¾ðÊó¤Î¥×¥ê¥ó¥È¤òÀ©¸æ¤¹¤ë´Ä¶ÊÑ¿ô¡£
1101 <li> MDEBUG_INIT -- 1 ¤Ê¤é¤Ð¡¢M17N_INIT ()
1102 ¤¬¸Æ¤Ð¤ì¤¿»þÅÀ¤Ç¡¢¥é¥¤¥Ö¥é¥ê¤Î½é´ü²½¤Ë´Ø¤¹¤ë¾ðÊó¤ò¥×¥ê¥ó¥È¤¹¤ë¡£
1104 <li> MDEBUG_FINI -- 1 ¤Ê¤é¤Ð¡¢M17N_FINI ()
1105 ¤¬¸Æ¤Ð¤ì¤¿»þÅÀ¤Ç¡¢¤Þ¤À²òÊü¤µ¤ì¤Æ¤¤¤Ê¤¤¥ª¥Ö¥¸¥§¥¯¥È¤Î»²¾È¿ô¤ò¥×¥ê¥ó¥È¤¹¤ë¡£
1107 <li> MDEBUG_CHARSET -- 1 ¤Ê¤é¤Ð¡¢m17n
1108 ¥Ç¡¼¥¿¥Ù¡¼¥¹¤«¤é¥í¡¼¥É¤µ¤ì¤¿Ê¸»ú¥»¥Ã¥È¤Ë¤Ä¤¤¤Æ¤Î¾ðÊó¤ò¥×¥ê¥ó¥È¤¹¤ë¡£
1110 <li> MDEBUG_CODING -- 1 ¤Ê¤é¤Ð¡¢m17n
1111 ¥Ç¡¼¥¿¥Ù¡¼¥¹¤«¤é¥í¡¼¥É¤µ¤ì¤¿¥³¡¼¥É·Ï¤Ë¤Ä¤¤¤Æ¤Î¾ðÊó¤ò¥×¥ê¥ó¥È¤¹¤ë¡£
1113 <li> MDEBUG_DATABASE -- 1 ¤Ê¤é¤Ð¡¢m17n
1114 ¥Ç¡¼¥¿¥Ù¡¼¥¹¤«¤é¥í¡¼¥É¤µ¤ì¤¿¥Ç¡¼¥¿¤Ë¤Ä¤¤¤Æ¤Î¾ðÊó¤ò¥×¥ê¥ó¥È¤¹¤ë¡£
1116 <li> MDEBUG_FONT -- 1 ¤Ê¤é¤Ð¡¢ÁªÂò¤µ¤ì¤Æ¥ª¡¼¥×¥ó¤µ¤ì¤¿¥Õ¥©¥ó¥È¤Ë¤Ä¤¤¤Æ¤Î¾ðÊó¤ò¥×¥ê¥ó¥È¤¹¤ë¡£
1118 <li> MDEBUG_FONT_FLT -- 1 ¤Ê¤é¤Ð¡¢Font Layout Table
1119 ¤Î¤É¤Î¥³¥Þ¥ó¥É¤¬¼Â¹ÔÃ椫¤Ë¤Ä¤¤¤Æ¤Î¤ò¥×¥ê¥ó¥È¤¹¤ë¡£
1121 <li> MDEBUG_FONT_OTF -- 1 ¤Ê¤é¤Ð¡¢OpenType Layout Table
1122 ¤Î¤É¤Î°À¤¬¼Â¹ÔÃ椫¤Ë¤Ä¤¤¤Æ¤Î¤ò¥×¥ê¥ó¥È¤¹¤ë¡£
1124 <li> MDEBUG_INPUT -- 1 ¤Ê¤é¤Ð¡¢¼Â¹ÔÃæ¤ÎÆþÎϥ᥽¥Ã¥É¤Î¾õÂÖ¤ËÉÕ¤¤¤Æ¤Î¾ðÊó¤ò¥×¥ê¥ó¥È¤¹¤ë¡£
1126 <li> MDEBUG_ALL -- 1 ¤Ê¤é¤Ð¡¢¾åµ¤¹¤Ù¤Æ¤ÎÊÑ¿ô¤ò 1
1127 ¤Ë¤·¤¿¤Î¤ÈƱ¤¸¸ú²Ì¤ò»ý¤Ä¡£
1131 <li> ¼ï¡¹¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ò¿Í´Ö¤Ë²ÄÆɤʷÁ¤Ç¥×¥ê¥ó¥È¤¹¤ë´Ø¿ô¡£¾ÜºÙ¤Ï´Ø¿ô
1132 mdebug_dump_XXXX () ¤ÎÀâÌÀ»²¾È¡£
1134 <li> ¥¨¥é¡¼È¯À¸»þ¤Ë¸Æ¤Ð¤ì¤ë¥Õ¥Ã¥¯´Ø¿ô¡£mdebug_hook () ¤ÎÀâÌÀ»²¾È¡£
1144 @brief Hook function called on an error.
1146 The mdebug_hook () function is called when an error happens. It
1147 returns -1 without doing anything. It is useful to set a break
1148 point on this function in a debugger. */
1150 @brief ¥¨¥é¡¼¤ÎºÝ¤Ë¸Æ¤Ð¤ì¤ë¥Õ¥Ã¥¯´Ø¿ô.
1152 ´Ø¿ô mdebug_hook () ¤Ï¥¨¥é¡¼¤¬µ¯¤³¤Ã¤¿ºÝ¤Ë¸Æ¤Ð¤ì¡¢²¿¤â¤»¤º¤Ë-1
1153 ¤òÊÖ¤¹¡£¥Ç¥Ð¥Ã¥¬Æâ¤Ç¥Ö¥ì¡¼¥¯¥Ý¥¤¥ó¥È¤òÀßÄꤹ¤ë¤¿¤á¤ËÍѤ¤¤ë¤³¤È¤¬¤Ç¤¤ë¡£