*** empty log message ***
[m17n/m17n-lib-cs.git] / MInputMethod.cs
index d99c609..258c929 100644 (file)
@@ -25,7 +25,8 @@ namespace M17N.Input
     public static Callback GetSurroundingText;
     public static Callback DeleteSurroundingText;
 
-    internal static Xex.Domain im_domain = new Xex.Domain (null);
+    internal static Xex.Domain im_domain
+      = new Xex.Domain ("input-method", null);
     private static MSymbol Minput_method = "input-method";
     private static MSymbol Mdescription = "description";
     private static MSymbol Mvariable = "variable";
@@ -559,7 +560,10 @@ namespace M17N.Input
          return ic.preedit[Position (ic)];
        }
 
-      public override string ToString () { return name.Name; }
+      public override string ToString ()
+      {
+       return "<marker>" + name.Name + "</marker>";
+      }
 
       public static Xex.TermValue parser (Xex.Domain domain, XmlNode node)
       {
@@ -1207,7 +1211,7 @@ namespace M17N.Input
     }
 
     // Instance members
-    internal Xex.Domain domain = new Xex.Domain (im_domain, null);
+    internal Xex.Domain domain;
 
     protected LoadStatus load_status = LoadStatus.None;
     protected MDatabase.Tag tag;
@@ -1259,6 +1263,7 @@ namespace M17N.Input
     private MInputMethod (MDatabase.Tag tag)
     {
       this.tag = tag;
+      domain = new Xex.Domain (tag[1].Name, im_domain, null);
     }
 
     // Instance Properties
@@ -1858,7 +1863,10 @@ namespace M17N.Input
          if (! plist.IsPlist)
            throw new Exception ("Invalid cond args: " + plist);
          MPlist p = plist.Plist;
-         List<Xex.Term> arg = new List<Xex.Term> (parse_actions (p, false));
+         List<Xex.Term> arg = new List<Xex.Term> ();
+         arg.Add (parse_action (p, true));
+         for (p = p.next; ! p.IsEmpty; p = p.next)
+           arg.Add (parse_action (p, false));
          args[i] = new Xex.Term (arg);
        }
       return new Xex.Term (domain, Qcond, args);
@@ -1995,7 +2003,11 @@ namespace M17N.Input
            }
        }
       else if (plist.IsSymbol)
-       return new Xex.Term (domain, (Xex.Symbol) plist.Symbol.Name);
+       {
+         if (plist.Symbol.Name[0] == '@')
+           return parse_char_at (plist.Symbol);
+         return new Xex.Term (domain, (Xex.Symbol) plist.Symbol.Name);
+       }
       else if (plist.IsMText)
        return (as_funarg ? new Xex.Term ((string) plist.Text)
                : parse_insert (plist));
@@ -2334,15 +2346,11 @@ namespace M17N.Input
        candidates = null;
        candidate_show = false;
 
-       state = im.initial_state;
-       prev_state = null;
+       state = prev_state = null;
        state_preedit.Del ();
-       state_key_head = 0;
        state_var_values = state_initial_var_values;
        state_pos = 0;
-
-       keymap = im.initial_state.keymap;
-       keys.keyseq.Clear ();
+       shift (im.initial_state);
 
        preceding_text.Del ();
        following_text.Del ();
@@ -2628,7 +2636,7 @@ namespace M17N.Input
            prev_state = this.state;
          }
        save_state ();
-       if (this.state.title != state.title)
+       if (this.state == null || this.state.title != state.title)
          this.changed |= ChangedStatus.StateTitle;
        this.state = state;
        keymap = state.keymap;
@@ -2640,7 +2648,7 @@ namespace M17N.Input
            && ! im.Open ())
          throw new Exception ("Openging " + im.tag + " failed");
        this.im = im;
-       domain = new Xex.Domain (im.domain, this);
+       domain = new Xex.Domain ("context", im.domain, this);
        state_initial_var_values = domain.SaveValues ();
        reset ();
        active = true;