X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fm17n-core.c;h=efccca622ee50911ecc519d306b26d428eabd710;hb=c42974a7971c8d3bcd6e9356418d3f2182f7b08b;hp=c22da2edcf6e4eaa7eb274fbf1aadc71eee6e65a;hpb=dd9a67b522bf8328a2302b6eeeddeced706c7592;p=m17n%2Fm17n-lib.git
diff --git a/src/m17n-core.c b/src/m17n-core.c
index c22da2e..efccca6 100644
--- a/src/m17n-core.c
+++ b/src/m17n-core.c
@@ -37,28 +37,43 @@
SHELL API
- It provides modules that utilize the m17n database. They load
- various kinds of data from the database on demand. To use this
- API, an application program must include and be linked by
- -lm17n-core -lm17n. With that, CORE API is also available.
+ It provides modules that utilize the m17n database (code
+ conversion, character property, etc). They load various kinds of
+ data from the database on demand. To use this API, an application
+ program must include and be linked by -lm17n-core -lm17n.
+
+ When you use this API, CORE API is also available.
GUI API
It provides GUI modules such as drawing and inputting M-texts on a
- window system. The API itself is independent on a window system,
- but the m17n library must be configured to use a specific window
- system. Currently, we support only the X Window System. To use
- this API, an application program must include and
- , and be linked by -lm17n-core -lm17n -lm17n-X. With
- that, CORE and SHELL APIs are also available.
+ graphic device. The API itself is independent on a graphic device
+ but most functions require an argument MFrame which is created for
+ a specific type of graphic device. Currently, a null device, X
+ Window System, and an image date (gdImagePtr) of GD library are
+ supported as a graphic device.
+
+ On a frame of the null device, you can't draw text nor use an
+ input method (but, for instance, the funciton mdraw_glyph_list ()
+ is available).
+
+ On a frame of the X Window System, you can use the whole GUI API.
+
+ On a frame of GD library, you can use all drawing API but can't
+ use input method.
+
+ To use this device, an application program must include
+ and be linked by -lm17n-core -lm17n -lm17n-gui.
+
+ When you use this API, CORE and SHELL API are also available.
MISC API
It provides miscellaneous functions to support error handling and
- debugging. This API cannot be used by itself, but with one or more
- APIs listed above. To use the API, an application program must
- include in addition to one of ,
- , and .
+ debugging. This API cannot be used by itself, but with one or
+ more APIs listed above. To use the API, an application program
+ must include in addition to one of a header file
+ described above.
@@ -72,12 +87,13 @@
@c M17NDIR
Name of a directory that contains data of the m17n database. See
- @ref m17nDatabase for the detail.
+ @ref m17nDatabase for more details.
@c MDEBUG_XXXX
Environment variables whose name start by "MDEBUG_" controls
- printing of debug information. See @ref m17nDebug for the detail.
+ printing of debug information. See @ref m17nDebug for more
+ details.
@@ -137,29 +153,43 @@
¥·¥§¥ë API
- m17n ¥Ç¡¼¥¿¥Ù¡¼¥¹¤òÍøÍѤ¹¤ë¥â¥¸¥å¡¼¥ë¤òÄ󶡤¹¤ë¡£¥â¥¸¥å¡¼¥ë¤Ï¥Ç¡¼
- ¥¿¥Ù¡¼¥¹¤«¤éɬÍפ˱þ¤¸¤Æ¿Íͤʥǡ¼¥¿¤ò¥í¡¼¥É¤¹¤ë¡£ÍøÍѤ¹¤ë¤¿¤á¤Ë¤Ï¡¢
- ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤Ï ¤ò include ¤·¡¢ -lm17n-core
- -lm17n ¤Ç¥ê¥ó¥¯¤µ¤ì¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£¤³¤¦¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¥³¥¢ API
- ¤â»ÈÍѤǤ¤ë¡£
+ m17n ¥Ç¡¼¥¿¥Ù¡¼¥¹¤òÍøÍѤ¹¤ë¥â¥¸¥å¡¼¥ë¡Ê¥³¡¼¥ÉÊÑ´¹¡¢Ê¸»ú¥×¥í¥Ñ¥Æ¥£
+ Åù¡Ë¤òÄ󶡤¹¤ë¡£¥â¥¸¥å¡¼¥ë¤Ï¥Ç¡¼¥¿¥Ù¡¼¥¹¤«¤éɬÍפ˱þ¤¸¤Æ¿Íͤʥǡ¼
+ ¥¿¤ò¥í¡¼¥É¤¹¤ë¡£ÍøÍѤ¹¤ë¤¿¤á¤Ë¤Ï¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤Ï
+ ¤ò include ¤·¡¢ -lm17n-core -lm17n ¤Ç¥ê¥ó¥¯¤µ¤ì¤Ê¤¯¤Æ¤Ï¤Ê
+ ¤é¤Ê¤¤¡£
+
+ ¤³¤Î API ¤ò»ÈÍѤ¹¤ëºÝ¤Ë¤Ï¥³¥¢ API ¤â»ÈÍѤǤ¤ë¡£
GUI API
- M-texts ¤ò¥¦¥£¥ó¥É¥¦¾å¤Çɽ¼¨¤·¤¿¤êÆþÎϤ·¤¿¤ê¤¹¤ë¤È¤¤¤Ã¤¿¡¢¥°¥é¥Õ¥£¥Ã
- ¥¯¥æ¡¼¥¶¥¤¥ó¥¿¥Õ¥§¡¼¥¹¥â¥¸¥å¡¼¥ë¤òÄ󶡤¹¤ë¡£API ¼«ÂΤϥ¦¥£¥ó¥É¥¦¥·
- ¥¹¥Æ¥à¤È¤ÏÆÈΩ¤Ç¤¢¤ë¤¬¡¢ m17n ¥é¥¤¥Ö¥é¥ê¤ÏÆÃÄê¤Î¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à
- ¤ò»ÈÍѤ¹¤ë¤è¤¦¤ËÀßÄꤷ¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£¸½»þÅÀ¤Ç¤Ï¡¢X ¥¦¥£¥ó¥É¥¦¥·
- ¥¹¥Æ¥à¤À¤±¤¬¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ë¡£ÍøÍѤ¹¤ë¤¿¤á¤Ë¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×
- ¥í¥°¥é¥à¤Ï ¤È ¤ò include ¤·¡¢-lm17n-core
- -lm17n -lm17n-X ¤Ç¥ê¥ó¥¯¤µ¤ì¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£ ¤³¤¦¤¹¤ë¤³¤È¤Ë¤è¤Ã
- ¤Æ¥³¥¢ API ¤È¥·¥§¥ë API ¤â»ÈÍѤǤ¤ë¡£
+ M-texts ¤ò¥°¥é¥Õ¥£¥Ã¥¯¥Ç¥Ð¥¤¥¹¾å¤Çɽ¼¨¤·¤¿¤êÆþÎϤ·¤¿¤ê¤¹¤ë¤È¤¤¤Ã¤¿¡¢
+ ¥°¥é¥Õ¥£¥Ã¥¯¥æ¡¼¥¶¥¤¥ó¥¿¥Õ¥§¡¼¥¹¥â¥¸¥å¡¼¥ë¤òÄ󶡤¹¤ë¡£API ¼«ÂΤϥ°
+ ¥é¥Õ¥£¥Ã¥¯¥Ç¥Ð¥¤¥¹¤È¤ÏÆÈΩ¤Ç¤¢¤ë¤¬¡¢Â¿¤¯¤Î´Ø¿ô¤ÏÆÃÄê¤Î¥°¥é¥Õ¥£¥Ã¥¯
+ ¥Ç¥Ð¥¤¥¹¾å¤ËºîÀ®¤µ¤ì¤¿ MFrame ¤ò°ú¿ô¤Ë¼è¤ë¡£¸½»þÅÀ¤Ç¤Ï¡¢¥Ì¥ë¥Ç¥Ð¥¤
+ ¥¹¡¢X ¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¡¢GD ¥é¥¤¥Ö¥é¥ê¤Î¥¤¥á¡¼¥¸¡ÊgdImagePtr¡Ë¡¢¤¬
+ ¥°¥é¥Õ¥£¥Ã¥¯¥Ç¥Ð¥¤¥¹¤È¤·¤Æ¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ë¡£
+
+ ¥Ì¥ë¥Ç¥Ð¥¤¥¹¾å¤Ç¤Ïɽ¼¨¤âÆþÎϤâ¤Ç¤¤Ê¤¤¡Ê¤¿¤À¤·¤¿¤È¤¨¤Ð
+ mdraw_glyph_list () ¤Ê¤É¤Î´Ø¿ô¤Ï»ÈÍѲÄǽ¡Ë¡£
+
+ X ¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¾å¤Ç¤Ï¤¹¤Ù¤Æ¤Î GUI API ¤¬»È¤¨¤ë¡£
+
+ GD ¥é¥¤¥Ö¥é¥ê¤Î¥¤¥á¡¼¥¸¾å¤Ç¤Ï¡¢ÉÁ²èÍѤΠAPI ¤Ï¤¹¤Ù¤Æ»È¤¨¤ë¤¬ÆþÎϤÏ
+ ¤Ç¤¤Ê¤¤¡£
+
+ ¤³¤Î¥Ç¥Ð¥¤¥¹¤ò»ÈÍѤ¹¤ë¤¿¤á¤Ë¤Ï¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤Ï
+ ¤ò include ¤·¡¢-lm17n-core -lm17n -lm17n-gui ¤Ç¥ê¥ó¥¯
+ ¤µ¤ì¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
+
+ ¤³¤Î API ¤ò»ÈÍѤ¹¤ëºÝ¤Ë¤Ï¡¢¥³¥¢ API ¤È¥·¥§¥ë API ¤â»ÈÍѤǤ¤ë¡£
¤½¤Î¾¤Î API
- ¥¨¥é¡¼½èÍý¡¢¥Ç¥Ð¥Ã¥°ÍѤΤ½¤Î¾¤Î´Ø¿ô¤òÄ󶡤¹¤ë¡£¤³¤Î API ¤Ï¤½¤ì¤À
- ¤±¤Ç¤Ï»ÈÍѤǤ¤º¡¢¾åµ¤Î¾¤Î¤â¤Î¤È¶¦¤Ë»È¤¦¡£ÍøÍѤ¹¤ë¤¿¤á¤Ë¤Ï
- , , ¤Î¤¤¤º¤ì¤«¤Ë²Ã¤¨¤Æ¡¢
- ¤ò include ¤·¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
+ ¥¨¥é¡¼½èÍý¡¢¥Ç¥Ð¥Ã¥°ÍѤΤ½¤Î¾¤Î´Ø¿ô¤òÄ󶡤¹¤ë¡£¤³¤Î API ¤Ï¤½¤ì¤À¤±
+ ¤Ç¤Ï»ÈÍѤǤ¤º¡¢¾åµ¤Î¾¤Î¤â¤Î¤È¶¦¤Ë»È¤¦¡£ÍøÍѤ¹¤ë¤¿¤á¤Ë¤Ï¡¢¾åµ¤Î
+ ¤¤¤º¤ì¤«¤Î include ¥Õ¥¡¥¤¥ë¤Ë²Ã¤¨¤Æ¡¢ ¤ò include ¤·¤Ê
+ ¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
@@ -408,6 +438,33 @@ mdebug__print_time ()
} while (0)
+void
+mdebug__register_object (M17NObjectArray *array, void *object)
+{
+ if (array->used == 0)
+ MLIST_INIT1 (array, objects, 256);
+ array->count++;
+ MLIST_APPEND1 (array, objects, object, MERROR_OBJECT);
+}
+
+void
+mdebug__unregister_object (M17NObjectArray *array, void *object)
+{
+ array->count--;
+ if (array->count >= 0)
+ {
+ int i = 0;
+
+ while (i < array->used && array->objects[i] != object) i++;
+ if (i < array->used)
+ array->objects[i] = NULL;
+ else
+ mdebug_hook ();
+ }
+ else \
+ mdebug_hook ();
+}
+
/* External API */
@@ -419,7 +476,7 @@ m17n_init_core (void)
{
int mdebug_mask = MDEBUG_INIT;
- if (core_initialized)
+ if (core_initialized++)
return;
merror_code = MERROR_NONE;
@@ -455,7 +512,6 @@ m17n_init_core (void)
mdatabase__finder = NULL;
mdatabase__loader = NULL;
- core_initialized = 1;
err:
MDEBUG_POP_TIME ();
@@ -468,8 +524,11 @@ m17n_fini_core (void)
{
int mdebug_mask = MDEBUG_FINI;
- if (core_initialized)
+ if (core_initialized > 1)
+ core_initialized--;
+ else
{
+ core_initialized = 0;
MDEBUG_PUSH_TIME ();
MDEBUG_PUSH_TIME ();
MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize chartable module."));
@@ -482,7 +541,6 @@ m17n_fini_core (void)
msymbol__fini ();
MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize plist module."));
mplist__fini ();
- core_initialized = 0;
MDEBUG_POP_TIME ();
MDEBUG_PRINT_TIME ("FINI", (stderr, " to finalize the core modules."));
MDEBUG_POP_TIME ();
@@ -513,7 +571,7 @@ m17n_fini_core (void)
In addition to the predefined managed object types, users can
define their own managed object types. See the documentation of
- the m17n_object () for the details. */
+ the m17n_object () for more details. */
/***ja
@addtogroup m17nObject
@brief ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤È¤Ï»²¾È¿ô¤Ë¤è¤Ã¤Æ´ÉÍý¤µ¤ì¤Æ¤¤¤ë¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¢¤ë.