+
+ static internal Dictionary<MSymbol,Predefined> predefined_markers;
+
+ static Marker ()
+ {
+ predefined_markers = new Dictionary<MSymbol,Predefined> ();
+ MSymbol[] symlist = new MSYmbol[] {"@<", "@>", "@-", "@+", "@[", "@]",
+ "@0", "@1", "@2", "@3", "@4",
+ "@5", "@6", "@7", "@8", "@9" };
+ foreach (MSymbol s in strline)
+ predefined_markers[s] = new Predefined (s);
+ }
+
+ public static Marker Get (MInputContext ic, MSymbol name)
+ {
+ Marker m;
+
+ if (predefined_markers.TryGetValue (name, out m))
+ return m;
+ if (name.Name[0] == '@')
+ throw new Exception ("Invalid marker name: " + name);
+ m = (Marker) ic->markers.Get (name);
+ if (m == null)
+ {
+ m = new Named (name);
+ ic->markers.Put (name, m);
+ }
+ return m;
+ }