*** empty log message ***
[m17n/m17n-lib.git] / src / m17n-core.h
index b87e0fe..413c1ed 100644 (file)
@@ -38,16 +38,20 @@ extern "C"
 /***ja @defgroup m17nIntro ¤Ï¤¸¤á¤Ë  */
 /*=*/
 
+#if !defined (FOR_DOXYGEN) || defined (DOXYGEN_INTERNAL_MODULE)
+
 #define M17NLIB_MAJOR_VERSION 1
-#define M17NLIB_MINOR_VERSION 1
+#define M17NLIB_MINOR_VERSION 3
 #define M17NLIB_PATCH_LEVEL 0
-#define M17NLIB_VERSION_NAME "1.1.0"
+#define M17NLIB_VERSION_NAME "1.3.0"
 
 extern void m17n_init_core (void);
 #define M17N_INIT() m17n_init_core ()
 extern void m17n_fini_core (void);
 #define M17N_FINI() m17n_fini_core ()
 
+#endif
+
 /*=*/
 
 /*** @ingroup m17nIntro */
@@ -97,11 +101,10 @@ extern enum M17NStatus m17n_status (void);
 /***ja
     @brief ´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤ÎºÇ½é¤Î¥á¥ó¥Ð.
 
-    ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤¬¿·¤·¤¤¹½Â¤ÂΤò´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤È¤·¤Æ
-     ÄêµÁ¤¹¤ëºÝ¤Ë¤Ï¡¢ºÇ½é¤Î¥á¥ó¥Ð¤Ï @c #M17NObjectHead ¹½Â¤Âη¿¤Ç¤Ê¤¯
-     ¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£@c #M17NObjectHead ¤ÎÆâÍƤϠm17n ¥é¥¤¥Ö¥é¥ê¤¬»ÈÍѤ¹
-     ¤ë¤Î¤Ç¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤Ï¿¨¤ì¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
-     */
+    ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤¬¿·¤·¤¤¹½Â¤ÂΤò´ÉÍý²¼¥ª¥Ö¥¸¥§¥¯¥È¤È¤·¤ÆÄêµÁ¤¹¤ëºÝ¤Ë¤Ï¡¢ºÇ½é¤Î¥á¥ó¥Ð¤Ï 
+    @c #M17NObjectHead ¹½Â¤Âη¿¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
+    @c #M17NObjectHead ¤ÎÆâÍƤϠm17n 
+    ¥é¥¤¥Ö¥é¥ê¤¬»ÈÍѤ¹¤ë¤Î¤Ç¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤Ï¿¨¤ì¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£    */
 
 typedef struct
 {
@@ -139,8 +142,8 @@ extern int m17n_object_unref (void *object);
 /***ja
     @brief ¥·¥ó¥Ü¥ë¤Î·¿Àë¸À.
 
-    #MSymbol ¤Ï¥·¥ó¥Ü¥ë¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ç¤¢¤ë¡£ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç
-    ¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£  */
+    #MSymbol ¤Ï @e ¥·¥ó¥Ü¥ë (symbol) ¥ª¥Ö¥¸¥§¥¯¥È¤Î·¿¤Ç¤¢¤ë¡£
+    ÆâÉô¹½Â¤¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤«¤é¤Ï¸«¤¨¤Ê¤¤¡£  */
 
 typedef struct MSymbolStruct *MSymbol;
 
@@ -159,6 +162,9 @@ extern MSymbol msymbol (const char *name);
 /* Return a managing key of name NAME.  */
 extern MSymbol msymbol_as_managing_key (const char *name);
 
+/* Check if SYMBOL is a managing key.  */
+extern int msymbol_is_managing_key (MSymbol symbol);
+
 /* Return a symbol of name NAME if it already exists.  */
 extern MSymbol msymbol_exist (const char *name);
 
@@ -236,8 +242,10 @@ extern void *mplist_value (MPlist *plist);
 /***ja @defgroup m17nCharacter Ê¸»ú */
 /*=*/
 
+#if !defined (FOR_DOXYGEN) || defined (DOXYGEN_INTERNAL_MODULE)
 #define MCHAR_MAX 0x3FFFFF
 /*#define MCHAR_MAX 0x7FFFFFFF*/
+#endif
 
 extern MSymbol Mscript;
 extern MSymbol Mname;
@@ -288,8 +296,7 @@ extern int mchartable_set_range (MCharTable *table, int from, int to,
                                 void *val);
 
 extern int mchartable_map (MCharTable *table, void *ignore,
-                          void (*func) (int from, int to,
-                                        void *val, void *arg), 
+                          void (*func) (int, int, void *, void *), 
                           void *func_arg);
 
 extern void mchartable_range (MCharTable *table, int *from, int *to);
@@ -342,8 +349,8 @@ typedef struct MText MText;
 /***ja
     @brief M-text ¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤ò»ØÄꤹ¤ëÎóµó·¿.
 
-    Îóµó·¿ #MTextFormat ¤Ï
-    ´Ø¿ô mtext_from_data () ¤Î°ú¿ô¤È¤·¤ÆÍѤ¤¤é¤ì¡¢
+    Îóµó·¿ #MTextFormat ¤Ï´Ø¿ô
+    mtext_from_data () ¤Î°ú¿ô¤È¤·¤ÆÍѤ¤¤é¤ì¡¢
     M-text ¤òÀ¸À®¤¹¤ë¸µ¤È¤Ê¤ë¥Ç¡¼¥¿¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤ò»ØÄꤹ¤ë¡£  */
 
 enum MTextFormat
@@ -360,28 +367,31 @@ enum MTextFormat
 
 extern MText *mtext ();
 
+extern void *mtext_data (MText *mt, enum MTextFormat *fmt, int *nunits,
+                        int *pos_idx, int *unit_idx);
+
 /*=*/
 
-/*** @ingroup m17nMtext */
-/***en @name Variables: System's UTF-16 and UTF-32 types */
-/***ja @name ÊÑ¿ô: ¥·¥¹¥Æ¥à¤Î UTF-16 ¤È UTF-32 ¤Î¥¿¥¤¥× */
+/***en @name Variables: Default Endian of UTF-16 and UTF-32 */
+/***ja @name ÊÑ¿ô: UTF-16 ¤È UTF-32 ¤Î¥Ç¥Õ¥©¥ë¥È¤Î¥¨¥ó¥Ç¥£¥¢¥ó */
 /*** @{ */
 /*=*/
 
+/*** @ingroup m17nMtext */
 /***en
     @brief Variable of value MTEXT_FORMAT_UTF_16LE or MTEXT_FORMAT_UTF_16BE.
 
     The global variable #MTEXT_FORMAT_UTF_16 is initialized to
     #MTEXT_FORMAT_UTF_16LE on a "Little Endian" system (storing words
     with the least significant byte first), and to
-    #MTEXT_FORMAT_UTF_16BE depneding on a "Big Endian" system (storing
-    words with the most significant byte first).  */
+    #MTEXT_FORMAT_UTF_16BE on a "Big Endian" system (storing words
+    with the most significant byte first).  */
 
 /***ja
     @brief Ãͤ¬ MTEXT_FORMAT_UTF_16LE ¤« MTEXT_FORMAT_UTF_16BE ¤Ç¤¢¤ëÊÑ¿ô
 
-    Âç°èÊÑ¿ô #MTEXT_FORMAT_UTF_16 ¤Ï¥ê¥È¥ë¡¦¥¨¥ó¥Ç¥£¥¢¥ó¡¦¥·¥¹¥Æ¥à¡Ê¥ï¡¼
-    ¥É¤ò LSB (Least Significant Byte) ¤òÀè¤Ë¤·¤Æ³ÊǼ¡Ë¾å¤Ç¤Ï
+    Âç°èÊÑ¿ô #MTEXT_FORMAT_UTF_16 ¤Ï¥ê¥È¥ë¡¦¥¨¥ó¥Ç¥£¥¢¥ó¡¦¥·¥¹¥Æ¥à
+    ¡Ê¥ï¡¼¥É¤ò LSB (Least Significant Byte) ¤òÀè¤Ë¤·¤Æ³ÊǼ¡Ë¾å¤Ç¤Ï
     #MTEXT_FORMAT_UTF_16LE ¤Ë½é´ü²½¤µ¤ì¡¢¥Ó¥Ã¥°¡¦¥¨¥ó¥Ç¥£¥¢¥ó¡¦¥·¥¹¥Æ¥à
     ¡Ê¥ï¡¼¥É¤ò MSB (Most Significant Byte) ¤òÀè¤Ë¤·¤Æ³ÊǼ¡Ë¾å¤Ç¤Ï
     #MTEXT_FORMAT_UTF_16BE ¤Ë½é´ü²½¤µ¤ì¤ë¡£  */
