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;
}
}
private MSymbolData data;
- static public MSymbol nil = new MSymbol ("nil");
- static public MSymbol t = new MSymbol ("t");
+ public static MSymbol nil = new MSymbol ("nil");
+ public static MSymbol t = new MSymbol ("t");
+ public static MSymbol symbol = new MSymbol ("symbol");
+ public static MSymbol mtext = new MSymbol ("mtext");
+ public static MSymbol plist = new MSymbol ("plist");
+ public static MSymbol integer = new MSymbol ("integer");
public MSymbol (string name)
{
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 override string ToString () { return data.name; }
-
- public override bool Equals (Object sym)
+ public MSymbol (string name, MTextProperty.Flags flags)
{
- return (this.data == ((MSymbol) sym).data);
+ 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 override int GetHashCode ()
+ public MTextProperty.Flags TextPropertyFlags { get { return data.Flags; } }
+
+ public override string ToString ()
{
- return (data.name.GetHashCode ());
+ string str = "";
+
+ foreach (char c in data.Name)
+ {
+ if (c == '\\' || c == ' ' || c == '\'' || c == '\"' || c == ':')
+ str += "\\";
+ str += c;
+ }
+ return str;
}
public static bool operator== (MSymbol sym1, MSymbol sym2)
{
- return ((object) sym1.data == (object) sym2.data);
+ if (System.Object.ReferenceEquals(sym1, sym2))
+ return true;
+ if (((object) sym1 == null) || ((object) sym2 == null))
+ return false;
+ return sym1.data == sym2.data;
}
public static bool operator!= (MSymbol sym1, MSymbol sym2)
{
- return ((object) sym1.data != (object) sym2.data);
+ return ! (sym1 == sym2);
+ }
+
+ public override bool Equals (object sym)
+ {
+ if (sym == null)
+ return false;
+ return (this.data == ((MSymbol) sym).data);
+ }
+
+ public override int GetHashCode ()
+ {
+ return (data.Name.GetHashCode ());
+ }
+
+ public MPlist Find (MSymbol key)
+ {
+ return (data.Plist == null ? null : data.Plist.Find (key));
}
- public object get (MSymbol 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)
+ 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);
}
}
}