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;
}
}
{
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 += "\\";
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);
}
}
}