@@ -390,23 +400,24 @@ extern MText *mtext ();
     @seealso
     mtext_from_data ()  */
 
-extern const int MTEXT_FORMAT_UTF_16;
+extern const enum MTextFormat MTEXT_FORMAT_UTF_16;
 /*=*/
 
+/*** @ingroup m17nMtext */
 /***en
     @brief Variable of value MTEXT_FORMAT_UTF_32LE or MTEXT_FORMAT_UTF_32BE.
 
     The global variable #MTEXT_FORMAT_UTF_32 is initialized to
     #MTEXT_FORMAT_UTF_32LE on a "Little Endian" system (storing words
     with the least significant byte first), and to
-    #MTEXT_FORMAT_UTF_32BE depneding on a "Big Endian" system (storing
+    #MTEXT_FORMAT_UTF_32BE on a "Big Endian" system (storing
     words with the most significant byte first).  */
 
 /***ja
     @brief Ãͤ¬ MTEXT_FORMAT_UTF_32LE ¤« MTEXT_FORMAT_UTF_32BE ¤Ç¤¢¤ëÊÑ¿ô
 
-    Âç°èÊÑ¿ô #MTEXT_FORMAT_UTF_32 ¤Ï¥ê¥È¥ë¡¦¥¨¥ó¥Ç¥£¥¢¥ó¡¦¥·¥¹¥Æ¥à¡Ê¥ï¡¼
-    ¥É¤ò LSB (Least Significant Byte) ¤òÀè¤Ë¤·¤Æ³ÊǼ¡Ë¾å¤Ç¤Ï
+    Âç°èÊÑ¿ô #MTEXT_FORMAT_UTF_32 ¤Ï¥ê¥È¥ë¡¦¥¨¥ó¥Ç¥£¥¢¥ó¡¦¥·¥¹¥Æ¥à
+    ¡Ê¥ï¡¼¥É¤ò LSB (Least Significant Byte) ¤òÀè¤Ë¤·¤Æ³ÊǼ¡Ë¾å¤Ç¤Ï
     #MTEXT_FORMAT_UTF_32LE ¤Ë½é´ü²½¤µ¤ì¡¢¥Ó¥Ã¥°¡¦¥¨¥ó¥Ç¥£¥¢¥ó¡¦¥·¥¹¥Æ¥à
     ¡Ê¥ï¡¼¥É¤ò MSB (Most Significant Byte) ¤òÀè¤Ë¤·¤Æ³ÊǼ¡Ë¾å¤Ç¤Ï
     #MTEXT_FORMAT_UTF_32BE ¤Ë½é´ü²½¤µ¤ì¤ë¡£  */
