(load_macros): On overwriting a macro, free the old
authorhanda <handa>
Thu, 5 Jan 2006 06:28:57 +0000 (06:28 +0000)
committerhanda <handa>
Thu, 5 Jan 2006 06:28:57 +0000 (06:28 +0000)
definition.
(minput__init): Store Mmap in load_im_info_keys.
(minput_get_title_icon): If the input method has no title, be sure
to return NULL.
(minput_get_description): If the input method has no description,
be sure to return NULL.
(minput_get_variables): Fix documentation.

src/input.c

index 9db75df..7b8ea5a 100644 (file)
@@ -1055,6 +1055,7 @@ static int
 load_macros (MPlist *plist, MPlist *macros)
 {
   MSymbol name; 
+  MPlist *pl;
 
   if (! MPLIST_SYMBOL_P (plist))
     MERROR (MERROR_IM, -1);
@@ -1063,6 +1064,9 @@ load_macros (MPlist *plist, MPlist *macros)
   if (MPLIST_TAIL_P (plist)
       || parse_action_list (plist, macros) < 0)
     MERROR (MERROR_IM, -1);
+  pl = mplist_get (macros, name);
+  if (pl)
+    M17N_OBJECT_UNREF (pl);
   mplist_put (macros, name, plist);
   M17N_OBJECT_REF (plist);
   return 0;
@@ -2992,7 +2996,6 @@ minput__init ()
        NULL, NULL, NULL, "Escape", NULL, NULL, NULL, NULL };
   char buf[6], buf2[256];
   int i;
-  MPlist *plist;
 
   Minput_method = msymbol ("input-method");
   Minput_driver = msymbol ("input-driver");
@@ -3068,7 +3071,8 @@ minput__init ()
   M_variable = msymbol ("variable");
 
   load_im_info_keys = mplist ();
-  plist = mplist_add (load_im_info_keys, Mstate, Mnil);
+  mplist_add (load_im_info_keys, Mstate, Mnil);
+  mplist_push (load_im_info_keys, Mmap, Mnil);
 
   buf[0] = 'C';
   buf[1] = '-';
@@ -3797,13 +3801,12 @@ minput_get_title_icon (MSymbol language, MSymbol name)
 
   if (! plist)
     return NULL;
+  if (MPLIST_TAIL_P (plist))
+    goto no_title;
   pl = MPLIST_PLIST (plist);
   pl = MPLIST_NEXT (pl);
   if (! MPLIST_MTEXT_P (pl))
-    {
-      M17N_OBJECT_UNREF (plist);
-      return NULL;
-    }
+    goto no_title;
   M17N_OBJECT_REF (pl);
   M17N_OBJECT_UNREF (plist);
   plist = pl;
@@ -3842,6 +3845,10 @@ minput_get_title_icon (MSymbol language, MSymbol name)
   else
     mplist_set (pl, Mnil, NULL);
   return plist;
+
+ no_title:
+  M17N_OBJECT_UNREF (plist);
+  return NULL;
 }
 
 /*=*/
