*** empty log message ***
[m17n/m17n-lib.git] / src / input.c
index 85aca27..6de2311 100644 (file)
@@ -78,7 +78,7 @@
 
 /*=*/
 
-/***ja
+/***oldja
     @addtogroup m17nInputMethod
     @brief ÆþÎϥ᥽¥Ã¥ÉÍÑAPI
 
@@ -160,6 +160,8 @@ static MSymbol Minit, Mfini;
 /** Symbols for key events.  */
 static MSymbol one_char_symbol[256];
 
+static MSymbol M_key_alias;
+
 /** Structure to hold a map.  */
 
 struct MIMMap
@@ -1345,11 +1347,17 @@ handle_key (MInputContext *ic)
   MInputMethodInfo *im_info = (MInputMethodInfo *) ic->im->info;
   MInputContextInfo *ic_info = (MInputContextInfo *) ic->info;
   MIMMap *map = ic_info->map;
-  MIMMap *submap;
+  MIMMap *submap = NULL;
   MSymbol key = ic_info->keys[ic_info->key_head];
   int i;
 
-  submap = (map->submaps ? mplist_get (map->submaps, key) : NULL);
+  if (map->submaps)
+    {
+      submap = mplist_get (map->submaps, key);
+      if (! submap && (key = msymbol_get (key, M_key_alias)) != Mnil)
+       submap = mplist_get (map->submaps, key);
+    }
+
   if (submap)
     {
       mtext_cpy (ic->preedit, ic_info->preedit_saved);
@@ -1774,15 +1782,16 @@ minput__init ()
   Minit = msymbol ("init");
   Mfini = msymbol ("fini");
 
+  M_key_alias = msymbol ("  key-alias");
+
   buf[0] = 'C';
   buf[1] = '-';
   buf[3] = '\0';
   for (i = 0, buf[2] = '@'; i < ' '; i++, buf[2]++)
     {
+      one_char_symbol[i] = msymbol (buf);
       if (key_names[i])
-       one_char_symbol[i] = msymbol (key_names[i]);
-      else
-       one_char_symbol[i] = msymbol (buf);
+       msymbol_put (one_char_symbol[i], M_key_alias,  msymbol (key_names[i]));
     }
   for (buf[2] = i; i < 127; i++, buf[2]++)
     one_char_symbol[i] = msymbol (buf + 2);
@@ -1794,15 +1803,14 @@ minput__init ()
   buf2[1] = '-';
   for (buf[4] = '@'; i < 160; i++, buf[4]++)
     {
+      one_char_symbol[i] = msymbol (buf);
       if (key_names[i - 128])
        {
          strcpy (buf2 + 2, key_names[i - 128]);
-         one_char_symbol[i] = msymbol (buf2);
+         msymbol_put (one_char_symbol[i], M_key_alias,  msymbol (buf2));
        }
-      else
-       one_char_symbol[i] = msymbol (buf);
     }
-  for (buf[4] = i - 128; i < 255; i++, buf[2]++)
+  for (buf[4] = i - 128; i < 255; i++, buf[4]++)
     one_char_symbol[i] = msymbol (buf + 2);
   one_char_symbol[i] = msymbol ("M-Delete");
 
@@ -1910,7 +1918,7 @@ MSymbol Minput_toggle;
     dependent arguments $ARG of the functions whose name begin with
     "minput_" are all ignored.  */
 
-/***ja
+/***oldja
     @brief ÆâÉôÆþÎϥ᥽¥Ã¥ÉÍѥǥե©¥ë¥ÈÆþÎϥɥ饤¥Ð
 
     ÆþÎϥɥ饤¥Ð minput_default_driver ¤ÏÆâÉôÆþÎϥ᥽¥Ã¥ÉÍѤΥǥե©¥ë
@@ -1968,7 +1976,7 @@ MSymbol Minput_driver;
     $ARG is set in the member @c arg of the structure MInputMethod so
     that the input driver can refer to it.  */
 
-/***ja
+/***oldja
     @brief ÆþÎϥ᥽¥Ã¥É¤ò¥ª¡¼¥×¥ó¤¹¤ë     
 
     ´Ø¿ô mim_open () ¤Ï¸À¸ì $LANGUAGE ¤È̾Á° $NAME ¤ËŬ¹ç¤¹¤ëÆþÎϥ᥽¥Ã
@@ -2036,7 +2044,7 @@ minput_open_im (MSymbol language, MSymbol name, void *arg)
     The minput_close_im () function closes the input method $IM, which
     must have been created by minput_open_im ().  */
 
-/***ja
+/***oldja
     @brief ÆþÎϥ᥽¥Ã¥É¤ò¥¯¥í¡¼¥º¤¹¤ë
 
     ´Ø¿ô minput_close_im () ¤Ï¡¢ÆþÎϥ᥽¥Ã¥É $IM ¤ò¥¯¥í¡¼¥º¤¹¤ë¡£¤³¤Î
@@ -2065,7 +2073,7 @@ minput_close_im (MInputMethod *im)
     If an input context is successfully created, minput_create_ic ()
     returns a pointer to it.  Otherwise it returns @c NULL.  */
 
-/***ja
+/***oldja
     @brief ÆþÎÏ¥³¥ó¥Æ¥¯¥¹¥È¤òÀ¸À®¤¹¤ë
 
     ´Ø¿ô minput_create_ic () ¤ÏÆþÎϥ᥽¥Ã¥É $IM ¤ËÂбþ¤¹¤ëÆþÎÏ¥³¥ó¥Æ¥¯
@@ -2118,7 +2126,7 @@ minput_create_ic (MInputMethod *im, void *arg)
     callback functions corresponding to #Minput_preedit_done,
     #Minput_status_done, and #Mcandidate_done in this order.  */
 
-/***ja
+/***oldja
     @brief ÆþÎÏ¥³¥ó¥Æ¥¯¥¹¥È¤òÇ˲õ¤¹¤ë
 
     ´Ø¿ô minput_destroy_ic () ¤Ï¡¢ÆþÎÏ¥³¥ó¥Æ¥¯¥¹¥È $IC ¤òÇ˲õ¤¹¤ë¡£¤³
@@ -2158,7 +2166,7 @@ minput_destroy_ic (MInputContext *ic)
     the caller should handle the key, for instance, by calling the
     function minput_lookup () with the same $KEY.  */
 
-/***ja
+/***oldja
     @brief ÆþÎÏ¥­¡¼¤Î¥Õ¥£¥ë¥¿¥ê¥ó¥°¤ò¤¹¤ë
 
     ´Ø¿ô minput_filter () ¤ÏÆþÎÏ¥­¡¼ $KEY ¤òÆþÎÏ¥³¥ó¥Æ¥¯¥¹¥È $IC ¤Ë±þ
@@ -2215,7 +2223,7 @@ minput_filter (MInputContext *ic, MSymbol key, void *arg)
     returns 0.  Otherwise, returns -1, even in that case, some text
     may be produced in $MT.  */
 
-/***ja
+/***oldja
     @brief ÆþÎϥ᥽¥Ã¥É¤¬ºî¤Ã¤¿¥Æ¥­¥¹¥È¤Î³ÍÆÀ
 
     ´Ø¿ô minput_lookup () ¤ÏÆþÎÏ¥³¥ó¥Æ¥¯¥¹¥È $IC Ãæ¤Î¥Æ¥­¥¹¥È¤ò³ÍÆÀ¤¹
@@ -2262,7 +2270,7 @@ minput_lookup (MInputContext *ic, MSymbol key, void *arg, MText *mt)
     $MT may be NULL, in which case, the input method can't get
     information about the text around the spot.  */
 
-/***ja
+/***oldja
     @brief ÆþÎÏ¥³¥ó¥Æ¥¯¥¹¥È¤Î¥¹¥Ý¥Ã¥È¤òÀßÄꤹ¤ë
 
     ´Ø¿ô minput_set_spot () ¤Ï¡¢ÆþÎÏ¥³¥ó¥Æ¥¯¥¹¥È $IC ¤Î¥¹¥Ý¥Ã¥È¤ò¡¢ºÂ