*** empty log message ***
[m17n/m17n-lib-cs.git] / MSymbol.cs
index 96ff477..fe2a698 100644 (file)
@@ -10,13 +10,15 @@ namespace M17N.Core
 
     private class MSymbolData
     {
-      public string name;
-      public object value;
-      public MPlist plist;
+      public readonly string Name;
+      public readonly MTextProperty.Flags Flags;
+      public object Value;
+      public MPlist Plist;
 
-      public MSymbolData (string name)
+      public MSymbolData (string name, MTextProperty.Flags flags)
       {
-       this.name = name;
+       Name = name;
+       Flags = flags;
       }
     }
 
@@ -33,18 +35,34 @@ namespace M17N.Core
     {
       if (! pool.ContainsKey (name))
        {
-         data = new MSymbolData (name);
+         data = new MSymbolData (name, MTextProperty.Flags.None);
          pool.Add (name, data);
        }
       else
        data = (MSymbolData) pool[name];
     }
 
+    public MSymbol (string name, MTextProperty.Flags flags)
+    {
+      if (! pool.ContainsKey (name))
+       {
+         data = new MSymbolData (name, flags);
+         pool.Add (name, data);
+       }
+      else
+       {
+         if (((MSymbolData) pool[name]).Flags != flags)
+           throw new ArgumentException ("Invalid MTextProperty.Flags");
+       }
+    }
+
+    public MTextProperty.Flags TextPropertyFlags { get { return data.Flags; } }
+
     public override string ToString ()
     {
       string str = "";
 
-      foreach (char c in data.name)
+      foreach (char c in data.Name)
        {
          if (c == '\\' || c == ' ' || c == '\'' || c == '\"' || c == ':')
            str += "\\";
@@ -76,24 +94,24 @@ namespace M17N.Core
 
     public override int GetHashCode ()
     {
-      return (data.name.GetHashCode ());
+      return (data.Name.GetHashCode ());
     }
 
     public MPlist Find (MSymbol key)
     {
-      return (data.plist == null ? null : data.plist.Find (key));
+      return (data.Plist == null ? null : data.Plist.Find (key));
     }
 
     public object Get (MSymbol key)
     {
-      return (data.plist == null ? null : data.plist.Get (key));
+      return (data.Plist == null ? null : data.Plist.Get (key));
     }
 
     public object Put (MSymbol key, object val)
     {
-      if (data.plist == null)
-       data.plist = new MPlist ();
-      return data.plist.Put (key, val);
+      if (data.Plist == null)
+       data.Plist = new MPlist ();
+      return data.Plist.Put (key, val);
     }
   }
 }