@@ -3873,10 +3880,15 @@ minput_get_description (MSymbol language, MSymbol name)
 {
   MPlist *plist = load_partial_im_info (language, name, Mnil, M_description);
   MPlist *pl;
-  MText *mt;
+  MText *mt = NULL;
 
   if (! plist)
     return NULL;
+  if (MPLIST_TAIL_P (plist))
+    {
+      M17N_OBJECT_UNREF (plist);
+      return NULL;
+    }
   pl = MPLIST_PLIST (plist);
   pl = MPLIST_NEXT (pl);
   if (MPLIST_MTEXT_P (pl))
@@ -4075,36 +4087,26 @@ minput_assign_command_keys (MSymbol language, MSymbol name,
 
     The minput_get_variables () function returns a plist (#MPlist) of
     variables used to control the behavior of the input method
-    specified by $LANGUAGE and $NAME.  The key of an element of the
-    plist is a symbol representing a variable, and the value is a
-    plist of the form VAR-INFO (described below) that carries the
-    information about the variable.
-
-    The first element of VAR-INFO has the key #Mtext or #Msymbol.  If
-    the key is #Mtext, the value is an M-text describing the variable.
-    If the key is #Msymbol, that value is #Mnil which means the
-    variable has no description text.
-
-    The second element of VAR-INFO is for the value of the variable.
-    The key is #Minteger, #Msymbol, or #Mtext, and the value is an
-    integer, a symbol, or an M-text, respectively.  The variable is
-    set to this value when an input context is created for the input
-    method.
-
-    If there are no more elements, the variable can take any value
-    that matches with the above type.  Otherwise, the remaining
-    elements of VAR-INFO are to specify valid values of the variable.
-
-    If the type of the variable is integer, the following elements
-    have the key #Minteger or #Mplist.  If it is #Minteger, the value
-    is a valid integer value.  If it is #Mplist, the value is a plist
-    of two elements.  Both of them have the key #Minteger, and
-    values are the minimum- and maximum bounds of the valid value
-    range.
-
-    If the type of the variable is symbol or M-text, the following
-    elements of the plist have the key #Msymbol or #Mtext,
-    respectively, and the value must be a valid one.
+    specified by $LANGUAGE and $NAME.  The plist is @e well-formed
+    (#m17nPlist) of the following format:
+
+@verbatim
+    (VARNAME (DOC-MTEXT DEFAULT-VALUE [ VALUE ... ] )
+     VARNAME (DOC-MTEXT DEFAULT-VALUE [ VALUE ... ] )
+     ...)
+@endverbatim
+
+    @c VARNAME is a symbol representing the variable name.
+
+    @c DOC-MTEXT is an M-text describing the variable.
+
+    @c DEFAULT-VALUE is the default value of the varible.  It is a
+    symbol, integer, or M-text.
+
+    @c VALUEs (if any) specifies the possible values of the variable.
+    If @c DEFAULT-VALUE is an integer, @c VALUE may be a plist (@c FROM
+    @c TO), where @c FROM and @c TO specifies a range of possible
+    values.
 
     For instance, suppose an input method has the variables:
 
@@ -4117,23 +4119,12 @@ minput_assign_command_keys (MSymbol language, MSymbol name,
     @li name:txtvar, description:"value is an M-text",
          initial value:empty text, no value-range (i.e. any text)
 
-    Then, the returned plist has the following form ('X:Y' means X is a key and Y is
-    a value, and '(...)' means a plist):
+    Then, the returned plist is as follows.
 
 @verbatim
-    plist:(intvar:(mtext:"value is an integer"
-                   integer:0
-                  plist:(integer:0 integer:3)
-                   integer:10
-                   integer:20))
-           symvar:(mtext:"value is a symbol"
-                   symbol:nil
-                   symbol:a
-                   symbol:b
-                   symbol:c
-                   symbol:nil))
-           txtvar:(mtext:"value is an M-text"
-                   mtext:""))
+    (intvar ("value is an integer" 0 (0 3) 10 20)
+     symvar ("value is a symbol" nil a b c nil)
+     txtvar ("value is an M-text" ""))
 @endverbatim
 
     @return
@@ -4144,30 +4135,27 @@ minput_assign_command_keys (MSymbol language, MSymbol name,
 /***ja
     @brief ÆþÎϥ᥽¥Ã¥É¤ÎÊÑ¿ô¥ê¥¹¥È¤òÆÀ¤ë.
 
-    ´Ø¿ô minput_get_variables () ¤Ï¡¢$LANGUAGE ¤È $NAME 
-    ¤Ë¤è¤Ã¤Æ»ØÄꤵ¤ì¤¿ÆþÎϥ᥽¥Ã¥É¤Î¿¶¤ëÉñ¤¤¤òÀ©¸æ¤¹¤ëÊÑ¿ô¤Î¥×¥í¥Ñ¥Æ¥£¥ê¥¹¥È 
-    (#MPlist) ¤òÊÖ¤¹¡£¥ê¥¹¥È¤Î³ÆÍ×ÁǤΥ­¡¼¤ÏÊÑ¿ô¤òɽ¤¹¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¡£
-    ³ÆÍ×ÁǤÎÃͤϲ¼µ­¤Î VAR-INFO 
-    ¤Î·Á¼°¤Î¥×¥í¥Ñ¥Æ¥£¥ê¥¹¥È¤Ç¤¢¤ê¡¢³ÆÊÑ¿ô¤Ë´Ø¤¹¤ë¾ðÊó¤ò¼¨¤·¤Æ¤¤¤ë¡£
+    ´Ø¿ô minput_get_variables () ¤Ï¡¢$LANGUAGE ¤È $NAME ¤Ë¤è¤Ã¤Æ»ØÄꤵ
+    ¤ì¤¿ÆþÎϥ᥽¥Ã¥É¤Î¿¶¤ëÉñ¤¤¤òÀ©¸æ¤¹¤ëÊÑ¿ô¤Î¥×¥í¥Ñ¥Æ¥£¥ê¥¹¥È
+    (#MPlist) ¤òÊÖ¤¹¡£¤³¤Î¥ê¥¹¥È¤Ï @e well-formed ¤Ç¤¢¤ê(#m17nPlist) °Ê
+    ²¼¤Î·Á¼°¤Ç¤¢¤ë¡£
 
-    VAR-INFO ¤ÎÂè°ìÍ×ÁǤΥ­¡¼¤Ï #Mtext ¤Þ¤¿¤Ï #Msymbol ¤Ç¤¢¤ë¡£¥­¡¼¤¬
-    #Mtext ¤Ê¤é¡¢ÃͤϤ½¤ÎÊÑ¿ô¤òÀâÌÀ¤¹¤ë M-text ¤Ç¤¢¤ë¡£¥­¡¼¤¬ #Msymbol
-    ¤Ê¤éÃͤϠ#Mnil ¤Ç¤¢¤ê¡¢¤³¤ÎÊÑ¿ô¤ÏÀâÌÀ¥Æ¥­¥¹¥È¤ò»ý¤¿¤Ê¤¤¤³¤È¤Ë¤Ê¤ë¡£
+@verbatim
+    (VARNAME (DOC-MTEXT DEFAULT-VALUE [ VALUE ... ] )
+     VARNAME (DOC-MTEXT DEFAULT-VALUE [ VALUE ... ] )
+     ...)
+@endverbatim
 
-    VAR-INFO ¤ÎÂèÆóÍ×ÁǤÏÊÑ¿ô¤ÎÃͤò¼¨¤¹¡£¥­¡¼¤Ï #Minteger, #Msymbol,
-    #Mtext ¤Î¤¤¤º¤ì¤«¤Ç¤¢¤ê¡¢ÃͤϤ½¤ì¤¾¤ìÀ°¿ôÃÍ¡¢¥·¥ó¥Ü¥ë¡¢M-text  ¤Ç¤¢¤ë¡£
-    ¤³¤ÎÆþÎϥ᥽¥Ã¥ÉÍѤÎÆþÎÏ¥³¥ó¥Æ¥¹¥È¤¬ºî¤é¤ì¤ë»þÅÀ¤Ç¤Ï¡¢ÊÑ¿ô¤Ï¤³¤ÎÃͤËÀßÄꤵ¤ì¤Æ¤¤¤ë¡£
+    @c VARNAME ¤ÏÊÑ¿ô¤Î̾Á°¤ò¼¨¤¹¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¡£
 
-    VAR-INFO ¤Ë¤½¤ì°Ê³°¤ÎÍ×ÁǤ¬Ìµ¤±¤ì¤Ð¡¢ÊÑ¿ô¤Ï¾åµ­¤Î·¿¤Ë¹çÃפ¹¤ë¸Â¤ê¤É¤Î¤è¤¦¤ÊÃͤò¤È¤ë¤³¤È¤â¤Ç¤­¤ë¡£
-    ¤½¤¦¤Ç¤Ê¤±¤ì¤Ð¡¢VAR-INFO ¤Î»Ä¤ê¤ÎÍ×ÁǤˤè¤Ã¤ÆÊÑ¿ô¤ÎÍ­¸ú¤ÊÃͤ¬»ØÄꤵ¤ì¤ë¡£
+    @c DOC-MTEXT ¤ÏÊÑ¿ô¤òÀâÌÀ¤¹¤ë M-text ¤Ç¤¢¤ë¡£
 
-    ÊÑ¿ô¤Î·¿¤¬À°¿ô¤Ç¤¢¤ì¤Ð¡¢¤½¤ì°Ê¹ß¤ÎÍ×ÁǤϠ#Minteger ¤« #Mplist 
-    ¤ò¥­¡¼¤È¤·¤Æ»ý¤Ä¡£ #Minteger ¤Ç¤¢¤ì¤Ð¡¢ÃͤÏÍ­¸ú¤ÊÃͤò¼¨¤¹À°¿ôÃͤǤ¢¤ë¡£
-    #Mplist ¤Ç¤¢¤ì¤Ð¡¢ÃͤÏÆó¤Ä¤ÎÍ×ÁǤò»ý¤Ä¥×¥í¥Ñ¥Æ¥£¥ê¥¹¥È¤Ç¤¢¤ê¡¢³ÆÍ×ÁǤϥ­¡¼¤È¤·¤Æ
-    #Minteger ¤ò¡¢ÃͤȤ·¤Æ¤½¤ì¤¾¤ìÍ­¸ú¤ÊÃͤξå¸ÂÃͤȲ¼¸ÂÃͤò¤È¤ë¡£
+    @c DEFAULT-VALUE ¤ÏÊÑ¿ô¤Î¥Ç¥Õ¥©¥ë¥ÈÃͤǤ¢¤ê¡¢¥·¥ó¥Ü¥ë¡¢À°¿ô¤â¤·¤¯¤Ï
+    M-text ¤Ç¤¢¤ë¡£
 
-    ÊÑ¿ô¤Î·¿¤¬¥·¥ó¥Ü¥ë¤« M-text ¤Ç¤¢¤ì¤Ð¡¢¤½¤ì°Ê¹ß¤ÎÍ×ÁǤϥ­¡¼¤È¤·¤Æ¤½¤ì¤¾¤ì
-    #Msymbol ¤« #Mtext ¤ò»ý¤Á¡¢ÃͤϤ½¤Î·¿¤Ë¹çÃפ¹¤ë¤â¤Î¤Ç¤¢¤ë¡£
+    @c VALUE ¤Ï¡¢¤â¤·»ØÄꤵ¤ì¤Æ¤¤¤ì¤ÐÊÑ¿ô¤Î¼è¤êÆÀ¤ëÃͤò¼¨¤¹¡£¤â¤·
+    @c DEFAULT-VALUE ¤¬À°¿ô¤Ê¤é¡¢ @c VALUE ¤Ï (@c FROM @c TO) ¤È¤¤¤¦·Á
+    ¤Î¥ê¥¹¥È¤Ç¤âÎɤ¤¡£¤³¤Î¾ì¹ç @c FROM ¤È @c TO ¤Ï²Äǽ¤ÊÃͤÎÈϰϤò¼¨¤¹¡£
 
     Îã¤È¤·¤Æ¡¢¤¢¤ëÆþÎϥ᥽¥Ã¥É¤¬¼¡¤Î¤è¤¦¤ÊÊÑ¿ô¤ò»ý¤Ä¾ì¹ç¤ò¹Í¤¨¤è¤¦¡£
 
@@ -4180,27 +4168,16 @@ minput_assign_command_keys (MSymbol language, MSymbol name,
     @li name:txtvar, ÀâÌÀ:"value is an M-text",
         ½é´üÃÍ:empty text, ÃͤÎÈϰϤʤ·(¤É¤ó¤Ê M-text ¤Ç¤â²Ä)
 
-    ¤³¤Î¾ì¹ç¡¢ÊÖ¤µ¤ì¤ë¥ê¥¹¥È¤Ï°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ë¡£¡Ê'X:Y' ¤È¤¤¤¦µ­Ë¡¤Ï X 
-    ¤¬¥­¡¼¤Ç Y ¤¬ÃͤǤ¢¤ë¤³¤È¤ò¡¢¤Þ¤¿ '(...)' ¤Ï¥×¥í¥Ñ¥Æ¥£¥ê¥¹¥È¤ò¼¨¤¹¡£¡Ë
+    ¤³¤Î¾ì¹ç¡¢ÊÖ¤µ¤ì¤ë¥ê¥¹¥È¤Ï°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ë¡£
 
 @verbatim
-    plist:(intvar:(mtext:"value is an integer"
-                   integer:0
-                  plist:(integer:0 integer:3)
-                   integer:10
-                   integer:20))
-           symvar:(mtext:"value is a symbol"
-                   symbol:nil
-                   symbol:a
-                   symbol:b
-                   symbol:c
-                   symbol:nil))
-           txtvar:(mtext:"value is an M-text"
-                   mtext:""))
+    (intvar ("value is an integer" 0 (0 3) 10 20)
+     symvar ("value is a symbol" nil a b c nil)
+     txtvar ("value is an M-text" ""))
 @endverbatim
 
     @return 
-    ÆþÎϥ᥽¥Ã¥É¤¬²¿¤é¤«¤ÎÊÑ¿ô¤ò»ÈÍѤ·¤Æ¤¤¤ì¤Ð #MPlist ¤Ø¤ÎÊÑ¿ô¤òÊÖ¤¹¡£
+    ÆþÎϥ᥽¥Ã¥É¤¬²¿¤é¤«¤ÎÊÑ¿ô¤ò»ÈÍѤ·¤Æ¤¤¤ì¤Ð #MPlist ¤Ø¤Î¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£
     ÊÖ¤µ¤ì¤ë¥×¥í¥Ñ¥Æ¥£¥ê¥¹¥È¤Ï¥é¥¤¥Ö¥é¥ê¤Ë¤è¤Ã¤Æ´ÉÍý¤µ¤ì¤Æ¤ª¤ê¡¢¸Æ¤Ó½Ð¤·Â¦¤ÇÊѹ¹¤·¤¿¤ê²òÊü¤·¤¿¤ê¤·¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
     ÆþÎϥ᥽¥Ã¥É¤¬ÊÑ¿ô¤ò°ìÀÚ»ÈÍѤ·¤Æ¤Ê¤±¤ì¤Ð¡¢@c NULL ¤òÊÖ¤¹¡£  */