@@ -417,15 +428,15 @@ extern const int MTEXT_FORMAT_UTF_16;
 
 extern const int MTEXT_FORMAT_UTF_32;
 
+/*=*/
 /*** @} */
-
 /*=*/
 
 extern MText *mtext_from_data (const void *data, int nitems,
                               enum MTextFormat format);
 
-
 /*=*/
+/*** @} */
 
 /*
  *  (5-2) Functions to manipulate M-texts.  They correspond to string
@@ -516,45 +527,43 @@ extern MPlist *mplist_deserialize (MText *mt);
 /***ja
     @brief ¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤òÀ©¸æ¤¹¤ë¥Õ¥é¥°¥Ó¥Ã¥È.
 
-    ´Ø¿ô mtext_property () ¤Ï°Ê²¼¤Î¥Õ¥é¥°¥Ó¥Ã¥È¤ÎÏÀÍý OR ¤ò°ú¿ô¤È¤·¤Æ
-    ¤È¤ë¤³¤È¤¬¤Ç¤­¤ë¡£¥Õ¥é¥°¥Ó¥Ã¥È¤ÏÀ¸À®¤µ¤ì¤¿¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Î¿¶Éñ
-    ¤¤¤òÀ©¸æ¤¹¤ë¡£¾ÜºÙ¤Ï³Æ¥Õ¥é¥°¥Ó¥Ã¥È¤ÎÀâÌÀ¤ò»²¾È¡£*/
+    ´Ø¿ô mtext_property () ¤Ï°Ê²¼¤Î¥Õ¥é¥°¥Ó¥Ã¥È¤ÎÏÀÍý
+    OR ¤ò°ú¿ô¤È¤·¤Æ¤È¤ë¤³¤È¤¬¤Ç¤­¤ë¡£
+    ¥Õ¥é¥°¥Ó¥Ã¥È¤ÏÀ¸À®¤µ¤ì¤¿¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Î¿¶Éñ¤¤¤òÀ©¸æ¤¹¤ë¡£
+    ¾ÜºÙ¤Ï³Æ¥Õ¥é¥°¥Ó¥Ã¥È¤ÎÀâÌÀ¤ò»²¾È¡£*/
 
 enum MTextPropertyControl
   {
     /***en If this flag bit is on, an M-text inserted at the start
        position or at the middle of the text property inherits the
        text property.  */
-    /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Î»Ï¤Þ¤ëÅÀ¤¢
-       ¤ë¤¤¤ÏÃæ´Ö¤ËÁÞÆþ¤µ¤ì¤¿ M-text ¤Ï¤³¤Î¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤ò·Ñ¾µ¤¹¤ë¡£
+    /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Î»Ï¤Þ¤ëÅÀ¤¢¤ë¤¤¤ÏÃæ´Ö¤ËÁÞÆþ¤µ¤ì¤¿
+       M-text ¤Ï¤³¤Î¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤ò·Ñ¾µ¤¹¤ë¡£
        */
     MTEXTPROP_FRONT_STICKY = 0x01,
 
     /***en If this flag bit is on, an M-text inserted at the end
        position or at the middle of the text property inherits the
        text property.  */
-    /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Î½ª¤ï¤ëÅÀ¤¢
-       ¤ë¤¤¤ÏÃæ´Ö¤ËÁÞÆþ¤µ¤ì¤¿ M-text ¤Ï¤³¤Î¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤ò·Ñ¾µ¤¹¤ë¡£
+    /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Î½ª¤ï¤ëÅÀ¤¢¤ë¤¤¤ÏÃæ´Ö¤ËÁÞÆþ¤µ¤ì¤¿
+       M-text ¤Ï¤³¤Î¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤ò·Ñ¾µ¤¹¤ë¡£
        */
     MTEXTPROP_REAR_STICKY = 0x02,
 
     /***en If this flag bit is on, the text property is removed if a
        text in its region is modified.  */
-    /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤ÎÈÏ°ÏÆâ¤Î
-       ¥Æ¥­¥¹¥È¤¬Êѹ¹¤µ¤ì¤¿¾ì¹ç¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Ï¼è¤ê½ü¤«¤ì¤ë¡£  */
+    /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤ÎÈÏ°ÏÆâ¤Î¥Æ¥­¥¹¥È¤¬Êѹ¹¤µ¤ì¤¿¾ì¹ç¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Ï¼è¤ê½ü¤«¤ì¤ë¡£  */
     MTEXTPROP_VOLATILE_WEAK = 0x04,
 
     /***en If this flag bit is on, the text property is removed if a
        text or the other text property in its region is modified.  */
-    /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤ÎÈÏ°ÏÆâ¤Î
-       ¥Æ¥­¥¹¥È¤¢¤ë¤¤¤ÏÊ̤Υƥ­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤¬Êѹ¹¤µ¤ì¤¿¾ì¹ç¤³¤Î¥Æ¥­
+    /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤ÎÈÏ°ÏÆâ¤Î¥Æ¥­¥¹¥È¤¢¤ë¤¤¤ÏÊ̤Υƥ­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤¬Êѹ¹¤µ¤ì¤¿¾ì¹ç¤³¤Î¥Æ¥­
        ¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Ï¼è¤ê½ü¤«¤ì¤ë¡£*/
     MTEXTPROP_VOLATILE_STRONG = 0x08,
 
     /***en If this flag bit is on, the text property is not
        automatically merged with the others.  */
-    /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Ï¾¤Î¥×¥í¥Ñ
-       ¥Æ¥£¤È¼«Æ°Åª¤Ë¤Ï¥Þ¡¼¥¸¤µ¤ì¤Ê¤¤¡£ */
+    /***ja ¤³¤Î¥Ó¥Ã¥È¤¬ on ¤Ê¤é¤Ð¡¢¤³¤Î¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Ï¾¤Î¥×¥í¥Ñ¥Æ¥£¤È¼«Æ°Åª¤Ë¤Ï¥Þ¡¼¥¸¤µ¤ì¤Ê¤¤¡£ */
     MTEXTPROP_NO_MERGE = 0x10,
 
     MTEXTPROP_CONTROL_MAX = 0x1F
@@ -570,20 +579,20 @@ extern MSymbol Mtext_prop_deserializer;
     @brief Type of serializer functions.
 
     This is the type of serializer functions.  If the key of a symbol
-    property is #Msymbol_prop_serializer, the value must be of this
+    property is #Mtext_prop_serializer, the value must be of this
     type.
 
     @seealso
-    mtext_prop_serialize (), Mtext_prop_serializer
+    mtext_serialize (), #Mtext_prop_serializer
 */
 /***ja
     @brief ¥·¥ê¥¢¥é¥¤¥¶´Ø¿ô¤Î·¿Àë¸À.
 
     ¥·¥ê¥¢¥é¥¤¥¶´Ø¿ô¤Î·¿¤Ç¤¢¤ë¡£ ¤¢¤ë¥·¥ó¥Ü¥ë¤Î¥×¥í¥Ñ¥Æ¥£¤Î¥­¡¼¤¬ @c
-    #Msymbol_prop_serializer ¤Ç¤¢¤ë¤È¤­¡¢ ÃͤϤ³¤Î·¿¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
+    #Mtext_prop_serializer ¤Ç¤¢¤ë¤È¤­¡¢ ÃͤϤ³¤Î·¿¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
 
     @seealso
-    Mtext_prop_serialize (), Mtext_prop_serializer
+    mtext_serialize (), #Mtext_prop_serializer
 */
 
 typedef MPlist *(*MTextPropSerializeFunc) (void *val);
@@ -593,11 +602,11 @@ typedef MPlist *(*MTextPropSerializeFunc) (void *val);
     @brief Type of deserializer functions.
 
     This is the type of deserializer functions.  If the key of a
-    symbol property is #Msymbol_prop_deserializer, the value must be
-    of this type.
+    symbol property is #Mtext_prop_deserializer, the value must be of
+    this type.
 
     @seealso
-    Mtext_prop_deserialize (), Mtext_prop_deserializer
+    mtext_deserialize (), #Mtext_prop_deserializer
 */
 /***ja
     @brief ¥Ç¥·¥ê¥¢¥é¥¤¥¶´Ø¿ô¤Î·¿Àë¸À.